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と指定しているが、音声データに合った拡張子をつけなければ変換に失敗する。
なのであらかじめ動画コンテナに入っている音声データがどんな形式か把握しておかなければならない。
音声データの形式を調べる
コマンド実行が失敗した場合、処理内容を見ていくと何が原因かわかる。大抵は拡張子が正しくないことが原因。
$ ffpmeg -i
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 の動画から音声を抜き出したい場合は youtube-dl などを使えば簡単に抽出可能。
youtube-dl Download videos from YouTube
$ youtube-dl -x https://www.youtube.com/watch?v=***********
-x オプションを付与することで動画をダウンロード後に音声を分離してくれる。
動画から分離した音声データはさまざまな形式で圧縮されていると思います。そういった雑多なファイルを一括で変換するコマンドをつくりました。よろけしれば下記の記事もご覧ください。
コメント
お聞きしたいことがあります。
Mac対応はできますか。また、最初設定は「AAC」エンコーダとなりますか。
ご教授お願い。
返信が遅くなってしまい、申し訳ありません。
コメントありがとうございます。
macOS でも Homebrew などのパッケージマネージャを使うことで ffmpeg を使用することができるようです。
しかし私自身 macOS を短期間しか使用したことがなく、手元にもないので詳しく解説することができません。
ご期待に添えず、申し訳ありません。
[…] FFmpeg で動画から音声だけ無劣化抽出 (分離) | SlackNote […]
[…] この記事を参考に FFmpeg で音声を取り出します […]