Какая командная строка ffmpeg создает видео, более совместимое на всех устройствах?

15

Так что у меня есть пользователи, которые говорят, что видео H264 MP4 не воспроизводит звук на Apple iPad, и я изо всех сил пытаюсь заставить видео MP4 нормально воспроизводиться на Android тоже.

Есть две разные командные строки, какую командную строку я должен использовать.

-profile:v baseline -level 3.0

А также :

-vpre baseline

Что я должен использовать, чтобы он работал на всех устройствах?

Я также читал, что это может быть аудио битрейт мой текущий аудио битрейт

-ab 192k

Возможно я должен понизить это до

-ab 160k

Командная строка используется для кодирования аудио MP3 в файлы MP4.

"C:/server/ffmpeg/bin/ffmpeg.exe" -y -i Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/54bbf30bb11a0f6b9dc832114c26fd29.mp4 -strict experimental -acodec libmp3lame -ar 44100 -ac 2 -ab 192k -s 480x360 -aspect 16:9 -r 24000/1001 -vcodec libx264 -b:v 1000k -minrate 800k -maxrate 1000k -bufsize 800K -crf 18 -preset veryslow -f mp4 -threads 0 -movflags +faststart Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/98382d43d31d4ff91ea44cb2aa1bbc49.mp4 2>&1
C0nw0nk
источник

Ответы:

25

Сначала вы должны понять разницу между использованием профилей FFmpeg и опциями прямой командной строки. -vpreиспользует .ffpresetфайл, расположенный в /usr/share/ffmpeg/или где ffmpeg был установлен. Это серия пар " опция = значение" , и в вашем случае вам пришлось бы определять его самостоятельно (по крайней мере, я не знаю baselineпресета, поставляемого с ffmpeg).

Я бы рекомендовал не использовать пресеты, если вы сами не создали его и не знаете, для чего нужны параметры командной строки. Я использую ffmpeg уже много лет, и я никогда не использовал пресеты - мне это никогда не приходилось.

Типичная командная строка для генерации видео H.264, совместимого с большинством устройств:

ffmpeg -i <input> \
  -c:v libx264 -crf 23 -profile:v baseline -level 3.0 -pix_fmt yuv420p \
  -c:a aac -ac 2 -b:a 128k \
  -movflags faststart \
  output.mp4

Некоторые заметки:

  • H.264 / AAC - лучшая комбинация для широкой поддержки в HTML5. Браузерам, у которых нет декодеров H.264, также потребуется видео VP8 / Vorbis. Для некоторых примеров командной строки, смотрите этот ответ . Смотрите также страницу поддержки браузера в Википедии для других кодеков.

  • H.264 также хорошо работает на мобильных устройствах.

  • -profile:v baselineИ -level 3.0опции нужны только для старых мобильных устройств , которые не могут обрабатывать ресурсоемкие функции H.264. Обычно вы можете оставить их или использовать вместо этого -profile:v main.

  • CRF устанавливает качество (18–28 - приемлемый диапазон, более низкий - лучшее качество). Конечно, вы также можете использовать фиксированный битрейт с -b:v 1000kили аналогичным. Выберите битрейт, соответствующий разрешению видео. Некоторые маломощные устройства могут не справиться с излишне высокими битрейтами.

  • Этот -movflags faststartпараметр важен для потоковой передачи, поскольку он перемещает метаданные контейнера в начало файла, а не оставляет его в конце. Это позволит немедленно начать воспроизведение, а не ждать, пока файл загрузится полностью.

Однако все это сводится к поиску наименьшего общего знаменателя для всех целевых устройств, которые могут не всегда существовать. Конечно, вы не захотите использовать любой другой (то есть, хуже ) кодек, чем H.264. На самом деле, было бы нецелесообразно предлагать видео с базовой кодировкой клиентам, которые могут декодировать основной или высокий профиль. Вы бы поменяли качество на снижение сложности декодирования.

По моему опыту, устройства Android могут воспроизводить Baseline H.264 с аудио AAC-LC в контейнере MP4. У меня никогда не было проблем с этим. На самом деле, некоторые устройства могут воспроизводить и более высокие профили, хотя это официально не поддерживается. iOS обычно также поддерживает Baseline H.264, но вы также можете использовать профиль Main на некоторых устройствах. Смотрите этот пост (который немного устарел) для некоторых руководящих принципов.

Если у вас есть пользователи с проблемами воспроизведения, вам нужно выяснить, какое видео вызывает проблемы, и получить более подробную информацию о том, какое оборудование и программное обеспечение проигрывателя они используют. Тогда мы могли бы поговорить о поиске неисправностей в этом конкретном случае.

slhck
источник
1
Спасибо за такой подробный ответ, я продолжаю перечитывать его :) Также я кодирую с помощью -acodec libmp3lame -ab 160k, и пользователи, использующие устройства Apple Ipad, говорят, что они могут смотреть видео, но не слышать звук, поэтому я предполагаю, что это как-то связано с аудио кодек или битрейт. Пользователи Android и Windows говорят, что все в порядке, и у них есть аудио для видеопотока, поэтому я не уверен, почему использование libmp3lame вместо aac приведет к тому, что пользователи Apple не получат аудио к видео.
C0nw0nk
Я редко видел звук MP3, используемый в контейнерах MP4. Возможно, AAC - более безопасный выбор.
slhck
Ну, я использую только MP3, потому что я продолжал получать bit_rate, ошибки высоты ширины с aac. Я переключился на libmp3lame, и все эти ошибки прекратились, а затем пользователи Apple говорят, что у них нет звука, но все остальные могут смотреть один и тот же файл, и со звуком все в порядке на всех других устройствах, возможно, я нашел ошибку, которая знает :( И в соответствии с Apple MP3 должно быть хорошо developer.apple.com/library/mac/documentation/…
C0nw0nk
@ user2068371 Эта ссылка относится к транспортному потоку MPEG-2, а не к формату контейнера MP4.
Llogan
1
@ user2068371 У меня никогда не было проблем с MediaElementjs. H.264 и MP3 поддерживаются не во всех браузерах . В частности, для видео HTML5 всегда используйте H.264 / AAC и, возможно, VP8 / Vorbis в качестве запасного варианта. Если у вас есть проблемы с преобразованием AAC, задайте новый вопрос об этом и обязательно включите также полный вывод командной строки.
Slhck