Як обмежити розмір файлу за допомогою ffmpeg?


10

Я хочу кодувати відео, яке має тривалість 60 секунд, до цільового або максимального розміру 10 Мб .

Я знаю два підходи. Одне пояснено у FFMPEG-Wiki, а інше я знайдено в документації. На жаль, я не знайшов пояснення щодо того, коли використовувати який метод.

Чи рекомендується будь-який із цих методів? Якщо ні, то які переваги / недоліки кожного методу?

1) Обчисліть і встановіть Біт, щоб він відповідав довжині відео, як це пояснено у ffmpeg-wiki

(10 МБ * 8192 [перетворює МБ в кілобіт]) / 60 секунд = ~ 1365 кбіт / с загальний бітрейт 1365 к - 128 к (бажаний бітрейт аудіо) = 1237 кбіт бітрейт відео

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
У вашому першому прикладі перший крок також слід використовувати libx264як c:v. У fsприкладі ви не перекодуєте відео, оскільки -c:v copyвоно використовується. Отже, presetі crfтакож не мають жодного ефекту.
Gyan

Це було для мене корисно: stackoverflow.com/a/34547102/470749
Ryan

Відповіді:


11

fsПараметр зупинить закодувати , коли він досягає його значення. Отже, якщо висновок потрапляє до 10MBпозначки, кодуючи 15-ту секунду, то це тривалість вашого вихідного файлу.

Якщо ви хочете переконатися, що весь файл закодований, але він не перетинає встановлений цільовий розмір, то використовуйте метод бітрейта. Щоб розмістити накладні та інші дані в межах цільового розміру, встановіть бітрейт відео трохи нижче, скажімо, на 1-2%

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.