经常用 ffmepg 批量视频截图,网上都有现成拿来直接用,但偶尔想要带时间戳的截图方便找素材位置,之前在网上找了很久未果,最近终于找到一个相近的,在 powershell 测试是能套娃 ffprobe 执行
原版
.\ffmpeg.exe -i ".\video.mp4" -vf "fps=1/'$(.\ffprobe.exe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 .\video.mp4)'*5,drawtext=fOntfile=C\\:/Windows/Fonts/Arial.ttf:fOntsize=45:fOntcolor=yellow:box=1:[email protected]:x=(W-tw)/2:y=H-th-10:text='%{pts\:hms}'" -fps_mode vfr thumb_%02d.jpg 但放到 bat 批处理就报错
cd /D "%~dp0" ffmpeg\ffmpeg.exe -i "%~1" -vf "fps=1/'$(ffmpeg\ffprobe.exe -v error -show_entries format=duration -of default=noprint_wrappers=1 "%~1")'*12,drawtext=fOntfile=C\\:/Windows/Fonts/Arial.ttf:fOntsize=45:fOntcolor=yellow:box=1:[email protected]:x=(W-tw)/2:y=H-th-10:text='%{pts\:hms}'" -fps_mode cfr "%~dpn1"_%%04d.jpg 报错信息
[fps @ 000001ec5a6ccec0] [Eval @ 0000003bbc1fdc30] Undefined constant or missing '(' in 'UsersuserDownloadsvideo.mp4)*12' [fps @ 000001ec5a6ccec0] Unable to parse option value "UsersuserDownloadsvideo.mp4)*12" [fps @ 000001ec5a6ccec0] Error setting option start_time to value UsersuserDownloadsvideo.mp4)*12. [Parsed_fps_0 @ 000001ec5626ef00] Error applying options to the filter. [AVFilterGraph @ 000001ec5984ac00] Error initializing filter 'fps' with args '1/$(ffmpeg\ffprobe.exe -v error -show_entries format=duration -of default=noprint_wrappers=1 d:\Users\user\Downloads\video.mp4)*12' Error reinitializing filters! Failed to inject frame into filter network: Invalid argument Error while processing the decoded data for stream #0:0 Conversion failed! 