音源をm4aからwavにしたり逆だったりと変換する。
変換ソフトウェアは、FFmpegが使いやすい。
動画や音声ファイルから、別のコーデックの音声ファイルへの変換は、基本的には以下のコマンドできる。
ffmpeg.exe -i {input_path} -vn -sn {output_path}
変換を頻繁に行う場合は、コマンド入力が面倒なため、バッチファイルをデスクトップなど適当な場所に置いておくとD&Dでささっと変換できる。
変換先のファイル形式を変更したければ、m4a
の部分を任意に変更すればよい。
@echo off rem 音声ファイルを.m4a(AAC)に変換 chcp 65001 setlocal enabledelayedexpansion set x=%* for %%i in (!x!) do ( ffmpeg.exe -i %%i "%%~di%%~pi%%~ni.m4a" )
chcp 65001
: ファイル名の特殊文字に対応するため、UTF-8にするもう少し様々なコマンドの紹介
動画と音声が一緒くたになったファイルから、音声ファイルだけをコーデックを変えずに抽出する場合は、 上記の方法では再エンコードが行われてしまう。
コーデックをコピーするオプションを付けるとよい。
ffmpeg.exe -i {input_path} -c:a copy -vn -sn {output_path} ~~~~~~~~~
その際、入力ファイルの音声コーデックによってoutput_pathに付与する拡張子が変わってくる。
-c:a copy
オプションを付けている時点で中身はオリジナルが維持されるので、ファイル名称だけの問題なのだが、何となく気持ち悪い。
ffmpegには「ffprobe」というメディアファイルを解析して情報を出力するツールも付随するので、それを使えば事前にコーデックを識別できる。
ffprobe -i {input_path}
ファイル数が少なければ手動で設定してもいいし、 コーデックをffprobeの出力から判別してoutput_pathの拡張子を決定する簡単なプログラムをバッチか何かで組むと、自動で実態に合った拡張子を指定できる。
変換先拡張子に'.webm'を指定すると、Opusという高圧縮で遅延の少ないコーデックになる。最近のYouTubeなどに使用されている。
これ、サンプリングレートが元が44100Hzなどでも48000Hzになって変換される。仕様上、44100Hzには対応していない。
リサンプリングが行われてしまうので少し劣化が気になるが、とはいえ、 そもそも不可逆圧縮にかけている時点で劣化は避けられないので、そういうものと割り切る。
AACへの変換は、FFmpegに内蔵されるエンコーダでもある程度は高品質だが、 Fraunhofer FDK AACというAndroidなど向けにオープンソースで開発されているエンコーダを使えばよりよい音質になると言われている。
これ、ライセンスの関係上FFmpegには同梱できないらしく、使いたければ同梱したFFmpegを自前でビルドする必要がある。 (Windowsで自前ビルド……何とも環境構築でハマる嫌な予感がする)
とはいえ、最近はWindowsでもWSLが使えるし、自動ビルドツール(ffmpeg-windows-build-helpers)もあるので、その通りになぞらえればよい。
sudo apt update && sudo apt upgrade
cd ~ git clone https://github.com/rdp/ffmpeg-windows-build-helpers.git cd ffmpeg-windows-build-helpers
sudo apt install -y subversion curl texinfo g++ bison flex cvs yasm automake libtool autoconf gcc cmake git make pkg-config zlib1g-dev mercurial unzip pax nasm ragel gperf autogen bzip2 autoconf-archive p7zip-full meson python3-distutils
wget http://archive.ubuntu.com/ubuntu/pool/universe/m/meson/meson_0.49.0-2ubuntu1_all.deb dpkg -i meson_0.49.0-2ubuntu1_all.deb
sudo bash -c 'echo 0 > /proc/sys/fs/binfmt_misc/WSLInterop'
./cross_compile_ffmpeg.sh --build-ffmpeg-static=y --build-intel-qsv=y --disable-nonfree=n --ffmpeg-git-checkout-version=n4.2.2
–build-ffmpeg-static=y
–build-ffmpeg-shared=y
–build-intel-qsv=y
–disable-nonfree=n
–ffmpeg-git-checkout-version=n4.2.2
HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss\{###SID###}\BasePath
に、WSLのルートのある場所が記録されているffmpeg_git_with_fdk_aac_n4.2.2_shared\bin
の中身を丸ごとコピーすれば使える