视频格式转换

  • 转换单个文件,使用默认配置 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后面的参数,越小抽取的帧越多