@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET BATDIR=%~dp0

REM //--------------------------------------------------------------------------
REM // * Sat Oct 29 01:47:50 JST 2016 Naoyuki Sawa
REM // - 1st リリース。
REM // - 動画のフレーム数を定義したヘッダファイルを生成するスクリプトです。
REM //   まだ汎用的に使用する事は考えていないので、とりあえずの実装です。
REM // - 全てのアプリケーションで、当スクリプトを実行する必要は有りません。
REM //   動画のフレーム数が必要なアプリケーションでのみ、実行して下さい。

REM //--------------------------------------------------------------------------
IF EXIST TotalFrames.h DEL TotalFrames.h
(FOR %%i IN (mov\*.*) DO (
  ECHO %%i >&2
  pipefail.exe -q echo.exe %%~ni ^
               ^| onigsed.exe -e "s/-.*//" ^
               ^| onigsed.exe -e "s/.*/#define TOTAL_FRAMES__\U&\E \\/"
  IF ERRORLEVEL 1 GOTO L_ERR
  REM //拡張子を取得する。
  SET ext=%%~xi
  REM //拡張子が「.usm」ならば…
  IF /I "!ext!" EQU ".usm" (
    pipefail.exe -q SofdecProbe.exe -c %%i ^
                 ^| onigsed.exe -ne "/^\\\".*\\\",[[:digit:]]\+,[[:digit:]]\+,[[:digit:]]\+,[[:digit:]]\+,[[:digit:]]\+,[[:digit:]]\+,[[:digit:]]\+,\([[:digit:]]\+\),[[:digit:]]\+,[[:digit:]]\+,[[:digit:]]\+$/{s//\t\1/p;q}"
                    REM //                        width         height        disp_width    disp_height   framerate     framerate_n   framerate_d     total_frames   material_width material_height alpha
    IF ERRORLEVEL 1 GOTO L_ERR
  REM //拡張子が「.usm」以外ならば…
  ) ELSE (
    REM //ffprobe.exeは動画の情報を標準エラー出力に出力するので、pipefail.exeが使えませんでした。
    REM //pipefail.exeを使わないと、パイプの中でffprobe.exeがエラーになった時に検出出来ませんが、止むを得ません。
    REM //※※※※※※※※※※以下の処理は未検証です。※※※※※※※※※※
    ffprobe.exe %%i 2>&1 ^
                  | onigsed.exe -ne "/.*Duration:[[:blank:]]*0*\([[:digit:]]\+\):0*\([[:digit:]]\+\):0*\([[:digit:]]\+\).0*\([[:digit:]]\+\),.*/{s//\t(((((\1*60+\2)*60+\3)*100+\4)\+2)\/3)/p;q}"
    IF ERRORLEVEL 1 GOTO L_ERR
  )
)) >> TotalFrames.h

REM //--------------------------------------------------------------------------
	ECHO 完了しました。
	TIMEOUT /T 3 /NOBREAK
EXIT /B

REM //--------------------------------------------------------------------------
:L_ERR
REM //□不完全な最終出力ファイルを確実に削除します。
IF EXIST TotalFrames.h DEL TotalFrames.h
ECHO ###エラーが発生しました。
	PAUSE
EXIT /B 1
