OBS Studio+ffmpegで複数種音声を同時録音&分離
OBS Studioのマルチトラック機能を使って音声を録音し、ffmpegを使って分離することで、1回の録画でPC音+マイク音、PCが音のみ、マイク音のみなど各音声のデータを独立して得ることができます。
映像と各種音声を同時に録画/録音できるため音声の同期を取る必要がなくなり、よりスムーズに動画編集を行うことができるでしょう。
今回の記事の概略図
想定している対象者
肉声実況している動画投稿者など
必要なもの
- OBS Studio( https://obsproject.com/ja )
- FFmpeg(Gyan氏)( https://www.gyan.dev/ffmpeg/builds/ )
FFmpegは上記ページの真ん中辺りにリリースビルドのFFmpegダウンロードリンクがあります。Full、essentialどちらでも構いません。
ttps://www.gyan.dev/ffmpeg/builds/ffmpeg-release-xxxxx.7z/zip
準備(OBS Studio)
※音声録音の部分のみ説明します。エンコード設定など録画に関する解説は割愛させていただきます。
1. 音声入力の設定
「ファイル」→「設定」から設定ウィンドウを開き、音声タブを開きます。
デバイス欄の「デスクトップ音声」、「マイク音声」を設定して下さい。どのデバイスを指定すればよいかわからない場合は、デスクトップ画面下のタスクバーにあるスピーカーアイコンを右クリック→「サウンド」からサウンドウィンドウを開き、再生タブ、録音タブ内で動いているメーターがあるものを指定して下さい。「規定」を指定した場合、このウィンドウで「規定のデバイス」に指定されているデバイスが使われます。
メイン画面のミキサーに表示され、メーターが正常に動いていることを確認して下さい。
2. マルチトラック機能の設定
「ファイル」→「設定」から設定ウィンドウを開き、出力タブを開きます。
出力モード→詳細に変更し、録画タブを開きます。
種別を標準(ローカル録画)にし、録画先を指定して下さい。 録画フォーマットはflv以外を。警告にあるように、mkvを使うことをおすすめします。 なお、再多重化(≒mp4化)は詳細設定タブの「自動的にmp4に再多重化」にチェックを入れることで自動的に行われるようになります。
音声トラックは分離したい数だけチェックを入れます。今回は1、2、3にチェックを入れます。 (①は配信で使用、②、③はあとで抽出する用)。
①デスクトップ音声+マイク音
②デスクトップ音声
③マイク音
この場合、配信タブの音声トラックで①にチェックを入れて下さい。
次に、各トラックのビットレートを指定します。音声タブを開くと各トラックのビットレートを指定できるので、適切に設定して下さい。
3. 音声出力の詳細設定
各音声をどのトラックに出力するかを設定します。
「編集」→「オーディオの詳細プロパティ」から、オーディオの詳細プロパティウィンドウを開きます。
- トラック1は配信用、デスクトップ音声+マイク音声
→両方のデバイスでチェック - トラック2はデスクトップ音声のみ
→デスクトップ音声のみチェック - トラック3はマイク音声のみ
→マイクのみチェック
以上で設定は終わりです。実際に録画をし、録画ファイルが生成できることを確認して下さい。
音声の抽出
録画ファイルから音声(+映像)を抽出します。抽出にはffmpegを使用します。
1. 設定ファイルの作成、実行
ffmpegに行わせたい処理(今回の場合、録画ファイルから各トラックの音声を抽出する)を記述します。メモ帳を開き、以下の文字列を入力して下さい。
@echo off
set INPUT=%~f1
set OUTPUT=%~n1
%~d0
cd %~d0%~p0
ffmpeg.exe -i “%INPUT%” -map 0:0 -vcodec copy “%OUTPUT%_video001.mp4” -map 0:1 -vn -acodec copy “%OUTPUT%_audio001.m4a” -map 0:2 -vn -acodec copy “%OUTPUT%_audio002.m4a” -map 0:3 -vn -acodec copy “%OUTPUT%_audio003.m4a”
例では、動画ファイルからの抽出のみを行っています。変換もしたい場合(音声ファイルm4aをwavにしたい等)は、ページ下部の補足に記述したのでそちらをご覧ください。
入力したら保存します。ファイルの種類を「すべてのファイル」に変更し、ファイル名を「xxx.bat」、文字コードはANSIとして保存して下さい。(UTF-8でいけると思ったらBOMありとなって文字化けが発生してしまいました。利用には支障ありませんが…)
保存してファイルxxx.batが生成されたら適当なフォルダを作成し、xxx.batとffmpeg.exeを入れて下さい。
あとは変換したい動画ファイルをxxx.batファイルへドラッグアンドドロップすれば、同じ場所に抽出された映像ファイル、音声ファイルが出力されます。
(設定ソフトのダウンロード)
※使い方がわからない、出力先を指定したい、手軽に変換したい場合、簡易的な設定ソフトを作成したのでこちらを利用してみて下さい。
2020-02-24 各パスに日本語が含まれている場合に抽出ができない不具合を修正しました。
ダウンロード
※要 .NET Framework 4.7.2
※ffmpeg.exeは各自ダウンロードしてください。
補足
ファイルの抽出時に変換を同時に行う ffmpegへの命令コードを書き換えることで、抽出と変換を同時に行うことができます。命令コード中にcopyという文字列がありますが、これは無変換で出力するという意味です。この部分を書き換えます。
例)音声ファイルをwavファイルに変換する場合
(ファイルをD&Dする方)
@echo off
set INPUT=%~f1
set OUTPUT=%~n1
%~d0
cd %~d0%~p0
ffmpeg.exe -i “%INPUT%” -map 0:0 -vcodec copy “%OUTPUT%_video001.mp4” -map 0:1 -vn -acodec pcm_s16le “%OUTPUT%_audio001.wav” -map 0:2 -vn -acodec pcm_s16le “%OUTPUT%_audio002.wav” -map 0:3 -vn -acodec pcm_s16le “%OUTPUT%_audio003.wav“
(ファイルをD&Dしない方)
@echo off
[ffmpeg.exeのパス] -i [録画ファイルのパス] -map 0:0 -vcodec copy “video001.mp4” -map 0:1 -vn -acodec pcm_s16le “audio001.wav” -map 0:2 -vn -acodec pcm_s16le “audio002.wav” -map 0:3 -vn -acodec pcm_s16le “audio003.wav“
copyをpcm_s16leに書き換え、拡張子を対応するものに書き換えます。これを実行するとwavに変換された音声ファイルが出力されます。
使用できるコーデックについてはこちらに綺麗にまとめられています。libx265等最近利用可能となったコーデックは書かれていなかったので、詳細を知りたい方はPowerShellを開き、
[ffmpeg.exeのパス] -codecs
と入力してEnterを押すことで使用できるコーデックを確認することができます。
-mapの意味
命令コードに-map 0:0、-map 0:1などがあります。これは以下のような意味となっています(正確ではないかもしれません)
ストリームというのは、映像や音声のことです。例えば今回録画した動画の場合、映像は1つ、音声はデスクトップ音声+マイク音、デスクトップ音声のみ、マイク音声のみの3つあるので、映像ストリームが1、音声ストリームが3ある、ということになります。
今回は既存ファイルから各ストリームを抽出しましたが、この場合入力ファイルは1つのみなので、-mapの左側の番号は0固定となります。複数のファイルを統合して1つのファイルを作成する場合は左側の数字が変わっていきます。TVの副音声あり番組みたいな映像を作成したい場合に使われるのでしょう。
右の番号ですが、0からカウントを始め、映像と音声が両方存在する場合は映像が優先して番号が振られるようです。今回録画したファイルの場合、
- -map 0:0 映像ストリームa
- -map 0:1 音声ストリームa(デスクトップ音声+マイク音声)
- -map 0:2 音声ストリームb(デスクトップ音声のみ)
- -map 0:3 音声ストリームc(マイク音声のみ)
となります。OBS Studioで録画する場合は映像は必ず一つですが、音声は設定によって数が変わるので、命令コードを適宜修正して使用して下さい。