FFmpeg常用命令

MP4转为GIF

为GIF提取色板

1
ffmpeg -i a.mp4 -vf fps=15,scale=-1:-1::flags=lanczos,palettegen palette.png

转为固定高度/12帧速的GIF图片

1
ffmpeg -i a.mp4 -i palette.png -lavfi fps=12,scale=-1:960:flags=lanczos[x];[x][1:v]paletteuse -y a.gif

PNG转为JPG

为JPG提取色板

1
ffmpeg -i tempchart1.png -vf fps=15,scale=-1:-1::flags=lanczos,palettegen -y palette.png

转为固定宽度的JPG图片

1
ffmpeg -i tempchart1.png -i palette.png -lavfi scale=400:-1:flags=lanczos[x];[x][1:v]paletteuse -y tempchart1.jpg

视频添加音频

1
2
3
4
#效果:音频淡入淡出  音频时长小于视频时 音频循环播放
ffmpeg -stream_loop -1 -i xxx.mp3 -i xxx.mp4 -af afade=t=in:st=0:d=3,afade=t=out:st=${overtime}:d=3 -ss 00:00:00 -to ${endTimeStr} -y -b:v 1024k -profile:v main -brand mp42 out.mp4
#参数:${overtime} 音频淡出的开始秒数
#参数:${endTimeStr} 视频结束时间

视频中减去音轨

1
ffmpeg -i xxx.mp4 -an -y xx.mp4

使用硬件加速

1
2
3
4
5
6
7
8
9
10
11
12
13

N卡支持情况: https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new


# 使用nvidia GPU加速
ffmpeg -i xxxx.mp4 -c:v h264_nvenc -y xx.mp4

# 使用intel 核显加速
ffmpeg -i xxxx.mp4 -c:v h264_qsv -y xx.mp4

# 使用nvidia GPU加速 h265
ffmpeg -i xxxx.mp4 -c:v hevc_nvenc -c:a copy -y xx.mp4

转为固定尺寸视频

1
2
3
4
# 转为1080P
ffmpeg -i xxxx.mp4 -s hd1080 -y xx.mp4
# 转为720P
ffmpeg -i xxxx.mp4 -s hd720 -y xx.mp4

PNG转为带通道视频

1
2
3
4
5
6
7
8
9
10
11
12
# 两种方式生成mov视频
ffmpeg -f concat -safe 0 -i input.txt -vcodec png aa.mov
ffmpeg -f concat -safe 0 -i input.txt -vcodec qtrle bb.mov
# 转为WEBM格式
ffmpeg -i bb.mov -c:v libvpx-vp9 out.webm

# 生成的MOV文件过大的问题 可以转libx264
ffmpeg -f concat -safe 0 -i input.txt -vcodec png -c:v libx264 aaa.mov


ffmpeg -f concat -safe 0 -i input.txt -vcodec qtrle -pix_fmt yuva420p bb.mov

视频裁剪

1
2
3
4
5
6
7
# crop的参数格式为w:h:x:y
w、h为输出视频的宽和高,
x、y标记输入视频中的某点,将该点作为基准点,向右下进行裁剪得到输出视频。
如果x y不写的话,默认居中剪切

ffmpeg -i XX.mp4 -vf crop=400:400 XXX.mp4 -y
ffmpeg -i XX.mp4 -vf crop=400:400:0:0 XXX.mp4 -y

windows下 ffmpeg命令行批量转换视频

1
2
3
4
5
# 在命令行:
for %a in ("*.mp4") do ffmpeg -i "%a" -threads 2 -vcodec libx264 -preset slow -crf 20 -y "newfiles\%~na.mp4"

# 批处理文件中: 需要多加个%号
for %%a in ("*.mp4") do ffmpeg -i "%%a" -threads 2 -vcodec libx264 -preset slow -crf 20 -y "%%~na.mp4"