Как удалить одну дорожку из видео файла с помощью ffmpeg?

Как удалить только одну дорожку (не все) из контейнера видеофайлов (.vob или.mkv) с помощью ffmpeg?

Я знаю, я могу просто скопировать видео (-c:v copy -an) и конкретную звуковую дорожку из контейнера в два отдельных файла, а затем соедините их.

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

4 ответа

Решение

Используйте отрицательное отображение, чтобы исключить определенные потоки:

ffmpeg -i input -map 0 -map -0:a:1 -c copy output

Этот пример отобразит все, кроме второго аудиопотока.

Ты ищешь -map,

Я перешел на использование avconv, но это должно быть примерно так же.

Допустим, у вас есть файл "input.vob" с одним видео и двумя звуковыми дорожками; и вы хотите иметь "output.vob" с видео и последним аудио.

Вы бы сделали:

avconv -i input.vob -map 0:0 -c:v copy -map 0:2 -c:a copy output.vob

Вы должны заметить, что:

  1. Я не копировал -map 0:1
  2. Мне не нужно было делать -an, потому что есть звуковые дорожки. Однако, если нет никаких звуковых дорожек, вам может понадобиться использовать такой атрибут.
  3. Иногда потоки нумеруются не так, как я описал, например, звук может быть перед видео.
  4. Если там есть потоки субтитров, вам нужно выяснить, как с ними обращаться.

Вы не можете работать с файлами "на месте", вам нужно сохранить в другой файл.

PS Возможно, вы захотите задать такие вопросы на https://video.stackexchange.com/ следующий раз.

Ответ llogan на /questions/36880015/kak-udalit-odnu-dorozhku-iz-video-fajla-s-pomoschyu-ffmpeg/36880020#36880020 вероятно, в основном отвечает на него. Однако, если его ответ не сработал для вас (как в случае со мной), используйте. Для меня, -map_chapters -1 удалил поток данных, который мне не удалось удалить.

Используйте следующее :
ffmpeg -i in.mp4 -c:v copy -c:a copy -map_chapters -1 out.mp4 -y

( -map -0:d тоже может работать)

Спасибо hamidi в Discard data stream from container using ffmpeg

Вы только что решили мою проблему с мультиплексированием av1, для которой требуется -map 0 включить шрифт субтитров из original-video.mkv.

ffmpeg.exe -i original-video.mkv -i svt-av1.ivf -map 0 -map -0:v:0 -map 1:v:0 -c copy output.mkv

-map 0 выбирает все, включая шрифт субтитров, который по ошибке находится в неправильном потоке входного файла. -map -0:v:0 удалить все видео. -map 1:v:0 повторно добавляет видео со второго входа, который является перекодированным AV1 файла original-video.mkv.

Другие вопросы по тегам