[FFmpeg] 映像と音声を結合してひとつの動画にする

独立した映像と音声ファイルを組み合わせて、一つの動画ファイルを作る方法を説明します。

音のない映像に音声を結合する

音声のない映像ファイルに音声ファイルを結合する場合のコマンドです。

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac output.mp4
コマンド 解説
-i video.mp4 入力映像ファイル
-i audio.mp3 入力音声ファイル
-c:v copy 映像を再エンコードせずにそのままコピー(高速処理)
-c:a aac 音声をAAC形式でエンコード
output.mp4 出力ファイル名

映像の再エンコードを避ける (-c:v copy を使う) ことで処理時間を大幅に短縮できます。

なお、このコマンドでは「映像」「音声」ともに 同じ長さである ことを前提にしています。

既存の音声を別の音声に差し替えて結合する

既存の音声だけを入れ替えたい場合のコマンドです。

ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -map 0:v -map 1:a output.mp4

どちらのファイルも映像+音声が入っている場合でも、このコマンドを使うことができます。

ffmpeg -i video_1.mp4 -i video_2.mp4 -c:v copy -c:a aac -map 0:v -map 1:a output.mp4
コマンド 解説
-i video.mp4 入力映像ファイル
-i audio.mp3 入力音声ファイル
-c:v copy 映像を再エンコードせずにそのままコピー(高速処理)
-c:a aac 音声をAAC形式でエンコード
-map 0:v 1番目の入力ファイルから映像ストリームを使用
-map 1:a 2番目の入力ファイルから音声ストリームを使用
output.mp4 出力ファイル名

map オプションについて

-map オプションは、動画ファイルにある複数のストリームの中から任意のストリームだけを指定したいときに使用します。

書式

-map を使うときは、以下のように指定します。

-map [n]:[v/a/s][?]:[m]
パラメータ 意味
n 入力ファイル番号 (n-1)
v 映像ストリーム (video)
a 音声ストリーム (audio)
s 字幕ストリーム (subtitle)
? ストリームが存在しない場合は無視
m 指定番号のストリームを使用

入力ファイル番号について:
ファイルは読み込み順の早いものから処理されるため、最初に指定したファイルが1番目となります。
ただし、map で入力ファイルを指定するときは 0番目 (n-1) と数えることに注意が必要です。

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番目のストリームを使用する。

動画ファイルのストリーム構成を見る

動画ファイルがどのようなストリーム構成になっているのかを見るためのコマンドです。

ffmpeg -i FILE_NAME.mp4

上記のコマンドを実行するとファイル構成が表示されますが、注目するのは以下のような「Stream ~」の部分です。

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]

※上記は、MP4ファイルなどで通常よく見かける構成 (1つの動画+1つの音声) です。

Stream #0:0 以降に表示されているのが、1つの動画ファイルに存在するストリームです。

  • Stream #0:0 = 映像(Video) ストリーム
  • Stream #0:1 = 音声(Audio) ストリーム

副音声つきの動画やドライブレコーダー、字幕つきなどのファイルを扱う場合、同じ種類のストリームが複数入っていることがあります。
そのため、ファイルを扱う場合はまず最初にファイル構成を確認することをおすすめします。

音声に複数ストリームがある例 :

Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 90k tbn, start 600.000000 Stream #0:1[0x1100]: Audio: pcm_bluray (HDMV / 0x564D4448), 96000 Hz, stereo, s32 (24 bit), 4608 kb/s, start 600.000000 Stream #0:2[0x1101]: Audio: dts (dca) (DTS-HD HRA) ([133][0][0][0] / 0x0085), 96000 Hz, 5.1(side), fltp, start 600.000000 Stream #0:3[0x1102]: Audio: dts (dca) (DTS-HD HRA) ([133][0][0][0] / 0x0085), 96000 Hz, 5.1(side), fltp, start 600.000000 Stream #0:4[0x1200]: Subtitle: hdmv_pgs_subtitle (pgssub) ([144][0][0][0] / 0x0090), 1920x1080, start 600.000000

このように、複数の音声ストリームから構成されているファイルもあります。
なお、必要とする音声ストリームがどれなのかファイル構成から判別できない場合は、1つずつ抽出して確認する必要があるかもしれません。

記事をシェアする
  • X
  • Bluesky
  • Facebook
  • Hatena
  • line