やさぐれSEの技術メモ

皆が辛い思いをしないようにハマったポイントなどを書きます

ffmpegによる動画ファイルからの音声抽出

ffmpegとは

ffmpegは動画及び音声を記録・変換・再生するためのOSSです。
https://ja.wikipedia.org/wiki/FFmpeg

LinuxCLI上でも実行でき、非常に便利です。

今回の環境

Google Compute Engine上で検証を実施しました。

Debian Linuxでの手順となります。
Linux instance-1 4.9.0-8-amd64 #1 SMP Debian 4.9.110-3+deb9u6 (2018-10-08) x86_64 GNU/Linux

インストール

パッケージのインストールのみとなります。
非常に簡単です。

$ sudo apt-get install ffmpeg
~省略~
Do you want to continue? [Y/n] Y ←Yを入力します。

操作方法

詳細については公式HPをご確認頂ければと思います。
https://www.ffmpeg.org/

動画情報の確認
下記コマンドで動画ファイルの詳細を確認できます。
$ ffmpeg -i 動画ファイルのパス

$ sudo ffmpeg -i test.mov
ffmpeg version 3.2.12-1~deb9u1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --prefix=/usr --extra-version='1~deb9u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
libavutil 55. 34.101 / 55. 34.101
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.101 / 57. 56.101
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mov':
Metadata:
major_brand : qt 
minor_version : 512
compatible_brands: qt 
encoder : Lavf58.12.100
Duration: 00:02:57.59, start: 0.000000, bitrate: 3666 kb/s
Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 3532 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
Metadata:
handler_name : DataHandler
encoder : Lavc58.18.100 libx264
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : DataHandler
At least one output file must be specified

動画から音声ファイルを抽出する

下記のコマンドにて動画から音声ファイルを抽出します。
細かなオプションは色々あるのですが、変換先の拡張子を指定すると勝手に変換をしてくれるようです。
かなり便利です。

$ ffmpeg -i 動画ファイル 変換後の音声ファイル

例 movファイルからflacファイルを抽出

# 動画から音声を抽出
$ ffmpeg -i test.mov test_stereo.flac

# 音声ファイルの確認
$ sudo ffmpeg -i test_stereo.flac
ffmpeg version 3.2.12-1~deb9u1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --prefix=/usr --extra-version='1~deb9u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --
incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --
enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-
libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --
enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-
libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-
libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --
enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --
enable-libopencv --enable-libx264 --enable-shared
libavutil 55. 34.101 / 55. 34.101
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.101 / 57. 56.101
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
Input #0, flac, from 'test_stereo.flac':
Metadata:
MAJOR_BRAND : qt 
MINOR_VERSION : 512
COMPATIBLE_BRANDS: qt 
ENCODER : Lavf57.56.101
Duration: 00:02:57.56, start: 0.000000, bitrate: 1291 kb/s
Stream #0:0: Audio: flac, 44100 Hz, stereo, s32 (24 bit)
At least one output file must be specified

動画ファイルから音声を抽出とステレオ→モノラルに変更する

音声抽出に加えてモノラル音声に変更する例となります。
他にもビットレートやサンプリング周波数も変えることが出来ます。
このあたりは公式ドキュメント等々をご確認ください。

$ ffmpeg -i 動画ファイル -ac 1 変換後の音声ファイル

# 変換コマンド
$ ffmpeg -i test.mov -ac 1 test_mono.flac

# 音声の確認
$ sudo ffmpeg -i test_mono.flac
ffmpeg version 3.2.12-1~deb9u1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration: --prefix=/usr --extra-version='1~deb9u1' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
libavutil 55. 34.101 / 55. 34.101
libavcodec 57. 64.101 / 57. 64.101
libavformat 57. 56.101 / 57. 56.101
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libavresample 3. 1. 0 / 3. 1. 0
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
Input #0, flac, from 'test_mono.flac':
Metadata:
MAJOR_BRAND : qt 
MINOR_VERSION : 512
COMPATIBLE_BRANDS: qt 
ENCODER : Lavf57.56.101
Duration: 00:02:57.56, start: 0.000000, bitrate: 693 kb/s
Stream #0:0: Audio: flac, 44100 Hz, mono, s32 (24 bit) ←ここがモノラルになっています
At least one output file must be specified