Как отключить декодирование субтитров в ffmpeg

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


person v_2e    schedule 26.08.2012    source источник
comment
удаление субтитров также полезно, чтобы избежать мультиплексирования жалоб на тире. Хотя VLC показывает некоторые метаданные в виде субтитров, чтобы удалить их с помощью ffmpeg, вам понадобится -map_metadata -1   -  person Ray Foss    schedule 21.08.2017


Ответы (3)


Я наконец нашел ответ.

Есть такая опция, как -sn, которая отключает декодирование субтитров из входного потока. Также есть аналогичные варианты декодирования аудио и видео: -an и -vn соответственно.

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

Например, если у вас есть файл фильма с 3 потоками:

  • Поток 0: видео
  • Поток 1: аудио
  • Поток 2: субтитры

команда преобразования для FFmpeg может выглядеть следующим образом:

ffmpeg -i <input file> -sn -vcodec <video codec> -acodec <audio codec>  <output file>

or

ffmpeg -i <input file> -vcodec <video codec> -acodec <audio codec> -map 0:0 -map 0:1  <output file>

Первая командная строка отменяет выбор потока субтитров (возможно, всех, если их несколько), а вторая выбирает только те потоки, которые необходимы для декодирования.

person v_2e    schedule 29.08.2012
comment
+1 Первый подход (опция -sn) полностью работает, спасибо. (Пробовал на mkv файле.) - person Sabuncu; 28.03.2014
comment
Работает отлично! Если вам нужно просто удалить субтитры из видеофайла без его перекодирования, это сработает очень быстро: ffmpeg -i video.mkv -vcodec copy -acodec copy -sn video-no-subs.mkv - person cherouvim; 16.04.2015

Чтобы удалить поток субтитров без перекодирования видео и аудио, самой короткой командой будет:

ffmpeg -i input.mkv -sn -c copy output.mkv

person StefTN    schedule 16.06.2020

Используйте отрицательное сопоставление, чтобы опустить субтитры и сохранить все остальное:

ffmpeg -i input.mkv -map 0 -map -0:s -c copy output.mkv
  • -map 0 выбирает все потоки. Это рекомендуется, поскольку по умолчанию выбор потока выбирается только 1 поток для каждого типа потока.
  • -map -0:s - отрицательное отображение, отменяющее выбор всех потоков субтитров.
  • -c copy включает режим потокового копирования, который только повторно мультиплексирует и избегает повторного кодирования.
person llogan    schedule 16.06.2020