FFmpegを使うと、動画から音声だけを1コマンドで取り出せます。会議録画から音声を取り出す、自分で撮影した動画からMP3を作る、動画のBGMをFLACで保存する、といった用途に使えます。無劣化コピーと再エンコードは、用途に応じて使い分けます。
コマンド例
1. 最速:無劣化コピーで音声抽出(品質劣化ゼロ)
元の音声コーデックのまま、再エンコードせずに抽出します。最も速く、品質も劣化しません。
# MP4内のAACをそのままAAC(.aac)で抽出
ffmpeg -i input.mp4 -vn -c:a copy output.aac
# MP4内のAACをM4A形式で抽出(互換性高い)
ffmpeg -i input.mp4 -vn -c:a copy output.m4a
-vn… 映像ストリームを出力から除外-c:a copy… 音声データをデコード・エンコードなしでコピー
2. MP3に変換して抽出(libmp3lame)
MP4やMKVの音声をMP3に変換します。libmp3lame を指定すると、元の音声が何であっても(MP3 でも)再エンコードになります。
# VBR MP3で最高品質(推奨)
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 0 output.mp3
# CBR MP3 320kbps(高品質・固定ビットレート)
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 320k output.mp3
# CBR MP3 128kbps(小サイズ重視)
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 128k output.mp3
-q:a 0… VBR品質(0〜9、低いほど高品質。0が最高品質)-b:a 320k… 固定ビットレート320kbps
3. AACに変換して抽出
# AAC 192kbps(音楽・高品質用途)
ffmpeg -i input.mkv -vn -c:a aac -b:a 192k output.aac
# AAC 128kbps(一般用途)
ffmpeg -i input.mp4 -vn -c:a aac -b:a 128k output.aac
4. FLACで抽出(ロスレス)
# FLACはロスレス(可逆)圧縮。元がPCMならアーカイブに最適
ffmpeg -i input.mkv -vn -c:a flac output.flac
5. WAV(無圧縮PCM)で抽出
# 16bit PCM WAV(標準的なWAV形式)
ffmpeg -i input.mp4 -vn -c:a pcm_s16le output.wav
# 24bit PCM WAV(高品質録音・DAW用)
ffmpeg -i input.mp4 -vn -c:a pcm_s24le output.wav
6. 特定の時間区間だけ音声を抽出
# 1分00秒から2分00秒の音声を無劣化コピー
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 -vn -c:a copy clip_audio.aac
# 30秒から60秒間のMP3を抽出
ffmpeg -ss 30 -i input.mp4 -t 60 -vn -c:a libmp3lame -q:a 2 output.mp3
7. 複数音声トラックから特定トラックを選択
# トラック一覧を確認
ffprobe -v quiet -select_streams a -show_entries stream=index,codec_name,tags:stream_tags=language -of default input.mkv
# 最初の音声トラック(0:a:0)を抽出(.mka ならどの音声コーデックも入る)
ffmpeg -i input.mkv -map 0:a:0 -c:a copy track1.mka
# 2番目の音声トラック(0:a:1)を抽出(英語音声など)
ffmpeg -i input.mkv -map 0:a:1 -c:a copy track2.mka
8. バッチ音声抽出(フォルダ内全mp4)
for f in *.mp4; do
ffmpeg -i "$f" -vn -c:a libmp3lame -q:a 2 "${f%.mp4}.mp3" -y
done
フォーマット別比較表
| 形式 | コーデック | 圧縮 | ファイルサイズ | 用途 |
|---|---|---|---|---|
.aac / .m4a |
AAC | 非可逆 | 小 | 汎用・スマホ互換性高い |
.mp3 |
MP3 | 非可逆 | 小 | 最も普及。音楽・ポッドキャスト |
.flac |
FLAC | 可逆 | 中 | 音楽アーカイブ・ロスレス保存 |
.wav |
PCM | 無圧縮 | 大 | DAW・音声編集・業務用途 |
.ogg |
Vorbis | 非可逆 | 小 | ゲーム・Web用途 |
.opus |
Opus | 非可逆 | 最小 | 低ビットレートで高品質 |
無劣化コピー vs 再エンコード
| 条件 | 推奨 |
|---|---|
| 出力コーデックを変えない(AAC→AAC等) | -c:a copy(無劣化・高速) |
| 出力コーデックを変える(AAC→MP3等) | 再エンコード |
| ビットレート・サンプリングレートを変更 | 再エンコード |
| ノイズ除去・音量正規化を行う | 再エンコード(フィルタ必要) |
無劣化コピーは音質が変わりません。MP3・AAC などの非可逆圧縮の音声を、再び非可逆圧縮で保存すると世代劣化が生じます。
コンテナとコーデックの互換性
| 入力コンテナ | 音声コーデック | 無劣化コピーの適切な出力形式 |
|---|---|---|
| .mp4 | AAC | .aac、.m4a |
| .mkv | FLAC | .flac |
| .mkv | AAC | .aac、.m4a |
| .avi | MP3 | .mp3 |
| .mov | AAC | .aac、.m4a |
オプション詳解
| オプション | 意味 | 推奨値 |
|---|---|---|
-vn |
映像ストリームを出力から除外 | 音声抽出時に必須 |
-c:a copy |
音声を無劣化コピー | コーデックを変えない場合 |
-c:a libmp3lame |
MP3エンコーダ | MP3出力時 |
-q:a N |
VBR品質(0〜9) | 0(最高)〜2(高品質)が実用的 |
-b:a Nk |
音声ビットレート固定 | 音楽: 192k〜320k、会話: 64k〜128k |
-ac N |
チャンネル数変更 | 1(モノラル)、2(ステレオ) |
-ar N |
サンプリングレート変更 | 44100(CD品質)、48000(動画標準) |
-map 0:a:N |
N番目の音声トラックを選択 | 0:a:0(最初のトラック) |
トラブルシューティング
エラー1: -c:a copy でエラーが出る(コンテナ非互換)
症状: Invalid audio stream. Exactly one MP3 audio stream is required. や Could not write header (incorrect codec parameters ?): Invalid argument
原因: 出力コンテナが入力コーデックに対応していません(例: AACを.mp3に無劣化コピーした場合)。
解決策:
# 元のコーデックを確認
ffprobe -v quiet -select_streams a -show_entries stream=codec_name input.mp4
# AACならAAC互換のコンテナに変更
ffmpeg -i input.mp4 -vn -c:a copy output.aac # .mp3ではなく.aac
エラー2: Unknown encoder 'libmp3lame'
原因: 使っている FFmpeg が、libmp3lame エンコーダを含まない構成でビルドされています(ビルド時に --enable-libmp3lame が指定されていない)。
解決策: gyan.dev の配布ビルド(Windows)や apt install ffmpeg(Ubuntu)などで、フル機能版を入れ直してください。
エラー3: 抽出した音声ファイルの長さがおかしい
原因: -ss を入力の前に置くと、キーフレーム位置にシークされるため、指定位置より前(直前のキーフレーム)から始まることがあります。
解決策: -ss を -i の後に置く(低速ですが正確です)か、-vn -c:a copy の代わりに再エンコードを試してください。
エラー4: 音声がモノラルになった
原因: -ac 1 が意図せず指定されているか、元の動画がモノラルです。
解決策:
# 入力のチャンネル数を確認
ffprobe -v quiet -select_streams a -show_entries stream=channels input.mp4
# チャンネル数を明示指定
ffmpeg -i input.mp4 -vn -c:a aac -ac 2 output.aac
エラー5: WAVファイルが非常に大きい
原因: WAVはPCM無圧縮なので、1分あたり約10MB(44100Hz, 16bit, stereo)になります。
解決策: 用途に合わせてFLAC(圧縮ロスレス)またはMP3(非可逆)に変更してください。
# WAVの代わりにFLACでロスレス圧縮
ffmpeg -i input.mp4 -vn -c:a flac output.flac
FAQ
Q1. 「無劣化コピー」と「再エンコード」はどちらが良いですか?
A. 元のコーデックのままでよければ、無劣化コピー(-c:a copy)を優先してください。品質が劣化せず、処理も速いです。コーデックを変える必要がある場合だけ再エンコードします。
Q2. MP4からMP3に変換するとき音質は劣化しますか?
A. はい。MP4内の音声は通常AACなので、MP3への変換(AAC→デコード→MP3エンコード)で世代劣化が起きます。劣化を抑えるには -q:a 0(VBR最高品質)または -b:a 320k(固定高ビットレート)を使ってください。
Q3. 動画ファイルに何個音声トラックがあるか確認するには?
ffprobe -v quiet -show_entries stream=index,codec_name,codec_type -of default input.mkv | grep audio
Q4. 音声抽出と同時にノーマライズできますか?
A. はい。loudnorm フィルタを組み合わせます。このように1パスで使うとサンプルレートが 192 kHz に上がるので、-ar 48000 で出力のサンプルレートを指定します:
ffmpeg -i input.mp4 -vn -af loudnorm=I=-16:LRA=11:TP=-1.5 -ar 48000 -c:a aac -b:a 192k output.aac
Q5. .aac ファイルを開けないアプリがあります。どうすればいいですか?
A. .aac の代わりに .m4a を使ってください。中身のコーデックは同じで、Windows Media Player など多くのアプリで再生できます:
ffmpeg -i input.mp4 -vn -c:a copy output.m4a