[FFmpeg] 映像と音声を結合してひとつの動画にする
独立した映像と音声を結合して、一つの動画ファイルをつくる時に使うコマンド。
音のない映像に音声を結合する
音声のない映像ファイルに音声ファイルを結合する場合は、以下のコマンドを実行します。
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac output.mp4
音声つきの映像に別の音声を差し替えて結合する
音声つき映像から映像のみを抜き出し、別の音声と結合するときのコマンドです。
※結合する音声ファイルが映像付きの場合も、以下と同じコマンドです。
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -map 0:v -map 1:a output.mp4
map について
音声と映像など、複数のデータを結合するときに使用する -map
についてのいろいろ。
動画ファイルにある複数のストリームから任意のストリームを指定するときに使用します。
書式
-map [n]:[v/a/s][?]:[m]
- n … 入力ファイル (n-1) 番目のすべてのストリーム (入力は
-i
) - v … 映像ストリーム (video stream)
- a … 音声ストリーム (audio stream)
- s … 字幕ストリーム (subtitle stream)
- ? … 指定したストリームが存在しない場合は無視する
- m … m番目のストリームを使う
-map 0
- 入力ファイル(0番目) のすべてのストリームを使用する。
-map 0:v
- 入力ファイル(0番目) のすべての映像ストリームを使用する。
-map 0:a? -map 1:v
- 入力ファイル(0番目) のすべての音声ストリームを使用する、存在しなければスキップ。
入力ファイル(1番目) のすべての映像ストリームを使用する。 -map 0:v:1
- 入力ファイル(0番目) のすべての映像ストリームの中から1番目のストリームを使用する。
-map 0:1
- 入力ファイル(0番目) の1番目のストリームを使用する。
入力ファイルの番号は n から 1 を引いていることに注意します。
-i input1.mp4 -i input2.mp4
の場合、最初に読み込まれた input1.mp4
が 0番目 で、次に読み込まれた input2.mp4
が 1番目 となります。
動画ファイルのストリーム構成を見る
動画ファイルがどのようなストリーム構成になっているのかを見るためのコマンドです。
ffmpeg -i FILE_NAME.mp4
ずらずらっとデータが表示されますが、注目するのは最後あたりに表示される部分です。
Stream #0:0[0x1](und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 640x360 [SAR 1:1 DAR 16:9], 127 kb/s, 29.97 fps, 29.97 tbr, 30k tbn (default)
Metadata:
handler_name : ISO Media file produced by Google Inc.
vendor_id : [0][0][0][0]
Stream #0:1[0x2](eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 95 kb/s (default)
Metadata:
handler_name : ISO Media file produced by Google Inc.
vendor_id : [0][0][0][0]
Stream #0:0
以降に表示されているのが、動画ファイルに存在するストリームです。
このファイルの場合は 0:0
が映像(Video)で、0:1
は音声(Audio)となっています。
副音声つきの動画やドライブレコーダーなど、複数の映像または音声データが入ったファイルを扱う場合は、ストリーム構成を確認してから指定したほうが良いと思います。