Удаление потоков в файле HEVC H.265 MKV?

У меня есть несколько файлов 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

который терпит неудачу. Как мне написать команду?

Ответы (1)

-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этот параметр опущен, все потоки будут перекодированы, а не то, что вы обычно хотите.