视频格式转换 §
- 转换单个文件,使用默认配置
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
压缩视频 §
- 用预设参数压缩
ffmpeg -i input.mp4 -c:v libx264 -crf 23** -preset medium -c:a aac -b:a 128k output.mp4
指定压缩至30FPS:
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -filter:v fps=30 -preset medium -c:a aac -b:a 128k output.mp4
抽取视频帧 §
抽取I-frame §
- 参考
- 方法一
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后面的参数,越小抽取的帧越多
转换音频 §
- 命令
ffmpeg -i input.m4a output.wav
如果wav文件超过4G,加-rf64 auto参数(在output文件名之前)