ฉันจะครอบตัดวิดีโอด้วย ffmpeg ได้อย่างไร


172

ฉันมีไฟล์ MP4 ของการบันทึกหน้าจอที่ฉันต้องครอบตัด ฉันจะทำสิ่งนี้ให้สำเร็จโดยไม่ต้องใช้เครื่องมือราคาแพงอย่าง Adobe Premier หรือ Final Cut ได้อย่างไร ฉันชอบffmpegเพราะฉันเคยใช้มาก่อน

คำตอบ:


264

ใช้cropตัวกรอง :

ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4

โดยที่ตัวเลือกมีดังนี้:

  • out_w คือความกว้างของสี่เหลี่ยมผืนผ้าเอาต์พุต
  • out_h คือความสูงของสี่เหลี่ยมผืนผ้าผลลัพธ์
  • xและyระบุมุมบนซ้ายของสี่เหลี่ยมออก

ภาพต้นฉบับ

ภาพต้นฉบับ
รูปภาพ 320x240 ต้นฉบับ

ตัวอย่างที่ 1

80x60

หากต้องการครอบตัดส่วน 80 × 60 ให้เริ่มจากตำแหน่ง (200, 100):

ffmpeg -i in.mp4 -filter:v "crop=80:60:200:100" -c:a copy out.mp4
  • เสียงถูกสตรีมคัดลอกในตัวอย่างนี้ดังนั้นหลีกเลี่ยงการเข้ารหัสอีกครั้ง

ตัวอย่างที่ 2

ไตรมาสล่างขวา

หากต้องการครอบตัดไตรมาสล่างขวา:

ffmpeg -i in.mp4 -filter:v "crop=in_w/2:in_h/2:in_w/2:in_h/2" -c:a copy out.mp4

นี่คือเช่นเดียวกับ:

ffmpeg -i in.mp4 -filter:v "crop=320/2:240/2:320/2:240/2" -c:a copy out.mp4

ซึ่งเหมือนกับ:

ffmpeg -i in.mp4 -filter:v "crop=240:120:240:120" -c:a copy out.mp4
  • คุณสามารถอ้างถึงขนาดภาพอินพุตด้วยin_wและin_hตามที่แสดงในตัวอย่างแรกนี้ ความกว้างและความสูงของการส่งออกนอกจากนี้ยังสามารถนำมาใช้กับและout_wout_h

ตัวอย่างที่ 3

20 พิกเซลจากด้านบนและ 20 จากด้านล่าง

ครอบตัด 20 พิกเซลจากด้านบนและ 20 จากด้านล่าง:

 ffmpeg -i in.mp4 -filter:v "crop=in_w:in_h-40" -c:a copy out.mp4
  • ตัวกรองจะจัดกึ่งกลางการครอบตัดโดยอัตโนมัติหากxและyถูกละเว้นเช่นในตัวอย่างนี้

แสดงตัวอย่าง

คุณสามารถทำการครอบตัด (heh heh) และดูตัวอย่างแบบสดๆด้วยffplay:

ffplay -i input -vf "crop=in_w:in_h-40"

วิธีนี้คุณสามารถทดลองและปรับการครอบตัดของคุณโดยไม่จำเป็นต้องเข้ารหัสดูทำซ้ำ

หมายเหตุ

  • crop เอกสารตัวกรอง

  • ตัวเข้ารหัสเริ่มต้นสำหรับ MP4 คือlibx264(วิดีโอ H.264) หรือmpeg4(วิดีโอ MPEG-4 ตอนที่ 2) ขึ้นอยู่กับffmpegโครงสร้างของคุณ ดูFFmpeg Wiki: คู่มือการเข้ารหัสวิดีโอ H.264สำหรับข้อมูลเพิ่มเติม

  • แทนที่จะครอบตัดและเข้ารหัสอีกครั้งให้ลองตัดเมื่อเล่น นี่เป็นไปได้กับผู้เล่นที่มีมูลค่าการใช้

  • โบราณffmpegสร้างมาใช้-croptop, -cropbottom, -cropleft, -croprightตัวเลือกแทนการcropกรอง หากเป็นกรณีนี้สำหรับคุณแล้วได้รับทันสมัย ffmpegการพัฒนามีความกระฉับกระเฉงและไม่มีเหตุผลที่จะใช้โบราณวัตถุ


2
ใช้งานได้กับ 'avconv' ตอนนี้
Joce

ฉันมี 1923x1080 และต้องการ 1920x1080 นี่เป็นคำยกย่องที่ฉันได้ลอง: /Users/kukodajanos/Workspace/ffmpeg -i /Users/kukodajanos/Desktop/video_640x480-2.mp4 -filter:v "crop=1920:1080:0:0" -c:a copy /Users/kukodajanos/Desktop/video_640x480-4.mp4แต่หนังต้นฉบับกลับมาแล้ว
János

@Joce JFYI avconv เป็นส่วนหนึ่งของ libav - ส้อมของ ffmpeg
andrybak

1
คุ้มค่าที่จะพูดถึงเทคนิคนี้ (พร้อมcropตัวกรอง) เข้ารหัสวิดีโออีกครั้งดูstackoverflow.com/questions/33378548/หากการเข้ารหัสใหม่มีความสำคัญกับคุณ
abernier

1
แก้ไขเพื่อเปลี่ยนค่าที่ล้าสมัย-filter:vไปเป็นจำนวนมากขึ้นและพิมพ์-vfได้ง่ายขึ้น ไชโย!
Elder Geek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.