1

В настоящее время у меня есть микрофон и веб-камера, подключенная к моему компьютеру. Я запускаю ffmpeg на CentOS 6.3.

Когда я пытаюсь записать видео без звука:

ffmpeg -y -f video4linux2 -t 15 -s 640x480 -r 25 -i /dev/video0 /home/irdb/Desktop/out2.mp4

он работает отлично, и я получаю хорошее видео. Однако, когда я пытаюсь запустить с аудио, включенным:

ffmpeg -y -f video4linux2 -t 15 -s 640x480 -r 25 -i /dev/video0 -f alsa -ar 22050 -ab 64k -ac 2 -i default /home/irdb/Desktop/out2.mp4

Выдает ошибки и печатает:

[NULL @ 0x1e33fc0] Codec is experimental but experimental codecs are not enabled,      see -strict -2
Output #0, mp4, to '/home/irdb/Desktop/out2.mp4':
Stream #0:0: Video: h264, yuv420p, 640x480, q=-1--1, 90k tbn, 25 tbc
Stream #0:1: Audio: none, 22050 Hz, 2 channels, flt, 128 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo -> libx264)
Stream #1:0 -> #0:1 (pcm_s16le -> aac)
Error while opening encoder for output stream #0:1 - maybe incorrect parameters such    as bit_rate, rate, width or height

Я предполагаю, что это связано с первой ошибкой, так как когда я использую что-то вроде mpg, все работает отлично. Однако я планирую потоковую трансляцию в реальном времени и хочу формат mp4, так как он в значительной степени поддерживается всеми браузерами (Firefox с резервной версией флэш-памяти).

Кто-нибудь знает, как заставить звук работать без дополнительной обработки (поскольку я хочу транслировать в реальном времени, а не записывать в файл в конце концов).

1 ответ1

5

Краткий ответ: добавьте -strict experimental (или псевдоним -strict -2) перед именем выходного файла.

Более длинный ответ: mp4 обычно содержит видео H.264 и аудио AAC. Для видео H.264 вы захотите закодировать его, используя лицензированный по лицензии GPL libx264 (что вы и делаете).

Есть несколько кодеров AAC, которые можно использовать с ffmpeg. Существует собственный кодировщик AAC ffmpeg, но он экспериментальный, и его качество не такое хорошее, как у других кодеров AAC. Экспериментальная опция -strict experimental может использоваться для ее включения. Кодер Фраунгофера libfdk_aac имеет высочайшее качество; он был выпущен в 2012 году в рамках выпуска исходного кода Android Jelly Bean под специальной лицензией с авторским левом. Поскольку GPL разрешает перераспределение двоичных файлов, содержащих код, лицензированный по GPL, только если вся работа выпущена под GPL, ваш ffmpeg, вероятно, не настроен с этим кодировщиком, если вы не скомпилировали его самостоятельно.

Более подробную информацию вы можете найти в руководстве по кодированию AAC для ffmpeg.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .