ffmpeg 批量导出视频关键帧 (批处理)

前言

原本是想着用Java 来做循环处理的。但想到批处理应该更简洁就网上搜索了下 “批处理for循环”。

也就有了一下的方法处理了。

不过用处不是很大,虽然能提取到关键帧,但和我业务需求还是存在差异的,比如,要提取产品拍摄视频中的高清图像,

虽然,图样比较清晰,但角度不行,最终还是只能用PR来截取。

 

以下是当时用的代码:

echo off
color 0A
::指定当前文件所在目录
set DIR=%~dp0
echo DIR=%DIR%

:: 参数 /R 表示需要遍历子文件夹,去掉表示不遍历子文件夹
:: %%f 是一个变量,类似于迭代器,但是这个变量只能由一个字母组成,前面带上%%
:: 括号中是通配符,可以指定后缀名,*.*表示所有文件
:: %%~nxI,表示仅将 %I 扩充到一个文件名和扩展名,不包含路径)
:: 第一层循环遍历所有子文件夹下的文件,第二层循环提取文件名(包含扩展名.xxx),
:: 第三层循环分割文件名和扩展名,提取文件名(不包含扩展名)

for /R %%x in (*.mp4) do (
    echo %%x
    for %%a in ("%%x") do (
        echo %%~nxa
		for /f "tokens=1,* delims=." %%i in ("%%~nxa") do (
		echo %%i
		mkdir "%DIR%out\%%i"
		ffmpeg -i "%%x" -filter:v select="eq(pict_type\,I)" -vsync 2 -f image2 "%DIR%out\%%i\Core_%%05d.png"
		)
		)
		)
@pause

需要注意的是

ffmpeg -i "%%x" -filter:v select="eq(pict_type\,I)" -vsync 2 -f image2 "%DIR%out\%%i\Core_%%05d.png"

ffmpeg -i "源文件" -filter:v select="eq(pict_type\,I)" -vsync 2 -f image2 "输出文件所在位置"

之所以给源文件和输出文件带上""——双引号(英文),是为了防止文件(文件夹)包含特殊符号或空格。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值