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