แปลงวิดีโอเป็นขนาดหน้าจอคงที่โดยการครอบตัดและปรับขนาด


14

ฉันพยายามคิดออกเอง แต่ตัวเลือกมากมายทำให้ฉันงุนงง

ฉันต้องการใช้อย่างใดอย่างหนึ่งffmpegหรือmencoder(หรืออย่างอื่น แต่ทั้งสองฉันรู้ว่าฉันกำลังทำงาน) เพื่อแปลงวิดีโอที่เข้ามาเป็นขนาดหน้าจอคงที่

หากวิดีโอนั้นกว้างหรือสั้นเกินไปก็ให้ทำการครอบตัดวิดีโอไปที่กึ่งกลาง หากไม่ใช่ขนาดที่เหมาะสมให้ปรับขนาดขึ้นหรือลงเพื่อทำให้ขนาดหน้าจอคงที่

สิ่งสุดท้ายที่แน่นอนที่ฉันต้องการคือ 720x480 ใน XVid AVI พร้อมแทร็กเสียง MP3

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

ทุกคนสามารถบอกบรรทัดคำสั่งให้เรียกใช้ - หรืออย่างน้อยก็ทำให้ฉัน / ส่วนใหญ่ของวิธีการที่นั่น? หากจำเป็นต้องมีหลายบรรทัดคำสั่ง (เรียกใช้ X เพื่อรับความละเอียดทำคำนวณนี้แล้วเรียกใช้ Y กับผลลัพธ์ของการคำนวณนั้น) ฉันสามารถสคริปต์ที่

คำตอบ:


22

สิ่งนี้ควรทำงานกับพารามิเตอร์ที่เหมาะสมสำหรับแต่ละกรณี:

หมายเหตุ: คำตอบดั้งเดิมถูกโพสต์ในลิงค์นี้: ฉันจะครอบตัดวิดีโอด้วย ffmpeg ได้อย่างไร ซึ่งโพสต์โดยฉันและแก้ไขหลายครั้งเพื่ออัปเดตเป็นตัวเลือกใหม่ล่าสุดใน ffmpeg เวอร์ชันล่าสุด ขอบคุณมากที่slhck , โจนาธาน , Anton Rudeshko , LordNeckbeardและผู้ดูแลรักษาในอนาคต


ใน FFmpeg เวอร์ชันล่าสุดให้ใช้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การพัฒนามีความกระฉับกระเฉงและไม่มีเหตุผลที่จะใช้โบราณวัตถุ


คะแนนพิเศษสำหรับการดูตัวอย่างด้วย ffplayซึ่งจะทำให้การใช้ffmpegการวิดีโอพืชที่สามารถทำงานได้ขนาดหน้าจอในการปฏิบัติ
SpeedCoder5
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.