OBSには、音声を複数のストリームに分けて録画する機能がある。
Shotcutを使って編集しているのだけれど、複数の音声ストリームをうまく扱えないでいる。 1つの動画アイテムに対して、全部のストリームを混ぜるか、もしくは1つの音声ストリームを選ぶことはできるけれど、音声ストリームを選択して混ぜることができない。 動画アイテムを複製すればできるはずだけれど、そういう想定なのかな・・・?
→ 音声を分離したあと、音声を複製して、それぞれストリームを選択すればいいのかもしれない。
ffmpegは、mapオプションを使って複数のストリームを持つ動画ファイルを扱うことができる。
そこでffmpegを使って、音声なしの動画ファイルと、各音声ストリームを別々に取り出した音声ファイルに分割するのを試してみた。
以下のようなシェルスクリプトを作った(映像:NVENC H.264、音声aacのmkvファイルを想定)。
#!/bin/bash INPUT=$(realpath "$1") #OUTDIR=$(realpath -- "$(dirname "${INPUT}")") OUTDIR=. FILENAME=$(basename -- "${INPUT}") EXTENSION="${FILENAME#*.}" BASENAME="${FILENAME%%.*}" mkdir -p "${OUTDIR}" ffmpeg -i "${INPUT}" \ -map 0:v:0 -vcodec copy "${OUTDIR}/${BASENAME}_video.${EXTENSION}" \ -map 0:a:1 -vn -acodec copy "${OUTDIR}/${BASENAME}_app.m4a" \ -map 0:a:2 -vn -acodec copy "${OUTDIR}/${BASENAME}_mic.m4a" \ -map 0:a:3 -vn -acodec copy "${OUTDIR}/${BASENAME}_meta1.m4a" \ -map 0:a:4 -vn -acodec copy "${OUTDIR}/${BASENAME}_vc.m4a" splitAudioTrack myrecording.mkv これを使って、Fallguysの60fps, 15分程度の録画ファイルを分割してみたけれど、ストレージが録画用のHDDなのが悪いのか、変換に実時間程度かかってしまうことがあった (ffmpegは、Windows 10上でWindowsバイナリとWSL2上のLinuxバイナリをそれぞれ試したけれど、速度はほぼ同じだった)。
場合によって、4倍速から7倍速で分割できることもある。Windows Defenderとか、Search Indexerとかが悪さをしているのかもしれない。 FPSも、実際に60フレームを正確に掴めてはいないと思うし、容量や処理時間と映像品質の間でコスパが悪いと思うので、30fpsに落とすと速くなりそうではある。
1度分割すれば好きな動画編集ソフト上で、各ファイルをトラック(レイヤー)に配置して好きにできるけれど、分割に時間がかかるのはうれしくない…。 分割ファイルができることによって容量が2倍になるのもうれしくない…。
...