У меня есть фильм в формате MP4 с видеопотоком и аудиопотоком.
На выходе я хочу получить файл MP4, содержащий:
- тот же видеопоток
- тот же аудиопоток
- тот же видеопоток с более низкой скоростью передачи данных
Может ли кто-нибудь подсказать мне соответствующую команду ffmpeg?
решение1
В принципе, это делается так. Кодировать с пониженным битрейтом без звука. Конечно, это предполагает, что у вас видео H.264. Проверьтеруководство по кодированиюдля получения дополнительной информации.
ffmpeg -i input.mp4 -c:v libx264 -b:v 700k -an lower.mp4
Затем объедините ваши файлы:
ffmpeg -i input.mp4 -i lower.mp4 -c copy -map 0:v -map 0:a -map 1:v output.mp4
Это позволит взять первые видео- и аудиопотоки первого файла, а также первый видеопоток второго файла и скопировать их в выходной контейнер.
Опять же, как упоминает @trikly, в этом нет никаких реальных преимуществ. Тем более, что вы пометили свой вопрос как «видеопоток», обратите внимание, что, добавляя еще один поток внутри контейнера, вы увеличиваете размер файла, который должен загрузить клиент, а не просто предлагаете меньшее представление, что обычно требуется для сред с ограниченной пропускной способностью.
Реальным решением было бы сделать что-то вродеадаптивная потоковая передача, либо с MPEG-DASH, либо с HLS*. ffmpeg может создавать сегментированные файлы, которые можно использовать для потоковой передачи DASH и HLS, но вам также необходимо сгенерировать файлы метаинформации и т. д. И вам нужен клиент, поддерживающий DASH или HLS.
Если это слишком сложно, вам следует просто предложить видео в двух разных форматах, каждый со своей ссылкой.
*Масштабируемое кодирование видеобыл также разработан с аналогичной целью, но в наши дни им практически никто не пользуется.