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に行わせたい処理(今回の場合、録画ファイルから各トラックの音声を抽出する)を記述します。メモ帳を開き、以下の文字列を入力して下さい。
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”
入力したら保存します。ファイルの種類を「すべてのファイル」に変更し、ファイル名を「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する方)
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しない方)
[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:1 音声ストリームa(デスクトップ音声+マイク音声)
-map 0:2 音声ストリームb(デスクトップ音声のみ)
-map 0:3 音声ストリームc(マイク音声のみ)
となります。OBS Studioで録画する場合は映像は必ず一つですが、音声は設定によって数が変わるので、命令コードを適宜修正して使用して下さい。
コメント
ナポリーと申します。
とても詳しく音声の抽出方法記載頂きありがとうございます。
記載されている内容でやってみたのですがうまく音声が抽出されず困っています。
作成頂いた設定ソフトを使用しても分離ファイルができない状況です。
一瞬黒いウインドウはでますが抽出がされません。
OBSの設定は何度も確認しましたが問題ないとおもいます。
元ファイルをmkvやmp4など色々試してみましたがどれもダメでした。
対応策などありますでしょうか?
大変恐縮なのですがもしあればご教授頂けると幸いです。
ご迷惑をおかけして申し訳ありません。
ffmpeg.exeや動画ファイルのパスに日本語などの2バイト文字が含まれていると、実行に失敗することがあります。
で、ついうっかりしていたのですが、アップロードしたアプリケーションはたしかフォルダ名を音声抽出~にしていたと思うので、これが原因の可能性が高いです…
実行ファイルがあるフォルダ、動画ファイルの名前を英数字のみなどに変更して試してみてください。
(アップロードしたファイルの修正、次回の返信は来週の月曜日以降になると思います。文字コードに起因する問題な気がするので見直してみます。)
先程修正したものをアップロードしました。
https://dl.dropboxusercontent.com/s/3uesvdc9xf6e18l/%E9%9F%B3%E5%A3%B0%E6%8A%BD%E5%87%BAforFFmpeg.zip
わざわざご対応ありがとうございます。
バタバタしておりご返信おくれてすみません。
無事に分割する事ができました。
ありがとうございます!
コメント失礼します
簡易ソフトの方を使わせてもらったのですが
一つの音声しか抽出できません
複数個の音声を抽出できるようにできませんか?
よろしくお願いします
ごめんなさい
解決しました
トラック数の場所だけ抽出だと勝手に思っていました
トラック数の数だけ抽出される事に気が付きました
申し訳ないです
大切に使わせていただきます!
簡易ソフトの方、無茶苦茶便利です。
お礼を言わせてください
有難うございます(´_ゝ`)
手持ちのソフトが複数トラックに対応していなかったので助かりました!
ソフト使わせていただきます!!(o*。_。)oペコッ
便利なソフトを配布いただき感謝いたします。
一点確認したいことがありましたのでそうなった経緯を含めてお話します。
まず本ページでリンクされているffmpegですが、リンク先で配布を終了した模様です。
そこで下記ページを参照して
ttps://www.leawo.org/jp/tutorial/ffmpeg-windows-1354.html#part2
執筆時点では最新の
ttps://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z
よりffmpegをダウンロード・解凍して、
binフォルダ内の全てを「C:\Windows\system32\」へ移動・コマンドプロンプトにてインストールしました。
ここで早速配布して頂いた変換ファイル(デスクトップに解凍)から、
ffmpegの場所を参照したのですが、「C:\Windows\system32\」内に見つかりません。
試しにffmpeg.exeのみデスクトップに移動させたら正常に変換できました。
ffmpegと変換ソフトは同じフォルダ内に無いとダメなのでしょうか?
返信が非常に遅れてしまいました…
FFmpegのバイナリ配布サイトが閉鎖していたのですね… Gyan氏の配布サイトにリンクを差し替えました。
>>ffmpegと変換ソフトは同じフォルダ内に無いとダメなのでしょうか?
ffmpeg.exeのみデスクトップに移動させたら正常に変換できたとのことなので、おそらくアクセス制限がかかっている場所を参照しようとしたのが原因と思われます(管理者権限が必要なはず)。
マルチオーディオトラックの音声抽出に悩み、ffmpegの使い方に悩み、
こちらの簡易ソフトが非常に救いなりました。
使わせていただきます。ありがとうございます。