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(サブ)が必要なため、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のページを参照)。

役立つGUIがいくつかあります(videohelpリンクを確認してください)。正確な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にコピーするように指示します。4ではなく2と3を保持したい場合は、を使用できます。--atracks 2,3

mkvmergeタイトルを設定したり、オーディオの同期に遅延を追加したりするためのその他のオプションがたくさんあるので、詳細についてはマンページ確認してください。


5
--atracksオプションがもう存在しないように見えますが、代わりに--audio-tracksまたはを使用する必要があり--video-tracksます。
マラト

0

-f指定された形式を強制しようとします。

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

これが妙に私にエラーを与える:「少なくとも1つの出力ファイルを指定しなければなりません」
StackedCrooked

完全なパスを使用してみてください。C:\ path \ to \ output.mkv(メディアプレーヤーの参照によりWindowsにいると仮定します)
ジョンT

@John T:完全なパス(引用符付きまたは引用符なし)を使用しても、「少なくとも1つの出力ファイルを指定する必要があります」というエラーメッセージが表示されます。
StackedCrooked 2009

0

ここには2つの問題があります。

  1. 最初のコマンドラインでは、パラメーターの順序が間違っている可能性があります。-newaudioスイッチは、出力ファイル名の後の最後にある必要があると思います。

  2. 入力ファイルには字幕があるため、2番目のコマンドライン「字幕を削除する」では、-snスイッチを使用して字幕を削除する必要があります。そうでなければ、FFmpegは-mapリストで指定された少なくとも1つを必要としているようです。


0

最初のコマンドでは、test.mkvが出力ファイルであることを指定しませんでした。そのような部分に変更... -c copy test.mkvするか、のようなコーデックを指定する必要があるよう... -c:s copy test.mkvです。

そして、その-newsubtitle旗がそこで何をしているのか分かりません。ただし、追加する字幕ファイルがある場合は、別の入力フラグを実行できるはず-i input.srtです。それについては、このリンクを参照してください。

2番目のコマンドでは、ビデオストリームをマップしてコピーしようとしているようです。したがって、-vcodec copy命令を削除してみてください、それはちょうど動作するはずです。:)


1
l ストリーム指定子はありません。
llogan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.