下林明正のブログ

個人的かつ雑多なブログです。

ShadowPlay HighLightsで撮影したPUBGの動画を結合した

2017年なんだし動画の結合くらい簡単にできるやろと思っていたが、想像以上に厳しい状況だったので情報をまとめておく。

先ず、既存のソフトウェアで実現できないかいろいろ試してみたが、満足できるものはなかった。

  • AviUtl: 音ズレが改善できず
    • VFR->CFRの変換を試してみたが、改善されなかった
    • Handbrakeなどの外部ソフトを使って解消できそうだったが、そんなめんどくさいことをしてまで動画を結合したいと思えなかったので試さなかった
  • UniteMovie: 音ズレが改善できず
  • redditで見つけた怪しいffmpegラッパー: 音ズレを解消できたが、ファイルパスの取り扱いが雑で今後使おうと思えなかった

どれも満足できなかったが、どうやらffmpegで結合するとうまくいくようなのでそれならbatファイルを書くくらいで実現できるのではないかと考え、以下のbatファイルを記述した。

ffmpegコマンドにパスを通した上で merge-videos.bat などという名前のテキストファイルとして保存すれば利用できるはず。 batファイルに結合したい動画をドラッグアンドドロップすれば良い。

@echo off

REM .bat for merge videos

REM setlocal to manipulate variables in for loop.
REM   http://qiita.com/mitsuru793/items/eff207178546d6d29237
setlocal enabledelayedexpansion

REM Create video list, and call ffmpeg to merge videos.
REM   https://trac.ffmpeg.org/wiki/Concatenate

del mylist.txt
for %%i in (%*) do (
  REM Argument including spaces are adding double-quotes in secretly, So suppress behavior with tilde
  REM   http://tounderlinedk.blogspot.jp/2011/03/forcall-windowsbatcmd.html
  SET FILE=%%~i

  REM Escape quotes for ffmpeg
  REM   https://www.ffmpeg.org/ffmpeg-utils.html#Quoting-and-escaping
  SET FILE=!FILE:'='\''!

  echo file '!FILE!' >> mylist.txt
)

call ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp4

del mylist.txt

pause

結合した動画は手元でもYouTubeでも音ズレが無いことを確認できた。

単純な処理を行っているだけにも関わらず、落とし穴が多すぎて意外と時間を食ってしまった。 他の人にはこのような苦痛を味わってほしくない。