Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @setlocal enabledelayedexpansion
- rem このバッチを実行するカレントフォルダにffmpeg.exe、vpxenc.exe、元動画.mkv、keyframelist.txtを置くか.exeはパスを通す
- rem 中間ファイル元動画.mkvは全フレームキーフレームである必要がある。例えばUTvideoやrawvideo(YUV2)等にしておく。
- set keyframelist=%~dpn1.txt
- set srcvideo=%~dpn1.y4m
- set cq-level=35
- set color-space=bt601
- rem bt709 or bt601
- mkdir "%~dp0%~n1_cql%cq-level%\"
- rem 0,42,83,125…のようにキーフレームリストを1行に整形、変数%segmentframe%へ
- @for /f "tokens=1 skip=1 delims= " %%i in (%keyframelist%) do (
- set keyframe=%%i
- set /a keyframe-=1
- set segmentframe=!segmentframe!,%%i
- )
- rem %segmentframe%の通りにsegmentフィルタで%srcvideo%を分割、%~dp0%~n1_cql%cq-level%\out%%d_%~n1_cql%cq-level%.aviとして保存(out0_%~n1_cql%cq-level%.avi、out1_%~n1_cql%cq-level%.avi、out3_%~n1_cql%cq-level%.avi...と連番出力になる)
- rem %~dp0%~n1_cql%cq-level%\segmentlist_%~n1_cql%cq-level%.txtにセグメントリストを出力。出力動画を列挙したテキストファイル、out0_%~n1_cql%cq-level%.avi[改行]out1_%~n1_cql%cq-level%.avi[改行]out3_%~n1_cql%cq-level%.avi[改行]...
- ffmpeg.exe -y -i %srcvideo% -f segment -segment_list %~dp0%~n1_cql%cq-level%\segmentlist_%~n1_cql%cq-level%.txt -segment_frames %segmentframe:~1% -reset_timestamps 1 -c copy %~dp0%~n1_cql%cq-level%\out%%d_%~n1_cql%cq-level%.avi
- rem セグメントリストを1行ずつ読み込み分割した動画をエンコード。For内の変数%%iはout0_%~n1_cql%cq-level%.avi、out1_%~n1_cql%cq-level%.avi、out3_%~n1_cql%cq-level%.avi...と
- rem %%~niはout0、out1、out3...とファイル名のみに%%iが変数展開されている、バッチ 変数展開 ファイル名で調べて
- rem ビットレート上限なし2パス品質指定エンコード、一応上限は--min-q=20になる
- rem vpxencの--profile=2でyuv420p10le、色深度10bit指定vpxencはhighbitdepthビルドである必要がある
- rem データ量が大きくなる弊害よりもバンディングノイズが消える効果が大きいので特にバンディングが目立つアニメは10bitおすすめ
- @for /f "tokens=1 delims= " %%i in (%~dp0%~n1_cql%cq-level%\segmentlist_%~n1_cql%cq-level%.txt) do (
- rem 上書きする
- ffmpeg.exe -y -i %%i -pix_fmt yuv420p -f yuv4mpegpipe %~dp0%~n1_cql%cq-level%\%%~ni.y4m
- del %%i
- rem vpxenc.exe --threads=2 --end-usage=q --passes=2 --pass=1 --fpf=FirstPassStatisticsFile_%~n1_cql%cq-level%.fpf --best --target-level=40 --tile-columns=0 --tile-rows=1 --color-space=bt709 --output=FirstPassStatisticsFile_%~n1_cql%cq-level%.fpf %~dp0%~n1_cql%cq-level%\%%~ni.y4m
- rem vpxenc.exe --threads=2 --end-usage=q --passes=2 --pass=2 --min-q=26 --max-q=63 --cq-level=%cq-level% --aq-mode=%aq-mode% --fpf=FirstPassStatisticsFile_%~n1_cql%cq-level%.fpf --best --target-level=40 --tile-columns=0 --tile-rows=1 --color-space=%color-space% --disable-kf --lag-in-frames=25 --auto-alt-ref=1 --arnr-maxframes=15 --arnr-strength=6 --output=%~dp0%~n1_cql%cq-level%\%%~ni.webm %~dp0%~n1_cql%cq-level%\%%~ni.y4m
- rem 改変者の個人的ドット絵向け設定
- rem vpxenc.exe --threads=2 --end-usage=q --passes=2 --min-q=26 --max-q=63 --cq-level=%cq-level% --aq-mode=0 --best --target-level=40 --tile-columns=0 --tile-rows=1 --color-space=%color-space% --disable-kf --lag-in-frames=25 --auto-alt-ref=1 --arnr-maxframes=15 --arnr-strength=6 --output=%~dp0%~n1_cql%cq-level%\%%~ni.webm %~dp0%~n1_cql%cq-level%\%%~ni.y4m
- rem 改変者の個人的アニメ向け設定
- vpxenc.exe --threads=1 --end-usage=q --passes=2 --min-q=26 --max-q=63 --cq-level=%cq-level% --max-intra-rate=3 --bias-pct=100 --undershoot-pct=100 --overshoot-pct=100 --aq-mode=3 --noise-sensitivity=4 --best --target-level=40 --tile-columns=0 --tile-rows=1 --color-space=%color-space% --disable-kf --lag-in-frames=25 --auto-alt-ref=1 --arnr-maxframes=15 --arnr-strength=6 --output=%~dp0%~n1_cql%cq-level%\%%~ni.webm %~dp0%~n1_cql%cq-level%\%%~ni.y4m
- rem if not exist "%~dp0%~n1_cql%cq-level%\%%~ni.webm" mkdir "%~dp0temp\"
- rem if not exist "%~dp0%~n1_cql%cq-level%\%%~ni.webm" move "FirstPassStatisticsFile_%~n1_cql%cq-level%.fpf" "%~dp0temp\"
- rem if not exist "%~dp0%~n1_cql%cq-level%\%%~ni.webm" move "%~dp0%~n1_cql%cq-level%\%%~ni.y4m" "%~dp0temp\"
- rem del FirstPassStatisticsFile_%~n1_cql%cq-level%.fpf
- if exist "%~dp0%~n1_cql%cq-level%\%%~ni.webm" del %~dp0%~n1_cql%cq-level%\%%~ni.y4m
- )
- rem 1行目がffconcat version 1.0さっきのセグメントリストの行頭に"file "をつけ、拡張子_%~n1_cql%cq-level%.aviからwebmに変え%~dp0%~n1_cql%cq-level%\segmentlist_%~n1_cql%cq-level%.ffconcatとして保存
- rem out0_%~n1_cql%cq-level%.avi[改行]out1_%~n1_cql%cq-level%.avi[改行]out3_%~n1_cql%cq-level%.avi[改行]...がfile out0.webm[改行]file out1.webm[改行]file out3.webm[改行]...になる
- echo ffconcat version 1.0>%~dp0%~n1_cql%cq-level%\segmentlist_%~n1_cql%cq-level%.ffconcat
- @for /f "tokens=1 delims= " %%i in (%~dp0%~n1_cql%cq-level%\segmentlist_%~n1_cql%cq-level%.txt) do (
- echo file %~dp0%~n1_cql%cq-level%\%%~ni.webm>>%~dp0%~n1_cql%cq-level%\segmentlist_%~n1_cql%cq-level%.ffconcat
- )
- rem %~dp0%~n1_cql%cq-level%\segmentlist_%~n1_cql%cq-level%.ffconcatを読み込み.webmを連結
- ffmpeg.exe -y -f concat -i %~dp0%~n1_cql%cq-level%\segmentlist_%~n1_cql%cq-level%.ffconcat -c copy %~dp0%~n1_cql%cq-level%\%~n1_cql%cq-level%_concated.webm
- pause
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement