经常用 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:boxcolor=black@0.3: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:boxcolor=black@0.625: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!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.