web-dev-qa-db-ja.com

ビデオファイルのオーディオストリームを複数のオーディオストリームに置き換える方法は?

2つのオーディオストリームを持つビデオファイルの2番目のオーディオストリーム(0:2)を置き換えて、可能であればラベルを付けたいです。これについてどうすればいいですか?私が見つけたすべてのffmpegコマンドでは、2番目のオーディオストリームを維持できません。

20
Anonymous

-mapオプション を使用してストリームを選択します。デフォルト ストリーム選択 は、各ストリームタイプの1つのみを選択するため、-mapを使用する必要があります。

2番目のオーディオストリームを置き換える

enter image description here

ffmpeg -i video.mkv -i audio.mp3 -map 0:v -map 0:a:0 -map 1:a \
-metadata:s:a:0 language=eng -metadata:s:a:1 language=sme -codec copy \
-shortest output.mkv
  • 0:v0は、video.mkvである最初の入力を参照します。 vは、「ビデオストリームタイプの選択」を意味します。

  • 0:a:00は、video.mkvである最初の入力を参照します。 aは、「オーディオストリームタイプの選択」を意味します。最後の0は、この入力からの最初のオーディオストリームを指します。 0:aのみを使用すると、すべてのビデオストリームがマッピングされます。

  • 1:a1は、2番目の入力であるaudio.mp3を参照します。 aは、「オーディオストリームタイプの選択」を意味します。

  • -codec copyは、エンコードの代わりに stream copy (re-mux)になります。特定のオーディオコーデックが必要な場合は、-c:v copy(ビデオを保持するため)を指定し、次に-c:a libmp3lameを指定して、オーディオストリームをMP3に再エンコードする必要があります。

  • -shortestは、最短の入力が終了したときに出力を終了します。

2つのオーディオストリームを1つに結合する

enter image description here

ffmpeg -i vid.mkv -i aud.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[a]" \
-map 0:v -map "[a]" -c:v copy -c:a aac -strict experimental -b:a 192k -ac 2 \
-shortest out.mp4
  • フィルタリングには再エンコードが必要です。ここでは amerge filter を使用しているため、この例ではオーディオをストリームコピーできません。
24
llogan