Вопрос или проблема
Когда я пытаюсь воспроизвести конкретный MP4 файл (output-2.mp4), который я создал с помощью ffmpeg, у него нет звука при воспроизведении с помощью видеофайлов, и он изначально без звука. Свойства файла показывают отсутствие аудио. Однако у него есть звук, и “mpv media player” воспроизводит звук, как и ffplay – почему это так?
файл без воспроизведения с ffprobe:
$ ffprobe output-2.mp4
ffprobe версия 4.2.7-0ubuntu0.1 Copyright (c) 2007-2022 разработчики FFmpeg
собран с помощью gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
конфигурация: --prefix=/usr --extra-version=0ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, из 'output-2.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Длительность: 00:30:00.00, начало: 0.000000, битрейт: 327 кбит/с
Поток #0:0(und): Видео: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 313 кбит/с, 0.20 fps, 0.20 tbr, 16384 tbn, 0.40 tbc (по умолчанию)
Metadata:
handler_name : VideoHandler
Поток #0:1(eng): Аудио: aac (LC) (mp4a / 0x6134706D), 44100 Гц, стерео, fltp, 127 кбит/с (по умолчанию)
Metadata:
handler_name : ISO Media file produced by Google Inc.
вывод ffprobe из файла, который воспроизводит звук:
$ ffprobe breton.mp4
ffprobe версия 4.2.7-0ubuntu0.1 Copyright (c) 2007-2022 разработчики FFmpeg
собран с помощью gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
конфигурация: --prefix=/usr --extra-version=0ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-nvenc --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, из 'breton.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.29.100
Длительность: 00:03:13.21, начало: 0.000000, битрейт: 208 кбит/с
Поток #0:0(und): Видео: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1152x720 [SAR 1:1 DAR 8:5], 72 кбит/с, 30 fps, 30 tbr, 15360 tbn, 60 tbc (по умолчанию)
Metadata:
handler_name : ISO Media file produced by Google Inc.
Поток #0:1(eng): Аудио: aac (LC) (mp4a / 0x6134706D), 44100 Гц, стерео, fltp, 127 кбит/с (по умолчанию)
Metadata:
handler_name : ISO Media file produced by Google Inc.
Я создал output-2.mp4 из некоторых jpg (pic-1.jpg, pic-2.jpg и т.д.) и breton.mp4 следующим образом:
ffmpeg -framerate .2 -loop 1 -i pic-%d.jpg -c:v libx264 -t 1800 -pix_fmt yuv420p -filter_complex "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" int.mp4
ffmpeg -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 -i int.mp4 -c:v copy -c:a aac -shortest int-silent.mp4
ffmpeg -i int-silent.mp4 -i breton.mp4 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output-2.mp4
Длинны потоков были разными – использование -shortest исправляет это
ffmpeg -i int-silent.mp4 -i breton.mp4 -shortest -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output-2.mp4
Ответ или решение
Решение проблемы: Нет звука при воспроизведении MP4 на Ubuntu 20.04.5 LTS
Введение
При работе с медиафайлами на операционной системе Ubuntu 20.04.5 LTS пользователи могут столкнуться с проблемами, связанными с отсутствием звука при воспроизведении некоторых MP4 файлов. В вашем случае один из файлов (output-2.mp4
), созданный с помощью FFmpeg, воспроизводится без звука в стандартном медиаплеере, однако другие плееры, такие как mpv
и ffplay
, воспроизводят звук корректно.
Причины проблемы
На основании представленной вами информации можно выделить несколько ключевых моментов:
-
Структура файла: С помощью
ffprobe
вы показали, что в вашем файлеoutput-2.mp4
действительно присутствует аудиопоток. Однако, медиа плеер, который вы используете, возможно, не имеет правильной обработки аудиокодека или не смог корректно интерпретировать файл. Это может происходить из-за специфики реализации библиотеки, используемой плеером, или конфигурации самой системы. -
Неправильная обработка метаданных: В некоторых случаях неисправный или некорректный метадатафайл может мешать нормальному восприятию аудиопотока. Например, информация о длительности аудиопотока может быть недоступна или неправильно установлена.
-
Различие в длительности потоков: Как вы упомянули, начальная версия команды FFmpeg не применяла параметр
-shortest
, что могло привести к созданию файла, где video stream и audio stream имеют разные продолжительности. Видеопоток может обрабатываться плеером, но отсутствие синхронизации может вызвать его «молчание».
Решение
Пользовательская команда для обработки ошибок с длительностью потоков:
ffmpeg -i int-silent.mp4 -i breton.mp4 -shortest -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output-2.mp4
Использование параметра -shortest
обеспечит, что выходной файл output-2.mp4
создается с правильной синхронизацией между потоком видео и потоком аудио.
Подходы к диагностике проблемы
Если предложенное решение не сработает, можно предпринять следующие шаги для дальнейшей диагностики:
-
Проверка кодеков: Убедитесь, что на вашем оборудовании установлены необходимые кодеки для воспроизведения аудиофайлов. Вы можете использовать команду:
ffmpeg -codecs | grep aac
Это покажет, поддерживается ли кодек
aac
. -
Обновление системы и программного обеспечения: Убедитесь, что ваша система и все медиаплееры обновлены до последних версий. Зачастую обновления могут решать проблемы совместимости и улучшать поддержку форматов.
-
Тестирование в других плеерах: Если
Videos
(или любой другой выбранный вами стандартный медиаплеер) продолжает вызывать проблемы, попробуйте использовать альтернативные плееры, такие как VLC или GStreamer, которые обеспечивают более широкий спектр поддержки форматов.
Заключение
Проблема с отсутствием звука в MP4 файлах на Ubuntu может быть вызвана рядом факторов, включая синхронизацию потоков и поддержку кодеков. Используя правильные команды и стратегии, можно эффективно справляться с такими ситуациями. Ваша модификация команды FFmpeg с применением параметра -shortest
– это правильный шаг к решению проблемы.