วิธี จำกัด ขนาดไฟล์ด้วย ffmpeg


10

ฉันต้องการที่จะเข้ารหัสวิดีโอที่มีความยาว 60 วินาทีเพื่อเป้าหมายสูงสุดขนาด 10 MB

มีสองวิธีที่ฉันรู้ มีคำอธิบายหนึ่งใน FFMPEG-Wiki และอีกอันที่ฉันพบในเอกสาร น่าเสียดายที่ฉันไม่พบคำอธิบายว่าควรใช้วิธีใดเมื่อใด

มีวิธีใดที่แนะนำหรือไม่ หากไม่เป็นเช่นนั้น Upside / downside ของแต่ละวิธีคืออะไร

1) คำนวณและตั้งค่าบิตเรตให้ตรงกับความยาวของวิดีโอตามที่อธิบายไว้ในffmpeg-wiki

(10 MB * 8192 [แปลงเมกะไบต์เป็นกิโลบิต]) / 60 วินาที = ~ 1365 kbits / s บิตเรตรวม 1365k - 128k (บิตเรตเสียงที่ต้องการ) = บิตวิดีโอ 1237k

ffmpeg -y -i input -c:v copy -preset medium -b:v 1237k -pass 1 -c:a copy -b:a 128k -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -preset medium -b:v 1237k -pass 2 -c:a libfdk_aac -b:a 128k output.mp4

2) ใช้-fs พารามิเตอร์และให้ ffmpeg หามัน

ffmpeg -i input -c:v copy -c:a copy -preset medium -crf 23 -fs 10485760 output.mp4

1
ในตัวอย่างที่ 1 ของคุณขั้นตอนแรกที่ควรใช้เป็นlibx264 c:vในfsตัวอย่างคุณไม่ได้แปลงรหัสวิดีโอเนื่องจาก-c:v copyใช้แล้ว ดังนั้นpresetและcrfยังไม่มีผลกระทบใด ๆ
Gyan

สิ่งนี้มีประโยชน์สำหรับฉัน: stackoverflow.com/a/34547102/470749
Ryan

คำตอบ:


11

fsพารามิเตอร์จะหยุดการเข้ารหัสเมื่อมันกระทบความคุ้มค่า ดังนั้นถ้าผลลัพธ์กระทบกับ10MBเครื่องหมายขณะที่เข้ารหัส 15 วินาทีนั่นคือระยะเวลาของไฟล์เอาต์พุตของคุณ

หากคุณต้องการให้แน่ใจว่าไฟล์ทั้งหมดถูกเข้ารหัส แต่ไม่ข้ามขนาดเป้าหมายที่กำหนดไว้ให้ใช้วิธีบิตเรต เพื่อรองรับค่าใช้จ่าย muxing และข้อมูลอื่น ๆ ภายในขนาดเป้าหมายให้ตั้งค่าบิตเรตวิดีโอของคุณให้ต่ำลงเล็กน้อยโดยพูด 1-2%

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