ffmpegを使用してビデオファイルから1つのトラックを削除するにはどうすればよいですか?
How Remove One Track From Video File Using Ffmpeg
解決:
最も効率的な方法は、ネガティブマッピングを使用することです。-他のすべてのストリームを保持しながら、特定のストリーム(「トラック」)を除外するマップオプション。
特定のオーディオストリーム/トラックを削除する
ffmpeg -i input -map 0 -map -0:a:2-cコピー出力 -map 0は、入力からすべてのストリームを選択します。
-map -0:a:2は、オーディオストリーム3の選択を解除します。ストリームインデックスは0からカウントを開始するため、オーディオストリーム10は次のようになります。0:から:9。
すべてのオーディオストリーム/トラックを削除します
ffmpeg -i input -map 0 -map -0:a -c copy output -map 0は、入力からすべてのストリームを選択します。
-map -0:aは、入力からすべてのオーディオストリームの選択を解除します。
特定のオーディオストリーム/トラックを削除する
オーディオストリーム#4(オフセット3)と#7(オフセット6)を除くすべてを保持します。
ffmpeg -i input -map 0 -map -0:a:3 -map -0:a:6-cコピー出力すべての字幕とデータを削除します
ffmpeg -i input -map 0 -map -0:s -map -0:d -c copy outputビデオとオーディオのみを含める
この例では、ネガティブマッピングを使用する必要はありません。
ffmpeg -i input -map 0:v -map 0:a -c copy output他のストリーム/トラックタイプの削除
他のストリームタイプを削除する場合は、適切なストリーム指定子を使用できます。
v-ビデオなど-マップ-0:v
a-オーディオなど-map -0:a(上記のように)
s-字幕など-マップ-0:s
d-データなど-マップ-0:d
t-添付ファイルなど-マップ-0:t
特定のオーディオチャンネルを抽出または削除する
ステレオ入力とchannelsplitフィルターを使用します。正しいチャンネルのみを取得し、モノラルオーディオファイルを出力する例:
ffmpeg -i Stereo.wav -filter_complex '[0:a] channelsplit = channel_layout = Stereo:channels = FR [right]' -map '[right]' front_right.wav channel_layoutは、入力ストリームのチャネルレイアウトです。デフォルトはステレオ。
チャネルは、個別の出力ストリームとして抽出されるチャネルをリストします。デフォルトはこれらはすべて、各入力チャネルを個別の個別のストリームとして抽出します。
見る受け入れられたチャネルレイアウトのリストのffmpeg-layouts(channel_layoutオプション)およびチャネル名(チャネルオプション)。
その他の例については、FFmpeg Wiki:AudioChannelsを参照してください。
より詳しい情報
-マップオプションのドキュメント
- FFmpeg Wiki:マップ
あなたは探している-地図。
使用するように変更しましたavconvですが、ほぼ同じである必要があります。
1つのビデオトラックと2つのオーディオトラックを含む「input.vob」というファイルがあるとします。そして、ビデオと最後のオーディオで「output.vob」が必要です。
あなたはするでしょう:
avconv -i input.vob -map 0:0 -c:v copy -map 0:2 -c:a copy output.vob次のことに注意してください。
- コピーしませんでした
-マップ0:1
- 私はする必要はありませんでした
-an、オーディオトラックがあるため。ただし、オーディオトラックがまったくない場合は、そのような属性を使用する必要がある場合があります。
- ストリームに私が説明した方法で番号が付けられていない場合があります。たとえば、オーディオがビデオの前に来る場合があります。
- そこに字幕ストリームがある場合は、それらの処理方法も理解する必要があります。
「インプレース」でファイルを操作することはできません。別のファイルに保存する必要があります。
追伸次回はvideo.stackexchange.comでそのような質問をすることをお勧めします。