本帖最后由 1139054012 于 2025-3-4 23:29 编辑
前提条件目录下视频时轴可能不同,需要根据第一个输出的图片来识别后续视频是否同一帧对比
这个是时轴相同,或前面时轴相同,最后多了几分不影响,输出同一帧视频的图片成功了
预览图
 - @echo off
- setlocal enabledelayedexpansion
-
- :: 设置参数
- set "target_time=00:10:00" :: 指定时间点(格式:HH:MM:SS)
- set "output_dir=输出图片" :: 输出目录
- set "tolerance=0" :: 图片相似度容差(0-1,值越小越严格)
- set "scale_width=1920" :: 输出图片宽度
- set "scale_height=1080" :: 输出图片高度
-
- :: 创建输出目录
- if not exist "%output_dir%" mkdir "%output_dir%"
-
- :: 遍历当前目录下的所有视频文件
- for %%f in (*.mkv *.mp4 *.avi *.mov) do (
- echo 正在处理文件: %%f
- set "output_file=%output_dir%\%%~nf.png"
-
- :: 提取指定时间点的帧并缩放
- ffmpeg -i "%%f" -ss %target_time% -vframes 1 -vf scale=%scale_width%:%scale_height% -q:v 2 "!output_file!" -y
-
- :: 检查图片是否有效
- if not exist "!output_file!" (
- echo 错误:无法提取帧,尝试调整时间轴...
- :: 尝试调整时间轴(向前或向后 1 秒)
- for /L %%i in (1,1,5) do (
- set "adjusted_time=00:10:0%%i"
- ffmpeg -i "%%f" -ss !adjusted_time! -vframes 1 -vf scale=%scale_width%:%scale_height% -q:v 2 "!output_file!" -y
- if exist "!output_file!" (
- echo 成功提取帧,调整时间为: !adjusted_time!
- goto :next_file
- )
- )
- echo 错误:无法提取帧,跳过文件: %%f
- goto :next_file
- )
-
- :: 对比图片内容(如果存在前一个文件的图片)
- if exist "prev_frame.png" (
- ffmpeg -i "prev_frame.png" -i "!output_file!" -lavfi "ssim=stats_file=ssim_log.txt" -f null -
- for /F "tokens=2 delims= " %%a in ('findstr "All" ssim_log.txt') do (
- set "similarity=%%a"
- )
- echo 图片相似度: !similarity!
- if !similarity! LSS %tolerance% (
- echo 图片不同,尝试调整时间轴...
- :: 尝试调整时间轴(向前或向后 1 秒)
- for /L %%i in (1,1,5) do (
- set "adjusted_time=00:10:0%%i"
- ffmpeg -i "%%f" -ss !adjusted_time! -vframes 1 -vf scale=%scale_width%:%scale_height% -q:v 2 "!output_file!" -y
- if exist "!output_file!" (
- echo 成功提取帧,调整时间为: !adjusted_time!
- goto :next_file
- )
- )
- echo 错误:无法提取帧,跳过文件: %%f
- goto :next_file
- )
- )
-
- :: 保存当前帧为前一个帧
- copy "!output_file!" "prev_frame.png" >nul
-
- :next_file
- echo ------------------------------
- )
-
- :: 清理临时文件
- del "prev_frame.png" 2>nul
- del "ssim_log.txt" 2>nul
-
- echo 处理完成!所有帧已保存到目录: %output_dir%
- pause
复制代码 换成片源时轴不同的后,第二张输出的图片并没有根据输出第一张图片输出相同的图
预览图

求助坛友怎么完美实现这个功能?
而且这段代码占用CPU也太高了,可以优化下不OTL
链接:https://pan.baidu.com/s/1nnfDyy0LqNbrAUcF9BXoXg
提取码:iaa7 |