FFMPEG常用代码
FFMPEG夸平台:
\是MAC终端的换行符
^是windowsCMD的换行符
本文中两种都有用到
视频剪切
ffmpeg -ss 00:00:00 -t 0:0:10 ^
-i "D:\AH_DATA\FFmpegTest\in31s.mp4" ^
-codec copy ^
-y "D:\AH_DATA\FFmpegTest\out10s.mp4"
GIF
视频转gif
# 视频转gif
ffmpeg ^
-ss 00:00:01 ^
-t 2 ^
-i D:\tools\AH\AhPythonCode\PC\temp\00.mp4 ^
-y D:\tools\AH\AhPythonCode\PC\temp\00_视频转GIF.gif
## 时间可以更精确一些
ffmpeg ^
-ss 00:00:01.500 ^
-t 2 ^
-i D:\tools\AH\AhPythonCode\PC\temp\00.mp4 ^
-y D:\tools\AH\AhPythonCode\PC\temp\00_视频转GIF.gif
# 视频转高质量gif
ffmpeg ^
-ss 00:00:01 ^
-t 2 ^
-i D:\tools\AH\AhPythonCode\PC\temp\00.mp4 ^
-b 2048k ^
-y D:\tools\AH\AhPythonCode\PC\temp\00_视频转高质量GIF.gif
更多参数:
#-ss 00:00:04 -t 3(第四秒开始,截取3秒)
#-r 15 改帧率
#-s 720x480 分辨率
#-vf crop=iw:ih/2 改长宽
#-y 覆盖同名文件
ffmpeg -i D:\...\案例.mp4 ^
-ss 00:00:06 -t 2 ^
-vf crop=iw:ih/2 ^
-r 15 ^
-s 480x480 ^
-y ^
D:\...\案例.gif
既裁剪,又改变分辨率:
-vf scale=360:-1,crop=iw:ih/2 ^
gif转视频
#这种据说适配所有的gif,而且适配QuickTime Player.app
#在win上,有缩略图
ffmpeg ^
-i D:\tools\AH\AhPythonCode\PC\temp\00.gif ^
-vf scale=420:-2,format=yuv420p ^
-y D:\tools\AH\AhPythonCode\PC\temp\00_pro.mp4
#QuickTime Player对H.264视频只支持YUV色域4:2:0方式的二次插值算法
#所以需要【format=yuv420p】
#yuv420p要求长宽为偶数,所以需要【scale=420:-2】-2表示尺寸的长款都保持为偶数
gif转视频-简单方法
#简单方法,win上确定可以播放,mac没试过,据说某些gif转换后不能用QuickTime Player.app播放
#但是win上没有缩略图
ffmpeg -f gif ^
-i D:\tools\AH\AhPythonCode\PC\temp\00.gif ^
-y D:\tools\AH\AhPythonCode\PC\temp\00.mp4
播放
快播慢播
# 快速播放
ffmpeg ^
-i D:\tools\AH\AhPythonCode\PC\temp\00.mp4 ^
-filter:v "setpts=0.5*PTS" ^
-y D:\tools\AH\AhPythonCode\PC\temp\00_提速一倍.mp4
# 慢速播放
ffmpeg ^
-i D:\tools\AH\AhPythonCode\PC\temp\00.mp4 ^
-filter:v "setpts=2.0*PTS" ^
-y D:\tools\AH\AhPythonCode\PC\temp\00_降速一半.mp4
以上方法只是画面速度改变,声音速度不变。
如果要同时改变声音的速度,使用以下方法:
#倍速播放
ffmpeg -i /Users/.../Downloads/TEMP/顶得了_1.mp4 \
-filter_complex "[0:v]setpts=0.769*PTS[v];[0:a]atempo=1.3[a]" -map "[v]" -map "[a]" \
/Users/.../Downloads/TEMP/顶得了_1speed.mp4
改分辨率
#缩放:sacle必须是偶数。-1表示保持长宽比,高度自适应;-2表示尺寸的长款都保持为偶数
ffmpeg ^
-i D:\tools\AH\AhPythonCode\PC\temp\00.mp4 ^
-vf scale=360:-1 ^
D:\tools\AH\AhPythonCode\PC\temp\00_缩放.mp4
定义帧率fps
#定义帧率(fps):
ffmpeg ^
-i D:\tools\AH\AhPythonCode\PC\temp\00.mp4 ^
-r 5 ^
-y D:\tools\AH\AhPythonCode\PC\temp\00_自定义帧率.mp4
静音
# 静音
ffmpeg ^
-i D:\tools\AH\AhPythonCode\PC\temp\00.mp4 ^
-an -y D:\tools\AH\AhPythonCode\PC\temp\00_静音.mp4
绘制波形图
#ffmpeg绘制波形图
ffmpeg ^
-i /Users/.../Downloads/为你好.mp4 ^
-filter_complex "showwavespic=s=720x180" -frames:v 1 ^
/Users/.../Downloads/audio.png
滤镜
ffmpeg有2种滤镜:简单滤镜,复合滤镜
- 简单滤镜就是只有1个输入和输出的滤镜,滤镜两边的数据都是同一类型
- 复合滤镜:有多个输入、输出,或者输出流类型不同于输入时使用。
-filter_complex
:复合滤镜
-lavfi
选项等效于-filter_complex
overlay
滤镜 是一种复合滤镜,从两路输入中,把一个视频叠加到一个输出上。对应的类似音频滤镜是 amix
-codec copy
或者 -codec: copy
表示所有的流都不进行再次编码(包括视频和音频)
-threads:1 4 #表示对2号流采用4个线程处理
滤镜示例
以下示例,视频上部是原始,下部是上部的镜像(倒影效果)
ffmpeg -i "D:\AH_DATA\ffmpegTest\V01.mp4" ^
-vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" ^
"D:\AH_DATA\ffmpegTest\V01_mirror.mp4"
-
同一路的滤镜间用逗号(‘,’)进行分割
-
不同路的滤镜间用分号(‘;’)进行分割
-
split 滤镜:生成两路流,
-
crop 滤镜:裁去下半部视频
-
vflip:水平镜像(垂直翻转)
-
overlay:覆盖合成
-
main、tmp都是自己取的名字,称为标签,以方便后续处理
OSS(open Sound System)输出设备
匹配 foo-*.jpeg 的图片序列创建一个视频
- shell的通配符模式(内置的)
- 需要同时选择image2的特性选项 -pattern_type glob
ffmpeg -f image2
-pattern_type glob
-framerate 12
-i ‘foo-*.jpeg’ -s WxH foo.avi
image2:图像文件分离器
加水印
ffmpeg ^
-i D:\AH_DATA\FFmpegTest\in10s.mp4 ^
-i D:\AH_DATA\1.gif ^
-filter_complex "overlay=x=(W-w)/2:y=(H-h)/2:enable='between(t,0,1)'" ^
-y D:\AH_DATA\FFmpegTest\out1.mp4
常用命令行参数
https://www.ruanyifeng.com/blog/2020/01/ffmpeg.html#:~:text=output.mp4-,三、常用命令行参数,-FFmpeg 常用的
查看视频信息
$ ffmpeg -i input.mp4 -hide_banner
截图
$ ffmpeg \
-ss 01:23:45 \
-i input \
-vframes 1 -q:v 2 \
output.jpg
vframes 1
指定只截取一帧,-q:v 2
表示输出的图片质量,一般是1到5之间(1 为质量最高)