FFMPEG常用代码

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 为质量最高)

posted @ 2023-01-24 19:43  虎老狮  阅读(95)  评论(0编辑  收藏  举报