闲碎记事本 闲碎记事本
首页
  • JAVA
  • Cloudflare
  • 学完再改一遍UI
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

YAN

我要偷偷记录...
首页
  • JAVA
  • Cloudflare
  • 学完再改一遍UI
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • java

    • SpringBoot

    • SpringSecurity

    • MybatisPlus

    • Netty

    • sip

      • SIP使用
      • GB28181
      • GB35114
      • SM2工具类
      • SM3工具类
      • 证书构建
      • 使用注解实现XML构建与解析
      • 流媒体服务器
      • FFmpeg
        • FFmpeg Filters
        • 常用命令
        • 滤镜
          • 变量
          • 旋转 transpose
          • drawtext
        • map选择
          • 录制屏幕
          • 推流
          • 简单滤镜
          • 复杂滤镜
        • 参考资料
    • 其他

  • linux

  • docker

  • redis

  • nginx

  • mysql

  • 其他

  • 环境搭建

  • 知识库
  • java
  • sip
YAN
2024-01-13
目录

FFmpeg

记录一些用到的ffmpeg命令,持续更新

# FFmpeg Filters

FFmpeg Filters (opens new window)

# 常用命令

命令 描述
-i 源文件
-y 自动覆盖输出文件,无需用户确认
-loglevel debug 输出调试日志
-r 指定视频帧率
-re 输入的速度以实时速率播放。可以模拟实时输入。
在某些情况下,如果不使用 -re 选项,ffmpeg 会尽快读取输入数据,而不考虑实际帧率,这可能导致处理速度过快。
-c:v , -vcodec 视频编码
-c:a , -acodec 音频编码
-f 设置视频输出格式
-b bitrate 设置比特率,缺省200kb/s
-s size 设置帧大小 格式为WXH 缺省160X128
-vf 添加滤镜
-lavfi ,-filter_complex 添加复杂滤镜
-stream_loop -1 无线循环
-ignore_loop 忽略重复
-loop 重复
-ss 当在 -i 前(表示跳过解码前),表示定位输入文件到position指定的位置。注意可能一些格式是不支持精确定位的,所以ffmpeg可能是定位到最接近position(在之前)的可定位点。
position可以是以秒为单位的数值或者 hh:mm:ss[.xxx] 格式的时间值
-t 当在 -i 前(表示跳过解码前),限制输入/输出的时间。
如果是用于限定输出文件,则表示写入多少时间数据后就停止。
以秒为单位的数值或者 hh:mm:ss[.xxx] 格式的时间值。
注意 -to 和 -t 是互斥的,-t 有更高优先级
-to -to position (output) 只写入position时间后就停止,position可以是以秒为单位的数值或者 hh:mm:ss[.xxx]格式的时间值。
注意 -to 和 -t 是互斥的,-t 有更高优先级。
-itsoffset 时间偏移 (手动延迟)
-hide_banner 隐藏 banner(横幅)
-pix_fmt 设置像素格式
-map 媒体映射
例如 0✌️0 1🅰️0 ,将第一个源文件的视频和第二个源文件的音频合并
-qscale:v 1 设置视频质量,其中 1 是最高质量,表示无损压缩。
-qmin:v 1 设置最小视频质量,同样为最高质量。
-qmax:v 1 设置最大视频质量,同样为最高质量。
-vsync 0 禁用同步帧率。这意味着 ffmpeg 将按照源视频的帧率提取帧,而不会根据输出的帧速率进行同步
-v quiet,减少输出
-an 移除音频
-vn 移除视频

# 滤镜

同一路的滤镜间用,进行分割,不同路的滤镜间用;进行分割

同一路的不同属性用:

# 变量

main_w(W):主画面的宽度 main_h(H):主画面的高度 overlay_w(w):水印宽度 overlay_h(h):水印高度

# 旋转 transpose

transpose=0:不进行旋转。
transpose=1:顺时针旋转 90 度。
transpose=2:逆时针旋转 90 度。
transpose=3:顺时针旋转 180 度。

# drawtext


drawtext是用来添加文字的滤镜名称;

fontfile:指定的字体文件;

textfile:需要添加的文字文件,也可以用text=‘Hello world’这种格式指定需要添加的文字,但是对于大量文字,显然文件更为方便;

x,y:文字左上角在画面上显示的位置;

fontsize:字体大小;

fontcolor:字体颜色,可以通过0xRRGGBB@0.X来指定文字的透明度,例如0xFF0000@0.5为红色半透明。

reload:为1时表示每帧重新load字体文件,可以实现实时更新显示文字的功能。

box=1:  合作边框

boxcolor=blue   盒子背景

# map选择

关于选择器 ffmpeg -re -i zz.mp4 -ignore_loop 0 -i g.gif -lavfi "[0:v]transpose=1[main];[1:v]format=rgba,rotate='PI/2*t:c=0x00000000:ow=hypot(iw,ih):oh=ow'[watermark];[main][watermark]overlay=10:10" -c:v libx264 -c:a aac -f flv "rtmp://192.168.1.100/live/livestream"

[0:v] 表示选择第一个源的视频

[0:a] 表示选择第一个源的音频

[1:v] 表示选择第二个源的视频

[1:a] 表示选择第二个源的音频

[0:v]transpose=1[main] 表示选择第一个源的视频并生成新的流[main]

[1:v]format=rgba,rotate='PI/2*t:c=0x00000000:ow=hypot(iw,ih):oh=ow'[watermark] 表示选择第二个源的视频,处理后生成新的流[watermark]

[main][watermark]overlay 表示合并流[main]和[watermark]

# 录制屏幕

ffmpeg -re  -f gdigrab  -i desktop -vcodec h264 -acodec aac -f flv "rtmp://192.168.1.100/live/livestream"

# 推流

-vcodec 等效 -c:v

-acodec 等效 -c:a

# 原视频复制 -vcodec copy
ffmpeg -re -i zz.mp4   -vcodec copy -acodec aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 原视频编码 -vcodec libx264
ffmpeg -re -i zz.mp4   -vcodec libx264 -acodec aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 指定位置播放 copy
ffmpeg -re -ss 00:12:35.100 -i zz.mp4   -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"
# 指定位置播放 libx264
ffmpeg -re -ss 00:12:35.100 -i zz.mp4   -c:v copy -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 简单滤镜

-vf

# 添加滤镜必须编码  -c:v libx264
# 简单滤镜 - 文字居中
ffmpeg -re  -i zz.mp4  -c:v libx264 -c:a aac -vf "drawtext=text='测试学习中...':x=(w-text_w)/2:y=(h-text_h)/2:fontsize=100:fontcolor=#F50909FF:fontfile=./simsun.ttc:text_shaping=1"   -f flv "rtmp://192.168.1.100/live/livestream"

# 复杂滤镜

-filter_complex等效 -lavfi

# 单个源
ffmpeg -re -i zz.mp4 -lavfi "drawtext=text='测试学习中...':x=(w-text_w)/2:y=(h-text_h)/2:fontsize=100:fontcolor=#F50909FF:fontfile=./simsun.ttc:text_shaping=1"  -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 多个源(-i)的情况下,使用复杂滤镜
ffmpeg -re -i zz.mp4 -i xy.png -lavfi "overlay=x=50:y=50" -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 添加gif滤镜
ffmpeg -re -i zz.mp4 -ignore_loop 0 -i g.gif -lavfi "overlay=x=20:y=20"   -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 滤镜随时间向右移动 让水印每秒向右移动20像素
ffmpeg -re -i zz.mp4 -ignore_loop 0 -i g.gif -lavfi "overlay=x='t*20'"   -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"


# 滤镜10秒循环,每秒移动100个像素
ffmpeg -re -i zz.mp4 -ignore_loop 0 -i g.gif -lavfi "overlay=enable='mod(t,10)':x='100*mod(t,10)-w'"   -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 滤镜显示5秒
ffmpeg -re -i zz.mp4 -ignore_loop 0 -i g.gif -lavfi "overlay=x=20:y=20:enable='lte(t,5)'"   -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 滤镜在5~10秒时间段内显示
ffmpeg -re -i zz.mp4 -ignore_loop 0 -i g.gif -lavfi "overlay=x=20:y=20:enable='between(t,5,10)'"   -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 设置两个水印轮番出现 第一个水印显示4秒后消失,2秒后第二个水印显示4秒后消失。
# 第一个 overlay 滤镜:overlay=enable='lte(mod(t,10),4)',时长小于等于4时显示
# 第二个 overlay 滤镜:overlay=enable='gt(mod(t,10),6)', 时长大于6时显示
ffmpeg -re -i zz.mp4 -ignore_loop 0 -i g.gif -i xy.png  -lavfi "overlay=enable='lte(mod(t,10),4)',overlay=enable='gt(mod(t,10),6)'"   -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 两个滤镜一个在左上角,一个在右上角
ffmpeg -re -i zz.mp4 -ignore_loop 0 -i g.gif -i xy.png  -lavfi "overlay=x=0:y=0,overlay=W-w:y=0"   -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 滤镜旋转
ffmpeg -re -i zz.mp4 -ignore_loop 0 -i g.gif -lavfi "[1:v]format=rgba,rotate='PI/2*t:c=0x00000000:ow=hypot(iw,ih):oh=ow'[out];[0:v][out]overlay=10:10"  -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 画面旋转,滤镜旋转
ffmpeg -re -i zz.mp4 -ignore_loop 0 -i g.gif -lavfi "[0:v]transpose=1[main];[1:v]format=rgba,rotate='PI/2*t:c=0x00000000:ow=hypot(iw,ih):oh=ow'[out];[main][out]overlay=10:10"  -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 滤镜上下横跳
ffmpeg -re -i zz.mp4 -ignore_loop 0 -i g.gif -lavfi "overlay=y='if(lte(mod(t,4),2),0,H-h)'" -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 滤镜透明 在中央浮动
ffmpeg -re -i zz.mp4 -ignore_loop 0 -i g.gif -lavfi "[1:v]colorchannelmixer=aa=0.5[valpha];[0:v][valpha]overlay=x=(W-w)/2+10*sin(2*PI*t/5):y=(H-h)/2+10*sin(2*PI*t/5)" -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"

## 滤镜添加文字,缩放,底部移动
ffmpeg -re -i zz.mp4 -ignore_loop 0 -i g.gif -lavfi "drawtext=text='测试学习中...':x=(w-text_w)/2:y=(h-text_h)/2:fontsize=100:fontcolor=#F50909FF:fontfile=./simsun.ttc:text_shaping=1[txt];[1:v]scale=(iw/2):(ih/2),colorchannelmixer=aa=0.5[valpha];[txt][valpha]overlay=enable='mod(t,10)':x='(W/10)*mod(t,10)-w':y=H-h" -c:v libx264 -c:a aac  -f flv "rtmp://192.168.1.100/live/livestream"

# 参考资料

参考 (opens new window)

参考 (opens new window)

参考 (opens new window)

参考命令 (opens new window)

上次更新: 2025/05/22, 07:52:48
流媒体服务器
MDC 使用

← 流媒体服务器 MDC 使用→

最近更新
01
Caddy操作指南
04-25
02
虚拟机磁盘扩展
04-22
03
Swap空间
04-22
更多文章>
Theme by Vdoing | Copyright © 2022-2025 YAN | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式