Як зняти аудіо потоки з файлу MKV?


16

Я намагався видалити непотрібні аудіо потоки з файлу MKV (Matroska). Причина, чому я хочу це зробити, - це уникати ручного вибору потрібного потоку в програмі Windows Media Player.

Вхідний файл надає таку інформацію ffmpeg:

Stream #0.0: Video: mpeg4, yuv420p, 704x396 [PAR 1:1 DAR 16:9], 29.98 tbr, 1k tbn, 29.98 tbc
Stream #0.1(eng): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.2(jpn): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.3(eng): Subtitle: 0x0000
Stream #0.4(eng): Subtitle: 0x0000
Stream #0.5: Attachment: 0x0000
Stream #0.6: Attachment: 0x0000

Оскільки я хочу потоки 0, 1 і 3 (sub), моя команда ffmpeg виглядає так:

ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:3 -vcodec copy -acodec libmp3lame -newsubtitle test.mkv

що дивно дає помилку:

At least one output file must be specified

Видалення субтитрів:

ffmpeg -i input.mkv -map 0:0 -map 0:1 -vcodec copy -acodec libmp3lame test.mkv

дає мені це:

Number of stream maps must match number of output streams

Здається, я не дуже розумію, як працює варіант "карта". Хтось допоможе мені це зрозуміти?

Відповіді:


25

Якщо все, що ви хочете зробити, - це видалити потік, а не перекодувати його, ймовірно, ви хочете зробити це за допомогою пакету MKVtoolnix (див. Сторінку videohelp.com ).

Є кілька графічних інтерфейсів, які можуть вам допомогти (ознайомтесь за посиланням на відеодопомогу). Я не впевнений, яким mkvmergeможе бути саме командний рядок, але я думаю, що щось подібне спрацювало б:

# first, get audio track info so we know which one to keep
mkvmerge -i input.mkv
File 'input.mkv': container: Matroska
Track ID 1: video (V_MPEG4/ISO/AVC)
Track ID 2: audio (A_AAC)
Track ID 3: audio (A_AAC)        <----------- for example, let's keep this one
Track ID 4: audio (A_AAC)

mkvmerge -o output.mkv --atracks 3 input.mkv

Це повинно зробити трюк (у мене немає файлу, який підходить для тестування, вибачте). --atracksОпція вказує mkvmergeкопіювати тільки перераховані звукові доріжки в новий файл. Якщо ви хочете зберегти 2 і 3, але не 4, можете використати --atracks 2,3.

mkvmergeє багато інших варіантів налаштування заголовків, додавання затримки для синхронізації аудіо тощо, тому перевірте детальну сторінку сторінки.


5
Схоже, --atracksваріант більше не існує, натомість слід використовувати або --audio-tracksабо --video-tracks.
malat

0

Спробуйте -fзастосувати вказаний формат:

ffmpeg -i input.mkv -map 0: 0 -map 0: 1 -map 0: 3 -vcodec копія -acodec libmp3lame -newsubtitle -f mkv test.mkv

Це дивно дає мені помилку: "Принаймні один вихідний файл повинен бути вказаний"
StackedCrooked

спробуйте використовувати повний шлях, тобто: C: \ path \ to \ output.mkv (я припускаю, що ви перебуваєте у Windows за посиланням медіаплеєра)
Джон T

@John T: використання повного шляху (з лапками або без) все ще дає мені повідомлення про помилку "Принаймні один вихідний файл повинен бути вказаний".
StackedCrooked

0

Тут справді є два окремих питання:

  1. У першому командному рядку порядок параметрів може бути неправильним. Я думаю, що -newaudioперемикач повинен бути в кінці, після імені вихідного файлу.

  2. Другий командний рядок "Видалення субтитрів", оскільки у вхідному файлі є субтитри, -snдля їх видалення потрібно використовувати перемикач. В іншому випадку, здається, FFmpeg хоче хоча б одного, вказаного в -mapсписку.


0

У першій команді ви не вказали, що test.mkv був вашим вихідним файлом. Схоже, вам потрібно змінити цю частину, щоб стати чимось на зразок ... -c copy test.mkvабо вказати такий кодек ... -c:s copy test.mkv.

І не впевнений, що там -newsubtitleпрапор працює. Але якщо у вас є файл субтитрів, який ви хочете додати, ви маєте змогу зробити ще один прапор введення -i input.srt. Дивіться це посилання для цього.

У вашій другій команді, я думаю, це виглядає так, що ви намагаєтеся картувати відеопотік і намагаєтесь скопіювати його. Тому ви можете спробувати видалити -vcodec copyінструкцію, і вона повинна просто працювати. :)


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.