FFmpegで変換した動画の音が出ないときは、いくつかの原因が考えられます。まず ffprobe(FFmpegに付属する、ファイルの中身を調べるツール)で状態を確認してから対処すると、早く解決できます。
まずは ffprobe で確認する
ffprobe -i output.mp4
出力の Stream 行を確認します:
Stream #0:0: Video: h264, ...
Stream #0:1: Audio: aac, 44100 Hz, stereo, fltp, 128 kb/s
- 音声ストリーム(
Audio:の行)が無い場合は、ファイルに音声が入っていません - 音声ストリームがあるのに音が出ない場合は、コーデックかプレイヤーの問題です
原因1: -an オプションが指定されている
症状
-an は音声ストリームを取り除くオプションです。意図せず付けていたり、コピーしたコマンドに入っていたりすることがあります。
# NG — 音声が除去される
ffmpeg -i input.mp4 -an output.mp4
解決方法
# -an を削除する
ffmpeg -i input.mp4 output.mp4
# または音声コーデックを明示する
ffmpeg -i input.mp4 -c:a aac output.mp4
原因2: 入力ファイルに音声ストリームがない
症状
元のファイルに音声が入っていなければ、出力にも音声は入りません。
ffprobe -i input.mp4
# → Stream #0:0: Video: h264, ... (音声ストリームが表示されない)
解決方法
別の音声ファイルを追加する:
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -shortest output.mp4
-shortest:短いほうのストリームが終わった時点で止める
無音の音声トラックを追加する(プレイヤー互換性のため):
ffmpeg -i input.mp4 -f lavfi -i anullsrc=r=44100:cl=stereo \
-c:v copy -c:a aac -shortest output.mp4
原因3: 音声コーデックが出力コンテナと非対応
症状
コンテナ(MP4やMKVなどのファイル形式)と音声コーデックの組み合わせによっては、再生できないプレイヤーがあります。
# MP4 に Vorbis(非推奨)を使った場合
ffmpeg -i input.mkv -c:v copy -c:a libvorbis output.mp4
解決方法
MP4 には aac か mp3 を使います:
ffmpeg -i input.mkv -c:v copy -c:a aac output.mp4
コンテナ別の推奨音声コーデック:
| コンテナ | 推奨音声コーデック |
|---|---|
| MP4 | AAC(aac), MP3(libmp3lame) |
| MKV | AAC, MP3, Vorbis, Opus どれでも可 |
| WebM | Vorbis(libvorbis), Opus(libopus) |
| MOV | AAC, PCM |
原因4: サンプルレートの不一致
一部のコーデックは、決まったサンプルレート(1秒間に音を記録する回数)にしか対応していません。入力がそれ以外のサンプルレートなら FFmpeg が自動で変換するので、出力が無音になるわけではありません。たとえば 96000 Hz の音声を libmp3lame でエンコードすると、48000 Hz で出力されます。ただし、プレイヤーや端末にも制限があります。Android の AAC-LC の対応は 8〜48 kHz です。
解決方法
サンプルレートを指定します:
ffmpeg -i input.mp4 -c:a aac -ar 44100 output.mp4
よく使うサンプルレートは 44100 Hz(CD品質)と 48000 Hz(動画の標準)です。
原因5: ストリームマッピングの問題(複数ストリームがある場合)
入力ファイルに音声ストリームが複数あっても、-map を指定しないと、FFmpeg は1つだけを選びます。ffprobe の表示で (default) が付いた音声が優先され、次にチャンネル数の多さで決まります。
確認方法
ffprobe -i input.mkv
# Stream #0:0: Video
# Stream #0:1: Audio (日本語)
# Stream #0:2: Audio (英語)
解決方法
使いたい音声ストリームを -map で指定します:
# 2番目の音声ストリーム(英語)を使う
ffmpeg -i input.mkv -map 0:v:0 -map 0:a:1 -c copy output.mp4
すべての音声ストリームを入れる場合:
ffmpeg -i input.mkv -map 0:v -map 0:a -c copy output.mp4
原因6: チャンネル数の問題(モノラル vs ステレオ)
症状
プレイヤーや端末によっては、対応するチャンネル数が決まっています。たとえば Android の AAC-LC が対応しているのは、モノラル・ステレオ・5.0・5.1 です。
解決方法
# ステレオに変換
ffmpeg -i input.mp4 -ac 2 output.mp4
# モノラルに変換
ffmpeg -i input.mp4 -ac 1 output.mp4
デバッグ用コマンド
# 詳細ログで確認
ffmpeg -v verbose -i input.mp4 output.mp4
# 音声だけをテスト出力
ffmpeg -i input.mp4 -vn test_audio.aac
ffplay test_audio.aac
処理時間とサイズの目安
実測値は動画の圧縮などの記事とデータセットで公開しています。
音が出ないときは、まず ffprobe で出力ファイルの音声ストリームを確認します。
ffprobe -v error -select_streams a \
-show_entries stream=index,codec_name,channels,sample_rate,bit_rate \
-of default=nw=1 output.mp4
正常なAACステレオ音声なら、codec_name=aac、channels=2、sample_rate=48000 のような行が出ます。何も表示されなければ、出力ファイルに音声ストリームはありません。
音声ストリームがあるのに音が出ない場合は、音声だけを書き出して再生します(上の「デバッグ用コマンド」の後半)。これで、プレイヤーの問題か、エンコードの問題かを切り分けられます。2分のAAC音声なら数MB程度で、書き出しは数秒で終わることが多いです。
関連記事
よくある質問
クリップを抽出したら音が無くなった
よくあるのは、-map で映像だけを指定して、音声を出力から外している場合です。-map 0:v:0 -map 0:a:0 のように音声も指定してください。コピーするなら -c:a copy、変換するなら -c:a aac を追加します。
AAC がスマホで再生できるのに Premiere で開けない
Premiere は MP4 の AAC 音声の読み込みに対応しています(Adobe の対応形式一覧)。読み込めない場合は、音声だけを FFmpeg の aac エンコーダ(初期設定で AAC-LC)で作り直してから試してください。ffmpeg -i in.mp4 -c:v copy -c:a aac -b:a 192k out.mp4 なら、映像はそのままコピーされます。
音声トラックはあるのに無音
まず入力に音が入っているかを確認します。ffmpeg -i in.mp4 -af volumedetect -f null - を実行し、max_volume: -91.0 dB と出たら、元の素材は無音か、聞こえないほど小さな音です。入力に音があるなら、無音の別トラックが選ばれていないかを確認してください(原因5)。
複数音声トラックを保ちたい
-map 0:v -map 0:a を使います。番号を付けない 0:a は、すべての音声ストリームを選びます。-map 0:a だけだと映像が入りません。-map を付けないと、-c copy を付けても音声トラックは1つしか入りません(原因5)。
映像を圧縮すると音声が消える?
消えません。圧縮で変わるのは映像のコーデックだけです。音声を確実に残すには、-c:a copy(または -c:a aac -b:a 128k)を指定してください。