Невозможность воспроизведения видео при переключении аудио после обработки ffmpeg

Вопрос или проблема

Обычно я использую такую команду:

ffmpeg -i video.mkv -i audio.mka -i subs.ass -c copy -map 0 -map 1:a -map 2:s out.mkv

Чтобы добавить дополнительный аудиотрек и субтитры к видео, сохраняя потоки оригинального видео. Однако на этот раз я столкнулся с странной ситуацией: при попытке переключить аудиотрек на дополнительный, видео либо останавливается, либо воспроизводится без звука (в зависимости от плеера), но все в порядке с оригинальным аудио и так далее, на всех устройствах (ноутбук, телевизор, смартфон). Но я выяснил, что если я использую команду:

ffmpeg -i video.mkv -i audio.mka -i subs.ass -c copy -map 0:v -map 0:a -map 1:a -map 2:s out.mkv

то все работает, как ожидалось, однако, если я добавляю аргумент -map 0:s или -map 0:t, то я снова сталкиваюсь с этой проблемой. После запуска ffprobe я обнаружил, что в видео было два потока с шрифтами и один с субтитрами (а также видеопоток и аудиопоток).

Но почему поток шрифтов/субтитров, скопированный из оригинального видео, вызывает эту проблему?

Я также использовал графический интерфейс mkvtoolnix для этих целей, и там все было в порядке, но я хочу разобраться, что не так с моим скриптом на ffmpeg? И как заставить его работать правильно?

Вот некоторая информация из ffprobe и mkvtoolnix

ffprobe:

оригинальное видео

результирующее видео с проблемой

результирующее видео без субтитров и вложений (может воспроизводиться корректно)

результирующее видео из графического интерфейса mkvtoolnix

Те же файлы, но информация из инструмента информации mkvtoolnix (там кажется немного больше информации)

оригинальное видео

результирующее видео с проблемой

результирующее видео без субтитров и вложений

результирующее видео из графического интерфейса mkvtoolnix

Спасибо!

Ответ или решение

Ваша проблема с воспроизведением видео после добавления дополнительной аудиодорожки и субтитров с помощью FFmpeg может быть связана с особенностями обработки потоков при использовании флага -map и с тем, как MKV контейнер действительно управляет потоками данных, особенно когда речь идет о субтитрах (например, к данным с шрифтами). Давайте разберем ваш вопрос более детально.

Причина проблемы

  1. Структура потоков: При добавлении дополнительных аудиодорожек и субтитров при использовании -map без явного указания на потоки, вы можете столкнуться с конфликтами между потоками оригинального видео и добавленными потоками. Когда вы визуализируете видео с несколькими шрифтами и субтитрами, некоторые плееры могут не справляться с конфликтами в потоках.

  2. Шрифты и субтитры: Как вы заметили, в вашем исходном видео есть два потока с шрифтами. Если вы добавляете еще одну дорожку субтитров, это может вызвать проблемы в некоторых плеерах, которые не поддерживают множественные шрифты или не обрабатывают их должным образом.

Решения

Следующее решение основывается на наученных вами командах. Можно попробовать более явное указание потоков:

  1. Выборочность потоков: Вместо -map 0 -map 1:a -map 2:s, попробуйте более четко указать, что именно вы хотите сохранить:

    ffmpeg -i video.mkv -i audio.mka -i subs.ass -map 0:v -map 0:a -map 1:a -map 2:s -c copy out.mkv
  2. Отключение потока шрифтов: Если проблема все еще существует, возможно, имеет смысл попробовать исключить потоки с шрифтами:

    ffmpeg -i video.mkv -i audio.mka -i subs.ass -map 0:v -map 0:a -map 1:a -map 2:s -map -0:t out.mkv

    Здесь флаг -map -0:t исключает потоки с шрифтами из исходного видео.

  3. Проверка плеера: Убедитесь, что выбранный вами плеер поддерживает все потоки. Попробуйте протестировать полученный файл в нескольких плеерах, например VLC, MPV и других.

  4. Использование другой версии FFmpeg: Иногда версии FFmpeg могут содержать изменения, влияющие на обработку файлов. Убедитесь, что вы используете последнюю стабильную версию.

Заключение

Проблема с воспроизведением может быть вызвана конфликтующими потоками шрифтов и субтитров. Тщательное указание нужных потоков через -map, а также exclusion потоков с шрифтами должно помочь устранить данную проблему. Если указанное решение не помогает, возможно, придется анализировать два файла (оригинальный и полученный) с использованием ffprobe, чтобы детально изучить структуру потоков и адаптировать команду FFmpeg под ваши нужды.

Оцените материал
Добавить комментарий

Капча загружается...