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

Linux
この記事は約4分で読めます。

まえがき

FFmpegは動画や音声を再生・変換するオープンソースソフトウェアです。他にもフィルタ処理をしたり直接ストリーミングさせるなど様々な機能を有しているため多くのソフトウェアに採用されています。さらにLinux、macOS、Windowsなどほぼ全てのOSやアーキテクチャで動作します。

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やyt-dlpなどを使えば簡単に抽出することが可能です。

youtube-dl Download videos from YouTube

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

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

おわり

おまけ

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

Photo by Namroud Gorguis on Unsplash

コメント

  1. 川田 より:

    お聞きしたいことがあります。
    Mac対応はできますか。また、最初設定は「AAC」エンコーダとなりますか。
    ご教授お願い。

  2. SlackNote slacknote より:

    返信が遅くなってしまい、申し訳ありません。
    コメントありがとうございます。
    macOS でも Homebrew などのパッケージマネージャを使うことで ffmpeg を使用することができるようです。
    しかし私自身 macOS を短期間しか使用したことがなく、手元にもないので詳しく解説することができません。
    ご期待に添えず、申し訳ありません。

  3. […] FFmpeg で動画から音声だけ無劣化抽出 (分離) | SlackNote […]

  4. […] この記事を参考に FFmpeg で音声を取り出します […]

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