Кодировать видео с изменением скорости передачи данных с помощью FFmpeg
Я хотел бы закодировать 30-минутное видео с помощью ffmpeg. Я могу добиться этого с помощью
ffmpeg -i in.mp4 -vcodec libvpx -vb 1024k -keyint_min 150 -g 150 -an out.webm
Но я бы хотел кодировать разные сегменты видео с разной скоростью, а не использовать постоянную скорость 1024 КБ. Это возможно?
Я знаю, во сколько они должны переключать кодировку. Например, скажем, 5 минут видео, я хочу скорость кодирования 1024k, а следующие 5 минут я в порядке с битрейтом 250k. Я не хочу использовать VBR или я не хочу вырезать видео и кодировать их с разной скоростью, а затем присоединять к ним.
Это возможно. Я прочитал справочную страницу для ffmpeg и увидел, что есть варианты
startime and time
Но я не уверен, как именно я могу это сделать, если предположить, что это возможно.
1 ответ
Но я бы хотел кодировать разные сегменты видео с разной скоростью, а не использовать постоянную скорость 1024 КБ. Это возможно?
Нет. Это просто не очень типичный вариант использования. Либо вам нужна постоянная скорость передачи данных (например, при потоковой передаче), либо требуется переменная скорость передачи данных (постоянное качество). В последнем случае кодер выберет подходящую скорость передачи битов, соответствующую вашим настройкам качества, или будет использовать предоставленные вами параметры квантования. См. Этот документ для режимов кодирования, поддерживаемых libvpx.
Я не хочу использовать VBR или я не хочу вырезать видео и кодировать их с разной скоростью, а затем присоединять к ним.
Вероятно, это был бы единственный способ сделать это. Вам нужно найти способ экспортировать необработанные видеопотоки VP8 (что возможно при ffmpeg … -f rawvideo out.webm
), соедините их вместе, а затем снова оберните их внутри контейнера WebM. Я не нашел рабочего решения для этого все же.
Или вы можете изменить исходный код кодировщика libvpx таким образом, чтобы он принимал изменение постоянной скорости передачи битов для каждого времени.
Я прочитал справочную страницу для ffmpeg и увидел, что есть варианты
startime and time
...
В FFmpeg таких опций нет. Есть -ss
параметр, который изменяет время начала процесса кодирования, и -t
Опция, которая указывает, как долго вы хотите кодировать FFmpeg. Но они полезны только для резки видео.