Как удалить одну дорожку из видео файла с помощью 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
Вы должны заметить, что:
- Я не копировал
-map 0:1
- Мне не нужно было делать
-an
, потому что есть звуковые дорожки. Однако, если нет никаких звуковых дорожек, вам может понадобиться использовать такой атрибут. - Иногда потоки нумеруются не так, как я описал, например, звук может быть перед видео.
- Если там есть потоки субтитров, вам нужно выяснить, как с ними обращаться.
Вы не можете работать с файлами "на месте", вам нужно сохранить в другой файл.
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.