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でも音ズレが無いことを確認できた。
単純な処理を行っているだけにも関わらず、落とし穴が多すぎて意外と時間を食ってしまった。 他の人にはこのような苦痛を味わってほしくない。