動画から音声を抽出する — 無劣化コピーと再エンコードの使い分け
動画ファイルの音声トラックだけを取り出したい場面は多くあります。BGM・SE のライブラリ化、インタビュー音声の文字起こし準備、ポッドキャスト素材の整理など、用途はさまざまです。FFmpeg ではたった 1 コマンドで対応できますが、「無劣化コピー」と「再エンコード」の選択を誤ると、互換性の問題や品質ロスが生じます。本記事では、その違いを整理しながら代表的なフォーマット別のコマンド例を紹介します。
動作確認: ffmpeg 6.1.1 / Ubuntu 24.04
1. -vn オプション:映像ストリームを除外する
-vn は出力側に指定することで、映像ストリームを出力ファイルに含めないようにするオプションです。公式ドキュメントでは “disables video recording i.e. automatic selection or mapping of any video stream” と説明されています。
音声抽出の基本形は次のようになります。
ffmpeg -i input.mp4 -vn output.mp3
-vn を付けるだけで映像が除かれ、残った音声ストリームが出力フォーマットに合わせてエンコード(または変換)されます。
2. 無劣化抽出:-c:a copy を使う
仕組みと利点
-c:a copy を指定すると、音声データをデコード・エンコードせずにそのままコンテナに書き出します。処理が高速で、音質が変化しません。
ffmpeg -i input.mp4 -vn -c:a copy output.aac
コンテナとコーデックの互換性に注意
無劣化コピーは「コーデックはそのまま、コンテナだけ変える」ことになります。そのため、出力コンテナが入力コーデックをサポートしていなければなりません。
| 入力コンテナ | 音声コーデック | 無劣化コピー先として適切な拡張子 |
|---|---|---|
| .mp4 | AAC | .aac, .m4a, .mp4 (音声のみ) |
| .mkv | FLAC | .flac, .mkv |
| .mkv | AAC | .aac, .m4a |
| .mov | AAC | .aac, .m4a |
| .avi | MP3 | .mp3 |
たとえば AAC ストリームを .mp3 に無劣化コピーしようとすると、MP3 コンテナは AAC コーデックをサポートしていないためエラーになります。コーデックを変換せずに出力したいときは、コンテナがそのコーデックに対応しているかを事前に確認してください。
3. 再エンコード抽出
コーデックを変更する必要がある場合や、特定のビットレート・品質で出力したい場合は再エンコードを使います。
MP4 から MP3 に変換
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3
-c:a libmp3lame:MP3 エンコーダを指定-q:a 2:VBR 品質(0〜9、低いほど高品質)
MP4 から AAC に変換
ffmpeg -i input.mp4 -vn -c:a aac -b:a 192k output.aac
-c:a aac:FFmpeg 内蔵の AAC エンコーダ-b:a 192k:ビットレートを 192 kbps に指定
MKV から FLAC に変換
ffmpeg -i input.mkv -vn -c:a flac output.flac
FLAC はロスレスコーデックです。音声が非圧縮 PCM の場合は品質を保ったまま圧縮できます。
MKV から WAV(無圧縮)に変換
ffmpeg -i input.mkv -vn -c:a pcm_s16le output.wav
pcm_s16le は 16bit リトルエンディアン PCM で、一般的な WAV 形式です。
4. ストリームを明示的に指定する:-map 0:a:0
動画ファイルに複数の音声トラック(例:日本語音声+英語音声)が含まれている場合、デフォルトでは自動的に選ばれたトラックが出力されます。特定のトラックを指定したいときは -map を使います。
ffmpeg -i input.mkv -map 0:a:0 -c:a copy output.aac
0:最初の入力ファイルa:音声ストリーム0:その中の 0 番目(最初のトラック)
2 番目の音声トラックを取り出すには 0:a:1 と指定します。
5. 音声ストリームの確認(ffprobe)
抽出前にファイルの音声コーデックを確認しておくと、コンテナ互換性のミスを防げます。
ffprobe -v error -select_streams a -show_entries stream=codec_name,sample_rate,channels -of csv=p=0 input.mp4
出力例:
aac,44100,2
このように「コーデック名、サンプリングレート、チャンネル数」が確認できます。
6. 無劣化コピー vs 再エンコード:選択の基準
| 条件 | 推奨 |
|---|---|
| 出力コーデックを変えない(形式そのまま) | -c:a copy(無劣化) |
| 出力フォーマットが入力コーデックに非対応 | 再エンコード |
| ビットレート・品質を変更したい | 再エンコード |
| サンプリングレートを変更したい | 再エンコード |
品質の観点:無劣化コピーは音質が変わりません。再エンコードは、元の音声が既に非可逆圧縮(MP3・AAC など)の場合、世代劣化が生じます。可能な限り無劣化コピーを優先し、どうしてもコーデック変換が必要な場合のみ再エンコードを選択するのが基本方針です。
関連記事
動作確認: ffmpeg 6.1.1 / Ubuntu 24.04 (GitHub Actions runner)
一次ソース: ffmpeg.org/ffmpeg.html / ffmpeg.org/ffmpeg-codecs.html / ffmpeg.org/ffmpeg-filters.html