Какой набор сценариев ffmpeg мне нужен, чтобы получить HTML5-совместимое «Видео для всех»?

12

Какой список команд я должен выполнить в ffmpeg / mencoder / some_other_CLI_app, чтобы получить видео во всех нужных форматах, чтобы использовать Video for Everybody ?

т.е. есть ли тонкость, которая мешает механическому обучению, которое говорит

VIDEO=video.mp4
TYPE=$(ffmpeg --find-information-about-the-video ... )
ffmpeg ... > video.mov
ffmpeg ... > video.flv
ffmpeg ... > video.webm
ffmpeg ... > video.h.264
...

Затем скопируйте и вставьте код «Видео для всех» на свою страницу?

Моя цель - разместить на моей личной веб-странице встроенное видео. HTML5 с резервной версией флэш-памяти предпочтительнее, поэтому самый простой способ - это Video for Everybody. Но эта страница оставляет читателю самую сложную часть, кодирующую видео во все различные форматы, чтобы разобраться, прочитав длинную и полную статью о видеоформатах . Конечно, это не обязательно. Я мог бы предоставить список команд для пользователя, чтобы слепо конвертировать аудио файл в кучу разных форматов. Надеюсь, гуру ffmpeg может сделать то же самое для видео.

Джон Бабер-Лусеро
источник
1
Небольшой комментарий к вашим примерам псевдокода: нет .movвидео для HTML5 и также нет h.264расширения. Там есть .264 , что сырье Приложение B потоковый для блоков NAL. Кодирование видео не является ракетостроением, но вам нужно потратить немного времени, чтобы ознакомиться с концепциями.
slhck

Ответы:

21

Примечание. Этот ответ был сильно отредактирован с момента его первоначальной публикации. Сейчас 2017 год; потоковая передача работает иначе, чем раньше. Это руководство предполагает простую последовательную загрузку одного видеопотока в одном заданном разрешении - без адаптивной потоковой передачи.

Требования

Прежде всего, убедитесь, что вы скачали последнюю ffmpegверсию (загрузите статическую сборку; не звоните apt-get install ffmpegили подобное). В идеале, скомпилируйте это самостоятельно . Это не займет много времени.

Чтобы создавать видео, поддерживаемые большинством браузеров, всегда проверяйте последнюю таблицу совместимости . Не существует единого кодека / формата, который работает в каждом браузере, но если вы сгенерируете H.264 в MP4 и VP9 в WebM с соответствующим аудиокодеком, у вас будет поддержка Chrome, Firefox, Safari и некоторых версий IE.

WebM (VP9 / Vorbis)

Следуйте рекомендациям в руководстве FFmpeg VP9 и используйте подход двухпроходного кодирования с ограничениями скорости:

ffmpeg -y -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 1 -f webm /dev/null && \
ffmpeg -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 2 output.webm

Целевой битрейт зависит от вашего разрешения, частоты кадров, типа контента и того, какое качество вы хотите. 2,5 Мбит / с должны быть хорошим компромиссом для HD-видео со скоростью 30 кадров в секунду. См. Это руководство Google для некоторых рекомендаций.

MP4 (H.264 / AAC)

Следуйте рекомендациям руководства FFmpeg H.264 и используйте подход двухпроходного кодирования с ограничениями скорости:

ffmpeg -y -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 1 -c:a aac -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 2 -c:a aac -movflags faststart output.mp4

Здесь целевой битрейт должен быть примерно на 50% выше, чем для видео VP9, ​​поскольку H.264 не так эффективен. Добавьте -movflags faststartопцию ко второму проходу, чтобы ускорить первоначальную загрузку видео.

Для настройки параметров звука см. Руководство по кодированию AAC .

slhck
источник
1
Версия одного из ваших абзацев 2013-12-19 обрывается в середине предложения. «Аудио по умолчанию снова 128 кбит / с, но вы можете установить q: a для переменной скорости передачи битов, где значения варьируются от 0 до 500. 100 по умолчанию и выше означает лучше. Если»
Алан Де Смет
@slhck имеет большой смысл, но мои два цента в том, что вы отбрасываете Ogg и заменяете его mpegts / m3u8 для поддержки всех устройств iOS или тех, которые принимают HLS. Вы можете повторно использовать файлы .mp4 и просто добавить обработку mpeg-ts в ffmpeg.
Пол Грегуар
@Mondain Действительно, но MPEG-TS / .m3u8 обычно не является HTML5-совместимым видео. Вам нужен сервер HLS, и вам нужно немного больше узнать о потоковой передаче, что на самом деле не входит в сферу этого вопроса.
Slhck
Хорошие моменты, но по моему опыту пока простой http-сервер может служить m3u8 для тега видео. Единственное, что обычно нужно сделать, это добавить mime-типы для m3u8 и ts в соответствующую конфигурацию сервера.
Пол Грегуар