У меня есть несколько файлов MKV с видео, закодированным в формате HEVC/H.265. Я хочу с помощью командной строки Windows создать новый файл MKV, удалив все, кроме определенных дорожек субтитров и звуковых дорожек, для каждого файла, поскольку мне не нужно сохранять несколько звуковых дорожек и субтитров на иностранных языках. треки.
Допустим, я использовал ffprobe , чтобы найти потоки в данном файле MKV. Кроме того, я хочу сохранить первую и третью звуковые дорожки, а также 24-ю и 25-ю дорожки субтитров из указанного файла. Я использовал https://stackoverflow.com/questions/63302454/map-metadata-stream-by-filter-in-ffmpeg в качестве ссылки.
Я пытался сделать это с
ffmpeg -i INPUTFILE.MKV -map 0:0 -map 1:1 -map 1:3 -map 1:a:24 -map 1:a:25 OUTPUTFILE.MKV
который терпит неудачу. Как мне написать команду?
-map 1:a:24
В синтаксисе 1
обозначает индекс входного файла. Подсчет начинается с 0
, поэтому 1
относится ко второму входному файлу, но команда имеет только один вход. a
обозначает тип потока, и в данном случае это аудио — v
для видео, s
для субтитров, d
для данных. 24
представляет собой 25-ю (с индексом 0, помните) звуковую дорожку. Если ваша команда имеет один входной файл с тремя потоками видео, тремя аудио и тремя потоками субтитров в следующем порядке: V A S A V S V A S
, то вторым видео будет -map 0:v:1
Вы можете ссылаться на него, используя абсолютный индекс, используя -map 0:4
. При абсолютной индексации нет спецификатора типа потока.
Предполагая, что нумерация потоков в вашем описании верна, используйте
ffmpeg -i IN.MKV -map 0:0 -map 0:a:0 -map 0:a:2 -map 0:s:23 -map 0:s:24 -c copy OUT.MKV
Обратите внимание, что если -c copy
этот параметр опущен, все потоки будут перекодированы, а не то, что вы обычно хотите.