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