動画から音声を抽出する — 無劣化コピーと再エンコードの使い分け

動画ファイルの音声トラックだけを取り出したい場面は多くあります。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

コンテナとコーデックの互換性に注意

無劣化コピーは「コーデックはそのまま、コンテナだけ変える」ことになります。そのため、出力コンテナが入力コーデックをサポートしていなければなりません

入力コンテナ音声コーデック無劣化コピー先として適切な拡張子
.mp4AAC.aac, .m4a, .mp4 (音声のみ)
.mkvFLAC.flac, .mkv
.mkvAAC.aac, .m4a
.movAAC.aac, .m4a
.aviMP3.mp3

たとえば AAC ストリームを .mp3 に無劣化コピーしようとすると、MP3 コンテナは AAC コーデックをサポートしていないためエラーになります。コーデックを変換せずに出力したいときは、コンテナがそのコーデックに対応しているかを事前に確認してください。


3. 再エンコード抽出

コーデックを変更する必要がある場合や、特定のビットレート・品質で出力したい場合は再エンコードを使います。

MP4 から MP3 に変換

ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3

MP4 から AAC に変換

ffmpeg -i input.mp4 -vn -c:a aac -b:a 192k output.aac

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

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