惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
CXSECURITY Database RSS Feed - CXSecurity.com
Help Net Security
Help Net Security
P
Privacy International News Feed
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
AWS News Blog
AWS News Blog
K
Kaspersky official blog
A
Arctic Wolf
Latest news
Latest news
T
Threat Research - Cisco Blogs
L
LINUX DO - 最新话题
P
Privacy & Cybersecurity Law Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
Google DeepMind News
Google DeepMind News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
月光博客
月光博客
N
News and Events Feed by Topic
Jina AI
Jina AI
博客园 - 司徒正美
WordPress大学
WordPress大学
罗磊的独立博客
雷峰网
雷峰网
AI
AI
Hugging Face - Blog
Hugging Face - Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Security @ Cisco Blogs
博客园 - 三生石上(FineUI控件)
H
Heimdal Security Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Cisco Blogs
博客园 - 【当耐特】
The Hacker News
The Hacker News
有赞技术团队
有赞技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Schneier on Security
Schneier on Security
博客园 - Franky
S
SegmentFault 最新的问题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Cloudbric
Cloudbric
爱范儿
爱范儿
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Secure Thoughts
Last Week in AI
Last Week in AI
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Know Your Adversary
Know Your Adversary
Google DeepMind News
Google DeepMind News

博客园 - SHARP-EYE

Processing在P2D模式下使用 tint() 方法的注意事项 · 只对 image() 和纹理有效 Processing 的 sketch.properties 机制以及主程序与文件夹解耦的具体细节 Processing P2D 模式鼠标约束 · 限制在窗口内 · 技术报告 Kimi Code CLI 系统指令的摸索 以及 开发实战经验分享 开源重置 沙丘2 游戏 · Dune Legacy 中文本地化与渲染技术说明 基于 Irrlicht 和 WASAPI 的 Simple Audio Visualization 技术开发报告 AI Coding越来越强,我们还有必要学Processing吗? · 创意编程 嵌入式脚本语言全解析:从Lua到Wren,游戏与IoT开发的未来选型指南 PixelMentor:一个开源网站 · 调用AI视觉能力分析图片 · 提供影视后期修改意见 基于 Vanilla JS 构建高性能可视化节点创意展示编辑器 (CNE) 的技术实践与深度解析 · Creative Node Editor 关于OpenClaw部署在Ubuntu上的经验小结 P3DE (Processing 3D Editor) 三维场景编辑器 · 软件白皮书 · 基于 v0.4.8 Windows 批量文件操作风险指南 · 不完整小结 [深度复盘] 构建高性能实时弹幕系统:Node.js + Socket.io 架构设计与生产环境部署实战 如何调用CMD实现多个同类文件合并的研究 · 二进制 · 依次 · 文本图像视频音频 Processing (Java) 中实现2D任意图形的鼠标悬停检测 · 2D射线检测 · 模拟按钮 · 点击事件 PowerShell实现全屏七彩渐变 · 呼吸 · 屏保 浅谈processing-java.exe应用程序的使用(与PowerShell的联合) 使用Windows任务计划程序实现每天更换一张Processing创意桌面壁纸 PowerShell开发小工具 · 四张照片拼成一张 批处理脚本(.bat)实现实时监测文件夹并执行命令 [假设有新文件则拷贝到远程文件夹内] PowerShell开发游戏 · 打蜜蜂 Powershell实现圆缩小放大 (实时刷新窗口)
CMD批处理脚本+VBScript脚本+Potplayer 实现文件夹内所有视频的截图任务(指定时间点)
SHARP-EYE · 2025-02-28 · via 博客园 - SHARP-EYE

实现自动化视频截图,一般会直接借视频编解码如FFmpeg,动用相关函数来实现,直接从解码源头设计程序。然而我没有接触过FFmpeg,借助cmd批处理,以及vbs,还有现成的播放器potplayer,一样可以实现。

【思路】

查找特定文件夹内所有的视频,每个视频使用potplayer打开,使用视频播放器的功能,指定时间点,然后截屏,最后整理截图文件,修改文件名称。

【逐步编写】

首先执行.bat(screenshot.bat),让其每个视频对象对应执行一个vbs脚本(sendkeys.vbs),等所有视频处理完毕,最后整理文件名称,执行另一个.bat(rename.bat)

screenshot.bat:

要对所有视频执行操作,需要遍历,使用for语句:

for %%v in (*.mp4) do (
        :: ......
}

运行potplayer:

start "" "%potplayer_path%" "%%v"

执行.vbs:

cscript //nologo "%vbs_path%" "%screenshot_time%"

调用另一个.bat:

call rename.bat "%output_dir%" "%screenshot_time%"

sendkeys.vbs:

读取参数:

screenshot_time = WScript.Arguments(0)

创建WshShell对象:

Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")

模拟按键输入,如按下G:

WshShell.SendKeys "g"

rename.bat:

获取传入的参数:

set "folderPath=%~1"
set "screenshot_time=%~2"

遍历文件夹内所有文件,并做修改文件名的任务:

for %%a in ("%folderPath%\*.jpg") do (
  for /f "tokens=1 delims=." %%b in ("%%~na") do (
    ren "%%a" "%%b_%screenshot_time_formatted%.jpg"
  )
)

【完整代码】

screenshot.bat:

@echo off
title PotPlayer 自动截图脚本

:: 设置变量
set "potplayer_path=C:\Program Files\potplayer\PotPlayer64\PotPlayerMini64.exe"
set "output_dir=%~dp0screenshots"  :: 输出目录为脚本所在目录下的 screenshots 文件夹
set "vbs_path=%~dp0sendkeys.vbs" :: vbs脚本地址
set "screenshot_time=00:03:20.0" :: 设置截图时间点

:: 创建输出目录
if not exist "%output_dir%" mkdir "%output_dir%"


:: 美化窗口
echo ****************************************
echo =========自动截图脚本====================
echo 警告: 必须切换至英文输入法状态,之后运行
echo 截图输出目录:%output_dir%
echo 设定的截取时间点:%screenshot_time%
echo ========================================

:: 按任意键继续,为了确保输入法状态
pause


:: 使用 for 循环查找所有 mp4 文件
for %%v in (*.mp4) do (
    echo.
    echo 正在处理视频:%%v
    REM set "video_name=%%~nv"  :: 获取不带扩展名的文件名

    :: 构造截图文件名
    REM set "screenshot_path=%output_dir%\%screenshot_name%"

    :: 启动 PotPlayer 并播放视频
    echo 启动 PotPlayer...
    start "" "%potplayer_path%" "%%v"

    :: 延时 4 秒,等待 PotPlayer 启动
    echo 延时 4 秒...
    timeout /t 4 /nobreak > nul

    :: 调用 VBScript 模拟按键
    echo 模拟按键操作...
    cscript //nologo "%vbs_path%" "%screenshot_time%"

    echo.
    echo 视频 %%v 处理完成,截图已保存到: %output_dir%
)

echo.
echo 所有视频处理完毕!

:: 调用 rename.bat,并将 output_dir 作为参数传入
call rename.bat "%output_dir%" "%screenshot_time%"

pause

sendkeys.vbs:

' sendkeys.vbs
Option Explicit

' 获取参数
Dim objArgs, screenshot_time
Set objArgs = WScript.Arguments

screenshot_time = WScript.Arguments(0)

' 创建 WshShell 对象
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")

' 延时 0.5 秒,确保 PotPlayer 窗口激活
WScript.Sleep 500

' 模拟按下空格键暂停
WshShell.SendKeys " "
WScript.Sleep 500

' 模拟按下 G 键,显示跳转对话框
WshShell.SendKeys "g"
WScript.Sleep 500

' 输入  时间点
WshShell.SendKeys screenshot_time 
WScript.Sleep 500

' 模拟按下 Enter 键,跳转到指定时间
WshShell.SendKeys "{ENTER}"
WScript.Sleep 500

' 模拟按下 Alt+C
WshShell.SendKeys "%c"
WScript.Sleep 500

' 模拟按下 Ctrl+E,截图
WshShell.SendKeys "^e"
WScript.Sleep 500

' 模拟按下 Alt+F4 关闭 PotPlayer
WshShell.SendKeys "%{F4}"
WScript.Sleep 500

' 清理对象
Set WshShell = Nothing
Set objArgs = Nothing

rename.bat:

@echo off
setlocal

:: 获取传入的文件夹路径和时间参数
set "folderPath=%~1"
set "screenshot_time=%~2"


:: 检查文件夹路径是否为空
if "%folderPath%"=="" (
  echo 错误:未提供文件夹路径!
  pause
  exit /b 1
)

:: 将时间格式转换为文件名格式【把:和. 两个字符 替换成下划线_】
set "screenshot_time_formatted=%screenshot_time::=_%"
set "screenshot_time_formatted=%screenshot_time_formatted:.=_%"


for %%a in ("%folderPath%\*.jpg") do (
  for /f "tokens=1 delims=." %%b in ("%%~na") do (
    ren "%%a" "%%b_%screenshot_time_formatted%.jpg"
  )
)

echo 文件重命名完成!
endlocal

注意,这三个脚本放在同一目录下。

【结果】

【结尾】

比较综合的运用,涉及到传参,cmd和vbs的联合调用。实际上一开始笔者想尝试直接通过命令行控制播放器,无奈不能抓取播放器对象,在一个播放器中执行多个命令,放弃了。虽然调用了三个脚本程序,但最终还是能实现,可歌可泣,花了不少精力的。当然,程序还有很多bug,需要慢慢优化,如,如何避免中文输入法的干扰,再如如何终止模拟键鼠操作,还有原有的截图文件的智能识别和过滤。同时,脚本设计上很多参数可以以传参的形式变成动态读取、导入。

cmd和vbs的联合,应该说这篇博文给了一个例子,希望可以给后辈参考。