FFmpegで動画から音声だけ無劣化抽出(分離)

Linux

Photo by Namroud Gorguis on Unsplash

FFmpeg を使えばコピーガードなどがかかっている動画以外ならたいてい音声だけを無劣化で分離・抽出できる。

これは Linux を前提とした記事だが、 Windows でもコマンドプロンプトを用いて同様のことができる。

ターミナルを開いて以下のコマンドを入力

$ ffmpeg -i '/hogehoge/hoge.flv' -vn -acodec copy '/hogehoge/hoge.opus'

簡単に解説すると-i  は処理内容を表示させるオプション。

シングルクォーテーションで囲まれた /hogehoge/hoge.flvはコピー元となる動画。

vn は動画部分を無効化するオプション。

-acodec はオーディオコーデックの内容を指定。 そのあとの copy でそのまま音声をコピーするオプション。

最後の /hogehoge/hoge.opus は出力先。任意の名前を指定しよう。

上記の例では抽出する音声データが Opus 音声圧縮フォーマットとしているため、出力先のファイルの拡張子を opusと指定しているが、音声データに合った拡張子をつけなければ変換に失敗する。

なので、あらかじめ動画コンテナに入っている音声データがどんな形式か把握しておかなければならない。

音声データの形式を調べる

コマンド実行が失敗した場合、処理内容を見ていくと何が原因かわかる。大抵は拡張子が正しくないことが原因。

ffmpeg version 3.3.2 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 7.1.1 (GCC) 20170630
〜中略〜
Stream #0:0(jpn): Video: h264 (CB) (avc1 / 0x31637***), yuv***p, ***x384 [SAR 1:1 DAR 4:3], *** kb/s, **.** fps, **.** tbr, **k tbn, **.** tbc (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / *x61347***), 44100 Hz, stereo, fltp, 64 kb/s (default)
Metadata:
creation_time : 2017-07-26T00:00:00.000000Z
handler_name : mp4-audio.aac#audio@GPAC*.*.*-DEV-rev****

5行目に注目してほしい。 Audio: aac となっている。

この動画の場合、音声データは AAC のためコンテナファイルフォーマットは通常 MP4 となる。拡張子は .mp4 や .m4a

ここが mp3 だったら拡張子は mp3、vorbis なら oga といった感じに指定する。

Youtubeから直接音声だけ抽出する

youtube-dl などを使えば簡単に抽出可能。

youtube-dl Download videos from YouTube

$ youtube-dl -x https://www.youtube.com/watch?v=***********

-x オプションを付与することで動画をダウンロード後に音声を分離してくれる。


動画から分離した音声データはさまざまな形式で圧縮されていると思います。そういった雑多なファイルを一括で変換するコマンドをつくりました。よろけしれば下記の記事もご覧ください。

コメント

タイトルとURLをコピーしました