วิธีปรับขนาดวิดีโอให้เล็กลงด้วย FFmpeg


101

เป็นไปได้ไหมที่จะปรับขนาดวิดีโอของฉันให้เล็กลงด้วย FFmpeg

ฉันมีขนาดวิดีโอดั้งเดิมที่ 1024x576 ตอนนี้ฉันต้องการปรับขนาดวิดีโอเป็น 720x480 เพื่อให้ตรงกับความต้องการ

ฉันจะทำสิ่งนี้ได้อย่างไร


ffmpegอาจเลิกใช้ดูที่นี่และที่นี่
บ๊องเกี่ยวกับ natty

13
@nuttyaboutnatty ข้อความ "คัดค้าน" นำไปใช้เฉพาะกับเก่า, ตาย, ปลอม " ffmpeg" จาก Libav fork ไม่ใช่ffmpegจาก FFmpeg ซึ่งกลับมาใน 15.04
llogan

คำตอบ:


163

ตัวอย่างพื้นฐานที่สุดคือ:

ffmpeg -i input.avi -s 720x480 -c:a copy output.mkv

ใช้กรองจะให้ความยืดหยุ่นมากขึ้น:scale

ffmpeg -i input.avi -filter:v scale=720:-1 -c:a copy output.mkv

-1จะบอก ffmpeg ที่จะเลือกความสูงที่ถูกต้องในความสัมพันธ์โดยอัตโนมัติเพื่อให้ความกว้างที่จะรักษาอัตราส่วน -1สามารถใช้สำหรับความกว้างหากคุณให้ความสูงที่กำหนด


หนึ่งในข้อเสียของขนาดเมื่อใช้libx264เป็นที่เข้ารหัสนี้ต้องแม้ค่าและขนาดโดยอัตโนมัติอาจเลือกค่าแปลก ๆ width or height not divisible by 2ที่เกิดขึ้นในข้อผิดพลาด: คุณสามารถบอกสเกลให้เลือกค่าคู่สำหรับความสูงที่กำหนด (720 ในตัวอย่างนี้):

scale="trunc(oh*a/2)*2:720"

... หรือความกว้างที่กำหนด (1280 ในตัวอย่างนี้):

scale="1280:trunc(ow/a/2)*2"

โปรดทราบว่าการสร้าง ffmpeg ของคุณอาจบ่นเกี่ยวกับการไม่รู้จัก-cหรือ-filterตัวเลือกต่างๆ scaleนอกจากนี้ยังอาจไม่สนับสนุน ในกรณีที่คุณควรใช้ ffmpeg ใหม่ที่คุณสามารถดาวน์โหลดเป็นสร้างแบบคงที่หรือรวบรวมตัวเอง


1
ฉันพยายามffmpeg -i output.mkv -filter:v scale=720:-1 -acodec copy -threads 12 output_shrink.mkv(ใน ffmpeg เวอร์ชั่น 0.8.6-6: 0.8.6-0ubuntu0.12.10.1) แต่ได้รับข้อผิดพลาดUnrecognized option 'filter:v'
doug65536

6
หลังจากขุดผ่านหน้าคนสำหรับ ffmpeg หลายครั้งที่ผมพบว่าแทนตัวเลือกที่ดูเหมือนจะถูกเปลี่ยนไป-filter:v -vf
doug65536

2
@ doug65536 -filter:vและ-vfใช้ได้ทั้งคู่ เวอร์ชั่นอูบุนตูที่คุณใช้นั้นใช้งานไม่ได้และล้าสมัย - ไม่ใช่ FFmpeg จริงๆffmpegแต่เป็นไบนารีที่จัดทำโดย Libav (ส้อม FFmpeg) ภายใต้ชื่อเดียวกัน
slhck

1
@MightyPork อาจ ffmpeg build ของคุณล้าสมัย - มีปัญหาอะไรเกิดขึ้นบ้าง ยังไงก็ตามสิ่งนี้ช่วยฉัน (ด้วยffmpeg version 2.4.10) ในการลดขนาดของวิดีโอขนาดใหญ่เพื่อเพิ่มพื้นที่ว่าง - ขอบคุณ!
Wilf

4
'-c' สั้นสำหรับ -codec, ': a' ระบุสตรีมเสียง 'คัดลอก' ระบุตัวแปลงสัญญาณคัดลอกซึ่งคัดลอกสตรีม (ในกรณีนี้เสียง) โดยไม่ต้องเข้ารหัส โดยทั่วไปกระแสเสียงจะผ่าน นี่เป็นเรื่องปกติเมื่อคุณจัดการวิดีโอสตรีมเท่านั้น
jimhark

14

ฉันใช้คำสั่งต่อไปนี้เพื่อทำการ rescaling สำหรับวิดีโอและรูปภาพ สำหรับความกว้างและความสูงคงที่ -

ffmpeg -i input.avi -vf scale="720:480" output.avi

และถ้าคุณต้องการรักษาอัตราส่วนเพียงแค่ให้ความสูงเป็น -1 และมันจะปรับขนาดโดยอัตโนมัติตามความกว้าง -

ffmpeg -i input.avi -vf scale="720:-1" output.avi

หากคุณต้องการปรับขนาดตามขนาดอินพุตเช่น สมมติว่าลดความกว้าง / ความสูงครึ่งหนึ่งที่คุณทำได้ -

ffmpeg -i input.avi -vf scale="iw/1:ih/2" output.avi

บันทึก :

iw : input width
ih : input height

บิวด์แบบคงที่สามารถดาวน์โหลดได้จาก - https://johnvansickle.com/ffmpeg/

เอกสารประกอบ: https://ffmpeg.org/ffmpeg.html#filter_005foption


ไม่ทำงาน. ติดอยู่ที่ handler_name: Sound Handle
Rushi M Thakker

ฉันได้คุณภาพวิดีโอที่แย่มากด้วยคำสั่งนี้ ดีกว่ามากถ้าฉันสร้าง output.mp4 ไม่ใช่ avi ดังนั้นเรื่องการขยาย
sekrett
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.