「会議録画から音声だけ取り出したい」「YouTubeダウンロード動画をMP3にしたい」「動画のBGMをFLACで保存したい」——FFmpegなら1コマンドで実現できます。無劣化コピーか再エンコードかの使い分けを理解すれば、用途に応じた最適な抽出ができます。所要時間:10分。
動作確認: FFmpeg 6.1(ubuntu-latest / GitHub Actions CI検証済み)
この記事でわかること
-vnで映像を除外して音声のみ出力する方法- 無劣化コピー(
-c:a copy)と再エンコードの違いと選び方 - MP3・AAC・FLAC・WAV 形式別の実例コマンド
- コンテナとコーデックの互換性早見表
- 複数音声トラックから特定トラックを選択する(
-map) - 特定の時間区間だけ音声を抽出する
- バッチ音声抽出(フォルダ内全ファイル一括処理)
- よくあるエラーと解決策5件
- FAQ 5問
コマンド例
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に変換します。元がAAC/FLACの場合は再エンコードが発生します。
# 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 -ss 00:01:00 -i input.mp4 -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)を抽出
ffmpeg -i input.mkv -map 0:a:0 -c:a copy track1.aac
# 2番目の音声トラック(0:a:1)を抽出(英語音声など)
ffmpeg -i input.mkv -map 0:a:1 -c:a copy track2.aac
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 でエラーが出る(コンテナ非互換)
症状: Could not write header for output file や 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: Encoder libmp3lame not found
原因: FFmpegがMP3エンコードサポートなしでビルドされている(--without-libmp3lame)
解決策: 公式サイトや 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 フィルタを組み合わせます:
ffmpeg -i input.mp4 -vn -af loudnorm=I=-16:LRA=11:TP=-1.5 -c:a aac -b:a 192k output.aac
Q5. Windowsで .aac ファイルを再生できないのですが?
A. .aac の代わりに .m4a を使うとWindows Media Player等でも再生できます。中身のコーデックは同じです:
ffmpeg -i input.mp4 -vn -c:a copy output.m4a
関連記事
- 音声フォーマット変換 — WAV・MP3・AAC・FLAC の変換方法
- ラウドネス正規化 — loudnormフィルターでEBU R128対応
- ffprobeでメタデータとストリーム情報を確認する
- 動画からサムネイルを抽出する — -vframes と thumbnail フィルタ
動作確認: ffmpeg 6.1.1 / Ubuntu 24.04 (GitHub Actions runner)
一次ソース: ffmpeg.org/ffmpeg.html / ffmpeg.org/ffmpeg-codecs.html / ffmpeg.org/ffmpeg-filters.html