ffmpeg.exe -i 201603251638.mp4 -r 5 %06d.png
コマンドライン上で上のコマンドを入力すれば、フレームレート5枚/秒で 連番6桁埋めのPNGファイルが生成される。
しかし、以前利用したバッチファイルでドラッグアンドドロップで実行しようとすると、ファイル名がおかしくなる。
上のコマンドをそのままバッチファイルにすると
C:\bin\ffmpeg\bin>ffmpeg.exe -i 201603251638.mp4 -r 5 "C:\bin\ffmpeg\bin\output.bat"6d.png
となってしまう。%06dが意図しない動作の原因のようだ。(%0は、実行しているバッチ名に変換されてしまうらしい。)
特殊文字でバッチ処理内で解釈されてしまいffmpeg.exeに意図したとおりに渡っていないようだ。
を見るとバッチファイル内では%は特殊文字で%%06d.pngとしないといけない。
@ECHO OFF
:FILEDROP
ECHO ファイル受け取り
cd %~dp0C:\bin\ffmpeg\bin\ffmpeg.exe -i %1 -r 5 %~dp1%%06d.png:EXIT
pause
意図した動作になった。
しかし、mp4ファイルと同じ階層にPNGファイルが多数生成されて面倒だ。事前に出力用のフォルダを作っておき、そのフォルダに出力するようにした。
を参考に日付と時間を取得しておく、システムの時間を変換する部分は当該サイトを参照のこと。%custDate%%custTime%をいきなり使っても動かない。
md %~d1%~p1%custDate%%custTime%
のようにしてフォルダを作る。
その後、
C:\bin\ffmpeg\bin\ffmpeg.exe -i %1 -r 1 %~d1%~p1\%custDate%%custTime%\%%06d.png
のようにして出力した。