视频格式转换 §
- 转换单个文件,使用默认配置
ffmpeg -i test.avi output.mp4
- 批量转换
echo off & color 0A
::指定起始文件夹
set DIR="%cd%"
echo DIR=%DIR%
:: 参数 /R 表示需要遍历子文件夹,去掉表示不遍历子文件夹
:: %%f 是一个变量,类似于迭代器,但是这个变量只能由一个字母组成,前面带上%%
:: 括号中是通配符,可以指定后缀名,*.*表示所有文件
::echo %%~dpf%%~nf
::c:/ffmpeg/bin/ffmpeg.exe -i %%f.mp4 -q:v 6 %%f.avi
for /R %DIR% %%f in (*.mp4) do (
c:/ffmpeg/bin/ffmpeg.exe -i %%~dpf%%~nf.mp4 -q:v 6 %%~dpf%%~nf.avi
)
pause
## 抽取视频帧
### 抽取I-frame
- [参考](https://jdhao.github.io/2021/12/25/ffmpeg-extract-key-frame-video/)
- 方法一
```ffmpeg -skip_frame nokey -i test.mp4 -vsync vfr -frame_pts true out-%02d.jpeg```
- `-vsync vfr`: discard the unused frames
- `-frame_pts true`: use the frame index for image names, otherwise, the index starts from 1 and increments 1 each time
- 方法二
```ffmpeg -i test.mp4 -vf "select='eq(pict_type,I)'" -vsync vfr out-%02d.jpeg```
抽出的帧命名略有不同
### 抽取scene-changing frames
- 命令```ffmpeg -i input.mp4 -vf "select='gt(scene,0.4)'" -vsync vfr frame-%2d.jpg```
根据需要调整scene后面的参数,越小抽取的帧越多