目录
- 1 简介
- 2 描述
- 3 详细描述
- 4 流选择
- 5 选项
- 6 示例
- 7 语法
- 8 表达式计算
- 9 编解码器选项
- 10 解码器
- 11 视频解码器
- 12 音频解码器
- 13 字幕解码器
- 14 编码器
- 15 音频编码器
- 16 视频编码器
- 16.1 a64_multi, a64_multi5
- 16.2 Cinepak
- 16.3 ffv1
- 16.4 GIF
- 16.5 Hap
- 16.6 jpeg2000
- 16.7 librav1e
- 16.8 libaom-av1
- 16.9 liboapv
- 16.10 libsvtav1
- 16.11 libjxl
- 16.12 libkvazaar
- 16.13 libopenh264
- 16.14 libtheora
- 16.15 libvpx
- 16.16 libvvenc
- 16.17 libwebp
- 16.18 libx264, libx264rgb
- 16.19 libx265
- 16.20 libxavs2
- 16.21 libxeve
- 16.22 libxvid
- 16.23 MediaFoundation
- 16.24 Microsoft RLE
- 16.25 mpeg2
- 16.26 png
- 16.27 ProRes
- 16.28 QSV 编码器
- 16.29 snow
- 16.30 VAAPI 编码器
- 16.31 vbn
- 16.32 vc2
- 17 字幕编码器
- 18 位流过滤器
- 18.1 aac_adtstoasc
- 18.2 av1_metadata
- 18.3 chomp
- 18.4 dca_core
- 18.5 dovi_rpu
- 18.6 dump_extra
- 18.7 dv_error_marker
- 18.8 eac3_core
- 18.9 extract_extradata
- 18.10 filter_units
- 18.11 hapqa_extract
- 18.12 h264_metadata
- 18.13 h264_mp4toannexb
- 18.14 h264_redundant_pps
- 18.15 hevc_metadata
- 18.16 hevc_mp4toannexb
- 18.17 imxdump
- 18.18 mjpeg2jpeg
- 18.19 mjpegadump
- 18.20 mov2textsub
- 18.21 mpeg2_metadata
- 18.22 mpeg4_unpack_bframes
- 18.23 噪声
- 18.24 空值
- 18.25 pcm_rechunk
- 18.26 pgs_frame_merge
- 18.27 prores_metadata
- 18.28 remove_extra
- 18.29 setts
- 18.30 showinfo
- 18.31 text2movsub
- 18.32 trace_headers
- 18.33 truehd_core
- 18.34 vp9_metadata
- 18.35 vp9_superframe
- 18.36 vp9_superframe_split
- 18.37 vp9_raw_reorder
- 19 格式选项
- 20 解复用器
- 20.1 aa
- 20.2 aac
- 20.3 apng
- 20.4 asf
- 20.5 concat
- 20.6 dash
- 20.7 dvdvideo
- 20.8 ea
- 20.9 imf
- 20.10 flv, live_flv, kux
- 20.11 gif
- 20.12 hls
- 20.13 image2
- 20.14 libgme
- 20.15 libmodplug
- 20.16 libopenmpt
- 20.17 mov/mp4/3gp
- 20.18 mpegts
- 20.19 mpjpeg
- 20.20 rawvideo
- 20.21 rcwt
- 20.22 sbg
- 20.23 tedcaptions
- 20.24 vapoursynth
- 20.25 w64
- 20.26 wav
- 21 混流器
- 21.1 原始混流器
- 21.2 原始 PCM 混流器
- 21.3 MPEG-1/MPEG-2 程序流混流器
- 21.4 MOV/MPEG-4/ISOMBFF 混流器
- 21.5 a64
- 21.6 ac4
- 21.7 adts
- 21.8 aea
- 21.9 aiff
- 21.10 alp
- 21.11 amr
- 21.12 amv
- 21.13 apm
- 21.14 apng
- 21.15 argo_asf
- 21.16 argo_cvg
- 21.17 asf, asf_stream
- 21.18 ass
- 21.19 ast
- 21.20 au
- 21.21 avi
- 21.22 avif
- 21.23 avm2
- 21.24 bit
- 21.25 caf
- 21.26 codec2
- 21.27 chromaprint
- 21.28 crc
- 21.29 dash
- 21.30 daud
- 21.31 dv
- 21.32 ffmetadata
- 21.33 fifo
- 21.34 film_cpk
- 21.35 filmstrip
- 21.36 fits
- 21.37 flac
- 21.38 flv
- 21.39 framecrc
- 21.40 framehash
- 21.41 framemd5
- 21.42 gif 动画
- 21.43 gxf 格式
- 21.44 哈希
- 21.45 hds 格式
- 21.46 hls 格式
- 21.47 iamf 音频
- 21.48 ico 图标
- 21.49 ilbc 编码
- 21.50 image2, image2pipe 图像
- 21.51 ircam 格式
- 21.52 ivf 格式
- 21.53 jacosub 字幕
- 21.54 kvag 格式
- 21.55 lc3 编码
- 21.56 lrc 歌词
- 21.57 matroska 格式
- 21.58 md5 校验
- 21.59 microdvd 字幕
- 21.60 mmf 格式
- 21.61 mp3 音频
- 21.62 mpegts 流
- 21.63 mxf, mxf_d10, mxf_opatom 格式
- 21.64 null 空格式
- 21.65 nut 格式
- 21.66 ogg 格式
- 21.67 rcwt 格式
- 21.68 segment, stream_segment, ssegment 分片
- 21.69 smoothstreaming 流媒体
- 21.70 streamhash 流哈希
- 21.71 tee 多路输出
- 21.72 webm_chunk 分块
- 21.73 webm_dash_manifest 清单
- 22 元数据
- 23 协议选项
- 24 协议
- 24.1 amqp 协议
- 24.2 async 异步
- 24.3 bluray 蓝光
- 24.4 cache 缓存
- 24.5 concat 合并
- 24.6 concatf 合并文件
- 24.7 crypto 加密
- 24.8 data 数据
- 24.9 fd 文件描述符
- 24.10 file 文件
- 24.11 ftp 协议
- 24.12 gopher 代理协议
- 24.13 gophers 安全代理协议
- 24.14 hls 协议
- 24.15 http 协议
- 24.16 Icecast 广播
- 24.17 ipfs 分布式文件系统
- 24.18 mmst 协议
- 24.19 mmsh 协议
- 24.20 md5 校验
- 24.21 pipe 管道
- 24.22 prompeg 修复
- 24.23 rist 协议
- 24.24 rtmp 协议
- 24.25 rtmpe 加密协议
- 24.26 rtmps 安全协议
- 24.27 rtmpt 隧道协议
- 24.28 rtmpte 加密隧道协议
- 24.29 rtmpts 安全隧道协议
- 24.30 libsmbclient 协议
- 24.31 libssh 协议
- 24.32 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte
- 24.33 rtp 实时传输
- 24.34 rtsp 流媒体
- 24.35 sap 广播
- 24.36 sctp
- 24.37 srt
- 24.38 srtp
- 24.39 子文件
- 24.40 tee
- 24.41 tcp
- 24.42 tls
- 24.43 udp
- 24.44 unix
- 24.45 zmq
- 25 设备选项
- 26 输入设备
- 27 输出设备
- 28 重采样器选项
- 29 缩放器选项
- 30 滤镜简介
- 31 graph2dot
- 32 滤镜图描述
- 33 时间轴编辑
- 34 使用命令在运行时更改选项
- 35 多输入滤镜的选项(framesync)
- 36 音频滤镜
- 36.1 aap
- 36.2 压缩器
- 36.3 对比度调整
- 36.4 复制
- 36.5 跨渐变
- 36.6 交叉点
- 36.7 噪声削减
- 36.8 标记
- 36.9 去除爆音
- 36.10 去除削波
- 36.11 去相关
- 36.12 延迟
- 36.13 自动正常化
- 36.14 微分、积分
- 36.15 动态范围控制
- 36.16 动态均衡器
- 36.17 动态平滑
- 36.18 回声
- 36.19 加强调制
- 36.20 评估
- 36.21 励磁器
- 36.22 渐隐
- 36.23 频域去噪
- 36.24 频域滤波
- 36.25 滤波器
- 36.26 格式转换
- 36.27 频移
- 36.28 小波去噪
- 36.29 噪声门
- 36.30 二阶滤波器
- 36.31 限幅器
- 36.32 全通滤波器
- 36.33 循环
- 36.34 合并
- 36.35 混合
- 36.36 相乘
- 36.37 非线性均衡器
- 36.38 非线性去噪
- 36.39 非线性自适应滤波器
- 36.40 无效果
- 36.41 填充
- 36.42 移相器
- 36.43 相位偏移
- 36.44 信号噪声比
- 36.45 心理削波
- 36.46 脉冲发生器
- 36.47 重采样
- 36.48 反转
- 36.49 递归最小二乘
- 36.50 人工神经去噪
- 36.51 包络生成器
- 36.52 重设样本数
- 36.53 设置速率
- 36.54 显示信息
- 36.55 信号与干扰比
- 36.56 软削波
- 36.57 谱分析
- 36.58 采样率转换
- 36.59 统计分析
- 36.60 超低频增强
- 36.61 超低频剪切
- 36.62 高级剪切
- 36.63 高级通道
- 36.64 高级停止
- 36.65 节奏调整
- 36.66 方向倾斜
- 36.67 裁剪
- 36.68 交叉相关
- 36.69 带通滤波
- 36.70 带阻滤波
- 36.71 低音,低架
- 36.72 双二阶滤波器
- 36.73 BS2B
- 36.74 通道映射
- 36.75 通道拆分
- 36.76 合唱效果
- 36.77 压缩扩展
- 36.78 补偿延迟
- 36.79 交叉馈送
- 36.80 晶体化
- 36.81 直流偏移
- 36.82 去齿音
- 36.83 对话增强
- 36.84 动态范围仪
- 36.85 动态音量规范化
- 36.86 耳蜡效果
- 36.87 均衡器
- 36.88 扩展立体声
- 36.89 高级均衡器
- 36.90 颤动效果
- 36.91 哈斯效应
- 36.92 高分辨率CD
- 36.93 耳机效果
- 36.94 高通滤波
- 36.95 加入
- 36.96 LADSPA 插件
- 36.97 音量规范化
- 36.98 低通滤波
- 36.99 LV2 插件
- 36.100 多段压缩扩展
- 36.101 声道平移
- 36.102 回放增益
- 36.103 重新采样
- 36.104 橡皮筋效果
- 36.105 侧链压缩
- 36.106 侧链门
- 36.107 静音检测
- 36.108 静音去除
- 36.109 沙发化器
- 36.110 语音规范化
- 36.111 立体声工具
- 36.112 立体声扩展
- 36.113 高级均衡器
- 36.114 环绕音效
- 36.115 倾斜架
- 36.116 高音,高架滤波
- 36.117 颤音
- 36.118 抖动
- 36.119 虚拟低音
- 36.120 音量
- 36.121 音量检测
- 37 音频源
- 38 音频接收器
- 39 视频滤镜
- 39.1 添加ROI
- 39.2 提取透明度
- 39.3 合并透明度
- 39.4 放大
- 39.5 ASS字幕
- 39.6 噪声抑制
- 39.7 平均模糊
- 39.8 背景关键
- 39.9 边界框
- 39.10 双边滤波
- 39.11 位平面噪声
- 39.12 黑色检测
- 39.13 黑帧检测
- 39.14 混合
- 39.15 块检测
- 39.16 模糊检测
- 39.17 BM3D滤波
- 39.18 方形模糊
- 39.19 BWDIF去隔行
- 39.20 无线电字幕封装
- 39.21 对比度锐化
- 39.22 色度保持
- 39.23 色度键合成
- 39.24 色度噪声抑制
- 39.25 色度偏移
- 39.26 色度范围
- 39.27 编解码器视图
- 39.28 色彩平衡
- 39.29 色彩对比
- 39.30 色彩校正
- 39.31 色彩通道混合器
- 39.32 着色
- 39.33 色键滤镜
- 39.34 色彩保持过滤
- 39.35 色彩级别调整
- 39.36 调色板
- 39.37 颜色矩阵
- 39.38 色彩空间
- 39.39 色温
- 39.40 卷积
- 39.41 卷积
- 39.42 复制
- 39.43 核心图像
- 39.44 相关
- 39.45 覆盖矩形
- 39.46 裁剪
- 39.47 检测裁剪
- 39.48 提示
- 39.49 曲线
- 39.50 数据范围
- 39.51 模糊去除
- 39.52 DCT去噪
- 39.53 去带
- 39.54 降块效应
- 39.55 降码率
- 39.56 去卷积
- 39.57 去斑点
- 39.58 压缩
- 39.59 减闪烁
- 39.60 去抖动
- 39.61 去标志
- 39.62 去雨
- 39.63 去抖动
- 39.64 色溢移除
- 39.65 去交错
- 39.66 膨胀
- 39.67 位移
- 39.68 DNN分类
- 39.69 DNN检测
- 39.70 DNN处理
- 39.71 绘制框
- 39.72 绘制曲线
- 39.73 绘制网格
- 39.74 绘制文本
- 39.75 边界检测
- 39.76 ELBG
- 39.77 熵
- 39.78 EPX
- 39.79 等值
- 39.80 腐蚀
- 39.81 差值估计
- 39.82 曝光
- 39.83 提取通道
- 39.84 淡入淡出
- 39.85 回馈
- 39.86 FFT去噪
- 39.87 FFT滤波
- 39.88 场
- 39.89 场提示
- 39.90 场匹配
- 39.91 字段顺序
- 39.92 填充边框
- 39.93 查找矩形
- 39.94 泛洪填充
- 39.95 格式
- 39.96 每秒帧数(fps)
- 39.97 帧打包
- 39.98 帧速率
- 39.99 帧步进
- 39.100 冻结检测
- 39.101 冻结帧
- 39.102 自由效果
- 39.103 空域后处理
- 39.104 同步帧
- 39.105 高斯模糊
- 39.106 通用等式
- 39.107 渐进降噪
- 39.108 图形监视器
- 39.109 灰世界
- 39.110 灰度边缘
- 39.111 引导滤波
- 39.112 Hald CLUT
- 39.113 水平翻转
- 39.114 直方图均衡
- 39.115 直方图
- 39.116 高质量去噪3D
- 39.117 GPU 下载
- 39.118 GPU 映射
- 39.119 GPU 上传
- 39.120 CUDA 上传
- 39.121 HQX 滤镜
- 39.122 水平堆叠
- 39.123 HSV 保持
- 39.124 HSV 键控
- 39.125 色调
- 39.126 色调饱和度
- 39.127 滞后效应
- 39.128 ICC 检测
- 39.129 ICC 生成
- 39.130 身份
- 39.131 ID 检测
- 39.132 插值滤波
- 39.133 膨胀
- 39.134 隔行扫描,隔行扫描(vulkan)
- 39.135 内核去交错
- 39.136 Kirsch 滤波
- 39.137 滞后函数
- 39.138 镜头校正
- 39.139 镜头修正
- 39.140 LCEVC 提升
- 39.141 Libplacebo 滤波
- 39.142 VMAF 测试
- 39.143 CUDA VMAF 测试
- 39.144 限制差异
- 39.145 限制器
- 39.146 循环
- 39.147 一维查找表
- 39.148 三维查找表
- 39.149 亮度键
- 39.150 查找表, RGB查找表, YUV查找表
- 39.151 二维查找表
- 39.152 屏蔽钳制
- 39.153 屏蔽最大值
- 39.154 屏蔽合并
- 39.155 屏蔽最小值
- 39.156 屏蔽阈值
- 39.157 屏蔽函数
- 39.158 MC去交织
- 39.159 中值
- 39.160 合并平面
- 39.161 移动估算
- 39.162 中间均衡器
- 39.163 插帧
- 39.164 混合
- 39.165 单色
- 39.166 形态学
- 39.167 MP去重
- 39.168 MSAD
- 39.169 相乘
- 39.170 取反
- 39.171 非局部均值
- 39.172 NNEDI
- 39.173 无格式
- 39.174 噪声
- 39.175 归一化
- 39.176 空值
- 39.177 光学字符识别
- 39.178 开源计算机视觉
- 39.179 示波器
- 39.180 叠加
- 39.181 OW去噪
- 39.182 填充
- 39.183 调色板生成
- 39.184 调色板使用
- 39.185 透视
- 39.186 相位
- 39.187 光敏性
- 39.188 像素格式测试
- 39.189 像素化
- 39.190 像素范围
- 39.191 PP7
- 39.192 预乘
- 39.193 普雷维特边缘
- 39.194 伪彩色
- 39.195 峰值信噪比
- 39.196 间隔拉升
- 39.197 量化参数
- 39.198 二维码编码
- 39.199 quirc
- 39.200 随机
- 39.201 读取eia608
- 39.202 读取vitc
- 39.203 重映射
- 39.204 移除颗粒
- 39.205 去除logo
- 39.206 重复字段
- 39.207 倒放
- 39.208 RGB通道偏移
- 39.209 罗伯茨算子
- 39.210 旋转
- 39.211 sab滤镜
- 39.212 缩放
- 39.213 scale_vt
- 39.214 scharr滤镜
- 39.215 滚动
- 39.216 场景检测
- 39.217 选择性颜色
- 39.218 分离字段
- 39.219 设置DAR和SAR
- 39.220 设置字段
- 39.221 设置参数
- 39.222 剪切
- 39.223 显示信息
- 39.224 显示调色板
- 39.225 打乱帧
- 39.226 打乱像素
- 39.227 打乱平面
- 39.228 信号统计
- 39.229 签名生成
- 39.230 时空指标(SITI)
- 39.231 智能模糊
- 39.232 Sobel算子
- 39.233 spp滤镜
- 39.234 超分辨率(SR)
- 39.235 SR_AMF滤镜
- 39.236 SSIM指标
- 39.237 立体3D
- 39.238 流选择(视频/音频)
- 39.239 字幕
- 39.240 super2xsai滤镜
- 39.241 矩形交换
- 39.242 交换UV通道
- 39.243 混合时间(blend)
- 39.244 转场模式(telecine)
- 39.245 灰度直方图
- 39.246 阈值效果
- 39.247 缩略图
- 39.248 平铺
- 39.249 倾斜移位
- 39.250 交错处理
- 39.251 中值滤波器
- 39.252 时间中值均衡器
- 39.253 时间混合器
- 39.254 色调映射
- 39.255 填充边宽
- 39.256 格式转换
- 39.257 视频剪辑
- 39.258 去预乘Alpha
- 39.259 锐化
- 39.260 untile(取消分片)
- 39.261 uspp(超精度预测滤镜)
- 39.262 v360(360度视频滤镜)
- 39.263 vaguedenoiser(模糊降噪器)
- 39.264 varblur(可变模糊滤镜)
- 39.265 vectorscope(矢量示波器滤镜)
- 39.266 vidstabdetect(视频稳定检测滤镜)
- 39.267 vidstabtransform(视频稳定变换滤镜)
- 39.268 vflip(垂直翻转滤镜)
- 39.269 vfrdet(可变帧率检测滤镜)
- 39.270 vibrance(色彩鲜艳度滤镜)
- 39.271 vif(视频信息可用性指标滤镜)
- 39.272 vignette(渐晕滤镜)
- 39.273 vmafmotion(运动感知视频质量指标滤镜)
- 39.274 vpp_amf(AMF视频预处理滤镜)
- 39.275 vstack(垂直堆叠滤镜)
- 39.276 w3fdif(快速三场去隔行滤镜)
- 39.277 waveform(波形显示滤镜)
- 39.278 weave, doubleweave(编织和双编织滤镜)
- 39.279 xbr(xBR缩放滤镜)
- 39.280 xcorrelate(交叉相关滤镜)
- 39.281 xfade(交叉渐变滤镜)
- 39.282 xmedian(中值滤镜)
- 39.283 xpsnr(峰值信噪比滤镜)
- 39.284 xstack(交叉堆叠滤镜)
- 39.285 yadif(丫字型去隔行滤镜)
- 39.286 yaepblur(丫字型扩展模糊滤镜)
- 39.287 zoompan(缩放和平移滤镜)
- 39.288 zscale(缩放滤镜)
- 40 CUDA视频滤镜
- 41 OpenCL视频滤镜
- 41.1 avgblur_opencl(平均模糊滤镜OpenCL版本)
- 41.2 boxblur_opencl(方框模糊滤镜OpenCL版本)
- 41.3 colorkey_opencl(色度键滤镜OpenCL版本)
- 41.4 convolution_opencl(卷积滤镜OpenCL版本)
- 41.5 erosion_opencl(腐蚀滤镜OpenCL版本)
- 41.6 deshake_opencl(去抖动滤镜OpenCL版本)
- 41.7 dilation_opencl(膨胀滤镜OpenCL版本)
- 41.8 nlmeans_opencl(非局部均值降噪滤镜OpenCL版本)
- 41.9 overlay_opencl(叠加滤镜OpenCL版本)
- 41.10 pad_opencl(填充滤镜OpenCL版本)
- 41.11 prewitt_opencl(普鲁伊特边缘检测滤镜OpenCL版本)
- 41.12 program_opencl(程序控制滤镜OpenCL版本)
- 41.13 remap_opencl(重映射滤镜OpenCL版本)
- 41.14 roberts_opencl(罗伯茨边缘检测滤镜OpenCL版本)
- 41.15 sobel_opencl(索贝尔边缘检测滤镜OpenCL版本)
- 41.16 tonemap_opencl(色调映射滤镜OpenCL版本)
- 41.17 unsharp_opencl(非锐化滤镜OpenCL版本)
- 41.18 xfade_opencl
- 42 VAAPI 视频滤镜
- 43 Vulkan 视频滤镜
- 44 QSV 视频滤镜
- 45 视频源
- 45.1 buffer
- 45.2 cellauto
- 45.3 coreimagesrc
- 45.4 ddagrab
- 45.5 gradients
- 45.6 mandelbrot
- 45.7 mptestsrc
- 45.8 frei0r_src
- 45.9 life
- 45.10 perlin
- 45.11 qrencodesrc
- 45.12 allrgb、allyuv、color、colorchart、colorspectrum、haldclutsrc、nullsrc、pal75bars、pal100bars、rgbtestsrc、smptebars、smptehdbars、testsrc、testsrc2、yuvtestsrc
- 45.13 openclsrc
- 45.14 sierpinski
- 45.15 zoneplate
- 46 视频接收器
- 47 多媒体滤镜
- 47.1 a3dscope
- 47.2 abitscope
- 47.3 adrawgraph
- 47.4 agraphmonitor
- 47.5 ahistogram
- 47.6 aphasemeter
- 47.7 avectorscope
- 47.8 bench、abench
- 47.9 concat
- 47.10 ebur128
- 47.11 interleave、ainterleave
- 47.12 latency、alatency
- 47.13 metadata、ametadata
- 47.14 perms、aperms
- 47.15 realtime、arealtime
- 47.16 segment、asegment
- 47.17 select、aselect
- 47.18 sendcmd、asendcmd
- 47.19 setpts、asetpts
- 47.20 设置范围
- 47.21 设置时间基,设置时间基(音频)
- 47.22 显示连续小波变换系数
- 47.23 显示连续小波变换
- 47.24 显示频率
- 47.25 显示空间
- 47.26 显示频谱
- 47.27 显示频谱图
- 47.28 显示音量
- 47.29 显示波形
- 47.30 显示波形图
- 47.31 侧数据,侧数据(音频)
- 47.32 频谱合成
- 47.33 拆分,拆分(音频)
- 47.34 零消息队列,零消息队列(音频)
- 48 多媒体源
- 49 外部库
- 49.1 Open Media 联盟 (AOM)
- 49.2 AMD AMF/VCE
- 49.3 AviSynth
- 49.4 Chromaprint
- 49.5 codec2
- 49.6 dav1d
- 49.7 davs2
- 49.8 uavs3d
- 49.9 游戏音乐仿真器
- 49.10 Intel QuickSync 视频
- 49.11 Kvazaar
- 49.12 LAME
- 49.13 LCEVC解码
- 49.14 libilbc
- 49.15 libjxl
- 49.16 libvpx
- 49.17 ModPlug
- 49.18 OpenCORE、VisualOn 和 Fraunhofer 库
- 49.19 OpenH264
- 49.20 OpenJPEG
- 49.21 rav1e
- 49.22 SVT-AV1
- 49.23 TwoLAME
- 49.24 VapourSynth
- 49.25 x264
- 49.26 x265
- 49.27 xavs
- 49.28 xavs2
- 49.29 eXtra-fast Essential Video Encoder (XEVE)
- 49.30 eXtra-fast Essential Video Decoder (XEVD)
- 49.31 ZVBI
- 50 支持的文件格式、编解码器或功能
- 51 另见
- 52 作者
1 概述
ffmpeg [全局选项] {[输入文件选项] -iinput_url} ... {[输出文件选项] output_url} ...
2 描述
ffmpeg是一个通用的媒体转换器。它可以读取多种输入来源——包括实时抓取/录制设备——进行过滤,并将其转码为多种输出格式。
ffmpeg可以从任意数量的输入读取(这些输入可以是普通文件、管道、网络流、抓取设备等),通过-i选项指定,并写入任意数量的输出,这些输出通过简单的输出URL指定。命令行中任何无法解释为选项的内容都被视为输出URL。
原则上,每个输入或输出都可以包含任意数量的不同类型的基本流(视频/音频/字幕/附件/数据),尽管允许的流数量和/或类型可能受到容器格式的限制。选择将哪些输入中的流放入哪些输出中,可以自动完成或通过-map选项完成(请参阅流选择章节)。
要在选项中指代输入/输出,必须使用它们的索引(从0开始)。例如,第一个输入是0,第二个是1,依此类推。同样,输入/输出内的流也用其索引表示。例如,2:3指的是第三个输入或输出中的第四条流。此外请参阅流说明符章节。
一般规则是,选项应用于紧接着指定的文件。因此,顺序很重要,并且可以在命令行中多次使用相同的选项。每次出现都应用于下一个输入或输出文件。该规则的例外是全局选项(例如,详细级别),应首先指定。
不要混合输入和输出文件——先指定所有输入文件,然后是所有输出文件。也不要混合属于不同文件的选项。所有选项仅适用于下一个输入或输出文件,并在文件之间重置。
一些简单的例子如下。
- 通过重新编码媒体流,将输入媒体文件转换为不同的格式:
ffmpeg -i input.avi output.mp4
- 将输出文件的视频比特率设置为 64 kbit/s:
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.mp4
- 强制输出文件的帧率为 24 fps:
ffmpeg -i input.avi -r 24 output.mp4
- 强制输入文件的帧率(仅适用于原始格式)为 1 fps,
输出文件的帧率为 24 fps:
ffmpeg -r 1 -i input.m2v -r 24 output.mp4
对于原始输入文件可能需要使用格式选项。
3 详细描述
ffmpeg基于以下列出的组件构建一个转码管道。程序的操作包括输入数据块从源流向管道下游,
通过它们遇到的组件进行转换并最终到达接收端。
以下是可用组件的类型:
- Demuxers(“解复用器”的缩写)从输入源读取以提取
- 全局属性,例如元数据或章节;
- 输入基本流及其属性的列表
为每个解复用器实例创建-i选项,并发送加密的packets至decoders或muxers.
在其他文献中,解复用器有时被称为splitters,因为它们的主要功能是将文件分割成基本流(尽管某些文件只包含一个基本流)。
解复用器的示意图如下所示:
┌──────────┬───────────────────────┐ │ demuxer │ │ packets for stream 0 ╞══════════╡ elementary stream 0 ├──────────────────────► │ │ │ │ global ├───────────────────────┤ │properties│ │ packets for stream 1 │ and │ elementary stream 1 ├──────────────────────► │ metadata │ │ │ ├───────────────────────┤ │ │ │ │ │ ........... │ │ │ │ │ ├───────────────────────┤ │ │ │ packets for stream N │ │ elementary stream N ├──────────────────────► │ │ │ └──────────┴───────────────────────┘ ▲ │ │ read from file, network stream, │ grabbing device, etc. │ - Decoders接收编码(压缩)的packets用于音频、视频或字幕基本流,并将它们解码成原始frames(视频的像素数组,音频的PCM)。解码器通常与一个基本流相关联(并从该流接收其输入)demuxer,但有时也可以独立存在(见回环解码器).
解码器的示意图如下所示:
┌─────────┐ packets │ │ raw frames ─────────►│ decoder ├────────────► │ │ └─────────┘ - Filtergraphs处理和转换原始音频或视频frames。滤镜图由一个或多个独立的filters链接成一个图。滤镜图有两种类型 -simple和complex,通过配置-filter和-filter_complex选项。
一个简单的滤镜图与一个output elementary stream关联;它从decoder接收要过滤的输入,并将过滤后的输出发送到该输出流的encoder.
一个执行去交错(使用
yadif去交错器)和调整大小(使用scale滤镜)的简单视频滤镜图可能看起来如下:┌────────────────────────┐ │ simple filtergraph │ frames from ╞════════════════════════╡ frames for a decoder │ ┌───────┐ ┌───────┐ │ an encoder ────────────►├─►│ yadif ├─►│ scale ├─►│────────────► │ └───────┘ └───────┘ │ └────────────────────────┘复杂滤镜图是独立的,未与任何特定的流关联。它可能具有多个(或零)输入,输入类型可能不同(音频或视频),数据从解码器或其他复杂滤镜图的输出接收。它还有一个或多个输出,输出可供编码器或其他复杂滤镜图输入。
以下示意图表示具有 3 个输入和 2 个输出(均为视频)的复杂滤镜图:
┌─────────────────────────────────────────────────┐ │ complex filtergraph │ ╞═════════════════════════════════════════════════╡ frames ├───────┐ ┌─────────┐ ┌─────────┐ ┌────────┤ frames ─────────►│input 0├─►│ overlay ├─────►│ overlay ├─►│output 0├────────► ├───────┘ │ │ │ │ └────────┤ frames ├───────┐╭►│ │ ╭►│ │ │ ─────────►│input 1├╯ └─────────┘ │ └─────────┘ │ ├───────┘ │ │ frames ├───────┐ ┌─────┐ ┌─────┬─╯ ┌────────┤ frames ─────────►│input 2├►│scale├►│split├───────────────►│output 1├────────► ├───────┘ └─────┘ └─────┘ └────────┤ └─────────────────────────────────────────────────┘来自第二输入的帧叠加在第一输入的帧上。来自第三输入的帧被重新缩放,然后被复制成两个相同的流。其中一个叠加在前两个输入的组合上,结果作为滤镜图的第一个输出暴露。另一个副本成为滤镜图的第二个输出。
- Encoders接收原始音频、视频或字幕frames并将它们编码成编码后的packets。编码(压缩)过程通常lossy会降低流质量以使输出更小;一些编码器是lossless无损的,但代价是输出大小大得多。视频或音频编码器从某个滤镜图的输出接收其输入,而字幕编码器从解码器接收输入(因为尚不支持字幕过滤)。每个编码器都与某个复用器的output
elementary stream相关联并将其输出发送到该复用器。
编码器的示意图如下所示:
┌─────────┐ raw frames │ │ packets ────────────►│ encoder ├─────────► │ │ └─────────┘ - Muxers(“复用器”的缩写)接收编码的packets用于它们的基本流,从编码器(transcoding路径)或直接从解复用器(streamcopy路径),将它们交错(当有多个基本流时),并将生成的字节写入输出文件(或管道、网络流等)。
复用器的示意图如下所示:
┌──────────────────────┬───────────┐ packets for stream 0 │ │ muxer │ ──────────────────────►│ elementary stream 0 ╞═══════════╡ │ │ │ ├──────────────────────┤ global │ packets for stream 1 │ │properties │ ──────────────────────►│ elementary stream 1 │ and │ │ │ metadata │ ├──────────────────────┤ │ │ │ │ │ ........... │ │ │ │ │ ├──────────────────────┤ │ packets for stream N │ │ │ ──────────────────────►│ elementary stream N │ │ │ │ │ └──────────────────────┴─────┬─────┘ │ write to file, network stream, │ grabbing device, etc. │ │ ▼
3.1 流拷贝
最简单的管道是ffmpeg单流streamcopy,即复制一个input elementary stream的封包而无需解码、过滤或编码它们。例如,考虑名为INPUT.mkv的输入文件,其中有 3 个基本流,我们选择第二个并将其写入文件OUTPUT.mp4。这样的管道示意图如下:
┌──────────┬─────────────────────┐ │ demuxer │ │ unused ╞══════════╡ elementary stream 0 ├────────╳ │ │ │ │INPUT.mkv ├─────────────────────┤ ┌──────────────────────┬───────────┐ │ │ │ packets │ │ muxer │ │ │ elementary stream 1 ├─────────►│ elementary stream 0 ╞═══════════╡ │ │ │ │ │OUTPUT.mp4 │ │ ├─────────────────────┤ └──────────────────────┴───────────┘ │ │ │ unused │ │ elementary stream 2 ├────────╳ │ │ │ └──────────┴─────────────────────┘
可以使用以下命令行构建上述管道:
ffmpeg -i INPUT.mkv -map 0:1 -c copy OUTPUT.mp4
在这个命令行中
- 只有一个输入INPUT.mkv;
- 该输入没有输入选项;
- 只有一个输出OUTPUT.mp4;
- 该输出有两个输出选项:
-
-map 0:1选择要使用的输入流 - 从索引为 0(即第一个)的输入中选择索引为 1(即第二个)的流; -
-c copy选择copy编码器,即使用流拷贝而无需解码或编码。
-
流拷贝对于改变基本流数量、容器格式或修改容器级元数据很有用。由于没有解码或编码,因此速度非常快且没有质量损失。然而,由于各种因素(例如目标容器所需的某些信息在源中不可用),它可能在某些情况下不起作用。此外,显然无法应用滤镜,因为滤镜仅在解码帧上工作。
可以构建更复杂的流拷贝场景 - 例如,将两个输入文件中的流组合到一个输出中:
┌──────────┬────────────────────┐ ┌────────────────────┬───────────┐ │ demuxer 0│ │ packets │ │ muxer │ ╞══════════╡elementary stream 0 ├────────►│elementary stream 0 ╞═══════════╡ │INPUT0.mkv│ │ │ │OUTPUT.mp4 │ └──────────┴────────────────────┘ ├────────────────────┤ │ ┌──────────┬────────────────────┐ │ │ │ │ demuxer 1│ │ packets │elementary stream 1 │ │ ╞══════════╡elementary stream 0 ├────────►│ │ │ │INPUT1.aac│ │ └────────────────────┴───────────┘ └──────────┴────────────────────┘
可以通过以下命令行构建
ffmpeg -i INPUT0.mkv -i INPUT1.aac -map 0:0 -map 1:0 -c copy OUTPUT.mp4
输出-map选项在此处使用了两次,创建了输出文件中的两个流 - 一个从第一个输入提供,另一个从第二个输入提供。-c选项的单个实例选择这两个流的流拷贝。您还可以使用多个此选项的实例与流指定符结合使用,以对每个流应用不同的值,这将在后续部分中演示。
反向场景是将一个输入中的多个流拆分到多个输出中:
┌──────────┬─────────────────────┐ ┌───────────────────┬───────────┐
│ demuxer │ │ packets │ │ muxer 0 │
╞══════════╡ elementary stream 0 ├─────────►│elementary stream 0╞═══════════╡
│ │ │ │ │OUTPUT0.mp4│
│INPUT.mkv ├─────────────────────┤ └───────────────────┴───────────┘
│ │ │ packets ┌───────────────────┬───────────┐
│ │ elementary stream 1 ├─────────►│ │ muxer 1 │
│ │ │ │elementary stream 0╞═══════════╡
└──────────┴─────────────────────┘ │ │OUTPUT1.mp4│
└───────────────────┴───────────┘
通过以下命令行构建
ffmpeg -i INPUT.mkv -map 0:0 -c copy OUTPUT0.mp4 -map 0:1 -c copy OUTPUT1.mp4
请注意,每个输出文件都需要一个独立的-c选项实例,即使它们的值相同。这是因为非全局选项(大多数选项)仅适用于它们放置之前的文件上下文。
这些示例当然可以进一步泛化为任何数量输入到任何数量输出的任意重新映射。
3.2 转码
Transcoding是解码流然后再次编码的过程。由于编码往往计算成本昂贵,并且在大多数情况下会降低流质量(即lossy有损),您应该只在需要时进行转码,并在其他情况下执行流拷贝。转码的典型理由是:
- 应用滤镜 - 例如调整大小、去交错或叠加视频;重采样或混音音频;
- 您希望将流提供给无法解码原始编解码器的设备。
需要注意的是ffmpeg将对所有音频、视频和字幕流进行转码,除非您为它们指定-c copy。
考虑一个示例管道,该管道读取一个包含一个音频和一个视频流的输入文件,转码视频并将音频复制到单个输出文件。以下是该管道的示意图
┌──────────┬─────────────────────┐
│ demuxer │ │ audio packets
╞══════════╡ stream 0 (audio) ├─────────────────────────────────────╮
│ │ │ │
│INPUT.mkv ├─────────────────────┤ video ┌─────────┐ raw │
│ │ │ packets │ video │ video frames │
│ │ stream 1 (video) ├─────────►│ decoder ├──────────────╮ │
│ │ │ │ │ │ │
└──────────┴─────────────────────┘ └─────────┘ │ │
▼ ▼
│ │
┌──────────┬─────────────────────┐ video ┌─────────┐ │ │
│ muxer │ │ packets │ video │ │ │
╞══════════╡ stream 0 (video) │◄─────────┤ encoder ├──────────────╯ │
│ │ │ │(libx264)│ │
│OUTPUT.mp4├─────────────────────┤ └─────────┘ │
│ │ │ │
│ │ stream 1 (audio) │◄────────────────────────────────────╯
│ │ │
└──────────┴─────────────────────┘
以及使用以下命令行实现的方式:
ffmpeg -i INPUT.mkv -map 0:v -map 0:a -c:v libx264 -c:a copy OUTPUT.mp4
注意如何使用流指定符:v和:a选择输入流并为它们应用不同的-c选项值;有关详细信息,请参阅流指定符部分。
3.3 滤镜
在转码时,音频和视频流可以在编码之前进行滤镜处理,使用任意一个simple或complex过滤图。
3.3.1 简单过滤图
简单过滤图是那些恰好有一个输入和一个输出,且类型相同(音频或视频)的过滤图。它们通过每个流的选项配置(使用-filter选项,与-vf以及-af分别对应-filter:v(视频)和-filter:a(音频))。请注意,简单过滤图与其输出流绑定,例如,如果您有多个音频流,-af将为每个音频流创建一个单独的过滤图。
以下是转码示例,添加过滤(为简洁起见省略音频)后,变成如下形式:
┌──────────┬───────────────┐
│ demuxer │ │ ┌─────────┐
╞══════════╡ video stream │ packets │ video │ frames
│INPUT.mkv │ ├─────────►│ decoder ├─────►───╮
│ │ │ └─────────┘ │
└──────────┴───────────────┘ │
╭───────────◄───────────╯
│ ┌────────────────────────┐
│ │ simple filtergraph │
│ ╞════════════════════════╡
│ │ ┌───────┐ ┌───────┐ │
╰──►├─►│ yadif ├─►│ scale ├─►├╮
│ └───────┘ └───────┘ ││
└────────────────────────┘│
│
│
┌──────────┬───────────────┐ video ┌─────────┐ │
│ muxer │ │ packets │ video │ │
╞══════════╡ video stream │◄─────────┤ encoder ├───────◄───────╯
│OUTPUT.mp4│ │ │ │
│ │ │ └─────────┘
└──────────┴───────────────┘
3.3.2 复杂过滤图
复杂过滤图是不可能仅仅描述为应用于一个流的线性处理链的过滤图。例如,当图包含多个输入和/或输出时,或者当输出流类型与输入不同时。这类复杂过滤图通过-filter_complex选项配置。请注意,该选项是全局性的,因为一个复杂过滤图本质上无法明确地与单个流或文件关联。每次使用-filter_complex都会创建一个新的复杂过滤图,而且可以有任意数量的复杂过滤图。
一个复杂过滤图的简单示例是overlay过滤器,它有两个视频输入和一个视频输出,其中一个视频在另一个视频之上叠加。其音频对应是amix过滤器。
3.4 回环解码器
虽然解码器通常与解复用器流相关联,但也可以创建“回环”解码器以解码某些编码器的输出并允许其反馈到复杂过滤图。这是通过-dec指令实现的,该指令将输出流的索引作为参数传递,该输出流应被解码。每个这样的指令都会创建一个新的回环解码器,索引从零开始递增。这些索引应在复杂过滤图链接标签中用来引用回环解码器,如-filter_complex.
的文档中所述。-dec解码 AV选项可以通过放置在
之前传递给回环解码器,与输入/输出选项类似。
ffmpeg -i INPUT \ -map 0:v:0 -c:v libx264 -crf 45 -f null - \ -threads 3 -dec 0:0 \ -filter_complex '[0:v][dec:0]hstack[stack]' \ -map '[stack]' -c:v ffv1 OUTPUT
例如,以下示例:
- 读取输入视频并
libx264以低质量进行编码; - 使用 3 个线程解码该编码流;
- 将解码的视频与原始输入视频并排放置;
- 然后将组合视频无损编码并写入OUTPUT.
这样的转码管道可以用以下图示表示:
┌──────────┬───────────────┐
│ demuxer │ │ ┌─────────┐ ┌─────────┐ ┌────────────────────┐
╞══════════╡ video stream │ │ video │ │ video │ │ null muxer │
│ INPUT │ ├──►│ decoder ├──┬────────►│ encoder ├─┬─►│(discards its input)│
│ │ │ └─────────┘ │ │(libx264)│ │ └────────────────────┘
└──────────┴───────────────┘ │ └─────────┘ │
╭───────◄──╯ ┌─────────┐ │
│ │loopback │ │
│ ╭─────◄──────┤ decoder ├────◄──╯
│ │ └─────────┘
│ │
│ │
│ │ ┌───────────────────┐
│ │ │complex filtergraph│
│ │ ╞═══════════════════╡
│ │ │ ┌─────────────┐ │
╰─╫─►├─►│ hstack ├─►├╮
╰─►├─►│ │ ││
│ └─────────────┘ ││
└───────────────────┘│
│
┌──────────┬───────────────┐ ┌─────────┐ │
│ muxer │ │ │ video │ │
╞══════════╡ video stream │◄─┤ encoder ├───────◄──────────╯
│ OUTPUT │ │ │ (ffv1) │
│ │ │ └─────────┘
└──────────┴───────────────┘
4 流选择
ffmpeg提供-map选项,用于手动控制每个输出文件中的流选择。用户可以跳过-map并让 ffmpeg 执行自动流选择,如下所述。-vn / -an / -sn / -dn选项可用于跳过视频、音频、字幕和数据流的包含,无论是手动映射还是自动选择的,除了那些复杂过滤图的输出流。
4.1 描述
以下子节描述了流选择中涉及的各种规则。接下来的示例说明了这些规则在实践中的应用。
尽可能准确反映程序的行为,FFmpeg 处于持续开发中,自撰写本文以来,代码可能已经发生了变化。
4.1.1 自动流选择
对于特定输出文件,如果没有任何映射选项,ffmpeg 会检查输出格式以确定可以包含的流类型,例如视频、音频和字幕。对于每种可接受的流类型,ffmpeg 将从所有输入中选择一个(如果可用)。
它将根据以下标准选择流:
- 对于视频,是具有最高分辨率的流,
- 对于音频,是具有最多声道的流,
- 对于字幕,是找到的第一个字幕流,但存在一种情况。输出格式的默认字幕编码器可以是基于文本或基于图像的,只有与相同类型的字幕流才会被选择。
在相同类型的多个流中具有相同评分的情况下,会选择索引最低的流。
数据或附件流不会自动选择,且只能使用-map.
4.1.2 手动流选择
使用-map时,仅用户映射的流会包含在该输出文件中,复杂过滤图输出描述的情况除外。
4.1.3 复杂过滤图
如果存在任何未标记的复杂过滤图输出流,它们将被添加到第一个输出文件中。如果输出格式不支持该流类型,会导致致命错误。在没有映射选项的情况下,包含这些流将跳过其类型的自动流选择。如果存在映射选项,这些过滤图流将与映射流一起包含。
具有标记接触点的复杂过滤图输出流必须被映射一次且只能一次。
4.1.4 流处理
流处理独立于流选择,除了字幕描述的情况。流处理通过-codec选项设置,与特定output文件中的流相关联。尤其是,编解码器选项由 ffmpeg 在流选择过程之后应用,因此不会影响流选择过程。如果没有为流类型指定-codec选项,ffmpeg 将选择默认的由输出文件复用器注册的编码器。
字幕除外。如果为输出文件指定了字幕编码器,找到的任何类型的第一个字幕流,无论是文本还是图像,都将包含在内。ffmpeg 不会验证指定的编码器是否可以转换所选流或转换后的流是否可接受在输出格式中。这通常适用:当用户手动设置编码器时,流选择过程无法检查编码后的流能否复用到输出文件中。如果不能,ffmpeg 将中止并all输出文件将无法处理。
4.2 示例
以下示例说明了 ffmpeg 的流选择方法的行为、特点和限制。
它们假设以下三个输入文件。
input file 'A.avi'
stream 0: video 640x360
stream 1: audio 2 channels
input file 'B.mp4'
stream 0: video 1920x1080
stream 1: audio 2 channels
stream 2: subtitles (text)
stream 3: audio 5.1 channels
stream 4: subtitles (text)
input file 'C.mkv'
stream 0: video 1280x720
stream 1: audio 2 channels
stream 2: subtitles (image)
示例:自动流选择
ffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov
指定了三个输出文件,对于前两个文件,没有设置-map选项,故 ffmpeg 将为这两个文件自动选择流。
out1.mkv是一个 Matroska 容器文件,可接受视频、音频和字幕流,因此 ffmpeg 将尝试从中选择每种类型的一个。
对于视频,它将选择stream 0来自B.mp4,具有所有输入视频流中最高的分辨率。
对于音频,它将选择stream 3来自B.mp4,因为它具有最多的声道。
对于字幕,它将选择stream 2来自B.mp4,这是A.avi和B.mp4.
out2.wav中找到的第一个字幕流。stream 3只接受音频流,因此仅选择B.mp4来自
的流。out3.mov对于-map,由于设置了-map 1:a选项,不会执行自动流选择。B.mp4选项将从第二个输入
选择所有音频流。其他流不会包含在这个输出文件中。
对于前两个输出,包含的所有流将被转码。选择的编码器将是每个输出格式注册的默认编码器,这可能与输入流的编解码器不匹配。copy对于第三个输出,音频流的编解码器选项已设置为can,因此不会执行解码-过滤-编码操作,或仅进行这些操作。
选择的流的数据包将从输入文件中传递并在输出文件中复用。
ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv
示例:自动字幕选择out1.mkv虽然C.mkv是一个接受字幕流的 Matroska 容器文件,但仅选择视频和音频流。out2.mkv中的字幕流是基于图像的,而 Matroska 复用器的默认字幕编码器是基于文本的,因此预期字幕的转码操作将失败,故不会选择该流。但在-an中,命令中指定了字幕编码器,因此选择了字幕流,以及视频流。out2.mkv.
的存在禁用了音频流选择。
ffmpeg -i A.avi -i C.mkv -i B.mp4 -filter_complex "overlay" out1.mp4 out2.srt
示例:未标记的过滤图输出-filter_complex此处使用设置了过滤图,包含一个视频过滤器。overlay过滤器需要恰好两个视频输入,但未指定,因此使用前两个可用的视频流,即A.avi和C.mkv过滤器的输出端没有标签,因此直接发送到第一个输出文件out1.mp4由于这个原因,视频流的自动选择被跳过,否则会选择流B.mp4含有最多声道的音频流,例如:stream 3在B.mp4中自动选择。然而未选择字幕流,因为MP4格式没有默认的字幕编码器注册,并且用户未指定字幕编码器。
第二个输出文件,out2.srt只接受基于文本的字幕流。所以即使第一个可用的字幕流来自C.mkv,它是基于图像的,因此被跳过。选定的流,stream 2来自B.mp4,是第一个基于文本的字幕流。
示例:带标签的过滤器图输出
ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \
-map '[outv]' -an out1.mp4 \
out2.mkv \
-map '[outv]' -map 1:a:0 out3.mkv
上述命令将失败,因为被标记为[outv]的输出端已被重复映射。所有输出文件都不会被处理。
ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \
-an out1.mp4 \
out2.mkv \
-map 1:a:0 out3.mkv
上述命令也将失败,因为色调过滤器输出有一个标签[outv],但未在任何地方进行映射。
命令应修改如下:
ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0,split=2[outv1][outv2];overlay;aresample" \
-map '[outv1]' -an out1.mp4 \
out2.mkv \
-map '[outv2]' -map 1:a:0 out3.mkv
来自B.mp4的视频流被发送到色调过滤器,该过滤器的输出使用分割过滤器克隆一次,并为两个输出标记标签。然后两个克隆分别映射到第一个和第三个输出文件。
需要两个视频输入的叠加过滤器使用第一和第二个未使用的视频流。这些流来自A.avi和C.mkv。叠加过滤器的输出未被标记,因此直接发送到第一个输出文件out1.mp4,无论是否存在-map选项。
重采样音频过滤器被发送到第一个未使用的音频流,即A.avi。由于这个过滤器的输出也没有标签,因此它也被映射到第一个输出文件。选项-an只是抑制音频流的自动或手动选择,而不会对从过滤器图发送的输出产生影响。这两个映射的流将在out1.mp4.
中映射的流之前排列。out2.mkv的视频、音频和字幕流完全由自动流选择决定。
out3.mkv包含来自色调过滤器的克隆视频输出以及来自B.mp4.
的第一个音频流。
所有数值选项,如果没有特别说明,均接受表示数字的字符串输入,该字符串后可跟一个SI单位前缀,例如:’K’、’M’ 或 ’G’。
如果SI单位前缀后附加’i’,完整前缀将被解释为基于1024的二进制倍数单位前缀,而不是基于1000的。附加’B’到SI单位前缀会将值乘以8。这允许使用例如:’KB’、’MiB’、’G’ 和 ’B’作为数字后缀。
不接受参数的选项是布尔选项,其对应值设置为true。通过在选项名称前面加"no"可以将其设置为false。例如使用"-nofoo"将会把名为"foo"的布尔选项设置为false。
带参数的选项支持一种特殊语法,命令行中提供的参数会被解释为文件路径,从该文件加载实际参数值。要使用此功能,请在选项名称前直接加一个正斜杠’/’(紧跟在引导短横线之后)。例如:
ffmpeg -i INPUT -/filter:v filter.script OUTPUT
将从名为filter.script.
的文件加载过滤器图描述。
某些选项是按流应用的,例如码率或者编解码器。流指定符用于精确指定某选项属于哪个流。
流指定符是通常附加到选项名称后并以冒号分隔的字符串。例如:-codec:a:1 ac3包含a:1流指定符,它匹配第二个音频流。因此,它会为第二个音频流选择ac3编解码器。
流指定符可以匹配多个流,因此选项会应用于所有流。例如,在-b:a 128k中的流指定符匹配所有音频流。
空流指定符匹配所有流。例如:-codec copy或-codec: copy将复制所有流而不重新编码。
流指定符的可能形式如下:
- 流索引
与具有该索引的流匹配。例如:
-threads:1 4会将第二个流的线程数设置为4。如果流索引被用作一个额外的流指定符(见下文),它会选择匹配流中的编号为流索引的流。流编号基于libavformat检测的流顺序,但如果指定了流组指定符或节目ID,则基于组或节目中的流顺序。- 流类型[:附加流指定符]
流类型可以是以下之一:’v’或者’V’表示视频,’a’表示音频,’s’表示字幕,’d’表示数据,’t’表示附件。’v’匹配所有视频流,’V’仅匹配非附加图片视频流、视频缩略图或封面艺术。如果附加流指定符为使用,则匹配类型为此值,同时匹配附加流指定符的流。否则,它会匹配指定类型的所有流。
- g:组指定符[:附加流指定符]
匹配属于带有指定符组指定符的组中的流。如果附加流指定符被使用,那么它匹配既属于该组又符合附加流指定符. 的流。组指定符可以是以下之一:
- 组索引
匹配具有该组索引的流。
- #组ID or i:组ID
匹配具有该组ID的流。
- p:节目ID[:附加流指定符]
匹配属于具有ID节目ID的节目的流。如果附加流指定符被使用,它匹配既属于该节目又符合附加流指定符.
- #流ID or i:流ID
通过流ID匹配流(例如在MPEG-TS容器中为 PID)。
- m:键[:值]
匹配带有元数据标签键且值为指定值的流。如果值未指定,则匹配包含该标签的流(标签的值不限制)。在键或值中,冒号符号‘:’需要转义处理。
- disp:布局[:附加流指定符]
匹配具有给定属性的流。属性是一个或多个属性(由-dispositions选项打印)通过’+’连接而成的列表。
- u
匹配具有可用配置的流,编解码器必须被定义,并且像视频维度或音频采样率这样的基本信息必须存在。
请注意在
ffmpeg中,通过元数据匹配仅对输入文件正常工作。
5.2 通用选项
这些选项是 ff* 工具共享的。
- -L
显示许可证。
- -h, -?, -help, --help [参数]
显示帮助。可以指定一个可选参数以打印有关特定项目的帮助。如果未指定参数,则仅显示基本(非高级)工具选项。
参数的可能值是: are:
- long
除了基本工具选项外,还打印高级工具选项。
- full
打印选项的完整列表,包括编码器、解码器、解复用器、复用器、滤镜等的共享和私有选项。
- decoder=解码器名称
打印有关所指定解码器的详细信息解码器名称。使用-decoders选项获取所有解码器的列表。
- encoder=编码器名称
打印有关所指定编码器的详细信息编码器名称。使用-encoders选项获取所有编码器的列表。
- demuxer=解复用器名称
打印有关所指定解复用器的详细信息解复用器名称。使用-formats选项获取所有解复用器和复用器的列表。
- muxer=复用器名称
打印有关所指定复用器的详细信息复用器名称。使用-formats选项获取所有复用器和解复用器的列表。
- filter=滤镜名称
打印有关所指定滤镜的详细信息滤镜名称。使用-filters选项获取所有滤镜的列表。
- bsf=比特流过滤器名称
打印有关所指定比特流过滤器的详细信息比特流过滤器名称。使用-bsfs选项获取所有比特流过滤器的列表。
- protocol=协议名称
打印有关所指定协议的详细信息协议名称。使用-protocols选项获取所有协议的列表。
- -version
显示版本。
- -buildconf
显示构建配置,每行一个选项。
- -formats
显示可用的格式(包括设备)。
- -demuxers
显示可用的解复用器。
- -muxers
显示可用的复用器。
- -devices
显示可用的设备。
- -codecs
显示 libavcodec 已知的所有编解码器。
注意,本文档中术语“编解码器”通常是媒体比特流格式的简写。
- -decoders
显示可用的解码器。
- -encoders
显示所有可用的编码器。
- -bsfs
显示可用的比特流过滤器。
- -protocols
显示可用的协议。
- -filters
显示可用的 libavfilter 滤镜。
- -pix_fmts
显示可用的像素格式。
- -sample_fmts
显示可用的采样格式。
- -layouts
显示频道名称和标准频道布局。
- -dispositions
显示流属性。
- -colors
显示可识别的颜色名称。
- -sources 设备[,选项1=值1[,选项2=值2]...]
显示输入设备的自动检测源。 某些设备可能提供无法被自动检测到的系统相关源名称。 返回的列表不一定始终完整。
ffmpeg -sources pulse,server=192.168.0.4
- -sinks 设备[,选项1=值1[,选项2=值2]...]
显示输出设备的自动检测接收端。 某些设备可能提供无法被自动检测到的系统相关接收端名称。 返回的列表不一定始终完整。
ffmpeg -sinks pulse,server=192.168.0.4
- -loglevel [标志+]日志级别 | -v [标志+]日志级别
设置库使用的日志级别和标志。
可选的标志前缀可以由以下值组成:
- ‘repeat’
表示重复的日志输出不应被压缩为第一行,且将省略“最后的消息重复 n 次”的行。
- ‘level’
表示日志输出应在每行消息前添加
[level]前缀。这可以用作日志上色的替代方式,例如将日志转储到文件时。- ‘time’
表示日志行应添加时间信息作为前缀。
- ‘datetime’
表示日志行应添加日期和时间信息作为前缀。
可以单独使用标志,通过添加’+’/’-’前缀来设置/重置单个标志,而不影响其他标志或更改日志级别。在同时设置时标志和日志级别,最后一个值和分隔符之间应使用一个'+'连接标志值,并且在日志级别之前.
日志级别是一个字符串或数字,包含以下值之一:
- ‘quiet, -8’
不显示任何内容;保持静默。
- ‘panic, 0’
仅显示可能导致进程崩溃的致命错误,例如断言失败。当前没有使用此值。
- ‘fatal, 8’
仅显示致命错误。这些是进程绝对无法继续的错误。
- ‘error, 16’
显示所有错误,包括可恢复的错误。
- ‘warning, 24’
显示所有警告和错误。与可能不正确或预期的事件相关的任何消息都会显示。
- ‘info, 32’
在处理过程中显示信息性消息。这是在警告和错误之外的补充。这是默认值。
- ‘verbose, 40’
与
info相同,但更详细。- ‘debug, 48’
显示所有信息,包括调试信息。
- ‘trace, 56’
例如,要启用重复日志输出,请添加
level前缀,并设置日志级别为verbose:ffmpeg -loglevel repeat+level+verbose -i input output
另一个示例如启用重复日志输出而不影响当前
level的前缀标志或日志级别:ffmpeg [...] -loglevel +repeat
默认情况下,程序将日志输出到stderr。如果终端支持彩色,错误和警告会被颜色标记。通过设置环境变量
AV_LOG_FORCE_NOCOLOR可以禁用日志着色,也可以通过设置环境变量强制启用。AV_LOG_FORCE_COLOR.- -report
将完整的命令行和日志输出转储到名为的文件中
程序-YYYYMMDD-HHMMSS.log在当前目录中。 此文件对于报告错误很有用。 它还会隐含启用-loglevel debug.设置环境变量
FFREPORT为任意值具有相同效果。如果值是以':'分隔的键值对序列,这些选项将影响报告;如果选项值包含特殊字符或选项分隔符':'(参见ffmpeg-utils手册的“引用和转义”部分),则必须转义。以下选项被识别:
- file
设置用于报告的文件名;
%p扩展为程序的名称,%t扩展为时间戳,%%扩展为一个简单的%- level
使用数值设置日志详细程度级别(见
-loglevel).
例如,要将报告输出到名为ffreport.log的文件中,并使用日志级别
32(日志级别别名info):FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output
解析环境变量时的错误不是致命错误,并且不会出现在报告中。
- -hide_banner
禁止打印横幅。
所有FFmpeg工具通常会显示版权声明、构建选项和库版本。此选项可用于禁止打印此信息。
- -cpuflags flags (global)
允许设置和清除CPU标志。此选项旨在用于测试。如果您不知道所做的具体操作,请勿使用它。
ffmpeg -cpuflags -sse+mmx ... ffmpeg -cpuflags mmx ... ffmpeg -cpuflags 0 ...
此选项的可能标志包括:
- ‘x86’
- ‘mmx’
- ‘mmxext’
- ‘sse’
- ‘sse2’
- ‘sse2slow’
- ‘sse3’
- ‘sse3slow’
- ‘ssse3’
- ‘atom’
- ‘sse4.1’
- ‘sse4.2’
- ‘avx’
- ‘avx2’
- ‘xop’
- ‘fma3’
- ‘fma4’
- ‘3dnow’
- ‘3dnowext’
- ‘bmi1’
- ‘bmi2’
- ‘cmov’
- ‘ARM’
- ‘armv5te’
- ‘armv6’
- ‘armv6t2’
- ‘vfp’
- ‘vfpv3’
- ‘neon’
- ‘setend’
- ‘AArch64’
- ‘armv8’
- ‘vfp’
- ‘neon’
- ‘PowerPC’
- ‘altivec’
- ‘Specific Processors’
- ‘pentium2’
- ‘pentium3’
- ‘pentium4’
- ‘k6’
- ‘k62’
- ‘athlon’
- ‘athlonxp’
- ‘k8’
- -cpucount count (global)
覆盖CPU数的检测。此选项旨在用于测试。如果您不知道所做的具体操作,请勿使用它。
ffmpeg -cpucount 2
- -max_alloc 字节
设定ffmpeg的malloc函数家族在堆上分配块的最大尺寸限制。使用极度谨慎时请使用此选项。如果不了解这样做的全部后果,请不要使用。默认值为INT_MAX。
5.3 AVOptions
这些选项直接由libavformat、libavdevice和libavcodec库提供。要查看可用的AVOptions列表,请使用-help选项。它们分为两个类别:
- generic
这些选项可以为任何容器、编码器或设备设置。通用选项在容器/设备的AVFormatContext选项下以及编码器的AVCodecContext选项下列出。
- private
这些选项是特定于给定容器、设备或编码器的。私有选项列在其对应的容器/设备/编码器下。
例如,要写入ID3v2.3头而不是默认的ID3v2.4头到一个MP3文件,请使用id3v2_versionMP3复用器的私有选项:
ffmpeg -i input.flac -id3v2_version 3 out.mp3
所有编解码器AVOptions都是按流设置的,因此应为其附加一个流说明符:
ffmpeg -i multichannel.mxf -map 0:v:0 -map 0:a:0 -map 0:a:0 -c:a:0 ac3 -b:a:0 640k -ac:a:1 2 -c:a:1 aac -b:2 128k out.mp4
在上述示例中,多通道音频流在输出中被映射了两次。 第一个实例使用ac3编码器并设置比特率为640k。 第二个实例被降混为2个频道并使用aac编码器。通过输出流的绝对索引为它设定比特率为128k。
注意:不能为布尔值的AVOptions使用-nooption语法,请使用-option 0/-option 1.
注意:旧的未公开的通过在选项名称前加上v/a/s来指定按流设置的AVOptions的方法现已过时,很快将被移除。
5.4 主要选项
- -f fmt (input/output)
强制输入或输出文件格式。输入文件的格式通常会自动检测,输出文件的格式会根据文件扩展名进行推测,因此在大多数情况下无需此选项。
- -i url (input)
输入文件URL
- -y (global)
不询问直接覆盖输出文件。
- -n (global)
不要覆盖输出文件,如果指定的输出文件已存在则立即退出。
- -stream_loop 数值 (input)
设定输入流应循环的次数。循环0表示不循环,循环-1表示无限循环。
- -recast_media (global)
允许强制使用与解复用器检测或指定的媒体类型不同的解码器。对于解码以数据流形式复用的媒体数据很有用。
- -c[:流说明符] 编解码器 (input/output,per-stream)
- -codec[:流说明符] 编解码器 (input/output,per-stream)
为一个或多个流选择一个编码器(在输出文件之前使用时)或解码器(在输入文件之前使用时)。编解码器是解码器/编码器的名称或一个特殊值
copy(仅输出)表示该流不会被重新编码。例如
ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT
将所有视频流编码为libx264,并复制所有音频流。
对于每个流,应用最后一个匹配的
c选项,因此ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT
将复制所有流,除了第二个视频流,它将使用libx264编码,以及第138个音频流,它将使用libvorbis编码。
- -t 持续时间 (input/output)
作为输入选项使用时(在
-i之前),限制从输入文件中读取的持续时间的数据。作为输出选项使用时(在输出URL之前),在输出的持续时间达到持续时间.
持续时间必须是一个时间持续时间规范,参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续部分.
-to 和 -t 是互斥的,并且优先使用 -t。
- -to 位置 (input/output)
停止写入输出或读取输入到位置. 位置必须是一个时间长度的规范,参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间长度章节.
-to和-t是互斥的,-t具有优先权。
- -fs 限制大小 (output)
设置文件大小限制,以字节为单位。当超过限制时,不会写入更多字节。输出文件的大小可能略大于请求的文件大小。
- -ss 位置 (input/output)
作为输入选项使用时(在
-i之前),在此输入文件中定位到位置。请注意,在大多数格式中不能精确定位,因此ffmpeg将定位到距离位置最近的定位点。。在转码时-accurate_seek启用(默认情况下),这个定位点与位置之间的附加段将被解码并丢弃。对于流拷贝或者启用 will be decoded and discarded. When doing stream copy or when -noaccurate_seek时,该段会被保留。作为输出选项使用时(在输出url之前),解码但丢弃输入直到时间戳达到位置.
位置必须是一个时间长度的规范,参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间长度章节.
- -sseof 位置 (input)
-
类似于
-ss选项,但相对于“文件结尾”。即负值表示文件中较早的位置,0表示文件结尾。 - -isync 输入索引 (input)
将输入分配为同步源。
这将计算目标和参考输入的开始时间之间的差异,并通过该差异偏移目标文件的时间戳。两个输入的源时间戳应该来自于同一个时钟来源以获得预期结果。如果
copyts已设置,则start_at_zero也必须设置。如果两个输入之一没有起始时间戳,则不会进行同步调整。可接受的值是指向有效ffmpeg输入索引的值。如果同步参考本身是目标索引或-1,则对目标时间戳不进行调整。同步参考自身不可同步到其他输入。
默认值是-1.
- -itsoffset 偏移 (input)
设置输入时间偏移。
偏移必须是一个时间长度的规范,参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间长度章节.
偏移值会加到输入文件的时间戳上。指定正偏移表明对应的流延迟了偏移.
- -itsscale 比率 (input,per-stream)
重新调整输入时间戳。比率应为一个浮点数。
- -timestamp 日期 (output)
设置容器中的录制时间戳。
日期必须是一个日期规范,参见(ffmpeg-utils)ffmpeg-utils(1)手册中的日期章节.
- -metadata[:metadata_specifier] 键=值 (output,per-metadata)
设置元数据键/值对。
一个可选的元数据指定器可以用于设置流、章节或程序的元数据。参见
-map_metadata文档了解详情。此选项覆盖通过
-map_metadata设置的元数据。也可以通过一个空值来删除元数据。例如,设置输出文件的标题:
ffmpeg -i in.avi -metadata title="my title" out.flv
设置第一个音频流的语言:
ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT
- -disposition[:stream_specifier] 值 (output,per-stream)
为流设置处置标志。
默认值:默认情况下,所有处置标志会从输入流中复制,除非应用此选项的输出流由复杂过滤图供料 - 在这种情况下默认不设置处置标志。
值是通过’+’或’-’分隔的处置标志序列。一个’+’前缀添加给定的处置,’-’移除给定的处置。如果第一个标志也有前缀’+’或’-’,结果处置是更新了值的默认值。如果第一个标志没有前缀,结果处置是值。也可以通过将其设置为0来清除处置。
如果没有为输出文件指定
-disposition选项,ffmpeg会在输出文件中具有多个相同类型流,并且没有流标记为默认情况下自动设置‘默认’处置标志。选项列出已知的处置标志。
-dispositions例如,设置第二个音频流为默认流:设置第二个字幕流为默认流并删除第一个字幕流的默认处置:
ffmpeg -i in.mkv -c copy -disposition:a:1 default out.mkv
添加嵌入式封面/缩略图:
ffmpeg -i in.mkv -c copy -disposition:s:0 0 -disposition:s:1 default out.mkv
在第一个音频流上添加‘原始’并移除‘评论’处置标志而不移除其其他处置标志:
ffmpeg -i in.mp4 -i IMAGE -map 0 -map 1 -c copy -c:v:1 png -disposition:v:1 attached_pic out.mp4
在第一个音频流上移除‘原始’并添加‘评论’处置标志而不移除其其他处置标志:
ffmpeg -i in.mkv -c copy -disposition:a:0 +original-comment out.mkv
在第一个音频流上仅设置‘原始’和‘评论’处置标志(并移除其其他处置标志):
ffmpeg -i in.mkv -c copy -disposition:a:0 -original+comment out.mkv
移除第一个音频流的所有处置标志:
ffmpeg -i in.mkv -c copy -disposition:a:0 original+comment out.mkv
并非所有复用器支持嵌入缩略图,并且那些支持的仅支持少量格式,例如JPEG或PNG。
ffmpeg -i in.mkv -c copy -disposition:a:0 0 out.mkv
标题
- -program [title=节目编号:][program_num=流:]st=流[:st=stream...] (output)
-
创建具有指定标题, 节目编号并添加指定的流。
- -stream_group [map=输入文件ID=流组][type=类型:]st=流[:st=流][:stg=流组][:id=流组 ID...] (output)
-
创建一个指定的流组类型和流组 ID,或者通过映射输入组,添加指定的流(多个)和/或之前定义的流组到其中。
类型可以是以下之一:
- iamf_audio_element
分组属于同一个 IAMF 音频单元的流s that belong to the same IAMF Audio Element
对于此组类型,以下选项可用
- audio_element_type
音频单元类型。支持以下值:
- channel
可扩展的频道音频表示
- scene
Ambisonics 表示
- demixing
用于重构可扩展的频道音频表示的拆解信息。 该选项必须与其他选项用逗号分开,并带有以下 键=值选项
- parameter_id
帧中可引用的参数块的标识符
- dmixp_mode
预定义的拆解参数组合
- recon_gain
用于重构可扩展频道音频表示的重建增益信息。 该选项必须与其他选项用逗号分开,并带有以下 键=值选项
- parameter_id
帧中可引用的参数块的标识符
- layer
在音频单元中定义频道布局的层。 此选项必须与其他选项用逗号分开。可以定义多个逗号分隔的条目,且至少要设置一个。
它包含以下以":"分隔的键=值选项
- ch_layout
层的频道布局
- flags
可用的标志如下:
- recon_gain
是否在帧内的参数块中作为元数据信号显示“重构增益”
- output_gain
- output_gain_flags
输出增益应用于哪些频道。可用的标志如下:
- FL
- FR
- BL
- BR
- TFL
- TFR
- ambisonics_mode
Ambisonics 模式。如果音频单元类型设置为频道,则此选项无效。
支持以下值:
- mono
每个 Ambisonics 通道作为组中的单独单声道流进行编码
- default_w
默认权重值
- iamf_mix_presentation
分组属于所有 IAMF 音频单元同一 IAMF 混合陈述引用的流s that belong to all IAMF Audio Element the same IAMF Mix Presentation references
对于此组类型,以下选项可用
- submix
混合陈述中的一个子混合。 此选项必须与其他选项用逗号分开。可以定义多个逗号分隔的条目,且至少要设置一个。
它包含以下以":"分隔的键=值选项
- parameter_id
帧中可引用的用于后处理混合音频信号以生成播放音频信号的参数块标识符
- parameter_rate
帧中参数块中对应此参数 ID的采样率持续时间字段表示为
- default_mix_gain
当没有共享相同参数 ID的参数块用于指定帧时,应用的默认混合增益值
- element
引用此混合陈述中用于生成最终输出音频信号以进行播放的音频单元。 此选项必须与其他选项用"|"分开。可以定义多个"|"分隔的条目,且至少要设置一个。
它包含以下以":"分隔的键=值选项:
- stg
The 流组 ID此子混合引用的音频单元
- parameter_id
帧中可引用的参数块标识符,可用于对引用和渲染的音频单元进行任何处理,然后与其他处理的音频单元混合
- parameter_rate
帧中参数块中对应此参数 ID的采样率持续时间字段表示为
- default_mix_gain
当没有共享相同参数 ID的参数块用于指定帧时,应用的默认混合增益值
- annotations
描述子混合元素的键=值字符串,其中"键"是符合 BCP-47 的字符串,指定"值"字符串的语言。"键"必须与混合的注释
- headphones_rendering_mode
指示当通过耳机回放时,基于频道的输入音频单元是渲染到立体声扬声器还是通过双耳渲染器进行空间化。 如果引用的音频单元的音频单元类型设置为频道,则此选项无效。
支持以下值:
- stereo
- binaural
- layout
指定此子混合的布局,用于测量响度信息。 此选项必须与其他选项用"|"分开。可以定义多个"|"分隔的条目,且至少要设置一个。
它包含以下以":"分隔的键=值选项:
- layout_type
-
- loudspeakers
布局遵循 ITU-2051-3 的扬声器音响系统约定。
- binaural
布局为双耳。
- sound_system
频道布局匹配 ITU-2051-3 的声响系统 A 到 J,以及 7.1.2 和 3.1.2。 如果布局类型设置为双耳,则此选项无效。
- integrated_loudness
根据 ITU-1770-4 定义的节目综合响度信息。
- digital_peak
根据 ITU-1770-4 定义的音频信号的数字(采样)峰值。
- true_peak
根据 ITU-1770-4 定义的音频信号的真实峰值。
- dialog_anchored_loudness
根据 ITU-1770-4 定义的对话响度信息。
- album_anchored_loudness
根据 ITU-1770-4 定义的专辑响度信息。
- annotations
描述混合的键=值字符串,其中"键"是符合 BCP-47 的字符串,指定"值"字符串的语言。"键"必须与所有子混合元素的注释相同。
例如,从多个 WAV 输入文件创建一个可扩展的 5.1 IAMF 文件
ffmpeg -i front.wav -i back.wav -i center.wav -i lfe.wav -map 0:0 -map 1:0 -map 2:0 -map 3:0 -c:a opus -stream_group type=iamf_audio_element:id=1:st=0:st=1:st=2:st=3, demixing=parameter_id=998, recon_gain=parameter_id=101, layer=ch_layout=stereo, layer=ch_layout=5.1(side), -stream_group type=iamf_mix_presentation:id=2:stg=0:annotations=en-us=Mix_Presentation, submix=parameter_id=100:parameter_rate=48000|element=stg=0:parameter_id=100:annotations=en-us=Scalable_Submix|layout=sound_system=stereo|layout=sound_system=5.1(side) -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 output.iamf
将输入 IAMF 文件中包含四个流的两个流组(音频单元和混合陈述)复制到 MP4 输出中
ffmpeg -i input.iamf -c:a copy -stream_group map=0=0:st=0:st=1:st=2:st=3 -stream_group map=0=1:stg=0 -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 output.mp4
- -target 类型 (output)
指定目标文件类型(
vcd,svcd,dvd,dv,dv50). 类型可以通过前缀pal-,ntsc-或film-的方式使用对应的标准。然后所有格式选项(比特率、编解码器、缓冲区大小)将自动设置。您可以直接输入:ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
尽管如此,您可以指定额外选项,只要您知道它们不会与标准冲突,如下所示:
ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
为每个目标设置的参数如下。
VCD
PAL: -f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324 -s 352x288 -r 25 -codec:v mpeg1video -g 15 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680 -ar 44100 -ac 2 -codec:a mp2 -b:a 224k NTSC: -f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324 -s 352x240 -r 30000/1001 -codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680 -ar 44100 -ac 2 -codec:a mp2 -b:a 224k 电影: -f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324 -s 352x240 -r 24000/1001 -codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680 -ar 44100 -ac 2 -codec:a mp2 -b:a 224k
SVCD
PAL制式: -f svcd -packetsize 2324 -s 480x576 -pix_fmt yuv420p -r 25 -codec:v mpeg2video -g 15 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1 -ar 44100 -codec:a mp2 -b:a 224k NTSC制式: -f svcd -packetsize 2324 -s 480x480 -pix_fmt yuv420p -r 30000/1001 -codec:v mpeg2video -g 18 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1 -ar 44100 -codec:a mp2 -b:a 224k 电影: -f svcd -packetsize 2324 -s 480x480 -pix_fmt yuv420p -r 24000/1001 -codec:v mpeg2video -g 18 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1 -ar 44100 -codec:a mp2 -b:a 224k
DVD
PAL制式: -f dvd -muxrate 10080k -packetsize 2048 -s 720x576 -pix_fmt yuv420p -r 25 -codec:v mpeg2video -g 15 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008 -ar 48000 -codec:a ac3 -b:a 448k NTSC制式: -f dvd -muxrate 10080k -packetsize 2048 -s 720x480 -pix_fmt yuv420p -r 30000/1001 -codec:v mpeg2video -g 18 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008 -ar 48000 -codec:a ac3 -b:a 448k 电影: -f dvd -muxrate 10080k -packetsize 2048 -s 720x480 -pix_fmt yuv420p -r 24000/1001 -codec:v mpeg2video -g 18 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008 -ar 48000 -codec:a ac3 -b:a 448k
DV
PAL制式: -f dv -s 720x576 -pix_fmt yuv420p -r 25 -ar 48000 -ac 2 NTSC制式: -f dv -s 720x480 -pix_fmt yuv411p -r 30000/1001 -ar 48000 -ac 2 电影: -f dv -s 720x480 -pix_fmt yuv411p -r 24000/1001 -ar 48000 -ac 2
该
dv50目标与dv目标一致,但像素格式设置为yuv422p适用于三种标准。用户为上述参数设置的任何值将覆盖目标预设值。在这种情况下,输出可能不符合目标标准。
- -dn (input/output)
作为输入选项,阻止文件中的所有数据流被过滤 或被自动选择或映射到任何输出中。参见
-discard选项以单独禁用流。作为输出选项,禁用数据记录,即任何数据流的自动选择或 映射。有关完全手动控制,请参见
-map选项。- -dframes 数字 (output)
设置输出的数据帧数量。这是
-frames:d的废弃别名,您应该改用后者。- -frames[:流_指定符] 帧数 (output,per-stream)
在写入帧数帧后停止写入该流。
- -q[:流_指定符] 质量 (output,per-stream)
- -qscale[:流_指定符] 质量 (output,per-stream)
使用固定质量比例(可变比特率)。质量/质量比例的意义取决于编码器。 如果质量比例没有附带流_指定符则仅适用于视频流,这是为了维护以前的行为,并且 不指定流_指定符时,通常并非希望对音频和视频指定相同的编码器特定值。
- -filter[:流_指定符] 过滤图 (output,per-stream)
创建指定的过滤图并用于过滤流。
过滤图是应用于流的过滤图描述,必须拥有一个输入和一个输出, 其类型与流一致。在过滤图中,输入关联到标签
in,输出关联到标签out。详情请参阅ffmpeg-filters手册的过滤图语法。参见-filter_complex选项,如果需要创建具有多个输入和/或输出的过滤图。
- -reinit_filter[:流_指定符] 整数 (input,per-stream)
该布尔选项决定当输入帧参数在中途改变时, 该流所供的过滤图是否被重新初始化。此选项默认启用, 因为大多数视频和所有音频过滤器无法处理输入帧属性的偏差。 重新初始化时,现有的过滤状态会丢失,例如某些过滤器中可用的帧计数 引用。重新初始化时缓冲的帧也会丢失。
n触发重新初始化的属性变化包括: 对于视频,帧分辨率或像素格式; 对于音频,采样格式、采样率、通道数或通道布局。- -drop_changed[:流_指定符] 整数 (input,per-stream)
该布尔选项决定在中流帧参数不同的情况下, 是丢弃该帧还是重新初始化过滤图,重新初始化会导致过滤状态丢失。 在实时流媒体输入中,通常为了避免损坏但可解码的包更为有用。默认值为假。
- -filter_threads 线程数 (global)
定义处理过滤管道所使用的线程数。每个管道 将会生成一个包含这些线程数的线程池来进行并行处理。 默认值是可用的CPU数量。
- -pre[:流_指定符] 预设名称 (output,per-stream)
为匹配的流指定预设。
- -stats (global)
将编码进度/统计信息以 "info" 级别日志记录(参见
-loglevel)。 默认开启,为了明确禁用它需要指定-nostats.- -stats_period 时间 (global)
设置编码进度/统计信息更新的周期。默认值为0.5秒。
- -print_graphs (global)
将执行图细节打印到标准错误输出,并以通过-print_graphs_format设置的格式输出。
- -print_graphs_file 文件名 (global)
将执行图细节写入指定文件,并以通过-print_graphs_format设置的格式输出。
- -print_graphs_format 格式 (global)
设置输出格式(可用格式包括:default, compact, csv, flat, ini, json, xml, mermaid, mermaidhtml)。 默认格式为json。
- -progress URL (global)
将程序友好的进度信息发送到URL.
进度信息将会定期发送,并在编码过程结束时发送。格式为“键=值”行。键仅包含字母数字字符。一组进度信息中的最后一个键总是"progress",值为"continue"或"end"。
更新周期由
-stats_period.例如,将进度信息记录到标准输出:
ffmpeg -progress pipe:1 -i in.mkv out.mkv
- -stdin
启用标准输入上的交互。默认打开,除非标准输入被用作输入。 为了明确禁用交互,需要指定
-nostdin.禁用标准输入上的交互对于例如 将ffmpeg放入后台进程组来说是有用的。大致可以通过
ffmpeg ... < /dev/null实现相同效果,但需要一个 shell。- -debug_ts (global)
打印时间戳/延迟信息。默认关闭。此选项 主要用于测试和调试目的,输出格式可能会随版本更改, 因此不应由可移植的脚本使用。
另请参阅选项
-fdebug ts.- -attach 文件名 (output)
将附件添加到输出文件。一些格式(如Matroska)支持此功能, 例如用于渲染字幕的字体。附件作为一种特定类型的流实现, 因此此选项将为文件添加一个新的流。然后可以以通常的方式 使用每流选项应用于该流。通过此选项创建的附件流将会在所有其他流(即那些通过
-map或自动映射创建的)之后创建。请注意,对于Matroska,你还需要设置mimetype元数据标签:
ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv
(假设附件流在输出文件中是第三个)。
- -dump_attachment[:流_指定符] 文件名 (input,per-stream)
将匹配的附件流提取到名为文件名的文件中。. 如果文件名为空,那么将使用
filename元数据标签的值。例如:将第一个附件提取到名为‘out.ttf’的文件中:
ffmpeg -dump_attachment:t:0 out.ttf -i INPUT
将所有附件提取到通过
filename标签确定的文件中:ffmpeg -dump_attachment:t "" -i INPUT
技术说明——附件作为编解码器额外数据实现,因此实际上可以使用此选项从任何流中提取额外数据,而不仅仅是附件。
5.5 视频选项
- -vframes 数量 (output)
设置要输出的视频帧数量。这是已废弃的
-frames:v别名,建议使用。- -r[:流指定符] 帧率 (input/output,per-stream)
设置帧率(赫兹值、分数或简称)。
作为输入选项,忽略文件中存储的任何时间戳,生成假设的固定帧率时间戳帧率。 这与某些输入格式(如 image2 或 v4l2)使用的-framerate选项不同(在 FFmpeg 的旧版本中曾是相同的)。如果不确定,使用-framerate代替输入选项-r.
作为输出选项:
- video encoding
在编码之前进行帧复制或丢弃,以实现固定的输出帧率帧率.
- video streamcopy
向复用器标明帧率是流的帧率。在此情况下不会丢失或复制任何数据。如果帧率与通过分组时间戳确定的实际流帧率不一致,可能会生成无效文件。 另请参见
setts比特流过滤器。
- -fpsmax[:流指定符] 帧率 (output,per-stream)
设置最大帧率(赫兹值、分数或简称)。
在输出帧率自动设置且高于该值时限制输出帧率。 在批量处理或输入帧率误检测为非常高时较为有用。 它不能与
-r一起设置。在流复制期间会被忽略。- -s[:流指定符] 尺寸 (input/output,per-stream)
设置帧尺寸。
作为输入选项,这是一种快捷方式,将video_size私有 选项传递给某些复用器,这些复用器的帧大小要么未存储在文件中要么是可配置的——例如原始视频或视频采集器。
作为输出选项,这会插入
scale视频滤镜到end匹配的滤镜图中。建议直接使用scale滤镜 插入到开头或其他位置。格式为‘wxh’(默认值——与源相同)。
- -aspect[:流指定符] 纵横比 (output,per-stream)
设置由纵横比.
指定的视频显示纵横比。纵横比可以是浮点数字符串,也可以是形式:分子分母的字符串,其中分子和表示纵横比的比例。例如“4:3”、“16:9”、“1.3333”和“1.7777”都是有效的参数值。
如果与-vcodec copy一起使用,它会影响存储在容器级别的纵横比,但不会影响编码帧中存储的纵横比(如果存在)。
- -display_rotation[:流指定符] 旋转 (input,per-stream)
设置视频旋转元数据。
旋转是一个十进制数,指定视频应该在显示前逆时针旋转的角度。
此选项会覆盖文件中存储的旋转/显示变换元数据(如果有)。当视频被转码(而不是直接复制)并启用了
-autorotate时,视频将在过滤阶段进行旋转。否则,如复用器支持,元数据将写入输出文件。如果提供了
-display_hflip和/或-display_vflip选项,这些选项将在此选项指定的旋转之后应用。- -display_hflip[:流指定符] (input,per-stream)
设置显示时图像是否需要水平翻转。
请参阅
-display_rotation选项以了解更多详细信息。- -display_vflip[:流指定符] (input,per-stream)
设置显示时图像是否需要垂直翻转。
请参阅
-display_rotation选项以了解更多详细信息。- -vn (input/output)
作为输入选项,阻止文件的所有视频流被过滤或自动选择映射到任何输出。请参阅
-discard选项以单独禁用流。作为输出选项,禁用视频录制,即任何视频流的自动选择或映射。有关完全手动控制,请参阅
-map选项。- -vcodec 编解码器 (output)
设置视频编解码器。这是
-codec:v.- -pass[:的别名。] n (output,per-stream)
选择编码通行次数(1或2)。用于进行双通视频编码。视频的统计数据会在第一次通行中记录到日志文件中(另请参阅-passlogfile选项),并在第二次通行中使用该日志文件生成编码位完全符合请求比特率的视频。 在第一通时,您可以停用音频并将输出设置为 null,例如:
ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null
- -passlogfile[:流指定符] 前缀 (output,per-stream)
设置两通日志文件名称前缀为前缀,默认文件名前缀为“ffmpeg2pass”。完整文件名将是PREFIX-N.log,其中 N 是与输出流的特定编号。
- -vf 滤镜图 (output)
创建由滤镜图指定的滤镜图,并使用它来过滤流。
这是
-filter:v的别名,请参阅过滤器选项。.- -autorotate
根据文件元数据自动旋转视频。默认启用,使用-noautorotate来禁用。
- -autoscale
根据第一帧的分辨率自动调整视频比例。 默认启用,使用-noautoscale来禁用它。当自动缩放被禁用时,滤镜图的所有输出帧可能不会具有相同的分辨率,并且可能不适合某些编码器/复用器。因此,除非完全了解后果,否则不建议禁用它。 禁用自动缩放需自担风险。
5.6 高级视频选项
- -pix_fmt[:流_指定符] 格式 (input/output,per-stream)
设置像素格式。使用
-pix_fmts来显示所有受支持的像素格式。 如果选定的像素格式无法选择,ffmpeg将打印警告并选择编码器支持的最佳像素格式。 如果pix_fmt前缀有+,如果无法选择所请求的像素格式,ffmpeg将以错误退出,并在滤镜图中禁用自动转换。 如果pix_fmt是单个+,ffmpeg会选择与输入(或图输出)相同的像素格式,并禁用自动转换。- -sws_flags 标志 (input/output)
为libswscale库设置默认标志。这些标志由自动插入的
scale滤镜以及简单滤镜图中的滤镜使用,除非在滤镜图定义中被覆盖。参阅(ffmpeg-scaler)ffmpeg-scaler手册了解缩放选项列表。
- -rc_override[:流_指定符] 覆盖 (output,per-stream)
为特定区间设置码率控制覆盖,格式为 "int,int,int",以斜线分隔列表。前两个值是起始和结束帧号,最后一个是量化值(如果为正)或质量因子(如果为负)。
- -vstats
将视频编码统计数据转储到vstats_HHMMSS.log。参阅vstats文件格式部分了解格式说明。
- -vstats_file 文件
将视频编码统计数据转储到文件。参阅vstats文件格式部分了解格式说明。
- -vstats_version 文件
指定要使用的vstats格式的版本。默认是
2。参阅vstats文件格式部分了解格式说明。- -vtag fourcc/标签 (output)
强制视频标签/fourcc。此选项是
-tag:v.- -force_key_frames[:流_指定符] 时间[,时间...] (output,per-stream)
- -force_key_frames[:流_指定符] expr:表达式 (output,per-stream)
- -force_key_frames[:流_指定符] source (output,per-stream)
-
force_key_frames可以采取以下形式的参数:
- 时间[,时间...]
如果参数包含时间戳,ffmpeg将根据编码器时间基,将指定的时间点舍入到最近的输出时间戳,并在计算出的时间戳等于或大于的第一个帧上强制关键帧。请注意,如果编码器时间基太粗,则关键帧可能被强制在早于指定时间戳的帧上。 默认的编码器时间基是输出帧率的倒数,但可以通过
-enc_time_base.设置。
chapters[如果时间参数之一是"deltadelta秒表示的时间。 此选项可用于确保输出文件中章节标记或其他设计位置存在一个可寻点。例如,在5分钟处插入一个关键帧,加上每个章节开始时间前0.1秒处的关键帧:
-force_key_frames 0:05:00,chapters-0.1
- expr:表达式
如果参数前缀是
expr:,字符串expr将被解释为一个表达式,并针对每帧进行评估。 如果评估结果为非零值,则强制一个关键帧。在expr表达式中,可以包含以下常数:
- n
当前处理帧的编号,从0开始
- n_forced
已强制帧的数量
- prev_forced_n
上一个强制帧的编号,当尚无强制的关键帧时为
NAN。- prev_forced_t
上一个强制帧的时间,当尚无强制的关键帧时为
NAN。- t
当前处理帧的时间
例如,每5秒强制一个关键帧,可以指定:
-force_key_frames expr:gte(t,n_forced*5)
要在上一个强制帧后5秒强制一个关键帧,从第13秒开始:
-force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))
- source
如果参数是
source,当当前编码帧在其来源中被标记为关键帧时,ffmpeg将强制关键帧。 如果此特定来源帧必须被丢弃,则会强制下一个可用帧成为关键帧。
注意,强制过多的关键帧会严重影响某些编码器的前瞻算法:使用固定GOP选项或类似的方式会更有效。
- -apply_cropping[:流_指定符] 来源 (input,per-stream)
根据文件元数据在解码后自动裁剪视频。 默认值为all.
- none (0)
不应用任何裁剪元数据。
- all (1)
同时应用编解码器和容器级别的裁剪。这是默认模式。
- codec (2)
应用编解码器级别的裁剪。
- container (3)
应用容器级别的裁剪。
- -copyinkf[:流_指定符] (output,per-stream)
在进行流复制时,同时复制开始时找到的非关键帧。
- -init_hw_device 类型[=名称][:设备[,键=值...]]
初始化一个新的硬件设备,其类型为type,名称为name,使用指定的设备参数。 如果未指定名称,系统会赋予其默认名称,形式为 "type%d"。
的含义设备以下参数取决于设备类型:
- cuda
设备CUDA设备的编号。
支持以下选项:
- primary_ctx
如果设置为1,则使用主设备上下文,而非创建新的上下文。
示例:
- -init_hw_device cuda:1
选择系统上的第二个设备。
- -init_hw_device cuda:0,primary_ctx=1
选择第一个设备并使用主设备上下文。
- dxva2
设备Direct3D 9显示适配器的编号。
- d3d11va
设备Direct3D 11显示适配器的编号。未指定时,将尝试使用默认的Direct3D 11显示适配器或硬件VendorId由‘vendor_id’.
示例:
- -init_hw_device d3d11va
在默认的Direct3D 11显示适配器上创建d3d11va设备。
- -init_hw_device d3d11va:1
在索引为1的Direct3D 11显示适配器上创建d3d11va设备。
- -init_hw_device d3d11va:,vendor_id=0x8086
在硬件VendorId为0x8086的第一个Direct3D 11显示适配器上创建d3d11va设备。
- vaapi
设备可以是一个X11显示名称、DRM渲染节点或DirectX适配器索引。未指定时,将尝试打开默认的X11显示 ($DISPLAY),然后是第一个DRM渲染节点(/dev/dri/renderD128),或者是Windows上的默认DirectX适配器。
支持以下选项:
- kernel_driver
当设备未指定时,可使用此选项指定与所需设备相关联的内核驱动程序名称。此选项仅在硬件加速方法drm和vaapi启用时可用。
- vendor_id
当设备和内核驱动程序未指定时,可使用此选项指定与所需设备相关联的供应商ID。此选项仅在硬件加速方法drm和vaapi启用且kernel_driver未指定时可用。
示例:
- -init_hw_device vaapi
在默认设备上创建VAAPI设备。
- -init_hw_device vaapi:/dev/dri/renderD129
在DRM渲染节点上创建VAAPI设备/dev/dri/renderD129.
- -init_hw_device vaapi:1
在DirectX适配器1上创建VAAPI设备。
- -init_hw_device vaapi:,kernel_driver=i915
在与内核驱动程序‘i915’.
- -init_hw_device vaapi:,vendor_id=0x8086
’相关联的设备上创建VAAPI设备。0x8086’.
- vdpau
在与供应商ID‘’相关的设备上创建VAAPI设备。$DISPLAY).
- qsv
设备是一个X11显示名称。未指定时,将尝试打开默认X11显示 (MFX_IMPL_*’。允许的值包括:
- auto
- sw
- hw
- auto_any
- hw_any
- hw2
- hw3
- hw4
未指定时,将使用‘auto_any’。 (注意,通过创建与平台匹配的子设备(‘dxva2‘或‘d3d11va‘或‘vaapi’)然后派生QSV设备,可能更易实现所需结果。)
支持以下选项:
- child_device
在Linux上指定DRM渲染节点或在Windows上指定DirectX适配器。
- child_device_type
选择与平台匹配的子设备类型。在Windows上使用‘d3d11va’作为默认的子设备类型,当
--enable-libvpl在配置时已指定,‘dxva2’在配置已指定时作为默认子设备类型。在Linux上,用户只能使用‘--enable-libmfxis specified at configuration time. On Linux user can use ‘vaapi’作为子设备类型。
示例:
- -init_hw_device qsv:hw,child_device=/dev/dri/renderD129
使用‘MFX_IMPL_HARDWARE’在DRM渲染节点上创建QSV设备。/dev/dri/renderD129.
- -init_hw_device qsv:hw,child_device=1
使用‘MFX_IMPL_HARDWARE’在DirectX适配器1上创建QSV设备。
- -init_hw_device qsv:hw,child_device_type=d3d11va
选择GPU类型为‘d3d11va’的子设备,并使用‘MFX_IMPL_HARDWARE’.
- -init_hw_device qsv:hw,child_device_type=dxva2
选择GPU类型为‘dxva2’的子设备,并使用‘MFX_IMPL_HARDWARE’.
- -init_hw_device qsv:hw,child_device=1,child_device_type=d3d11va
使用‘MFX_IMPL_HARDWARE’在DirectX适配器1上创建子设备类型为‘d3d11va’.
- -init_hw_device vaapi=va:/dev/dri/renderD129 -init_hw_device qsv=hw1@va
创建一个名为‘va’的VAAPI设备,/dev/dri/renderD129然后从设备‘hw1’派生出一个名为‘va’.
- opencl
设备选择平台和设备,platform_index.device_index.
设备集还可以使用键值对进行过滤,以仅找到与特定平台或设备字符串匹配的设备。
可用作过滤器的字符串包括:
- platform_profile
- platform_version
- platform_name
- platform_vendor
- platform_extensions
- device_name
- device_vendor
- driver_version
- device_version
- device_profile
- device_extensions
- device_type
索引和过滤器必须共同唯一选择一个设备。
示例:
- -init_hw_device opencl:0.1
选择第一个平台上的第二个设备。
- -init_hw_device opencl:,device_name=Foo9000
选择名称包含字符串Foo9000.
- -init_hw_device opencl:1,device_type=gpu,device_extensions=cl_khr_fp16
支持该扩展的第二个平台上的GPU设备cl_khr_fp16扩展。
- vulkan
如果设备是一个整数,则根据系统相关的设备列表以索引选择设备。如果设备是其他字符串,则选择第一个名称包含该字符串的设备。
支持以下选项:
- debug
如果设置为1,则启用验证层(如果已安装)。
- linear_images
如果设置为1,则hwcontext分配的图像将是线性的并且可以在本地映射。
- instance_extensions
通过加号分隔的额外实例扩展列表。
- device_extensions
通过加号分隔的额外设备扩展列表。
示例:
- -init_hw_device vulkan:1
选择系统上的第二个设备。
- -init_hw_device vulkan:RADV
选择名称包含字符串的第一个设备RADV.
- -init_hw_device vulkan:0,instance_extensions=VK_KHR_wayland_surface+VK_KHR_xcb_surface
选择第一个设备,并启用Wayland和XCB实例扩展。
- -init_hw_device 类型[=名称]@来源
初始化一个新硬件设备,类型为类型名为名称, 从已有的设备中继承,设备名称为来源.
- -init_hw_device list
列出此版本的ffmpeg支持的所有硬件设备类型。
- -filter_hw_device 名称
将名为的硬件设备传递给任何滤镜图中的所有滤镜。 这可以用来设置通过滤镜上传到的设备, 或通过
hwupload滤镜映射到的设备。其他滤镜在需要硬件设备时也可能会使用此参数。 请注意,只有当输入未以硬件帧形式存在时,才通常需要此选项—当输入已经是硬件帧时,滤镜会从它们接收到的帧的上下文中推断所需的设备。hwmapfilter. Other filters may also make use of this parameter when they require a hardware device. Note that this is typically only required when the input is not already in hardware frames - when it is, filters will derive the device they require from the context of the frames they receive as input.这是一个全局设置,所有滤镜都会接收到相同的设备。
- -hwaccel[:流规格化] 硬件加速 (input,per-stream)
使用硬件加速解码匹配的流。允许的值为硬件加速包括:
- none
不使用任何硬件加速(默认)。
- auto
自动选择硬件加速方法。
- vdpau
使用VDPAU(Unix的视频解码与演示API)硬件加速。
- dxva2
使用DXVA2(DirectX视频加速)硬件加速。
- d3d11va
使用D3D11VA(DirectX视频加速)硬件加速。
- vaapi
使用VAAPI(视频加速API)硬件加速。
- qsv
使用Intel QuickSync视频加速进行视频转码。
与大多数其他值不同,此选项不会启用加速解码(当选择qsv解码器时会自动使用加速解码),而是启用加速转码,而无需将帧复制到系统内存中。
要使其工作,解码器和编码器都必须支持QSV加速,并且不得使用任何滤镜。
- videotoolbox
使用Video Toolbox硬件加速。
如果选定的硬件加速不可用或所选解码器不支持,此选项无效。
请注意,大多数加速方法旨在播放,在现代CPU上不会比软件解码更快。此外,
ffmpeg通常需要将解码后的帧从GPU内存复制到系统内存,从而进一步降低性能。因此,此选项主要为测试用途。- -hwaccel_device[:流规格化] 硬件加速设备 (input,per-stream)
选择一个用于硬件加速的设备。
该选项仅在-hwaccel选项也被指定时有意义。 它可以通过名称引用使用-init_hw_device创建的现有设备,或像调用‘-init_hw_device’ 类型:硬件加速设备之前一样立即创建一个新设备。
- -hwaccels
列出此版本的ffmpeg启用的所有硬件加速组件。 实际运行时的可用性取决于硬件和适当的驱动程序是否安装。
- -fix_sub_duration_heartbeat[:流规格化]
设置特定输出视频流作为心跳流,用于拆分并传递当前处理中字幕,收到随机访问包时会立即处理。
这可以降低字幕延迟,但可能导致字幕事件的重复,以确保覆盖整个持续时间。对于不需要关注字幕传递到输出的时间延迟的使用场景,不应使用此选项。
需要-fix_sub_duration为相关输入字幕流设置,使其生效,同时输入字幕流必须直接映射到包含心跳流的相同输出。
5.7 音频选项
- -aframes 数字 (output)
设置输出的音频帧数量。这是
-frames:a的废弃别名,应该改用此选项。- -ar[:流规格化] 频率 (input/output,per-stream)
设置音频采样频率。对于输出流,将默认为相应输入流的频率。 对于输入流,此选项仅对音频抓取设备和原始解复用器有意义,并映射到相应的解复用器选项。
- -aq 质量 (output)
设置音频质量(编解码器特定的,VBR)。这是-q:a的别名。
- -ac[:流规格化] 通道数 (input/output,per-stream)
设置音频通道数。对于输出流,默认设置为输入音频通道数。对于输入流,此选项仅对音频抓取设备和原始解复用器有意义,并映射到相应解复用器选项。
- -an (input/output)
作为输入选项,阻止文件的所有音频流被过滤或被自动选择或映射到任何输出。参见
-discard选项以单独禁用流。作为输出选项,禁用音频录制,即自动选择或映射任何音频流。对于完全手动控制,请参见
-map选项。- -acodec 编解码器 (input/output)
设置音频编解码器。这是
-codec:a.- -sample_fmt[:的别名。] 采样格式 (output,per-stream)
设置音频采样格式。使用
-sample_fmts获取支持的采样格式列表。- -af 滤镜图 (output)
创建由滤镜图指定的滤镜图,并用它过滤流。
这是
-filter:a的别名,参见-filter选项.
5.8 高级音频选项
- -atag fourcc/标签 (output)
强制音频标签/fourcc。这是
-tag:a.- -ch_layout[:的别名。] 流规格化 (input/output,per-stream)
布局
-channel_layout.- -channel_layout[:别名为] 布局 (input/output,per-stream)
设置音频通道布局。对于输出流,默认设置为输入通道布局。 对于输入流,此选项覆盖输入的通道布局。但并非所有解码器都会遵循覆盖的通道布局。此选项还为音频抓取设备和原始解复用器设置通道布局,并映射到相应解复用器选项。
- -guess_layout_max 通道数 (input,per-stream)
如果某些输入通道布局未知,仅在其通道数最多为指定值时尝试推断。例如,2表示
ffmpeg识别1通道为单声道,2通道为立体声,但不识别6通道为5.1声道。默认值为总是尝试推断。使用0以禁用所有推断。使用-channel_layout选项明确指定输入布局也会禁用推断。
5.9 字幕选项
- -scodec 编解码器 (input/output)
设置字幕编解码器。这是
-codec:s.- -sn (input/output)
的别名。
-discard作为输入选项,阻止文件的所有字幕流被过滤或自动选择或映射到任何输出。参见作为输出选项,禁用字幕录制,即自动选择或映射任何字幕流。对于完全手动控制,请参见
-mapoption.
5.10 高级字幕选项
- -fix_sub_duration
修复字幕时长。对于每个字幕,等待同一流中的下一个数据包,并调整第一个字幕的时长以避免重叠。 对于一些字幕编解码器(特别是DVB字幕),这是必要的,因为原始包中的时长只是一个粗略的估计,结束实际上是由一个空字幕帧标志的。如果在必要时未使用此选项,可能会导致时长被放大或由于非单调时间戳而出现复用失败。
请注意,此选项将延迟所有数据的输出,直到解码出下一个字幕数据包:这可能会显著增加内存消耗和延迟。
- -canvas_size 大小
设置用于渲染字幕的画布大小。
5.11 高级选项
- -map [-]输入文件 ID[:流指定符][:视图指定符][:?] | [链接标签] (output)
-
在输出文件中创建一个或多个流。此选项有两种形式用于指定数据来源:第一种从某个输入文件中选择一个或多个流(通过指定
-i),第二种从某些复杂过滤图中取出一个输出(通过指定-filter_complex).在第一种形式中,为输入文件中索引为input_file_id的每个流创建一个输出流。如果提供了stream_specifier,则仅使用匹配指定符的流(详见流指定符章节了解stream_specifier的语法)。
在流标识符前加一个
-字符会创建一个“否定”映射。它会禁用已经创建映射的匹配流。可以在流指定符之后提供一个可选的view_specifier,用于多视图视频中指定要使用的视图。视图指定符可以采用以下格式之一:
- view:视图 ID
通过其 ID 选择一个视图;视图 ID可以设置为‘all’以将所有视图交错到一个流中;
- vidx:视图索引
通过其索引选择一个视图;例如,0 是基础视图,1 是第一个非基础视图,依此类推。
- vpos:位置
通过其显示位置选择一个视图;位置可以是
left或right
默认转码时仅使用基础视图,相当于
vidx:0。对于流拷贝,不支持视图指定符且总是复制所有视图。流索引后面的尾随
?允许映射变为可选:如果映射未匹配到任何流,则会忽略该映射而不是失败。注意,如果输入文件索引无效,例如映射引用了不存在的输入时,映射仍会失败。另一种[链接标签]形式会将复杂过滤图中的输出映射到输出文件(详见-filter_complex选项)。链接标签必须对应于图中定义的一个输出链接标签。
此选项可以多次指定,每次都会向输出文件添加更多流。任何给定的输入流也可以被多次映射为不同输出流的来源,例如以使用不同的编码选项和/或过滤器。流在输出中的创建顺序与命令行上
-map选项的提供顺序一致。使用此选项将禁用此输出文件的默认映射。
示例:
- map everything
将第一个输入文件中的所有流映射到输出
ffmpeg -i INPUT -map 0 output
- select specific stream
如果第一个输入文件中有两个音频流,这些流可通过0:0和0:1标识。您可以使用
-map选择要放入输出文件的流。例如:ffmpeg -i INPUT -map 0:1 out.wav
会将INPUT中第二个输入流映射到out.wav.
- create multiple streams
选择输入文件a.mov中索引为2的流(由标识符0:2指定),以及输入文件b.mov中索引为6的流(由标识符1:6指定),并将它们复制到输出文件out.mov:
ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov
- create multiple streams 2
从输入文件中选择所有视频和第三个音频流:
ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT
- negative map
使用负映射选择所有流,除了第二个音频流。
ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT
- optional map
从第一个输入中映射视频和音频流,使用尾随
?,如果第一个输入中不存在音频流,则忽略音频映射:ffmpeg -i INPUT -map 0:v -map 0:a? OUTPUT
- map by language
选择英语音频流:
ffmpeg -i INPUT -map 0:m:language:eng OUTPUT
- -ignore_unknown
忽略无法识别类型的输入流,而不是在尝试复制这些流时失败。
- -copy_unknown
允许复制无法识别类型的输入流,而不是在尝试复制这些流时失败。
- -map_metadata[:元数据输出指定符] 输入文件[:元数据输入指定符] (output,per-metadata)
将下一输出文件的元数据信息设置为来自输入文件。需要注意的是,这些是文件索引(从零开始),而不是文件名。可选的元数据指定符输入/输出参数指定要复制的元数据。元数据指定符可以有以下形式:
- g
全局元数据,即适用于整个文件的元数据
- s[:流指定符]
每流元数据。流指定符是如在流指定符章节中描述的流指定符。在输入元数据指定符中,从第一个匹配的流复制。在输出元数据指定符中,将复制到所有匹配的流中。
- c:章节索引
每章节元数据。章节索引是从零开始的章节索引。
- p:节目索引
每节目元数据。节目索引是从零开始的节目索引。
如果未指定元数据指定符,则默认使用全局元数据。
默认情况下,全局元数据从第一个输入文件中复制,每流和每章节元数据与流/章节一起复制。这些默认映射可以通过创建任何相关类型的映射来禁用。可以使用负文件索引创建一个只禁用自动复制的虚拟映射。
例如,要将输入文件第一个流的元数据复制到输出文件的全局元数据:
ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3
反之,即将全局元数据复制到所有音频流:
ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv
请注意,在此示例中,简单的
0也有效,因为默认情况下是全局元数据。- -map_chapters 输入文件索引 (output)
从输入文件索引中复制章节输入文件索引到下一个输出文件。如果未指定章节映射,则章节将从第一个包含一个或多个章节的输入文件中复制。使用负数文件索引用于禁用任何章节复制。
- -benchmark (global)
在编码结束时显示基准信息。显示使用的实际时间、系统时间、用户时间及最大内存消耗。最大内存消耗并非所有系统都支持,如果不支持,通常显示为0。
- -benchmark_all (global)
在编码过程中显示基准信息。显示在各个步骤中的实际时间、系统时间和用户时间(音频/视频编码/解码)。
- -timelimit 持续时间 (global)
在ffmpeg运行持续时间秒的CPU用户时间后退出。
- -dump (global)
将每个输入包转储到标准错误。
- -hex (global)
在转储数据包时,也转储载荷。
- -readrate 速度 (input)
限制输入读取速度。
其值为一个正的浮点数,表示应在一秒墙上时间内摄取的媒体最大时长,单位为秒。默认值为零,表示未对摄取速度设限。
1表示实时速度,相当于-re.主要用于模拟捕获设备或直播输入流(例如从文件中读取)。当输入为实际捕获设备或实时流时,不应使用较低的值,因为可能会导致数据包丢失。
当输出数据包的流速很重要时(如直播),它非常有用。
- -re (input)
以本地帧率读取输入。等同于设置
-readrate 1.- -readrate_initial_burst 秒
设置初始读取突发时间(单位秒),在此之后-re/-readrate将会实施。
- -readrate_catchup 速度 (input)
如果输入或输出被阻塞,从而导致实际读取速度落后于指定的读速率,则使用此速率,直到输入赶上指定的读速率。不得低于主要读取速率。
- -vsync 参数 (global)
- -fps_mode[:流指定符] 参数 (output,per-stream)
设置视频同步方法/帧率模式。vsync应用于所有输出视频流,但可以通过设置fps_mode覆盖单个流。vsync已废弃,将在未来移除。
出于兼容性原因,vsync的一些值可以用数字指定(在下表中括号内显示)。
- passthrough (0)
每帧通过其解复用器时间戳传递到复用器。
- cfr (1)
将复制和丢弃帧,以严格实现所请求的恒定帧率。
- vfr (2)
帧通过其时间戳传递或者被丢弃,以防止两帧具有相同的时间戳。
- auto (-1)
根据复用器能力在cfr和vfr之间选择。这是默认方法。
请注意,时间戳可能会被复用器进一步修改。例如,如果格式选项avoid_negative_ts已启用。
使用-map可以选择应该从哪些流中获取时间戳。可以保持视频或音频不变,并同步其他流到未更改的流。
- -frame_drop_threshold 参数
帧丢弃阈值,指定视频帧可以落后多少被丢弃。单位为帧率,因此1.0等于一帧。默认值为-1.1。一个可能的使用场景是避免在时间戳不稳定时丢帧,或在时间戳准确时提高帧丢弃精度。
- -apad 参数们 (output,per-stream)
填充输出音频流。这等同于应用
-af apad。 参数是一个由过滤器参数组成的字符串,其格式与apad过滤器相同。-shortest必须为此输出设置此选项才能生效。- -copyts
不处理输入时间戳,而是保留其值,不试图清理它们。尤其是,不移除初始开始时间偏移值。
请注意,根据vsync选项或者具体的复用器处理(例如,如果格式选项avoid_negative_ts已启用),即使选择了该选项,输出时间戳也可能与输入时间戳不匹配。
- -start_at_zero
与copyts一起使用时,将输入时间戳移位,使其从零开始。
这意味着例如使用
-ss 50时,输出时间戳将从50秒开始,无论输入文件的起始时间戳是多少。- -copytb 模式
在流复制时指定编码器时间基数的设置方式。模式是一个整数数字值,可以取以下值之一:
- 1
使用解复用器时间基数。
时间基数从相应的输入解复用器复制到输出编码器。这在复制具有可变帧率的视频流时,有时必需以避免非单调增加的时间戳。
- 0
使用解码器时间基数。
时间基数从相应的输入解码器复制到输出编码器。
- -1
尝试自动选择,以生成一个合理的输出。
默认值为-1。
- -enc_time_base[:流指定符] 时间基数 (output,per-stream)
设置编码器时间基数。时间基数可以取以下值之一:
- 0
根据媒体类型分配默认值。
对于视频,使用1/帧率;对于音频,使用1/采样率。
- demux
使用解复用器的时间基数。
- filter
使用过滤图的时间基数。
- a positive number
使用提供的数字作为时间基数。
此字段可以以两个整数的比率提供(例如1:24, 1:48000),也可以以小数形式提供(例如0.04166, 2.0833e-5)。
默认值是0。
- -bitexact (input/output)
启用(去)复用器和(解)编码器的精确位模式
- -shortest (output)
当最短的输出流结束时完成编码。
请注意,此选项可能需要缓冲帧,这会增加额外的延迟。最大延迟量可以通过
-shortest_buf_duration选项来控制。- -shortest_buf_duration 持续时间 (output)
该
-shortest选项可能需要在至少一个流是“稀疏”的情况下(即帧之间有较大间隔——这通常发生在字幕流中)缓冲潜在的大量数据。此选项控制缓冲帧的最大持续时间(单位为秒)。较大的值可能允许
-shortest选项产生更准确的结果,但会增加内存使用和延迟。默认值为10秒。
- -dts_delta_threshold 阈值
时间戳不连续性的差值阈值,以秒的十进制数字表示。
该选项启用的时间戳不连续性校正仅适用于接受时间戳不连续性的输入格式(即
AVFMT_TS_DISCONT标志已启用),例如MPEG-TS和HLS。-copyts(除非检测到包装情况)时自动禁用。如果检测到时间戳不连续,其绝对值大于阈值,ffmpeg将通过相应的增量值减少/增加当前DTS和PTS来移除这种不连续性。
默认值为10。
- -dts_error_threshold 阈值
时间戳错误差值阈值,以秒的十进制数字表示。
此选项启用的时间戳校正仅适用于不接受时间戳不连续性的输入格式(即
AVFMT_TS_DISCONT标志未启用)。如果检测到时间戳不连续,其绝对值大于阈值,ffmpeg将丢弃PTS/DTS时间戳值。
默认值是
3600*30(30小时),这是任意选择的,并且相当保守。- -muxdelay 秒 (output)
设置最大解复用-解码延迟。
- -muxpreload 秒 (output)
设置初始解复用-解码延迟。
- -streamid 输出流索引:新值 (output)
为输出流分配新的流ID值。此选项应在其应用的输出文件名之前指定。在存在多个输出文件的情况中,流ID可以重新分配为不同的值。
例如,设置流0的PID为33,流1的PID为36,用于输出的mpegts文件:
ffmpeg -i inurl -streamid 0:33 -streamid 1:36 out.ts
- -bsf[:流指定符] 比特流过滤器 (input/output,per-stream)
将比特流过滤器应用于匹配的流。当用作输入选项时,过滤器将在从解复用器接收每个数据包时应用;当用作输出选项时,过滤器将在发送到复用器之前应用。
比特流过滤器是一个以逗号分隔的比特流过滤器规格列表,每个规格的形式为
过滤器[=选项名称0=选项值0:选项名称1=选项值1:...]
需要包含在选项值中的字符 ’,=:’ 需要用反斜杠进行转义。
使用
-bsfs选项获取比特流过滤器列表。例如
ffmpeg -bsf:v h264_mp4toannexb -i h264.mp4 -c:v copy -an out.h264
应用
h264_mp4toannexb比特流过滤器(将MP4封装的H.264流转换为Annex B)到input视频流。另一方面,
ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt
应用
mov2textsub比特流过滤器(从MOV字幕中提取文本)到output字幕流。然而请注意,由于两个示例都使用-c copy,因此过滤器是应用于输入还是输出并不重要——如果正在进行转码的话,那会有所不同。- -tag[:流指定符] 编解码标签 (input/output,per-stream)
为匹配的流强制指定一个标签/fourcc。
- -timecode 小时:分钟:秒SEP帧
指定写入的时间码。分隔符对于非丢帧时间码为':',对于丢帧时间码为';'或'.'。
ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg
- -filter_complex 滤镜图 (global)
定义一个复杂的滤镜图,即具有任意数量的输入和/或输出。对于简单图表——那些具有一个输入和一个输出且类型相同的——请参阅-filter选项。滤镜图是滤镜图的描述,如ffmpeg-filters手册的“滤镜图语法”部分中所述。此选项可以指定多次——每次使用都会创建一个新的复杂滤镜图。
复杂滤镜图的输入可以来自不同的源类型,通过相应链接标签的格式加以区分:
- 要连接一个输入流,请使用
[file_index:stream_specifier](即与-map相同的语法)。如果流指定符匹配多个流,将使用第一个流。对于多视图视频,流指定符可能后跟视图指定符,请参阅-map选项的文档以获取其语法。 - 要连接回环解码器,请使用 [dec:解码器索引],其中解码器索引是要连接到给定输入的回环解码器的索引。对于多视图视频,解码器索引可能后跟视图指定符,请参阅-map选项的文档以获取其语法。
- 要将其他复杂滤镜图的输出连接到此处,请使用其链接标签。例如,以下示例:
ffmpeg -i input.mkv \ -filter_complex '[0:v]scale=size=hd1080,split=outputs=2[for_enc][orig_scaled]' \ -c:v libx264 -map '[for_enc]' output.mkv \ -dec 0:0 \ -filter_complex '[dec:0][orig_scaled]hstack[stacked]' \ -map '[stacked]' -c:v ffv1 comparison.mkv
读取一个输入视频并
- (第2行) 使用一个含有一个输入和两个输出的复杂滤镜图,将视频缩放为1920x1080,并将结果复制到两个输出;
- (第3行) 用
libx264编码缩放后的一个输出并将结果写入output.mkv; - (第4行) 使用一个回环解码器解码此编码流;
- (第5行) 将回环解码器的输出(即
libx264-编码的视频)与原始输入的缩放结果并排放置; - (第6行) 最终组合的视频以无损方式编码并写入comparison.mkv.
注意:两个滤镜图无法合并为一个,因为那样会导致转码流水线中的循环(滤镜图输出转到编码,编码转到解码,随后又回到相同滤镜图),而这些循环是不被允许的。
一个未标记的输入将被连接到匹配类型的第一个未使用的输入流。
输出链接标签通过-map引用。未标记的输出将添加到第一个输出文件。
请注意,使用此选项可以仅使用lavfi源而不需要普通输入文件。
例如,将一个图像覆盖在视频上
ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map '[out]' out.mkv
在此
[0:v]指代第一个输入文件中的第一个视频流,该文件链接到overlay滤镜的第一个(主)输入。同样地,第二个输入中的第一个视频流链接到overlay滤镜的第二个(覆盖)输入。假设每个输入文件中只有一个视频流,我们可以省略输入标签,因此上述内容等效于
ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map '[out]' out.mkv
此外,我们可以省略输出标签,并且滤镜图的唯一输出将自动添加到输出文件,因此我们可以简单地写成
ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv
作为一个特别例外,可以将位图字幕流用作输入:它将转换为一个视频,其大小与文件中最大的视频相同,如果没有视频则为720x576。请注意,这是一个实验性和临时的解决方案。一旦libavfilter对字幕有了适当的支持,这种方法将被移除。
例如,为硬编码字幕叠加在存储于MPEG-TS格式中的DVB-T录制视频上,同时将字幕延迟1秒:
ffmpeg -i input.ts -filter_complex \ '[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \ -sn -map '#0x2dc' output.mkv
(0x2d0、0x2dc和0x2ef分别是MPEG-TS的视
音频和字幕流的PID;0:0, 0:3和0:7同样也可以工作)
color生成5秒纯红色视频使用lavfiffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
- 要连接一个输入流,请使用
- -filter_complex_threads 来源: (global)
定义处理filter_complex图使用的线程数。类似于filter_threads,但仅用于
-filter_complex图。默认使用可用的CPU数量。- -lavfi 滤镜图 (global)
定义一个复杂滤镜图(即具有任意数量的输入和/或输出)。等同于-filter_complex.
- -accurate_seek (input)
此选项启用或禁用在具有-ss选项的输入文件中使用精确搜索。默认启用,因此在转码时搜索是精确的。使用-noaccurate_seek禁用它,这可能在复制一些流并转码其他流时很有用。
- -seek_timestamp (input)
此选项启用或禁用在具有-ss选项的输入文件中使用时间戳搜索。默认情况下禁用。如果启用,则-ss选项的参数被认为是实际时间戳,并且不受文件开始时间的偏移。这仅对不从时间戳0开始的文件有影响,例如传输流。
- -thread_queue_size 大小 (input/output)
对于输入,此选项设置从文件或设备读取时最多可以排队的数据包数量。在低延迟/高速率的实时流中,如果不能及时读取数据包,可能会丢弃数据包;设置此值可以强制ffmpeg使用单独的输入线程并在数据包到达时立即读取。默认情况下,仅在指定多个输入时ffmpeg才会这么做。
对于输出,此选项指定每个复用线程可以排队的最大数据包数量。
- -sdp_file 文件 (global)
打印SDP信息到文件. 这允许在至少有一个输出不是 RTP 流时转储 SDP 信息。(要求至少有一个输出格式为 RTP)。
- -discard (input)
允许丢弃特定流或流的帧。 可以完全丢弃任何输入流,使用值
all而从流中选择性地丢弃帧发生在解复用器,且并非所有解复用器都支持。- none
不丢弃任何帧。
- default
默认设置,不丢弃任何帧。
- noref
丢弃所有非参考帧。
- bidir
丢弃所有双向帧。
- nokey
只保留关键帧,丢弃所有其他帧。
- all
丢弃所有帧。
- -abort_on 标志 (global)
在多种条件下停止并中止。以下标志可用:
- empty_output
没有将任何数据包传递给复用器,输出为空。
- empty_output_stream
一些输出流中没有将任何数据包传递给复用器。
- -max_error_rate (global)
设置解码帧失败占所有输入的比例阈值,一旦跨越此比例,ffmpeg 将返回退出代码 69。达到此阈值不会终止处理。范围是 0 到 1 之间的浮点数。默认值为 2/3。
- -xerror (global)
在错误时停止并退出
- -max_muxing_queue_size 数据包 (output,per-stream)
在转码音频和/或视频流时,ffmpeg 不会开始写入输出,直到它为每个这样的流准备好一个数据包。在等待过程中,其他流的数据包会被缓冲。此选项设置匹配输出流的缓冲区大小,以数据包为单位。
此选项的默认值应足够高以满足大多数用途,因此仅在您确信需要时再调整此选项。
- -muxing_queue_data_threshold 字节 (output,per-stream)
这是一个最低阈值,在此之前不会影响复用队列大小的计算。默认值为每个流 50 兆字节,并基于传递给复用器的数据包的总大小。
- -auto_conversion_filters (global)
启用在所有过滤器图中自动插入格式转换过滤器,包括由-vf, -af, -filter_complex和-lavfi定义的过滤器图。如果过滤器格式协商需要转换但未插入,则过滤器初始化将失败。仍然可以通过在图中插入相关的转换过滤器(如 scale、aresample)来进行转换。 默认开启,要明确禁用此功能需指定
-noauto_conversion_filters.- -bits_per_raw_sample[:流指定符] 值 (output,per-stream)
声明给定输出流中每个原始样本的比特数为值。请注意,此选项设置向编码器/复用器提供的信息,并不会更改流以符合此值。设置与流属性不匹配的值可能导致编码失败或输出文件无效。
- -stats_enc_pre[:流指定符] 路径 (output,per-stream)
- -stats_enc_post[:流指定符] 路径 (output,per-stream)
- -stats_mux_pre[:流指定符] 路径 (output,per-stream)
将匹配流的逐帧编码信息写入由路径.
-stats_enc_pre指定的文件中, 记录在发送编码之前的原始视频或音频帧信息,而-stats_enc_post则在接收编码器返回的已编码数据包时记录信息。-stats_mux_pre在数据包即将发送到复用器时记录信息。每帧或数据包在指定的文件中生成一行信息。这一行的信息格式由-stats_enc_pre_fmt / -stats_enc_post_fmt / -stats_mux_pre_fmt.
控制。 当多个流的统计信息写入单个文件时,不同流的行将交错分布。此交错的准确顺序未指定,并且在程序的不同调用之间,即使使用相同的选项,也不能保证保持稳定。
- -stats_enc_pre_fmt[:流指定符] 格式指定 (output,per-stream)
- -stats_enc_post_fmt[:流指定符] 格式指定 (output,per-stream)
- -stats_mux_pre_fmt[:流指定符] 格式指定 (output,per-stream)
指定用-stats_enc_pre / -stats_enc_post / -stats_mux_pre.
格式指定定义的行的格式。{fmt}. 格式指定是反斜杠转义的 —— 若需要写入文本中的字面值 {, } 或 \,分别使用 \{, \} 和 \\。
通过格式指令,可以是以下之一:
- fidx
输出文件的索引。
- sidx
文件中输出流的索引。
- n
帧号。编码前:到目前为止发送到编码器的帧数。 编码后:到目前为止从编码器接收的数据包数。 在复用操作中:此流到目前为止提交给复用器的数据包数。
- ni
输入帧号。与此输出帧或数据包对应的输入帧(即解码器输出的帧)的索引。如果不可用,则为 -1。
- tb
该帧/数据包的时间戳所使用的时间基,表示为有理数num/den。请注意,编码器和复用器可能使用不同的时间基。
- tbi
的时间基ptsi,表示为有理数num/den。当ptsi可用时可用,0/1否则不可用。
- pts
帧或数据包的显示时间戳,表示为整数。应乘以时间基来计算显示时间。
- ptsi
输入帧的显示时间戳(见ni),表示为整数。应乘以tbi来计算显示时间。如果不可用,显示为(2^63 - 1 = 9223372036854775807)。
- t
帧或数据包的显示时间,表示为十进制数。等于pts乘以tb。.
- ti
输入帧的显示时间(见ni),表示为十进制数。等于ptsi乘以tbi。如果不可用,显示为 inf。
- dts (packet)
数据包的解码时间戳,表示为整数。应乘以时间基来计算显示时间。
- dt (packet)
帧或数据包的解码时间,表示为十进制数。等于dts乘以tb。.
- sn (frame,audio)
到目前为止发送到编码器的音频样本数。
- samp (frame,audio)
帧中的音频样本数。
- size (packet)
编码数据包的大小,以字节为单位。
- br (packet)
当前比特率,以位每秒为单位。
- abr (packet)
到目前为止整个流的平均比特率,以位每秒为单位。如果此时无法确定,则为 -1。
- key (packet)
如果数据包包含关键帧则为字符 'K',否则为字符 'N'。
标注为packet的指令只能用于-stats_enc_post_fmt和-stats_mux_pre_fmt.
带有标签的指令frame只能用于-stats_enc_pre_fmt.
带有标签的指令audio只能用于音频流。
默认格式字符串为:
- pre-encoding
{fidx} {sidx} {n} {t}
- post-encoding
{fidx} {sidx} {n} {t}
将来,默认格式字符串末尾可能会添加新项目。依赖格式保持完全相同的用户应手动指定格式。
注意,写入同一个文件的不同流的统计信息可能有不同的格式。
5.12 预设文件
预设文件包含一系列选项=值对,每行一个,用于指定命令行很难指定的一系列选项。以井号(‘#’)开头的行会被忽略,这些行用于提供注释。检查presetsFFmpeg 源码树中的目录以获取示例。
预设文件有两种类型:ffpreset 和 avpreset 文件。
5.12.1 ffpreset 文件
使用以下命令指定 ffpreset 文件vpre, apre,
spre和fpre选项。fpre选项使用预设文件名而不是预设名称作为输入,可以用于任何类型的编解码器。针对vpre, apre和spre选项,预设文件中指定的选项将应用于与预设选项类型相同的当前选定的编解码器。
传递给vpre, apre和spre预设选项的参数根据以下规则标识要使用的预设文件:
首先,ffmpeg 会在以下目录中搜索名为arg.ffpreset 的文件:$FFMPEG_DATADIR(如设置),然后是$HOME/.ffmpeg以及配置时定义的数据目录(通常为PREFIX/share/ffmpeg),或者在 Win32 的可执行文件所在目录中的ffpresets文件夹中,按此顺序。例如,如果参数为libvpx-1080p,它将会搜索libvpx-1080p.ffpreset.
如果没有找到这样的文件,那么 ffmpeg 会在上述目录中搜索名为codec_name-arg.ffpreset 的文件,其中codec_name是预设文件选项将应用的编解码器名称。例如,如果通过-vcodec libvpx选择视频编解码器,并使用-vpre 1080p,则它将会搜索libvpx-1080p.ffpreset.
5.12.2 avpreset 文件
使用以下命令指定 avpreset 文件pre选项。它们的工作方式与 ffpreset 文件类似,但仅允许编码器特定的选项。因此,选项=值对不能指定编码器。
当指定pre选项时,ffmpeg 将在以下目录中查找后缀为 .avpreset 的文件:$AVCONV_DATADIR(如设置),然后是$HOME/.avconv以及配置时定义的数据目录(通常为PREFIX/share/ffmpeg),按此顺序。
首先,ffmpeg 会在上述目录中搜索名为codec_name-arg.avpreset 的文件,其中codec_name是预设文件选项将应用的编解码器名称。例如,如果通过-vcodec libvpx选择视频编解码器,并使用-pre 1080p,则它将会搜索libvpx-1080p.avpreset.
如果没有找到这样的文件,那么 ffmpeg 会在同一目录中搜索名为arg.avpreset 的文件。
5.13 vstats 文件格式
以下选项-vstats和-vstats_file启用生成包含已生成视频输出统计信息的文件。
以下选项-vstats_version控制生成文件的格式版本。
对于版本1,格式为:
frame= FRAME q= FRAME_QUALITY PSNR= PSNR f_size= FRAME_SIZE s_size= STREAM_SIZEkB time= TIMESTAMP br= BITRATEkbits/s avg_br= AVERAGE_BITRATEkbits/s
对于版本2,格式为:
out= OUT_FILE_INDEX st= OUT_FILE_STREAM_INDEX frame= FRAME_NUMBER q= FRAME_QUALITYf PSNR= PSNR f_size= FRAME_SIZE s_size= STREAM_SIZEkB time= TIMESTAMP br= BITRATEkbits/s avg_br= AVERAGE_BITRATEkbits/s
每个键对应的值描述如下:
- avg_br
以 Kbits/s 表示的平均比特率
- br
以 Kbits/s 表示的比特率
- frame
编码帧数
- out
输出文件索引
- PSNR
峰值信噪比
- q
帧质量
- f_size
编码的数据包大小(以字节数表示)
- s_size
流的大小(以KiB为单位表示)
- st
输出文件的流索引
- time
数据包的时间
- type
图片类型
另见-stats_enc选项用于以替代方式显示编码统计信息。
6 示例
6.1 视频和音频捕获
如果您指定输入格式和设备,那么ffmpeg可以直接捕获视频和音频。
ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
或者使用ALSA音频源(单声道输入,卡ID为1)代替OSS:
ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg
注意,在启动ffmpeg之前,您必须使用任何电视观看器(例如xawtv由Gerd Knorr制作)来激活正确的视频源和频道。您还必须使用标准的混音器正确设置音频录制级别。
6.2 X11捕获
通过ffmpeg捕获X11显示屏
ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg
0.0是您的X11服务器的显示屏幕编号,与DISPLAY环境变量相同。
ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg
0.0是您的X11服务器的显示屏幕编号,与DISPLAY环境变量相同。数字10是捕获的x偏移量,数字20是y偏移量。
6.3 视频和音频文件格式转换
任何支持的文件格式和协议都可以用作ffmpeg的输入:
示例:
- 您可以使用YUV文件作为输入:
ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
它会使用下列文件:
/tmp/test0.Y, /tmp/test0.U, /tmp/test0.V, /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
Y文件的分辨率是U和V文件的两倍。它们是没有头部的原始文件,可通过所有较好的视频解码器生成。如果ffmpeg无法猜测图像的大小,则必须使用-s选项指定大小。
- 您可以从原始YUV420P文件输入:
ffmpeg -i /tmp/test.yuv /tmp/out.avi
test.yuv是一个包含原始YUV平面数据的文件。每个帧由Y平面、U平面和V平面按半垂直和水平方向分辨率逐个排列组成。
- 您可以输出到一个原始YUV420P文件:
ffmpeg -i mydivx.avi hugefile.yuv
- 您可以设置多个输入文件和输出文件:
ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
将音频文件a.wav和原始YUV视频文件a.yuv转换为MPEG文件a.mpg。
- 您还可以同时进行音频和视频转换:
ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
将a.wav转换为22050 Hz采样率的MPEG音频。
- 您可以同时编码为几种格式,并定义从输入流到输出流的映射:
ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2
将a.wav转换为64 kbps的a.mp2和128 kbps的b.mp2。‘-map file:index’指定输入流用于每个输出流,按定义输出流的顺序排列。
- 您可以转码解密的VOB文件:
ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi
这是一个典型的DVD抓取示例;输入是一个VOB文件,输出是一个带有MPEG-4视频和MP3音频的AVI文件。注意,在此命令中我们使用了B帧,因此MPEG-4流兼容DivX5,并且GOP大小为300,这意味着对于29.97fps输入视频每10秒有一个帧内帧。此外,音频流是通过MP3编码的,因此您需要通过传递
--enable-libmp3lame到配置中启用LAME支持。映射在DVD转码特别有用,可以获取所需的音频语言。注意:要查看支持的输入格式,请使用
ffmpeg -demuxers. - 您可以从视频中提取图像,或从大量图像创建视频:
从视频中提取图像:
ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
这将每秒从视频中提取一个视频帧,并将其输出到以文件命名的foo-001.jpeg, foo-002.jpeg等。图像将被重新缩放以适应新的WxH值。
如果您只想提取有限数量的帧,可以将上述命令与
-frames:v或-t选项结合使用,或与-ss结合使用以从特定时间开始提取。从大量图像创建视频:
ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi
语法
foo-%03d.jpeg指定使用一个由零填充的三位十进制数字来表示序列号。它是C printf函数支持的语法,但仅接受普通整数的格式适合。导入图像序列时,-i也支持通过选择image2特定
-pattern_type glob选项内部扩展类似shell的通配符模式(globbing)。例如,从符合通配符模式的文件名创建视频
foo-*.jpeg:ffmpeg -f image2 -pattern_type glob -framerate 12 -i 'foo-*.jpeg' -s WxH foo.avi
- 您可以在输出中放入许多相同类型的流:
ffmpeg -i test1.avi -i test2.avi -map 1:1 -map 1:0 -map 0:1 -map 0:0 -c copy -y test12.nut
生成的输出文件test12.nut将包含从输入文件中的前四个流按相反顺序排列。
- 强制CBR视频输出:
ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
- 四个选项lmin、lmax、mblmin和mblmax使用‘lambda’单位,但您可以使用QP2LAMBDA常量轻松从‘q’单位转换:
ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
7 语法
本节记录了FFmpeg库和工具使用的语法和格式。
7.1 引号和转义
FFmpeg采用以下引用和转义机制,除非明确指定。将应用以下规则:
- ‘'‘和‘\‘是特殊字符(分别用于引用和转义)。除了它们之外,根据应用转义和引用的具体语法可能还有其他特殊字符。
- 通过在特殊字符前加上一个‘\’.
- 所有位于‘''之间的字符都会被字符串解析器按字面量包括在内。引用字符‘'’本身无法被引用,因此您可能需要关闭引用并转义它。
- 除非被转义或引用,首尾空白字符将从解析字符串中移除。
注意,使用命令行或脚本时,您可能需要添加二级转义,这取决于所采用的shell语言语法。
函数av_get_token定义于libavutil/avstring.h可以用于解析上面定义规则引用或转义的令牌。
工具tools/ffescape在FFmpeg源代码树中可以用于在脚本中自动引用或转义字符串。
7.1.1 示例
- 转义字符串
Crime d'Amour包含'特殊字符:Crime d\'Amour
- 上述字符串包含一个引用,因此
'需要在引用时转义:'Crime d'\''Amour'
- 使用引用包含前导或尾随空白:
' this string starts and ends with whitespaces '
- 转义和引用可以混合使用:
' The string '\'string\'' is a string '
- 要包含字面量‘\’可以使用转义或引用:
'c:\foo' can be written as c:\\foo
7.2 日期
接受的语法是:
[(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z] now
如果值为"now",则取当前时间。
时间是本地时间,除非附加了Z,在这种情况下将解释为UTC。如果未指定年月日部分,则取当前年月日。
7.3 时间持续
表达时间持续有两种接受的语法。
[-][HH:]MM:SS[.m...]
HH表示小时数,MM表示分钟数(最多两位数字),SS表示秒数(最多两位数字)。m末尾表示小数的值是秒.
or
[-]秒+[.m...][s|ms|us]
秒表示秒数,可带有可选的小数部分m。 可选的文字后缀‘s’, ‘ms’或‘us’ 表示将数值分别解释为秒、毫秒或微秒。
在两种表达中,可选的‘-’表示负时长。
7.3.1 示例
以下都是合法的时间时长示例:
- ‘55’
55秒
- ‘0.2’
0.2秒
- ‘200ms’
200毫秒,即0.2秒
- ‘200000us’
200000微秒,即0.2秒
- ‘12:03:45’
12小时03分45秒
- ‘23.189’
23.189秒
7.4 视频尺寸
指定视频的源尺寸,可以为以下形式的字符串宽度x高度,或尺寸缩写名称。
以下缩写是被支持的:
- ‘ntsc’
720x480
- ‘pal’
720x576
- ‘qntsc’
352x240
- ‘qpal’
352x288
- ‘sntsc’
640x480
- ‘spal’
768x576
- ‘film’
352x240
- ‘ntsc-film’
352x240
- ‘sqcif’
128x96
- ‘qcif’
176x144
- ‘cif’
352x288
- ‘4cif’
704x576
- ‘16cif’
1408x1152
- ‘qqvga’
160x120
- ‘qvga’
320x240
- ‘vga’
640x480
- ‘svga’
800x600
- ‘xga’
1024x768
- ‘uxga’
1600x1200
- ‘qxga’
2048x1536
- ‘sxga’
1280x1024
- ‘qsxga’
2560x2048
- ‘hsxga’
5120x4096
- ‘wvga’
852x480
- ‘wxga’
1366x768
- ‘wsxga’
1600x1024
- ‘wuxga’
1920x1200
- ‘woxga’
2560x1600
- ‘wqsxga’
3200x2048
- ‘wquxga’
3840x2400
- ‘whsxga’
6400x4096
- ‘whuxga’
7680x4800
- ‘cga’
320x200
- ‘ega’
640x350
- ‘hd480’
852x480
- ‘hd720’
1280x720
- ‘hd1080’
1920x1080
- ‘2k’
2048x1080
- ‘2kflat’
1998x1080
- ‘2kscope’
2048x858
- ‘4k’
4096x2160
- ‘4kflat’
3996x2160
- ‘4kscope’
4096x1716
- ‘nhd’
640x360
- ‘hqvga’
240x160
- ‘wqvga’
400x240
- ‘fwqvga’
432x240
- ‘hvga’
480x320
- ‘qhd’
960x540
- ‘2kdci’
2048x1080
- ‘4kdci’
4096x2160
- ‘uhd2160’
3840x2160
- ‘uhd4320’
7680x4320
7.5 视频帧率
指定视频的帧率,以每秒生成的帧数表示。它可以是以下格式的字符串帧率分子/帧率分母,一个整数、一个浮点数或一个有效的视频帧率缩写。
支持以下缩写形式:
- ‘ntsc’
30000/1001
- ‘pal’
25/1
- ‘qntsc’
30000/1001
- ‘qpal’
25/1
- ‘sntsc’
30000/1001
- ‘spal’
25/1
- ‘film’
24/1
- ‘ntsc-film’
24000/1001
7.6 比例
比例可以以表达式表示,也可以是以下形式分子:分母.
注意,一个无穷大(1/0)或负值的比例被认为是合法的,因此如果需要排除这些值,你应该检查返回值。
未定义的值可以通过字符串"0:0"表示。
7.7 颜色
可以是以下定义的颜色名称(不区分大小写)或[0x|#]RRGGBB[AA]序列,可能后跟@以及表示alpha分量的字符串。
Alpha分量可以是一个由"0x"开头的十六进制数字,或者是0.0到1.0之间的十进制数字,表示不透明度值(‘0x00’或‘0.0’表示完全透明,‘0xff’或‘1.0完全不透明)。如果未指定 alpha 组件,则为0xff假定。
字符串random将生成一个随机颜色。
以下颜色名称被识别:
- ‘AliceBlue’
0xF0F8FF(幽灵白)
- ‘AntiqueWhite’
0xFAEBD7(古董白)
- ‘Aqua’
0x00FFFF(水晶蓝)
- ‘Aquamarine’
0x7FFFD4(碧绿玉)
- ‘Azure’
0xF0FFFF(水白)
- ‘Beige’
0xF5F5DC(米色)
- ‘Bisque’
0xFFE4C4(杏仁白)
- ‘Black’
0x000000(黑色)
- ‘BlanchedAlmond’
0xFFEBCD(乳白色)
- ‘Blue’
0x0000FF(蓝色)
- ‘BlueViolet’
0x8A2BE2(蓝紫色)
- ‘Brown’
0xA52A2A(棕色)
- ‘BurlyWood’
0xDEB887(原木色)
- ‘CadetBlue’
0x5F9EA0(军蓝色)
- ‘Chartreuse’
0x7FFF00(黄绿)
- ‘Chocolate’
0xD2691E(巧克力色)
- ‘Coral’
0xFF7F50(珊瑚色)
- ‘CornflowerBlue’
0x6495ED(矢车菊蓝)
- ‘Cornsilk’
0xFFF8DC(奶油色)
- ‘Crimson’
0xDC143C(深红色)
- ‘Cyan’
0x00FFFF(水晶蓝)
- ‘DarkBlue’
0x00008B(深蓝)
- ‘DarkCyan’
0x008B8B(深青色)
- ‘DarkGoldenRod’
0xB8860B(深金色)
- ‘DarkGray’
0xA9A9A9(深灰色)
- ‘DarkGreen’
0x006400(深绿色)
- ‘DarkKhaki’
0xBDB76B(暗黄褐色)
- ‘DarkMagenta’
0x8B008B(暗紫色)
- ‘DarkOliveGreen’
0x556B2F(橄榄绿)
- ‘Darkorange’
0xFF8C00(暗橙色)
- ‘DarkOrchid’
0x9932CC(暗洋红)
- ‘DarkRed’
0x8B0000(暗红色)
- ‘DarkSalmon’
0xE9967A(淡珊瑚色)
- ‘DarkSeaGreen’
0x8FBC8F(暗海绿色)
- ‘DarkSlateBlue’
0x483D8B(深石板蓝)
- ‘DarkSlateGray’
0x2F4F4F(浅石板灰)
- ‘DarkTurquoise’
0x00CED1(深青绿)
- ‘DarkViolet’
0x9400D3(深紫罗兰)
- ‘DeepPink’
0xFF1493(深粉色)
- ‘DeepSkyBlue’
0x00BFFF(深天蓝)
- ‘DimGray’
0x696969(暗灰色)
- ‘DodgerBlue’
0x1E90FF(道奇蓝)
- ‘FireBrick’
0xB22222(火砖色)
- ‘FloralWhite’
0xFFFAF0(花白)
- ‘ForestGreen’
0x228B22(森林绿)
- ‘Fuchsia’
0xFF00FF(洋红色)
- ‘Gainsboro’
0xDCDCDC(亮灰色)
- ‘GhostWhite’
0xF8F8FF(幽灵白)
- ‘Gold’
0xFFD700(金色)
- ‘GoldenRod’
0xDAA520(金麒麟色)
- ‘Gray’
0x808080(灰色)
- ‘Green’
0x008000(绿色)
- ‘GreenYellow’
0xADFF2F(黄绿色)
- ‘HoneyDew’
0xF0FFF0(蜜白)
- ‘HotPink’
0xFF69B4(热粉色)
- ‘IndianRed’
0xCD5C5C(印度红)
- ‘Indigo’
0x4B0082(靛蓝色)
- ‘Ivory’
0xFFFFF0(象牙色)
- ‘Khaki’
0xF0E68C(卡其色)
- ‘Lavender’
0xE6E6FA(淡紫色)
- ‘LavenderBlush’
0xFFF0F5(淡紫红)
- ‘LawnGreen’
0x7CFC00(草绿色)
- ‘LemonChiffon’
0xFFFACD(柠檬绸)
- ‘LightBlue’
0xADD8E6(浅蓝色)
- ‘LightCoral’
0xF08080(浅珊瑚色)
- ‘LightCyan’
0xE0FFFF(浅青色)
- ‘LightGoldenRodYellow’
0xFAFAD2(淡金黄色)
- ‘LightGreen’
0x90EE90(淡绿色)
- ‘LightGrey’
0xD3D3D3(浅灰色)
- ‘LightPink’
0xFFB6C1(浅粉色)
- ‘LightSalmon’
0xFFA07A(浅珊瑚色)
- ‘LightSeaGreen’
0x20B2AA(浅海绿)
- ‘LightSkyBlue’
0x87CEFA(浅天蓝)
- ‘LightSlateGray’
0x778899(浅石板灰蓝)
- ‘LightSteelBlue’
0xB0C4DE(浅钢蓝色)
- ‘LightYellow’
0xFFFFE0(浅黄色)
- ‘Lime’
0x00FF00(亮绿色)
- ‘LimeGreen’
0x32CD32(亮黄绿色)
- ‘Linen’
0xFAF0E6(亮木灰色)
- ‘Magenta’
0xFF00FF(洋红色)
- ‘Maroon’
0x800000(栗色)
- ‘MediumAquaMarine’
0x66CDAA(中海绿)
- ‘MediumBlue’
0x0000CD(中蓝色)
- ‘MediumOrchid’
0xBA55D3(中紫罗兰红)
- ‘MediumPurple’
0x9370D8(中紫罗兰)
- ‘MediumSeaGreen’
0x3CB371(中海草绿)
- ‘MediumSlateBlue’
0x7B68EE(中紫蓝色)
- ‘MediumSpringGreen’
0x00FA9A(中春绿色)
- ‘MediumTurquoise’
0x48D1CC(中青蓝色)
- ‘MediumVioletRed’
0xC71585(粉红色)
- ‘MidnightBlue’
0x191970(午夜蓝色)
- ‘MintCream’
0xF5FFFA(薄荷白)
- ‘MistyRose’
0xFFE4E1(雾玫瑰色)
- ‘Moccasin’
0xFFE4B5(状态灰色)
- ‘NavajoWhite’
0xFFDEAD(莫西干黄)
- ‘Navy’
0x000080
- ‘OldLace’
0xFDF5E6
- ‘Olive’
0x808000
- ‘OliveDrab’
0x6B8E23
- ‘Orange’
0xFFA500
- ‘OrangeRed’
0xFF4500
- ‘Orchid’
0xDA70D6
- ‘PaleGoldenRod’
0xEEE8AA
- ‘PaleGreen’
0x98FB98
- ‘PaleTurquoise’
0xAFEEEE
- ‘PaleVioletRed’
0xD87093
- ‘PapayaWhip’
0xFFEFD5
- ‘PeachPuff’
0xFFDAB9
- ‘Peru’
0xCD853F
- ‘Pink’
0xFFC0CB
- ‘Plum’
0xDDA0DD
- ‘PowderBlue’
0xB0E0E6
- ‘Purple’
0x800080
- ‘Red’
0xFF0000
- ‘RosyBrown’
0xBC8F8F
- ‘RoyalBlue’
0x4169E1
- ‘SaddleBrown’
0x8B4513
- ‘Salmon’
0xFA8072
- ‘SandyBrown’
0xF4A460
- ‘SeaGreen’
0x2E8B57
- ‘SeaShell’
0xFFF5EE
- ‘Sienna’
0xA0522D
- ‘Silver’
0xC0C0C0
- ‘SkyBlue’
0x87CEEB
- ‘SlateBlue’
0x6A5ACD
- ‘SlateGray’
0x708090
- ‘Snow’
0xFFFAFA
- ‘SpringGreen’
0x00FF7F
- ‘SteelBlue’
0x4682B4
- ‘Tan’
0xD2B48C
- ‘Teal’
0x008080
- ‘Thistle’
0xD8BFD8
- ‘Tomato’
0xFF6347
- ‘Turquoise’
0x40E0D0
- ‘Violet’
0xEE82EE
- ‘Wheat’
0xF5DEB3
- ‘White’
0xFFFFFF
- ‘WhiteSmoke’
0xF5F5F5
- ‘Yellow’
0xFFFF00
- ‘YellowGreen’
0x9ACD32
7.8 声道布局
声道布局指定了多声道音频流中声道的空间分布。要指定声道布局,FFmpeg 使用了一种特殊的语法。
各个声道通过下表中给出的 ID 来标识:
- ‘FL’
前左
- ‘FR’
前右
- ‘FC’
前中
- ‘LFE’
低频
- ‘BL’
后左
- ‘BR’
后右
- ‘FLC’
前左中间
- ‘FRC’
前右中间
- ‘BC’
后中
- ‘SL’
侧左
- ‘SR’
侧右
- ‘TC’
顶部中间
- ‘TFL’
顶部前左
- ‘TFC’
顶部前中
- ‘TFR’
顶部前右
- ‘TBL’
顶部后左
- ‘TBC’
顶部后中
- ‘TBR’
顶部后右
- ‘DL’
混音左
- ‘DR’
混音右
- ‘WL’
宽左
- ‘WR’
宽右
- ‘SDL’
环绕直左
- ‘SDR’
环绕直右
- ‘LFE2’
低频 2
可以使用以下标识符来指定标准声道布局组合:
- ‘mono’
前中
- ‘stereo’
前左+前右
- ‘2.1’
前左+前右+低频
- ‘3.0’
前左+前右+前中
- ‘3.0(back)’
前左+前右+后中
- ‘4.0’
前左+前右+前中+后中
- ‘quad’
前左+前右+后左+后右
- ‘quad(side)’
前左+前右+侧左+侧右
- ‘3.1’
前左+前右+前中+低频
- ‘5.0’
前左+前右+前中+后左+后右
- ‘5.0(side)’
前左+前右+前中+侧左+侧右
- ‘4.1’
前左+前右+前中+低频+后中
- ‘5.1’
前左+前右+前中+低频+后左+后右
- ‘5.1(side)’
前左+前右+前中+低频+侧左+侧右
- ‘6.0’
前左+前右+前中+后中+侧左+侧右
- ‘6.0(front)’
前左+前右+前左中心+前右中心+侧左+侧右
- ‘3.1.2’
前左+前右+前中+低频+顶部前左+顶部前右
- ‘hexagonal’
前左+前右+前中+后左+后右+后中
- ‘6.1’
前左+前右+前中+低频+后中+侧左+侧右
- ‘6.1’
前左+前右+前中+低频+后左+后右+后中
- ‘6.1(front)’
前左+前右+低频+前左中心+前右中心+侧左+侧右
- ‘7.0’
前左+前右+前中+后左+后右+侧左+侧右
- ‘7.0(front)’
前左+前右+前中+前左中心+前右中心+侧左+侧右
- ‘7.1’
前左+前右+前中+低频+后左+后右+侧左+侧右
- ‘7.1(wide)’
前左+前右+前中+低频+后左+后右+前左中心+前右中心
- ‘7.1(wide-side)’
前左+前右+前中+低频+前左中心+前右中心+侧左+侧右
- ‘5.1.2’
FL+FR+FC+LFE+BL+BR+TFL+TFR
- ‘octagonal’
FL+FR+FC+BL+BR+BC+SL+SR
- ‘cube’
FL+FR+BL+BR+TFL+TFR+TBL+TBR
- ‘5.1.4’
FL+FR+FC+LFE+BL+BR+TFL+TFR+TBL+TBR
- ‘7.1.2’
FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR
- ‘7.1.4’
FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBL+TBR
- ‘7.2.3’
FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBC+LFE2
- ‘9.1.4’
FL+FR+FC+LFE+BL+BR+FLC+FRC+SL+SR+TFL+TFR+TBL+TBR
- ‘9.1.6’
FL+FR+FC+LFE+BL+BR+FLC+FRC+SL+SR+TFL+TFR+TBL+TBR+TSL+TSR
- ‘hexadecagonal’
FL+FR+FC+BL+BR+BC+SL+SR+WL+WR+TBL+TBR+TBC+TFC+TFL+TFR
- ‘binaural’
BIL+BIR
- ‘downmix’
DL+DR
- ‘22.2’
FL+FR+FC+LFE+BL+BR+FLC+FRC+BC+SL+SR+TC+TFL+TFC+TFR+TBL+TBC+TBR+LFE2+TSL+TSR+BFC+BFL+BFR
可以指定一个自定义声道布局,格式为用‘+’号分隔的术语序列。 每个术语可以是:
- 单个声道的名称(例如‘FL’, ‘FR’, ‘FC’, ‘LFE’,等等), 每个术语可以选择性地在‘@’之后包含一个自定义名称(例如‘FL@Left’, ‘FR@Right’, ‘FC@Center’, ‘LFE@Low_Frequency’,等等)
可以使用以下方式指定一个标准的声道布局:
- 单个声道的名称(例如‘FL’, ‘FR’, ‘FC’, ‘LFE’,等等)
- 标准声道布局的名称(例如‘mono’, ‘stereo’, ‘4.0’, ‘quad’, ‘5.0’,等等)
- 一个十进制的声道数量,后跟‘c’,表示该声道数量的默认声道布局(请参见函数
av_channel_layout_default)。注意,并非所有声道数量都有默认布局。 - 一个十进制的声道数量,后跟‘C’,表示一个具有指定声道数量的未知声道布局。注意,并非所有声道布局指定字符串都支持未知声道布局。
- 一个以"0x"开头的十六进制声道布局掩码(请参阅
AV_CH_*中的宏)libavutil/channel_layout.h.
在libavutil版本53之前,指定声道数量的尾随字符"c"是可选的,但现在是必需的,而声道布局掩码也可以指定为十进制数(如果且仅当后面未跟"c"或"C"时)。
另请参阅函数av_channel_layout_from_string定义于libavutil/channel_layout.h.
8 表达式运算
在评估算术表达式时,FFmpeg 使用一个内部公式求值器,其通过libavutil/eval.h接口实现。
表达式可以包含一元、二元运算符、常量和函数。
两个表达式expr1和expr2可以组合成一个新表达式“expr1;expr2". expr1和expr2会按顺序求值,新的表达式会取expr2.
的值。+, -,
*, /, ^.
可用的二元运算符如下:+, -.
可用的一元运算符如下:ld和st函数可以使用索引参数(从0到9)访问某个内部变量,来存储和加载中间结果。
可用的函数如下:
- abs(x)
计算x.
- acos(x)
计算x.
- asin(x)
计算x.
- atan(x)
计算x.
- atan2(y, x)
计算y/x.
- between(x, min, max)
如果x大于等于min且小于等于max,则返回1,否则返回0。
- bitand(x, y)
- bitor(x, y)
计算x和y.
按位与/或操作的结果。x和y的评估结果在执行按位操作之前将转换为整数。
请注意,整数转换及其回到浮点数的转换可能会失去精度。对于大数字(通常为2^53及以上)要注意意外结果。
- ceil(expr)
将表达式expr的值向上取整到最近的整数。例如,“ceil(1.5)”的结果是“2.0”。
- clip(x, min, max)
返回值x被裁剪在min和max.
- cos(x)
计算x.
- cosh(x)
计算x.
- eq(x, y)
如果x和y相等,则返回1,否则返回0。
- exp(x)
计算x(以基数
e为欧拉数)。- floor(expr)
将表达式的值expr向下舍入到最近的整数。例如,"floor(-1.5)" 是 "-2.0"。
- gauss(x)
计算高斯函数x,对应于
exp(-x*x/2) / sqrt(2*PI).- gcd(x, y)
返回x和y的最大公约数。如果x和y都为零或任一者均小于零,则行为未定义。
- gt(x, y)
返回 1 如果x大于y,否则返回 0。
- gte(x, y)
返回 1 如果x大于或等于y,否则返回 0。
- hypot(x, y)
此函数类似于 C 语言中的同名函数;它返回 "sqrt(x*x + y*y)",也就是以x和y为边的直角三角形斜边的长度,或点 (x, y) 离原点的距离。
- if(x, y)
计算x,如果结果不为零,则返回计算结果y,否则返回 0。
- if(x, y, z)
计算x,如果结果不为零则返回计算结果y,否则返回计算结果z.
- ifnot(x, y)
计算x,如果结果为零则返回计算结果y,否则返回 0。
- ifnot(x, y, z)
计算x,如果结果为零则返回计算结果y,否则返回计算结果z.
- isinf(x)
返回 1.0 如果x为 +/-INFINITY,否则返回 0.0。
- isnan(x)
返回 1.0 如果x为 NAN,否则返回 0.0。
- ld(idx)
加载内部变量索引idx的值,该值之前通过 st(idx, expr) 存储。 该函数返回加载的值。
- lerp(x, y, z)
返回x和y之间的线性插值,插值系数为z.
- log(x)
计算x.
- lt(x, y)
返回 1 如果x小于y,否则返回 0。
- lte(x, y)
返回 1 如果x小于或等于y,否则返回 0。
- max(x, y)
返回x和y.
- min(x, y)
返回x和之间的最小值.
- mod(x, y)
计算除法的余数x除以y.
- not(expr)
如果expr为零则返回1.0,否则返回0.0。
- pow(x, y)
计算x的幂,指数为y,等价于 "(x)^(y)".
- print(t)
- print(t, l)
打印表达式的值t使用日志级别l。如果l未指定,则使用默认日志级别。 返回打印的表达式值。
- random(idx)
返回介于0.0到1.0之间的伪随机值。idx是用于保存种子/状态的内部变量的索引,可以之前存储于
st(idx).要初始化种子,需要以64位无符号整数形式将种子值存储在具有索引的内部变量中idx.
例如,存储种子值为
42到具有索引的内部变量中0并打印一些随机值:st(0,42); print(random(0)); print(random(0)); print(random(0))
- randomi(idx, min, max)
返回介于min和max. 之间的伪随机值。是用于保存种子/状态的内部变量的索引,可以之前存储于
st(idx).要初始化种子,需要以64位无符号整数形式将种子值存储在具有索引的内部变量中idx.
- root(expr, max)
找到一个输入值,使由expr表示的函数在区间0..ld(0)为0。中,且以参数.
在expr中的表达式必须表示连续函数,否则结果未定义。
ld(0)用于表示函数输入值,这意味着给定表达式将会通过
ld(0)多个不同的输入值进行多次评估。表达式评估为零时,相应的输入值将被返回。- round(expr)
将表达式expr的值取整到最近的整数。例如,"round(1.5)"为"2.0"。
- sgn(x)
计算x.
- sin(x)
计算x.
- sinh(x)
计算x.
- sqrt(expr)
计算expr的平方根。这等价于 "(expr)^.5".
- squish(x)
计算表达式
1/(1 + exp(4*x)).- st(idx, expr)
将表达式expr的值存储在内部变量中。idx指定变量存储位置索引,索引范围为0到9。函数返回存储在内部变量中的值。
存储的值可以通过
ld(var).检索。
- tan(x)
计算x.
- tanh(x)
计算x.
- taylor(expr, x)
- taylor(expr, x, idx)
在x处估计泰勒级数,给定一个表示 函数在零点的
ld(idx)-次导数表达式。当级数不收敛时,结果未定义。
ld(idx)用于在expr中表示导数阶数,这意味着给定表达式将会通过
ld(idx)多个不同的输入值进行多次评估。idx未指定时,则假定为0。注意,当导数在y而不是0处时,可以使用
taylor(expr, x-y)。- time(0)
返回当前(挂钟)时间(秒)。
- trunc(expr)
将表达式expr的值向零方向取整到最近的整数。例如,"trunc(-1.5)"为"-1.0"。
- while(cond, expr)
在表达式expr值为非零时评估; 条件表达式cond处于非零时继续评估,并返回最后一次expr的评估值,否则返回NAN。cond一直为假。
以下常量是可用的:
- PI
单位圆的面积,大约为3.14
- E
自然对数的底数e(欧拉数字),大约为2.718
- PHI
黄金比例 (1+sqrt(5))/2,大约为1.618
假设表达式被认为"真"如果它有非零的值,请注意:
*像 AND 一样工作
+像 OR 一样工作
例如下面的构造:
if (A AND B) then C
等价于:
if(A*B, C)
在你的 C 代码中,你可以扩展单目和双目的函数列表,定义可以识别的常量,这样它们就可以在表达式中使用。
评估器还可以识别国际单位制的前缀。如果在前缀后添加 'i',则使用基于1024次方的二进制前缀,而不是基于1000次方的前缀。 'B' 后缀将值乘以8,可以在单位前缀后附加或单独使用。这允许使用例如 'KB', 'MiB', 'G' 和 'B' 作为数字后缀。
以下是可用的国际单位制前缀列表,附带相应的10的幂和2的幂的说明。
- y
10^-24 / 2^-80
- z
10^-21 / 2^-70
- a
10^-18 / 2^-60
- f
10^-15 / 2^-50
- p
10^-12 / 2^-40
- n
10^-9 / 2^-30
- u
10^-6 / 2^-20
- m
10^-3 / 2^-10
- c
10^-2
- d
10^-1
- h
10^2
- k
10^3 / 2^10
- K
10^3 / 2^10
- M
10^6 / 2^20
- G
10^9 / 2^30
- T
10^12 / 2^40
- P
10^15 / 2^50
- E
10^18 / 2^60
- Z
10^21 / 2^70
- Y
10^24 / 2^80
9 编解码器选项
libavcodec 提供了一些通用的全局选项,可用于所有编码器和解码器。此外,每个编解码器可能支持所谓的私有选项,这些选项是特定于给定编解码器的。
有时,全局选项可能只影响特定类型的编解码器,而对其他类型没有意义或被忽略,因此你需要了解指定选项的意义。此外,一些选项仅用于解码或编码。
选项可以通过指定 -选项 值在 FFmpeg 工具中设置,或者通过在AVCodecContext选项中显式设置值,或使用libavutil/opt.hAPI
进行编程使用。
以下是支持的选项列表:
- b 整数 (encoding,audio,video)
设置比特率(以比特每秒为单位)。默认值为200K。
- ab 整数 (encoding,audio)
设置音频比特率(以比特每秒为单位)。默认值为128K。
- bt 整数 (encoding,video)
设置视频比特率容忍度(以比特每秒为单位)。在单次运行模式下,比特率容忍度指定速率控制允许偏离目标平均比特率的程度。这与最小/最大比特率无关。降低容忍度过多会对质量产生负面影响。
- flags 标志 (decoding/encoding,audio,video,subtitles)
设置通用标志。
可能的值:
- ‘mv4’
使用宏块的四个运动矢量(mpeg4)。
- ‘qpel’
使用1/4像素运动补偿。
- ‘loop’
使用环路滤波器。
- ‘qscale’
使用固定的 qscale。
- ‘pass1’
在第一遍模式中使用内部两遍速率控制。
- ‘pass2’
在第二遍模式中使用内部两遍速率控制。
- ‘gray’
仅解码/编码灰度。
- ‘psnr’
在编码期间设置错误[?]变量。
- ‘truncated’
输入位流可能会随机被截断。
- ‘drop_changed’
不要输出与流中第一个解码的帧参数不同的帧。当帧被丢弃时,返回错误 AVERROR_INPUT_CHANGED。
- ‘ildct’
使用交错 DCT。
- ‘low_delay’
强制低延迟。
- ‘global_header’
将全局头放入额外数据中,而不是每个关键帧中。
- ‘bitexact’
仅写入与平台、构建和时间无关的数据。(除(I)DCT外)。这保证文件和数据校验和在不同平台之间可重复且匹配。 其主要用途是回归测试。
- ‘aic’
应用 H263 高级帧内编码/mpeg4 ac 预测。
- ‘ilme’
应用交错运动估计。
- ‘cgop’
使用封闭 GOP。
- ‘output_corrupt’
甚至输出潜在的损坏帧。
- time_base 有理数
设置编解码器时间基。
这是时间(以秒为单位)的基础单位,框架时间戳以此为单位表示。 对于固定帧率内容,时间基应为
1 / frame_rate且时间戳增量应完全为 1。- g 整数 (encoding,video)
设置图像组(GOP)大小。默认值为12。
- ar 整数 (decoding/encoding,audio)
设置音频采样率(单位:Hz)。
- ac 整数 (decoding/encoding,audio)
设置音频通道数。
- cutoff 整数 (encoding,audio)
设置截止频带宽度。(仅支持某些选定的编码器,请参阅各自的文档章节。)
- frame_size 整数 (encoding,audio)
设置音频帧大小。
除最后一个外,每个提交的帧必须包含每个通道的确切 frame_size 样本。当编解码器设置了 CODEC_CAP_VARIABLE_FRAME_SIZE 时,可以为 0,在这种情况下,帧大小不受限制。 某些解码器会设置此值以指示固定帧大小。
- frame_number 整数
设置帧编号。
- delay 整数
- qcomp 浮点数 (encoding,video)
设置视频量化因子比例压缩(可变比特率)。它作为速率控制方程中的一个常数。推荐默认 rc_eq 的范围:0.0-1.0。
- qblur 浮点数 (encoding,video)
设置视频量化因子比例模糊(可变比特率)。
- qmin 整数 (encoding,video)
设置最小视频量化因子比例(可变比特率)。必须在-1和69之间,默认值为2。
- qmax 整数 (encoding,video)
设置最大视频量化因子比例(可变比特率)。必须在-1和1024之间,默认值为31。
- qdiff 整数 (encoding,video)
设置量化因子比例的最大差值(可变比特率)。
- bf 整数 (encoding,video)
设置非B帧之间的最大B帧数。
必须是-1到16之间的整数。0表示禁用B帧。如果使用-1值,则会根据编码器选择一个自动值。
默认值为0。
- b_qfactor 浮点数 (encoding,video)
设置P帧和B帧之间的qp因子。
- codec_tag 整数
- bug 标志 (decoding,video)
处理未自动检测到的编码器错误。
可能的值:
- ‘autodetect’
- ‘xvid_ilace’
Xvid 交错错误(自动检测如果 fourcc==XVIX)
- ‘ump4’
(自动检测如果 fourcc==UMP4)
- ‘no_padding’
填充错误(自动检测)
- ‘amv’
- ‘qpel_chroma’
- ‘std_qpel’
旧标准 qpel(根据 fourcc/版本自动检测)
- ‘qpel_chroma2’
- ‘direct_blocksize’
直接-qpel-块大小错误(根据 fourcc/版本自动检测)
- ‘edge’
边缘填充错误(根据 fourcc/版本自动检测)
- ‘hpel_chroma’
- ‘dc_clip’
- ‘ms’
解决微软破损解码器中的各种错误。
- ‘trunc’
截断的帧
- strict 整数 (decoding/encoding,audio,video)
指定遵守标准的严格程度。
可能的值:
- ‘very’
严格遵守标准的更早、更严格版本或参考软件
- ‘strict’
无论后果如何,严格遵循规格中的所有内容
- ‘normal’
- ‘unofficial’
允许非官方扩展
- ‘experimental’
允许非标准的实验性功能,实验性(未完成/正在进行/未经良好测试)解码器和编码器。 注意:实验性解码器可能带来安全风险,不要用于解码不受信任的输入。
- b_qoffset 浮点数 (encoding,video)
设置 P 帧和 B 帧之间的 QP 偏移。
- err_detect 标志 (decoding,audio,video)
设置错误检测标志。
可能的值:
- ‘crccheck’
验证嵌入的 CRC
- ‘bitstream’
检测比特流规格偏差
- ‘buffer’
检测不正确的比特流长度
- ‘explode’
在检测到轻微错误时中止解码
- ‘ignore_err’
忽略解码错误并继续解码。 如果您想分析视频内容并希望无论如何都能解码所有内容,这将很有用。 在出现错误的情况下,此选项生成的视频可能不会令人赏心悦目。
- ‘careful’
将违反规格且尚未在实际中出现的事情视为错误
- ‘compliant’
将所有不符合规格的情况视为错误
- ‘aggressive’
将理性编码器不应执行的操作视为错误
- has_b_frames 整数
- block_align 整数
- rc_override_count 整数
- maxrate 整数 (encoding,audio,video)
设置最大比特率容忍度(单位:比特/秒)。需要设置 bufsize。
- minrate 整数 (encoding,audio,video)
设置最小比特率容忍度(单位:比特/秒)。主要用于设置 CBR 编码。 在其他情况下作用很小。
- bufsize 整数 (encoding,audio,video)
设置码率控制缓冲区大小(单位:比特)。
- i_qfactor 浮点数 (encoding,video)
设置 P 帧和 I 帧之间的 QP 因子。
- i_qoffset 浮点数 (encoding,video)
设置 P 帧和 I 帧之间的 QP 偏移。
- dct 整数 (encoding,video)
设置 DCT 算法。
可能的值:
- ‘auto’
自动选择一个好的算法(默认)
- ‘fastint’
快速整数
- ‘int’
精确整数
- ‘mmx’
- ‘altivec’
- ‘faan’
浮点型 AAN DCT
- lumi_mask 浮点数 (encoding,video)
对亮度区域进行更强的压缩。
- tcplx_mask 浮点数 (encoding,video)
设置时间复杂度掩码。
- scplx_mask 浮点数 (encoding,video)
设置空间复杂度掩码。
- p_mask 浮点数 (encoding,video)
设置交错掩码。
- dark_mask 浮点数 (encoding,video)
对暗部区域进行更强的压缩。
- idct 整数 (decoding/encoding,video)
选择 IDCT 实现。
可能的值:
- ‘auto’
- ‘int’
- ‘simple’
- ‘simplemmx’
- ‘simpleauto’
自动选择一个与简单 IDCT 兼容的实现
- ‘arm’
- ‘altivec’
- ‘sh4’
- ‘simplearm’
- ‘simplearmv5te’
- ‘simplearmv6’
- ‘simpleneon’
- ‘xvid’
- ‘faani’
浮点型 AAN IDCT
- slice_count 整数
- ec 标志 (decoding,video)
设置错误隐藏策略。
可能的值:
- ‘guess_mvs’
迭代运动矢量(MV)搜索(慢)
- ‘deblock’
对损坏的宏块使用强去块滤波器
- ‘favor_inter’
倾向于从前一帧而不是当前帧进行预测
- bits_per_coded_sample 整数
- aspect 有理数 (encoding,video)
设置采样长宽比。
- sar 有理数 (encoding,video)
设置采样长宽比。别名为aspect.
- debug 标志 (decoding/encoding,audio,video,subtitles)
打印特定的调试信息。
可能的值:
- ‘pict’
图片信息
- ‘rc’
码率控制
- ‘bitstream’
- ‘mb_type’
宏块(MB)类型
- ‘qp’
每块量化参数(QP)
- ‘dct_coeff’
- ‘green_metadata’
显示即将到来的帧、Gop 或指定持续时间的复杂度元数据。
- ‘skip’
- ‘startcode’
- ‘er’
错误识别
- ‘mmco’
内存管理控制操作(H.264)
- ‘bugs’
- ‘buffers’
图片缓冲区分配
- ‘thread_ops’
线程操作
- ‘nomc’
跳过运动补偿
- cmp 整数 (encoding,video)
设置全像素运动估计比较函数。
可能的值:
- ‘sad’
绝对差之和,快(默认)
- ‘sse’
平方差之和
- ‘satd’
绝对 Hadamard 变换差之和
- ‘dct’
绝对 DCT 变换差之和
- ‘psnr’
量化误差平方和(避免,质量低)
- ‘bit’
块所需的比特数
- ‘rd’
率失真优化,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差之和
- ‘vsse’
平方垂直差之和
- ‘nsse’
保留噪声的平方差之和
- ‘w53’
5/3 小波,仅用于雪
- ‘w97’
9/7 小波,仅用于雪
- ‘dctmax’
- ‘chroma’
- subcmp 整数 (encoding,video)
设置子像素运动估计比较函数。
可能的值:
- ‘sad’
绝对差之和,快(默认)
- ‘sse’
平方差之和
- ‘satd’
绝对 Hadamard 变换差之和
- ‘dct’
绝对 DCT 变换差之和
- ‘psnr’
量化误差平方和(避免,质量低)
- ‘bit’
块所需的位数
- ‘rd’
最优率失真,慢
- ‘zero’
0
- ‘vsad’
纵向绝对差的总和
- ‘vsse’
纵向平方差的总和
- ‘nsse’
噪声保留的平方差总和
- ‘w53’
5/3 小波,仅用于雪
- ‘w97’
9/7 小波,仅用于雪
- ‘dctmax’
- ‘chroma’
- mbcmp 整数 (encoding,video)
设置宏块比较函数。
可能的值:
- ‘sad’
绝对差的总和,快速(默认)
- ‘sse’
平方误差的总和
- ‘satd’
绝对哈达玛变换差的总和
- ‘dct’
绝对离散余弦变换差的总和
- ‘psnr’
量化误差平方和(避免,低质量)
- ‘bit’
块所需的位数
- ‘rd’
最优率失真,慢
- ‘zero’
0
- ‘vsad’
纵向绝对差的总和
- ‘vsse’
纵向平方差的总和
- ‘nsse’
噪声保留的平方差总和
- ‘w53’
5/3 小波,仅用于雪
- ‘w97’
9/7 小波,仅用于雪
- ‘dctmax’
- ‘chroma’
- ildctcmp 整数 (encoding,video)
设置隔行扫描的离散余弦变换比较函数。
可能的值:
- ‘sad’
绝对差的总和,快速(默认)
- ‘sse’
平方误差的总和
- ‘satd’
绝对哈达玛变换差的总和
- ‘dct’
绝对离散余弦变换差的总和
- ‘psnr’
量化误差平方和(避免,低质量)
- ‘bit’
块所需的位数
- ‘rd’
最优率失真,慢
- ‘zero’
0
- ‘vsad’
纵向绝对差的总和
- ‘vsse’
纵向平方差的总和
- ‘nsse’
噪声保留的平方差总和
- ‘w53’
5/3 小波,仅用于雪
- ‘w97’
9/7 小波,仅用于雪
- ‘dctmax’
- ‘chroma’
- dia_size 整数 (encoding,video)
设置运动估计的菱形类型和大小。
- ‘(1024, INT_MAX)’
全运动估计(最慢)
- ‘(768, 1024]’
umh 运动估计
- ‘(512, 768]’
六边形运动估计
- ‘(256, 512]’
l2s 菱形运动估计
- ‘[2,256]’
var 菱形运动估计
- ‘(-1, 2)’
小菱形运动估计
- ‘-1’
有趣的菱形运动估计
- ‘(INT_MIN, -1)’
sab 菱形运动估计
- last_pred 整数 (encoding,video)
设置从上一帧导出的运动预测量。
- precmp 整数 (encoding,video)
设置预运动估计比较函数。
可能的值:
- ‘sad’
绝对差的总和,快速(默认)
- ‘sse’
平方误差的总和
- ‘satd’
绝对哈达玛变换差的总和
- ‘dct’
绝对离散余弦变换差的总和
- ‘psnr’
量化误差平方和(避免,低质量)
- ‘bit’
块所需的位数
- ‘rd’
最优率失真,慢
- ‘zero’
0
- ‘vsad’
纵向绝对差的总和
- ‘vsse’
纵向平方差的总和
- ‘nsse’
噪声保留的平方差总和
- ‘w53’
5/3 小波,仅用于雪
- ‘w97’
9/7 小波,仅用于雪
- ‘dctmax’
- ‘chroma’
- pre_dia_size 整数 (encoding,video)
设置运动估计预处理的菱形类型和大小。
- subq 整数 (encoding,video)
设置亚像素运动估计的质量。
- me_range 整数 (encoding,video)
设置运动矢量范围限制(DivX 播放器的值为 1023)。
- global_quality 整数 (encoding,audio,video)
- slice_flags 整数
- mbd 整数 (encoding,video)
设置宏块决策算法(高质量模式)。
可能的值:
- ‘simple’
使用 mbcmp(默认)
- ‘bits’
使用最少的位数
- ‘rd’
使用最佳率失真
- rc_init_occupancy 整数 (encoding,video)
设置在开始解码之前应加载到 rc 缓冲区的位数。
- flags2 标志 (decoding/encoding,audio,video,subtitles)
-
可能的值:
- ‘fast’
允许非规范兼容的加速技巧。
- ‘noout’
跳过比特流编码。
- ‘ignorecrop’
忽略来自 sps 的裁剪信息。
- ‘local_header’
在每个关键帧中放置全局头而不是在额外数据中。
- ‘chunks’
帧数据可能会分成多个块。
- ‘showall’
在第一帧关键帧之前显示所有帧。
- ‘export_mvs’
将运动向量导出到帧辅助数据(请参阅
AV_FRAME_DATA_MOTION_VECTORS) 对于支持它的编解码器。另请参阅doc/examples/export_mvs.c.- ‘skip_manual’
不要跳过样本,并将跳过信息导出为帧辅助数据。
- ‘ass_ro_flush_noop’
刷新时不重置 ASS 的 ReadOrder 字段。
- ‘icc_profiles’
从色度标签中生成/解析嵌入的 ICC 配置文件。
- export_side_data 标志 (decoding/encoding,audio,video,subtitles)
-
可能的值:
- ‘mvs’
将运动向量导出到帧辅助数据(请参阅
AV_FRAME_DATA_MOTION_VECTORS) 对于支持它的编解码器。另请参阅doc/examples/export_mvs.c.- ‘prft’
将编码器的生产者参考时间导出到数据包辅助数据(请参阅
AV_PKT_DATA_PRFT) 对于支持它的编解码器。- ‘venc_params’
通过帧辅助数据导出视频编码参数(请参阅
AV_FRAME_DATA_VIDEO_ENC_PARAMS支持的编解码器目前包括 H.264和VP9。- ‘film_grain’
通过帧边数据导出胶片颗粒参数 (见
AV_FRAME_DATA_FILM_GRAIN_PARAMS)。 当前被AV1解码器支持。- ‘enhancements’
通过帧边数据导出图像增强元数据,例如LCEVC (见
AV_FRAME_DATA_LCEVC).
- threads 整数 (decoding/encoding,video)
设置要使用的线程数,前提是选定的编解码器实现支持多线程。
可能的值:
- ‘auto, 0’
自动选择要设置的线程数量
默认值为‘auto’.
- dc 整数 (encoding,video)
设置intra_dc精度。
- nssew 整数 (encoding,video)
设置nsse权重。
- skip_top 整数 (decoding,video)
设置顶部跳过的宏块行数。
- skip_bottom 整数 (decoding,video)
设置底部跳过的宏块行数。
- profile 整数 (encoding,audio,video)
-
设置编码器编解码器配置文件。默认值为‘unknown’。 特定编码器的配置文件记录在相关编码器的文档中。
- level 整数 (encoding,audio,video)
-
设置编码器级别。此级别取决于特定的编解码器, 可能对应于配置文件级别。默认设置为‘unknown’.
可能的值:
- ‘unknown’
- lowres 整数 (decoding,audio,video)
在1=1/2, 2=1/4, 3=1/8分辨率下解码。
- mblmin 整数 (encoding,video)
设置最小宏块拉格朗日分量系数(VBR)。
- mblmax 整数 (encoding,video)
设置最大宏块拉格朗日分量系数(VBR)。
- skip_loop_filter 整数 (decoding,video)
- skip_idct 整数 (decoding,video)
- skip_frame 整数 (decoding,video)
-
根据选项值指定的帧类型让解码器丢弃处理。
skip_loop_filter跳过帧环过滤,skip_idct跳过帧IDCT/反量化,skip_frame跳过解码。
可能的值:
- ‘none’
不丢弃任何帧。
- ‘default’
丢弃无用帧,例如0大小帧。
- ‘noref’
丢弃所有非参考帧。
- ‘bidir’
丢弃所有双向帧。
- ‘nokey’
仅保留关键帧,丢弃所有其他帧。
- ‘nointra’
仅保留I帧,丢弃所有其他帧。
- ‘all’
丢弃所有帧。
默认值为‘default’.
- bidir_refine 整数 (encoding,video)
优化双向宏块中使用的两个运动矢量。
- keyint_min 整数 (encoding,video)
设置IDR帧之间的最小间隔。
- refs 整数 (encoding,video)
设置用于运动补偿的参考帧数量。
- trellis 整数 (encoding,audio,video)
设置码率-失真最优量化。
- mv0_threshold 整数 (encoding,video)
- compression_level 整数 (encoding,audio,video)
- bits_per_raw_sample 整数
- channel_layout 整数 (decoding/encoding,audio)
参见(ffmpeg-utils)ffmpeg-utils(1)手册的‘通道布局’部分以了解所需语法。
- rc_max_vbv_use 浮点数 (encoding,video)
- rc_min_vbv_use 浮点数 (encoding,video)
- color_primaries 整数 (decoding/encoding,video)
可能的值:
- ‘bt709’
BT.709
- ‘bt470m’
BT.470 M
- ‘bt470bg’
BT.470 BG
- ‘smpte170m’
SMPTE 170 M
- ‘smpte240m’
SMPTE 240 M
- ‘film’
电影
- ‘bt2020’
BT.2020
- ‘smpte428’
- ‘smpte428_1’
SMPTE ST 428-1
- ‘smpte431’
SMPTE 431-2
- ‘smpte432’
SMPTE 432-1
- ‘jedec-p22’
JEDEC P22
- color_trc 整数 (decoding/encoding,video)
可能的值:
- ‘bt709’
BT.709
- ‘gamma22’
BT.470 M
- ‘gamma28’
BT.470 BG
- ‘smpte170m’
SMPTE 170 M
- ‘smpte240m’
SMPTE 240 M
- ‘linear’
线性
- ‘log’
- ‘log100’
对数
- ‘log_sqrt’
- ‘log316’
对数平方根
- ‘iec61966_2_4’
- ‘iec61966-2-4’
IEC 61966-2-4
- ‘bt1361’
- ‘bt1361e’
BT.1361
- ‘iec61966_2_1’
- ‘iec61966-2-1’
IEC 61966-2-1
- ‘bt2020_10’
- ‘bt2020_10bit’
BT.2020 - 10比特
- ‘bt2020_12’
- ‘bt2020_12bit’
BT.2020 - 12比特
- ‘smpte2084’
SMPTE ST 2084
- ‘smpte428’
- ‘smpte428_1’
SMPTE ST 428-1
- ‘arib-std-b67’
ARIB STD-B67
- colorspace 整数 (decoding/encoding,video)
可能的值:
- ‘rgb’
RGB
- ‘bt709’
BT.709
- ‘fcc’
FCC
- ‘bt470bg’
BT.470 BG
- ‘smpte170m’
SMPTE 170 M
- ‘smpte240m’
SMPTE 240 M
- ‘ycocg’
YCOCG
- ‘bt2020nc’
- ‘bt2020_ncl’
BT.2020 非线性
- ‘bt2020c’
- ‘bt2020_cl’
BT.2020 线性
- ‘smpte2085’
SMPTE 2085
- ‘chroma-derived-nc’
由色度导出的非线性
- ‘chroma-derived-c’
由色度导出的线性
- ‘ictcp’
ICtCp
- color_range 整数 (decoding/encoding,video)
作为输入参数使用时,它是对解码器的提示,表示输入的颜色范围。 可能的值:
- ‘tv’
- ‘mpeg’
- ‘limited’
MPEG (219*2^(n-8))
- ‘pc’
- ‘jpeg’
- ‘full’
JPEG (2^n-1)
- chroma_sample_location 整数 (decoding/encoding,video)
可能的值:
- ‘left’
- ‘center’
- ‘topleft’
- ‘top’
- ‘bottomleft’
- ‘bottom’
- log_level_offset 整数
设置日志级别偏移量。
- slices 整数 (encoding,video)
切片数量,用于并行编码。
- thread_type 标志 (decoding/encoding,video)
选择使用哪种多线程方法。
使用‘frame’将使解码延迟每线程增加一帧,因此不提供未来帧的客户端不应使用它。
可能的值:
- ‘slice’
同时解码同一帧的多个部分。
使用切片进行多线程解码仅在视频通过切片编码时工作。
- ‘frame’
同时解码多个帧。
默认值是‘slice+frame’.
- audio_service_type 整数 (encoding,audio)
设置音频服务类型。
可能的值:
- ‘ma’
主要音频服务
- ‘ef’
特效
- ‘vi’
视觉障碍
- ‘hi’
听力障碍
- ‘di’
对话
- ‘co’
评论
- ‘em’
紧急情况
- ‘vo’
旁白
- ‘ka’
卡拉OK
- request_sample_fmt 示例格式 (decoding,audio)
设置音频解码器应优先使用的示例格式。默认值是
none.- pkt_timebase 有理数
- sub_charenc 编码 (decoding,subtitles)
设置输入字幕字符编码。
- field_order 场序 (video)
设置/覆盖视频的场序。 可能的值:
- ‘progressive’
逐行视频
- ‘tt’
隔行视频,顶场编码并先显示
- ‘bb’
隔行视频,底场编码并先显示
- ‘tb’
隔行视频,顶场先编码,底场先显示
- ‘bt’
隔行视频,底场先编码,顶场先显示
- skip_alpha 布尔值 (decoding,video)
设置为 1 以禁用处理透明度(alpha)。这类似于在gray选项中跳过色度信息的‘flags’标志。但这里是跳过透明度。默认值为 0。
- codec_whitelist 列表 (input)
逗号分隔的允许解码器列表。默认情况下允许所有。
- dump_separator 字符串 (input)
分隔符,用于在命令行上打印关于流参数的信息。 例如,将字段通过换行和缩进分隔:
ffprobe -dump_separator " " -i ~/videos/matrixbench_mpeg2.mpg- max_pixels 整数 (decoding/encoding,video)
每幅图像的最大像素数。该值可用于避免因图像过大而导致的内存不足失败。
- apply_cropping 布尔值 (decoding,video)
如果裁剪参数满足左和顶部参数的所需对齐要求,则启用裁剪。如果未满足对齐要求,为保持对齐裁剪将部分应用。 默认值为1(启用)。 注意:所需对齐依赖于是否设置了
AV_CODEC_FLAG_UNALIGNED以及CPU。AV_CODEC_FLAG_UNALIGNED不能通过命令行更改。此外,硬件解码器不会应用左/顶部裁剪。
10 解码器
解码器是FFmpeg中的配置元素,允许解码多媒体流。
配置FFmpeg构建时,所有支持的本地解码器默认是启用的。
需要外部库的解码器必须手动启用。--enable-lib选项。可使用配置选项列出所有可用解码器。--list-decoders.
可以通过配置选项禁用所有解码器。--disable-decoders并通过选项选择性启用/禁用单个解码器。--enable-decoder=解码器 /
--disable-decoder=解码器.
选项-decodersff*工具将显示已启用解码器的列表。
11 视频解码器
以下是部分当前可用的视频解码器的描述。
11.1 av1
AOMedia Video 1 (AV1) 解码器。
11.1.1 选项
- operating_point
选择可扩展 AV1码流的操作点(0 - 31)。默认值为0。
11.2 hevc
HEVC(即 ITU-T H.265 或 ISO/IEC 23008-2)解码器。
解码器支持最多两个视图的MV-HEVC多视流。要输出的视图通过提供视图ID列表选择(view_ids选项)。该选项可以在解码器初始化之前静态设置,
或者通过get_format()回调设置——对于视图数量或ID动态变化的情况非常有用。
默认情况下仅解码基础层。
注意如果使用ffmpegCLI工具,应使用其手册中记录的视图说明符,而不是此处记录的选项。
11.2.1 选项
- view_ids (MV-HEVC)
指定输出的视图ID列表。该选项也可以设置为单个’-1’,这样所有在VPS中定义的视图都会被解码并输出。
- view_ids_available (MV-HEVC)
调用方可以读取此选项以检索活动VPS中提供的视图ID数组。对于单层视频,该数组为空。
从
get_format()回调读取时,该选项的值保证准确。可以在其他时间(例如解码器打开后)设置,但值仅供参考,可能不准确(例如当流包含多个不同的VPS NALU时)。- view_pos_available (MV-HEVC)
调用方可以读取此选项以检索活动VPS中可用的视图位置数组(左、右或未指定),如
AVStereo3DView值。当数组可用时,其元素对应于view_ids_available的相应元素,即view_pos_available[i]包含ID为view_ids_available[i].的视图的位置。view_ids_available的有效性限制同样适用于此选项。
11.3 原始视频
原始视频解码器。
此解码器用于解码原始视频流。
11.3.1 参数选项
- top 第一场优先
指定输入视频的假定场类型。
- -1
视频假定为渐进式(默认)
- 0
假定为底场优先
- 1
假定为顶场优先
11.4 libdav1d
dav1d AV1 解码器。
libdav1d允许libavcodec解码AOMedia视频1(AV1)编码。
在配置期间需要有libdav1d头文件和库。
需要在构建时显式配置--enable-libdav1d.
11.4.1 参数选项
libdav1d封装器支持以下选项。
- framethreads
设置解码过程中使用的帧线程数量。默认值为0(自动检测)。 此选项已在libdav1d >= 1.0版本中弃用,未来将移除。请使用 选项
max_frame_delay以及全局选项threads代替。- tilethreads
设置解码过程中使用的瓦片线程数量。默认值为0(自动检测)。 此选项已在libdav1d >= 1.0版本中弃用,未来将移除。请使用 全局选项
threads代替。- max_frame_delay
设置解码器内部可能缓冲的最大帧数。默认值为0(自动检测)。
- filmgrain
如果比特流中存在电影颗粒,则将其应用于解码的视频。 默认为库的内部默认。 此选项已被弃用,将在未来移除。请参阅全局选项
export_side_data导出电影颗粒参数而不是应用它。- oppoint
选择可扩展AV1比特流的工作点(0 - 31)。默认为库的内部默认值。
- alllayers
输出可扩展AV1比特流的所有空间层。默认值为false。
11.5 libdavs2
AVS2-P2/IEEE1857.4视频解码器封装器。
此解码器允许libavcodec使用davs2库解码AVS2流。
11.6 libuavs3d
AVS3-P2/IEEE1857.10视频解码器。
libuavs3d允许libavcodec解码AVS3流。
在配置期间需要有libuavs3d头文件和库。
需要在构建时显式配置--enable-libuavs3d.
11.6.1 参数选项
libuavs3d封装器支持以下选项。
- frame_threads
设置解码过程中使用的帧线程数量。默认值为0(自动检测)。
11.7 libxevd
eXtra-fast Essential Video Decoder(XEVD)MPEG-5 EVC 解码器封装器。
此解码器在配置期间需要有libxevd头文件和库。 需要在构建时显式配置--enable-libxevd.
xevd项目网站链接为https://github.com/mpeg5/xevd.
11.7.1 参数选项
libxevd封装器支持以下选项。 xevd等效的选项或值在括号中列出,便于迁移。
要获取更准确和广泛的libxevd选项文档,可执行命令xevd_app --help或查阅libxevd文档。
- threads (threads)
强制使用特定线程数
11.8 QSV 解码器
Intel QuickSync Video解码器家族(VC1、MPEG-2、H.264、HEVC、 JPEG/MJPEG、VP8、VP9、AV1、VVC)。
11.8.1 通用选项
所有qsv解码器都支持以下选项。
- 异步深度
内部并行化深度,值越高延迟越高。
- GPU拷贝
在视频和系统内存之间的GPU加速拷贝
- ‘default’
- ‘on’
- ‘off’
11.8.2 HEVC 选项
hevc_qsv的额外选项。
- 加载插件
在内部会话中加载用户插件
- ‘none’
- ‘hevc_sw’
- ‘hevc_hw’
- 加载多个插件
用于在内部会话中加载多个插件的十六进制插件UID列表,以冒号分隔
11.9 v210
未压缩4:2:2 10位解码器。
11.9.1 参数选项
- custom_stride
设置v210数据的行大小(以字节为单位)。默认值为0 (自动检测)。可以使用特殊值-1,用于BOXX文件中的无行距的v210。
12 音频解码器
以下是当前一些可用音频解码器的描述。
12.1 ac3
AC-3音频解码器。
此解码器部分实现了ATSC A/52:2010和ETSI TS 102 366,以及 未公开的RealAudio 3(又名dnet)。
12.1.1 AC-3 解码器选项
- -drc_scale 值
动态范围缩放因子。应用于AC-3流的动态范围值的因子。 此因子以指数方式应用。默认值为1。 有3个显著的缩放因子范围:
- drc_scale == 0
禁用动态范围控制(DRC)。产生全范围音频。
- 0 < drc_scale <= 1
启用DRC。应用流DRC值的一部分。 音频再现介于完全范围和完全压缩之间。
- drc_scale > 1
启用DRC。非对称地应用drc_scale。 响亮的声音被完全压缩。柔和的声音被增强。
12.2 flac
FLAC音频解码器。
此解码器旨在实现Xiph的完整FLAC规范。
12.2.1 FLAC 解码器选项
- -use_buggy_lpc
lavc FLAC编码器曾使用高lpc值生成有问题的流 (如默认值)。此选项使其能够通过使用 lavc旧的有问题的lpc逻辑正确解码此类流。
12.3 ffwavesynth
内部波形合成器。
此解码器根据预定义序列生成波形模式。其 用途纯粹是内部的,支持的数据格式未公开记载。
12.4 libcelt
libcelt解码器封装器。
libcelt允许libavcodec解码Xiph CELT超低延迟音频编码器。
在配置期间需要有libcelt头文件和库。
需要在构建时显式配置--enable-libcelt.
12.5 libgsm
libgsm解码器封装器。
libgsm允许libavcodec解码GSM全速音频编码器。
在配置期间需要有libgsm头文件和库。
需要在构建时显式配置--enable-libgsm.
此解码器支持普通GSM和微软变体。
12.6 libilbc
libilbc解码器封装器。
libilbc允许libavcodec解码Internet低比特率编码器(iLBC)
音频编码器。在配置期间需要有libilbc头文件和库。
需要在构建时显式配置--enable-libilbc.
12.6.1 参数选项
libilbc封装器支持以下选项。
- enhance
-
启用对解码音频的增强功能时,将值设置为1。默认值 为0(禁用)。
12.7 libopencore-amrnb
libopencore-amrnb解码器封装器。
libopencore-amrnb允许libavcodec解码自适应多速率
窄带音频编码器。使用它需要在配置期间拥有
libopencore-amrnb头文件和库。需要显式配置构建--enable-libopencore-amrnb.
FFmpeg原生解码器支持AMR-NB,因此用户可以无需此库解码AMR-NB。
12.8 libopencore-amrwb
libopencore-amrwb解码器封装器。
libopencore-amrwb允许libavcodec解码自适应多速率
宽带音频编码器。使用它需要在配置期间拥有
libopencore-amrwb头文件和库。需要显式配置构建--enable-libopencore-amrwb.
FFmpeg原生解码器支持AMR-WB,因此用户无需使用该库即可解码AMR-WB。
12.9 libopus
libopus解码包装器。
libopus允许libavcodec解码Opus交互式音频编解码器。
配置期间需要存在libopus头文件和库。
需要在构建时显式配置--enable-libopus.
FFmpeg原生解码器支持Opus,因此用户无需使用该库即可解码Opus。
13 字幕解码器
13.1 libaribb24
ARIB STD-B24字幕解码器。
实现ARIB STD-B24标准的A和C配置文件。
13.1.1 libaribb24解码器选项
- -aribb24-base-path 路径
设置libaribb24库的基本路径。用于读取配置文件(用于自定义Unicode转换),以及在该位置下导出非文本符号为图像。
默认未设置。
- -aribb24-skip-ruby-text 布尔值
通知解码包装器跳过包含半高注音文字的文本块。
默认启用。
13.2 libaribcaption
另一个使用外部库的ARIB STD-B24字幕解码器libaribcaption库。
实现了日本ARIB STD-B24标准的A和C配置文件,巴西ABNT NBR 15606-1,以及菲律宾版本的ISDB-T。
需要在配置期间存在libaribcaption头文件和库
(https://github.com/xqq/libaribcaption)。
需要显式配置构建--enable-libaribcaption。
如果同时启用了libaribb24和libaribcaption,libaribcaption解码器优先。
13.2.1 libaribcaption解码器选项
- -sub_type subtitle_type
指定解码字幕的格式。
- ‘bitmap’
图形图像。
- ‘ass’
ASS格式化文本。
- ‘text’
简单文本输出,无格式。
默认是ass与libaribb24解码器相同。 一些现有的播放器(如mpv)期望ARIB字幕使用ASS格式。
- -caption_encoding encoding_scheme
指定输入字幕文本的编码方案。
- ‘auto’
自动检测文本编码(默认)。
- ‘jis’
ARIB STD B24中定义的8位字符JIS编码。 该编码在日本用于ISDB字幕。
- ‘utf8’
ARIB STD B24中定义的UTF-8编码。 该编码在菲律宾用于ISDB-T字幕。
- ‘latin’
ABNT NBR 15606-1中定义的拉丁字符编码。 该编码在南美洲用于SBTVD / ISDB-Tb字幕。
- -font font_name[,font_name2,...]
指定用于bitmap或ass类型字幕渲染的字体家族名称的逗号分隔列表。 对于ass类型字幕,仅使用第一个字体名称。
如果未指定,则使用内部定义的默认字体家族。
- -ass_single_rect 布尔值
ARIB STD-B24规定某些字幕可同时在不同位置显示(多矩形字幕)。 由于某些播放器(如旧版mpv)无法在单个AVSubtitle处理中正确处理多个ASS矩形,或者无法正确处理具有相同起始时间戳的不确定持续时间的多个ASS矩形, 此选项可更改行为,使所有文本显示在单个ASS矩形中。
默认值为false.
如果您的播放器无法正确处理带有多个ASS矩形的AVSubtitles,请将此选项设置为true或在编译时定义
ASS_SINGLE_RECT=1以更改默认行为。- -force_outline_text 布尔值
指定是否总是为所有字符渲染轮廓文字,而无论字符样式的指示。
默认值为false.
- -outline_width 数字 (0.0 - 3.0)
指定轮廓文字的宽度,以点(相对)为单位。
默认值为1.5.
- -ignore_background 布尔值
指定是否忽略背景颜色渲染。
默认值为false.
- -ignore_ruby 布尔值
指定是否忽略注音(如振假名)字符的渲染。
默认值为false.
- -replace_drcs 布尔值
指定是否将替换的DRCS字符渲染为Unicode字符。
默认值为true.
- -replace_msz_ascii 布尔值
指定是否将MSZ(中尺寸;半宽)全宽字母数字替换为半宽字母数字。
默认值为true.
- -replace_msz_japanese 布尔值
指定是否将某些MSZ(中尺寸;半宽)全宽日语特殊字符替换为半宽字符。
默认值为true.
- -replace_msz_glyph 布尔值
指定是否在字体支持的情况下将MSZ(中尺寸;半宽)字符替换为半宽字形。 此选项在使用Adobe-Japan1兼容字体的FreeType或DirectWrite渲染器时适用。 例如:IBM Plex Sans JP、Morisawa BIZ UDGothic、Morisawa BIZ UDMincho、 Yu Gothic、Yu Mincho以及Meiryo。
默认值为true.
- -canvas_size image_size
指定用于渲染字幕的画布分辨率;通常应为输入视频的帧大小。 仅当
-subtitle_type设置为bitmap.时适用。 libaribcaption解码器假设用于位图渲染的输入帧大小如下:
- PROFILE_A :1440 x 1080,SAR (PAR)为4:3
- PROFILE_C :320 x 180,SAR (PAR)为1:1
如果输入视频的实际帧大小与上述假设不匹配,则渲染的字幕可能会变形。 要使字幕不失真,请添加
-canvas_size选项以指定 实际输入视频大小。请注意,对于尺寸不同但宽高比相同的视频,
-canvas_size选项不是必须的。 在这种情况下,字幕将根据实际视频尺寸拉伸或缩小 如果-canvas_size选项未指定。 如果-canvas_size选项指定了不同的尺寸,字幕将按指定的尺寸进行拉伸或收缩,并计算SAR。
13.2.2 libaribcaption解码器使用示例
通过工具显示带有ARIB字幕的MPEG-TS文件:ffplay工具:
ffplay -sub_type bitmap MPEG.TS
通过工具显示输入帧尺寸为1920x1080的MPEG-TS文件:ffplay工具:
ffplay -sub_type bitmap -canvas_size 1920x1080 MPEG.TS
在转码视频中嵌入ARIB字幕:
ffmpeg -sub_type bitmap -i src.m2t -filter_complex "[0:v][0:s]overlay" -vcodec h264 dest.mp4
13.3 dvbsub
13.3.1 选项
- compute_clut
- -2
如果流中没有匹配的CLUT,则计算CLUT一次。
- -1
如果流中没有匹配的CLUT,则计算CLUT。
- 0
永不计算CLUT
- 1
始终计算CLUT并覆盖流中提供的CLUT。
- dvb_substream
选择dvb数据流,如果为-1则为所有数据流,这是默认值。
13.4 dvdsub
此编解码器解码DVD中使用的位图字幕;同样的字幕也可以在VobSub文件和一些Matroska文件中找到。
13.4.1 选项
- palette
指定位图使用的全局调色板。当存储在VobSub中时,调色板通常在索引文件中指定;在Matroska中,调色板以与VobSub相同的格式存储在编解码器额外数据中。在DVD中,调色板存储在IFO文件中,因此在从转储的VOB文件读取时不可用。
此选项的格式为一个包含16个24位十六进制数字(无0x前缀)并以逗号分隔的字符串,例如
0d00ee, ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1, 7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b.- ifo_palette
指定用于获取全局调色板的IFO文件。 (实验性)
- forced_subs_only
仅解码标记为强制的字幕条目。一些标题轨道中有强制和非强制字幕。如果设置此标志为
1将只保留强制字幕。默认值为0.
13.5 libzvbi-teletext
Libzvbi允许libavcodec解码DVB文字广播页面和DVB文字广播字幕。需要在配置期间存在libzvbi头文件和库。您需要明确配置构建使用--enable-libzvbi.
13.5.1 选项
- txt_page
解码文字广播页面号码列表。不匹配指定列表的页面将被丢弃。您可以使用特殊字符串
*匹配所有页面,或使用subtitle匹配所有字幕页面。 默认值为 *。- txt_default_region
设置用于解码的默认字符集,值范围为0到87(参见ETS 300 706,第15节,表32)。默认值为-1,不会覆盖libzvbi默认值。对于无法正确信号报字符集的旧版1.0级传输,此选项是必需的。
- txt_chop_top
丢弃文字广播顶部行。默认值为1。
- txt_format
指定解码字幕的格式。
- bitmap
默认格式,应该为文字广播页面使用此格式,因为某些图形和颜色无法用简单文本或甚至ASS表达。
- text
无格式的简单文本输出。
- ass
格式化的ASS输出,字幕页面和文字广播页面以不同样式返回,字幕页面简化为文本,但努力保留文本对齐和格式。
- txt_left
生成位图的X偏移量,默认值为0。
- txt_top
生成位图的Y偏移量,默认值为0。
- txt_chop_spaces
裁剪生成文本的前后空格并移除空行。此选项对于基于文字广播的字幕非常有用,因为可能在行的开头或结尾存在空格,或由于文字广播双字符的特性,在字幕行之间可能存在空行。 默认值为1。
- txt_duration
设置解码文字广播页面或字幕的显示时长,以毫秒为单位。默认值为-1,表示无穷大或直到下一次字幕事件到来。
- txt_transparent
强制生成文字广播位图的透明背景。默认值为0,表示不透明背景。
- txt_opacity
设置文字广播背景的透明度(0-255)。如果txt_transparent未设置,仅影响字符之间标题框和结束框,通常是字幕。默认值为0如果txt_transparent已设置,否则为255。
14 编码器
编码器是FFmpeg中的配置元素,允许对多媒体流进行编码。
当您配置FFmpeg构建时,所有支持的本机编码器默认启用。需要外部库的编码器必须通过相应选项手动启用。--enable-lib您可以使用配置选项列出所有可用编码器--list-encoders.
您可以使用配置选项禁用所有编码器--disable-encoders并选择性地启用 / 禁用单个编码器,使用选项--enable-encoder=编码器 /
--disable-encoder=编码器.
ff*工具的选项-encoders将显示已启用的编码器列表。
15 音频编码器
以下是一些当前可用音频编码器的说明。
15.1 aac
高级音频编码(AAC)编码器。
此编码器是默认的AAC编码器,已在FFmpeg中本机实现。
15.1.1 选项
- b
以bits/s设置比特率。设置此选项将自动启用恒定比特率(CBR)模式。如果此选项未指定,则设置为128kbps。
- q
为可变比特率(VBR)模式设置质量。此选项仅使用命令行工具有效。对于库接口用户,请使用
ffmpeg命令行。global_quality.- cutoff
设置截止频率。如果未指定,将允许编码器动态调整截止频率以提高低比特率的清晰度。
- aac_coder
设置AAC编码器编码方法。可能的值:
- ‘twoloop’
双循环搜索(TLS)方法。此方法为默认方法。
此方法首先根据频段阈值设置量化器,然后尝试通过从所有量化器中加减特定值并稍微调整某些量化器找到最佳组合。将根据aac_is, aac_ms和aac_pns是否启用自动调整。
- ‘anmr’
基于平均噪声掩蔽率(ANMR)的网格解决方案。
这是一个实验性编码器,当前产生的质量较低,不稳定而且比默认的双循环编码器慢,但有潜力。目前不支持aac_is或aac_pns选项。 当前不推荐使用。
- ‘fast’
恒定量化器方法。
使用双循环算法的更简化版本,不试图进行大量调整。在低比特率(小于64kbps)时表现更差,但在更高比特率时表现更好且速度更快。
- aac_ms
设置中间/侧面编码方式。默认值"auto"将自动使用所有有益于此编码方式的频段。如果使用值"enable"强制所有频段启用,主要用于调试;或者使用"disable"禁用。
- aac_is
设置强度立体声编码工具的使用情况。默认情况下启用,并将在类似的立体声频段对上自动切换IS工具。如果将值设置为"disable",可以禁用以进行调试。
- aac_pns
使用感知噪声替代,替换低熵高频频段为解码过程中不可感知的白噪声。默认开启,可通过设置"disable"禁用用于调试。
- aac_tns
启用多重抽头有限冲击响应滤波器,通过高频频段隐藏量化噪声,在编码过程中使用并由解码器恢复。此功能不仅减少高频范围内的不愉快伪影,还减少高频段的熵,从而使中低频段能使用更多位。默认开启,可通过设置"disable"以进行调试。
- aac_ltp
启用长期预测扩展,通过跨帧扩展频段中恒定谐波峰值,在非常低带宽情况下提高编码效率,例如对声音或独奏钢琴音乐的编码。此选项由profile:a aac_low隐式启用。 与-ar一起减少采样率。
- profile
设置编码配置文件,可能的值:
- ‘aac_low’
默认值,AAC"低复杂性"配置文件。最具兼容性,生成的质量也不错。
- ‘mpeg2_aac_low’
等价于
-profile:a aac_low -aac_pns 0。PNS随着MPEG4规格引入。- ‘aac_ltp’
长期预测配置文件,由启用并启用aac_ltp选项。引入于MPEG4。
如果此选项未指定,则设置为‘aac_low’.
15.2 ac3和ac3_fixed
AC-3音频编码器。
这些编码器部分实现了ATSC A/52:2010和ETSI TS 102 366。
ac3编码器使用浮点数学,而 encoder uses floating-point math, while the ac3_fixed编码器仅使用定点整数数学。这并不意味一个总是更快,只是意味着一个或另一个可能更适合某个特定系统。ac3_fixed编码器不是任何输出格式的默认编解码器,因此必须通过选项明确指定,以使用它。-acodec ac3_fixed选项。
15.2.1 AC-3 元数据
AC-3元数据选项用于设置描述音频的参数,但在大多数情况下不会影响音频编码本身。一些选项直接影响或影响解码和播放结果位流,而其他选项仅用于信息用途。其中一些选项会将比特添加到输出流,可用于音频数据,将影响输出质量。这些在下面的选项列表中将有注释加以指示。
这些参数在一些公开可用的文档中有详细描述。
15.2.1.1 元数据控制选项
- -per_frame_metadata 布尔值
允许逐帧元数据。指定编码器是否应检查每帧的元数据变化。
- 0
初始化时设置的元数据值将用于流中每一帧。(默认)
- 1
元数据值可在编码每帧之前更改。
15.2.1.2 混音等级
- -center_mixlev 等级
中心混音等级。当降混为立体声时,解码器应对中心声道应用的增益量。仅当存在中心声道时,该字段才会被写入比特流。值以比例因子指定。有效值有 3 个:
- 0.707
应用 -3dB 增益
- 0.595
应用 -4.5dB 增益(默认)
- 0.500
应用 -6dB 增益
- -surround_mixlev 等级
环绕混音等级。当降混为立体声时,解码器应对环绕声道应用的增益量。只有在一个或多个环绕声道存在时,该字段才会被写入比特流。值以比例因子指定。有效值有 3 个:
- 0.707
应用 -3dB 增益
- 0.500
应用 -6dB 增益(默认)
- 0.000
静音环绕声道
15.2.1.3 音频制作信息
音频制作信息是描述混音环境的可选信息。这些字段可以都不写入,也可以同时写入比特流。
- -mixing_level 数字
混音等级。指定制作环境中母版化混音的峰值声压级 (SPL)。有效值为 80 到 111,或 -1 表示未知或未指明。默认值为 -1,但如果写入了音频制作信息,该值不能为 -1。因此,如果
room_type选项不是默认值,mixing_level选项必须不是 -1。- -room_type 类型
房间类型。描述混音阶段在工作室或配音阶段的最终混音中使用的均衡类型。一个大房间是具有行业标准 X 曲线均衡的配音阶段;一个小房间具有平直均衡。如果
mixing_level选项和room_type选项都为默认值,本字段将不会写入比特流。- 0
- notindicated
未指明(默认)
- 1
- large
大房间
- 2
- small
小房间
15.2.1.4 其他元数据选项
- -copyright 布尔值
版权指示符。指定此音频是否存在版权。
- 0
- off
没有版权(默认)
- 1
- on
存在版权
- -dialnorm 值
对话规范化。表示节目平均对话电平低于数字 100% 全刻度 (0 dBFS) 的程度。此参数决定音频重放期间的电平调整,将对话的平均音量设置为预设电平。目标是匹配不同节目源之间的音量水平。在音频重放期间,值为 -31dB 将导致相对于原始音量没有音量变化。有效值为 -31 到 -1 的整数,默认为 -31。
- -dsur_mode 模式
杜比环绕模式。指定立体声信号是否使用杜比环绕 (Pro Logic)。此字段仅在音频流为立体声时写入比特流。使用此选项并不表示编码器实际上会应用杜比环绕处理。
- 0
- notindicated
未指明(默认)
- 1
- off
未编码为杜比环绕
- 2
- on
编码为杜比环绕
- -original 布尔值
原始比特流指示符。指定此音频是否为原始来源而非副本。
- 0
- off
非原始来源
- 1
- on
原始来源(默认)
15.2.2 扩展比特流信息
扩展比特流选项是 A/52:2010 标准附录 D 中规定的备用比特流语法的一部分。它分为 2 部分。如果一个分组中的任一参数被指定,则该组中的所有值都将写入比特流。对于那些被写入但未指定的参数,将使用默认值。如果写入了混音等级,解码器将使用这些值替代center_mixlev和surround_mixlev选项指定的值(如果解码器支持备用比特流语法时)。
15.2.2.1 扩展比特流信息 - 第 1 部分
- -dmix_mode 模式
首选立体声降混模式。允许用户选择 Lt/Rt(杜比环绕)或 Lo/Ro(普通立体声)作为首选立体声降混模式。
- 0
- notindicated
未指明(默认)
- 1
- ltrt
首选 Lt/Rt 降混
- 2
- loro
首选 Lo/Ro 降混
- -ltrt_cmixlev 等级
Lt/Rt 中心混音等级。当降混为 Lt/Rt 模式的立体声时,解码器应对中心声道应用的增益量。
- 1.414
应用 +3dB 增益
- 1.189
应用 +1.5dB 增益
- 1.000
应用 0dB 增益
- 0.841
应用 -1.5dB 增益
- 0.707
应用 -3.0dB 增益
- 0.595
应用 -4.5dB 增益(默认)
- 0.500
应用 -6.0dB 增益
- 0.000
静音中心声道
- -ltrt_surmixlev 等级
Lt/Rt 环绕混音等级。当降混为 Lt/Rt 模式的立体声时,解码器应对环绕声道应用的增益量。
- 0.841
应用 -1.5dB 增益
- 0.707
应用 -3.0dB 增益
- 0.595
应用 -4.5dB 增益
- 0.500
应用 -6.0dB 增益(默认)
- 0.000
静音环绕声道
- -loro_cmixlev 等级
Lo/Ro 中心混音等级。当降混为 Lo/Ro 模式的立体声时,解码器应对中心声道应用的增益量。
- 1.414
应用 +3dB 增益
- 1.189
应用 +1.5dB 增益
- 1.000
应用 0dB 增益
- 0.841
应用 -1.5dB 增益
- 0.707
应用 -3.0dB 增益
- 0.595
应用 -4.5dB 增益(默认)
- 0.500
应用 -6.0dB 增益
- 0.000
静音中心声道
- -loro_surmixlev 等级
Lo/Ro 环绕混音等级。当降混为 Lo/Ro 模式的立体声时,解码器应对环绕声道应用的增益量。
- 0.841
应用 -1.5dB 增益
- 0.707
应用 -3.0dB 增益
- 0.595
应用 -4.5dB 增益
- 0.500
应用 -6.0dB 增益(默认)
- 0.000
静音环绕声道
15.2.2.2 扩展比特流信息 - 第 2 部分
- -dsurex_mode 模式
杜比环绕 EX 模式。指示此流是否使用杜比环绕 EX(从 7.1 矩阵到 5.1)。使用此选项并不表示意思是编码器实际上会 应用杜比环绕EX处理。
- 0
- notindicated
未指明(默认)
- 1
- on
杜比环绕 EX 关闭
- 2
- off
杜比环绕 EX 开启
- -dheadphone_mode 模式
杜比耳机模式。表示流是否使用杜比耳机编码 (多声道矩阵化为2.0以供耳机使用)。启用此选项并不意味着编码器实际上会应用杜比耳机 处理。
- 0
- notindicated
未指明(默认)
- 1
- on
杜比耳机关闭
- 2
- off
杜比耳机开启
- -ad_conv_type 类型
A/D 转换器类型。表示音频是否经过了 HDCD A/D 转换。
- 0
- standard
标准 A/D 转换器(默认)
- 1
- hdcd
HDCD A/D 转换器
15.2.3 其他 AC-3 编码选项
- -stereo_rematrixing 布尔值
立体声重矩阵。启用/禁用立体声输入的重矩阵使用。 这是一个可选的 AC-3 功能,通过选择性地将左/右声道编码为中/侧方式来提高质量。此选项默认启用, 强烈建议除非用于测试目的,否则保持启用。
- cutoff 频率
设置低通过滤频率截止。如果未指定,编码器将根据其他编码参数选择默认值。
15.2.4 浮点专用 AC-3 编码选项
这些选项仅对浮点编码器有效,而固定点编码器不支持 因为相应的功能没有在固定点中实现。
- -channel_coupling 布尔值
启用/禁用通道耦合,这是一个可选的 AC-3 功能,通过将多个通道的高频信息结合到一个通道中来提高质量。每通道的高频信息在频率和时间域中以较低的准确度传送。这样可以将更多的比特分配给低频,同时保留足够的信息以重建高频。此选项在浮点编码器中默认启用,一般应保持启用,除非用于测试目的或提高编码速度。
- -1
- auto
由编码器选择(默认)
- 0
- off
禁用通道耦合
- 1
- on
启用通道耦合
- -cpl_start_band 数字值
通道耦合起始频带。从1到15设置通道耦合起始频带。如果使用了高于带宽的值,它将减少到一个低于耦合结束频带的值。如果设置为自动,起始频带将由编码器根据比特率、采样率和通道布局确定。如果通道耦合被禁用,此选项无效。
- -1
- auto
由编码器选择(默认)
15.3 FLAC
FLAC(自由无损音频编码)编码器
15.3.1 选项
以下选项由 FFmpeg 的 FLAC 编码器支持。
- compression_level
设置压缩等级,这将选择许多其他选项的默认值 如果它们没有被显式设置。有效值为0到12,默认值为5。
- frame_size
设置每个通道样本的帧大小。
- lpc_coeff_precision
设置 LPC 系数精度,有效值为1到15,默认值为15。
- lpc_type
设置第一阶段 LPC 算法
- ‘none’
未使用 LPC
- ‘fixed’
固定 LPC 系数
- ‘levinson’
- ‘cholesky’
- lpc_passes
用于 LPC 分析中 Cholesky 分解的通道数
- min_partition_order
最小分区顺序
- max_partition_order
最大分区顺序
- prediction_order_method
- ‘estimation’
- ‘2level’
- ‘4level’
- ‘8level’
- ‘search’
暴力搜索
- ‘log’
- ch_mode
通道模式
- ‘auto’
每帧模式自动选择
- ‘indep’
通道单独编码
- ‘left_side’
- ‘right_side’
- ‘mid_side’
- exact_rice_parameters
选择是否精确或近似计算 Rice 参数。 如果设置为1,则精确计算,可能稍慢但能稍微改善压缩率。
- multi_dim_quant
多维量化。如果设置为1,则在第一阶段之后应用第二阶段LPC 算法以优化系数。这个过程非常慢,但能稍微提升压缩率。
15.4 Opus
Opus 编码器。
这是 Opus 格式的 FFmpeg 原生编码器。目前正在开发中 仅实现了编解码器的 CELT 部分。通常质量较差,最佳情况下与 libopus 编码器相等。
15.4.1 选项
- b
以比特每秒设置比特率。如果未指定,它将根据通道和布局 进行合理估算。
- opus_delay
设置最大延迟(以毫秒为单位)。延迟低于20毫秒会很快降低质量。
15.5 libfdk_aac
libfdk-aac AAC(高级音频编码)编码器包装器。
libfdk-aac 库基于来自 Android 项目的 Fraunhofer FDK AAC 代码。
配置期间需要 libfdk-aac 头文件和库的存在。
您需要通过显式配置构建其中包括--enable-libfdk-aac。该库也与 GPL 不兼容,
因此如果允许使用 GPL,您应该通过--enable-gpl --enable-nonfree --enable-libfdk-aac.
此编码器支持 AAC-HE 配置文件。
通过vbr或flags +qscale启用的 VBR 编码是实验性的,仅适用于某些 参数组合。
支持对 7.1 音频编码仅适用于 libfdk-aac 0.1.3 或更高版本。
有关更多信息,请参阅 fdk-aac 项目http://sourceforge.net/p/opencore-amr/fdk-aac/.
15.5.1 选项
以下选项映射到共享的 FFmpeg 编码器选项。
- b
以比特每秒设置比特率。如果未明确指定比特率,它会 根据所选择的配置文件自动设置为合适的值。
如果启用了 VBR 模式,则忽略此选项。
- ar
设置音频采样率(以赫兹为单位)。
- channels
设置音频通道数。
- flags +qscale
启用固定质量 VBR(可变比特率)模式。 请注意,当vbr值为正时,VBR 被隐式启用。
- cutoff
设置截止频率。如果未指定(或显式设置为 0), 将使用库自动计算的值。默认值为 0。
- profile
设置音频配置文件。
识别以下配置文件:
- ‘aac_low’
低复杂度 AAC(LC)
- ‘aac_he’
高效率 AAC(HE-AAC)
- ‘aac_he_v2’
高效率 AAC 第2版(HE-AACv2)
- ‘aac_ld’
低延迟 AAC(LD)
- ‘aac_eld’
增强低延迟 AAC(ELD)
如果未指定,则默认为aac_low’.
以下是 libfdk_aac 编码器的私有选项。
- afterburner
如果设置为1,则启用补燃功能;如果设置为0,则禁用。 这会提升质量,但也会增加处理能力需求。
默认值为 1。
- eld_sbr
如果设置为1,则为 ELD(增强低延迟编码)启用 SBR(频谱带复制);如果设置为0,则禁用。
默认值为 0。
- eld_v2
如果设置为1,则为 ELDv2(LD-MPS扩展支持EDL立体信号)启用 ELDv2;如果设置为0,则禁用。
注意,当 fdk-aac版本 (AACENCODER_LIB_VL0.AACENCODER_LIB_VL1.AACENCODER_LIB_VL2) > (4.0.0) 时可用。
默认值为 0。
- signaling
设置 SBR/PS 信号样式。
可取以下值之一:
- ‘default’
隐式选择信号(默认显式分层, 当禁用全局头时隐式选择)
- ‘implicit’
隐式向后兼容信号
- ‘explicit_sbr’
显式 SBR,隐式 PS 信号
- ‘explicit_hierarchical’
显式分层信号
默认值为‘default’.
- latm
如果设置为1,则输出LATM/LOAS封装数据;如果设置为0,则禁用该功能。
默认值为0。
- header_period
设置StreamMuxConfig和PCE重复周期(以帧计算),用于在LATM/LOAS传输层内发送带内配置缓冲区。
必须是一个16位的非负整数。
默认值为0。
- vbr
设置VBR模式,从1到5。1表示最低质量(但仍然相当不错),5表示最高质量。值为0将禁用VBR,并启用CBR(恒定比特率)。
当前只有‘aac_low’配置文件支持VBR编码。
VBR模式1-5大致对应以下平均比特率:
- ‘1’
32 kbps/每通道
- ‘2’
40 kbps/每通道
- ‘3’
48-56 kbps/每通道
- ‘4’
64 kbps/每通道
- ‘5’
约80-96 kbps/每通道
默认值为0。
- frame_length
设置音频帧长度(以样本数计算)。默认值为库的内置默认值。有关支持的值,请参阅库的文档。
15.5.2 示例
- 使用
ffmpeg将音频文件转换为M4A(MP4)容器中的VBR AAC:ffmpeg -i input.wav -codec:a libfdk_aac -vbr 3 output.m4a
- 使用
ffmpeg将音频文件转换为CBR 64k kbps AAC,使用高效AAC配置文件:ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he -b:a 64k output.m4a
15.6 liblc3
liblc3 LC3(低复杂性通信编码器)编码器包装器。
需要在配置期间存在liblc3头文件和库。需要显式配置构建,使用--enable-liblc3.
此编码器支持蓝牙SIG LC3编码器用于LE音频协议,以及LC3plus以下特性:
- 帧时长为2.5和5毫秒。
- 高分辨率模式,48 KHz和96 KHz采样率。
有关更多信息,请参阅liblc3项目:https://github.com/google/liblc3.
15.6.1 选项
以下选项映射到共享FFmpeg编解码器选项。
- b 比特率
设置比特率,以比特/秒为单位。这将根据选定的帧时长确定编码帧的固定大小。
- ar 频率
设置音频采样率(以Hz为单位)。
- channels
设置音频通道数。
- frame_duration
设置音频帧时长,以毫秒为单位。默认值为10毫秒。允许的帧时长为2.5毫秒、5毫秒、7.5毫秒和10毫秒。LC3(蓝牙LE音频)允许7.5毫秒和10毫秒;LC3plus允许2.5毫秒、5毫秒和10毫秒。
10毫秒帧时长在LC3和LC3plus标准中可用。在此模式下,生成的比特流可以被引用为LC3或LC3plus。
- high_resolution 布尔值
如果设置为1,启用高分辨率模式。高分辨率模式适用于所有LC3plus帧时长以及48 KHz和96 KHz采样率。
编码器会在较低采样率上自动关闭此模式,并在96 KHz时激活。
建议在高比特率时使用此模式。在此模式下,音频带宽始终达到奈奎斯特频率,与LC3在48 KHz下相比,后者将带宽限制为20 KHz。
15.7 libmp3lame
LAME(Lame不是一个MP3编码器)MP3编码器包装器。
需要在配置期间存在libmp3lame头文件和库。需要显式配置构建,使用--enable-libmp3lame.
参见libshine用于固定点MP3编码器,尽管质量较低。
15.7.1 选项
以下选项由libmp3lame包装器支持。选项的lame等价表示在括号中列出。
- b (-b)
设置CBR或ABR的比特率,以比特/秒为单位。LAME
bitrate以千比特/秒表示。- q (-V)
为VBR设置恒定质量设置。此选项仅在使用时有效
ffmpeg命令行工具。对于库接口用户,请使用global_quality.- compression_level (-q)
设置算法质量。有效参数为0-9范围内的整数,0表示最高质量但最慢,9表示最快但质量最差。
- cutoff (--lowpass)
设置低通截止频率。如果未指定,则编码器动态调整截止点。
- reservoir
启用比特库使用功能,设置为1时启用。默认值为1。LAME默认启用此功能,但可以通过--nores选项覆盖。
- joint_stereo (-m j)
启用编码器在逐帧基础上使用L/R立体声或中/侧立体声,默认值为1。
- abr (--abr)
启用编码器使用ABR,设置为1时启用。
lame--abr设置目标比特率,而此选项仅告诉FFmpeg仍使用ABR,依然依赖b设置比特率。- copyright (-c)
设置MPEG音频版权标志,设置为1则启用。默认值为0(禁用)。
- original (-o)
设置MPEG音频原始标志,设置为1则启用。默认值为1(启用)。
15.8 libopencore-amrnb
OpenCORE自适应多速率窄带编码器。
需要在配置期间存在libopencore-amrnb头文件和库。需要显式配置构建,使用--enable-libopencore-amrnb --enable-version3.
这是一个单声道编码器。官方仅支持8000Hz采样率,但您可以通过设置strict到‘unofficial’或更低值来覆盖。
15.8.1 选项
- b
设置比特率,以比特每秒为单位。仅支持以下比特率,否则libavcodec将舍入到最接近的有效比特率。
- 4750
- 5150
- 5900
- 6700
- 7400
- 7950
- 10200
- 12200
- dtx
当设置为1时,允许不连续传输(生成舒适性噪声)。默认值为0(禁用)。
15.9 libopus
libopus Opus互动音频编码器包装器。
需要在配置期间存在libopus头文件和库。需要显式配置构建,使用--enable-libopus.
15.9.1 选项映射
大多数libopus选项以opusenc工具的模式为基础。以下是libopus包装器支持的选项映射表,以及它们的opusenc等价表示在括号中列出。
- b (bitrate)
设置比特率,以比特/秒为单位。FFmpeg的b选项以比特/秒表示,而
opusenc的bitrate以千比特/秒表示。- vbr (vbr, hard-cbr, and cvbr)
设置VBR模式。FFmpeg的vbr选项有以下有效参数,与
opusenc等价表示选项在括号中列出:- ‘off (hard-cbr)’
使用恒定比特率编码。
- ‘on (vbr)’
使用可变比特率编码(默认值)。
- ‘constrained (cvbr)’
使用受限可变比特率编码。
- compression_level (comp)
设置编码算法复杂性。有效选项范围是0-10的整数。0提供最快但质量较低的编码,10提供最高质量但编码速度最慢。默认值是10。
- frame_duration (framesize)
设置最大帧大小或帧的持续时间,以毫秒为单位。参数必须是以下值之一:2.5、5、10、20、40、60。较小的帧大小在给定比特率下实现较低延迟但较差质量。超过20毫秒的大小仅在相当低比特率下才有意义。默认值是20毫秒。
- packet_loss (expect-loss)
设置预期的包丢失百分比。默认值为0。
- fec (n/a)
启用带内前向错误校正。packet_loss必须为非零值才能利用 - FEC辅助数据的频率与预期包丢失成比例。默认禁用。
- application (N.A.)
设置目标应用类型。有效选项如下:
- ‘voip’
优化语音可懂度。
- ‘audio’
优化对输入的忠实性(默认值)。
- ‘lowdelay’
通过禁用针对语音优化的模式,仅限制为最低延迟模式。
- cutoff (N.A.)
设置截止带宽(单位:赫兹)。参数必须准确为以下值之一:4000、6000、8000、12000或20000,分别对应窄带、中带、宽带、超宽带和全带。默认值为0(禁用截止)。注意,如果比特率< 15 kbps,除非仅使用CELT模式,否则libopus会强制宽带截止。application设置为‘lowdelay’)模式。
- mapping_family (mapping_family)
设置编码器使用的通道映射系列。默认值为-1,对于单声道和立体声输入使用映射系列0,其他情况使用映射系列1。默认情况下,还会禁用libopus中的环绕屏蔽和低频扩展带宽优化,并要求输入包含不超过8个通道。
其他值包括0(单声道和立体声)、1(具有屏蔽和低频扩展带宽优化的环绕声),以及255(具有未指定通道布局的独立流)。
- apply_phase_inv (N.A.) (requires libopus >= 1.2)
如果设置为0,则禁用强度立体声的相位反转,提高单声道混音质量,但会略微降低正常立体声质量。默认值为1(启用相位反转)。
15.10 libshine
Shine定点MP3编码器封装。
Shine是一个定点MP3编码器。在没有FPU的平台(如armel CPUs和一些手机、平板电脑)上表现出色。然而,由于其更注重性能而非质量,因此在质量上不能与LAME和其他生产级编码器媲美。此外,根据项目主页的描述,由于代码是在很久以前编写的,并且项目至少有5年的时间已停止维护,因此该编码器可能并非没有漏洞。
此编码器仅支持立体声和单声道输入。并且只能是CBR(恒定比特率)。
原始项目(最后一次更新是在2007年初)地址为http://sourceforge.net/projects/libshine-fxp/。我们仅支持Savonet/Liquidsoap项目的更新分支,地址为https://github.com/savonet/shine.
在配置期间需要libshine头文件和库的存在。您需要显式配置构建,使用--enable-libshine.
另见libmp3lame.
15.10.1 选项
以下选项由libshine封装支持。shineenc-等效选项在括号中列出。
- b (-b)
设置CBR的比特率(单位:比特/秒)。
shineenc-b选项使用千比特每秒(kb/s)表示。
15.11 libtwolame
TwoLAME MP2编码器封装。
在配置期间需要libtwolame头文件和库的存在。您需要显式配置构建,使用--enable-libtwolame.
15.11.1 选项
以下选项由libtwolame封装支持。twolame-等效的选项遵循FFmpeg的选项,并在括号中列出。
- b (-b)
设置CBR的比特率(单位:比特/秒)。
twolameb该选项以千比特每秒(kb/s)为单位表示。默认值为128k。- q (-V)
设置实验性VBR支持的质量。最大值范围为-50到50,有效范围为-10到10。值越高,质量越好。该选项仅适用于
ffmpeg命令行工具。对于库接口用户,使用global_quality.- mode (--mode)
设置生成音频的模式。可能的值有:
- ‘auto’
根据输入自动选择模式。这是默认值。
- ‘stereo’
立体声
- ‘joint_stereo’
联合立体声
- ‘dual_channel’
双通道
- ‘mono’
单声道
- psymodel (--psyc-mode)
设置编码中使用的心理声学模型。参数必须是-1到4之间的整数。值越高,质量越好。默认值为3。
- energy_levels (--energy)
当设置为1时启用能量级扩展。默认值为0(禁用)。
- error_protection (--protect)
当设置为1时启用CRC错误保护。默认值为0(禁用)。
- copyright (--copyright)
当设置为1时启用MPEG音频版权标志。默认值为0(禁用)。
- original (--original)
当设置为1时启用MPEG音频原创标志。默认值为0(禁用)。
15.12 libvo-amrwbenc
VisualOn自适应多速率宽带编码器。
在配置期间需要libvo-amrwbenc头文件和库的存在。您需要显式配置构建,使用--enable-libvo-amrwbenc --enable-version3.
这是一个仅支持单声道的编码器。官方仅支持16000Hz采样率,但您可以通过设置strict为‘unofficial’或更低值来覆盖。
15.12.1 选项
- b
设置比特率(单位:比特/秒)。仅支持以下比特率,否则libavcodec将四舍五入到最近的有效比特率。
- ‘6600’
- ‘8850’
- ‘12650’
- ‘14250’
- ‘15850’
- ‘18250’
- ‘19850’
- ‘23050’
- ‘23850’
- dtx
当设置为1时允许不连续传输(生成舒适噪声)。默认值为0(禁用)。
15.13 libvorbis
libvorbis编码器封装。
在配置期间需要libvorbisenc头文件和库的存在。您需要显式配置构建,使用--enable-libvorbis.
15.13.1 选项
以下选项由libvorbis封装支持。oggenc-等效选项在括号中列出。
要获得更准确和全面的libvorbis选项文档,请参阅libvorbisenc和oggenc的文档。
详见http://xiph.org/vorbis/,
http://wiki.xiph.org/Vorbis-tools,以及oggenc(1)。
- b (-b)
设置ABR的比特率(单位:比特/秒)。
oggenc-b以千比特每秒(kb/s)表示。- q (-q)
为VBR设置恒定质量设置。值应在-1.0到10.0范围内的浮点数。值越高,质量越好。默认值为‘3.0’.
此选项仅适用于
ffmpeg命令行工具。 对于库接口用户,使用global_quality.- cutoff (--advanced-encode-option lowpass_frequency=N)
设置截止带宽(单位:赫兹),0表示禁用截止。
oggenc的相关选项以千赫兹(kHz)表示。默认值为‘0’(禁用截止)。- minrate (-m)
设置最小比特率(单位:比特/秒)。
oggenc-m以千比特每秒(kb/s)表示。- maxrate (-M)
设置最大比特率(单位:比特/秒)。
oggenc-M以千比特每秒(kb/s)表示。此项仅对ABR模式有效。- iblock (--advanced-encode-option impulse_noisetune=N)
为冲刺块设置噪声地板偏差。值为-15.0到0.0的浮点数。负偏差指示编码器特别注意编码音频中瞬态的清晰度。通过更好的瞬态响应,其代价是更高的比特率。
15.14 mjpeg
运动JPEG编码器。
15.14.1 选项
- huffman
设定霍夫曼编码策略。可能值:
- ‘default’
使用默认的霍夫曼表格。这是默认策略。
- ‘optimal’
计算并使用最佳霍夫曼表格。
15.15 wavpack
WavPack无损音频编码器。
15.15.1 选项
等效选项对应于wavpack命令行工具并列出(括号内)。
15.15.1.1 通用选项
以下通用选项对该编码器有效。此处仅记录关于该特殊编码器的特殊说明。有关选项的一般含义,参见编解码器选项章节.
- frame_size (--blocksize)
对于此编码器,此选项的范围在128到131072之间。默认值基于采样速率和通道数自动决定。
关于默认值计算的完整公式,参见libavcodec/wavpackenc.c.
- compression_level (-f, -h, -hh, and -x)
15.15.1.2 私有选项
- joint_stereo (-j)
设置是否启用联合立体声。有效值为:
- ‘on (1)’
强制中/侧音频编码。
- ‘off (0)’
强制左/右音频编码。
- ‘auto’
让编码器自动决定。
- optimize_mono
设置是否启用单声道优化。仅对非单声道流有效。可用值:
- ‘on’
启用
- ‘off’
禁用
16个视频编码器
下文描述了部分当前可用的视频编码器。
16.1 a64_multi, a64_multi5
A64 / Commodore 64多彩字符集编码器。a64_multi5扩展为第五种颜色(colram)。
16.2 Cinepak
Cinepak又名CVID编码器。 兼容Windows 3.1和老版MacOS。
16.2.1 选项
- g 整数
关键帧间隔。 至少每
-g帧插入一个关键帧,有时更早。- q:v 整数
质量因子。值越低质量越好。值越高码率越低。 下表列出了在不同值时对akiyo_cif.y4m编码的码率。
-q:v与-g 100:-q:v 11918 kb/s-q:v 21735 kb/s-q:v 41500 kb/s-q:v 101041 kb/s-q:v 20826 kb/s-q:v 40553 kb/s-q:v 100394 kb/s-q:v 200312 kb/s-q:v 400266 kb/s-q:v 1000237 kb/s
- max_extra_cb_iterations 整数
额外代码表重新计算的最大次数。更多次数质量更好但速度更慢。
- skip_empty_cb 布尔值
避免浪费字节,忽略老版MacOS解码器。
- max_strips 整数
- min_strips 整数
使用的条带数量的最小值和最大值。 较宽范围有时可提高质量。 更多条带通常质量更好但消耗更多位。 较少条带趋向于生成更多关键帧。 旧版兼容范围为1..3。
- strip_number_adaptivity 整数
允许在帧之间改变条带数量的程度。 值越高质量越好但速度更慢。
16.3 ffv1
FFv1编码器
16.3.1 选项
以下选项由FFmpeg的FFv1编码器支持。
- context
设置上下文大小,0(默认)为小,1为大。
- coder
设置编码器,
- ‘rice’
Golomb Rice编码器
- ‘range_def’
默认表范围编码器
- ‘range_tab’
自定义表范围编码器
- slicecrc
-1(默认,自动),1使用初始和最终状态为零的CRC,2使用初始和最终状态非零的CRC
- qtable
- ‘default’
默认,自动
- ‘8bit’
使用8位默认值
- ‘greater8bit’
使用>8位默认值
- remap_optimizer
0 - 5,默认值3,编码器在优化重映表时投入的努力程度。
16.4 GIF
GIF图像/动画编码器。
16.4.1 选项
- gifflags 整数
设置用于GIF编码的标志。
- offsetting
启用图片偏移。
默认启用。
- transdiff
启用帧之间的透明度检测。
默认启用。
- gifimage 整数
启用对每帧的完整GIF图像编码,而不是动画GIF。
默认值为0.
- global_palette 整数
在全球GIF头中写入一个调色板(如果可行)。
如果禁用,即使有全局调色板提供,每帧总是会写入一个调色板。
默认值为1.
16.5 Hap
Vidvox Hap视频编码器。
16.5.1 选项
- format 整数
指定Hap编码格式。
- hap
- hap_alpha
- hap_q
默认值为hap.
- chunks 整数
指定要分块的帧数量,范围为1到64。此选项允许多线程解码大帧,但可能会增加数据率。编码器可能修改此值来均匀分割帧。
默认值为1.
- compressor 整数
指定二级压缩器使用。若设置为none, chunks将限制为1,因为多块未压缩帧没有优势。
- none
- snappy
默认值为snappy.
16.6 jpeg2000
本地jpeg 2000编码器默认是有损的,可以使用-q:v选项设置编码质量。无损编码可通过-pred 1.
16.6.1 选项
- format 整数
可以设置为
j2k或jp2(默认)可实现存储非RGB像素格式。- tile_width 整数
设置瓦片宽度。范围为1到1073741824。默认值为256。
- tile_height 整数
设置瓦片高度。范围为1到1073741824。默认值为256。
- pred 整数
允许设置离散小波变换(DWT)类型。
- dwt97int (Lossy)
- dwt53 (Lossless)
默认值为
dwt97int- sop 布尔值
启用后在每个数据包的开头添加SOP标记。默认禁用。
- eph 布尔值
启用后在每个数据包头的末尾添加EPH标记。默认禁用。
- prog 整数
设置编码器使用的进程顺序。 可能的值为:
- lrcp
- rlcp
- rpcl
- pcrl
- cprl
默认设置为
lrcp。- layer_rates 字符串
默认情况下,未使用此选项时,压缩基于质量指标进行。 此选项允许根据压缩比进行压缩。每级压缩比可以指定。层的压缩比
l指定了最初的l层中的文件总大小比例。示例用法:
ffmpeg -i input.bmp -c:v jpeg2000 -layer_rates "100,10,1" output.j2k
此选项将图像压缩为包含3个层,其中第一层数据的压缩率为1000倍,前两个层的压缩率为100倍,且使用所有3个层来包含全部数据。
16.7 librav1e
rav1e AV1编码器封装。
需要在配置过程中提供rav1e头文件和库。
需要显式配置构建选项为--enable-librav1e.
16.7.1 选项
- qmax
设置在使用码率模式时使用的最大量化器。
- qmin
设置在使用码率模式时使用的最小量化器。
- qp
使用量化器模式以给定量化器值(0-255)进行编码。
- speed
选择使用的编码速度预设值(0-10)。
- tiles
选择编码时使用的分块数量。
- tile-rows
选择编码时使用的分块行数。
- tile-columns
选择编码时使用的分块列数。
- rav1e-params
使用列表设置rav1e选项键=值以":"分隔的对。 请参见
rav1e --help选项列表。例如,通过以下方式指定librav1e编码选项:-rav1e-params:
ffmpeg -i input -c:v librav1e -b:v 500K -rav1e-params speed=5:low_latency=true output.mp4
16.8 libaom-av1
libaom AV1编码器包装器。
在配置时需要存在libaom的头文件和库。
需要显式配置构建,使用--enable-libaom.
16.8.1 选项
该包装器支持以下标准libavcodec选项:
- b
以比特/秒为单位设置码率目标。 默认情况下这将使用可变码率模式。如果maxrate和minrate也设置为相同的值,则它将使用恒定码率模式; 如果crf也设置,则会使用约束质量模式。
- g keyint_min
设置关键帧放置。 GOP大小设置关键帧之间的最大距离;如果为零,输出流将仅为帧内编码。最小距离被忽略,除非它与GOP大小相同,在这种情况下,关键帧将始终以固定时间间隔出现。 默认情况下未设置,因此在没有此选项的情况下,库可以完全自由选择关键帧的位置。
- qmin qmax
设置最小/最大量化值。 有效范围是0到63(警告:这与实际使用的AV1量化值不匹配——将实际量化值除以四映射到此范围)。默认值为最小/最大(无约束)。
- minrate maxrate bufsize rc_init_occupancy
设置码率控制缓冲参数。 如果未设置,则默认使用不受约束的可变码率。
- threads
设置编码时使用的线程数。这可能需要tiles或row-mt选项也设置以实际充分利用指定的线程数。 默认为主机设备支持的硬件线程数。
- profile
设置编码配置。 默认为使用与输入位深度和色度抽样匹配的配置。
该包装器还具有一些特定选项:
- cpu-used
设置质量/编码速度权衡。 有效范围是0到8,数字越高表示速度越快且质量越低。 默认值为1,这将提供较慢且质量较高的编码。
- auto-alt-ref
启用备用参考帧的使用。 默认为内部库的默认值。
- arnr-max-frames (frames)
设置备用参考帧降噪的最大帧计数。 默认值是-1。
- arnr-strength (strength)
设置备用参考帧降噪滤波强度。 范围是-1到6。默认值是-1。
- aq-mode (aq-mode)
设置自适应量化模式。 可能值包括:
- ‘none (0)’
禁用。
- ‘variance (1)’
基于方差。
- ‘complexity (2)’
基于复杂度。
- ‘cyclic (3)’
循环刷新。
- tune (tune)
设置编码器调优的失真度量。 默认值为
psnr.- ‘psnr (0)’
- ‘ssim (1)’
- lag-in-frames
设置编码器为前瞻目的可能同时保留在内存中的最大帧数。 默认为库的内部默认值。
- error-resilience
启用错误恢复功能:
- default
提升对整个帧丢失的恢复能力。
默认未启用。
- crf
在恒定质量(无码率目标)和约束质量(带最大码率目标)模式下,设置质量/大小权衡。 有效范围是0到63,数字越高表示质量越低且输出大小更小。 仅在设置时使用;默认情况下只使用码率目标。
- static-thresh
设置编码器跳过块变更的阈值。 定义为非负整数的任意单位,默认值为零(没有块被跳过)。
- drop-threshold
设置在接近码率控制范围时丢弃帧的阈值。 定义为目标缓冲区的百分比——当码率控制缓冲区低于此百分比时,将丢弃帧,直到它重新填满到阈值以上。默认值为零(没有帧被丢弃)。
- denoise-noise-level (level)
要移除以进行颗粒合成的噪声量。 如果未设置或设置为0,则禁用颗粒合成。
- denoise-block-size (pixels)
用于颗粒合成的降噪块大小。 如果未设置,AV1编解码器使用默认值32。
- undershoot-pct (pct)
设置目标码率的最低数据速率下限百分比。 范围是-1到100。默认值是-1。
- overshoot-pct (pct)
设置目标码率的最大数据速率上限百分比。 范围是-1到1000。默认值是-1。
- minsection-pct (pct)
GOP码率与目标码率的最小百分比变动。 如果未设置minsection-pct值,libaomenc包装器计算如下:
(minrate * 100 / bitrate)范围是-1到100。默认值是-1(未设置)。- maxsection-pct (pct)
GOP码率与目标码率的最大百分比变动。 如果未设置maxsection-pct值,libaomenc包装器计算如下:
(maxrate * 100 / bitrate)范围是-1到5000。默认值是-1(未设置)。- frame-parallel (boolean)
启用帧并行解码功能。 默认值为true。
- tiles
设置用于编码输入视频的分块数量,作为列x行的形式。 较大的数字允许编码和解码中更高的并行度,但可能降低编码效率。 默认为输入视频大小所需的最小分块数量(对于不超过4K的尺寸,默认值是1x1,即单个分块)。
- tile-columns tile-rows
设置分块的数量,作为分块行和列数量的log2。 为兼容libvpx/VP9提供。
- row-mt (Requires libaom >= 1.0.0-759-g90a15f4f2)
启用基于行的多线程处理。 默认情况下禁用。
- enable-cdef (boolean)
启用约束方向增强滤波器。 libaom-av1编码器默认启用CDEF。
- enable-restoration (boolean)
启用循环恢复滤波器。 libaom-av1默认启用该功能。
- enable-global-motion (boolean)
启用用于块预测的全局运动。 默认值为true。
- enable-intrabc (boolean)
为帧内块预测启用块复制模式。 此模式对屏幕内容非常有用。默认值为true。
- enable-rect-partitions (boolean) (Requires libaom >= v2.0.0)
启用矩形分区。 默认值为true。
- enable-1to4-partitions (boolean) (Requires libaom >= v2.0.0)
启用1:4/4:1分区。 默认值为true。
- enable-ab-partitions (boolean) (Requires libaom >= v2.0.0)
启用AB形状分区。 默认值为true。
- enable-angle-delta (boolean) (Requires libaom >= v2.0.0)
启用角度增量帧内预测。 默认值为true。
- enable-cfl-intra (boolean) (Requires libaom >= v2.0.0)
启用基于亮度预测色度的帧内预测。 默认值为true。
- enable-filter-intra (boolean) (Requires libaom >= v2.0.0)
启用滤波帧内预测器。 默认值为true。
- enable-intra-edge-filter (boolean) (Requires libaom >= v2.0.0)
启用帧内边缘滤波器。 默认值为true。
- enable-smooth-intra (boolean) (Requires libaom >= v2.0.0)
启用光滑帧内预测模式。 默认值为true。
- enable-paeth-intra (boolean) (Requires libaom >= v2.0.0)
启用帕斯预测器的帧内预测。 默认值为true。
- enable-palette (boolean) (Requires libaom >= v2.0.0)
启用调色板预测模式。 默认值为true。
- enable-flip-idtx (boolean) (Requires libaom >= v2.0.0)
启用扩展变换类型,包括FLIPADST_DCT、DCT_FLIPADST、FLIPADST_FLIPADST、ADST_FLIPADST、FLIPADST_ADST、IDTX、V_DCT、H_DCT、V_ADST、H_ADST、V_FLIPADST、H_FLIPADST。默认值为true。
- enable-tx64 (boolean) (Requires libaom >= v2.0.0)
启用64点变换。 默认值为true。
- reduced-tx-type-set (boolean) (Requires libaom >= v2.0.0)
使用减少的变换类型集合。 默认值为false。
- use-intra-dct-only (boolean) (Requires libaom >= v2.0.0)
仅对帧内模式使用DCT。 默认值为false。
- use-inter-dct-only (boolean) (Requires libaom >= v2.0.0)
仅对帧间模式使用DCT。 默认值为false。
- use-intra-default-tx-only (boolean) (Requires libaom >= v2.0.0)
仅对帧内模式使用默认变换。 默认值为false。
- enable-ref-frame-mvs (boolean) (Requires libaom >= v2.0.0)
启用时间运动预测。 默认值为true。
- enable-reduced-reference-set (boolean) (Requires libaom >= v2.0.0)
使用减少的单一和复合参考集合。 默认值为false。
- enable-obmc (boolean) (Requires libaom >= v2.0.0)
启用OBMC。 默认值为true。
- enable-dual-filter (boolean) (Requires libaom >= v2.0.0)
启用双滤波器。 默认值为true。
- enable-diff-wtd-comp (boolean) (Requires libaom >= v2.0.0)
启用差分加权复合。 默认值为true。
- enable-dist-wtd-comp (boolean) (Requires libaom >= v2.0.0)
启用距离加权复合。 默认值为true。
- enable-onesided-comp (boolean) (Requires libaom >= v2.0.0)
启用单侧复合。 默认值为true。
- enable-interinter-wedge (boolean) (Requires libaom >= v2.0.0)
启用帧间楔形复合。 默认值为true。
- enable-interintra-wedge (boolean) (Requires libaom >= v2.0.0)
启用帧内楔形复合。 默认值为true。
- enable-masked-comp (boolean) (Requires libaom >= v2.0.0)
启用遮罩复合。 默认值为true。
- enable-interintra-comp (boolean) (Requires libaom >= v2.0.0)
启用帧内复合。 默认值为true。
- enable-smooth-interintra (boolean) (Requires libaom >= v2.0.0)
启用光滑帧内模式。 默认值为true。
- aom-params
使用列表设置libaom选项键=值以":"分隔的对。 有关支持的选项列表,请参阅
aomenc --help章节的“AV1特定选项”部分。例如,通过以下方式指定libaom编码选项:-aom-params:
ffmpeg -i input -c:v libaom-av1 -b:v 500K -aom-params tune=psnr:enable-tpl-model=1 output.mp4
16.9 liboapv
高级专业视频编解码器编码器包装器。
在配置期间需要liboapv的头文件和库的存在。 需要显式配置构建,使用--enable-liboapv.
许多 liboapv 编码器选项映射到 FFmpeg 全局编解码器选项, 而独特的编码器选项则通过私有选项提供。
apv 项目网站位于https://github.com/AcademySoftwareFoundation/openapv.
16.9.1 选项
liboapv 包装器支持以下选项。
欲获取 liboapv 选项的更广泛文档,请参阅 liboapv 文档。
- preset
设置质量-速度权衡 [最快, 快, 中等, 慢, 极限, 默认]
- qp
为 CQP 码率控制模式设置量化参数值。
- oapv-params (parse_apv_params)
使用以下形式设置 liboapvenc 选项键=值以“:”分隔的键值对。请输入 liboapv 编码器用户指南中列出的参数。
16.10 libsvtav1
SVT-AV1 编码器包装器。
在配置过程中需要存在 SVT-AV1 的头文件和库。
需要显式配置构建--enable-libsvtav1.
16.10.1 选项
- profile
设置编码配置文件。
- ‘main’
- ‘high’
- ‘professional’
- level
设置操作点级别。例如:‘4.0’
- hielevel
设置分级预测级别。
- ‘3level’
- ‘4level’
这是默认值。
- tier
设置操作点层级。
- ‘main’
这是默认值。
- ‘high’
- qmax
在使用比特率模式时设置最大量化器。
- qmin
在使用比特率模式时设置最小量化器。
- crf
在 CRF 码率控制模式中使用的恒定码率因子值 (0-63)。
- qp
在 CQP 码率控制模式中使用的量化值 (0-63)。
- sc_detection
启用场景变更检测。
- la_depth
设置前瞻帧数量 (0-120)。
- preset
设置质量-速度权衡,范围为 0 到 13。更高的值提供更快的速度但质量较低。
- tile_rows
设置要使用的平铺行数的 log2 值 (0-6)。
- tile_columns
设置要使用的平铺列数的 log2 值 (0-4)。
- svtav1-params
使用以下形式设置 SVT-AV1 选项键=值通过“:”分隔的键值对。请参阅 SVT-AV1 编码器用户指南以获取可接受的参数列表。
16.11 libjxl
libjxl JPEG XL 编码器包装器。
在配置过程中需要存在 libjxl 的头文件和库。
需要显式配置构建--enable-libjxl.
16.11.1 选项
libjxl 包装器支持以下选项:
- distance
设置目标 Butteraugli 距离。这是一个质量设置:距离越低,质量越高, 距离=1.0 大致相当于摄影内容中 libjpeg 质量 90。 设置距离=0.0 可实现真正的无损编码。有效值范围为 0.0 到 15.0, 合理值很少超过 5.0。设置距离=0.1 通常可以满足大多数输入的透明度。 默认值为 1.0。
- effort
设置使用的编码努力程度。更高的努力值可以实现更一致的质量, 通常能产生更好的质量/比特率曲线,但需要消耗更多的 CPU 时间。 有效值范围为 1 到 9,默认值为 7。
- modular
强制编码器使用模块化模式,而不是自动选择。默认情况下, 有损编码使用 VarDCT,而无损编码使用模块化模式。对于有损编码来说, VarDCT 通常优于模块化模式,但不支持无损编码。
16.12 libkvazaar
Kvazaar H.265/HEVC 编码器。
在配置过程中需要存在 libkvazaar 的头文件和库。 需要显式配置构建--enable-libkvazaar.
16.12.1 选项
- b
以 bit/s 设置目标视频比特率并启用码率控制。
- kvazaar-params
以键值对列表形式设置 kvazaar 参数名称=值通过逗号 (,) 分隔。请参考 kvazaar 文档以获取选项列表。
16.13 libopenh264
Cisco libopenh264 H.264/MPEG-4 AVC 编码器包装器。
在配置过程中需要存在 libopenh264 的头文件和库。
需要显式配置构建--enable-libopenh264。该库通过以下方式检测pkg-config.
有关该库的更多信息,请参见http://www.openh264.org.
16.13.1 选项
以下 FFmpeg 全局选项会影响 libopenh264 编码器的配置。
- b
设置比特率 (以每秒比特数表示)。
- g
设置 GOP 大小。
- maxrate
设置最大比特率 (以每秒比特数表示)。
- flags +global_header
在比特流中设置全局头。
- slices
设置切片数量,用于并行编码。默认值为 0。此选项仅在slice_mode设置为 ‘fixed’.
- loopfilter
启用环路滤波,如果设置为 1(自动启用),则启用。 若要禁用,请设置为 0。
- profile
设置配置文件限制。如果设置为 ‘main’ 则启用 CABAC (将
SEncParamExt.iEntropyCodingModeFlag标志设置为 1)。- max_nal_size
设置最大 NAL 大小(以字节为单位)。
- allow_skip_frames
如果设置为 1,则允许跳过帧以达到目标比特率。
16.14 libtheora
libtheora Theora 编码器包装器。
在配置过程中需要存在 libtheora 的头文件和库。
需要显式配置构建--enable-libtheora.
有关 libtheora 项目的更多信息,请访问http://www.theora.org/.
16.14.1 选项
以下全局选项映射到内部 libtheora 选项, 影响编码流的质量和比特率。
- b
以 bit/s 设置视频比特率用于恒定比特率(CBR)模式。 如果启用可变比特率(VBR)模式,则此选项被忽略。
- flags
用于通过qscale标志启用恒定质量模式(VBR)编码, 并启用
pass1及pass2模式。- g
设置 GOP 大小。
- global_quality
以 lambda 单位设置全局质量,值为整数。
仅在 VBR 模式通过
flags +qscale启用时相关。值通过FF_QP2LAMBDA进行转换,裁剪到 [0 - 10] 范围, 然后乘以 6.3,以获得原生 libtheora 范围 [0-63] 中的值。 值越高,质量越高。- q
当设置为非负值时启用 VBR 模式,并将恒定质量值设置为 QP 单位中的双浮点值。
该值裁剪到 [0-10] 范围, 然后乘以 6.3,以获得原生 libtheora 范围 [0-63] 中的值。
此选项仅适用于
ffmpeg命令行工具。 对于库接口用户,请使用global_quality.
16.14.2 示例
- 通过设置最大恒定质量(VBR)进行编码
ffmpeg:ffmpeg -i INPUT -codec:v libtheora -q:v 10 OUTPUT.ogg
- 使用
ffmpeg将 CBR 1000 kbps Theora 视频流转换为:ffmpeg -i INPUT -codec:v libtheora -b:v 1000k OUTPUT.ogg
16.15 libvpx
通过 libvpx 支持 VP8/VP9 格式。
在配置过程中需要存在 libvpx 的头文件和库。
需要显式配置构建--enable-libvpx.
16.15.1 选项
以下选项是 libvpx 包装器支持的选项。vpxenc-等效的选项或值在括号中列出,方便迁移。
为了减少文档重复,仅记录了私有选项及部分需要特别注意的选项。对于未记录的通用选项的文档,请参阅编解码器选项章节。.
有关 libvpx 选项更多的文档,请运行以下命令ffmpeg -h encoder=libvpx, ffmpeg -h encoder=libvpx-vp9或vpxenc --help。更多信息可在 libvpx API 文档中查看。
- b (target-bitrate)
设置比特率(单位:bits/s)。注意 FFmpeg 的b选项是以 bits/s 表示,而
vpxenc的target-bitrate是以 kilobits/s 表示的。- g (kf-max-dist)
- keyint_min (kf-min-dist)
- qmin (min-q)
最小(最佳质量)量化器。
- qmax (max-q)
最大(最差质量)量化器。可逐帧更改。
- bufsize (buf-sz, buf-optimal-sz)
设置速率控制缓冲区大小(单位:bits)。注意
vpxenc选项是以毫秒指定的,libvpx 包装器将该值转换如下:buf-sz = bufsize * 1000 / bitrate,buf-optimal-sz = bufsize * 1000 / bitrate * 5 / 6.- rc_init_occupancy (buf-initial-sz)
设置解码开始前加载到速率控制缓冲区中的比特数。注意
vpxenc选项是以毫秒指定的,libvpx 包装器将该值转换如下:rc_init_occupancy * 1000 / bitrate.- undershoot-pct
设置数据速率下限(最小)的目标比特率百分比。
- overshoot-pct
设置数据速率上限(最大)的目标比特率百分比。
- skip_threshold (drop-frame)
- qcomp (bias-pct)
- maxrate (maxsection-pct)
设置 GOP 最大比特率(单位:bits/s)。注意
vpxenc选项是以目标比特率百分比指定的,libvpx 包装器将该值转换如下:(maxrate * 100 / bitrate).- minrate (minsection-pct)
设置 GOP 最小比特率(单位:bits/s)。注意
vpxenc选项是以目标比特率百分比指定的,libvpx 包装器将该值转换如下:(minrate * 100 / bitrate).- minrate, maxrate, b end-usage=cbr
(minrate == maxrate == bitrate).- crf (end-usage=cq, cq-level)
- tune (tune)
- ‘psnr (psnr)’
- ‘ssim (ssim)’
- quality, deadline (deadline)
- ‘best’
使用最佳质量期限。此选项命名不佳且速度较慢,应尽量避免使用,因为它可能提供的质量输出效果不如“良好”。
- ‘good’
使用良好质量期限。这是速度与质量之间的良好权衡选择,尤其是与cpu-used选项结合使用时。
- ‘realtime’
使用实时质量期限。
- speed, cpu-used (cpu-used)
设置质量/速度比率修正值。更高的值会加速编码,但会降低质量。
- nr (noise-sensitivity)
- static-thresh
设置在块变化低于某一阈值下时编码器跳过这些块的逻辑。
- slices (token-parts)
注意 FFmpeg 的slices选项给出了分区的总数,而
vpxenc的token-parts表示为log2(partitions).- max-intra-rate
设置最大 I 帧比特率(以目标比特率百分比表示)。值为 0 表示不受限制。
- force_key_frames
VPX_EFLAG_FORCE_KF- Alternate reference frame related
- auto-alt-ref
启用使用备用参考帧(仅限双通道模式)。值大于 1 表示启用多层备用参考帧(仅 VP9 有效)。
- arnr-maxframes
设置备用参考帧降噪最大帧计数。
- arnr-type
设置备用参考帧降噪滤波器类型:向后、向前、居中。
- arnr-strength
设置备用参考帧降噪滤波器强度。
- rc-lookahead, lag-in-frames (lag-in-frames)
设置预观帧类型和速率控制的帧数量。
- min-gf-interval
设置最小金帧/备用参考帧间隔(仅 VP9 有效)。
- error-resilient
启用错误恢复功能。
- sharpness 整数
在牺牲较低 PSNR 的情况下提高锐度。有效范围为 [0, 7]。
- ts-parameters
使用键值对(以冒号分隔)设置时间可扩展性配置。例如要指定时间可扩展性参数,可以使用
ffmpeg:ffmpeg -i INPUT -c:v libvpx -ts-parameters ts_number_layers=3:\ ts_target_bitrate=250,500,1000:ts_rate_decimator=4,2,1:\ ts_periodicity=4:ts_layer_id=0,2,1,2:ts_layering_mode=3 OUTPUT
以下是每个参数的简要说明,请参阅
struct vpx_codec_enc_cfg在vpx/vpx_encoder.h中获取更多详情。- ts_number_layers
时间编码层的数量。
- ts_target_bitrate
每个时间层的目标比特率(单位:kbps)。 (比特率应包括较低时间层的部分)。
- ts_rate_decimator
每个时间层的帧率减小因子。
- ts_periodicity
定义帧时间层成员资格的序列长度。
- ts_layer_id
定义帧时间层成员资格的模板。
- ts_layering_mode
(可选)从一组预定义的时间分层模式中选择时间结构。 当前支持以下选项。
- 0
内部不提供时间分层标志, 依赖于通过
metadata字段AVFrame传递的值来设置以下键。- vp8-flags
设置传递给编码器的标志以指示当前帧的参考方案。 参见函数
vpx_codec_encode在vpx/vpx_encoder.h中了解更多详情。- temporal_id
显式设置当前需编码帧的时间 ID。
- 2
两个时间层。0-1...
- 3
三个时间层。0-2-1-2...;使用单一参考帧。
- 4
与选项"3"相同,除了在时间周期内的两个时间层 2 帧之间存在依赖关系。
- VP8-specific options
- screen-content-mode
屏幕内容模式,值为以下之一:0(关闭)、1(屏幕)、2(屏幕,带更激进的速率控制)。
- VP9-specific options
- lossless
启用无损模式。
- tile-columns
设置使用的瓦片列数。注意这是按
log2(tile_columns)表示的。例如,要请求 8 个瓦片列,需将tile-columns选项设置为 3。- tile-rows
设置使用的瓦片行数。注意这是按
log2(tile_rows)表示的。 例如,要请求 4 个瓦片行,需将tile-rows选项设置为 2。- frame-parallel
启用帧并行解码功能。
- aq-mode
设置自适应量化模式(0:关闭(默认),1:方差,2:复杂度,3:循环刷新,4:赤道360)。
- colorspace color-space
设置输入颜色空间。VP9 比特流支持以下颜色空间的信号输入:
- ‘rgb’ sRGB
- ‘bt709’ bt709
- ‘unspecified’ unknown
- ‘bt470bg’ bt601
- ‘smpte170m’ smpte170
- ‘smpte240m’ smpte240
- ‘bt2020_ncl’ bt2020
- row-mt 布尔值
启用基于行的多线程处理。
- tune-content
设置内容类型:默认(0),屏幕(1),电影(2)。
- corpus-complexity
语料库 VBR 模式是一种标准 VBR 的变体,其中传递复杂度分布的中点,而不是为特定片段或块计算中点。
有效范围为 [0, 10000]。0(默认)使用标准 VBR。
- enable-tpl 布尔值
启用时间依赖模型。
- ref-frame-config
使用每帧元数据,设置结构的成员
vpx_svc_ref_frame_config_t在vpx/vp8cx.h中用于精细控制参考方案和帧缓冲区管理。
使用键值对列表,以冒号分隔。 例如,av_dict_set(&av_frame->metadata, "ref-frame-config", \ "rfc_update_buffer_slot=7:rfc_lst_fb_idx=0:rfc_gld_fb_idx=1:rfc_alt_fb_idx=2:rfc_reference_last=0:rfc_reference_golden=0:rfc_reference_alt_ref=0");
- rfc_update_buffer_slot
表示更新的缓冲区槽编号。
- rfc_update_last
表示是否更新 LAST 帧。
- rfc_update_golden
表示是否更新黄金帧(GOLDEN)。
- rfc_update_alt_ref
表示是否更新备用参考帧(ALT_REF)。
- rfc_lst_fb_idx
LAST 帧缓冲区索引。
- rfc_gld_fb_idx
GOLDEN 帧缓冲区索引。
- rfc_alt_fb_idx
ALT_REF 帧缓冲区索引。
- rfc_reference_last
表示是否参考 LAST 帧。
- rfc_reference_golden
表示是否参考黄金帧(GOLDEN)。
- rfc_reference_alt_ref
表示是否参考备用参考帧(ALT_REF)。
- rfc_reference_duration
表示帧持续时间。
有关 libvpx 的更多信息,请参阅:http://www.webmproject.org/
16.16 libvvenc
VVenC H.266/VVC编码器封装。
此编码器在配置期间需要存在libvvenc的头文件和库。您需要显式地配置构建方式--enable-libvvenc.
VVenC项目网站位于https://github.com/fraunhoferhhi/vvenc.
16.16.1 支持的像素格式
VVenC仅支持输入10位色彩空间。但内部(编码)位深可以在运行时设置为8位或10位。
16.16.2 选项
- b
设置目标视频码率。
- g
设置GOP大小。目前支持g=1(仅Intra)或默认值。
- preset
设置VVenC预设。
- levelidc
设置级别idc。
- tier
设置vvc层级。
- qp
设置恒定量化参数。
- subopt 布尔值
设置主观(基于感知动机)的优化。默认值为1(开启)。
- bitdepth8 布尔值
设置8位编码模式而非使用10位。默认值为0(关闭)。
- period
设置(Intra)刷新周期,单位为秒。
- vvenc-params
使用键值对列表设置vvenc选项键=值通过":"分隔。参见
vvencapp --fullhelp或vvencFFapp --fullhelp获取选项列表。例如,可以提供选项为:
intraperiod=64:decodingrefreshtype=idr:poc0idr=1:internalbitdepth=8
例如,可以通过以下方式提供编码选项:-vvenc-params:
ffmpeg -i input -c:v libvvenc -b 1M -vvenc-params intraperiod=64:decodingrefreshtype=idr:poc0idr=1:internalbitdepth=8 output.mp4
16.17 libwebp
libwebp WebP图像编码器封装
libwebp是Google官方的WebP图像编码器。它可以在有损或无损模式下编码。有损图像本质上是VP8帧的封装。无损图像是一种Google开发的独立编解码器。
16.17.1 像素格式
目前,libwebp仅支持因为格式和libwebp的限制而限制的有损YUV420和无损RGB。Alpha通道支持两种模式。由于API的限制,如果在编码有损图像时传递RGB或编码无损图像时传递YUV,像素格式将通过libwebp的函数自动转换。这并不理想,仅仅是为了方便。
16.17.2 选项
- -lossless 布尔值
启用/禁用无损模式。默认值为0。
- -compression_level 整数
对于有损模式,这是质量/速度的权衡。较高的值在给定大小时提供更好的质量,代价是编码时间增加。对于无损模式,这是大小/速度的权衡。较高的值提供更小的大小,代价是编码时间增加。更具体地说,它控制了使用的额外算法和压缩工具的数量,并改变这些工具的组合。这与libwebp中的方法选项相对应,有效范围是0到6。默认值为4。
- -quality 浮点数
对于有损编码,这控制图像质量。对于无损编码,这控制压缩时所花费的努力和时间。范围是0到100。默认值为75。
- -preset 类型
配置预设。这会基于一般的图像类型进行一些自动设置。
- none
不使用任何预设。
- default
使用编码器默认值。
- picture
数字图片,如肖像、内部拍摄。
- photo
户外照片,有自然光线。
- drawing
手绘或线条图,有高对比度细节。
- icon
小尺寸的彩色图像。
- text
类似文本的图像。
16.18 libx264, libx264rgb
x264 H.264/MPEG-4 AVC编码器封装。
此编码器在配置期间需要存在libx264的头文件和库。您需要显式地配置构建。--enable-libx264.
libx264支持许多功能,包括8x8和4x4自适应空间转换、自适应B帧放置、CAVLC/CABAC熵编码、交错( MBAFF)、无损模式、细节保留的心理优化(自适应量化、psy-RD、psy-trellis)。
许多libx264编码器选项映射到FFmpeg全局编解码器选项,而唯一的编码器选项则通过私有选项提供。此外还有x264opts和x264-params私有选项允许用户传递libx264x264_param_parse函数接受的键值对列表。
x264项目网站位于http://www.videolan.org/developers/x264.html.
libx264rgb编码器与libx264相同,不同之处在于它接受作为输入的打包RGB像素格式,而不是YUV。
16.18.1 支持的像素格式
x264支持8到10位色彩空间。确切的位深在x264的配置时间被控制。
16.18.2 选项
以下选项由libx264封装支持。x264或等效的选项/值列出,以简化迁移。
为了减少文档的重复,仅记录了私有选项和一些需要特别注意的选项。关于未记录的通用选项的文档,请参见编解码器选项章节。.
要获得libx264选项的更准确和广泛的文档,可执行命令x264 --fullhelp或查阅libx264文档。
在下面的列表中,请注意x264选项名称在libavcodec对应名称之后显示,以表明它们之间存在直接映射关系。
- b (bitrate)
以比特/秒为单位设置码率。注意,FFmpeg的b选项以比特/秒表示,而
x264的bitrate表示为千比特/秒。- bf (bframes)
I帧和P帧之间的B帧数量。
- g (keyint)
最大GOP大小。
- qmin (qpmin)
最小量化器比例。
- qmax (qpmax)
最大量化器比例。
- qdiff (qpstep)
量化器比例差异的最大值。
- qblur (qblur)
量化曲线模糊。
- qcomp (qcomp)
量化曲线缩压因子。
- refs (ref)
每个P帧可以使用的参考帧数量。范围为0-16.
- level (level)
设置
x264_param_t.i_level_idc值,如果值为正,则忽略。此值可以通过
AVCodecContextAPI(例如直接设置AVCodecContext值)来设置,并以整数方式指定其对应的级别映射(例如,值31映射到H.264级别IDC "3.1",如x264_levels表所定义)。当设为负值时会被忽略。或者可以设置为一个私有选项,覆盖API中设置的值。在这种情况下,必须指定为级别IDC标识符(例如"3.1"),如H.264附录A定义。
AVCodecContext, and in this case must be specified as the level IDC identifier (e.g. "3.1"), as defined by H.264 Annex A.- sc_threshold (scenecut)
设置场景更改检测的阈值。
- trellis (trellis)
进行网格量化以提高效率。默认开启。
- nr (nr)
噪声减少。
- me_range (merange)
运动搜索的最大范围,以像素为单位。
- me_method (me)
设置运动估计方法。可能的值按速度递减顺序排列:
- ‘dia (dia)’
- ‘epzs (dia)’
半径为1的菱形搜索(最快)。‘epzs’是‘dia’.
- ‘hex (hex)’
半径为2的六边形搜索。
- ‘umh (umh)’
不均匀多六边形搜索。
- ‘esa (esa)’
穷举搜索。
- ‘tesa (tesa)’
Hadamard穷举搜索(最慢)。
- forced-idr
通常,在强制I帧类型时,编码器可以选择任何类型的I帧。此选项强制它选择IDR帧。
- subq (subme)
子像素运动估计方法。
- b_strategy (b-adapt)
自适应B帧放置决策算法。仅用于第一遍编码。
- keyint_min (min-keyint)
最小GOP大小。
- coder
设置熵编码器。可能的值有:
- ‘ac’
启用CABAC。
- ‘vlc’
启用CAVLC并禁用CABAC。它的效果与
x264的--no-cabac选项相同。
- cmp
设置全像素运动估计比较算法。可能的值有:
- ‘chroma’
在运动估计中启用色度。
- ‘sad’
在运动估计中忽略色度。它的效果与
x264的--no-chroma-me选项相同。
- threads (threads)
编码线程数。
- thread_type
设置多线程技术。可能的值有:
- ‘slice’
基于切片的多线程。效果与
x264的--sliced-threads选项相同。- ‘frame’
基于帧的多线程。
- flags
设置编码标志,通过将其设置为
-cgop,可以禁用关闭的GOP并启用开放式GOP。其效果与x264的--open-gop选项相似。- rc_init_occupancy (vbv-init)
初始VBV缓冲区占用。
- preset (preset)
设置编码预设。
- tune (tune)
设置编码参数的调整。
- profile (profile)
设置配置文件限制。
- fastfirstpass
启用第一遍快速编码设置时,将其设置为1。设置为0时,其效果与
x264的--slow-firstpass选项相同。- crf (crf)
设置恒定质量模式的质量。
- crf_max (crf-max)
在CRF模式下,防止VBV降低质量低于该点。
- qp (qp)
设置恒定量化率控制方法参数。
- aq-mode (aq-mode)
设置AQ方法。可能的值有:
- ‘none (0)’
禁用。
- ‘variance (1)’
方差AQ(复杂性掩码)。
- ‘autovariance (2)’
自动方差AQ(实验性)。
- aq-strength (aq-strength)
设置AQ强度,减少平坦和纹理区域的块状感和模糊感。
- psy
启用心理视觉优化时,设置为1。设置为0时,其效果与
x264的--no-psy选项相同。- psy-rd (psy-rd)
设置心理视觉优化强度,格式为psy-rd:psy-trellis。
- rc-lookahead (rc-lookahead)
设置为帧类型和码率控制提前查看的帧数。
- weightb
启用B帧加权预测时,设置为1。设置为0时,其效果与
x264的--no-weightb选项相同。- weightp (weightp)
设置P帧加权预测方法。可能的值有:
- ‘none (0)’
禁用。
- ‘simple (1)’
仅启用加权参考。
- ‘smart (2)’
启用加权参考和重复。
- ssim (ssim)
启用编码后计算和打印SSIM统计信息。
- intra-refresh (intra-refresh)
设置为1时,使用周期性帧内刷新代替IDR帧。
- avcintra-class (class)
配置编码器以生成AVC-Intra。 有效值为50、100和200。
- bluray-compat (bluray-compat)
配置编码器与蓝光标准兼容。 这是设置 "bluray-compat=1 force-cfr=1" 的速记形式。
- b-bias (b-bias)
设置影响B帧使用频率的程度。
- b-pyramid (b-pyramid)
设置保留某些B帧作为参考的方法。可能的值有:
- ‘none (none)’
禁用。
- ‘strict (strict)’
严格的分层金字塔。
- ‘normal (normal)’
非严格(不兼容蓝光)。
- mixed-refs
设置为1时,每个分区使用一个参考,而不是每个宏块一个参考。设置为0时,其效果与
x264的--no-mixed-refs选项相同。- 8x8dct
设置为1时启用自适应空间变换(高配置8x8变换)。设置为0时,其效果与
x264的--no-8x8dct选项相同。- fast-pskip
设置为1时启用P帧早期SKIP检测。设置为0时,其效果与
x264的--no-fast-pskip选项相同。- aud (aud)
设置为1时启用访问单元分隔符的使用。
- mbtree
设置为1时启用宏块树率控。设置为0时,其效果与
x264的--no-mbtree选项相同。- deblock (deblock)
设置环路过滤器参数,格式为alpha:beta。
- cplxblur (cplxblur)
设置QP波动减少(在曲线压缩前)。
- partitions (partitions)
设置要考虑的分区,使用逗号分隔的值列表。 列表中的可能值:
- ‘p8x8’
8x8 P帧分区。
- ‘p4x4’
4x4 P帧分区。
- ‘b8x8’
4x4 B帧分区。
- ‘i8x8’
8x8 I帧分区。
- ‘i4x4’
4x4 I帧分区。 (启用 ‘p4x4’ 需要启用 ‘p8x8’。启用 ‘i8x8’ 需要启用自适应空间变换(8x8dct选项)。)
- ‘none (none)’
不考虑任何分区。
- ‘all (all)’
考虑所有分区。
- direct-pred (direct)
设置直接MV预测模式。可能的值有:
- ‘none (none)’
禁用MV预测。
- ‘spatial (spatial)’
启用空间预测。
- ‘temporal (temporal)’
启用时间预测。
- ‘auto (auto)’
自动决定。
- slice-max-size (slice-max-size)
设置每个切片大小的限制(以字节为单位)。如果未指定,但指定了RTP有效负载大小(ps),则使用该值。
- stats (stats)
设置多次编码统计数据的文件名。
- nal-hrd (nal-hrd)
设置信号HRD信息(需要vbv-bufsize被设置)。 可能的值:
- ‘none (none)’
禁用HRD信息信号。
- ‘vbr (vbr)’
可变比特率。
- ‘cbr (cbr)’
固定比特率(MP4容器中不允许)。
- x264opts 选项
- x264-params 选项
使用以':'分隔的key=value选项列表覆盖x264配置。
两个选项的参数均为键=值对,通过":"分隔。在x264opts中,值可以省略,在此情况下假定为
1。对于过滤器和心理-速率失真(psy-rd)选项,如果值本身使用":"作为分隔符,请改用","。它们很久以来都支持",",但由于某种原因未被正式记录。
例如,可以提供如下选项:
level=30:bframes=0:weightp=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1:subq=6:8x8dct=0:trellis=0
例如,通过以下方式指定libx264编码选项:
ffmpeg:ffmpeg -i foo.mpg -c:v libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv
要获取libx264选项的完整列表,请运行以下命令:
x264 --fullhelp或查阅libx264文档。- a53cc 布尔值
将封闭字幕(必须为ATSC兼容格式)导入输出。 仅mpeg2和h264解码器提供此功能。默认值为1(开启)。
- udu_sei 布尔值
如果可用,将未注册的SEI用户数据导入输出。默认值为0(关闭)。
- mb_info 布尔值
通过AVFrameSideData设置mb_info数据,仅在通过API使用时有效。默认值为0(关闭)。
为常见用法提供的编码预设, 可与通用预设系统一起使用(例如传递pre选项)。
16.19 libx265
x265 H.265/HEVC编码器封装。
在配置期间,需要存在libx265头文件和库。 您需要显式通过以下命令配置构建:--enable-libx265.
16.19.1 选项
- b
设置目标视频比特率。
- bf
- g
设置GOP大小。
- keyint_min
最小GOP大小。
- refs
每个P帧可使用的参考帧数。范围为1-16.
- preset
设置x265预设。
- tune
设置x265的调优参数。
- profile
设置配置限制。
- crf
设置恒定质量模式的质量。
- qp
设置恒定量化速率控制方法参数。
- qmin
最小量化器比例。
- qmax
最大量化器比例。
- qdiff
量化器比例之间的最大差异。
- qblur
量化曲线模糊
- qcomp
量化曲线压缩系数
- i_qfactor
- b_qfactor
- forced-idr
通常在强制使用I帧类型时,编码器可以选择任何类型的I帧。 此选项强制其选择IDR帧。
- udu_sei 布尔值
如果可用,将未注册的SEI用户数据导入输出。默认值为0(关闭)。
- x265-params
通过列表设置x265选项:键=值对,通过":"分隔。请参阅
x265 --help获取选项列表。例如,通过以下方式指定libx265编码选项:-x265-params:
ffmpeg -i input -c:v libx265 -x265-params crf=26:psy-rd=1 output.mp4
16.20 libxavs2
xavs2 AVS2-P2/IEEE1857.4编码器封装。
在配置期间,需要存在libxavs2头文件和库。 您需要显式通过以下命令配置构建:--enable-libxavs2.
以下是使用的标准libavcodec选项:
- b / bit_rate
- g / gop_size
- bf / max_b_frames
该编码器还具有其特定选项:
16.20.1 选项
- lcu_row_threads
设置1到8之间的行的并行线程数(默认5)。
- initial_qp
设置xavs2量化参数,从1到63(默认34)。 用于设置第一帧的初始qp。
- qp
设置xavs2量化参数,从1到63(默认34)。 用于在恒定QP模式下设置qp值。
- max_qp
设置速率控制的最大qp,从1到63(默认55)。
- min_qp
设置速率控制的最小qp,从1到63(默认20)。
- speed_level
设置速度等级,从0到9(默认0)。等级越高编码越快,但速度越慢。
- log_level
设置日志级别,从-1到3(默认0)。-1:无,0:错误,1:警告,2:信息,3:调试。
- xavs2-params
通过列表设置xavs2选项:键=值对,通过":"分隔。
例如,通过以下方式指定libxavs2编码选项:-xavs2-params:
ffmpeg -i input -c:v libxavs2 -xavs2-params RdoqLevel=0 output.avs2
16.21 libxeve
eXtra-fast Essential Video Encoder (XEVE) MPEG-5 EVC编码器封装。 列出了类似xeve的选项或值,以便于迁移。
在配置期间,需要存在libxeve头文件和库。 您需要显式通过以下命令配置构建:--enable-libxeve.
许多libxeve编码器选项映射到FFmpeg的全局编解码器选项,
而特定的私有选项可以提供独特的编码器功能。
此外,xeve-params私有选项允许通过key=value元组传递与libxeveparse_xeve_params函数接受的内容。
xeve项目网站在https://github.com/mpeg5/xeve.
16.21.1 选项
以下选项由libxeve封装支持。 列出了类似xeve的选项或值,以便于迁移。
为了减少文档的重复, 此处仅说明私有选项和一些需要特别关注的选项。 有关未记录的通用选项的文档,请参阅编解码器选项章节。.
要更准确和更详细地了解libxeve选项,请运行以下命令并查阅文档。xeve_app --help或参考libxeve文档。
- b (bitrate)
以位/秒设置目标视频比特率。 请注意FFmpeg的b选项以位/秒为单位,而xeve的bitrate以千位/秒为单位。
- bf (bframes)
设置B帧的最大数量(1,3,7,15)。
- g (keyint)
设置GOP大小(I帧周期)。
- preset (preset)
设置xeve预设。 根据编码速度设置编码器预设值 [fast, medium, slow, placebo]
- tune (tune)
设置编码器调优参数 [psnr,zerolatency]
- profile (profile)
设置编码器配置文件 [0: baseline; 1: main]
- crf (crf)
为恒定质量模式设置质量。 恒定比特率因子 <10..49> [默认:32]
- qp (qp)
设置恒定量化率控制方法参数。 量化参数 qp <0..51> [默认:32]
- threads (threads)
强制使用特定数量的线程
16.22 libxvid
Xvid MPEG-4 Part 2 编码器包装器。
该编码器在配置期间需要存在 libxvidcore 的头文件和库。需要在构建时显式配置为--enable-libxvid --enable-gpl.
本地mpeg4编码器支持 MPEG-4 Part 2 格式,因此用户无需使用此库即可编码为该格式。
16.22.1 选项
以下选项由 libxvid 包装器支持。以下某些选项列出但未记录,与共享编解码器选项对应。请参阅编解码器选项章节以获取它们的文档。未列出的其他共享选项对 libxvid 编码器无效。
- b
- g
- qmin
- qmax
- mpeg_quant
- threads
- bf
- b_qfactor
- b_qoffset
- flags
设置特定的编码标志。可能的值:
- ‘mv4’
每个宏块使用四个运动矢量。
- ‘aic’
启用高质量 AC 预测。
- ‘gray’
仅编码灰度。
- ‘qpel’
启用四分之一像素运动补偿。
- ‘cgop’
启用封闭 GOP。
- ‘global_header’
将全局头放置在额外数据中,而不是每个关键帧中。
- gmc
启用全局运动补偿 (GMC) 的使用。默认为 0(禁用)。
- me_quality
设置运动估计质量级别。按速度递减和质量递增的顺序的可能值:
- ‘0’
不使用运动估计(默认)。
- ‘1, 2’
为 16x16 块启用高级钻石区域搜索和半像素精炼。
- ‘3, 4’
启用上述所有功能,以及为 8x8 块的高级钻石区域搜索和半像素精炼,同时启用 P 和 B 帧的色度平面运动估计。
- ‘5, 6’
启用上述所有功能,以及扩展的 16x16 和 8x8 块搜索。
- mbd
设置宏块决策算法。按质量递增的顺序的可能值:
- ‘simple’
使用宏块比较函数算法(默认)。
- ‘bits’
为 16x16 块启用基于速率失真的半像素和四分之一像素精炼。
- ‘rd’
启用上述所有功能,以及为 8x8 块的基于速率失真的半像素和四分之一像素精炼,以及使用方形模式的基于速率失真的搜索。
- lumi_aq
在设置为 1 时启用亮度遮蔽自适应量化。默认值为 0(禁用)。
- variance_aq
在设置为 1 时启用方差自适应量化。默认值为 0(禁用)。
与lumi_aq结合使用时,结果质量不会优于其中的任意一个单独指定的质量。换句话说,结果质量将是两者中较差的那个效果。
- trellis
设置基于速率失真的最佳量化。
- ssim
设置结构相似性 (SSIM) 显示方法。可能的值:
- ‘off’
禁用 SSIM 信息显示。
- ‘avg’
在编码结束时输出平均 SSIM 到标准输出。显示平均 SSIM 的格式为:
Average SSIM: %f
对于不了解 C 的用户,%f 表示一个浮点数,或小数(例如 0.939232)。
- ‘frame’
在编码期间输出每帧 SSIM 数据,并在编码结束时输出平均 SSIM 到标准输出。每帧信息的格式为:
SSIM: avg: %1.3f min: %1.3f max: %1.3f
对于不了解 C 的用户,%1.3f 表示一个浮点数,精确到点后三位(例如 0.932)。
- ssim_acc
设置 SSIM 精度。有效选项是 0-4 范围内的整数,其中 0 最准确,4 最快。
16.23 MediaFoundation
提供对 MediaFoundation 框架中的编码器(包括音频和视频)的包装器。它可以访问软件和硬件编码器。视频编码器可以接受 nv12 或 yuv420p 格式的输入(一些编码器支持两者,一些只支持其中一种——实际上,在硬件编码器中 nv12 是更安全的选择)。
16.24 Microsoft RLE
Microsoft RLE 又称 MSRLE 编码器。仅支持 8 位调色板模式。与 Windows 3.1 和 Windows 95 兼容。
16.24.1 选项
- g 整数
关键帧间隔。至少每
-g帧插入一个关键帧,有时更早。
16.25 mpeg2
MPEG-2 视频编码器。
16.25.1 选项
- profile
选择要编码的 mpeg2 配置文件:
- ‘422’
- ‘high’
- ‘ss’
空间可扩展
- ‘snr’
信噪比可扩展
- ‘main’
- ‘simple’
- level
选择要编码的 mpeg2 级别:
- ‘high’
- ‘high1440’
- ‘main’
- ‘low’
- seq_disp_ext 整数
指定编码器是否应将序列显示扩展写入输出。
- -1
- auto
自动决定是否写入(默认值),通过检查要写入的数据是否不同于默认值或未指定值。
- 0
- never
从不写入。
- 1
- always
始终写入。
- video_format 整数
指定写入序列显示扩展中的 video_format,以指示视频图像的来源。默认值为‘unspecified’,可以是‘component’, ‘pal’, ‘ntsc’, ‘secam’或‘mac’。为了最大兼容性,请使用‘component’.
- a53cc 布尔值
将闭路字幕(必须是 ATSC 兼容格式)导入输出。默认值为 1(启用)。
16.26 png
PNG 图像编码器。
16.26.1 选项
- compression_level
设置压缩级别,从 0 到 9(默认值)
16.26.2 私有选项
- dpi 整数
设置每英寸像素的物理密度,默认未设置
- dpm 整数
设置每米像素的物理密度,默认未设置
- pred 方法
设置预测方法(无、子、上、平均、paeth、混合),默认值为 paeth
16.27 ProRes
Apple ProRes 编码器。
FFmpeg 包含 2 个 ProRes 编码器,即 prores-aw 和 prores-ks 编码器。可以使用-vcodec选项选择使用的编码器。
16.27.1 prores-ks 的私有选项
- profile 整数
选择要编码的 ProRes 配置文件
- ‘proxy’
- ‘lt’
- ‘standard’
- ‘hq’
- ‘4444’
- ‘4444xq’
- quant_mat 整数
选择量化矩阵。
- ‘auto’
- ‘default’
- ‘proxy’
- ‘lt’
- ‘standard’
- ‘hq’
如果设置为自动,将选择与配置文件匹配的矩阵。如果未设置,将选择默认提供最高质量的矩阵。
- bits_per_mb 整数
分配给一个宏块编码的位数。不同的配置文件使用 200 到 2400 位之间,最大值为 8000。
- mbs_per_slice 整数
每个切片中的宏块数量(1-8);默认值(8)在几乎所有情况下都适合。
- vendor 字符串
覆盖 4 字节供应商 ID。例如,自定义供应商 ID 可以是apl0,这样流会声明由 Apple 编码器生产。
- alpha_bits 整数
指定 alpha 组件的位数。 可能的值为0, 8和16。 使用0禁用 alpha 平面编码。
16.27.2 速度考虑
在默认的运行模式下,编码器必须符合帧约束 (即不能生成大小超过请求的帧),同时尽可能优化输出图片的质量。 包含许多细节的帧更难压缩,编码器需要花费更多时间 为每个切片寻找合适的量化器。
设置更高的bits_per_mb限制将提高速度。
为达到最快的编码速度,设置qscale参数(推荐值为 4),并且不要设置大小约束。
16.28 QSV 编码器
英特尔 QuickSync 视频编码器系列(MPEG-2、H.264、HEVC、JPEG/MJPEG、 VP9、AV1)
16.28.1 码率控制方法
码率控制方法如下选择:
- 当指定global_quality时,将使用质量模式。
具体来说,这意味着使用
- - CQP- 恒定量化标度,当同时设置了qscale编解码器标志 (即 ffmpeg 选项)。-qscale ffmpeg option).
- - LA_ICQ- 带前视的智能恒定质量模式,当同时设置了look_ahead选项。
- - ICQ- 否则,使用智能恒定质量模式。对于 ICQ 模式,全局质量范围为1到51, 其中1表示最佳质量。
- 否则,当指定了期望的平均码率b选项时,将使用码率模式。
- - LA- 带前视的 VBR 模式,当指定了look_ahead选项。
- - VCM- 视频会议模式,当设置了vcm选项。
- - CBR- 恒定码率,当指定了maxrate且等于平均码率。
- - VBR- 可变码率,当指定了maxrate但高于平均码率。
- - AVBR- 平均 VBR 模式,当未指定maxrate,且avbr_accuracy和avbr_convergence都设置为非零值。此模式适用于 Windows 上的 H264 和 HEVC。
- 否则默认的码率控制方法CQP将被使用。
请注意,根据您的系统,编码器可能会选择与您指定的模式不同的模式。 设置详细级别为verbose或更高以查看 QSV 运行时使用的实际设置。
16.28.2 全局选项 -> MSDK 选项
其他 libavcodec 全局选项映射到 MSDK 选项如下:
- g/gop_size -> GopPicSize
- bf/max_b_frames+1 -> GopRefDist
- rc_init_occupancy/rc_initial_buffer_occupancy -> InitialDelayInKB
- slices -> NumSlice
- refs -> NumRefFrame
- b_strategy/b_frame_strategy -> BRefType
- cgop/CLOSED_GOP编解码器标志 ->GopOptFlag
- 对于CQP模式,i_qfactor/i_qoffset和b_qfactor/b_qoffset设置QPP和QPI的差值, 以及QPP和QPB的差值。
- 将coder选项设置为vlc值将使 H.264 编码器使用 CAVLC 而不是 CABAC。
16.28.3 通用选项
以下选项被所有 qsv 编码器使用。
- async_depth
指定应用程序在显式同步结果之前执行的异步操作数量。如果为零,则未指定该值。
- preset
此选项提供了一系列选择,从 veryfast(最佳速度)到 veryslow(最佳质量)。
- ‘veryfast’
- ‘faster’
- ‘fast’
- ‘medium’
- ‘slow’
- ‘slower’
- ‘veryslow’
- forced_idr
将 I 帧强制为 IDR 帧。
- low_power
对于编码器,将此标志设置为 ON 以减少功耗和 GPU 使用。
16.28.4 运行时选项
以下选项可用于 qsv 编码期间。
- global_quality
- i_quant_factor
- i_quant_offset
- b_quant_factor
- b_quant_offset
在 h264_qsv 和 hevc_qsv 中支持。 更改这些值以重置 qsv 编码器的 qp 配置。
- max_frame_size
在 h264_qsv 和 hevc_qsv 中支持。 更改此值以重置 qsv 编码器的 MaxFrameSize 配置。
- gop_size
更改此值以重置 qsv 编码器的 gop 配置。
- int_ref_type
- int_ref_cycle_size
- int_ref_qp_delta
- int_ref_cycle_dist
在 h264_qsv 和 hevc_qsv 中支持。 更改这些值以重置 qsv 编码器的内部刷新配置。
- qmax
- qmin
- max_qp_i
- 最小QP I帧
- 最大QP P帧
- 最小QP P帧
- 最大QP B帧
- 最小QP B帧
支持h264_qsv。 更改这些值以重置QSV编解码器的最大/最小QP配置。
- 低延迟码率控制
支持h264_qsv、hevc_qsv和av1_qsv。 更改此值以重置QSV编解码器的低延迟码率控制(low_delay_brc)配置。
- 帧率
更改此值以重置QSV编解码器的帧率配置。
- 比特率
- 码率缓冲区大小
- 码率初始缓冲区占用量
- 码率最大值
更改这些值以重置QSV编解码器的码率控制配置。
- 图片时序SEI
支持h264_qsv和hevc_qsv。 更改此值以重置QSV编解码器的图片时序SEI配置。
- qsv参数
设置QSV编码器参数为用冒号分隔的键值对列表。
参数qsv_params格式应为
key1=value1:key2=value2:....这些参数直接通过MFXSetParameter函数传递给底层的Intel Quick Sync Video (QSV) 编码器。
示例:
ffmpeg -i input.mp4 -c:v h264_qsv -qsv_params "CodingOption1=1:CodingOption2=2" output.mp4
此选项允许对QSV编码器提供的各种编码器特定设置进行细粒度控制。
16.28.5 H264选项
这些选项由h264_qsv使用
- 扩展码率控制
扩展比特率控制。
- 恢复点SEI
设置此标志以在每次帧内刷新周期的开头插入恢复点SEI消息。
- 率失真优化
启用率失真优化。
- 最大帧大小
编码后帧的最大大小(以字节为单位)。
- 最大I帧大小
I帧的最大编码帧大小(以字节为单位)。如果该值大于0,则I帧会忽略由max_frame_size设置的值。
- 最大P帧大小
P帧的最大编码帧大小(以字节为单位)。如果该值大于0,则P帧会忽略由max_frame_size设置的值。
- 最大切片大小
编码后切片的最大大小(以字节为单位)。
- 码率限制
切换码率限制。 修改码率使之在QSV编码器施加的范围内。关闭此标志可能导致HRD一致性受到破坏。请注意,将码率设置在QSV编码器范围以下可能会显著影响质量。如果开启此选项,则在非CQP模式下:如果码率不在QSV编码器施加的范围内,它将被调整到范围内。
- 宏块级码率控制
设置此标志可启用宏块级码率控制,这通常可以提高主观视觉质量。启用此标志可能对性能和客观视觉质量指标产生负面影响。
- 低延迟码率控制
设置此标志可打开或关闭QSV插件中的低延迟码率控制功能,用以提供更准确的码率控制,以最小化逐帧码流大小的变化。值:-1-默认 0-关闭 1-开启
- 自适应I帧
此标志控制QSV编码器插入I帧。打开此标志以允许将帧类型从P和B更改为I帧。
- 自适应B帧
此标志控制将帧类型从B更改为P帧。
- P策略
启用P金字塔:0-默认 1-简单 2-金字塔(需要将bf设置为0)。
- B策略
此选项控制使用B帧作为参考帧。
- 去块滤波IDC
此选项禁用去块滤波。值的范围为0~2。
- CAVLC
如果设置,则使用CAVLC;如果未设置,则使用CABAC进行编码。
- 视频会议模式
视频会议模式,请参考码率控制方法。
- IDR间隔
IDR帧之间的距离(以I帧为单位)。
- 图片时序SEI
插入带pic_struct_syntax元素的图片时序SEI。
- 单SEI NAL单元
将所有SEI消息放入一个NALU。
- 最大解码帧缓冲区
DPB中缓冲的最大帧数。
- 预先查看
使用具有预先查看的VBR算法。
- 预先查看深度
预先查看的帧数深度。
- 预先查看降采样
预先查看分析用到的降采样因子。
- ‘unknown’
- ‘auto’
- ‘off’
- ‘2x’
- ‘4x’
- 帧内刷新类型
指定帧内刷新类型。 帧内刷新的主要目标是改善错误恢复能力,同时不显著影响由I帧引起的编码位流大小。无表示没有刷新。垂直表示按宏块列进行垂直刷新。水平表示按宏块行进行水平刷新。切片表示按切片进行水平刷新且无重叠。切片在此模式下,in_ref_cycle_size将被忽略。启用帧内刷新时,B帧需要设置为0。
- 帧内刷新周期大小
指定刷新周期内的帧数量,最小值为2。0和1是无效值。
- 帧内刷新QP差值
指定插入帧内宏块的QP差值。该值范围为[-51, 51],对于8位亮度样本编码;10位为[-63, 63],12位为[-75, 75]。
- 帧内刷新周期距离
帧内刷新周期开头之间的距离(以帧为单位)。
- 配置文件
- ‘unknown’
- ‘baseline’
- ‘main’
- ‘high’
- A53闭路字幕
使用A53闭路字幕(如果有)。
- 访问单元分隔符
插入访问单元分隔符NAL。
- 多帧模式
多帧模式。
- ‘off’
- ‘auto’
- 重复PPS
每帧重复发送 pps。
- max_qp_i
I 帧最大视频量化比例。
- min_qp_i
I 帧最小视频量化比例。
- max_qp_p
P 帧最大视频量化比例。
- min_qp_p
P 帧最小视频量化比例。
- max_qp_b
B 帧最大视频量化比例。
- min_qp_b
B 帧最小视频量化比例。
- scenario
向编码器提供编码会话场景的提示。
- ‘unknown’
- ‘displayremoting’
- ‘videoconference’
- ‘archive’
- ‘livestreaming’
- ‘cameracapture’
- ‘videosurveillance’
- ‘gamestreaming’
- ‘remotegaming’
- avbr_accuracy
AVBR 码率控制的准确度(百分之十分的单位)。
- avbr_convergence
AVBR 码率控制的收敛性(单位为100帧)。
参数avbr_accuracy和avbr_convergence是针对平均可变码率控制(AVBR)算法的。该算法专注于总体编码质量,同时满足指定码率target_bitrate,在avbr_accuracy范围内,经过avbr_Convergence周期后达到目标。这种方法不遵循HRD,瞬时码率不会被限制或填补。
- skip_frame
使用每帧元数据 "qsv_skip_frame" 在编码时跳过帧。此选项定义该元数据的用法。
- ‘no_skip’
帧跳过被禁用。
- ‘insert_dummy’
编码器在视频流中插入所有宏块都编码为跳过的帧。
- ‘insert_nothing’
类似于插入虚拟帧,但编码器在视频流中不插入任何内容。被跳过的帧仍在码率控制中被使用。例如,gop仍然包含跳过的帧,并且跳过帧后的帧大小将更大。
- ‘brc_only’
skip_frame 元数据指示当前帧之前丢失帧的数量。
16.28.6 HEVC 选项
这些选项由 hevc_qsv 使用。
- extbrc
扩展码率控制。
- recovery_point_sei
设置此标志以在每个内部刷新周期的开始处插入恢复点 SEI 消息。
- rdo
启用码率失真优化。
- max_frame_size
最大编码帧大小(以字节为单位)。
- max_frame_size_i
I 帧的最大编码帧大小(以字节为单位)。如果此值设置为大于零,则对于 I 帧,将忽略 max_frame_size 设置的值。
- max_frame_size_p
P 帧的最大编码帧大小(以字节为单位)。如果此值设置为大于零,则对于 P 帧,将忽略 max_frame_size 设置的值。
- max_slice_size
最大编码片大小(以字节为单位)。
- mbbrc
设置此标志启用宏块级码率控制,通常可改善主观视觉质量。启用此标志可能会对性能和客观视觉质量指标产生负面影响。
- low_delay_brc
设置此标志在 qsv 插件中开启或关闭 LowDelayBRC 特性,该特性提供更准确的码率控制以尽量减少逐帧视频流大小的变化。值:-1-默认 0-关闭 1-开启
- adaptive_i
此标志控制 QSV 编码器插入 I 帧的行为。开启此标志允许将帧类型从 P 和 B 改变为 I。
- adaptive_b
此标志控制将帧类型从 B 改变为 P。
- p_strategy
启用 P 金字塔:0-默认 1-简单 2-金字塔(需要将 bf 设置为 0)。
- b_strategy
此选项控制使用 B 帧作为参考。
- dblk_idc
此选项禁用去块滤波。其值范围为 0~2。
- idr_interval
IDR 帧之间的距离(以 I 帧为单位)。
- ‘begin_only’
仅在流的开头输出 IDR 帧。
- load_plugin
在内部会话中加载用户插件。
- ‘none’
- ‘hevc_sw’
- ‘hevc_hw’
- load_plugins
一个十六进制插件 UID 列表,使用冒号分隔以在内部会话中加载。
- look_ahead_depth
提前查看深度(以帧数为单位),在启用 extbrc 选项时可用。
- profile
设置编码配置文件(scc 需要 libmfx >= 1.32)。
- ‘unknown’
- ‘main’
- ‘main10’
- ‘mainsp’
- ‘rext’
- ‘scc’
- tier
设置编码层级(仅限支持高层级的级别>=4)。 此选项仅在指定 level 选项时生效。
- ‘main’
- ‘high’
- gpb
1:GPB(通用 P/B 帧)
0:常规 P 帧。
- tile_cols
用于分块编码的列数。
- tile_rows
用于分块编码的行数。
- aud
插入访问单元分隔符 NAL。
- pic_timing_sei
插入带有 pic_struct_syntax 元素的图片计时 SEI。
- transform_skip
将此选项打开以启用 transformskip。支持平台为等于或更新于 ICL。
- int_ref_type
指定内部刷新类型。内部刷新的主要目标是在不显著影响由 I 帧引起的编码视频流大小的情况下提高错误恢复能力。SDK 编码器通过在刷新周期内使用内部宏块编码视频流的部分帧来实现此目标。none表示无刷新。vertical表示纵向刷新,通过宏块列进行。horizontal表示横向刷新,通过宏块行进行。切片指的是不重叠的水平刷新切片。若选择切片,则忽略in_ref_cycle_size。要启用帧内刷新,需将B帧设置为0。
- 内部刷新周期大小
指定刷新周期中的图片数量,最小值为2。0和1是无效值。
- 内部刷新QP偏移量
指定插入的帧内宏块的QP差值。当亮度样本的目标编码比特深度为8时,为[-51, 51]范围;比特深度为10时,为[-63, 63]范围;比特深度为12时,为[-75, 75]范围。
- 内部刷新周期间隔
指定帧内刷新周期起始之间的帧间隔。
- I帧的最大QP值
I帧的量化器比例最大值。
- I帧的最小QP值
I帧的量化器比例最小值。
- P帧的最大QP值
P帧的量化器比例最大值。
- P帧的最小QP值
P帧的量化器比例最小值。
- B帧的最大QP值
B帧的量化器比例最大值。
- B帧的最小QP值
B帧的量化器比例最小值。
- 场景
为编码会话提供场景提示。
- ‘unknown’
- ‘displayremoting’
- ‘videoconference’
- ‘archive’
- ‘livestreaming’
- ‘cameracapture’
- ‘videosurveillance’
- ‘gamestreaming’
- ‘remotegaming’
- AVBR精确度
AVBR码率控制的精确度(以十分之一百分比为单位)。
- AVBR收敛
AVBR码率控制的收敛度(以100帧为单位)。
参数AVBR精确度和AVBR收敛用于平均可变比特率控制(AVBR)算法。该算法侧重于在满足指定比特率目标码率的情况下,在精确范围AVBR精确度内实现总体编码质量的优化,并在AVBR收敛周期后达到收敛。此方法不遵循HRD,且即时比特率不会被限制或填充。
- 跳过帧
使用每帧元数据"qsv_skip_frame"在编码时跳过帧。此选项定义了该元数据的使用方式。
- ‘no_skip’
禁用帧跳过。
- ‘insert_dummy’
编码器在比特流中插入所有宏块都编码为跳过的帧。
- ‘insert_nothing’
类似于插入占位帧,但编码器在比特流中不插入任何内容。跳过的帧仍会用于码率控制。例如,GOP仍包含跳过帧,且跳过帧后的帧尺寸会更大。
- ‘brc_only’
skip_frame元数据指示当前帧之前未处理的帧数。
16.28.7 MPEG2选项
这些选项用于mpeg2_qsv
- 配置文件
- ‘unknown’
- ‘simple’
- ‘main’
- ‘high’
16.28.8 VP9选项
这些选项用于vp9_qsv
- 配置文件
- ‘unknown’
- ‘profile0’
- ‘profile1’
- ‘profile2’
- ‘profile3’
- 瓦片列
用于瓦片编码的列数(需要libmfx >= 1.29)。
- 瓦片行
用于瓦片编码的行数(需要libmfx >= 1.29)。
16.28.9 AV1选项
这些选项用于av1_qsv(需要libvpl)。
- 配置文件
- ‘unknown’
- ‘main’
- 瓦片列
用于瓦片编码的列数。
- 瓦片行
用于瓦片编码的行数。
- 自适应I帧
此标志控制QSV编码器是否插入I帧。启用此标志可允许帧类型从P或B更改为I。
- 自适应B帧
此标志控制帧类型从B更改为P。
- B策略
此选项控制B帧是否用作参考。
- 扩展码率控制
扩展码率控制。
- 前视深度
前视深度的帧数,当启用扩展码率控制选项时可用。
- 低延迟BRC
设置此标志启用或禁用qsv插件中的低延迟BRC功能,该功能为逐帧最小化比特流大小变化提供更准确的码率控制。值: -1默认值 0关闭 1开启
- 最大帧大小
为每帧设置允许的最大字节数大小。如果帧大小超过限制,编码器将调整QP值以控制帧大小。在CQP码率控制模式下无效。
- I帧的最大帧大小
以字节为单位设置I帧的最大编码帧大小。如果该值大于0,则对于I帧,将忽略max_frame_size设置的值。
- P帧的最大帧大小
以字节为单位设置P帧的最大编码帧大小。如果该值大于0,则对于P帧,将忽略max_frame_size设置的值。
16.29雪(snow)
16.29.1选项
- iterative_dia_size
用于迭代运动估计的直径大小
16.30 VAAPI编码器
通过VAAPI可访问的硬件编码器的包装。
这些编码器仅接受VAAPI硬件表面中的输入。如果输入是软件帧,请使用hwupload过滤器将它们上传到GPU。
使用以下标准的libavcodec选项:
- g / gop_size
- bf / max_b_frames
- profile
如果未设置,这将根据输入帧的格式和驱动程序支持的配置文件自动确定。
- level
- b / bit_rate
- maxrate / rc_max_rate
- bufsize / rc_buffer_size
- rc_init_occupancy / rc_initial_buffer_occupancy
- compression_level
速度/质量权衡:值越高,速度越快/质量越差。
- q / global_quality
大小/质量权衡:值越高,大小越小/质量越差。
- qmin
- qmax
- i_qfactor / i_quant_factor
- i_qoffset / i_quant_offset
- b_qfactor / b_quant_factor
- b_qoffset / b_quant_offset
- slices
所有编码器支持以下选项:
- low_power
某些驱动程序/平台为某些编解码器提供第二种编码器,旨在比默认编码器消耗更少的功率;设置此选项将尝试使用该编码器。请注意,它可能支持的功能集减少,因此在此模式下某些其他选项可能不可用。
- idr_interval
在开放GOP模式中,设置完全刷新(IDR)帧之间的正常帧内帧数量。这些帧内帧仍是IRAP,但不会包含全局标题,并且可能有不可解码的领先图片。
- b_depth
设置B帧参考深度。默认值为1时,所有B帧仅引用P帧或I帧。当设置为更高值时,将存在多个B帧层,每层帧只引用更高层的帧。
- async_depth
最大处理并行度。增加该值以提高单通道性能。如果驱动程序未实现vaSyncBuffer函数,则该选项不起作用。如果设置了大量的async_depth,请确保分配了足够的硬件帧。
- max_frame_size
设置每帧的允许最大字节数大小。如果帧大小超过限制,编码器将调整QP值以控制帧大小。在CQP码率控制模式下无效。
- rc_mode
设置要使用的码率控制模式。某些驱动程序可能仅支持某些模式。
可能的模式:
- auto
根据驱动程序支持和其他选项自动选择模式。这是默认设定。
- CQP
恒定质量。
- CBR
恒定码率。
- VBR
可变码率。
- ICQ
智能恒定质量。
- QVBR
质量定义的可变码率。
- AVBR
平均可变码率。
- blbrc
启用块级速率控制,为每个块分配不同的码率。 CQP模式无效。
每个编码器还具有其特定的选项:
- av1_vaapi
profile设置值seq_profile. tier设置值seq_tier. level设置值seq_level_idx.
- tiles
设置用于编码输入视频的瓦片数量,以列x行的形式表示。 (默认值为自动,这意味着使用最少的瓦片列/行数)。
- tile_groups
设置瓦片组数量。所有瓦片将尽可能均匀地分配给每个瓦片组。(默认值为1)。
- h264_vaapi
profile设置值profile_idc和constraint_set*_flag。level设置值level_idc.
- coder
设置熵编码器(默认值为cabac)。可能的值:
- ‘ac’
- ‘cabac’
使用CABAC。
- ‘vlc’
- ‘cavlc’
使用CAVLC。
- aud
在流中包含访问单元分隔符(默认情况下不包含)。
- sei
设置要包含的SEI消息类型。 以下值的一些组合:
- ‘identifier’
包含一个user_data_unregistered消息,包含有关编码器的信息。
- ‘timing’
包含图片时间参数(buffering_period和pic_timing消息)。
- ‘recovery_point’
包含适当的恢复点(recovery_point消息)。
- hevc_vaapi
profile和level设置值general_profile_idc和general_level_idc分别。
- aud
在流中包含访问单元分隔符(默认情况下不包含)。
- tier
设置general_tier_flag。这可能会影响流选择的级别 如果没有明确指定。
- sei
设置要包含的SEI消息类型。 以下值的一些组合:
- ‘hdr’
如果输入帧具有HDR元数据,则包含HDR元数据 (mastering_display_colour_volume和content_light_level消息)。
- tiles
设置用于编码输入视频的瓦片数量,以列x行的形式表示。 较大的数量允许在编码和解码方面有更大的并行性,但 可能会降低编码效率。
- mjpeg_vaapi
仅支持基线DCT编码。编码器始终使用标准 量化和霍夫曼表 -global_quality缩放标准量化表(范围1-100)。
对于YUV,支持4:2:0, 4:2:2和4:4:4的采样模式。RGB也 支持,并会创建一个RGB的JPEG。
- jfif
在每个帧中包含JFIF头(默认情况下不包含)。
- huffman
包含标准霍夫曼表(默认开启)。关闭此选项将节省 每个输出帧中的几百字节,但可能会失去与某些 不完全支持MJPEG的JPEG解码器的兼容性。
- mpeg2_vaapi
profile和level设置值profile_and_level_indication.
- vp8_vaapi
不支持B帧。
global_quality设置q_idx用于非关键帧的值(范围0-127)。
- loop_filter_level
- loop_filter_sharpness
手动设置环路过滤参数。
- vp9_vaapi
global_quality设置q_idx用于P帧的值(范围0-255)。
- loop_filter_level
- loop_filter_sharpness
手动设置环路过滤参数。
支持B帧,但输出流始终以编码顺序而非显示顺序。 如果启用B帧,可能需要使用vp9_raw_reorder比特流过滤器修改输出流以按正确顺序显示帧。
仅产生普通帧 - 可能需要vp9_superframe比特流过滤器才能产生所有解码器可用的流。
16.31 vbn
Vizrt二进制图像编码器。
此格式由广播供应商Vizrt用于快速纹理流传输。 不支持格式的高级功能,例如纹理数据的LZW压缩或 生成mipmaps。
16.31.1 选项
- format 字符串
设置VBN文件使用的纹理压缩。可以是dxt1, dxt5或raw。默认值是dxt5.
16.32 vc2
SMPTE VC-2(以前称为BBC Dirac Pro)。此编解码器主要面向 专业广播,但由于它支持yuv420、yuv422和yuv444, 以及 8(限制范围或全范围)、10或12位,这使得其适合用于 需要低开销和低压缩的其他任务(如屏幕录制)。
16.32.1 选项
- b
设置目标视频码率。通常这是未压缩视频码率的约1:6 (例如,对于1920x1080 50fps yuv422p10,约为400Mbps)。更高的值(接近未压缩码率) 启用无损压缩模式。
- field_order
为隔行输入启用场编码(例如设置为tt - 先上场)。 由于分割这些场并分别编码,应该增加隔行内容的压缩。
- wavelet_depth
设置要应用的总小波变换数量,在1到5之间(默认值)。 较低的值降低压缩和质量。较低能力的解码器可能无法 处理超过3的值。wavelet_depth over 3.
- wavelet_type
设置变换类型。目前仅实现了5_3(LeGall)和9_7(Deslauriers-Dubuc) ,其中9_7具有更好的压缩性能,因此 是默认值。
- slice_width
- slice_height
设置每个切片的切片大小。较大的值会带来更好的压缩效果。 为了与其他限制更多的解码器兼容,请使用slice_width为32 和slice_height为8。
- tolerance
设置速率控制系统的欠载容限百分比。这是 为了防止运行昂贵的搜索。
- qm
设置默认或当wavelet_depth值为5时使用的量化矩阵预设。
- - 默认使用规定中的默认量化矩阵,并扩展到第五级的值。 这样可以在保留细节和消除伪影之间实现良好的平衡。
- - 平坦使用完全归零的量化矩阵。这增加了PSNR,但可能 降低感知效果。用于虚假的基准测试。
- - 颜色减少细节,但尝试在极低码率下保留颜色。
17 字幕编码器
17.1 dvdsub
此编解码器编码DVD中使用的位图字幕格式。 通常存储在VOBSUB文件对中(*.idx + *.sub), 它们也可以用于Matroska文件中。
17.1.1 选项
- palette
指定用于位图的全局调色板。
此选项的格式是一个包含16个24位十六进制数字(无0x前缀)的字符串, 这些数字之间用逗号分隔,例如
0d00ee, ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1, 7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b.- even_rows_fix
当设置为1时,启用一种解决方法,使所有字幕的像素行数均为偶数。这解决了某些播放器在行数为奇数时会截断底行的问题。如果需要,此解决方法会添加一个完全透明的行。该方法的开销很低,通常平均每个字幕只增加一个字节。
默认情况下,此解决方法是禁用的。
18 比特流过滤器
配置 FFmpeg 构建时,所有支持的比特流过滤器默认都是启用的。您可以使用配置选项列出所有可用的过滤器--list-bsfs.
您可以使用配置选项禁用所有比特流过滤器--disable-bsfs,并通过选项有选择地启用任何比特流过滤器--enable-bsf=BSF,或者可以使用选项禁用特定的比特流过滤器--disable-bsf=BSF.
该选项-bsfsff* 工具将显示构建中包含的所有支持的比特流过滤器的列表。
ff* 工具具有一个每个流应用的 -bsf 选项,该选项接受一个以逗号分隔的过滤器列表,其参数在过滤器名称后跟随 `=`。
ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT
以下是当前可用的比特流过滤器及其参数(如果有)的描述。
18.1 aac_adtstoasc
将 MPEG-2/4 AAC ADTS 转换为 MPEG-4 音频特定配置比特流。
此过滤器从 MPEG-2/4 ADTS 头创建一个 MPEG-4 AudioSpecificConfig,并移除 ADTS 头。
此过滤器在从原始 ADTS AAC 或 MPEG-TS 容器复制 AAC 流到 MP4A-LATM、FLV 文件或 MOV/MP4 文件及相关格式(例如 3GP 或 M4A)时是必需的。请注意,它会自动插入到 MP4A-LATM 和 MOV/MP4 及相关格式中。
18.2 av1_metadata
修改嵌入在 AV1 流中的元数据。
- td
在流的所有时间单元中插入或移除时间分隔符 OBU。
- ‘insert’
在每个 TU 的开头插入一个 TD,如果它尚未存在。
- ‘remove’
从每个 TU 开头移除 TD,如果它存在。
- color_primaries
- transfer_characteristics
- matrix_coefficients
设置流中的颜色描述字段(参见 AV1 第 6.4.2 节)。
- color_range
设置流中的颜色范围(参见 AV1 第 6.4.2 节;请注意,对于使用 BT.709 原色、sRGB 传递特性和身份(RGB)矩阵系数的流,无法设置该值)。
- ‘tv’
有限范围。
- ‘pc’
全范围。
- chroma_sample_position
设置流中的色度采样位置(参见 AV1 第 6.4.2 节)。只能为 4:2:0 流设置。
- ‘vertical’
左位置(与 MPEG-2 和 H.264 中的默认设置匹配)。
- ‘colocated’
左上位置。
- tick_rate
设置计时信息中的刻度率(time_scale / num_units_in_display_tick)在序列头中。
- num_ticks_per_picture
设置每张图片中的刻度数,以指示流具有固定帧率。如果tick_rate未设置时将被忽略。
- delete_padding
删除填充 OBU。
18.3 chomp
移除包尾部的零填充。
18.4 dca_core
从 DCA/DTS 流中提取核心,丢弃例如 DTS-HD 的扩展。
18.5 dovi_rpu
操作 HEVC/AV1 比特流中的杜比视界(Dolby Vision)元数据,可选择启用元数据压缩。
- strip
如果启用,从流中移除所有杜比视界元数据(配置记录 + RPU 数据块)。
- compression
启用的压缩级别。
- ‘none’
无元数据压缩。
- ‘limited’
有限的元数据压缩方案。应与大多数设备兼容。这是默认值。
- ‘extended’
扩展元数据压缩。设备不要求支持此压缩。请注意,此级别目前与 `limited`在 libavcodec 中的行为相同。
18.6 dump_extra
在过滤后的包开头添加额外数据,除非这些包本身已经以完全相同的额外数据开始。
- freq
额外的参数指定应过滤哪些包。它接受以下值:
- ‘k’
- ‘keyframe’
向所有关键包添加额外数据
- ‘e’
- ‘all’
向所有包添加额外数据
如果未指定,则默认假定为 `k’.
例如,以下ffmpeg命令强制在由libx264编码器生成的 H.264 包中添加全局标头(从而禁用每个包的单独标头),但通过向关键包添加存储在额外数据中的标头来纠正它们:
ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
18.7 dv_error_marker
将标记为受损的 DV 模块替换为指定颜色的模块。
- color
用于替换受损模块的颜色
- sta
一个 16 位掩码,指定 16 种可能的错误状态值中的哪些将替换为色块。默认值是 0xFFFE,表示替换所有非 0 的错误状态值。
- ‘ok’
无错误,无隐藏
- ‘err’
有错误,无隐藏
- ‘res’
保留的
- ‘notok’
错误或隐藏
- ‘notres’
未保留的
- ‘Aa, Ba, Ca, Ab, Bb, Cb, A, B, C, a, b, erri, erru’
具体的错误状态代码
请参见第 44-46 页或第 5.5 节http://web.archive.org/web/20060927044735/http://www.smpte.org/smpte_store/standards/pdf/s314m.pdf
18.8 eac3_core
从 E-AC-3 流中提取核心,丢弃额外的通道。
18.9 extract_extradata
提取流内嵌的额外数据。
某些编解码器允许将长期头(例如 MPEG-2 序列头或 H.264/HEVC (VPS/)SPS/PPS)以“流内嵌”(即作为包含编码帧的比特流的一部分)或“流外”(例如作为容器级别的数据)形式传输。在 FFmpeg 术语中,这种后一种形式称为“额外数据”。
此比特流过滤器检测流内的头并使其可用作额外数据。
- remove
启用此选项后,提取后会从比特流中移除长期头。
18.10 filter_units
从流中移除给定集合中的或不在集合中的单元类型。
- pass_types
通过移除所有其他单元的方法,传递单元类型或单元类型范围的列表。这以 `|` 分隔的单元类型值或包含范围的 `-` 表示。
- remove_types
与pass_types相同,但移除给定集合中的单元,传递所有其他单元。
pass_types 和 remove_types 使用的类型对应于 H.264、HEVC 和 H.266 中的 NAL 单元类型(参考 H.264 和 HEVC 规范中的表 7-1 或 H.266 规范中的表 5)、JPEG 的标记值(去掉 0xFF 前缀)以及 MPEG-2 的起始码(即 0x000001 后的字节)。对于 VP8 和 VP9,每个单元类型都是零。
通过此变换,额外数据保持不变,但请注意,如果流包含内联参数集,则如果它们被移除,输出可能无法使用。
例如,要移除 H.264 流中的所有非 VCL NAL 单元:
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=pass_types=1-5' OUTPUT
要移除 H.265 流中的所有 AUD、SEI 和填充:
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=35|38-40' OUTPUT
要移除 MPEG-2 流中所有的用户数据(包括隐藏字幕):
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=178' OUTPUT
要移除 H264 流中所有的 SEI(包括隐藏字幕):
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=6' OUTPUT
要移除 HEVC 流中所有前缀和后缀 SEI(包括隐藏字幕和动态 HDR):
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=39|40' OUTPUT
18.11 hapqa_extract
提取 HAPQA 文件的 RGB 或 Alpha 部分,而无需重新压缩,以便创建 HAPQ 或 HAPAlphaOnly 文件。
- texture
指定要保留的纹理。
- color
- alpha
将 HAPQA 转换为 HAPQ
ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=color -tag:v HapY -metadata:s:v:0 encoder="HAPQ" hapq_file.mov
将 HAPQA 转换为 HAPAlphaOnly
ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=alpha -tag:v HapA -metadata:s:v:0 encoder="HAPAlpha Only" hapalphaonly_file.mov
18.12 h264_metadata
修改嵌入在 H.264 流中的元数据。
- aud
在流的所有接入单元中插入或移除 AUD NAL 单元。
- ‘pass’
- ‘insert’
- ‘remove’
默认是传递。
- sample_aspect_ratio
在 VUI 参数中设置流的采样像素宽高比。请参阅 H.264 表 E-1。
- overscan_appropriate_flag
设置流是否适合通过过扫描显示(参见 H.264 第 E.2.1 节)。
- video_format
- video_full_range_flag
设置流中的视频格式(参见 H.264 第 E.2.1 节和表 E-2)。
- colour_primaries
- transfer_characteristics
- matrix_coefficients
设置流中的颜色描述(参见 H.264 第 E.2.1 节及表 E-3、E-4 和 E-5)。
- chroma_sample_loc_type
设置流中的色度采样位置(参见 H.264 第 E.2.1 节和图 E-1)。
- tick_rate
在 VUI 参数中设置刻度率(time_scale / num_units_in_tick)。这是流中可表达的最小时间单位,在大多数情况下表示字段速率(两倍的帧速率)。
- fixed_frame_rate_flag
设置流是否具有固定帧率 —— 通常表示帧率恰好是刻度率的一半,但具体含义依赖于隔行扫描和图片结构(参见 H.264 第 E.2.1 节和表 E-6)。
- zero_new_constraint_set_flags
在SPS中将constraint_set4_flag和constraint_set5_flag设为零。这些位在H.264标准的先前版本中被保留,因此某些硬件解码器要求其为零。将其清零的结果仍然是有效的比特流。
- crop_left
- crop_right
- crop_top
- crop_bottom
在SPS中设置帧裁剪偏移。如果流已经被裁剪,这些值将替代当前的值。
这些字段以像素为单位设置。注意,如果色度被抽样或流是隔行扫描的,则某些大小可能无法表示(参见H.264第7.4.2.1.1节)。
- sei_user_data
以SEI未注册用户数据的形式插入字符串。参数必须采用以下形式UUID+string,其中UUID是可能用连字符分隔的十六进制数字,而字符串可以是任何内容。
例如,‘086f3693-b7b3-4f2c-9653-21492feee5b8+hello’将插入与给定UUID关联的字符串“hello”。
- delete_filler
删除填充NAL单元和填充SEI消息。
- display_orientation
插入、提取或删除显示方向SEI消息。有关语法和语义,请参见H.264的D.1.27和D.2.27节。
- ‘pass’
- ‘insert’
- ‘remove’
- ‘extract’
默认值为pass。
插入模式与
rotate和flip选项一起使用。在插入或移除模式下,将删除任何预先存在的显示方向消息。提取模式将显示矩阵作为附加数据附加到数据包。- rotate
在显示方向SEI中设置旋转(以逆时针角度表示,单位为度)。范围为-360到+360。默认值为NaN。
- flip
在显示方向SEI中设置翻转。
- ‘horizontal’
- ‘vertical’
默认值为未设置。
- level
在SPS中设置级别。参见H.264的第A.3节和表A-1到A-5。
参数必须是级别的名称(例如,‘4.2’),一个level_idc值(例如,‘42’),或特殊名称‘auto’,表示滤镜应尝试从输入流属性中推测级别。
18.13 h264_mp4toannexb
将H.264比特流从长度前缀模式转换为起始码前缀模式(如ITU-T H.264规范的附录B中定义)。
某些流式格式需要这种转换,通常是MPEG-2传输流格式(复用器mpegts).
例如,使用ffmpeg将包含H.264流的MP4文件重新复用为mpegts格式,您可以使用以下命令:
ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
请注意,此滤镜会自动插入用于MPEG-TS(复用器mpegts)和原始H.264(复用器h264)输出格式。
18.14 h264_redundant_pps
对某些包含冗余PPS的蓝光BDMV H264流应用特定修复。这些PPS修改流的无关参数,从而混淆需要正确额外数据的其他转换。
这些受影响流中使用的编码器在流中添加了额外的PPS,改变了初始QP以及是否启用了加权预测。这会在将流复制到全局标头容器后引起问题,因为初始PPS不适用于流的其余部分。例如,一个影响是寻址可能返回乱码,直到出现新的PPS。
此比特流滤镜移除额外的PPS并重写切片头,使该流在全局标头中使用单个前导PPS,从而解决问题。
18.15 hevc_metadata
修改嵌入在HEVC流中的元数据。
- aud
在流的所有接入单元中插入或移除AUD NAL单元。
- ‘insert’
- ‘remove’
- sample_aspect_ratio
在流的VUI参数中设置样本纵横比。
- video_format
- video_full_range_flag
在流中设置视频格式(参见H.265的E.3.1节和表E.2)。
- colour_primaries
- transfer_characteristics
- matrix_coefficients
在流中设置颜色描述(参见H.265的E.3.1节和表E.3,E.4及E.5)。
- chroma_sample_loc_type
在流中设置色度采样位置(参见H.265的E.3.1节和图E.1)。
- tick_rate
在VPS和VUI参数中设置时钟速率(time_scale / num_units_in_tick)。结合num_ticks_poc_diff_one,可以在流中设置恒定的帧速率。注意,当流位于容器中时,它可能会被容器参数覆盖。
- num_ticks_poc_diff_one
在VPS和VUI中设置poc_proportional_to_timing_flag,并使用该值设置num_ticks_poc_diff_one_minus1(参见H.265的7.4.3.1和E.3.1节)。如果未同时设置tick_rate,则忽略。
- crop_left
- crop_right
- crop_top
- crop_bottom
在SPS中设置一致性窗口裁剪偏移。如果流已经被裁剪,这些值将替代当前的值。
这些字段以像素为单位设置。注意,如果色度被抽样(H.265的7.4.3.2.1节),某些大小可能无法表示。
- width
- height
设置裁剪后的宽度和高度。
- level
在VPS和SPS中设置级别。参见H.265的A.4节和表A.6及A.7。
参数必须是级别的名称(例如,‘5.1’),一个值(例如‘general_level_idc’表示5.1级别),或者是特殊名称‘153’,表示滤镜应尝试从输入流属性中推测级别。auto’ indicating that the filter should attempt to guess the level from the input stream properties.
18.16 hevc_mp4toannexb
将HEVC/H.265比特流从长度前缀模式转换为起始码前缀模式(如ITU-T H.265规范的附录B中定义)。
某些流式格式需要这种转换,通常是MPEG-2传输流格式(复用器mpegts).
例如,使用ffmpeg将包含HEVC流的MP4文件重新复用为mpegts格式,您可以使用以下命令:
ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts
请注意,此滤镜会自动插入用于MPEG-TS(复用器mpegts)和原始HEVC/H.265(复用器h265或hevc)输出格式。
18.17 imxdump
修改比特流以适配MOV格式并供Final Cut Pro解码器使用。此滤镜仅适用于mpeg2video编解码器,对于具有适当支持的Final Cut Pro 7及更高版本可能不需要此过滤器。-tag:v.
例如,将30 MB/秒的NTSC IMX重新复用为MOV格式:
ffmpeg -i input.mxf -c copy -bsf:v imxdump -tag:v mx3n output.mov
18.18 mjpeg2jpeg
将MJPEG/AVI1数据包转换为完整的JPEG/JFIF数据包。
MJPEG是一种视频编解码器,其中每个视频帧本质上都是一个JPEG图像。可通过
ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
不损失地提取这些帧。然而,这些片段是不完整的JPEG图像,因为它们缺少解码所需的DHT段。引用自::
Avery Lee在2001年的rec.video.desktop新闻组中评论道,“MJPEG,或者至少是具有MJPG四字符代码的AVI中的MJPEG,是具有固定且*省略*霍夫曼表的受限JPEG。JPEG必须是YCbCr颜色空间,必须是4:2:2格式,必须使用基本霍夫曼编码,而不是算术或渐进编码……您确实可以提取MJPEG帧并用常规JPEG解码器解码它们,但您必须在它们之前加上DHT段,否则解码器将不知道如何解码数据。必要的确切表信息可在OpenDML规范中找到。”
此比特流滤镜修补从MJPEG流中提取的帧的头部(具有AVI1头部并缺少DHT段)以生成完全合格的JPEG图像。
ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg exiftran -i -9 frame*.jpg ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
18.19 mjpegadump
向比特流添加一个MJPEG A头,以启用Quicktime解码。
18.20 mov2textsub
从MOV字幕中提取可表示的文本文件,剥离每个字幕数据包的元数据头。
另请参见text2movsub滤镜。
18.21 mpeg2_metadata
修改嵌入在MPEG-2流中的元数据。
- display_aspect_ratio
在流中设置显示纵横比。
支持以下固定值:
- 4/3
- 16/9
- 221/100
任何其他值将导致信号传递方形像素而不是其他值(参见H.262第6.3.3节和表6-3)。
- frame_rate
在流中设置帧速率。此值通过已知值表结合一个小的乘数和除数构造——如果提供的值无法精确表示,将使用最近的可表示值(参见H.262第6.3.3节和表6-4)。
- video_format
在流中设置视频格式(参见H.262第6.3.6节和表6-6)。
- colour_primaries
- transfer_characteristics
- matrix_coefficients
在流中设置颜色描述(参见H.262第6.3.6节和表6-7, 6-8及6-9)。
18.22 mpeg4_unpack_bframes
解压DivX格式的打包B帧。
DivX格式的打包B帧不是有效的MPEG-4,仅是为了解决Video for Windows子系统问题的临时解决方案。它们占用更多空间,可能导致轻微的音视频同步问题,需要更多的CPU功率来解码(除非播放器具有某种解码帧队列来补偿2,0,2,0这样的每包帧样式),并会在将其复制到标准容器如mp4或mpeg-ps/ts中时引发问题,因为MPEG-4解码器可能无法解码它们,因为它们不是有效的MPEG-4。
例如,使用ffmpeg修复包含DivX格式打包B帧的MPEG-4流的AVI文件,您可以使用以下命令:
ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi
18.23 noise
破坏数据包内容或直接丢弃它们,但不会破坏容器。可用于模糊测试或测试错误恢复/隐藏功能。
参数:
- amount
接受一个表达式,其每包计算的结果决定数据包中字节修改的频率。值小于0会导致变化频率。默认值为0,不进行修改。然而,如果未指定amount或drop,amount将被设置为-1。以下是接受的变量。
- drop
接受一个每包计算的表达式,其结果决定数据包是否被丢弃。如果计算结果为正,数据包将被丢弃。如果计算结果为负,将有一定概率丢弃数据包,概率大致与负值的绝对值成反比。默认值为0,不丢弃数据包。以下是接受的变量。
- dropamount
接受一个非负整数,分配每包丢弃的概率,概率大致与该值成反比。默认值为0,不丢弃数据包。这一选项保留用于向后兼容,相当于将drop设置为具有相同绝对值的负值,例如,
dropamount=4等同于drop=-4如果同时指定了drop,则忽略。
两者amount和drop接受包含以下变量的表达式:
- ‘n’
数据包的索引,从零开始。
- ‘tb’
数据包时间戳的时间基准。
- ‘pts’
数据包的呈现时间戳。
- ‘dts’
数据包的解码时间戳。
- ‘nopts’
代表AV_NOPTS_VALUE的常量。
- ‘startpts’
流中看到的第一个非AV_NOPTS_VALUE的PTS。
- ‘startdts’
流中看到的第一个非AV_NOPTS_VALUE的DTS。
- ‘duration’
- ‘d’
数据包的持续时间,以时间基准单位表示。
- ‘pos’
输入中的数据包位置;当未知或未设置时可能为-1。
- ‘size’
数据包大小,以字节为单位。
- ‘key’
数据包是否标记为关键帧。
- ‘state’
一个伪随机整数,主要来源于数据包负载的内容。
18.23.1 示例
对每个字节应用修改,但不丢弃任何数据包。
ffmpeg -i INPUT -c copy -bsf noise=1 output.mkv
在时间戳30秒后丢弃所有未标记为关键帧的视频数据包,但不修改剩余的数据包。
ffmpeg -i INPUT -c copy -bsf:v noise=drop='gt(t\,30)*not(key)' output.mkv
每10秒丢弃一秒的音频,并向其余部分添加一些随机噪声。
ffmpeg -i INPUT -c copy -bsf:a noise=amount=-1:drop='between(mod(t\,10)\,9\,10)' output.mkv
18.24 null
此位流过滤器不改变数据包内容。
18.25 pcm_rechunk
将PCM音频重新打包为固定样本数每包或固定每秒帧率。与(ffmpeg-filters)asetnsamples音频过滤器类似但处理的是音频数据包而不是音频帧。
- nb_out_samples, n
设置每个输出音频数据包的样本数。此数值表示样本数量per each channel默认值为1024。
- pad, p
如果设置为1,过滤器将用静音填充最后一个音频数据包,使其包含与先前数据包相同的样本数(或大致相同的样本数,请参见frame_rate)。默认值为1。
- frame_rate, r
此选项使过滤器每秒输出固定数量的数据包,而不是固定每包样本数。如果音频采样率不能被帧率整除,则样本数量不会是恒定值,但会略有变化,以尽量使每个数据包开始接近帧边界。使用此选项优先于nb_out_samples.
您可以使用此选项生成48kHz音频的NTSC帧率的著名1602-1601-1602-1601-1602模式。frame_rate选项。
ffmpeg -f lavfi -i sine=r=48000:d=1 -c pcm_s16le -bsf pcm_rechunk=r=30000/1001 -f framecrc -
18.26 pgs_frame_merge
将一系列以“显示集结束”段结束的PGS字幕段合并为一个数据包。
某些支持PGS字幕的容器需要此操作(复用器matroska).
18.27 prores_metadata
修改嵌入在ProRes流中的颜色属性元数据。
- color_primaries
设置颜色原色。 可用的值有:
- ‘auto’
保持相同的颜色原色属性(默认)。
- ‘unknown’
- ‘bt709’
- ‘bt470bg’
BT601 625
- ‘smpte170m’
BT601 525
- ‘bt2020’
- ‘smpte431’
DCI P3
- ‘smpte432’
P3 D65
- transfer_characteristics
设置颜色传递。 可用的值有:
- ‘auto’
保持相同的传递特性属性(默认)。
- ‘unknown’
- ‘bt709’
BT 601, BT 709, BT 2020
- ‘smpte2084’
SMPTE ST 2084
- ‘arib-std-b67’
ARIB STD-B67
- matrix_coefficients
设置矩阵系数。 可用的值有:
- ‘auto’
保持相同的色彩空间属性(默认)。
- ‘unknown’
- ‘bt709’
- ‘smpte170m’
BT 601
- ‘bt2020nc’
为文件的每个帧设置Rec709色彩空间
ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt709:color_trc=bt709:colorspace=bt709 output.mov
为文件的每个帧设置混合对数伽玛参数
ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt2020:color_trc=arib-std-b67:colorspace=bt2020nc output.mov
18.28 remove_extra
从数据包中移除额外数据。
它接受以下参数:
- freq
设置从哪些帧类型移除额外数据。
- ‘k’
仅从非关键帧中移除额外数据。
- ‘keyframe’
仅从关键帧中移除额外数据。
- ‘e, all’
从所有帧中移除额外数据。
18.29 setts
设置数据包中的PTS和DTS。
它接受以下参数:
- ts
- pts
- dts
为PTS、DTS或两者设置表达式。
- duration
为持续时间设置表达式。
- time_base
设置输出时基。
表达式通过eval API求值,可包含以下常量:
- N
输入数据包的计数。从0开始。
- TS
输入中的解复用时间戳(针对
ts或dts选项)或呈现时间戳(针对pts选项)。- POS
数据包在文件中的原始位置,若未定义则为当前数据包未定义。
- DTS
输入中的解复用时间戳。
- PTS
输入中的呈现时间戳。
- DURATION
输入中的持续时间。
- STARTDTS
第一个数据包的DTS。
- STARTPTS
第一个数据包的PTS。
- PREV_INDTS
之前的输入DTS。
- PREV_INPTS
之前的输入PTS。
- PREV_INDURATION
之前的输入持续时间。
- PREV_OUTDTS
之前的输出DTS。
- PREV_OUTPTS
之前的输出PTS。
- PREV_OUTDURATION
之前的输出持续时间。
- NEXT_DTS
下一个输入DTS。
- NEXT_PTS
下一个输入PTS。
- NEXT_DURATION
下一个输入持续时间。
- TB
数据包所属流的时间基。
- TB_OUT
输出时间基。
- SR
数据包所属流的采样率。
- NOPTS
AV_NOPTS_VALUE常量。
例如,要设置PTS等于DTS(不推荐使用B帧):
ffmpeg -i INPUT -c:a copy -bsf:a setts=pts=DTS out.mkv
18.30 showinfo
记录基本的数据包信息。主要用于测试、调试和开发。
18.31 text2movsub
将文本字幕转换为MOV字幕(由mov_text编解码器使用)并附加元数据头。
另请参见mov2textsub过滤器。
18.32 跟踪头信息
记录包含编码流中所有语法元素的日志输出(包括单独的编码块以上的所有内容)。这对调试底层流问题很有用。
支持AV1、H.264、H.265、(M)JPEG、MPEG-2和VP9,但根据构建版本可能仅支持其中一部分。
18.33 提取TrueHD核心
从TrueHD流中提取核心部分,丢弃ATMOS数据。
18.34 VP9元数据
修改嵌入到VP9流中的元数据。
- color_space
在帧头中设置色彩空间值。需要注意的是,任何设置为RGB的帧会隐式设置为PC范围,并且RGB与配置文件0和2不兼容。
- ‘unknown’
- ‘bt601’
- ‘bt709’
- ‘smpte170’
- ‘smpte240’
- ‘bt2020’
- ‘rgb’
- color_range
在帧头中设置色彩范围值。需要注意的是,任何由色彩空间强加的值将优先于该值。
- ‘tv’
- ‘pc’
18.35 VP9超级帧
将VP9隐形(替代参考)帧重新合并到VP9超级帧。这可以修复拆分/分段的VP9流,其中替代参考帧从其可见对应帧中分离出来。
18.36 VP9超级帧分离
将VP9超级帧拆分为单帧。
18.37 VP9原始重新排序
对于具有正确时间戳但可能无序的VP9流,插入额外的现有显示帧包以纠正顺序。
19 格式选项
libavformat库提供一些通用的全局选项,可用于所有多路复用器和解复用器。此外,每个多路复用器或解复用器可能支持所谓的私有选项,这些选项是特定于该组件的。
可以通过指定-选项 值在FFmpeg工具中设置,或者通过显式设置AVFormatContext选项或使用libavutil/opt.hAPI进行程序化使用。
支持的选项列表如下:
- avioflags 标志 (input/output)
可能的值:
- ‘direct’
减少缓冲。
- probesize 整数 (input)
设置探测大小(以字节为单位),即分析数据大小以获取流信息。较高的值将在信息分散到流中时启用检测更多信息,但会增加延迟。必须是大于或等于32的整数,默认值为5000000。
- max_probe_packets 整数 (input)
设置探测编解码器时缓冲包的最大数量。默认值为2500个包。
- packetsize 整数 (output)
设置包大小。
- fflags 标志
设置格式标志。部分仅针对有限数量的格式实现。
输入文件的可能值:
- ‘discardcorrupt’
丢弃损坏的包。
- ‘fastseek’
为某些格式启用快速但不准确的搜索。
- ‘genpts’
如果存在DTS,则生成缺失的PTS。
- ‘igndts’
如果设置了PTS,则忽略DTS。在设置PTS的情况下,DTS值被设置为NOPTS。当
nofillin标志设置时忽略此项。- ‘ignidx’
忽略索引。
- ‘nobuffer’
减少初始输入流分析时缓冲引入的延迟。
- ‘nofillin’
不填充可以精确计算的包字段中的缺失值。
- ‘noparse’
禁用AV解析器,这需要
+nofillin也关闭。- ‘sortdts’
尝试通过DTS交错输出包。目前仅适用于具有索引的AVI文件。
输出文件的可能值:
- ‘autobsf’
根据输出格式要求自动应用比特流过滤器。默认启用。
- ‘bitexact’
仅写入与平台、构建和时间无关的数据。这可确保文件和数据校验和可再现,并且在不同平台之间匹配。主要用于回归测试。
- ‘flush_packets’
立即写出包。
- ‘shortest’
在最短流结束时停止多路复用。可能需要增加max_interleave_delta以避免在EOF之前刷新较长的流。
- seek2any 整数 (input)
允许在支持的解复用器层面上搜索非关键帧(设置为1)。默认值为0。
- analyzeduration 整数 (input)
指定分析输入所需的微秒数。较高的值将启用检测更准确的信息,但会增加延迟。默认值为5000000微秒= 5秒。
- cryptokey 十六进制字符串 (input)
设置解密密钥。
- indexmem 整数 (input)
设置用于时间戳索引的最大内存(每个流)。
- rtbufsize 整数 (input)
设置用于缓冲实时帧的最大内存。
- fdebug 标志 (input/output)
打印特定调试信息。
可能的值:
- ‘ts’
- max_delay 整数 (input/output)
设置最大多路复用或解复用延迟(以微秒为单位)。
- fpsprobesize 整数 (input)
设置用于探测帧率的帧数。
- audio_preload 整数 (output)
设置音频包应提前交错的微秒数。
- chunk_duration 整数 (output)
设置每个块的微秒数。
- chunk_size 整数 (output)
设置每个块的字节大小。
- err_detect, f_err_detect 标志 (input)
设置错误检测标志。
f_err_detect已弃用,仅通过ffmpeg工具使用。可能的值:
- ‘crccheck’
验证嵌入式CRC校验。
- ‘bitstream’
检测比特流规范的偏差。
- ‘buffer’
检测不正确的比特流长度。
- ‘explode’
在检测到次要错误时中止解码。
- ‘careful’
将违反规范并未在野外观察到的事项视为错误。
- ‘compliant’
将所有规范不兼容项视为错误。
- ‘aggressive’
将合理编码器不应做的事情视为错误。
- max_interleave_delta 整数 (output)
设置用于交错的最大缓冲持续时间。持续时间以微秒为单位,默认为10000000(10秒)。
为确保所有流正确交错,libavformat将在实际写入任何包之前等待每个流至少有一个包。当某些流是“稀少”的(即连续包之间的间隔较大),这可能会导致过多的缓冲。
此字段指定多路复用队列中的第一个和最后一个包的时间戳之间的最大差异,超过该差异时libavformat将输出一个包,无论它是否已为所有流排队一个包。
如果设置为0,libavformat将继续缓冲包,直到为每个流都有一个包,无论缓冲包之间的最大时间戳差异是多少。
- use_wallclock_as_timestamps 整数 (input)
如果设置为1,使用实时时钟作为时间戳。默认值为0。
- avoid_negative_ts 整数 (output)
-
可能的值:
- ‘make_non_negative’
调整时间戳使其为非负值。注意,这仅影响前导负时间戳,而不影响非单调的负时间戳。
- ‘make_zero’
调整时间戳,使第一个时间戳为0。
- ‘auto (default)’
如果目标格式需要,启用时间戳调整。
- ‘disabled’
禁用时间戳的偏移。
当启用偏移时,所有输出时间戳都会按照相同的量进行偏移。音频、视频和字幕的不同步以及相对时间戳的差异将保留,与未启用偏移时的行为一致。
- skip_initial_bytes 整数 (input)
如果设置为1,则设置在读取文件头和帧前要跳过的字节数。默认值是0。
- correct_ts_overflow 整数 (input)
如果设置为1,则修正单个时间戳溢出。默认值是1。
- flush_packets 整数 (output)
在每个数据包后刷新底层I/O流。默认值是-1(自动),表示由底层协议决定;1启用此功能,效果是降低延迟;0禁用此功能,可能在某些情况下提高I/O吞吐量。
- output_ts_offset 偏移 (output)
设置输出时间偏移。
偏移必须是时间持续时长规范,参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时长部分.
偏移由多路复用器添加到输出时间戳。
指定为正值的偏移表示相应的流会延迟指定的时间持续时间偏移。默认值是
0(表示未应用偏移)。- format_whitelist 列表 (input)
由","分隔的允许多路分解器列表。默认情况下,全部允许。
- dump_separator 字符串 (input)
用于分隔命令行上打印的关于流参数字段的分隔符。例如,要使用换行符和缩进分隔字段:
ffprobe -dump_separator " " -i ~/videos/matrixbench_mpeg2.mpg- max_streams 整数 (input)
指定流的最大数量。这可以用来拒绝因流数量过多而需要大量资源的文件。
- skip_estimate_duration_from_pts 布尔值 (input)
如果需要通过对文件尾部的PTS进行额外探测以估算输入持续时间,则跳过估算。目前适用MPEG-PS和MPEG-TS。
- duration_probesize 整数 (input)
设置用于估算输入持续时间的探测大小(单位:字节),当确实需要对文件尾部的PTS进行额外探测时(目前:MPEG-PS和MPEG-TS)。适用于对更佳的持续时间探测感兴趣的用户,或间接用于合并器多路分解器等。例如,针对一个高比特率、高视频缓冲和结尾清理的视频和音频PTS相似的MPEG-TS CBR场景:这种情况下,最后的视频数据包和最后的音频数据包之间的较大物理间隔需要读取大量字节才能获得视频流持续时间。另一个情况是,默认探测行为仅能获取单个视频帧,而它不是流的最后一帧(由于帧重新排序),因此持续时间不准确。设置此选项即使对于小文件也会产生性能影响,因为探测大小是固定的。默认行为是通用的权衡,多数情况下适应性良好,但探测大小不会延展以获取流的持续时间。必须是一个不小于1的整数,或者设置为0表示采用默认行为。
- strict, f_strict 整数 (input/output)
指定遵循标准的严格程度。
f_strict已弃用,应该仅通过ffmpeg工具使用。可能的值:
- ‘very’
严格遵循规范或参考软件的较早更严格版本
- ‘strict’
严格遵从规范中的所有内容,无论后果如何
- ‘normal’
- ‘unofficial’
允许非官方扩展
- ‘experimental’
允许非标准的实验性项目,实验性的(未完成/进行中/未经充分测试)解码器和编码器。注意:实验性解码器可能存在安全风险,请勿用于解码不可信输入。
19.1 格式流规格
格式流规格允许选择符合特定属性的一个或多个流。
流规格的确切语义由avformat_match_stream_specifier()函数定义,该函数声明在libavformat/avformat.h头文件中,并记录在(ffmpeg)ffmpeg(1)手册的流规格部分.
20 多路分解器
多路分解器是FFmpeg中配置的元素,可以从特定类型的文件中读取多媒体流。
在配置FFmpeg构建时,默认情况下会启用所有支持的多路分解器。可以使用配置选项列出所有可用的多路分解器--list-demuxers.
可以使用配置选项禁用所有多路分解器--disable-demuxers,可以通过选项有选择地启用单个多路分解器--enable-demuxer=DEMUXER,或使用选项禁用它--disable-demuxer=DEMUXER.
选项-demuxers的ff*工具将显示启用的多路分解器列表。使用-formats查看启用的多路分解器和多路复用器的综合列表。
以下是一些当前可用多路分解器的描述。
20.1 aa
Audible格式2、3和4多路分解器。
该多路分解器用于分解Audible格式2、3和4(.aa)文件。
20.2 aac
原始音频数据传输流AAC多路分解器。
该多路分解器用于分解包含单一AAC流以及任何内嵌ID3v1/2或APE标签的ADTS输入。
20.3 apng
动画便携网络图形多路分解器。
该多路分解器用于分解APNG文件。PNG签名之前的所有头数据(但不包括首个fcTL块)作为额外数据进行传输。帧被拆分为两个fcTL块之间的所有块,或最后一个fcTL和IEND块之间的所有块。
- -ignore_loop 布尔值
忽略文件中的循环变量。如果设置为启用,默认值为启用。
- -max_fps 整数
以每秒帧数指定的最大帧率。默认值0表示不限制。
- -default_fps 整数
当文件中未指定时为默认帧率,以每秒帧数表示(0表示尽可能快)。默认值为15。
20.4 asf
高级系统格式多路分解器。
该多路分解器用于分解ASF文件及MMS网络流。
- -no_resync_search 布尔值
禁止通过寻找特定可选起始码进行重新同步。
20.5 concat
虚拟拼接脚本多路分解器。
此多路分解器从文本文件中读取文件列表和其它指示,并逐个分解它们,就像所有数据包被混合在一起一样。
文件中的时间戳已调整,第一个文件从0开始,每个后续文件从前一个文件结束的位置开始。请注意,这是全局调整,如果所有流的长度不完全相同可能会导致间隙。
所有文件必须包含相同的流(相同的编解码器,相同的时间基等)。
每个文件的持续时间值用于调整下一个文件的时间戳。如果持续时间不正确(如使用码率计算得到的或文件被截断造成的不准确),可能会导致伪影。指令duration可以用于覆盖每个文件中记录的持续时间。
20.5.1 语法
脚本是扩展-ASCII格式的文本文件,每行一个指令。空行、前导空格和以‘#’开头的行会被忽略。以下指令被识别:
file 路径要读取的文件路径;特殊字符和空格必须用反斜杠或单引号转义。
所有后续与文件相关的指令适用于该文件。
ffconcat version 1.0标识脚本类型和版本。
为了使FFmpeg自动识别格式,此指令必须准确无误地出现在脚本的第一行(没有额外空格或字节次序标记)。
duration 持续时间文件的持续时间。此信息可以从文件中指定;在这里指定可能更高效或在文件中信息不可用或不准确时有所帮助。
如果所有文件都设置了持续时间,则可以在整体拼接的视频中进行寻址。
inpoint 时间戳文件的起点。若多路分解器打开文件,立即跳转到指定的时间戳。寻址的方式是使所有流在起点可以成功呈现。
此指令在使用帧内编解码器时效果最佳,因为对于非帧内编解码器,通常会在实际起点之前得到额外的数据包,并且解码的内容很可能包含起点之前的帧。
对于每个文件,文件起点之前的数据包的时间戳将少于文件计算起点的时间戳(在第一个文件中为负数),且文件的持续时间(如果未由指令
duration指定)将根据其指定的起点而减少。由于可能存在指定起点之前的数据包,数据包时间戳可能在两个拼接的文件之间发生重叠。
outpoint 时间戳文件的终点。当多路分解器在任何流中达到指定的解码时间戳时,它将作为文件结束条件处理并跳过当前及所有流中的剩余数据包。
结束点是排他的,这意味着解复用器不会输出解码时间戳大于等于结束点的包。
此指令最适用于帧内压缩编解码器以及所有流紧密交织的格式。对于非帧内压缩编解码器,您通常会在结束点之后收到额外的显示时间戳包,因此解码内容可能会包含结束点之后的帧。如果您的流未紧密交织,可能无法在结束点之前获取所有流的所有包,可能只能解码最早的流直到结束点。
文件的持续时间(如果未由
duration指令指定)将根据其指定的结束点减少。file_packet_metadata 键=值文件包的元数据。指定的元数据将为每个文件包设置。您可以多次指定此指令以添加多个元数据条目。此指令已弃用,请使用
file_packet_meta代替。file_packet_meta 键 值文件包的元数据。指定的元数据将为每个文件包设置。您可以多次指定此指令以添加多个元数据条目。
option 键 值访问、打开和探测文件的选项。可以多次使用。
stream在虚拟文件中引入一个流。所有后续与流相关的指令都应用于最后一个引入的流。某些流属性必须设置以允许识别子文件中的匹配流。如果脚本中未定义任何流,则复制第一个文件的流。
exact_stream_id id设置流的id。如果给出了此指令,将使用子文件中与之对应的id字符串。这对MPEG-PS(VOB)文件尤其有用,其流的顺序可能不可靠。
stream_meta 键 值流的元数据。可以多次使用。
stream_codec 值流的编解码器。
stream_extradata hex_string字符串的额外数据,以十六进制编码。
chapter id 开始 结束添加章节。id是一个独特的标识符,可能很小并且是连续的。
20.5.2选项
此解复用器接受以下选项:
- safe
如果设置为1,则拒绝不安全的文件路径和指令。文件路径被认为是安全的如果它不包含协议说明并且是相对路径,所有组件仅包含便携字符集(字母、数字、点、下划线和连字符)中的字符,并且组件的开头没有点。
如果设置为0,则接受任何文件名。
默认值为1。
- auto_convert
如果设置为1,则尝试对数据包数据执行自动转换以使流可连接。默认值为1。
目前,唯一的转换是将H.264流中MP4格式的h264_mp4toannexb比特流过滤器添加进去,特别是在分辨率发生变化时需要这样做。
- segment_time_metadata
如果设置为1,每个数据包将包含lavf.concat.start_time以及lavf.concat.duration数据包元数据值,这些值是分别文件段在拼接输出中的start_time和持续时间,以微秒表示。只有在根据拼接文件已知的情况下才会设置持续时间元数据。默认值为0。
20.5.3示例
- 使用绝对文件名并包含一些注释:
# my first filename file /mnt/share/file-1.wav # my second filename including whitespace file '/mnt/share/file 2.wav' # my third filename including whitespace plus single quote file '/mnt/share/file 3'\''.wav'
- 允许自动探测输入格式,使用安全文件名,并设置第一个文件的持续时间:
ffconcat version 1.0 file file-1.wav duration 20.0 file subdir/file-2.wav
20.6 dash
HTTP动态自适应流媒体解复用器。
此解复用器展示了清单中找到的所有AV流。通过设置AV流上的丢弃标志,调用者可以决定实际接收哪些流。每个流都会镜像id和bandwidth的属性作为元数据键,分别命名为"id"和"variant_bitrate"。<Representation> as metadata keys named "id" and "variant_bitrate" respectively.
20.6.1选项
此解复用器接受以下选项:
- cenc_decryption_key
16字节的密钥,以十六进制表示,用于解密使用ISO通用加密(CENC/AES-128 CTR;ISO/IEC 23001-7)加密的文件。
20.7 dvdvideo
支持libdvdnav和libdvdread的DVD视频解复用器。
可以直接将DVD标题,尤其是连续的PGC,引入转换管道中。菜单资源,如背景视频或音频,也可以在给出菜单坐标时解复用(尽最大努力)。
接受块设备(DVD驱动器)、ISO文件和目录结构。通过以下命令激活-f dvdvideo这些输入中的一个。
此解复用器不包括任何形式的解密代码。您需要自行处理加密的DVD,不应该期望在此问题上获得支持。
底层播放由libdvdnav处理,结构解析由libdvdread处理。FFmpeg必须启用GPL库支持并且配置开关--enable-libdvdnav和--enable-libdvdread.
您需要提供所需的"标题号"或确切的PGC/PG坐标。许多开源DVD播放器和工具可以帮助提供此信息。如果未指定,解复用器将默认选择标题1,这适用于许多光盘。然而,由于格式的灵活性,建议手动检查。有许多光盘标题制作奇怪或具有无效头文件。
如果输入是真正的DVD驱动器,请注意某些驱动器可能在读取光盘的坏扇区时无声失败,返回随机位,这实际上是损坏的数据。这在老化或损坏光盘上尤其明显。需要第二次读取和完整性检查才能检测损坏。这不是FFmpeg问题。
20.7.1背景
DVD视频不是传统意义上直接可访问的线性容器格式。相反,它允许复杂和编程的播放,存储在无头VOB文件中的精心复合的MPEG-PS流。对最终用户来说,这些流仅被称为"标题",但实际逻辑播放序列是由标题中的一个或多个"PGC"(程序组链)定义的。PGC又由多个"PG"(程序)组成,它们是真正的视频片段(对于典型视频功能,按顺序排列)。PGC结构以及流布局和元数据都存储在需要解析的IFO文件中。PGC可以简单地理解为播放列表。
实际的DVD播放器依赖于用户GUI通过菜单交互和内部VM驱动解复用方向。一般来说,用户要么通过菜单导航要么自动重定向到他们选择的PGC。在此过程中以及后续播放期间,DVD播放器的内部VM还会维护状态并执行指令,这可能会在播放期间创建跳转到不同的扇区。这就是为什么要使用libdvdnav,因为光盘上MPEG-PS块的线性读取(VOBs)在许多情况下不足以生成正确的序列。
还有许多其他的DVD结构(这是个很长的话题),不会在这里讨论。特别是,此解复用器处理NAV数据包以建立准确的时间,但不会作为流发出。要深入了解,请参考:https://code.videolan.org/videolan/libdvdnav/-/blob/master/doc/dvd_structures
20.7.2选项
此解复用器接受以下选项:
- title 整数
要播放的标题号。如果pgc和pg未设置,必须设置此选项。不适用于菜单。默认值为0(自动),当前仅选择第一个可用的标题(标题1)并通知用户相关影响。
- chapter_start 整数
要开始的章节或PTT(标题的一部分)号。不适用于菜单。默认值为1。
- chapter_end 整数
要结束的章节或PTT(标题的一部分)号。不适用于菜单。默认值为0,这是一个特殊值表示在最后可能的章节结束。
- angle 整数
视频角度号,指的是从VOB中交替的帧组成的额外视频流。不适用于菜单。默认值为1。
- region 整数
播放使用的区域代码。某些光盘可能会使用它默认在不同区域的特定角度播放。此选项不会影响作为输入的实际DVD驱动器的区域代码。不适用于菜单。默认值为0,"世界"。
- menu 布尔
解复用菜单资源而不是导航标题。需要确切的菜单坐标(menu_lu, menu_vts, pgc, pg)。默认值为false。
- menu_lu 整数
要解复用的菜单语言。在DVD中,菜单按语言分组。默认值为1,第一个语言单元。
- menu_vts 整数
菜单所在的VTS,或如果是VMG菜单(根级),则为0。默认值为1,第一个VTS的菜单。
- pgc 整数
用于启动播放的入口PGC,与pg结合使用。设置此项是替代设置title。当前不支持章节标记。必须明确为菜单设置。默认值为0,从title.
- pg 值自动解析。
整数pgc用于启动播放的入口PG,与title。当前不支持章节标记。默认值为1,PGC的第一个PG。
- preindex 布尔
启用此选项以获得准确的章节(PTT)标记和持续时间测量,这需要一个缓慢的第二次读取以从NAV数据包索引章节标记时间戳。这对于实际光驱来说额外工作并不理想。建议使用存储在硬盘上的DVD结构备份来使用此选项以提高速度。与pgc不兼容。pg默认值是 0,false。
- trim 布尔值
跳过开头的填充单元格(例如,长度小于 1 秒的单元格)。许多光盘在 PGC 开头存在填充段,通常是包含无意义数据以控制真实 DVD 播放器的缓冲速度,并且没有其他重要数据的单元格。不适用于菜单。默认值为 1,true。
20.7.3 示例
- 打开给定 DVD 结构中的标题 3:
ffmpeg -f dvdvideo -title 3 -i <path to DVD> ...
- 打开给定 DVD 结构中标题 1 的章节 3-6:
ffmpeg -f dvdvideo -chapter_start 3 -chapter_end 6 -title 1 -i <path to DVD> ...
- 从给定 DVD 结构中仅打开标题 1 的章节 5:
ffmpeg -f dvdvideo -chapter_start 5 -chapter_end 5 -title 1 -i <path to DVD> ...
- 从 VTS 1、PGC 1 的菜单中提取语言 1,从 PG 1 开始:
ffmpeg -f dvdvideo -menu 1 -menu_lu 1 -menu_vts 1 -pgc 1 -pg 1 -i <path to DVD> ...
20.8 电子艺术(ea)
电子艺术多媒体格式分离器。
此格式用于各种电子艺术公司的游戏。
20.8.1 选项
- merge_alpha 布尔值
-
VP6 的 alpha 通道(如果存在)通常会作为次要视频流返回,设置此选项可以使分离器返回一个单一的视频流,其中包含普通视频和 alpha 通道。
20.9 imf
互操作主格式(Interoperable Master Format)分离器。
此分离器按照 SMPTE ST 2067-2 的规定,展示 IMF 组成文件中找到的音频和视频流。SMPTE ST 2067-2.
ffmpeg [-assetmaps <path of ASSETMAP1>,<path of ASSETMAP2>,...] -i <path of CPL> ...
如果-assetmaps未指定,则分离器会在与 CPL 相同的目录中查找名为ASSETMAP.xml的文件。
20.10 flv, live_flv, kux
Adobe Flash 视频格式分离器。
此分离器用于处理 FLV 文件和 RTMP 网络流。在处理实时网络流时,如果强制格式,可以使用 live_flv 选项代替 flv 来应对时间戳的中断。KUX 是优酷平台使用的一种 FLV 变体。
ffmpeg -f flv -i myfile.flv ... ffmpeg -f live_flv -i rtmp://<any.server>/anything/key ....
- -flv_metadata 布尔值
根据 onMetaData 数组内容分配流。
- -flv_ignore_prevtag 布尔值
忽略之前标签值的大小。
- -flv_full_metadata 布尔值
输出 onMetadata 的所有内容。
20.11 gif
GIF 动画分离器。
它接受以下选项:
- min_delay
设置帧之间的最小有效延迟,单位为百分之一秒。范围是 0 到 6000。默认值为 2。
- max_gif_delay
设置帧之间的最大有效延迟,单位为百分之一秒。范围是 0 到 65535。默认值为 65535(约为 11 分钟),这是规范允许的最大值。
- default_delay
设置帧之间的默认延迟,单位为百分之一秒。范围是 0 到 6000。默认值为 10。
- ignore_loop
GIF 文件可以包含循环播放的次数(或者无限循环)。如果ignore_loop被设置为 1,则将忽略输入中的循环播放设置,不会进行循环播放。如果设置为 0,则会进行循环播放,并根据 GIF 指定的次数循环。默认值为 1。
例如,使用叠加滤镜,将一个无限循环的 GIF 叠加到另一个视频上:
ffmpeg -i input.mp4 -ignore_loop 0 -i input.gif -filter_complex overlay=shortest=1 out.mkv
注意,上述示例使用了叠加滤镜的 shortest 选项,以输出视频的长度为最短的输入文件(在本例中为input.mp4)。因为此示例中的 GIF 是无限循环的。
20.12 hls
HLS 分离器
Apple HTTP 实时流分离器。
此分离器呈现所有变体流中的所有 AVStreams。id 字段设置为比特率变体的索引号。通过设置 AVStreams 的丢弃标志(在 ffplay 中按 'a' 或 'v'),调用者可以决定实际接收哪些变体流。变体所属流的总比特率可通过名为 "variant_bitrate" 的元数据键获取。
它接受以下选项:
- live_start_index
开始实时流的片段索引(负值表示从末尾算起)。
- prefer_x_start
如果播放列表中包含 #EXT-X-START,优先使用它而不是 live_start_index。
- allowed_extensions
以逗号','分隔的文件扩展名列表,HLS 允许访问。
- extension_picky
此选项禁止用来检测的不允许扩展名。 而且要求所有可用的片段与格式的扩展名匹配, 除了 mpegts,它始终被允许。 建议正确设置白名单,而不是依赖扩展名。 默认情况下启用。
- max_reload
尝试重新加载不足列表的最大次数。默认值为1000。
- m3u8_hold_counters
在刷新时没有新片段时,最多加载m3u8的次数。默认值为1000。
- http_persistent
使用持久性 HTTP 连接。仅适用于 HTTP 流。默认情况下启用。
- http_multiple
使用多个 HTTP 连接下载 HTTP 片段。默认情况下启用于 HTTP/1.1 服务器。
- http_seekable
使用 HTTP 部分请求下载 HTTP 片段。 0 = 禁用, 1 = 启用, -1 = 自动, 默认值为自动。
- seg_format_options
为媒体片段分离器设置选项,使用键=值的列表, 各对之间用逗号分隔。
:.- seg_max_retry
在错误情况下重新加载片段的最大次数,用于不希望网络错误导致片段跳过时。 默认值为 0。
20.13 image2
图像文件分离器。
此分离器读取由模式指定的图像文件列表。模式的语法和含义由以下选项控制:pattern_type.
模式可以包含一个后缀,用于自动确定文件中包含的图像的格式。
所有序列中的文件必须具有相同的大小、像素格式和图像格式。
此分离器接受以下选项:
- framerate
设置视频流的帧率。默认为 25。
- loop
如果设置为 1,则循环输入。默认值为 0。
- pattern_type
选择用于解析提供的文件名的模式类型。
pattern_type接受以下值之一。
- none
禁用模式匹配,因此视频将仅包含指定的图像。如果您不想从多个图像中创建序列,而文件名可能包含特殊模式字符,应该使用此选项。
- sequence
选择一种序列模式类型,用于根据顺序编号指定一系列文件。
序列模式可以包含字符串 "%d" 或 "%0Nd",用于指定文件名中代表顺序编号的字符位置。如果使用格式 "%d0Nd",那么文件名称中的数字将会被零填充,并且N是代表数字的 0 填充位置总数。可以使用字符串 "%%" 来指定模式中的字面字符 ‘%’。
如果序列模式包含 "%d" 或 "%0Nd",那么模式指定的文件列表中的第一个文件名必须包含一个包含在start_number和start_number+start_number_range-1 之间的数字,所有后续文件名数字必须是顺序的。
例如,模式 "img-%03d.bmp" 将匹配以下文件名序列:img-001.bmp, img-002.bmp, ..., img-010.bmp;模式 "i%%m%%g-%d.jpg" 将匹配以下文件名序列:i%m%g-1.jpg, i%m%g-2.jpg, ..., i%m%g-10.jpg等等。
请注意,模式不一定必须包含 "%d" 或 "%0Nd",例如要转换单个图像文件img.jpeg您可以使用以下命令:
ffmpeg -i img.jpeg img.png
- glob
选择一种通配符模式类型。
该模式像
glob()模式一样被解释。这仅当 libavformat 是带有通配支持时可用。- glob_sequence (deprecated, will be removed)
选择混合通配/序列模式。
如果您的 libavformat 版本支持通配,并且提供的模式包含至少一个通配元字符:
%*?[]{}且此字符之前有一个未转义的 "%",则模式像glob()模式解释,否则像序列模式解释。所有 glob 特殊字符
%*?[]{}必须以 "%" 开头。要转义字面上的 "%",请使用 "%%"。例如模式
foo-%*.jpeg将匹配所有以 "foo-" 为前缀并以 ".jpeg" 为结尾的文件名,以及foo-%?%?%?.jpeg将匹配所有以 "foo-" 为前缀、后跟三个字符序列并以 ".jpeg" 为结尾的文件名。推荐使用glob和sequence.
默认值是glob_sequence.
- pixel_format
设置读取图像的像素格式。如果未指定,则从序列中的第一个图像文件推断像素格式。
- start_number
设置选择指定图像文件模式的起始索引。默认值为 0。
- start_number_range
设置在寻找序列中第一个图像文件时检查的索引区间范围,从start_number开始。默认值为 5。
- ts_from_file
如果设置为 1,将把帧时间戳设置为图像文件的修改时间。请注意,时间戳的单调性不受保障:图像的顺序与未使用此选项时一致。默认值为 0。 如果设置为 2,将使用纳秒精度将帧时间戳设置为图像文件的修改时间。
- video_size
设置读取图像的大小。如果未指定,则从序列中的第一个图像文件推断视频大小。
- export_path_metadata
如果设置为 1,将向输入中查找到的元数据添加两个额外字段,使其也可用于其他滤镜(参见drawtext过滤器示例)。默认值为 0。以下是额外字段的描述:
- lavf.image2dec.source_path
对应读取的输入文件的完整路径。
- lavf.image2dec.source_basename
对应读取的文件名称。
20.13.1 示例
- 使用
ffmpeg创建一个视频,从文件序列中的图像img-001.jpeg, img-002.jpeg,...,假设输入帧率为每秒 10 帧:ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv
- 如上,但从序列中索引为 100 的文件开始读取:
ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv
- 读取符合 "*.png" glob 模式的图像,也就是说所有以 ".png" 后缀结尾的文件:
ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
20.14 libgme
Game Music Emu 库是一个视频游戏音乐文件仿真集合。
参见https://bitbucket.org/mpyne/game-music-emu/overview了解更多信息。
它接受以下选项:
- track_index
设置要解复用的曲目索引。解复用器只能导出一个曲目。曲目索引从 0 开始。默认选择第一个曲目。曲目数量作为tracks元数据项导出。
- sample_rate
设置导出的曲目采样率。范围是 1000 到 999999。默认值是 44100。
- max_size (bytes)
解复用器将整个文件缓冲到内存中。调整此值以设置最大缓冲区大小,从而限制可以读取的文件大小。默认值是 50 MiB。
20.15 libmodplug
基于 ModPlug 的模块解复用器
参见https://github.com/Konstanty/libmodplug
它将导出一个双声道的 16 位 44.1 kHz 音频流。
此外,还可以选择性地导出一个pal816 色的视频流,并可以选择是否打印元数据。
它接受以下选项:
- noise_reduction
应用简单低通滤波器。可以是 1(开启)或 0(关闭)。默认值为 0。
- reverb_depth
设置混响量。范围 0-100。默认值为 0。
- reverb_delay
设置延迟时间(毫秒),限制为 40-250 毫秒。默认值为 0。
- bass_amount
应用低音增强功能(又名 XBass 或大低音)。范围是 0(安静)到 100(响亮)。默认值为 0。
- bass_range
设置低音频率的截止值,即高频范围上限。范围是 10-100 Hz。默认值为 0。
- surround_depth
应用杜比 Pro-Logic 环绕音效。范围是 0(安静)到 100(强烈)。默认值为 0。
- surround_delay
设置环绕延迟时间(毫秒),限制为 5-40 毫秒。默认值为 0。
- max_size
解复用器将整个文件缓冲到内存中。调整此值以设置最大缓冲区大小,从而限制可以读取的文件大小。范围是 0 到 100 MiB。将值设为 0 可移除缓冲大小限制(不推荐)。默认值是 5 MiB。
- video_stream_expr
使用 eval API 评估的字符串,用于向生成的视频流分配颜色。 可以使用的变量是
x,y,w,h,t,speed,tempo,order,pattern和row.- video_stream
生成视频流。可以是 1(开启)或 0(关闭)。默认值为 0。
- video_stream_w
设置视频帧宽度(以字符计),其中一个字符表示 8 像素。范围是 20-512。默认值为 30。
- video_stream_h
设置视频帧高度(以字符计),其中一个字符表示 8 像素。范围是 20-512。默认值为 30。
- video_stream_ptxt
在视频流中打印元数据。包括
speed,tempo,order,pattern,row和ts(时间,以毫秒计)。可以是 1(开启)或 0(关闭)。默认值为 1。
20.16 libopenmpt
基于 libopenmpt 的模块解复用器
参见https://lib.openmpt.org/libopenmpt/了解更多信息。
某些文件有多个子曲目(轨道),可以使用subsong选项设置。
它接受以下选项:
- subsong
设置子曲目索引。可以是 'all'、'auto' 或子曲目的索引。子曲目索引从 0 开始。默认值为 'auto'。
默认值是让 libopenmpt 自动选择。
- layout
设置声道布局。有效值为 1、2 和 4 声道布局。 默认值为 STEREO。
- sample_rate
设置 libopenmpt 输出的采样率。 范围从 1000 到 INT_MAX。默认值为 48000。
20.17 mov/mp4/3gp
Quicktime 文件格式和 ISO/IEC 基媒体文件格式(ISO/IEC 14496-12 或 MPEG-4 第 12 部分,ISO/IEC 15444-12 或 JPEG 2000 第 12 部分)的解复用器。
注册扩展名:mov, mp4, m4a, 3gp, 3g2, mj2, psp, m4b, ism, ismv, isma, f4v
20.17.1 选项
此解复用器接受以下选项:
- enable_drefs
启用加载外部轨道,默认禁用。 启用此功能在某些使用场景下可能理论上泄漏信息。
- use_absolute_path
允许通过绝对路径加载外部轨道,默认禁用。 启用此功能存在安全风险。应仅在确认来源无恶意情况下启用。
- seek_streams_individually
在寻址时,单独识别每个流中的最接近点,并从识别点解复用该流中的数据包。这可能导致与从头线性解复用相比不同的数据包序列。默认值为 true。
- ignore_editlist
忽略任何编辑列表原子。解复用器默认情况下修改流索引以反映编辑列表描述的时间轴。默认值为 false。
- advanced_editlist
修改流索引以反映编辑列表描述的时间轴。
ignore_editlist必须设置为 false,这个选项才能生效。 如果ignore_editlist和此选项都设置为 false,则仅修改流索引的开头以反映编辑列表描述的起始停留时间或起始时间戳。默认值为 true。- ignore_chapters
不解析章节。这包括 GoPro 的 “HiLight” 标签/时刻。请注意,章节仅在输入可寻址时解析。默认值为 false。
- use_mfra_for
对于可寻址的碎片化输入,从媒体碎片随机访问框中设置碎片的起始时间戳(如果存在)。
可用以下选项:
- ‘auto’
自动检测是否将 mfra 时间戳设置为 PTS 或 DTS(default)
- ‘dts’
将 mfra 时间戳设置为 DTS
- ‘pts’
将 mfra 时间戳设置为 PTS
- ‘0’
不使用 mfra 框设置时间戳
- use_tfdt
对于碎片化输入,将碎片的起始时间戳设置为
baseMediaDecodeTime来自tfdt框中的值。 默认启用,此时会优先使用tfdt框设置 DTS。禁用以使用earliest_presentation_time来自sidx的时间戳来源于mfra如果盒子可用,将使用该盒子use_mfra_for设置为pts或dts。- export_all
导出未识别的盒子内容到udta盒子作为元数据条目。盒子类型的前四个字符将被设置为键。默认值为false。
- export_xmp
导出整个XMP_盒子以及uuid盒子的内容为字符串,键为
xmp。请注意,当设置了export_all而未设置此选项时,XMP_盒子的内容仍然会被导出,但键为XMP_。默认值为false。- activation_bytes
解密Audible AAX和AAX+文件所需的4字节密钥。详见下面的Audible AAX子章节。
- audible_fixed_key
处理Audible AAX/AAX+文件的固定密钥。它已经预设,因此通常不需要指定。
- decryption_key
用于解密ISO通用加密(CENC/AES-128 CTR; ISO/IEC 23001-7)加密文件的16字节十六进制密钥。
- max_stts_delta
trak的stts盒中写入非常高的样本间隔可能是故意的,但通常是由于错误写入或用于存储负值以进行DTS修正。此选项允许用户设置一个上限,超出该范围的间隔将被限制为1。当值转换为int32为负数时,将用于调整后续的DTS。
单位是轨道时间刻度。范围是0到UINT_MAX。默认值是
UINT_MAX - 48000*10,允许对48 kHz音频流进行最多10秒的DTS修正,同时容纳99.9%的uint32范围。- interleaved_read
在解复用器级别上交织多个轨道的数据包。对于交织不良的文件,这可以防止由于不同轨道的数据包之间的较大间隔导致的播放问题,因为MOV/MP4文件对数据包放置没有具体要求。然而,这可能导致对交织非常差的文件进行过度寻址,从而在轨道之间进行寻址,因此禁用它可能会在播放的代价上防止I/O问题。
20.17.2 Audible AAX
Audible AAX文件是加密的M4B文件,可通过指定4字节激活密钥进行解密。
ffmpeg -activation_bytes 1CEB00DA -i test.aax -vn -c:a copy output.mp4
20.18 mpegts
MPEG-2传输流解复用器。
此解复用器接受以下选项:
- resync_size
设置寻找新同步后的大小限制。默认值为65536。
- skip_unknown_pmt
跳过PAT中未定义的程序的PMT。默认值为0。
- fix_teletext_pts
用第一个程序的PCR时间戳覆盖隐藏文字包的PTS和DTS值,前提是该程序的隐藏文字流没有被丢弃。默认值为1。如果希望隐藏文字包的PTS和DTS值保持不变,请将此选项设置为0。
- ts_packetsize
输出选项包含原始包的大小(以字节为单位)。显示检测到的原始包大小,用户不可设置。
- scan_all_pmts
扫描并合并所有PMT。值为整数,范围从-1到1(-1表示自动设置,1表示启用,0表示禁用)。默认值为-1。
- merge_pmt_versions
当PMT更新版本并且基本流移动到不同的PID时,重新使用现有的流。默认值为0。
- max_packet_size
设置由解复用器发出的数据包的最大大小(以字节为单位)。超过此大小的负载将拆分为多个数据包。范围为1到INT_MAX/2。默认值为204800字节。
20.19 mpjpeg
多部分MIME格式封装的MJPEG解复用器。
此解复用器允许读取MJPEG,其中每帧被表示为多部分/x-mixed-replace流的一部分。
- strict_mime_boundary
默认实现对多部分MIME边界检测采用宽松标准,以防止与众多现有终端未生成正确的MIME MJPEG流发生回归。通过将此选项设置为1可开启严格的边界值检查。
20.20 rawvideo
原始视频解复用器。
此解复用器允许读取原始视频数据。由于没有头来指定假定的视频参数,用户必须明确指定它们以正确解码数据。
此解复用器接受以下选项:
- framerate
设置输入视频帧率。默认值为25。
- pixel_format
设置输入视频像素格式。默认值为
yuv420p.- video_size
设置输入视频尺寸。此值必须显式指定。
例如,以原始视频文件input.raw为例,假设其像素格式为ffplay,视频尺寸为rgb24以及帧率为每秒10帧,请使用以下命令:320x240, and a frame rate of 10 images per second, use
the command:
ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw
20.21 rcwt
RCWT(包含时间的原始字幕)是ccextractor的原生格式,该工具是一个常用的开源工具,用于处理608/708隐藏字幕(CC)资源。有关格式的更多信息,请参阅(ffmpeg-formats)rcwtenc.
此解复用器实现了截至2024年3月的规格,该规格自2014年4月以来已稳定且未发生变化。
20.21.1 示例
- 使用内置解码器将隐藏字幕渲染为ASS:
ffmpeg -i CC.rcwt.bin CC.ass
请注意,如果输出似乎为空,则可能需要手动设置解码器的data_field选项以选择所需的隐藏字幕子流。
- 将RCWT备份转换为Scenarist (SCC)格式:
ffmpeg -i CC.rcwt.bin -c:s copy CC.scc
请注意,SCC格式不支持RCWT中可能存储的所有字幕扩展(例如EIA-708)。
20.22 sbg
SBaGen脚本解复用器。
此解复用器读取SBaGen使用的脚本语言http://uazu.net/sbagen/以生成脑波节奏声音会话。一个SBG脚本如下所示:
-SE a: 300-2.5/3 440+4.5/0 b: 300-2.5/0 440+4.5/3 off: - NOW == a +0:07:00 == b +0:14:00 == a +0:21:00 == b +0:30:00 off
SBG脚本可以混合使用绝对和相对时间戳。如果脚本只使用绝对时间戳(包括脚本起始时间)或只使用相对时间戳,则其布局固定,转换变得简单。而如果脚本两种时间戳都有混用,相对时间戳的NOW参考将从脚本读取时的当天时间获取,脚本布局将根据该参考冻结。这意味着如果直接播放脚本,实际时间将与绝对时间戳匹配(取决于声音控制设备的时钟精度),但如果用户以某种方式暂停播放或进行跳转,所有时间将相应地被移动。NOW reference for relative timestamps will be taken from the current time of day at the time the script is read, and the script layout will be frozen according to that reference. That means that if the script is directly played, the actual times will match the absolute timestamps up to the sound controller’s clock accuracy, but if the user somehow pauses the playback or seeks, all times will be shifted accordingly.
20.23 tedcaptions
TED没有提供字幕链接,但可以从页面中猜测。FFmpeg源码树中的tools/bookmarklets.html文件包含一个bookmarklet以显示它们。
此解复用器接受以下选项:
- start_time
设置TED演讲的开始时间(以毫秒为单位)。默认值为15000(15秒)。用于与可下载视频同步字幕,因为它们包含15秒的介绍。
示例:将字幕转换为大多数播放器可理解的格式:
ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt
20.24 vapoursynth
Vapoursynth包装器。
由于安全原因,Vapoursynth脚本不会自动检测,因此需强制指定输入格式。对于ff* CLI工具,请在输入之前添加-f vapoursynth。-i yourscript.vpy.
此解复用器接受以下选项:
- max_script_size
解复用器将整个脚本缓冲到内存中。调整此值可设置最大缓冲区大小,同时作为可读取脚本大小的上限。默认值为1 MiB。
20.25 w64
Sony Wave64音频解复用器。
此解复用器接受以下选项:
- max_size
请参阅wav解复用器的同名选项。
20.26 wav
RIFF Wave音频解复用器。
此解复用器接受以下选项:
- max_size
为解复用的数据包指定最大数据包大小(以字节为单位)。默认为0,意味着将根据输入格式选择一个合理值。
21 多路复用器
多路复用器是FFmpeg中配置的元素,允许将多媒体流写入特定类型的文件。
当您配置FFmpeg构建时,默认会启用所有支持的多路复用器。您可以使用配置选项列出所有可用多路复用器--list-muxers.
您可以通过配置选项禁用所有多路复用器--disable-muxers然后通过选项选择性地启用或禁用单一多路复用器--enable-muxer=MUXER /
--disable-muxer=MUXER.
选项-muxersff* 工具的选项将显示启用的复用器列表。使用-formats查看启用的解复用器和复用器的综合列表。
以下是目前可用的部分复用器的描述。
21.1 原始复用器
本节介绍原始复用器。它们接受与指定编解码器匹配的单个流。它们不存储时间戳或元数据。可识别的扩展名与复用器名称相同,除非另有说明。
包括以下复用器。所选的媒体类型及可能用于自动选择复用器的扩展名也会显示。
- ‘ac3 audio’
Dolby Digital,也称为 AC-3。
- ‘adx audio’
CRI Middleware ADX 音频。
当输出可查找且计数可存储在 32 位中时,复用器将在第一数据包的开头附近写出总样本计数。
- ‘aptx audio’
aptX(用于蓝牙的音频处理技术)
- ‘aptx_hd audio (aptxdh)’
aptX HD(用于蓝牙的音频处理技术)音频
- ‘avs2 video (avs, avs2)’
AVS2-P2(音视频标准 - 第二代 - 第二部分)/ IEEE 1857.4 视频
- ‘avs3 video (avs3)’
AVS3-P2(音视频标准 - 第三代 - 第二部分)/ IEEE 1857.10 视频
- ‘cavsvideo video (cavs)’
中国 AVS(音视频标准 - 第一代)
- ‘codec2raw audio’
Codec 2 音频。
没有注册扩展名,因此必须提供格式名称,例如使用 ffmpeg CLI 工具
-f codec2raw.- ‘data any’
通用数据复用器。
此复用器接受带有任意编解码器的单个流的任意类型。需要使用
-map选项选择输入流ffmpegCLI 工具。没有注册扩展名,因此必须提供格式名称,例如使用
ffmpegCLI 工具-f data.- ‘dfpwm audio (dfpwm)’
原始 DFPWM1a(动态滤波脉冲调制)音频复用器。
- ‘dirac video (drc, vc2)’
BBC Dirac 视频。
Dirac Pro编解码器是一个子集并被标准化为 SMPTE VC-2。
- ‘dnxhd video (dnxhd, dnxhr)’
Avid DNxHD 视频。
它被标准化为 SMPTE VC-3。接受 DNxHR 流。
- ‘dts audio’
DTS Coherent Acoustics(DCA)音频
- ‘eac3 audio’
Dolby Digital Plus,也称为增强的 AC-3
- ‘evc video (evc)’
MPEG-5 重要视频编码(EVC)/ EVC / MPEG-5 第 1 部分 EVC 视频
- ‘g722 audio’
ITU-T G.722 音频
- ‘g723_1 audio (tco, rco)’
ITU-T G.723.1 音频
- ‘g726 audio’
ITU-T G.726 大端(“左对齐”)音频。
没有注册扩展名,因此必须提供格式名称,例如使用
ffmpegCLI 工具-f g726.- ‘g726le audio’
ITU-T G.726 小端(“右对齐”)音频。
没有注册扩展名,因此必须提供格式名称,例如使用
ffmpegCLI 工具-f g726le.- ‘gsm audio’
全球移动通信系统(GSM)音频
- ‘h261 video’
ITU-T H.261 视频
- ‘h263 video’
ITU-T H.263 / H.263-1996、H.263+ / H.263-1998 / H.263 第2版 视频
- ‘h264 video (h264, 264)’
ITU-T H.264 / MPEG-4 第10部分 AVC 视频。如果处于长度前置模式,比特流应转换为附录 B 语法。
- ‘hevc video (hevc, h265, 265)’
ITU-T H.265 / MPEG-H 第2部分 HEVC 视频。如果处于长度前置模式,比特流应转换为附录 B 语法。
- ‘m4v video’
MPEG-4 第2部分视频
- ‘mjpeg video (mjpg, mjpeg)’
Motion JPEG 视频
- ‘mlp audio’
Meridian 无损打包,也称为 Packed PCM
- ‘mp2 audio (mp2, m2a, mpa)’
MPEG-1 音频层 II 音频
- ‘mpeg1video video (mpg, mpeg, m1v)’
MPEG-1 第2部分视频。
- ‘mpeg2video video (m2v)’
ITU-T H.262 / MPEG-2 第2部分视频
- ‘obu video’
AV1 低开销开放比特流单元复用器。
时间分界符 OBUs 将插入流的所有时间单元中。
- ‘rawvideo video (yuv, rgb)’
原始未压缩视频。
- ‘sbc audio (sbc, msbc)’
蓝牙 SIG 低复杂度子带编解码器音频
- ‘truehd audio (thd)’
杜比 TrueHD 音频
- ‘vc1 video’
SMPTE 421M / VC-1 视频
21.1.1 示例
- 使用 ‘rawvideo’ 复用器存储原始视频帧
ffmpeg:ffmpeg -f lavfi -i testsrc -t 10 -s hd1080p testsrc.yuv
由于原始视频复用器不存储与大小和格式相关的信息,因此在解复用文件时必须提供这些信息:
ffplay -video_size 1920x1080 -pixel_format rgb24 -f rawvideo testsrc.rgb
21.2 原始 PCM 复用器
本节介绍原始 PCM(脉冲编码调制)音频复用器。
它们接受与指定编解码器匹配的单个流。它们不存储时间戳或元数据。可识别的扩展名与复用器名称相同。
包括以下复用器。用于自动从输出扩展名选择复用器的可选附加扩展名也显示在括号中。
- ‘alaw (al)’
PCM A-law
- ‘f32be’
PCM 32 位浮点大端
- ‘f32le’
PCM 32 位浮点小端
- ‘f64be’
PCM 64 位浮点大端
- ‘f64le’
PCM 64 位浮点小端
- ‘mulaw (ul)’
PCM mu-law
- ‘s16be’
PCM 有符号 16 位大端
- ‘s16le’
PCM 有符号 16 位小端
- ‘s24be’
PCM 有符号 24 位大端
- ‘s24le’
PCM 有符号 24 位小端
- ‘s32be’
PCM 有符号 32 位大端
- ‘s32le’
PCM 有符号 32 位小端
- ‘s8 (sb)’
PCM 有符号 8 位
- ‘u16be’
PCM 无符号 16 位大端
- ‘u16le’
PCM 无符号 16 位小端
- ‘u24be’
PCM 无符号 24 位大端
- ‘u24le’
PCM 无符号 24 位小端
- ‘u32be’
PCM 无符号 32 位大端
- ‘u32le’
PCM 无符号 32 位小端
- ‘u8 (ub)’
PCM 无符号 8 位
- ‘vidc’
PCM Archimedes VIDC
21.3 MPEG-1/MPEG-2 程序流复用器
本节涵盖属于 MPEG-1 和 MPEG-2 系统框架的格式。
MPEG-1 系统格式(也称为 ISO/IEEC 11172-1 或 MPEG-1 程序流)已被采用为存储在 VCD(视频光盘)中的媒体轨道的格式。
MPEG-2 系统标准(也称为 ISO/IEEC 13818-1)涵盖了两种容器格式,一种称为传输流,另一种称为程序流;此处仅涵盖后者。
MPEG-2 程序流格式(也称为 VOB,因为其对应的文件扩展名)是 MPEG-1 程序流的扩展:除了支持音频和视频流的不同编解码器外,它还存储字幕和导航元数据。MPEG-2 程序流已被采用用于在 SVCD 和 DVD 存储设备中存储媒体流。
本节包括以下复用器。
- ‘mpeg (mpg,mpeg)’
MPEG-1 系统 / MPEG-1 程序流复用器。
- ‘vcd’
MPEG-1 系统 / MPEG-1 程序流 (VCD) 复用器。
此复用器可用于生成 VCD(视频光盘)存储设备接受的格式的轨道。
它与 ‘mpeg’ 复用器相同,但略有不同。
- ‘vob’
MPEG-2 程序流 (VOB) 复用器。
- ‘dvd’
MPEG-2 程序流 (DVD VOB) 复用器。
此复用器可用于生成 DVD(数字多功能光盘)存储设备接受格式的轨道。
这与 ‘vob与其他几种封装器稍有不同。
- ‘svcd (vob)’
MPEG-2节目流(SVCD VOB)封装器。
此封装器可用于生成SVCD(超级视频光盘)存储设备接受的轨道格式。
与‘vob’封装器类似,但稍有不同。
21.3.1 选项
- muxrate 码率
设置用户定义的封装码率,以比特/秒为单位。如果未指定,则采用自动计算的封装码率。默认值为
0.- preload 延迟
设置初始解封装-解码延迟,以微秒为单位。默认值为
500000.
21.4 MOV/MPEG-4/ISOMBFF封装器
本节介绍属于QuickTime/MOV家族的格式,包括MPEG-4 Part 14格式和ISO基础媒体文件格式(ISOBMFF)。这些格式基于ISO基础媒体文件格式(ISOBMFF)的通用结构。
MOV格式最初开发用于Apple QuickTime,后来成为MPEG-4 Part 1(后来称为Part 14)格式的基础,也称为ISO/IEC 14496-1。随后此格式被泛化为ISOBMFF,也称为MPEG-4 Part 12格式、ISO/IEC 14496-12或ISO/IEC 15444-12。
它包括以下封装器。
- ‘3gp’
第三代合作伙伴项目(3GPP)用于3G UMTS多媒体服务的格式
- ‘3g2’
第三代合作伙伴项目2(3GP2或3GPP2)用于3G CDMA2000多媒体服务的格式,类似于‘3gp’,但有扩展和限制
- ‘f4v’
Adobe Flash视频格式
- ‘ipod’
MPEG-4音频文件格式,与MOV/MP4类似,但仅限于包含音频流,通常与Apple iPod设备播放。
- ‘ismv’
微软IIS(互联网信息服务)平滑流音视频(ISMV或ISMA)格式。基于MPEG-4 Part 14格式,但存在一些不兼容的变体,用于为微软IIS服务器流媒体文件。
- ‘mov’
QuickTime播放器格式,其文件扩展名为
.mov扩展名- ‘mp4’
MP4或MPEG-4 Part 14格式
- ‘psp’
PlayStation Portable MP4/MPEG-4 Part 14格式变体。基于MPEG-4 Part 14格式,但存在一些不兼容的变体,用于在PlayStation设备上播放文件。
21.4.1 分片
‘mov’, ‘mp4’及‘ismv’封装器支持分片。通常,MOV/MP4文件将所有数据包的元数据存储在一个位置。
这些数据通常写在文件末尾,但可以通过添加+faststart到-movflags,或使用qt-faststart工具,将其移动到文件开头以改善播放效果。
分片文件由多个片段组成,其中数据包及相关元数据显示在一起。写入分片文件的优点是即使写入中断(而正常MOV/MP4未正确完成时无法解码),文件也可解码;此外,写入很长时间的文件时需要较少的内存(因为写入普通MOV/MP4文件会在内存中存储每个单个数据包的详细信息,直到文件关闭)。缺点是它与其他应用程序的兼容性较差。
通过设置定义如何将文件切分成片段的选项之一可以启用分片功能:
- frag_duration
- frag_size
- min_frag_duration
- movflags +frag_keyframe
- movflags +frag_custom
如果指定了多个条件,则当满足其中一个条件时会切分片段。例外情况是选项min_frag_duration,该条件必须满足才能使其他条件生效。
21.4.2 选项
- brand 品牌字符串
覆盖主要品牌。
- empty_hdlr_name 布尔值
启用以跳过写入‘
hdlr’盒中的名字。默认值为false.- encryption_key 密钥
设置十六进制格式的媒体加密密钥
- encryption_kid 密钥标识符
设置十六进制格式的媒体加密密钥标识符
- encryption_scheme 加密方案
配置加密方案,可允许的值为‘none’与‘cenc-aes-ctr’
- frag_duration 持续时间
创建每段持续时间为持续时间微秒的片段。
- frag_interleave 号码
在片段内交错样本(最大连续样本数,较低值表示更紧密的交错,但具有更高开销)。默认设置为
0。- frag_size 大小
创建包含最多大小字节的有效载荷数据的片段
- iods_audio_profile 配置文件
为音频配置文件原子指定IODS编号(范围从-1到255),默认值为
-1- iods_video_profile 配置文件
为视频配置文件原子指定IODS编号(范围从-1到255),默认值为
-1- ism_lookahead 条目数量
为ISM文件指定预读条目数(范围从0到255),默认值为
0- min_frag_duration 持续时间
不要创建持续时间短于持续时间微秒的片段
- moov_size 字节
在文件开头为moov原子保留空间,而不是将moov原子放在文件末尾。如果保留的空间不足,则封装操作会失败。
- mov_gamma 伽玛值
为gama原子指定伽玛值(以小数形式,范围从0到10),默认值为
0.0,必须与+ movflags- movflags 标志位
设置各种封装开关。可使用以下标志:
- ‘cmaf’
写入符合CMAF(通用媒体应用格式)规范的分片MP4输出
- ‘dash’
写入符合DASH(动态自适应流式传输)规范的分片MP4输出
- ‘default_base_moof’
类似于‘omit_tfhd_offset’标志,此标志避免在tfhd原子中写入绝对base_data_offset字段,而是使用新的default-base-is-moof标志代替。此标志是14496-12:2012引入的新功能。这可能在某些情况下使片段更易解析(避免基于之前的轨道片段的隐式结束来计算轨道片段位置)。
- ‘delay_moov’
延迟写入初始moov,直到切分第一个片段,或直到首次片段刷新。
- ‘disable_chpl’
禁用Nero章节标记(chpl原子)。通常,文件会同时写入Nero章节和QuickTime章节轨道。设置此选项后,仅QuickTime章节轨道会被写入。Nero章节可能会导致文件在使用某些标签程序重新处理时失败,例如mp3Tag 2.61a和iTunes 11.3,可能还有其他版本受影响。
- ‘faststart’
运行第二次操作将索引(moov原子)移到文件开始处。此操作可能需要较长时间,且不会在某些情况下工作,例如分片输出,因此默认情况下未启用。
- ‘frag_custom’
允许调用者手动选择何时切分片段,方法是调用
av_write_frame(ctx, NULL)写入到目前为止的分片(仅对集成libavformat的其他应用程序有用,不适用于ffmpeg.)- ‘frag_discont’
表明下一个片段与之前的片段不同步。
- ‘frag_every_frame’
为每帧切分片段。
- ‘frag_keyframe’
在每个视频关键帧开始新的片段。
- ‘global_sidx’
在文件开头写入全局sidx索引。
- ‘isml’
创建实时平滑流媒体传送流(用于推送到发布点)。
- ‘negative_cts_offsets’
启用CTTS盒版本1的使用,其中CTS偏移可以为负值。这使得初始样本的DTS/CTS值为零,并减少了某些情况下对编辑列表的需求,例如包含B帧的视频轨道。此外,有助于符合DASH-IF互操作性指南。
在写入‘ismv’(平滑流媒体)文件时,此选项将自动设置。
- ‘omit_tfhd_offset’
不要在tfhd原子中写入任何绝对base_data_offset。这避免了将片段与文件/流中的绝对字节位置绑定。
- ‘prefer_icc’
如果写入colr原子,则优先使用流数据包侧数据中的ICC配置文件(如果存在)。
- ‘rtphint’
在输出文件中添加RTP提示轨道。
- ‘separate_moof’
为每条轨道分别写入一个moof(电影片段)原子。通常,所有轨道的数据包写入一个moof原子(稍微更高效),但设置此选项后,封装器会为每条轨道写入一个moof/mdat对,使分离轨道更容易。
- ‘skip_sidx’
跳过写入sidx原子。当由于sidx原子导致的比特率开销较高时,此选项可用于sidx原子不是强制性的情况。如果启用了‘global_sidx’标志,此选项将被忽略。
- ‘skip_trailer’
跳过为分片文件写入mfra/tfra/mfro尾部
- ‘use_metadata_tags’
使用mdta原子存储元数据
- ‘write_colr’
即使未指定颜色信息,也写入colr原子。此标志为实验性功能,可能被重命名或更改,请勿在脚本中使用。
- ‘write_gama’
写入已弃用的gama原子
- ‘hybrid_fragmented’
为了恢复能力,将输出文件写为分片文件。这使得在写入过程中可以读取中间文件(尤其是在写入进程异常中止的情况下)。写入完成后,文件会转化为常规的非分片文件,这更加兼容并且允许更容易和更快速的搜索。
如果写入中止,可以手动重新复用中间文件以获取已写入内容的常规非分片文件。
- movie_timescale 缩放比例
设置写在电影头盒中的时间比例(
mvhd)。范围为1到INT_MAX。默认值为1000.- rtpflags 标志
向输出文件添加RTP提示轨道。
以下标志可以使用:
- ‘h264_mode0’
为H.264在RTP中使用0模式
- ‘latm’
为AAC使用MP4A-LATM包而不是MPEG4-GENERIC
- ‘rfc2190’
为H.263使用RFC 2190包格式而不是RFC 4629
- ‘send_bye’
在结束时发送RTCP BYE数据包
- ‘skip_rtcp’
不发送RTCP发送者报告数据包
- skip_iods 布尔值
跳过写入iods原子(默认值为
true)- use_editlist 布尔值
使用编辑列表(默认值为
auto)- use_stream_ids_as_track_ids 布尔值
使用流ID作为轨道ID(默认值为
false)- video_track_timescale 缩放比例
设置视频轨道使用的时间比例。范围为
0到INT_MAX。如果设置为0,则时间比例将基于原生流时间基自动设置。默认值为0.- write_btrt 布尔值
强制或禁用在轨道的stsd盒内部写入比特率盒。该盒包含解码缓冲区大小(以字节为单位)、最大比特率和平均比特率。默认值为
-1或auto,这将在MP4模式下写入盒。- write_prft 选项
使用指定的时间源为PRFT盒中的NTP字段写入生产者时间参考盒。设置值为‘wallclock’以指定时间源为挂钟时间,设置为‘pts’以指定时间源为输入数据包的PTS值。
- write_tmcd 布尔值
设置
on以强制写入时间码轨道,设置off以禁用时间码轨道写入,设置auto以仅为mov和mp4输出写入时间码轨道(默认值)。将值设置为‘pts’仅适用于实时编码场景,其中PTS值作为源的挂钟时间。例如,在编码场景下使用decklink捕获源时,video_pts和audio_pts被设置为‘abs_wallclock’.
21.4.3 示例
- 以实时方式将平滑流媒体内容推送到IIS上的发布点,使用‘ismv’复用器,使用
ffmpeg:ffmpeg -re <正常输入/转码选项> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
21.5 a64
A64 Commodore 64视频复用器。
此复用器接受单个a64_multi或a64_multi5编解码器的视频流。
21.6 ac4
原始AC-4音频复用器。
此复用器接受单个ac4音频流。
21.6.1 选项
- write_crc 布尔值
启用时,为每个数据包写入CRC校验,默认值为
false
21.7 adts
音频数据传输流复用器。
它接受单个AAC流。
21.7.1 选项
- write_id3v2 布尔值
启用时,在流开始时写入ID3v2.4标签。默认情况为禁用。
- write_apetag 布尔值
启用时,在流结尾处写入APE标签。默认情况为禁用。
- write_mpeg2 布尔值
启用时,将ADTS帧头中的MPEG版本位设置为1,这表示MPEG-2。默认值为0,表示MPEG-4。
21.8 aea
MD STUDIO音频复用器。
此复用器接受单个ATRAC1音频流,声道数可为1或2,采样率为44100Hz。
由于AEA支持存储轨道标题,此复用器还将把流元数据中的标题写入容器。
21.9 aiff
音频交换文件格式复用器。
21.9.1 选项
- write_id3v2 布尔值
在设置为1时启用ID3v2标签写入。默认值为0(禁用)。
- id3v2_version 布尔值
选择要写入的ID3v2版本。目前仅支持版本3和4(即ID3v2.3和ID3v2.4)。默认是版本4。
21.10 alp
高电压软件的《乐高赛车》游戏音频复用器。
它接受单个ADPCM_IMA_ALP流,声道数不超过2,采样率不超过44100 Hz。
扩展名:tun, pcm
21.10.1 选项
- type 类型
设置文件类型。
类型接受以下值:
- ‘tun’
将文件类型设置为音乐。必须有22050 Hz的采样率。
- ‘pcm’
将文件类型设置为音效。
- ‘auto’
根据输出文件扩展名设置文件类型。
.pcm结果为类型pcm否则类型tun被设置。(默认)
21.11 amr
3GPP AMR(自适应多速率)音频复用器。
它接受单个AMR NB音频流。
21.12 amv
AMV (动作媒体视频)格式复用器。
21.13 apm
育碧《雷曼2》APM音频复用器。
它接受一个单通道的ADPCM IMA APM音频流。
21.14 apng
动画便携网络图形(APNG)复用器。
它接受一个APNG视频流。
21.14.1 选项
- final_delay 延迟
在每次重复的最后一帧后强制延迟,以秒计,默认值为
0.0.- plays 重复次数
指定内容播放次数,
0导致无限循环,1不循环
21.14.2 示例
- 使用
ffmpeg生成一个具有2次重复的APNG输出,并在第一次重复后延迟半秒:ffmpeg -i INPUT -final_delay 0.5 -plays 2 out.apng
21.15 argo_asf
阿果诺游戏ASF音频复用器。
它接受一个单通道ADPCM音频流。
21.15.1 选项
- version_major 版本
覆盖文件的主版本号,指定为整数,默认值为
2- version_minor 版本
覆盖文件的小版本号,指定为整数,默认值为
1- name 名称
将文件名嵌入文件中,如果未指定,则使用输出文件名。名称被截取为8个字符。
21.16 argo_cvg
阿果诺游戏CVG音频复用器。
它接受一个单通道的22050Hz ADPCM音频流。
选项loop和reverb选项在头部中设置相应的标志,这些标志可以稍后检索以相应处理音频流。
21.16.1 选项
- skip_rate_check 布尔值
跳过采样率检查(默认值为
false)- loop 布尔值
设置循环标志(默认值为
false)- reverb 布尔值
设置混响标志(默认值为
true)
21.17 asf, asf_stream
高级/主动系统(或流)格式音频复用器。
‘asf_stream’变体应选择用于流媒体。
请注意,Windows Media音频(wma)和视频(wmv)也使用此复用器。
21.17.1 选项
- packet_size 大小
设置复用器数据包大小,以字节数表示。通过调节此设置,可以减少数据碎片化或复用器开销,具体取决于源数据。默认值为
3200,最小值为100,最大值为64Ki.
21.18 ass
ASS/SSA(字幕站Alpha)字幕复用器。
它接受一个ASS字幕流。
21.18.1 选项
- ignore_readorder 布尔值
立即写入对话事件,即使它们是无序的,默认值为
false,否则会缓存,直到找到预期时间事件。
21.19 ast
AST(音频流)复用器。
此格式用于播放某些任天堂Wii游戏音频。
它接受一个音频流。
选项loopstart和loopend选项可以用于为支持这些选项的播放器定义一个文件循环段。
21.19.1 选项
- loopstart 开始
指定循环起始位置,以毫秒为单位,从
-1到INT_MAX,如果设置为-1则不指定循环(默认为-1),并忽略loopend值。- loopend 结束
指定循环结束位置,以毫秒为单位,从
0到INT_MAX,默认值为0,如果设置为0则假定是总流的持续时间。
21.20 au
SUN AU音频复用器。
它接受一个音频流。
21.21 avi
音频视频交错复用器。
AVI是微软开发的一种专有格式,后来通过开放DML规范正式指定。
由于播放器实现的差异,可能需要设置某些选项以确保生成的输出能被目标播放器正确播放。
21.21.1 选项
- flipped_raw_rgb 布尔值
如果设置为
true,为原始RGB位图存储正高,它指示位图是自底向上存储的。注意,此选项不会翻转位图,必须预先手动完成,例如通过使用‘vflip’过滤器。默认值为false,表示位图是自顶向下存储的。- reserve_index_space 大小
在文件头部为每个流的OpenDML主索引预留指定的字节数。默认情况下,如果第一个主索引中没有剩余空间,则额外的主索引嵌入到数据包内,并链接为索引链。这种索引结构会为某些使用场景带来问题,例如第三方软件严格依赖OpenDML索引规范或文件寻址速度缓慢。在文件头中预留足够的索引空间可以避免这些问题。
所需索引空间取决于输出文件大小,大约是每千兆字节16字节。当此选项省略或设置为零时,必要的索引空间将被猜测。
默认值为
0.- write_channel_mask 布尔值
将频道布局掩码写入音频流头部。
此选项默认启用。禁用频道掩码可能在某些特定场景中有用,例如合并多个音频流为一个,以兼容仅支持AVI中单一音频流的软件(见(ffmpeg-filters) ffmpeg过滤器手册中的"amerge"部分).
21.22 avif
AV1 (Alliance for Open Media Video codec 1) 图像格式复用器。
该复用器用于存储通过 AV1 编解码器编码的图像。
它接受一个或两个视频流。如果提供两个视频流,第二个视频流应包含存储 alpha mask 的单个平面。
如果提供多个图像,生成的输出将被认为是动画 AVIF,可以使用loop选项指定循环次数。
基于开放媒体联盟在以下网址的规范https://aomediacodec.github.io/av1-avif.
21.22.1 选项
- loop count
动画 AVIF 的循环次数,
0指定无限循环,默认值为0- movie_timescale timescale
设置写入视频头部的时间刻度 (
mvhd)。范围为 1 到 INT_MAX。默认值为1000.
21.23 avm2
ShockWave Flash (SWF) / ActionScript Virtual Machine 2 (AVM2) 格式复用器。
它接受一个音频流、一个视频流或两者。
21.24 bit
G.729 (.bit) 文件格式复用器。
它接受单个 G.729 音频流。
21.25 caf
Apple CAF (Core Audio Format) 复用器。
它接受单个音频流。
21.26 codec2
Codec2 音频复用器。
它接受单个 codec2 音频流。
21.27 chromaprint
Chromaprint 指纹生成复用器。
要启用此过滤器的编译,您需要使用以下配置 FFmpeg--enable-chromaprint.
此复用器将音频数据传递给 Chromaprint 库,该库为提供的音频数据生成指纹。参见:https://acoustid.org/chromaprint
它接受最多2通道的、16位原生字节序的原始音频流。
21.27.1 选项
- algorithm version
选择指纹算法的版本。范围是
0到4。版本3启用静默检测。默认值为1.- fp_format format
选择指纹输出的格式。接受以下选项:
- ‘base64’
Base64 压缩指纹(default)
- ‘compressed’
二进制压缩指纹
- ‘raw’
二进制原始指纹
- silence_threshold threshold
检测静默的阈值。范围是
-1到32767,其中-1关闭静默检测。静默检测只能与版本3的算法一起使用。对于使用 AcoustID 服务,需要禁用静默检测。默认值为
-1.
21.28 crc
CRC (循环冗余校验) 复用器。
此复用器计算并打印所有输入音频和视频帧的 Adler-32 CRC。默认情况下,音频帧会转换为16位有符号原始音频,视频帧会转换为原始视频后再计算 CRC。
复用器的输出由单行形式组成: CRC=0xCRC,其中CRC是包含所有解码输入帧的 0 填充至 8 位的十六进制数字。
另请参见framecrc复用器。
21.28.1 示例
- 使用
ffmpeg计算输入的 CRC,并将其存储到文件out.crc:ffmpeg -i INPUT -f crc out.crc
- 使用
ffmpeg将 CRC 打印到标准输出,命令为:ffmpeg -i INPUT -f crc -
- 您可以通过
ffmpeg选择每帧的输出格式,指定音频和视频的编解码器和格式。例如,要计算输入音频转换为 PCM 无符号 8 位以及输入视频转换为 MPEG-2 视频的 CRC,请使用以下命令:ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
21.29 dash
基于 HTTP 的动态自适应流 (DASH) 复用器。
该复用器根据 MPEG-DASH 标准 ISO/IEC 23009-1:2014 和后续标准更新创建段和清单文件。
更多信息参见:
- ISO DASH 规范:http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip
- WebM DASH 规范:https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification
该复用器会为每个流创建 MPD (媒体呈现描述) 清单文件和段文件。段文件存放在 MPD 清单文件的同一目录中。
段文件名可能包含清单中使用的预定义标识符SegmentTemplate部分定义于标准的第5.3.9.4.4节。
可用标识符包括$RepresentationID$, $Number$,
$Bandwidth$以及$Time$。除了标准标识符外,还支持一个 ffmpeg 特定的$ext$标识符。当指定时,ffmpeg将会用复用格式的扩展名(如$ext$等)替换文件名中的mp4,
webm。
21.29.1 选项
- adaptation_sets adaptation_sets
根据 MPD 清单
AdaptationSets部分分配流到自适应集。一个自适应集包含一个或多个流,可作为单个子集访问,例如用户可根据可用带宽选择不同尺寸编码的对应流,或者选择不同语言的音频流。
每个自适应集使用以下语法指定:
id=index,streams=streams
其中index必须是数值索引,streams是由
,-分隔的流索引序列。多个自适应集可通过空格分隔指定。将所有视频(或音频)流映射到一个适配集,
v(或a)可用作流标识符而不是ID。当未定义分配时,默认情况下每个流对应一个适配集。
还可以指定以下可选字段:
- descriptor
定义ISO/IEC 23009-1:2014/Amd.2:2015所定义的描述符。
例如:
<SupplementalProperty schemeIdUri=\"urn:mpeg:dash:srd:2014\" value=\"0,0,0,1,1,2,2\"/>
描述符字符串应该是一个自闭合的XML标签。
- frag_duration
覆盖使用frag_duration选项指定的全局片段持续时间。
- frag_type
覆盖使用frag_type选项指定的全局片段类型。
- seg_duration
覆盖使用seg_duration选项指定的全局分段持续时间。
- trick_id
标记适配集包含用于参考适配集的快速模式的流。
以下是adaptation_sets选项的一些可能值的示例:
id=0,seg_duration=2,frag_duration=1,frag_type=duration,streams=v id=1,seg_duration=2,frag_type=none,streams=a
id=0,seg_duration=2,frag_type=none,streams=0 id=1,seg_duration=10,frag_type=none,trick_id=0,streams=1
- dash_segment_type 类型
设置DASH分段文件类型。
可能的值:
- ‘auto’
Dash分段文件格式将根据流的编解码器选择。这是默认模式。
- ‘mp4’
Dash分段文件将采用ISOBMFF/MP4格式。
- ‘webm’
Dash分段文件将采用WebM格式。
- extra_window_size 大小
设置在从磁盘中删除之前保留在清单之外的最大分段数。
- format_options 选项列表
使用容器格式(mp4/webm)选项,通过
:-分隔的键值对参数列表进行设置。包含:特殊字符的值必须进行转义。- frag_duration 持续时间
设置分段中片段的时间长度(以秒为单位),也可设置小数值。
- frag_type 类型
设置分段的间隔类型。
可能的值:
- ‘auto’
每个分段设置一个片段。
- ‘every_frame’
在每帧处分段。
- ‘duration’
在特定时间间隔处分段。
- ‘pframes’
在关键帧和后续的P帧排序处分段(仅视频,实验性)。
- global_sidx 布尔值
写入全局
SIDX原子。仅适用于单个文件、mp4输出、非流模式。- hls_master_name 文件名
HLS主播放列表名称。默认值为master.m3u8.
- hls_playlist 布尔值
生成HLS播放列表文件。主播放列表的文件名由hls_master_name选项指定。每个流都会生成一个媒体播放列表文件,文件名为media_0.m3u8, media_1.m3u8等。
- http_opts http选项
指定一个由
:-分隔的键值选项列表,将其传递给底层的HTTP协议。仅适用于HTTP输出。- http_persistent 布尔值
使用持久性的HTTP连接。仅适用于HTTP输出。
- http_user_agent 用户代理
覆盖HTTP头中的User-Agent字段。仅适用于HTTP输出。
- ignore_io_errors 布尔值
忽略打开和写入时的IO错误。适用于带有网络输出的长时运行。默认情况下禁用。
- index_correction 布尔值
启用或禁用分段索引修正逻辑。仅在use_template启用且use_timeline禁用时适用。默认情况下禁用。
启用后,逻辑会监控分段索引流。如果某流的分段索引值未处于预期的实时位置,则逻辑会纠正该索引值。
此逻辑通常用于实时流媒体场景。在长时间运行的流媒体过程中,网络带宽波动是常见的。每次波动都可能导致分段索引落后于预期的实时位置。
- init_seg_name 初始化名称
用于初始化分段的DASH模板化名称。默认值为
init-stream$RepresentationID$.$ext$.$ext$会被替换为特定于分段格式的文件扩展名。- ldash 布尔值
通过约束某些元素的存在和值来启用低延迟DASH。默认情况下禁用。
- lhls 布尔值
启用低延迟HLS(LHLS)。添加
#EXT-X-PREFETCH标签以及当前分段的URI。hls.js播放器正在尝试规范化一个开放的LHLS标准。草案标准可在https://github.com/video-dev/hlsjs-rfcs/blob/lhls-spec/proposals/0001-lhls.md.此选项尝试符合上述开放标准。自动启用streaming和hls_playlist选项。这是一个实验性功能。
注意:这不是Apple版本的LHLS。详见https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis
- master_m3u8_publish_rate 分段间隔计数
在指定的分段间隔后重复发布主播放列表。
- max_playback_rate 速率
设置最大播放速率,以便在正常播放过程中客户端自动调整播放延迟和缓冲区占用。
- media_seg_name 分段名称
用于媒体分段的DASH模板化名称。默认值为
chunk-stream$RepresentationID$-$Number%05d$.$ext$.$ext$会被替换为特定于分段格式的文件扩展名。- method 方法
使用指定的HTTP方法创建输出文件。通常设置为
PUT或POST.- min_playback_rate 速率
设置最小播放速率,以便在正常播放过程中客户端自动调整播放延迟和缓冲区占用。
- mpd_profile 标志
设置一个或多个MPD清单配置文件。
可能的值:
- ‘dash’
MPEG-DASH ISO基础媒体文件格式实时配置文件。
- ‘dvb_dash’
DVB-DASH配置文件。
默认值为
dash.- remove_at_exit 布尔值
启用或禁用在完成后移除所有分段。默认情况下禁用。
- seg_duration 持续时间
设置分段的长度(以秒为单位,可设置小数值)。当use_template选项启用且use_timeline选项禁用时,其值被视为平均分段持续时间;对于其他情形,其值被视为最小分段持续时间。
默认值是
5.- single_file 布尔值
启用或禁用将所有片段存储在一个文件中,通过字节范围访问。默认情况下禁用。
单一文件的名称可以通过single_file_name选项指定,若未指定,则假定为清单文件的基础名称并附加输出格式扩展名。
- single_file_name file_name
用于清单元素的DASH模板化名称。
baseURL意味着single_file选项设置为true。在模板中,$ext$将被替换为针对片段格式特定的文件扩展名。- streaming 布尔值
启用或禁用输出的块流模式。在块流模式下,每帧将成为一个片段从而构成一个块。默认情况下禁用。
mooffragment which forms a chunk. This is disabled by default.- target_latency 目标延迟
设置服务的目标延迟(单位为秒,可以设置小数值)。仅在streaming和write_prft选项启用时可用。这是一个信息字段,客户端可用于测量服务的延迟。
- timeout 超时
为套接字I/O操作设置超时时间,单位为秒(可以设置小数值)。仅适用于HTTP输出。
- update_period 更新周期
设置MPD更新周期,用于动态内容。单位为秒。如果设置为
0,则周期自动计算。默认值是
0.- use_template 布尔值
启用或禁用在清单中使用
SegmentTemplate而不是SegmentList。默认情况下启用。- use_timeline 布尔值
启用或禁用在
SegmentTimeline清单部分中使用SegmentTemplate。默认情况下启用。- utc_timing_url URL
返回UTC时间戳的页面的URL,形式为ISO格式,例如
https://time.akamai.com/?iso- window_size 大小
设置清单中保留的最大片段数量,丢弃最旧的片段。这对于实时流非常有用。
如果值为
0,则所有片段都保留在清单中。默认值是0.- write_prft 写入prft
在支持的流中写入生产者参考时间元素。这还启用了底层混合器中的prft盒写入。仅在utc_url选项启用时适用。默认设置为auto,此时混合器将尝试仅在需要它的模式中启用它。
21.29.2 示例
使用实时输入源生成DASH输出ffmpeg.
从输入文件生成两个多媒体流,这两个流都包含一个通过‘libx264’编码的视频流和一个通过‘libfdk_aac’编码的音频流。第一个多媒体流包含800k比特率的视频和默认速率的音频,第二个包含缩放为320x170像素、比特率为300k的视频和采样率为22005Hz的音频。
The window_size选项仅保留最近的5个片段,默认时长为5秒。
ffmpeg -re -i <input> -map 0 -map 0 -c:a libfdk_aac -c:v libx264 \ -b:v:0 800k -profile:v:0 main \ -b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline -ar:a:1 22050 \ -bf 1 -keyint_min 120 -g 120 -sc_threshold 0 -b_strategy 0 \ -use_timeline 1 -use_template 1 -window_size 5 \ -adaptation_sets "id=0,streams=v id=1,streams=a" \ -f dash /path/to/out.mpd
21.30 daud
D-Cinema音频混合器。
接受单通道6声道音频流,并重新采样为96000Hz,使用pcm_24daud编解码器进行编码。
21.30.1 示例
使用ffmpeg将输入音频混合到5.1声道布局并重新采样为96000Hz:
ffmpeg -i INPUT -af aresample=96000,pan=5.1 slow.302
对于7.0之前的ffmpeg版本,可能需要使用asetnsamples过滤器限制混合数据包大小,因为此格式不支持大于65535字节(3640样本)的数据包进行混合。对于较新的ffmpeg版本,音频将自动打包成36000字节(2000样本)的数据包。
21.31 dv
DV(数字视频)混合器。
精确接受一个‘dvvideo’视频流,最多两个‘pcm_s16’音频流。更多约束由视频的属性定义,其必须与支持的DV视频配置文件相对应,并取决于帧速。
21.31.1 示例
使用ffmpeg转换输入:
ffmpeg -i INPUT -s:v 720x480 -pix_fmt yuv411p -r 29.97 -ac 2 -ar 48000 -y out.dv
21.32 ffmetadata
FFmpeg元数据混合器。
此混合器以‘ffmetadata’格式写入流元数据。
参见(ffmpeg格式)元数据章节了解有关该格式的信息。
21.32.1 示例
使用ffmpeg从输入文件提取元数据到metadata.ffmeta以‘ffmetadata’格式保存:
ffmpeg -i INPUT -f ffmetadata metadata.ffmeta
21.33 fifo
FIFO(先进先出)混合器。
‘fifo’伪混合器允许通过使用先进先出队列并在单独线程中运行实际混合器,将编码与混合分离。
这在与tee混合器结合使用时尤其有用,并且可用于将数据发送到多个具有不同可靠性/写入速度/延迟的目标目的地。
目标混合器从输出名称选择或通过fifo_format选项指定。
队列填满或输出失败(例如数据包无法写入输出)时,‘fifo’混合器的行为是可选择的:
- 输出可通过基于实时或已处理流时间之间的配置延迟进行透明重启。
- 在遇到临时失败时,编码过程可阻塞,也可透明进行,丢弃填满FIFO队列时的部分数据包。
API用户需注意,interrupt_callback, io_open和io_close回调功能AVFormatContext中使用的
必须线程安全。
- attempt_recovery 布尔值
如果出现故障,尝试恢复输出。这在用于网络输出时特别有用,因为它可以在不中断流的情况下透明地重新开始流传输。默认情况下,此选项设置为
false.- drop_pkts_on_overflow 布尔值
如果设置为
true,当FIFO队列满时,数据包将被丢弃而不是阻塞编码器。这样可以在不延迟输入的情况下继续流传输,但代价是省略了一部分数据流。默认情况下,此选项设置为false,因此在这种情况下,编码器会被阻塞,直到多路复用器处理某些数据包且没有任何丢失为止。- fifo_format 格式名称
指定格式名称。如果无法从输出名称后缀猜测出格式名称,则此选项非常有用。
- format_opts 选项
为底层多路复用器指定格式选项。多路复用器选项可以指定为一系列键=值对,用':'隔开。
- max_recovery_attempts 计数
设置连续不成功的恢复尝试的最大次数,超过此次数后输出将永久失败。默认情况下,此选项设置为
0(无限制)。- queue_size 大小
以数据包数量指定队列大小。默认值为
60.- recover_any_error 布尔值
如果设置为
true,无论导致故障的错误类型如何,都会尝试恢复。默认情况下,此选项设置为false,并且在某些情况下(通常是永久性错误)即使attempt_recovery选项设置为true.- recovery_wait_streamtime 布尔值
如果设置为
false,在等待恢复尝试时,将使用真实时间(即恢复将在recovery_wait_time选项指定的时间后尝试)。如果设置为
true,则会考虑处理流的时间(即恢复将在丢弃与recovery_wait_time选项对应的数据包之后尝试)。默认情况下,此选项设置为
false.- recovery_wait_time 持续时间
指定在前一次恢复尝试失败后,等待下一次恢复尝试的时间(以秒为单位)。默认值为
5.- restart_with_keyframe 布尔值
指定从队列溢出或失败恢复后是否等待关键帧。此选项默认设置为
false。- timeshift 持续时间
缓冲指定数量的包并延迟写入输出。请注意,queue_size选项的值必须足够大以存储用于时间偏移的数据包。在输入结束时,FIFO缓冲区会以实时速度刷新。
21.33.2 示例
使用ffmpeg将流发送到RTMP服务器,即使发生临时故障(网络中断)也继续以实时速率处理流,并尝试每秒无限期地恢复流传输:
ffmpeg -re -i ... -c:v libx264 -c:a aac -f fifo -fifo_format flv \ -drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 \ -map 0:v -map 0:a rtmp://example.com/live/stream_name
21.34 film_cpk
世嘉影片(.cpk)多路复用器。
此格式曾被用于几个世嘉游戏的内部格式。
有关世嘉影片文件格式的更多信息,请访问http://wiki.multimedia.cx/index.php?title=Sega_FILM.
它最多接受一个‘cinepak’或原始视频流,以及最多一个音频流。
21.35 filmstrip
Adobe Filmstrip 多路复用器。
此格式被多个Adobe工具用于存储生成的影片条输出。它接受单个原始视频流。
21.36 fits
灵活图像传输系统(FITS)多路复用器。
此图像格式用于存储天文数据。
有关格式的更多信息,请访问https://fits.gsfc.nasa.gov.
21.37 flac
原始FLAC音频多路复用器。
此多路复用器只接受一个FLAC音频流。此外,可以添加带有‘attached_pic’.
21.37.1 选项
- write_header 布尔值
如果设置为
true,将写入文件头,默认值为true
21.37.2 示例
使用ffmpeg从输入文件存储音频流,连同用于‘attached_pic’用途的几张图片:
ffmpeg -i INPUT -i pic1.png -i pic2.jpg -map 0:a -map 1 -map 2 -disposition:v attached_pic OUTPUT
21.38 flv
Adobe Flash 视频格式多路复用器。
21.38.1 选项
- flvflags 标志
可能值:
- ‘aac_seq_header_detect’
根据音频流数据放置AAC序列头。
- ‘no_sequence_end’
禁用序列结束标记。
- ‘no_metadata’
禁用元数据标签。
- ‘no_duration_filesize’
禁用当结束流时持续时间和文件大小为零时的元数据(用于不可查找的实时流)。
- ‘add_keyframe_index’
用于促进查找;特别是HTTP伪流。
21.39 framecrc
每数据包CRC(循环冗余校验)测试格式。
此多路复用器为每个音频和视频数据包计算并打印Adler-32 CRC。默认情况下,音频帧被转换为带符号16位原始音频,视频帧被转换为原始视频后,计算CRC。
多路复用器的输出由每个音频和视频数据包的一行组成,格式为:
流索引, 数据包DTS, 数据包PTS, 数据包持续时间, 数据包大小, 0xCRC
CRC是一个0填充的8位十六进制数字,包含数据包的CRC。
21.39.1 示例
例如计算INPUT中音频和视频帧的CRC,转换为原始音频和视频数据包,并将其存储在文件中out.crc:
ffmpeg -i INPUT -f framecrc out.crc
要将信息打印到标准输出,请使用以下命令:
ffmpeg -i INPUT -f framecrc -
使用ffmpeg时,您可以通过指定音频和视频编解码器,选择计算每个数据包CRC之前编码音频和视频帧的输出格式。例如,为计算每个解码输入音频帧(转换为PCM无符号8位)和每个解码输入视频帧(转换为MPEG-2视频)的CRC,请使用以下命令:
ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -
另请参阅crc多路复用器。
21.40 framehash
每包散列测试格式。
此复用器为每个音频和视频包计算并打印一个加密散列。这可以用于逐包的相等性检查,而无需单独对每个包进行二进制比较。
默认情况下,音频帧会转换为签名的16位原始音频,视频帧会转换为原始视频,然后计算散列,但也可以使用显式转换为其他编解码器的输出。默认使用SHA-256加密散列函数,但也支持其他多种算法。
复用器的输出包含一行用于每个音频和视频包的格式如下:
流索引, 包的解码时间戳(DTS), 包的展示时间戳(PTS), 包的持续时间, 包大小, 散列值
散列值是一个十六进制数字,表示为包计算的散列值。
- hash 算法
使用由字符串指定的加密散列函数算法。 支持的值包括
MD5,murmur3,RIPEMD128,RIPEMD160,RIPEMD256,RIPEMD320,SHA160,SHA224,SHA256(默认值),SHA512/224,SHA512/256,SHA384,SHA512,CRC32和adler32.
21.40.1 示例
为了计算INPUT中音频和视频帧的SHA-256散列值, 将其转换为原始音频和视频数据包,并将其存储在文件中out.sha256:
ffmpeg -i INPUT -f framehash out.sha256
为了使用MD5散列函数将信息打印到标准输出,可以使用以下命令:
ffmpeg -i INPUT -f framehash -hash md5 -
另请参见散列复用器。
21.41 framemd5
逐包 MD5 测试格式。
这是framehash复用器的变体。与此复用器不同,默认将使用MD5散列函数。
21.41.1 示例
为了计算INPUT中音频和视频帧的MD5散列值, 将其转换为原始音频和视频数据包,并将其存储在文件中out.md5:
ffmpeg -i INPUT -f framemd5 out.md5
为了将信息打印到标准输出,可以使用以下命令:
ffmpeg -i INPUT -f framemd5 -
21.42 gif
动态图像 GIF 复用器。
请注意,GIF格式具有非常大的时间基准:两帧之间的延迟因此不能小于1百毫秒。
21.42.1 选项
- loop bool
设置输出循环的次数。使用
-1表示不循环,0表示无限循环(默认值)。- final_delay 延迟
强制最后一帧之后的延迟(以百分秒为单位)。每帧以延迟结束直到下一帧。默认值为
-1,这是一个特殊值,告诉复用器重复使用之前的延迟。在循环的情况下,您可能希望调整此值以标记暂停情况。
21.42.2 示例
编码一个循环10次的GIF,循环之间设置5秒的延迟:
ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif
注意1:如果希望将帧提取为单独的GIF文件,则需要强制使用image2复用器:
ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif"
21.43 gxf
通用交换格式(GXF)复用器。
GXF由草谷集团开发,随后由SMPTE标准化为SMPTE 360M,并在SMPTE RDD 14-2007中扩展以包含高清晰度视频分辨率。
它最多接受一个视频流,其编解码器为‘mjpeg’,或者‘mpeg1video’,或者‘mpeg2video’,或者‘dvvideo’,分辨率为‘512x480’或‘608x576’,以及多个速率为48000Hz且编解码器为‘pcm16_le’.
21.44 hash
散列测试格式。
此复用器计算并打印所有输入音频和视频帧的加密散列。这可以用于相等性检查而无需进行完整的二进制比较。
默认情况下,音频帧会转换为签名的16位原始音频,视频帧会转换为原始视频,然后计算散列,但也可以使用显式转换为其他编解码器的输出。时间戳会被忽略。默认使用SHA-256加密散列函数,但支持其他多种算法。
复用器的输出包括单行以下格式:算法=散列值,其中算法是表示使用散列函数的短字符串,而散列值是一个表示计算散列的十六进制数字。
- hash 算法
使用由字符串指定的加密散列函数算法。 支持的值包括
MD5,murmur3,RIPEMD128,RIPEMD160,RIPEMD256,RIPEMD320,SHA160,SHA224,SHA256(默认值),SHA512/224,SHA512/256,SHA384,SHA512,CRC32和adler32.
21.44.1 示例
为了计算输入转换为原始音频和视频的SHA-256散列值,并将其存储在文件中out.sha256:
ffmpeg -i INPUT -f hash out.sha256
为了将MD5散列值打印到标准输出,使用以下命令:
ffmpeg -i INPUT -f hash -hash md5 -
另请参见framehash复用器。
21.45 hds
HTTP动态流(HDS)复用器。
HTTP动态流(HDS)是由Adobe开发的一种自适应码率流方法。HDS通过HTTP连接传递MP4视频内容。HDS可以用于点播流媒体或直播流。
该复用器在一个指定为输出的目录中为每个流创建一个.f4m(Adobe Flash Media Manifest文件)清单文件,一个.abst(Adobe引导文件)以及分段文件。
这些文件需要通过HTTPS被一个HDS播放器访问,才能进行生成流的回放。
21.45.1 选项
- extra_window_size int
清单之外保留的片段数量,在从磁盘中移除之前
- min_frag_duration 微秒
最低片段持续时间(以微秒为单位),默认值为1秒 (
10000000)- remove_at_exit bool
当设置为时完成后移除所有片段
true- window_size 整数
在清单中保留的片段数量,如果设置为不同的值
0。默认情况下,输出目录中保留所有片段。
21.45.2 示例
使用ffmpeg生成实时速率下的 HDS 文件到output.hds目录:
ffmpeg -re -i INPUT -f hds -b:v 200k output.hds
21.46 hls
Apple HTTP实时流媒体多路复用器,根据 HTTP实时流媒体 (HLS) 规范分段 MPEG-TS。
它创建一个播放列表文件和一个或多个分段文件。输出文件名指定播放列表文件名。
默认情况下,多路复用器为生成的每个片段创建一个文件。这些文件具有与播放列表相同的名称,后面加上顺序号和 .ts 扩展名。
确保在编码时要求关闭 GOP,并根据您的片段时间限制设置 GOP 大小。
例如,为了转换具有ffmpeg:
ffmpeg -i in.mkv -c:v h264 -flags +cgop -g 30 -hls_time 1 out.m3u8
该示例将生成播放列表out.m3u8和分段文件:out0.ts, out1.ts, out2.ts等等。
另见分段多路复用器,它提供了更通用和灵活的分段器实现,并且可以用于执行 HLS 分段。
21.46.1 选项
- hls_init_time 持续时间
设置初始目标片段长度。默认值是0.
持续时间必须是时间持续时间规范,请参见(ffmpeg-utils)ffmpeg-utils(1) 手册的 时间持续时间 部分.
在第一个 m3u8 列表中,时间过后下一个关键帧上将切片段。当初始播放列表已填写,
ffmpeg将以等于hls_time.- hls_time 的持续时间切片段
设置目标片段长度。默认值是2。
持续时间必须是时间持续时间规范,请参见(ffmpeg-utils)ffmpeg-utils(1) 手册的 时间持续时间 部分。 时间过后,片段将在下一个关键帧上被切割。
- hls_list_size 大小
设置播放列表条目的最大数量。如果设置为0,则列表文件将包含所有片段。默认值是5。
- hls_delete_threshold 大小
设置磁盘上保留未引用片段的数量,在
hls_flags delete_segments删除它们之前。增加这值可以让客户端继续下载最近在播放列表中引用的片段。默认值为1,表示比hls_list_size+1更旧的片段将被删除。- hls_start_number_source 来源
根据指定的来源启动播放列表序列号(
#EXT-X-MEDIA-SEQUENCE)。除非设置了hls_flags single_file,它还指定片段和字幕文件名的起始序列号来源。在任何情况下,如果hls_flags append_list已设置并且读取的播放列表序列号大于指定的启动序列号,则将使用该值作为启动值。它接受以下值:
- generic (default)
根据start_number选项值设置启动号码。
- epoch
将启动号码设置为自纪元(1970-01-01 00:00:00)以来的秒数。
- epoch_us
将启动号码设置为自纪元(1970-01-01 00:00:00)以来的微秒数。
- datetime
基于当前日期/时间将启动号码设置为 YYYYmmddHHMMSS,例如 20161231235759。
- start_number 数字
从指定的
#EXT-X-MEDIA-SEQUENCE数字启动播放列表序列号(),当hls_start_number_source值等于泛型时。(这是默认情况。)除非设置了hls_flags single_file,它还指定片段和字幕文件名起始序列号。默认值是0。- hls_allow_cache 布尔
明确设置客户端 MAY (1) 或 MUST NOT (0) 缓存媒体片段。
- hls_base_url 基础路径
向播放列表中的每个条目附加基础路径。 用于生成具有绝对路径的播放列表。
注意,播放列表序列号对于每个片段必须唯一,并且不应与片段文件名序列号混淆;后者可以是循环的,例如如果指定了wrap选项。
- hls_segment_filename 文件名
设置片段文件名。除非hls_flags选项用‘single_file’, 设置,‘作为一个字符串格式使用并附加片段号。
例如:
ffmpeg -i in.nut -hls_segment_filename 'file%03d.ts' out.m3u8
将生成播放列表out.m3u8和片段文件:file000.ts, file001.ts, file002.ts等等。
文件名可以包含完整路径或相对路径规范,但在 m3u8 片段列表中仅包含不带任何路径的文件名部分。如果指定了相对路径,创建的片段文件的路径将相对于当前工作目录。当设置了strftime_mkdir时,会将扩展后的文件名的整个值写入 m3u8 片段列表。
当var_stream_map设置了两个或更多变体流时,文件名模式必须包含字符串 "%v",并且该字符串将在生成的片段文件名中扩展为变体流索引位置。
例如:
ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ -hls_segment_filename 'file_%v_%03d.ts' out_%v.m3u8
将生成播放列表片段文件集:file_0_000.ts, file_0_001.ts, file_0_002.ts等等与file_1_000.ts, file_1_001.ts, file_1_002.ts等等。
字符串 "%v" 可以出现在文件名或包含文件的最后一个目录名中,但只能出现在其中一个。(此外,%v 可以在最后一个子目录或文件名中多次出现。)如果字符串 %v 出现在目录名中,则在扩展目录名模式之后会创建子目录。这使得根据不同变体流创建对应的片段进入子目录。
例如:
ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ -hls_segment_filename 'vs%v/file_%03d.ts' vs%v/out.m3u8
将生成播放列表片段文件集:vs0/file_000.ts, vs0/file_001.ts, vs0/file_002.ts等等与vs1/file_000.ts, vs1/file_001.ts, vs1/file_002.ts等等。
- strftime 布尔
在
strftime()文件名上使用来用本地时间扩展片段文件名。同时这种模式下片段号也是可用的,但使用它需要设置 ‘second_level_segment_index’ 在hls_flag并且 %%d 将是指定符。例如:
ffmpeg -i in.nut -strftime 1 -hls_segment_filename 'file-%Y%m%d-%s.ts' out.m3u8
将生成播放列表,out.m3u8,和分段文件:file-20160215-1455569023.ts, file-20160215-1455569024.ts,等等。 注意:在某些系统/环境中,
%s指定符不可用。 请参阅strftime()文档。例如:
ffmpeg -i in.nut -strftime 1 -hls_flags second_level_segment_index -hls_segment_filename 'file-%Y%m%d-%%04d.ts' out.m3u8
将生成播放列表,out.m3u8和分段文件:file-20160215-0001.ts, file-20160215-0002.ts,等等。
- strftime_mkdir 布尔值
与strftime一起使用时,它将创建所有在选项的展开值中存在的子目录hls_segment_filename.
例如:
ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y%m%d/file-%Y%m%d-%s.ts' out.m3u8
将创建一个目录201560215(如果它不存在),然后 生成播放列表,out.m3u8和分段文件:20160215/file-20160215-1455569023.ts, 20160215/file-20160215-1455569024.ts,等等。
例如:
ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y/%m/%d/file-%Y%m%d-%s.ts' out.m3u8
将创建一个目录层级2016/02/15(如果其中任何目录不存在),然后生成播放列表,out.m3u8和分段文件:2016/02/15/file-20160215-1455569023.ts, 2016/02/15/file-20160215-1455569024.ts,等等。
- hls_segment_options 选项列表
使用以冒号分隔的键=值参数列表设置输出格式选项。 包含特殊字符的值必须被转义。
:special characters must be escaped.- hls_key_info_file 密钥信息文件
使用中的信息密钥信息文件进行分段加密。第一行密钥信息文件指定写入播放列表的密钥URI。密钥URL在播放过程中用于访问加密密钥。 第二行指定在加密过程中用于获取密钥的密钥文件的路径。 密钥文件被读取为16个八位字节的二进制格式的单一打包数组。 可选的第三行指定初始化向量(IV)为十六进制字符串, 以替代分段序列号(默认)进行加密。 对密钥信息文件的更改将导致用新密钥/IV进行分段加密,并在播放列表中为新密钥URI/IV添加条目(如果hls_flags periodic_rekey已启用)。
密钥信息文件格式:
密钥URI 密钥文件路径 IV (optional)
密钥URI示例:
http://server/file.key /path/to/file.key file.key
密钥文件路径示例:
file.key /path/to/file.key
IV示例:
0123456789ABCDEF0123456789ABCDEF
密钥信息文件示例:
http://server/file.key /path/to/file.key 0123456789ABCDEF0123456789ABCDEF
示例Shell脚本:
#!/bin/sh BASE_URL=${1:-'.'} openssl rand 16 > file.key echo $BASE_URL/file.key > file.keyinfo echo file.key >> file.keyinfo echo $(openssl rand -hex 16) >> file.keyinfo ffmpeg -f lavfi -re -i testsrc -c:v h264 -hls_flags delete_segments \ -hls_key_info_file file.keyinfo out.m3u8- hls_enc 布尔值
启用(1)或禁用(0)AES128加密。 当启用时,每个生成的分段都会被加密,并且加密密钥 被保存为播放列表名称.key。
- hls_enc_key 密钥
指定一个16个八位字节的密钥来加密分段文件,默认情况下是随机生成的。
- hls_enc_key_url 密钥URL
如果设置了密钥URL,将在播放列表中的密钥文件名之前添加基础URL。 to the key filename in the playlist.
- hls_enc_iv 初始化向量
为每个分段指定16个八位字节的初始化向量,替代自动生成的。
- hls_segment_type 标志
可能的值:
- ‘mpegts’
以MPEG-2传输流格式输出分段文件。 这与所有HLS版本兼容。
- ‘fmp4’
以碎片化MP4格式输出分段文件,类似于MPEG-DASH。 fmp4文件可能在HLS版本7及以上使用。
- hls_fmp4_init_filename 文件名
为片段文件头文件设置文件名,默认的文件名是init.mp4.
当strftime启用时,文件名会扩展为本地时间的分段文件名。
例如:
ffmpeg -i in.nut -hls_segment_type fmp4 -strftime 1 -hls_fmp4_init_filename "%s_init.mp4" out.m3u8
将生成如下初始化文件1602678741_init.mp4.
- hls_fmp4_init_resend 布尔值
在每次m3u8文件刷新之后重新发送初始化文件,默认为0.
当var_stream_map设置了两个或更多变体流时,文件名模式必须包含字符串"%v",此字符串指定在生成的初始化文件名中变体流索引的位置。 字符串"%v"可以存在于文件名中,也可以存在于最后包含该文件的目录名称中。 如果字符串出现在目录名称中,则在扩展目录名称模式后会创建子目录。 这使得可以在子目录中创建对应于不同变体流的初始化文件。
- hls_flags 标志
可能的值:
- ‘single_file’
如果设置了此标志,复用器将所有分段存储在一个单独的MPEG-TS文件中,并在播放列表中使用字节范围。 通过这种方式生成的HLS播放列表将具有版本号4。
例如:
ffmpeg -i in.nut -hls_flags single_file out.m3u8
将生成播放列表,out.m3u8和一个单一的分段文件,out.ts.
- ‘delete_segments’
播放列表中移除的分段文件会在等于分段持续时间加上播放列表持续时间的一段时间后被删除。
- ‘append_list’
将新分段追加到旧分段列表的末尾, 并从旧分段列表中删除
#EXT-X-ENDLIST。- ‘round_durations’
将播放列表文件的分段信息中的时长信息四舍五入为整数值, 而不是使用浮点数。 如果没有其他功能要求使用更高的HLS版本, 则可以让
ffmpeg输出HLS版本2的m3u8。- ‘discont_start’
在播放列表的第一个分段信息之前添加
#EXT-X-DISCONTINUITY标签。- ‘omit_endlist’
不要在播放列表末尾附加
EXT-X-ENDLIST标签。- ‘periodic_rekey’
由
hls_key_info_file指定的文件会被周期性检查,以检测加密信息的更新。 确保原子性地替换此文件,包括包含AES加密密钥的文件。- ‘independent_segments’
向包含视频分段的播放列表添加
#EXT-X-INDEPENDENT-SEGMENTS标签,并且当播放列表的所有分段都保证以关键帧开始时。- ‘iframes_only’
向包含视频分段的播放列表添加
#EXT-X-I-FRAMES-ONLY标签,并且可以在#EXT-X-BYTERANGE模式下仅播放I帧。- ‘split_by_time’
允许片段从非关键帧的帧开始。这在关键帧时间间隔不一致时可改善某些播放器的行为,但可能会在其他播放器上表现更差,且在寻位过程中可能导致一些异常现象。该标志应与hls_time选项一起使用。
- ‘program_date_time’
生成
EXT-X-PROGRAM-DATE-TIME标签。- ‘second_level_segment_index’
使得在hls_segment_filename选项表达式中,除日期/时间值外,还可以使用片段索引作为%%d。启用strftime选项时,可使用%%0xd格式来获得固定宽度和补零的数字,其中x为所需宽度。
- ‘second_level_segment_size’
使得在hls_segment_filename选项表达式中,除日期/时间值外,还可以使用片段大小(以字节计数)作为%%s。启用strftime时,可使用%%0xs格式来获得固定宽度和补零的数字,其中x为所需宽度。
- ‘second_level_segment_duration’
使得在hls_segment_filename选项表达式中,除日期/时间值外,还可以使用片段持续时间(以微秒计算)作为%%t。启用strftime时,可使用%%0xt格式来获得固定宽度和补零的数字,其中x为所需宽度。
例如:
ffmpeg -i sample.mpeg \ -f hls -hls_time 3 -hls_list_size 5 \ -hls_flags second_level_segment_index+second_level_segment_size+second_level_segment_duration \ -strftime 1 -strftime_mkdir 1 -hls_segment_filename "segment_%Y%m%d%H%M%S_%%04d_%%08s_%%013t.ts" stream.m3u8
将会生成如下片段:segment_20170102194334_0003_00122200_0000003000000.ts, segment_20170102194334_0004_00120072_0000003000000.ts等等。
- ‘temp_file’
将片段数据写入到filename.tmp并在完成片段后才重命名为文件名。
提供片段的Web服务器可以配置为拒绝访问*.tmp文件,以防止在尚未添加到m3u8播放列表之前访问未完成的片段。
此标志还会影响m3u8播放列表文件的创建方式。如果设置了此标志,所有播放列表文件将被写入一个临时文件,并在完成后重命名,与片段处理类似。但是,对于使用
file协议的播放列表以及hls_playlist_type类型非‘vod’的播放列表,无论是否设置此标志,都会始终写入临时文件。使用master_pl_name指定的主播放列表文件(如果有),在
file协议下,如果master_pl_publish_rate值不为零,无论是否设置此标志,都会始终写入临时文件。
- hls_playlist_type 类型
如果类型是‘event’,将在m3u8头部发出
#EXT-X-PLAYLIST-TYPE:EVENT。这会强制hls_list_size为0;播放列表只能追加。如果类型是‘vod’,将在m3u8头部发出
#EXT-X-PLAYLIST-TYPE:VOD。这会强制hls_list_size为0;播放列表不可更改。- method 方法
使用指定的HTTP方法创建HLS文件。
例如:
ffmpeg -re -i in.ts -f hls -method PUT http://example.com/live/out.m3u8
会使用HTTP PUT方法将所有mpegts片段文件上传到HTTP服务器,并使用相同方法每
refresh次更新m3u8文件。请注意,HTTP服务器必须支持所给方法才能上传文件。- http_user_agent 代理
在HTTP头字段中覆盖User-Agent字段。仅适用于HTTP输出。
- var_stream_map 流映射
指定一个映射字符串,用于定义如何将音频、视频及字幕流分组到不同的变体流中。变体流组以空格分隔。
预期字符串格式为“a:0,v:0 a:1,v:1 ....”。其中a:、v:、s:分别为指定音频、视频及字幕流的键。 允许的值为0到9(仅根据实际使用限制)。
当存在两个或更多变体流时,输出文件名模式必须包含字符串“%v”:该字符串指定变量流索引在输出媒体播放列表文件名中的位置。该字符串“%v”可以出现在文件名中,也可以出现在包含文件的最后一个目录名中。如果字符串出现在目录名中,则在扩展目录名模式后会创建子目录。这使得能够在子目录中创建变体流。
以下是一些示例。
- 创建两个HLS变体流。第一个变体流将包含视频比特率为1000k和音频比特率为64k的流,第二个变体流将包含视频比特率为256k和音频比特率为32k的流。这里将创建两个媒体播放列表,文件名为out_0.m3u8和out_1.m3u8。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ http://example.com/live/out_%v.m3u8
- 如果您希望在结果名称中使用有意义的文本而不是索引,可以为每个或某些变体指定名称。以下示例将如之前示例一样创建两个HLS变体流。但在这里,将创建两个媒体播放列表,文件名为out_my_hd.m3u8和out_my_sd.m3u8。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0,name:my_hd v:1,a:1,name:my_sd" \ http://example.com/live/out_%v.m3u8
- 创建三个HLS变体流。第一个变体流将是仅包含视频的流,视频比特率为1000k;第二个变体流是仅包含音频的流,比特率为64k;第三个变体流将是比特率为256k的仅包含视频的流。这里,将创建三个媒体播放列表,文件名为out_0.m3u8,
out_1.m3u8和out_2.m3u8。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k \ -map 0:v -map 0:a -map 0:v -f hls -var_stream_map "v:0 a:0 v:1" \ http://example.com/live/out_%v.m3u8
- 在子目录中创建变体流。这里,第一个媒体播放列表将创建于http://example.com/live/vs_0/out.m3u8,第二个媒体播放列表将创建于http://example.com/live/vs_1/out.m3u8.
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ http://example.com/live/vs_%v/out.m3u8
- 创建两个仅包含音频和两个仅包含视频的变体流。除了在主播放列表中为每个变体流添加
#EXT-X-STREAM-INF标签外,还会为两个仅包含音频的变体流添加#EXT-X-MEDIA标签,并将它们映射到两个仅包含视频的变体流,音频组名为‘aud_low’和‘aud_high’。 默认情况下,会创建包含所有编码流的单个HLS变体。ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k -b:v:1 3000k \ -map 0:a -map 0:a -map 0:v -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low a:1,agroup:aud_high v:0,agroup:aud_low v:1,agroup:aud_high" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8
- 创建两个仅包含音频和一个仅包含视频的变体流。除了在主播放列表中为每个变体流添加
#EXT-X-STREAM-INF标签外,还会为两个仅包含音频的变体流添加#EXT-X-MEDIA标签,并将它们映射到一个仅包含视频的变体流,音频组名为‘aud_low’,且音频组的默认状态可为NO或YES。 默认情况下,创建的HLS变体包含所有编码流。ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \ -map 0:a -map 0:a -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low,default:yes a:1,agroup:aud_low v:0,agroup:aud_low" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8
- 创建两个仅包含音频和一个仅包含视频的变体流。除了在主播放列表中为每个变体流添加
#EXT-X-STREAM-INF标签外,还会为两个仅包含音频的变体流添加#EXT-X-MEDIA标签,并将它们映射到一个仅包含视频的变体流,音频组名为‘aud_low’,音频组的默认状态可为NO或YES,且一个音频语言被命名为ENG,另一个音频语言被命名为CHN。默认情况下,会创建包含所有编码流的单个HLS变体。ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \ -map 0:a -map 0:a -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low,default:yes,language:ENG a:1,agroup:aud_low,language:CHN v:0,agroup:aud_low" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8
- 创建一个单独的变体流。在主播放列表中添加
#EXT-X-MEDIA标签,并使用TYPE=SUBTITLES的webvtt字幕组名‘subtitle’和可选字幕名(例如‘English’)。确保输入文件至少有一个文本字幕流。ffmpeg -y -i input_with_subtitle.mkv \ -b:v:0 5250k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 \ -b:a:0 256k \ -c:s webvtt -c:a mp2 -ar 48000 -ac 2 -map 0:v -map 0:a:0 -map 0:s:0 \ -f hls -var_stream_map "v:0,a:0,s:0,sgroup:subtitle,sname:English" \ -master_pl_name master.m3u8 -t 300 -hls_time 10 -hls_init_time 4 -hls_list_size \ 10 -master_pl_publish_rate 10 -hls_flags \ delete_segments+discont_start+split_by_time ./tmp/video.m3u8
- 创建两个HLS变体流。第一个变体流将包含视频比特率为1000k和音频比特率为64k的流,第二个变体流将包含视频比特率为256k和音频比特率为32k的流。这里将创建两个媒体播放列表,文件名为out_0.m3u8和out_1.m3u8。
- cc_stream_map 关闭字幕流映射
指定不同关闭字幕组及其属性的映射字符串。关闭字幕流组以空格分隔。
预期字符串格式如下 "ccgroup:<组名>,instreamid:<INSTREAM-ID>,language:<语言代码> ...."。 ‘ccgroup’和‘instreamid’是必填属性。‘language’是可选属性。
使用此选项配置的关闭字幕组通过提供相同‘ccgroup’名称映射到var_stream_map字符串中的不同变体流。
例如:
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -a53cc:0 1 -a53cc:1 1 \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls \ -cc_stream_map "ccgroup:cc,instreamid:CC1,language:en ccgroup:cc,instreamid:CC2,language:sp" \ -var_stream_map "v:0,a:0,ccgroup:cc v:1,a:1,ccgroup:cc" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8
将会在主播放列表中添加两个
#EXT-X-MEDIA标签,INSTREAM-ID分别为‘CC1’和‘CC2’。同时,会添加TYPE=CLOSED-CAPTIONS属性,组名为‘cc’。CLOSED-CAPTIONSattribute with group name ’cc’ for the two output variant streams.如果var_stream_map未设置,则cc_stream_map中的第一个可用cc组会映射到输出变体流。
例如:
ffmpeg -re -i in.ts -b:v 1000k -b:a 64k -a53cc 1 -f hls \ -cc_stream_map "ccgroup:cc,instreamid:CC1,language:en" \ -master_pl_name master.m3u8 \ http://example.com/live/out.m3u8
这会在主播放列表中添加
#EXT-X-MEDIA标签,组名为‘cc’,语言为‘en’(英语),INSTREAM-ID为‘CC1’。同时,会为输出变体流添加TYPE=CLOSED-CAPTIONS属性,组名为‘cc’。CLOSED-CAPTIONSattribute with group name ’cc’ for the output variant stream.- master_pl_name 名称
使用指定的名称创建HLS主播放列表。
例如:
ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 http://example.com/live/out.m3u8
创建一个名称为master.m3u8http://example.com/live/的HLS主播放列表。.
- master_pl_publish_rate 计数
每隔指定的片段间隔重复发布主播放列表。
例如:
ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 \ -hls_time 2 -master_pl_publish_rate 30 http://example.com/live/out.m3u8
创建一个名称为master.m3u8的HLS主播放列表,并在每隔30个片段(即每隔60秒)后重复发布它。
- http_persistent 布尔值
使用持久化的HTTP连接。仅适用于HTTP输出。
- timeout 超时
设置套接字 I/O 操作的超时时间,仅适用于 HTTP 输出。
- ignore_io_errors 布尔值
在打开、写入和删除时忽略 I/O 错误,可用于长时间运行的网络输出。
- headers 请求头
设置自定义 HTTP 请求头,可以覆盖内置的默认请求头,仅适用于 HTTP 输出。
21.47 iamf
沉浸式音频模型和格式 (IAMF) 封装器。
IAMF 用于为各种设备提供沉浸式音频内容的呈现,既适用于流媒体也适用于离线应用。这些应用包括互联网音频流、多播/广播服务、文件下载、游戏、通信、虚拟和增强现实等。在这些应用中,音频可以在各种设备上播放,例如耳机、手机、平板电脑、电视、音响、家庭影院系统和大屏幕设备。
此格式由开放媒体联盟 (Alliance for Open Media) 推广和设计。
有关此格式的更多信息,请参阅https://aomedia.org/iamf/.
21.48 ico
ICO 文件封装器。
微软的图标文件格式 (ICO) 有一些严格的限制需要注意:
- 尺寸不能超过任意维度的 256 像素。
- 只能存储 BMP 和 PNG 图片。
- 如果使用 BMP 图片,它必须是以下像素格式之一:
BMP Bit Depth FFmpeg Pixel Format 1bit pal8 4bit pal8 8bit pal8 16bit rgb555le 24bit bgr24 32bit bgra
- 如果使用 BMP 图片,它必须使用 BITMAPINFOHEADER DIB 头。
- 如果使用 PNG 图片,它必须使用 rgba 像素格式。
21.49 ilbc
互联网低比特率编解码器 (iLBC) 原始封装器。
它接受一个单一的 ‘ilbc’ 音频流。
21.50 image2, image2pipe
图像文件封装器。
‘image2’ 封装器将视频帧写入图像文件。
输出文件名由一个模式指定,可用于生成依次编号文件的序列。模式可以包含字符串 "%d" 或 "%0Nd",这个字符串指定文件名中表数字编号的位置。如果使用 "%0Nd" 形式,文件名中的编号字符串会用 0 填充到N位数。字面字符 ‘%’ 可以通过字符串 "%%" 指定。
如果模式包含 "%d" 或 "%0Nd",文件列表指定的第一个文件名将包含数字 1,所有后续数字将依次递增。
模式可能包含一个后缀,用于自动确定要写入的图像文件格式。
例如,模式 "img-%03d.bmp" 将指定一系列如下形式的文件名:img-001.bmp, img-002.bmp, ..., img-010.bmp等。模式 "img%%-%d.jpg" 将指定一系列如下形式的文件名:img%-1.jpg, img%-2.jpg, ..., img%-10.jpg等。
图像封装器支持 .Y.U.V 图像文件格式。此格式特殊之处在于每个图像帧皆由三个文件组成,分别对应 YUV420P 的各个组件。要读取或写入此图像文件格式,请指定‘.Y’文件的名称。封装器将自动打开‘.U’和‘.V’文件。
‘image2pipe’ 封装器接受与‘image2’ 封装器相同的选项,但忽略模式验证和扩展,因为它应该将内容写入命令输出而不是实际存储的文件。
21.50.1 选项
- frame_pts 布尔值
如果设置为 1,则使用分组的 PTS(呈现时间戳)扩展文件名。默认值为 0。
- start_number 计数
从指定数字开始序列。默认值为 1。
- update 布尔值
如果设置为 1,文件名将始终被解释为仅文件名而非模式,并且对应的文件会被连续覆盖为新图像。默认值为 0。
- strftime 布尔值
如果设置为 1,用来自
strftime()的信息扩展文件名。默认值为 0。- atomic_writing 布尔值
将输出写入临时文件,写入完成后重命名为目标文件名。默认禁用。
- protocol_opts 选项列表
设置协议选项,以 :- 分隔的键值对参数列表的形式。包含
:特殊字符的值必须进行转义。
21.50.2 示例
- 使用
ffmpeg创建文件序列img-001.jpeg, img-002.jpeg等,从输入视频每秒捕获一个图像:ffmpeg -i in.avi -vsync cfr -r 1 -f image2 'img-%03d.jpeg'
注意在使用
ffmpeg情况下,如果未使用-f选项指定格式且输出文件名指定了图像文件格式,则会自动选择 image2 封装器,因此之前的命令可以写为:ffmpeg -i in.avi -vsync cfr -r 1 'img-%03d.jpeg'
另请注意,模式不必严格包含 "%d" 或 "%0Nd",例如要从输入视频的开头创建一个图像文件,可以使用命令:img.jpeg从输入视频的开头创建一个图像文件
ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
- 选项允许使用日期和时间信息扩展文件名。查看strftime函数的文档以获取语法。
strftime()function for the syntax.要使用
strftime()"%Y-%m-%d_%H-%M-%S" 模式生成图像文件, 可以使用以下ffmpeg命令:ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"
- 使用当前帧的 PTS 设置文件名:
ffmpeg -f v4l2 -r 1 -i /dev/video0 -copyts -f image2 -frame_pts true %d.jpg
- 每秒将桌面内容直接发布到 WebDAV 服务器:
ffmpeg -f x11grab -framerate 1 -i :0.0 -q:v 6 -update 1 -protocol_opts method=PUT http://example.com/desktop.jpg
21.51 ircam
伯克利 / IRCAM / CARL 音频文件系统 (BICSF) 格式封装器。
伯克利 / IRCAM / CARL 音频格式是 1980 年代多种早期音频文件格式和系统包括由 Gareth Loy 博士在加州大学圣地亚哥计算机音频研究实验室 (CARL) 开发的 csound 系统、在巴黎 IRCAM 研究所由 Rob Gross 和 Dan Timis 开发的音频文件系统以及伯克利快速文件系统的合并成果。
它最初作为伯克利 / IRCAM / CARL 音频文件系统的一部分开发,一个旨在实现适用于伯克利 UNIX 的音频应用文件系统的程序套件。它在学术音乐研究中心特别流行,并多次被用于早期香港电子音乐创作。
此封装器接受一个包含 PCM 数据的音频流。
21.52 ivf
On2 IVF 封装器。
IVF 由 On2 Technologies(以前称为 Duck 公司)开发,用于存储内部开发的编解码器。
此封装器接受一个单一的‘vp8’, ‘vp9’或‘av1’视频流。
21.53 jacosub
JACOsub 字幕格式封装器。
此封装器接受一个单一的‘jacosub’字幕流。
关于此格式的更多信息,请参阅http://unicorn.us.com/jacosub/jscripts.html.
21.54 kvag
Simon & Schuster Interactive VAG 封装器。
此专属 VAG 容器由 Simon & Schuster Interactive 使用,用于一些游戏,如《真实战争》和《真实战争:叛国国家》。
该多路复用器只接受单个‘adpcm_ima_ssi’音频流。
21.55 lc3
Bluetooth SIG低复杂度通信编解码器音频(LC3),或ETSI TS 103 634低复杂度通信编解码器增强版(LC3plus)。
该多路复用器只接受单个‘lc3’音频流。
21.56 lrc
LRC歌词文件格式多路复用器。
LRC(一种歌词的简写)是一种计算机文件格式,能够将歌曲歌词与音频文件同步,例如MP3、Vorbis或MIDI。
该多路复用器支持单个‘subrip’或‘text’字幕流。
21.56.1 元数据
以下元数据标签将被转换为相应格式的元数据:
- title
- album
- artist
- author
- creator
- encoder
- encoder_version
如果‘encoder_version’没有被显式设置,它将自动设置为libavformat版本。
21.57 matroska
Matroska容器多路复用器。
该多路复用器实现了Matroska和webm容器规范。
21.57.1 元数据
此多路复用器中识别的元数据设置为:
- title
设置提供给单个轨道的标题名称。这将映射到写为附件的流的FileDescription元素。
- language
以Matroska语言形式指定轨道的语言。
语言可以是3个字母的ISO-639-2(ISO 639-2/B)形式(例如法语“fre”),也可以是包含国家代码的语言代码,用于语言的特殊性(例如“fre-ca”表示加拿大法语)。
- stereo_mode
设置单个视频轨道中的立体3D视频布局(包含两个视图)。
支持以下值:
- ‘mono’
视频不是立体3D
- ‘left_right’
两个视图并排排列,左眼视图在左边
- ‘bottom_top’
两个视图以上下排列,左眼视图在下方
- ‘top_bottom’
两个视图以上下排列,左眼视图在上方
- ‘checkerboard_rl’
每个视图按棋盘式交错模式排列,左眼视图优先
- ‘checkerboard_lr’
每个视图按棋盘式交错模式排列,右眼视图优先
- ‘row_interleaved_rl’
每个视图按行交错方式排列,右眼视图在第一行
- ‘row_interleaved_lr’
每个视图按行交错方式排列,左眼视图在第一行
- ‘col_interleaved_rl’
两个视图以列交错方式排列,右眼视图为第一列
- ‘col_interleaved_lr’
两个视图以列交错方式排列,左眼视图为第一列
- ‘anaglyph_cyan_red’
所有帧为红青滤镜可观看的浮雕格式
- ‘right_left’
两个视图并排排列,右眼视图在左边
- ‘anaglyph_green_magenta’
所有帧为绿品红滤镜可观看的浮雕格式
- ‘block_lr’
两个视图在一个数据块中交织,左眼视图优先
- ‘block_rl’
两个视图在一个数据块中交织,右眼视图优先
例如可以使用以下命令行创建一个3D WebM片段:
ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm
21.57.2 选项
- reserve_index_space size
默认情况下,该多路复用器将在文件末尾写入用于寻址的索引(在Matroska中称为cues),因为它无法预先知道要为文件起始位置的索引保留多少空间。然而对于某些用例——例如可以进行寻址但速度较慢的流媒体,它可能需要将索引放在文件开头。
如果将此选项设置为非零值,则多路复用器会保留size字节的空间在文件头部,随后尝试在复用结束时将cues写入该空间。如果保留的空间不足够,cues不会被写入,文件会被最终化,写入尾部会返回错误。 对于大部分用例来说,一个合理的值是每小时视频约50kB。
请注意,cues仅在输出可寻址时才会被写入,如果不可寻址,此选项将没有效果。
- cues_to_front bool
如果设置,多路复用器将在必要时通过移动主要数据以在文件开头写入索引。这可以与reserve_index_space结合使用,此时仅在最初预留的空间不足时移动数据。
如果输出不可寻址,忽略此选项。
- cluster_size_limit size
在一个数据簇中存储最多提供的字节数量。
如果未指定,则自动设置为一个合理的硬编码固定值。
- cluster_time_limit duration
在一个数据簇中存储最多提供的毫秒数。
如果未指定,则自动设置为一个合理的硬编码固定值。
- dash bool
创建符合WebM DASH规范的WebM文件。默认设置为
false.- dash_track_number index
DASH流的轨道号。默认设置为
1.- live bool
写入文件时假设它是直播流。默认设置为
false.- allow_raw_vfw bool
允许使用原始VFW模式。默认设置为
false.- flipped_raw_rgb bool
如果设置为
true,存储具有正高度的原始RGB位图,这表示位图是倒序存储的。请注意,此选项不会翻转位图,必须事先手动完成,例如使用‘vflip’滤镜。 默认值是false,表示位图是正序存储的。- write_crc32 bool
在每个一级元素中写入CRC32元素。默认设置为
true。该选项对WebM文件无效。- default_mode mode
控制输出轨道的FlagDefault如何设置。 它会影响播放器默认播放哪些轨道。默认模式为‘passthrough’.
- ‘infer’
每个具有默认设置的轨道都会设置FlagDefault。另外,对于每种轨道类型(音频、视频或字幕),如果不存在这一类型的轨道具有默认设置,则将该类型的第一条轨道标记为默认(如果存在)。这确保即使输入来自不具备默认轨道概念的容器,默认标志也会以合理的方式设置。
- ‘infer_no_subs’
这种模式与infer模式相同,不同之处在于如果不存在带默认设置的字幕轨道,则不标记任何字幕轨道为默认。
- ‘passthrough’
在此模式下,只有在对应流的标志中设置了AV_DISPOSITION_DEFAULT,FlagDefault才会被设置。
21.58 md5
MD5测试格式。
这是hash多路复用器的一个变体。与该多路复用器不同,它默认使用MD5哈希函数。
21.58.1 示例
- 计算输入转换为原始音频和视频的MD5哈希值,并将其存储在文件中out.md5:
ffmpeg -i INPUT -f md5 out.md5
- 将MD5哈希值打印到stdout:
ffmpeg -i INPUT -f md5 -
21.59 microdvd
MicroDVD字幕格式多路复用器。
该多路复用器只接受单个‘microdvd’字幕流。
21.60 mmf
合成音乐移动应用格式(SMAF)格式多路复用器。
SMAF是一种由Yamaha为便携式电子设备(如手机和个人数字助理)指定的音乐数据格式。
该多路复用器支持单个‘adpcm_yamaha音频流。
21.61 mp3
MP3复用器写入原始MP3流,并具有以下可选功能:
- 在开头添加ID3v2元数据头(默认启用)。支持版本2.3和2.4,
id3v2_versionprivate 选项控制使用版本(3或4)。设置id3v2_version为0完全禁用ID3v2头。复用器支持将附加图片(APIC帧)写入ID3v2头。图片以视频流的形式提供给复用器,且仅包含单个数据包。这些流可以有任意数量,每个流都会对应一个APIC帧。流的元数据标签title和comment映射到APICdescription和picture type分别。查看http://id3.org/id3v2.4.0-frames以了解允许的图片类型。
注意,APIC帧必须在开头写入,因此复用器将缓冲音频帧直到获取所有图片。因此建议尽早提供图片以避免过度缓冲。
- 一个Xing/LAME帧紧接在ID3v2头之后(如果存在的话)。默认启用,但仅当输出可寻址时才会写入。可以通过
write_xingprivate 选项禁用它。该帧包含可能对解码器有用的各种信息,例如音频时长或编码器延时。 - 在文件末尾添加传统的ID3v1标签(默认禁用)。可以通过
write_id3v1private 选项启用它,但由于其功能非常有限,不建议使用。
示例:
写入一个带有ID3v2.3头和ID3v1脚的mp3:
ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3
要向mp3文件附加图片,请选择音频流和图片流map:
ffmpeg -i input.mp3 -i cover.png -c copy -map 0 -map 1 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3
写入一个无任何额外功能的“干净”MP3:
ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3
21.62 mpegts
MPEG传输流复用器。
此复用器实现了ISO 13818-1和ETSI EN 300 468的一部分。
在mpegts复用器中识别的元数据设置为service_provider和service_name。如果未设置,默认值为service_provider‘FFmpeg’,而service_name的默认值为‘Service01’.
21.62.1 选项
复用器选项为:
- mpegts_transport_stream_id 整数
设置‘transport_stream_id’。这标识DVB中的一个转发器。默认值为
0x0001.- mpegts_original_network_id 整数
设置‘original_network_id’。这是DVB中网络的唯一标识符。它的主要用途是通过路径‘Original_Network_ID, Transport_Stream_ID’唯一地识别服务。默认值为
0x0001.- mpegts_service_id 整数
设置‘service_id’,也称为DVB中的节目。默认值为
0x0001.- mpegts_service_type 整数
设置节目‘service_type’。默认值为
digital_tv。 接受以下选项:- ‘hex_value’
任何介于
0x01和0xff之间的十六进制值,如ETSI 300 468中定义。- ‘digital_tv’
数字电视服务。
- ‘digital_radio’
数字广播服务。
- ‘teletext’
文本广播服务。
- ‘advanced_codec_digital_radio’
高级编解码器数字广播服务。
- ‘mpeg2_digital_hdtv’
MPEG2数字高清电视服务。
- ‘advanced_codec_digital_sdtv’
高级编解码器数字标准清晰度电视服务。
- ‘advanced_codec_digital_hdtv’
高级编解码器数字高清电视服务。
- mpegts_pmt_start_pid 整数
设置PMTs的第一个PID。默认值为
0x1000,最小值为0x0020,最大值为0x1ffa。此选项在m2ts模式下无效,固定PMT PID。0x0100.- mpegts_start_pid 整数
设置基本流的第一个PID。默认值为
0x0100,最小值为0x0020,最大值为0x1ffa。此选项在m2ts模式下无效,基本流PID固定。- mpegts_m2ts_mode 布尔值
如果设置为
1,启用m2ts模式。默认值为-1,禁止m2ts模式。- muxrate 整数
设置恒定复用率。默认值为VBR。
- pes_payload_size 整数
设置PES数据包的最小有效负载大小(以字节为单位)。默认值为
2930.- mpegts_flags 标志
设置mpegts标志。接受以下选项:
- ‘resend_headers’
在写入下一数据包之前重新发送PAT/PMT。
- ‘latm’
对AAC使用LATM数据包化。
- ‘pat_pmt_at_frames’
在每个视频帧时重新发送PAT和PMT。
- ‘system_b’
符合系统B(DVB)而非系统A(ATSC)。
- ‘initial_discontinuity’
将每个流的初始数据包标记为不连续。
- ‘nit’
发送NIT表。
- ‘omit_rai’
禁用随机访问指示器写入。
- mpegts_copyts 布尔值
如果设置为
1,保留原始时间戳。默认值为-1,这会导致时间戳从0开始转换。- omit_video_pes_length 布尔值
省略视频数据包的PES长度。默认值为
1(true)。- pcr_period 整数
覆盖默认PCR重新传输时间(以毫秒为单位)。默认值为
-1,表示PCR间隔将自动确定:20毫秒用于CBR流,最高帧时长倍数,但小于100毫秒用于VBR流。- pat_period 持续时间
PAT/PMT表之间的最大时间(以秒为单位)。默认值为
0.1.- sdt_period 持续时间
SDT表之间的最大时间(秒)。默认值是
0.5.- nit_period 持续时间
NIT表之间的最大时间(秒)。默认值是
0.5.- tables_version 整数
设置PAT、PMT、SDT和NIT版本(默认值是
0,有效值范围是0到31,包括0和31)。 此选项允许更新流结构,以便标准消费者可以检测到更改。为此,请重新打开输出AVFormatContext(在使用API的情况下)或重新启动ffmpeg实例,循环更改tables_version值:ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111 ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111 ... ffmpeg -i source3.ts -codec copy -f mpegts -tables_version 31 udp://1.1.1.1:1111 ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111 ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111 ...
21.62.2 示例
ffmpeg -i file.mpg -c copy \
-mpegts_original_network_id 0x1122 \
-mpegts_transport_stream_id 0x3344 \
-mpegts_service_id 0x5566 \
-mpegts_pmt_start_pid 0x1500 \
-mpegts_start_pid 0x150 \
-metadata service_provider="Some provider" \
-metadata service_name="Some Channel" \
out.ts
21.63 mxf, mxf_d10, mxf_opatom
MXF多路复用器。
21.63.1 选项
多路复用器选项包括:
- store_user_comments 布尔值
设置是否应存储用户评论(如果可用)或从不存储。 IRT D-10不允许用户评论。因此默认情况下,mxf和mxf_opatom会写入用户评论,而mxf_d10不会
21.64 null
Null多路复用器。
此多路复用器不生成任何输出文件,主要用于测试或基准性能测试。
例如,要使用ffmpeg进行基准解码,可以使用以下命令:
ffmpeg -benchmark -i INPUT -f null out.null
注意,上述命令不会读取或写入out.null文件,但指定输出文件是ffmpeg语法所要求的。
或者,您可以这样写命令:
ffmpeg -benchmark -i INPUT -f null -
21.65 nut
- -syncpoints 标志
更改nut中的同步点使用:
- 默认值 use the normal low-overhead seeking aids.
- 无 do not use the syncpoints at all, reducing the overhead but making the stream non-seekable;
不推荐使用此选项,因为生成的文件非常容易受损,无法进行查找。通常同步点带来的额外开销可以忽略不计。注意,-
write_index0可以用于禁用所有增长的数据表,这允许以有限的内存_mux无尽的流而没有这些缺点。- 带时间戳 extend the syncpoint with a wallclock field.
该无和带时间戳标志是实验性的。
- -write_index 布尔值
在文件末尾写索引,默认是写索引。
ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor
21.66 ogg
Ogg容器多路复用器。
- -page_duration 持续时间
优先页面持续时间,以微秒为单位。多路复用器将尝试创建大约持续时间微秒长的页面。这允许用户在查找粒度和容器开销之间做出权衡。默认值是1秒。值为0将填满所有段,使页面尽可能大。值为1将在大多数情况下有效地使用每个页面一个数据包,这会增加容器开销但提供较小的查找粒度。
- -serial_offset 值
从某个序列值设置流媒体序列号。 通过设置为不同且足够大的值,可确保生成的ogg文件能够安全地链接。
21.67 rcwt
RCWT(保留时间的原始字幕)是一种ccExtractor原生格式,ccExtractor是一种常用的开源工具,用于处理608/708闭路字幕(CC)源。 它可以用来存档原始提取的CC数据流并生成供以后处理或转换的源文件。该格式支持ccExtractor与FFmpeg之间的互通性,简单易解析,并可用于备份CC演示。
此多路复用器遵循2024年3月的规范,自2014年4月以来该规范稳定且未变更。
此多路复用器与ccExtractor多路复用RCWT方式有些细微差距。 目前尚未观察到处理输出时与ccExtractor产生的兼容性问题,但实际效果可能存在差异,输出不会完全精确匹配。
可免费获取RCWT规范,请访问:https://github.com/CCExtractor/ccextractor/blob/master/docs/BINARY_FILE_FORMAT.TXT
21.67.1 示例
- 使用lavfi提取闭路字幕到RCWT:
ffmpeg -f lavfi -i "movie=INPUT.mkv[out+subcc]" -map 0:s:0 -c:s copy -f rcwt CC.rcwt.bin
21.68 segment, stream_segment, ssegment
基本流分段器。
该多路复用器将输出流划分为若干持续时间几乎固定的单独文件。输出文件名模式可以像image2一样设置,或者如果启用strftime模板选项,则可以使用strftime选项。
stream_segment是一种用于写入流媒体输出格式的多路复用器变体,即无需全局头部,推荐用于输出例如MPEG传输流段。ssegment是stream_segment.
每个段都以所选参考流的关键帧开始,通过reference_stream选项设置。
注意,如果你要对视频文件进行精确分割,你需要让输入关键帧与分段器期望的准确分割时间相符,否则分段多路复用器会在指定的开始时间之后的下一个关键帧开始新段。
分段多路复用器最适合单一恒定帧率的视频。
选项数还可以生成已创建段的列表,通过设置segment_list选项生成。列表类型则由segment_list_type选项指定。段列表中的条目文件名默认设置为相应段文件的基本名。
另请参见hls多路复用器,它为HLS分段提供了更具体的实现。
21.68.1 选项
分段多路复用器支持以下选项:
- increment_tc 1|0
如果设置为
1,则每个段之间增加时间码。 如果选择此项,则输入需要在第一个视频流中包含时间码。默认值是0.- reference_stream 说明符
设置参考流,说明符由字符串说明符指定。 如果说明符设置为
auto,参考流将会自动选择。 否则,它必须是一个流说明符(请参阅ffmpeg手册中的“流说明符”章节),用于指定参考流。默认值是auto.- segment_format 格式
覆盖内部容器格式,默认情况下通过文件扩展名推测。
- segment_format_options 选项列表
使用以:-分隔的键值参数列表来设置输出格式选项。 包含
:特殊字符的值必须转义。- segment_list 名称
也生成一个名为名称的列表文件。如果未指定,则不会生成列表文件。
- segment_list_flags 标志
设置影响分段列表生成的标志。
当前支持以下标志:
- ‘cache’
允许缓存(仅影响M3U8列表文件)。
- ‘live’
允许生成适合直播的文件。
- segment_list_size 大小
更新列表文件,使其最多只包含大小段。如果为0,则列表文件将包含所有段。默认值为0。
- segment_list_entry_prefix 前缀
为每个条目添加前缀前缀。可用于生成绝对路径。默认情况下不应用前缀。
- segment_list_type 类型
选择列表格式。
以下值被识别:
- ‘flat’
为创建的段生成一个扁平的列表,每行一个段。
- ‘csv, ext’
为创建的段生成列表,每行一个段,每行符合以下格式(逗号分隔值):
段文件名,段开始时间,段结束时间
段文件名是由多路复用器根据提供的模式生成的输出文件名。如果需要会应用CSV转义(根据RFC4180)。
段开始时间和段结束时间指定段的开始和结束时间(以秒为单位)。
后缀为
".csv"或".ext"的列表文件将自动选择此格式。‘ext’已被弃用,建议使用‘csv’.
- ‘ffconcat’
为创建的段生成一个ffconcat文件。生成的文件可使用FFmpegconcat解复用器读取。
后缀为
".ffcat"或".ffconcat"的列表文件将自动选择此格式。- ‘m3u8’
生成扩展版M3U8文件(版本3),符合http://tools.ietf.org/id/draft-pantos-http-live-streaming.
的要求。
".m3u8"将自动选择此格式。
如果未指定类型,将根据列表文件名后缀进行推测。
- segment_time 时间
将段的持续时间设置为时间,值必须是一个持续时间规格。默认值为"2"。另见segment_times选项。
请注意,除非强制参考流关键帧在指定时间,否则切分可能不准确。请参阅下面的介绍性说明和示例。
- min_seg_duration 时间
将最小段持续时间设置为时间,值必须是一个持续时间规格。这将防止多路复用器在低于此值的持续时间时结束段。仅适用于
segment_time。默认值为"0"。- segment_atclocktime 1|0
如果设置为"1",则从00:00时开始以常规时钟时间间隔切分。使用时间值设置切分间隔的长度。segment_time is used for setting the length of the splitting interval.
例如,将segment_time设置为"900"可以在12:00、12:15、12:30等时间点创建文件。
默认值为"0"。
- segment_clocktime_offset 持续时间
在使用时以指定的持续时间延迟段切分时间segment_atclocktime.
例如,将segment_time设置为"900"并将segment_clocktime_offset设置为"300"可以创建文件,例如12:05、12:20、12:35,等等。
默认值为"0"。
- segment_clocktime_wrap_duration 持续时间
强制分段器仅在分段时钟时间后指定持续时间内有数据包到达多路复用器时才开始新段。这样可以使分段器在本地时间向后跳跃时(例如闰秒或从夏令时转换为标准时间时)更具弹性。
默认是最大可能的持续时间,这意味着无论自上次时钟时间以来过了多长时间,都将开始一个新段。
- segment_time_delta 误差
指定选择段开始时间时的精确时间(以持续时间为单位)。默认值为"0"。
当指定误差时,如果某个关键帧的PTS满足以下关系,将开始新段:
PTS >= start_time - time_delta
此选项在切分视频内容时非常有用,视频通常会在GOP边界处分段。如果在指定的分段时间点之前立即找到一个关键帧,该帧会开始新的分段。
特别是可以与ffmpeg选项结合使用force_key_frames。由于舍入问题,force_key_frames可能无法准确设置关键帧时间,可能导致关键帧时间设在指定时间之前。对于恒定帧率视频,值设为1/(2*帧率),应能解决指定时间与force_key_frames设置时间之间的最差匹配情况。.
- segment_times 时间点
指定拆分点的列表。时间点包含一个以逗号分隔的持续时间规格列表,按升序排列。另见segment_time选项。
- segment_frames 帧
指定要拆分的视频帧号列表。帧包含一个以逗号分隔的整数列表,按升序排列。
这个选项指定每当找到一个参考流关键帧且帧的序列号(从0开始)大于或等于列表中的下一个值时,开始新段。
- segment_wrap 限制
当段索引到达限制.
- segment_start_number 号码
设置第一个段的序列号。默认为
0.- strftime 1|0
使用
strftime功能定义新段名称。如果选中此选项,输出段名称必须包含strftime功能模板。默认值为0.- break_non_keyframes 1|0
如果启用,允许段从关键帧以外的帧开始。这在某些播放器上当关键帧之间的时间不一致时会改善行为,但在其他播放器上可能会导致问题,并可能在寻求过程中产生一些异常。默认值为
0.- reset_timestamps 1|0
将每段的时间戳在段开始时重置,使每段几乎从零开始。这是为了方便生成段的播放。但某些多路复用器/编解码器组合可能无法正常工作。设置为
0默认情况下。- initial_offset 偏移量
指定时间戳偏移量以应用于输出包的时间戳。参数必须是一个时间持续时间的具体值,默认为0。
- write_empty_segments 1|0
如果启用,则在没有数据包的情况下,按时间段写入一个空的片段。否则,下一个写入的数据包将填充该片段。默认值为
0.
确保在编码时要求闭合GOP,并将GOP大小设置为适应您的片段时间限制。
21.68.2 示例
- 重新复用文件内容in.mkv为一个片段列表out-000.nut, out-001.nut等,并将生成的片段列表写入out.list:
ffmpeg -i in.mkv -codec hevc -flags +cgop -g 60 -map 0 -f segment -segment_list out.list out%03d.nut
- 为输出片段设置输入和输出格式选项:
ffmpeg -i in.mkv -f segment -segment_time 10 -segment_format_options movflags=+faststart out%03d.mp4
- 根据segment_times选项指定的分割点对输入文件进行片段划分:
ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 out%03d.nut
- 使用
ffmpegforce_key_frames选项在指定位置强制输入关键帧,结合分段选项segment_time_delta以考虑设置关键帧时间时可能出现的舍入问题。ffmpeg -i in.mkv -force_key_frames 1,2,3,5,8,13,21 -codec:v mpeg4 -codec:a pcm_s16le -map 0 \ -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 -segment_time_delta 0.05 out%03d.nut
为了在输入文件上强制关键帧,需要进行转码。
- 根据使用segment_frames选项指定的帧序列分割输入文件为片段:
ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut
- 将in.mkv转换为TS片段,使用
libx264和aac编码器:ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a aac -f ssegment -segment_list out.list out%03d.ts
- 将输入文件分段,并创建一个M3U8的实时播放列表(可用作实时HLS源):
ffmpeg -re -i in.mkv -codec copy -map 0 -f segment -segment_list playlist.m3u8 \ -segment_list_flags +live -segment_time 10 out%03d.mkv
21.69 平滑流式传输
平滑流式传输复用器生成一组适合通过传统Web服务器提供的文件(Manifest文件,分片)。
- window_size
指定Manifest中保留的片段数量。默认为0(保留所有)。
- extra_window_size
指定在Manifest外保留的片段数量,超出数量会从磁盘上移除。默认为5。
- lookahead_count
指定需要前视的片段数量。默认为2。
- min_frag_duration
指定最小片段持续时间(以微秒为单位)。默认为5000000。
- remove_at_exit
指定在完成时是否移除所有片段。默认为0(不移除)。
21.70 流哈希测试
基于每个流的哈希测试格式。
这一复用器计算并打印所有输入帧的加密哈希值,按照每个流的基础分别执行。这可以用于在无需执行完整二进制比较的情况下进行相等性检测。
默认情况下,音频帧被转换为有符号16位的原始音频,视频帧被转换为原始视频,随后再计算哈希值,但是也可以使用显式转换为其他编解码器的输出。时间戳被忽略。默认使用SHA-256加密哈希函数,但也支持其他一些算法。
复用器的输出由每个流的一行信息组成,其格式为:流索引,流类型,算法=哈希值,其中流索引是映射流的索引,流类型是一个表示流类型的单个字符,算法是一个表示所用哈希函数的短字符串,哈希值是一个表示计算所得哈希值的十六进制数字。
- hash 算法
使用由字符串算法指定的加密哈希函数。支持的值包括
MD5,murmur3,RIPEMD128,RIPEMD160,RIPEMD256,RIPEMD320,SHA160,SHA224,SHA256(默认),SHA512/224,SHA512/256,SHA384,SHA512,CRC32和adler32.
21.70.1 示例
计算转换为原始音频和视频的输入的SHA-256哈希值,并将其存储到文件中out.sha256:
ffmpeg -i INPUT -f streamhash out.sha256
若要将MD5哈希值打印到标准输出,请使用以下命令:
ffmpeg -i INPUT -f streamhash -hash md5 -
21.71 tee
tee复用器可以用来将相同的数据写入多个输出,例如文件或流。通常可用于同时通过网络流式传输视频并将其保存到磁盘。
这与在ffmpeg命令行工具中指定多个输出不同。使用tee复用器时,音频和视频数据只会被编码一次。使用传统的多输出方式则会启动并行的多次编码操作,这可能是个很耗费资源的过程。直接使用libavformat API时,tee复用器无用,因为可以直接将相同的数据包传递给多个复用器。
由于tee复用器不表示任何特定的输出格式,ffmpeg无法自动选择输出流。因此,所有的输出流必须明确指定,使用-map。参见下面的例子。
某些编码器可能需要根据输出格式设置不同的选项;由于tee复用器不能自动检测这些选项,因此需要明确指定。例如global_header标志。
从属输出在给复用器的文件名中指定,使用'|'分隔符。如果有从属文件名包含'|'分隔符、前导或尾随空格或任何特殊字符,则必须对其进行转义(参见(ffmpeg-utils)ffmpeg-utils(1)手册中的"引用与转义"部分).
21.71.1 选项
- use_fifo 布尔值
如果设置为1,将使用fifo复用器以独立线程处理从属输出。这允许补偿不同输出的速度/延迟/可靠性,并设置透明恢复。默认情况下,此功能关闭。
- fifo_options
传递给fifo伪复用器实例的选项。参见fifo.
可以通过在方括号中添加一个键值对列表,以':'分隔,为每个从属复用器指定复用器选项。如果选项值包含特殊字符或':'分隔符,则必须转义;请注意,这是第二层转义。key=value pairs separated by ’:’, between square brackets. If the options values contain a special character or the ’:’ separator, they must be escaped; note that this is a second level escaping.
还识别以下特殊选项:
- f
指定格式名称。如果无法从输出URL推测,则必填。
- bsfs[/规范]
指定要应用于指定输出的位流过滤器列表。
可以通过附加一个流规范符号到该选项后(使用
/. 规范必须是一个流规范符号,参见格式流规范符).如果未指定流规范符,则这些位流过滤器将应用于输出中的所有流。如果输出包含无法应用位流过滤器的流(如
h264_mp4toannexb应用到包含音频流的输出),会导致输出操作失败。位流过滤器的选项必须按以下格式指定:
opt=value.可以用","分隔指定多个位流过滤器。
- use_fifo 布尔值
这允许为各个从属复用器覆盖tee复用器的use_fifo选项。
- fifo_options
这允许为各个从属复用器覆盖tee复用器的fifo选项。详情见fifo.
- select
选择应该映射到从属输出的流,通过流说明符指定。如果未指定,默认所有映射的流。如果输出格式不接受所有映射的流,则会导致该输出操作失败。
可以使用多个流说明符,用逗号分隔(
,)例如:a:0,v- onfail
指定输出失败时的行为。可以设置为
abort(默认值)或ignore.abort将在此从属输出失败时导致整个过程失败。ignore忽略此输出上的失败,因此其他输出将继续操作,不会受到影响。
21.71.2 示例
- 编码一些内容,同时将其存档到一个WebM文件,并作为MPEG-TS通过UDP进行流媒体传输:
ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a "archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"
- 如上所述,但即使本地文件输出失败(例如本地磁盘已满),也继续进行流媒体传输:
ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a "[onfail=ignore]archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"
- 使用
ffmpeg对输入进行编码,并将输出发送到三个不同目的地。dump_extra位流过滤器用于向所有输出视频关键帧包中添加额外信息,这是MPEG-TS格式所要求的选择选项被应用到out.aac以使其仅包含音频包。ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=a]out.aac" - 如上所述,但仅选择流
a:1用于音频输出。注意必须进行第二级转义,因为":"是用于分隔选项的特殊字符。ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=\'a:1\']out.aac"
21.72 webm_chunk
WebM实时块混流器。
此混流器将WebM头和块写入单独的文件,以供支持通过DASH进行WebM实时流的客户端使用。
21.72.1 选项
此混流器支持以下选项:
- chunk_start_index
第一个块的索引(默认值为0)。
- header
用于写入初始化数据的头文件名。
- audio_chunk_duration
每个音频块的持续时间,单位为毫秒(默认值为5000)。
21.72.2 示例
ffmpeg -f v4l2 -i /dev/video0 \
-f alsa -i hw:0 \
-map 0:0 \
-c:v libvpx-vp9 \
-s 640x360 -keyint_min 30 -g 30 \
-f webm_chunk \
-header webm_live_video_360.hdr \
-chunk_start_index 1 \
webm_live_video_360_%d.chk \
-map 1:0 \
-c:a libvorbis \
-b:a 128k \
-f webm_chunk \
-header webm_live_audio_128.hdr \
-chunk_start_index 1 \
-audio_chunk_duration 1000 \
webm_live_audio_128_%d.chk
21.73 webm_dash_manifest
WebM DASH清单混流器。
此混流器实现了WebM DASH清单规范,用于生成DASH清单XML。它还支持生成用于DASH实时流的清单。
了解更多信息,请参阅:
- WebM DASH规范:https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification
- ISO DASH规范:http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip
21.73.1 选项
此混流器支持以下选项:
- adaptation_sets
此选项的语法为:“id=x,streams=a,b,c id=y,streams=d,e”,其中x和y是自适应集的唯一标识符,a,b,c,d和e是对应的音频及视频流的索引。可以使用此选项添加任意数量的自适应集。
- live
将此设置为1以创建实时流DASH清单。默认值:0。
- chunk_start_index
第一个块的起始索引。此值将置于清单中的‘startNumber’ 属性内的 ‘SegmentTemplate’ 元素里。默认值:0。
- chunk_duration_ms
每个块的持续时间,单位为毫秒。此值将置于清单中的‘duration’属性的‘SegmentTemplate’元素中。默认值:1000。
- utc_timing_url
返回UTC时间戳(ISO格式)的页面的URL。此值将置于清单中的‘value’属性的‘UTCTiming’元素中。默认值:无。
- time_shift_buffer_depth
任何表示都能保证有效的最短时间(以秒为单位)的偏移缓冲区。此值将置于清单中的‘timeShiftBufferDepth’属性的‘MPD’元素中。默认值:60。
- minimum_update_period
清单的最小更新周期(以秒为单位)。此值将置于清单中的‘minimumUpdatePeriod’属性的‘MPD’元素中。默认值:0。
21.73.2 示例
ffmpeg -f webm_dash_manifest -i video1.webm \
-f webm_dash_manifest -i video2.webm \
-f webm_dash_manifest -i audio1.webm \
-f webm_dash_manifest -i audio2.webm \
-map 0 -map 1 -map 2 -map 3 \
-c copy \
-f webm_dash_manifest \
-adaptation_sets "id=0,streams=0,1 id=1,streams=2,3" \
manifest.xml
22 元数据
FFmpeg能够将媒体文件的元数据转储成简单的UTF-8编码的类似INI的文本文件,然后使用元数据混流器/解流器重新加载。
文件格式如下:
- 文件由头部和若干通过部分划分的元数据标签组成,每行一个。
- 头部为‘;FFMETADATA’字符串,后跟版本号(当前为1)。
- 元数据标签的格式为‘key=value’
- 紧接在头部之后的是全局元数据。
- 在全局元数据之后,可能有带有每流/每章元数据的部分。
- 部分以括号内的大写部分名开头(即STREAM或CHAPTER),括号为‘[’, ‘]’并以下一个部分或文件结尾。
- 在部分章节的开头可能有一个可选的时间基用于起始/结束值。它必须是类似形式‘TIMEBASE=num/den’,其中num和den是整数。如果时间基丢失,则假定开始/结束时间以纳秒为单位。
接下来章节部分必须包含章节开始和结束时间,格式为‘START=num’, ‘END=num’,其中num为正整数。
- 空行和以‘;’或‘#’开始的行会被忽略。
- 包含特殊字符(‘=’, ‘;’, ‘#’, ‘\’和换行符)的元数据键或值必须用反斜杠‘\’.
- 注意元数据中的空格(例如‘foo = bar’)被视为标签的一部分(在上述示例中键是‘foo ’,值是‘ bar’).
一个ffmetadata文件可能如下:
;FFMETADATA1 title=bike\\shed ;this is a comment artist=FFmpeg troll team [CHAPTER] TIMEBASE=1/1000 START=0 #chapter ends at 0:01:00 END=60000 title=chapter \#1 [STREAM] title=multi\ line
通过使用ffmetadata混流器和解流器,可以从输入文件提取元数据到一个ffmetadata文件,然后将文件转码为带编辑的ffmetadata文件的输出文件。
使用ffmpeg提取ffmetadata文件的过程如下:
ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
可以通过以下方法从FFMETADATAFILE文件重新插入编辑过的元数据信息:
ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT
23 协议选项
libavformat库提供了一些通用的全局选项,可在所有协议上设置。此外,每个协议还可以支持所谓的私有选项,这些选项是该组件特定的。
选项可以通过在FFmpeg工具中指定 -选项 值进行设置,或者通过明确设置AVFormatContext选项或使用libavutil/opt.hAPI进行编程使用。
以下是支持的选项列表:
- protocol_whitelist 列表 (input)
设置一个用","分隔的允许协议列表。“ALL”匹配所有协议。以“–”开头的协议表示禁用。 默认情况下允许所有协议,但嵌套协议所用的协议受限于每个协议的子集。
24个协议
协议是FFmpeg中配置的元素,支持访问需要特定协议的资源。
当您配置您的FFmpeg构建时,所有支持的协议默认情况下都会启用。您可以使用配置选项"–list-protocols"列出所有可用的协议。
您可以使用配置选项"–disable-protocols"禁用所有协议,并使用选项"–enable-protocol=PROTOCOL"选择性地启用协议,或者您可以使用选项"–disable-protocol=PROTOCOL".
ff*工具的选项"-protocols"将显示支持的协议列表。
所有协议接受以下选项:
- rw_timeout
最大等待(网络)读写操作完成的时间,以微秒为单位。
以下是当前可用的协议的描述。
24.1 amqp
高级消息队列协议(AMQP)版本0-9-1是一种基于代理的发布订阅通信协议。
FFmpeg必须编译时启用–enable-librabbitmq才能支持AMQP。此外,还必须运行一个单独的AMQP代理。例如开源AMQP代理是RabbitMQ。
启动代理后,FFmpeg客户端可以使用以下命令将数据流式传输到代理:
ffmpeg -re -i input -f mpegts amqp://[[user]:[password]@]hostname[:port][/vhost]
其中,hostname和port(默认值为5672)是代理的地址。 客户端还可以设置用户/密码进行身份验证。这两个字段的默认值是"guest"。代理上的虚拟主机名称可以通过vhost设置。默认值是"/"。
多个订阅者可以使用以下命令从代理流式传输数据:
ffplay amqp://[[user]:[password]@]hostname[:port][/vhost]
在RabbitMQ中,发布到代理的所有数据都通过一个特定的交换流动,每个订阅客户端都分配了一个队列/缓冲区。当数据包到达交换时,根据交换和routing_key字段,它可以被复制到客户端的队列。
支持以下选项:
- exchange
设置代理上使用的交换。RabbitMQ有几个预定义的交换:“amq.direct”是默认交换,其发布者和订阅者必须具有匹配的routing_key;“amq.fanout”与广播操作类似(即数据独立于routing_key转发到fanout交换上的所有队列);“amq.topic”类似于“amq.direct”,但允许更复杂的模式匹配(请参考RabbitMQ文档)。
- routing_key
设置路由键。默认值是"amqp"。路由键用于“amq.direct”和“amq.topic”交换中,以决定是否将数据包写入订阅者的队列。
- pkt_size
发送/接收给代理的每个数据包的最大大小。默认是131072。 最小值是4096,最大值是任何可以由int表示的较大值。在接收数据包时,这会在FFmpeg中设置一个内部缓冲区大小。 应大于或等于发送给代理的数据包大小。否则,接收到的消息可能会被截断,导致解码错误。
- connection_timeout
在初始连接代理期间的超时时间,以秒为单位。默认值是rw_timeout,如果未设置rw_timeout,则为5秒。
- delivery_mode 模式
设置发送到代理的每个消息的传输模式。 接受以下值:
- ‘persistent’
传输模式设置为“持久”(2)。这是默认值。 消息可能会根据其设置写入代理的磁盘。
- ‘non-persistent’
传输模式设置为“非持久”(1)。 消息将保留在代理的内存中,除非代理处于内存压力下。
24.2 async
用于输入流的异步数据填充包装。
在后台线程中填充数据,以将I/O操作与解复用线程分离。
async:URL async:http://host/resource async:cache:http://host/resource
24.3 bluray
读取蓝光播放列表。
接受的选项有:
- angle
蓝光角度
- chapter
起始章节(1...N)
- playlist
要读取的播放列表(BDMV/PLAYLIST/?????.mpls)
示例:
从挂载到/mnt/bluray的蓝光中读取最长的播放列表:
bluray:/mnt/bluray
从挂载到/mnt/bluray的蓝光中读取播放列表4的角度2,从第2章开始:
-playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray
24.4 cache
输入流的缓存包装。
将输入流缓存到临时文件。这为直播流带来了寻址功能。
接受的选项有:
- read_ahead_limit
当不支持寻址时,可读取的预加载字节数。范围是-1到INT_MAX。 -1表示无限制。默认值是65536。
URL语法是
cache:URL
24.5 concat
物理串联协议。
从多个资源顺序读取和寻址,就像它们是一个唯一的资源一样。
此协议接受的URL格式为:
concat:URL1|URL2|...|URLN
其中URL1, URL2, ..., URLN是要串联的资源的URL,每个可能指定一个不同的协议。
例如,要读取以下文件的序列split1.mpeg,
split2.mpeg, split3.mpeg使用ffplay以下命令:
ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
请注意,您可能需要转义字符“|”,因为它对许多shell程序有特殊含义。
24.6 concatf
使用换行分隔资源列表的物理串联协议。
从多个资源顺序读取和寻址,就像它们是一个唯一的资源一样。
此协议接受的URL格式为:
concatf:URL
其中URL是包含换行符分隔的资源列表的URL,每个可能指定一个不同的协议。特殊字符必须使用反斜杠或单引号转义。参见(ffmpeg-utils)ffmpeg-utils(1)手册中的“引用和转义”部分.
例如,要读取以下文件的序列split1.mpeg,
split2.mpeg, split3.mpeg在一个文件中以单独的行列出split.txt使用ffplay以下命令:
ffplay concatf:split.txt
其中split.txt包含以下几行:
split1.mpeg split2.mpeg split3.mpeg
24.7 crypto
AES加密流读取协议。
接受的选项有:
- key
从给定的十六进制表示中设置AES解密密钥二进制块。
- iv
从给定的十六进制表示中设置AES解密初始化向量二进制块。
接受的URL格式:
crypto:URL crypto+URL
24.8 data
URI中的内联数据。参见http://en.wikipedia.org/wiki/Data_URI_scheme.
例如,将内联提供的GIF文件转换为ffmpeg:
ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png
24.9 fd
文件描述符访问协议。
接受的语法是:
fd: -fd file_descriptor
如果fd未指定,则默认使用stdout文件描述符用于写入,stdin用于读取。与pipe协议不同,fd协议如果对应于一个常规文件,则具有寻址支持。由于安全原因,fd协议不支持通过URL传递文件描述符。
此协议接受以下选项:
- blocksize
设置I/O操作的最大块大小,以字节为单位。默认值是
INT_MAX这将不会限制请求的块大小。 将这个值设置得相对较低可以改善用户终止请求的反应时间,这在数据传输较慢时是很有价值的。- fd
设置文件描述符。
24.10 文件
文件访问协议。
读取或写入文件。
文件 URL 的形式可以是:
file:文件名
其中文件名是要读取的文件路径。
没有协议前缀的 URL 将假定为文件 URL。根据构建情况,像 Windows 路径这样以驱动器字母开头的 URL 也可能被假定为文件 URL(通常在类 Unix 系统的构建中不是这样)。
例如,要从一个文件读取input.mpeg使用以下命令:ffmpeg使用命令:
ffmpeg -i file:input.mpeg output.mpeg
此协议接受以下选项:
- truncate
设置写入时是否截断现有文件,如果设置为 1。值为 0 则阻止截断。默认值为 1。
- blocksize
设置 I/O 操作最大块大小(以字节为单位)。默认值为
INT_MAX这将不会限制请求的块大小。 将这个值设置得相对较低可以改善用户终止请求的反应时间,这对于慢速介质上的文件是很有价值的。- follow
如果设置为 1,协议将在文件末尾重试读取操作,允许读取仍在被写入的文件。 为了让这一操作终止,您需要使用 rw_timeout 选项,或使用中断回调(对于 API 用户)。
- seekable
控制是否在文件上声明可寻性。0 表示不可寻,-1 表示自动(正常文件可寻,命名管道不可寻)。
许多解复用器会以不同方式处理可寻和不可寻资源,覆盖此设置可能会加快某些文件的打开速度,但会以失去一些特性(如精确寻址)为代价。
24.11 ftp
FTP (文件传输协议)。
使用 FTP 协议读取或写入远程资源。
需要以下语法。
ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
此协议接受以下选项。
- timeout
设置用于底层低级别操作的套接字 I/O 操作超时(单位:微秒)。默认值为 -1,表示未指定超时。
- ftp-user
设置用于验证 FTP 服务器的用户。这将被 FTP URL 中的用户覆盖。
- ftp-password
设置用于验证 FTP 服务器的密码。这将被 FTP URL 中的密码覆盖,或者ftp-anonymous-password如果未设置用户。
- ftp-anonymous-password
匿名用户登录时使用的密码。通常应使用电子邮件地址。
- ftp-write-seekable
在编码期间控制连接的可寻性。如果设置为 1,则资源被认为是可寻的;如果设置为 0,则被认为是不可寻的。默认值是 0。
注意:此协议可以用作输出,但不建议这样做,除非采取特别的预防措施(测试、自定义服务器配置等)。不同的 FTP 服务器在寻址操作期间表现方式不同。ff* 工具可能由于服务器限制而生成不完整内容。
24.12 gopher
Gopher 协议。
24.13 gophers
Gophers 协议。
带有 TLS 封装的 Gopher 协议。
24.14 hls
将符合 Apple HTTP Live Streaming 的分段流作为统一流进行读取。 描述分段的 M3U8 播放列表可以是远程 HTTP 资源,也可以是使用标准文件协议访问的本地文件。 嵌套协议通过在 hls URI 方案名称后指定“+协议”声明,其中协议是“file”或“http”。
hls+http://host/path/to/remote/resource.m3u8 hls+file://path/to/local/resource.m3u8
不建议使用此协议——hls 解复用器应该同样效果良好(如果不是,请报告问题),并且更加全面。 要使用 hls 解复用器,请直接使用指向 m3u8 文件的 URL。
24.15 http
HTTP (超文本传输协议)。
此协议接受以下选项:
- seekable
控制连接的可寻性。如果设置为 1,资源将被认为是可寻的;如果设置为 0,则被认为是不可寻的;如果设置为 -1,则会尝试判断是否可寻。默认值为 -1。
- chunked_post
如果设置为 1,则在发送 POST 时使用分块传输编码;默认值为 1。
- http_proxy
设置 HTTP 代理以便穿过,例如 http://example.com:1234
- headers
设置自定义 HTTP 头,可覆盖内置默认头。值必须是一个字符串编码的头字段。
- content_type
为 POST 消息或监听模式设置特定的内容类型。
- user_agent
覆盖 User-Agent 头。如果未指定,协议将使用描述 libavformat 构建的字符串(例如“Lavf/<版本号>”)。
- referer
设置 Referer 头。在 HTTP 请求中包含 'Referer: URL' 头。
- multiple_requests
如果设置为 1,则使用持久连接;默认值为 0。
- post_data
设置自定义 HTTP POST 数据。
- mime_type
导出 MIME 类型。
- http_version
导出 HTTP 响应版本号。通常为“1.0”或“1.1”。
- cookies
设置将在未来请求中发送的 cookies。每个 cookie 的格式与 Set-Cookie HTTP 响应字段的值相同。多个 cookies 可用换行符分隔。
- icy
如果设置为 1,则向服务器请求 ICY(SHOUTcast)元数据。如果服务器支持此功能,元数据必须通过应用程序通过读取icy_metadata_headers和icy_metadata_packet选项获取。 默认值为 1。
- icy_metadata_headers
如果服务器支持 ICY 元数据,这是包含 ICY 特定 HTTP 回复头的内容,用换行符分隔。
- icy_metadata_packet
如果服务器支持 ICY 元数据,并且icy设置为 1,则包含服务器发送的最后一个非空元数据包内容。对感兴趣的应用程序,需要定期轮询以获取数据流中的元数据更新。
- metadata
设置一个导出的字典,包含来自位流的 Icecast 元数据(如果有)。只对 C API 有用。
- auth_type
-
设置 HTTP 验证类型。没有为摘要身份验证的选项,因为这种方法需要先从服务器获得 nonce 参数,不能像基本身份验证那样立即使用。
- none
自动选择 HTTP 验证类型。这是默认设置。
- basic
-
选择 HTTP 基本身份验证。
基本身份验证发送一个 Base64 编码的字符串,其中包含客户端的用户名和密码。Base64 不是一种加密方式,应与明文传递用户名和密码视为同等。若资源需要保护,请考虑使用基本身份验证以外的身份验证方案。HTTPS/TLS 应结合基本身份验证使用。 没有这些附加安全增强措施,不应使用基本身份验证来保护敏感或有价值的信息。
- send_expect_100
为 POST 发送 Expect: 100-continue 标头。如果设置为 1,则发送;如果设置为 0,则不发送;如果设置为 -1,则尝试发送(如果可能)。默认值为 -1。
- location
导出一个包含内容位置的字典。只对 C API 有用。
- offset
设置初始字节偏移。
- end_offset
尝试将请求限制到此偏移之前的字节。
- method
作为客户端选项使用时,设置请求的 HTTP 方法。
作为服务器选项使用时,设置预期的 HTTP 方法。 如果预期的 HTTP 方法与收到的方法不匹配,客户端将收到“错误请求”响应。 如果未设置,目前不会检查 HTTP 方法。这将在未来被替换为自动检测。
- reconnect
在 EOF 前断开连接时自动重新连接。
- reconnect_at_eof
如果设置了此选项,则 EOF 会被视为错误并导致重新连接,这对于直播或无尽流很有用。
- reconnect_on_network_error
在连接期间出现 TCP/TLS 错误时自动重新连接。
- reconnect_on_http_error
指定 HTTP 状态代码的逗号分隔列表,用于在这些代码上重新连接。列表可以包含具体的状态代码(例如“503”)或字符串“4xx”/“5xx”。
- reconnect_streamed
如果设置了此选项,则即使是流式/不可寻址流,上述错误也会触发重新连接。
- reconnect_delay_max
设置最大延迟(以秒为单位),超过此延迟后放弃重新连接。
- reconnect_max_retries
设置最大连接重试次数。默认值未设置。
- reconnect_delay_total_max
设置总最大延迟(以秒为单位),超过此延迟后放弃重新连接。
- respect_retry_after
如果启用,并且遇到 Retry-After 标头,将遵守其请求的重新连接延迟,而不是使用指数回退。对 429 和 503 错误很有用。默认值已启用。
- listen
如果设置为 1,则启用实验性 HTTP 服务器。当用作输出选项时,可以发送数据;当用作输入选项时,可以通过 HTTP POST 从客户端读取数据。 如果设置为 2,则启用实验性多客户端 HTTP 服务器。这尚未在 ffmpeg.c 中实现,因此不得作为命令行选项使用。
# Server side (sending): ffmpeg -i somefile.ogg -c copy -listen 1 -f ogg http://服务器:端口 # Client side (receiving): ffmpeg -i http://服务器:端口 -c copy somefile.ogg # Client can also be done with wget: wget http://服务器:端口 -O somefile.ogg # Server side (receiving): ffmpeg -listen 1 -i http://服务器:端口 -c copy somefile.ogg # Client side (sending): ffmpeg -i somefile.ogg -chunked_post 0 -c copy -f ogg http://服务器:端口 # Client can also be done with wget: wget --post-file=somefile.ogg http://服务器:端口
- resource
当使用实验性 HTTP 服务器时,客户端请求的资源。
- reply_code
当使用实验性的HTTP服务器时,返回给客户端的HTTP代码。
- short_seek_size
设置重读阈值(字节),当需要优先使用重读而不是跳转和新的HTTP请求时很有用。例如,这可以确保在读取大视频数据包时,也能在小音频数据包之间维持相同的连接。
24.15.1 HTTP Cookies
某些HTTP请求将被拒绝,除非在请求中通过cookie值。cookies选项允许指定这些cookie。至少,每个cookie必须指定一个值以及路径和域名。匹配路径和域名的HTTP请求将自动在HTTP Cookie头字段中包括该cookie值。多个cookie可以通过换行符分隔。
指定cookie播放流所需的语法为:
ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8
24.16 Icecast
Icecast协议(向Icecast服务器流媒体)
此协议接受以下选项:
- ice_genre
设置流媒体风格。
- ice_name
设置流媒体名称。
- ice_description
设置流媒体描述。
- ice_url
设置流媒体网站URL。
- ice_public
设置流媒体是否公开。默认值为0(不公开)。
- user_agent
覆盖User-Agent头。如果未指定,将使用类似"Lavf/<版本号>"的字符串。
- password
设置Icecast挂载点密码。
- content_type
设置流媒体内容类型。如果内容类型不是audio/mpeg,则必须设置。
- legacy_icecast
支持Icecast版本低于2.4.0的功能,这些版本不支持HTTP PUT方法但支持SOURCE方法。
- tls
建立到Icecast的TLS(HTTPS)连接。
icecast://[用户名[:密码]@]服务器:端口/挂载点
24.17 ipfs
星际文件系统(IPFS)协议支持。可以通过称为网关的http(s)端点访问存储在IPFS网络上的文件。此协议将IPFS原生协议(ipfs://和ipns://)包装以通过这样的网关发送。用户可以(并应该)托管自己的节点,这意味着此协议将使用本地网关访问IPFS网络上的文件。
此协议接受以下选项:
- gateway
定义使用的网关。如果未设置,协议将依次尝试定位本地网关,查看
$IPFS_GATEWAY,$IPFS_PATH和$HOME/.ipfs/。
可以通过两种方式使用此协议。使用IPFS:
ffplay ipfs://<hash>
或者使用IPNS协议(IPNS是可变的IPFS):
ffplay ipns://<hash>
24.18 mmst
基于TCP的MMS(微软媒体服务器)协议。
24.19 mmsh
基于HTTP的MMS(微软媒体服务器)协议。
所需的语法为:
mmsh://服务器[:端口][/应用程序][/播放路径]
24.20 md5
MD5输出协议。
计算要写入数据的MD5哈希,并在关闭时将此值写入指定的输出或如果未指定则写入标准输出。它可用于测试复用器,而无需实际写入文件。
下面是一些示例。
# Write the MD5 hash of the encoded AVI file to the file output.avi.md5. ffmpeg -i input.flv -f avi -y md5:output.avi.md5 # Write the MD5 hash of the encoded AVI file to stdout. ffmpeg -i input.flv -f avi -y md5:
请注意某些格式(通常是MOV)需要输出协议支持可寻址,因此它们会与MD5输出协议失败。
24.21 pipe
UNIX管道访问协议。
从UNIX管道读取和写入。
接受的语法为:
pipe:[数字]
如果fd未指定,数字是管道的文件描述符对应的数字(例如:0表示标准输入,1表示标准输出,2表示标准错误)。如果数字未指定,默认将使用stdout文件描述符进行写入,stdin进行读取。
例如,使用ffmpeg:
cat test.wav | ffmpeg -i pipe:0 # ...this is the same as... cat test.wav | ffmpeg -i pipe:
从标准输入读取ffmpeg:
ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi # ...this is the same as... ffmpeg -i test.wav -f avi pipe: | cat > test.avi
写入到标准输出使用
- blocksize
此协议接受以下选项:
INT_MAX, which results in not limiting the requested block size. Setting this value reasonably low improves user termination request reaction time, which is valuable if data transmission is slow.- fd
设置文件描述符。
请注意某些格式(通常是MOV),需要输出协议支持可寻址,因此它们会与pipe输出协议失败。
24.22 prompeg
Pro-MPEG守则#3版本2FEC协议。
Pro-MPEG CoP#3 FEC是针对通过RTP发送的MPEG-2传输流的二维校验前向纠错机制。
此协议必须与rtp_mpegts复用器和rtp协议一起使用。
所需的语法为:
-f rtp_mpegts -fec prompeg=选项=值... rtp://主机名:端口
目标UDP端口为port + 2列FEC流和port + 4行FEC流。
此协议接受以下选项:
- l=列数(4-20,LxD <= 100)
The number of columns (4-20, LxD <= 100)
- d=行数(4-20,LxD <= 100)
The number of rows (4-20, LxD <= 100)
用法示例:
-f rtp_mpegts -fec prompeg=l=8:d=4 rtp://主机名:端口
24.23 rist
可靠互联网流传输协议
接受的选项为:
- rist_profile
支持的值:
- ‘simple’
- ‘main’
这是默认值。
- ‘advanced’
- buffer_size
设置用于数据重传的内部RIST缓冲区大小,以毫秒为单位。默认值为0,表示librist默认值(1秒)。最大值为30秒。
- fifo_size
设置librist接收器输出fifo的大小,以数据包为单位。必须是2的幂。默认值为8192(librist默认值为1024)。
- overrun_nonfatal=1|0
在librist fifo缓冲区溢出的情况下继续。默认值为0。
- pkt_size
设置发送数据的最大数据包大小。默认值为1316。
- log_level
设置RIST日志消息的日志级别。只有在您明确希望启用调试级别消息或数据包丢失模拟时需要设置此选项,否则会遵循常规日志级别。
- secret
设置加密密钥覆盖,默认情况下未设置。
- encryption
设置加密类型,默认情况下禁用。可接受的值为128和256。
24.24 rtmp
实时消息协议。
实时消息协议(RTMP)用于通过 TCP/IP 网络流式传输多媒体内容。
所需的语法是:
rtmp://[用户名:密码@]服务器[:端口][/应用程序][/实例][/播放路径]
接受的参数包括:
- username
可选的用户名(主要用于发布)。
- password
可选的密码(主要用于发布)。
- server
RTMP 服务器地址。
- port
要使用的 TCP 端口号(默认是 1935)。
- app
这是要访问的应用程序名称。通常对应于安装在 RTMP 服务器上的应用程序路径(例如,/ondemand/, /flash/live/等)。通过
rtmp_app选项也可以覆盖从 URI 解析出来的值。- playpath
这是要播放的资源的路径或名称,相对于在应用中指定的位置,可能以 "mp4:" 为前缀。通过选项也可以覆盖从 URI 解析的值。
rtmp_playpathoption, too.- listen
充当服务器,监听传入连接。
- timeout
等待传入连接的最长时间。隐含监听。
另外,以下参数可以通过命令行选项(或代码中的AVOption)来设置:
- rtmp_app
在 RTMP 服务器上连接的应用程序名称。此选项会覆盖 URI 中指定的参数。
- rtmp_buffer
以毫秒为单位设置客户端缓冲时间。默认是 3000。
- rtmp_conn
额外的任意 AMF 连接参数,从字符串解析,例如
B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0。 每个值都以一个单字符作为前缀,用来表示类型, B 表示布尔值,N 表示数字,S 表示字符串,O 表示对象,Z 表示空值, 后跟一个冒号。对于布尔值,数据必须是 0(FALSE)或 1(TRUE)。 对于对象,数据必须是 0(结束对象)或 1(开始对象)。 子对象中的数据项可以命名,通过在类型前加 'N' 并在值之前指定名称(例如NB:myFlag:1)。此选项可以多次使用,以构造任意 AMF 序列。- rtmp_enhanced_codecs
指定客户端宣传为支持的编解码器列表,用于增强的 RTMP 流。此选项应设置为以逗号分隔的 fourcc 值列表,例如
hvc1,av01,vp09用于多个编解码器,或hvc1只使用一个编解码器。在 "连接命令消息" 的 "fourCcLive" 属性中会展示指定的列表。- rtmp_flashver
用于运行 SWF 播放器的 Flash 插件版本。默认是 LNX 9,0,124,2。(在发布时,默认值是 FMLE/3.0(兼容;<libavformat 版本>)。)
- rtmp_flush_interval
同一请求中清除的包数(仅限 RTMPT)。默认是 10。
- rtmp_live
指定媒体是否为直播流。直播流中无法恢复或搜索。默认值是
any,这意味着订阅者会首先尝试播放指定的直播流。 如果未找到该名称的直播流,则会播放录制的流。其他可能的值是live和recorded.- rtmp_pageurl
嵌入媒体的网页的 URL。默认情况下,不会发送任何值。
- rtmp_playpath
用于播放或发布的流标识符。此选项会覆盖 URI 中指定的参数。
- rtmp_subscribe
要订阅的直播流名称。默认情况下,不会发送任何值。仅当指定此选项或 rtmp_live 设置为 live 时才会发送。
- rtmp_swfhash
解压缩 SWF 文件的 SHA256 哈希(32 字节)。
- rtmp_swfsize
解压缩 SWF 文件的大小(SWF 验证所需)。
- rtmp_swfurl
媒体 SWF 播放器的 URL。默认情况下,不会发送任何值。
- rtmp_swfverify
播放器 SWF 文件的 URL,自动计算哈希/大小。
- rtmp_tcurl
目标流的 URL。默认为 proto://host[:port]/app。
- tcp_nodelay=1|0
设置 TCP_NODELAY 以禁用 Nagle 算法。默认值为 0。
Remark: Writing to the socket is currently not optimized to minimize system calls and reduces the efficiency / effect of TCP_NODELAY.
示例:使用ffplay从 RTMP 服务器 “myserver” 的应用程序 “vod” 读取名为 “sample” 的多媒体资源:
ffplay rtmp://myserver/vod/sample
发布到一个受密码保护的服务器,分别传递播放路径和应用程序名称:
ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/
24.25 rtmpe
加密的实时消息协议。
加密的实时消息协议(RTMPE)使用标准加密原语进行 流媒体传输,包括 Diffie-Hellman 密钥交换和 HMACSHA256,生成一对 RC4 密钥。
24.26 rtmps
通过安全 SSL 连接的实时消息协议。
实时消息协议(RTMPS)用于通过加密连接进行流媒体 传输。
24.27 rtmpt
通过 HTTP 的实时消息协议隧道。
通过 HTTP 隧道的实时消息协议 (RTMPT) 用于通过 HTTP 请求流水传输多媒体内容以穿越防火墙。
24.28 rtmpte
通过 HTTP 隧道的加密实时消息协议。
通过 HTTP 隧道的加密实时消息协议(RTMPTE)用于通过 HTTP 请求流媒体内容, 用于穿越防火墙。
24.29 rtmpts
通过 HTTPS 隧道的实时消息协议。
通过 HTTPS 隧道的实时消息协议(RTMPTS)用于通过 HTTPS 请求流水传输多媒体内容以穿越防火墙。
24.30 libsmbclient
libsmbclient 允许操纵 CIFS/SMB 网络资源。
以下是所需的语法。
smb://[[domain:]user[:password@]]server[/share[/path[/file]]]
此协议接受以下选项。
- timeout
设置套接字 I/O 操作的超时时间(单位为毫秒),用于底层低级操作。默认设置为 -1,表示未指定超时时间。
- truncate
在写入时如果设置为 1,则截断现有文件。值为 0 则禁止截断。默认值为 1。
- workgroup
为连接设置工作组。默认情况下,不指定工作组。
有关更多信息,请访问:http://www.samba.org/.
24.31 libssh
通过 libssh 的安全文件传输协议
使用 SFTP 协议从远程资源读取或写入。
以下是所需的语法。
sftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
此协议接受以下选项。
- timeout
设置套接字 I/O 操作的超时时间。默认设置为 -1,表示未指定超时时间。
- truncate
在写入时如果设置为 1,则截断现有文件。值为 0 则会禁止截断。默认值为 1。
- private_key
指定包含私钥的文件路径,以便在授权期间使用。默认情况下,libssh 会在~/.ssh/目录中查找密钥。
示例:播放存储在远程服务器上的文件。
ffplay sftp://user:password@server_address:22/home/user/resource.mpeg
24.32 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte
通过 librtmp 支持的实时消息协议及其变体。
需要在配置期间存在 librtmp 头文件和库。需要明确配置构建时使用 "–enable-librtmp"。 如果启用,它将替代原生 RTMP 协议。
此协议提供大多数客户端功能以及支持 RTMP、HTTP 隧道 RTMP(RTMPT)、 加密 RTMP(RTMPE)、通过 SSL/TLS 的 RTMP(RTMPS)以及这些加密类型的隧道变体(RTMPTE,RTMPTS)所需的一些服务器功能。
所需的语法是:
rtmp_proto://服务器[:端口][/应用程序][/播放路径] 选项
其中rtmp_proto是以下字符串之一:"rtmp"、"rtmpt"、"rtmpe"、 "rtmps"、"rtmpte"、"rtmpts",分别对应每种 RTMP 变体。服务器, 端口, 应用和播放路径与RTMP原生协议中指定的含义相同。选项包含以空格分隔的选项列表,格式为键=值.
有关更多信息,请参阅librtmp手册页(man 3 librtmp)。
例如,要实时流化文件到RTMP服务器,使用ffmpeg:
ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
要使用以下方法播放相同的流ffplay:
ffplay "rtmp://myserver/live/mystream live=1"
24.33 rtp
实时传输协议。
RTP URL的必需语法是:
rtp://主机名[:端口][?选项]
端口指定要使用的RTP端口。
选项包含以&分隔的选项列表,格式为键=值.
支持以下URL选项:
- ttl=n
设置TTL(生存时间)值(仅用于组播)。
- rtcpport=n
将远程RTCP端口设置为n.
- localrtpport=n
将本地RTP端口设置为n.
- localrtcpport=n'
将本地RTCP端口设置为n.
- pkt_size=n
将最大数据包大小(字节)设置为n.
- buffer_size=大小
设置最大UDP套接字缓冲区大小(字节)。
- connect=0|1
执行
connect()操作(如果设置为1)或不执行(如果设置为0)UDP套接字操作。- sources=ip[,ip]
列出允许的源IP地址。
- block=ip[,ip]
列出不允许(被阻止)的源IP地址。
- write_to_source=0|1
将数据包发送到最近接收到的数据包的源地址(如果设置为1)或默认远程地址(如果设置为0)。
- localport=n
将本地RTP端口设置为n.
此选项已被弃用替代方案是localrtpport应该被使用。
- localaddr=地址
用于发送数据包或加入组播组的网络接口的本地IP地址。
- timeout=n
将套接字I/O操作的超时时间(微秒)设置为n.
重要说明:
- 如果rtcpport未设置,RTCP端口将被设置为RTP端口值加1。
- 如果localrtpport(本地RTP端口)未设置,将为本地RTP和RTCP端口使用任何可用端口。
- 如果localrtcpport(本地RTCP端口)未设置,将被设置为本地RTP端口值加1。
24.34 rtsp
实时流协议。
RTSP在libavformat中不是技术上的协议处理程序,它是一个解复用器和复用器。解复用器支持标准RTSP(通过RTP传输数据,例如苹果和微软使用的)和Real-RTSP(通过RDT传输数据)。
复用器可用于通过RTSP ANNOUNCE将流发送到支持的服务器(目前是达尔文流媒体服务器和Mischa Spiegelmock的RTSP服务器).
RTSP URL的必需语法是:
rtsp://主机名[:端口]/路径
选项可以在ffmpeg/ffplay命令行中设置,或通过代码中AVOption的方式进行设置,或在avformat_open_input.
24.34.1 复用器
支持以下选项。
- rtsp_transport
设置RTSP传输协议。
它接受以下值:
- ‘udp’
使用UDP作为底层传输协议。
- ‘tcp’
使用TCP(在RTSP控制通道内交错)作为底层传输协议。
默认值为‘0’.
- rtsp_flags
设置RTSP标志。
接受以下值:
- ‘latm’
为AAC使用MP4A-LATM打包方式而非MPEG4-GENERIC。
- ‘rfc2190’
为H.263使用RFC 2190打包方式而非RFC 4629。
- ‘skip_rtcp’
不发送RTCP发送方报告。
- ‘h264_mode0’
在RTP中为H.264使用模式0。
- ‘send_bye’
完成时发送RTCP BYE数据包。
默认值为‘0’.
- min_port
设置本地UDP端口最小值。默认值为5000。
- max_port
设置本地UDP端口最大值。默认值为65000。
- buffer_size
设置最大套接字缓冲区大小(字节)。
- pkt_size
设置最大发送数据包大小(字节)。默认值为1472。
24.34.2 解复用器
支持以下选项。
- initial_pause
如果设置为1,则不要立即开始播放流。默认值为0。
- rtsp_transport
设置 RTSP 传输协议。
可接受以下值:
- ‘udp’
使用 UDP 作为底层传输协议。
- ‘tcp’
使用 TCP(在 RTSP 控制通道内进行交错)作为底层传输协议。
- ‘udp_multicast’
使用 UDP 多播作为底层传输协议。
- ‘http’
使用 HTTP 隧道作为底层传输协议,这对于通过代理非常有用。
- ‘https’
使用 HTTPS 隧道作为底层传输协议,这对于通过代理和广泛用于安全考虑非常有用。
可以指定多个底层传输协议,在这种情况下,它们会依次尝试(如果其中一个设置失败,则尝试下一个)。对于复用器,仅支持‘tcp’ 和 ‘udp’选项。
- rtsp_flags
设置 RTSP 标志。
可接受以下值:
- ‘filter_src’
仅接受来自协商的对等地址和端口的数据包。
- ‘listen’
充当服务器,监听传入连接。
- ‘prefer_tcp’
如果 TCP 可用作为 RTSP RTP 传输,优先尝试 TCP。
- ‘satip_raw’
导出原始 MPEG-TS 流而不是解复用。此标志将简单地写出原始流,并保留原始 PAT/PMT/PID。
默认值为‘none’.
- allowed_media_types
设置从服务器接收的媒体类型。
可接受以下标志:
- ‘video’
- ‘audio’
- ‘data’
- ‘subtitle’
默认情况下接受所有媒体类型。
- min_port
设置本地 UDP 最小端口。默认值为 5000。
- max_port
设置本地 UDP 最大端口。默认值为 65000。
- listen_timeout
设置建立初始连接的最大超时时间(以秒为单位)。设置listen_timeout> 0 设置rtsp_flags为‘listen’。默认为 -1,意味着在设置‘listen’模式时没有无限超时。
- reorder_queue_size
设置用于处理重排数据包的缓冲数据包数。
- timeout
设置 TCP 套接字 I/O 超时时间(以微秒为单位)。
- user_agent
覆盖 User-Agent 标头。如果未指定,则默认为 libavformat 标识字符串。
- buffer_size
设置最大套接字缓冲区大小(以字节为单位)。
通过 UDP 接收数据时,解复用器尝试重新排列接收到的数据包(因为数据包可能乱序到达或完全丢失)。这可以通过将最大解复用延迟设置为零来禁用(通过 AVFormatContext 中的max_delay字段)。
观看多码率 Real-RTSP 流时,使用ffplay显示的流可以通过-vst n和-ast n分别为视频和音频,并可以通过按键动态切换。v和a.
24.34.3 示例
以下示例均使用ffplay和ffmpeg工具。
- 通过 UDP 观看流,最大重排序延迟为 0.5 秒:
ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
- 通过 HTTP 隧道观看流:
ffplay -rtsp_transport http rtsp://server/video.mp4
- 以实时方式将流发送到 RTSP 服务器,供其他人观看:
ffmpeg -re -i 输入 -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
- 以实时方式接收流:
ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp 输出
24.35 SAP
会话公告协议(RFC 2974)。这在 libavformat 中不是严格意义上的协议处理器,它是一个复用器和解复用器。 它用于 RTP 流的信号,通过在一个单独的端口上定期宣布流的 SDP。
24.35.1 复用器
复用器的 SAP URL 语法为:
sap://目的地[:端口][?选项]
RTP 数据包发送到目的地的端口端口,如果未指定端口则默认为 5004。选项为&分隔列表。支持以下选项:
- announce_addr=地址
指定发送公告的目标 IP 地址。如果省略,公告将发送至公认的 SAP 宣告多播地址 224.2.127.254(sap.mcast.net),或如果目的地是一个 IPv6 地址则发送至 ff0e::2:7ffe。
- announce_port=端口
指定发送公告的端口,默认为 9875。
- ttl=TTL
指定公告和 RTP 数据包的生存时间,默认为 255。
- same_port=0|1
如果设置为 1,所有 RTP 流发送至相同端口对。如果设置为 0(默认值),所有流会发送至唯一端口,每个流的端口比前一个流高 2。VLC/Live555 要求此设置为 1,以接受流。 而 libavformat 的 RTP 接收栈要求所有流发送至唯一端口。
以下是示例命令行。
在本地子网广播流,用 VLC 观看:
ffmpeg -re -i 输入 -f sap sap://224.0.0.255?same_port=1
类似地,用ffplay:
ffmpeg -re -i 观看: -f sap sap://224.0.0.255
而用ffplay观看 IPv6 流:
ffmpeg -re -i 输入 -f sap sap://[ff0e::1:2:3:4]
24.35.2 解复用器
解复用器的 SAP URL 语法为:
sap://[地址][:端口]
地址是监听公告的多播地址,如果省略,则默认使用 224.2.127.254(sap.mcast.net)。端口是监听的端口,如果省略则默认为 9875。
解复用器在指定地址和端口上监听公告。一旦收到公告,它会尝试接收该特定流。
以下是示例命令行。
播放在正常 SAP 多播地址上宣布的第一个流:
ffplay sap://
播放在默认 IPv6 SAP 多播地址上宣布的第一个流:
ffplay sap://[ff0e::2:7ffe]
24.36 SCTP
流控传输协议。
接受的 URL 语法为:
sctp://主机:端口[?选项]
协议接受以下选项:
- listen
如果设置为任何值,则监听传入连接。默认情况下执行的是传出连接。
- max_streams
设置流最大数量。默认情况下未设置限制。
24.37 srt
通过 libsrt 的 Haivision 安全可靠传输协议。
SRT URL 支持的语法是:
srt://主机名:端口[?选项]
选项包含 & 分隔的选项列表,形式为键=值.
或
选项 srt://主机名:端口
选项包含 ’-键 值’ 选项。
此协议接受以下选项。
- connect_timeout=毫秒
连接超时;SRT 无法在 RTT > 1500 毫秒 (2 次握手交换)时使用默认的 3 秒连接超时进行连接。 此选项适用于调用方和会合连接模式。 对于会合模式,连接超时值是设置值的 10 倍 (可作为早期版本连接问题的解决方法)。
- ffs=字节
飞行标志大小(窗口大小),单位为字节。 FFS 实际上是一个内部参数,您应设置它不少于recv_buffer_size且mss。默认值 是相当大的,因此除非您设置了非常大的接收缓冲区,您无需更改此选项。 默认值为 25600。
- inputbw=字节/秒
发送方的标称输入速率,单位为字节/秒。与oheadbw一起使用,当maxbw设置为相对(0)时,用于计算发送恢复数据包和媒体流数据的 最大发送速率:inputbw * (100 + oheadbw)/ 100 如果inputbw未设置,而maxbw设置为相对(0),实际输入速率在库内部计算。 默认值为 0。
- iptos=tos
IP 服务类型,仅适用于发送方。默认值为 0xB8。
- ipttl=ttl
IP 存活时间,仅适用于发送方。默认值为 64。
- latency=微秒
基于时间戳的数据包传输延迟。 用于吸收丢失数据包重传时的突发情况。 此标志将rcvlatency和peerlatency设置为相同的值。 请注意,在版本 1.3.0 之前,这是唯一设置延迟的标志。 实际上相当于设置peerlatency,当侧是发送方时,且rcvlatency为接收方时,双向流 发送不支持。
- listen_timeout=微秒
设置套接字监听超时。
- maxbw=字节/秒
最大发送带宽,单位为字节/秒。 -1 表示无限(CSRTCC 限制为 30mbps) 0 相对于输入速率(见inputbw) >0 绝对限制值 默认值为 0(相对)
- mode=caller|listener|rendezvous
连接模式。caller打开客户端连接。listener启动服务器以监听传入连接。rendezvous使用会合连接模式。 默认值为 caller。
- mss=字节
最大段大小,单位为字节。用于缓冲分配和速率计算,使用数据包计数假设数据包完全填充。 使用双方间最小的 MSS。这在整个互联网中默认值是 1500。 这是 UDP 数据包的最大大小,除非您有某些不同寻常的专用网络设置,否则只能减少。 默认值为 1500。
- nakreport=1|0
如果设置为 1,接收器将定期发送 ‘UMSG_LOSSREPORT‘ 消息,直到丢失数据包被重传或故意丢弃。 默认值为 1。
- oheadbw=百分比
恢复带宽超出输入速率,单位为百分比。见inputbw。 默认值为 25%。
- passphrase=字符串
HaiCrypt 加密/解密密码字符串,长度在 10 到 79 个字符之间。 该密码是发送方和接收方之间的共享秘密。 它用于使用 PBKDF2(基于密码的密钥派生函数)生成密钥加密密钥。 仅在pbkeylen非零时使用。 接收器仅在接收到的数据已加密时使用。 配置的密码无法恢复(仅写)。
- enforced_encryption=1|0
如果为 true,则连接双方必须设置相同的密码(包括空密码,即无加密)。 如果密码不匹配或仅一方未加密,则连接将被拒绝。 默认值为 true。
- kmrefreshrate=数据包
传输数据包数量之后切换到新加密密钥。默认值为 -1。 -1 表示自动模式(在 srt 库中为 0x1000000)。此选项范围为整数,范围是 0 -
INT_MAX.- kmpreannounce=数据包
发送新加密密钥的时间间隔到密钥切换时间间隔。 此值也适用于后续密钥切换时间间隔和旧密钥退役间隔。 默认值为 -1。 -1 表示自动模式(在 srt 库中为 0x1000)。此选项范围为整数,范围是 0 -
INT_MAX.- snddropdelay=微秒
发送方丢弃数据包前的额外延迟。此延迟会加到默认的丢弃时间间隔值上。
特别值 -1:在发送方不丢弃数据包。
- payload_size=字节
设置在直播模式下使用发送功能单次调用传输的最大声明数据包大小。 如果不使用此值(在文件模式下默认),则设置为 0。 默认是 -1(自动模式),通常意味着 MPEG-TS; 如果您计划使用 SRT 来发送其他类型的负载,例如,使用非常小的帧包装直播流,您可以使用更大的最大帧大小,但不得超过 1456 字节。
- pkt_size=字节
‘payload_size’.
- peerlatency=微秒
延迟值(如rcvlatency所述),由发送方设置,作为接收方的最小值。
- pbkeylen=字节
发送方加密密钥长度,单位为字节。 只能设置为 0, 16, 24 和 32。 如果不是 0,则启用发送方加密功能。 接收方无需设置(设置为 0),密钥长度由发送方在 HaiCrypt 握手中获取。 默认值为 0。
- rcvlatency=微秒
自数据包发送到接收方应用接收到的数据包时间间隔。 此时间应足够大以充当缓冲时间,用于处理发送时间、意外延长的 RTT时间和 retransmit UDP包所需的时间。 实际延迟值将为此选项值与对方设置的peerlatency值的最大值。 在版本 1.3.0之前,此选项只能设置为latency.
- recv_buffer_size=字节
设置 UDP 接收缓冲区大小,单位为字节。
- send_buffer_size=字节
设置 UDP 发送缓冲区大小,单位为字节。
- timeout=微秒
设置读取、写入和连接操作的超时错误触发值。 请注意,SRT 库有可独立控制的内部超时值, 这里设置的值仅是它们的上限。
- tlpktdrop=1|0
丢弃过时的数据包。在接收方启用后,它会跳过未及时传输的丢失数据包, 并在以下数据包的播放时间到来时将其传递给应用程序。 还会发送虚假的 ACK 给发送方。 如果在发送方启用了此功能且接收方支持此功能, 发送方会丢弃无法及时传输的旧数据包。 如果接收方支持,它会在发送方自动启用。
- sndbuf=字节
设置发送缓冲区大小,单位为字节。
- rcvbuf=字节
设置接收缓冲区大小,单位为字节。
接收缓冲区不得超过ffs.
- lossmaxttl=数据包
重新排序容许值的最大值。当重新排序容许值 >0 时, 丢失的报送会延迟,直到该数量的数据包到达。 每次有“延迟到达”的数据包时重新排序容许值会增加,但仅当不是由重传导致时 (即 UDP 数据包趋于乱序到达时),对此数据包与最新序列所差的值。 此选项的默认值为 0,这意味着此机制关闭, 序列“间隙”发生时丢失报送总是立即发送。
- minversion
对端所需的最低 SRT 版本。 如果对端不满足所需的最低版本要求,连接将被拒绝。
十六进制中的版本格式为0xXXYYZZ,表示可读的x.y.z格式。
- streamid=字符串
一个最长为512字符的字符串,可以在连接前设置到socket上。监听端可以从srt_accept返回的socket中检索到这个流ID,该socket是通过设置了流ID的另一端连接的。SRT对字符串内容没有强制的特殊解释。 在Rendezvous连接中,这个选项没有意义;结果可能会是其中一端覆盖另一端的值,这取决于运气哪一端会胜出。
- srt_streamid=字符串
‘的别名streamid’以避免与ffmpeg命令行选项冲突。
- smoother=live|file
针对该socket传输使用的“平滑器”类型,负责传输和拥塞控制。连接双方的平滑器类型必须完全相同,否则连接会被拒绝。
- messageapi=1|0
当设置为true时,该socket使用消息API,否则使用缓冲API。请注意在实时模式(参考transtype)中只有消息API可用。在文件模式中,可以选择使用以下两种模式之一:
流API(默认,当此选项为false)。在此模式下,可以通过一次发送指令发送任意数量的数据,或者使用专用函数直接从文件读取。内部机制将处理任何速度和拥塞控制。在接收时,您也可以接收任意数量的数据,未提取的数据将在下一次调用中等待。在流模式中,数据之间没有边界。
消息API。在此模式下,单次发送指令仅传递具有边界的一段数据(消息)。与实时模式不同,此消息可以跨多个UDP数据包,而且唯一的大小限制是必须能完整地放入发送缓冲区。接收端必须使用足够大的缓冲区接收消息,否则消息不会被提供。当消息不完整(未收到所有数据包或有数据包丢失)时,它将不会被提供。
- transtype=live|file
为socket设置传输类型,尤其是设置此选项会使多个其他参数设置为特定传输类型所需的默认值。
live:设置实时传输的选项。在此模式下,您只能通过一次发送指令发送符合一个UDP数据包的数量数据,其大小限制首次定义为payload_size(此模式的默认值为1316)。此模式下没有速度控制,仅有带宽控制(如果配置),以确保传输的总带宽不会超过。
file:设置非实时传输的选项。详见messageapi获取进一步解释
- linger=秒数
关闭时socket等待未发送数据的秒数。默认值是-1。-1表示自动设置(实时模式下为0秒,文件模式下为180秒)。此选项的范围是整数,从0到
INT_MAX.- tsbpd=1|0
当为true时,使用基于时间戳的包传递模式。默认行为取决于传输类型:在实时模式中启用,在文件模式中禁用。
更多信息见:https://github.com/Haivision/srt.
24.38 srtp
安全实时传输协议。
可接受的选项如下:
- srtp_in_suite
- srtp_out_suite
选择输入和输出编码套件。
支持的值:
- ‘AES_CM_128_HMAC_SHA1_80’
- ‘SRTP_AES128_CM_HMAC_SHA1_80’
- ‘AES_CM_128_HMAC_SHA1_32’
- ‘SRTP_AES128_CM_HMAC_SHA1_32’
- srtp_in_params
- srtp_out_params
设置输入和输出编码参数,这些参数通过一个base64编码的二进制块表示。该二进制块的前16字节用于主密钥,接下来的14字节用于主盐。
24.39 subfile
从文件或其他流中虚拟提取一个段。底层流必须是可寻址的。
接受的选项:
- start
提取段的起始偏移量,以字节为单位。
- end
提取段的结束偏移量,以字节为单位。如设置为0,则提取至文件末尾。
示例:
从DVD VOB文件提取一个章节(起始和结束扇区通过外部获取并乘以2048):
subfile,,start,153391104,end,268142592,,:/media/dvd/VIDEO_TS/VTS_08_1.VOB
直接从TAR档案中播放AVI文件:
subfile,,start,183241728,end,366490624,,:archive.tar
从起始偏移量播放MPEG-TS文件直到结束:
subfile,,start,32815239,end,0,,:video.ts
24.40 tee
将输出写入多个协议。单独的输出由|分隔。
tee:file://path/to/local/this.avi|file://path/to/local/that.avi
24.41 tcp
传输控制协议。
TCP URL的必需语法为:
tcp://主机名:端口[?选项]
选项包含由&分隔的key=val形式的选项列表。键=值.
支持的选项列表如下。
- listen=2|1|0
监听传入连接。0禁用监听,1启用单客户模式监听,2启用多客户模式监听。默认值为0。
- local_addr=地址
用于TCP socket连接的网络接口的本地IP地址。
- local_port=端口
用于TCP socket连接的本地端口。
- timeout=微秒
设置错误超时时间,以微秒为单位。
此选项仅与读取模式相关:如果在此时间间隔内没有数据到达,则抛出错误。
- listen_timeout=毫秒
设置监听超时时间,以毫秒为单位。
- recv_buffer_size=字节
设置接收缓冲区大小,以字节为单位。
- send_buffer_size=字节
设置发送缓冲区大小,以字节为单位。
- tcp_nodelay=1|0
设置TCP_NODELAY以禁用Nagle算法。默认值为0。
Remark: Writing to the socket is currently not optimized to minimize system calls and reduces the efficiency / effect of TCP_NODELAY.
- tcp_mss=字节
设置用于传出TCP数据包的最大段大小,以字节为单位。
下面的示例展示如何使用ffmpeg设置一个监听TCP连接,然后用ffplay:
ffmpeg -i 访问它。 -f 格式 tcp://主机名:端口?listen ffplay tcp://主机名:端口
24.42 tls
传输层安全性(TLS)/安全套接字层(SSL)
TLS/SSL URL的必需语法为:
tls://主机名:端口[?选项]
以下参数可以通过命令行选项设置(或在代码中通过AVOption设置):
- ca_file, cafile=文件名
包含根证书颁发机构(CA)证书的文件,作为可信的。如果链接的TLS库包含默认值,则可能无需指定此文件即验证正常,但并不是所有库和设置都内建默认值。 文件必须是OpenSSL PEM格式。
- tls_verify=1|0
如果启用,尝试验证与我们通信的对端。 注意:如果使用OpenSSL,目前只验证对端证书由CA数据库中的根证书之一签署,但不验证证书是否实际匹配我们试图连接的主机名。(对于其他后端,主机名也会得到验证。)
默认情况下这是禁用的,因为许多情况下需要调用方提供一个CA数据库。
- cert_file, cert=文件名
包含用于与对接方握手的证书的文件。(作为服务器操作时,在监听模式下,这通常是对端要求的,而客户端证书仅在某些设置中需要。)
- key_file, key=文件名
包含证书私钥的文件。
- listen=1|0
如果启用,监听提供的端口上的连接,并在握手中假定服务器角色而不是客户端角色。
- http_proxy
用于隧道通信的HTTP代理,例如
http://example.com:1234。 代理必须支持CONNECT方法。
示例命令行:
创建一个TLS/SSL服务器并提供一个输入流。
ffmpeg -i 输入 -f 格式 tls://主机名:端口?listen&cert=服务器证书.crt&key=服务器密钥.key
从TLS/SSL服务器播放回流使用ffplay:
ffplay tls://主机名:端口
24.43 udp
用户数据报协议。
UDP URL的必需语法是:
udp://主机名:端口[?选项]
选项包含由&分隔的选项列表,格式为键=值.
如果系统启用了线程,则使用环形缓冲区存储接收的数据,这可以减少由于UDP套接字缓冲区溢出导致的数据丢失。fifo_size和overrun_nonfatal选项与此缓冲区相关。
支持选项列表如下。
- buffer_size=大小
设置UDP最大套接字缓冲区大小(以字节为单位)。这用于设置接收或发送缓冲区的大小,具体取决于套接字的用途。默认值是输出32 KB,输入384 KB。 另见fifo_size.
- bitrate=比特率
如果设置为非零值,且输入有足够的包则输出将具有指定的恒定比特率。
- burst_bits=位数
使用比特率时,此选项指定包突发的最大比特数量。
- localport=端口
覆盖本地要绑定的UDP端口。
- localaddr=地址
用于发送数据包或加入多播组的网络接口的本地IP地址。
- pkt_size=大小
设置UDP包的大小(以字节为单位)。
- reuse=1|0
显式允许或禁止重用UDP套接字。
- ttl=ttl
设置存活时间值(仅适用于多播)。
- connect=1|0
使用
connect()初始化UDP套接字。在这种情况下,目标地址不能稍后通过ff_udp_set_remote_url更改。如果起初目标地址未指定,此选项也可以在ff_udp_set_remote_url中指定。这使得能够通过getsockname找出数据包的源地址,并且在接收到“目标无法到达”后使写入返回AVERROR(ECONNREFUSED)。对于接收来说,这有益于只接收来自指定对等地址/端口的数据包。- sources=地址[,地址]
仅接收来自指定地址发送的数据包。对于多播来说,也仅订阅来自这些地址的多播流量。
- block=地址[,地址]
忽略由指定地址发送的数据包。如果是多播,也在多播订阅中排除这些来源地址。
- fifo_size=单位
设置UDP接收环形缓冲区大小,以188字节大小的包数表示。如果未指定,默认值为7*4096。
- overrun_nonfatal=1|0
在UDP接收环形缓冲区溢出的情况下继续存活。默认值为0。
- timeout=微秒
设置错误超时,以微秒表示。
此选项仅在读取模式下相关:如果超过此时间间隔没有数据到达,则引发错误。
- broadcast=1|0
显式允许或禁止UDP广播。
请注意,广播在具有广播风暴保护的网络上可能无法正常工作。
24.43.1 示例
- 使用
ffmpeg通过UDP流式传输到远程终端点:ffmpeg -i 输入 -f 格式 udp://主机名:端口
- 使用
ffmpeg以mpegts格式通过UDP流式传输,使用188大小的UDP包,并使用大型输入缓冲区:ffmpeg -i 输入 -f mpegts udp://主机名:端口?pkt_size=188&buffer_size=65535
- 使用
ffmpeg从远程终端点接收UDP数据:ffmpeg -i udp://[多播地址]:端口 ...
24.44 unix
Unix本地套接字
Unix套接字URL的必需语法是:
unix://文件路径
以下参数可以通过命令行选项设置(或在代码中通过AVOptions设置):
- timeout
以毫秒为单位的超时时间。
- listen
以监听模式创建Unix套接字。
24.45 zmq
使用libzmq库进行ZeroMQ异步消息通信。
此库支持单播流式传输到多个客户端,无需依赖外部服务器。
流式传输或连接到流的必需语法是:
zmq:tcp://ip-address:port
示例: 在端口5555上创建本地流:
ffmpeg -re -i input -f mpegts zmq:tcp://127.0.0.1:5555
多个客户端可以连接到流使用:
ffplay zmq:tcp://127.0.0.1:5555
通过ZeroMQ发布-订阅模式实现流式传输到多个客户端。服务器端绑定到端口并发布数据。客户端通过IP地址/端口连接到服务器并订阅流。服务器和客户端启动的顺序通常无关紧要。
FFmpeg必须使用 –enable-libzmq选项编译才能支持该协议。
选项可以在ffmpeg/ffplay命令行上设置。支持以下选项:
- pkt_size
强制发送/接收数据的最大包大小。默认值为131,072字节。在服务器端,这设置通过ZeroMQ发送的包的最大大小。在客户端,这设置用于接收包的内部缓冲区大小。注意,客户端的pkt_size应该等于或大于服务器的pkt_size。否则接收到的消息可能会被截断,并导致解码错误。
25 设备选项
libavdevice库提供了与libavformat相同的接口。即,输入设备被视为解复用器,输出设备被视为复用器,并且接口和通用设备选项与libavformat提供的相同(请参阅ffmpeg-formats手册)。
此外,每个输入或输出设备可能支持所谓的私有选项,这些选项是特定于该组件。
选项可以通过指定 -选项 值在FFmpeg工具中设置,或通过显式设置在设备中AVFormatContext选项或使用libavutil/opt.hAPI用于程序化使用。
26 输入设备
输入设备是配置在FFmpeg中的元素,用于访问连接到系统的多媒体设备传来的数据。
当你配置FFmpeg构建时,默认会启用所有支持的输入设备。可以通过配置选项"–list-indevs"列出所有可用的设备。
可以通过配置选项"–disable-indevs"禁用所有输入设备,也可以通过选项"–enable-indev=INDEV"有选择地启用某个输入设备,或者通过选项"–disable-indev=INDEV".
ff*工具的选项"-devices"将显示支持的输入设备列表。
以下是当前可用的输入设备的描述。
26.1 alsa
ALSA(高级Linux声音架构)输入设备。
要在配置期间启用此输入设备,你需要在系统上安装libasound。
此设备允许从一个ALSA设备中捕获数据。需要捕获的设备名称必须是ALSA卡的标识符。
ALSA标识符的语法是:
hw:CARD[,DEV[,SUBDEV]]
其中DEV和SUBDEV部分是可选的。
这三个参数(依次为:CARD,DEV,SUBDEV)指定卡号或标识符、设备号和子设备号(-1表示任意)。
要查看系统当前识别的卡列表,请检查文件/proc/asound/cards和/proc/asound/devices.
例如,要使用ffmpeg从一个卡号为0的ALSA设备捕获,可以运行以下命令:
ffmpeg -f alsa -i hw:0 alsaout.wav
更多信息请参见:http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html
26.1.1 选项
- sample_rate
设置采样率(以Hz为单位)。默认值为48000。
- channels
设置通道数。默认值为2。
26.2 android_camera
Android相机输入设备。
此输入设备使用Android Camera2 NDK API,该API在API级别24及以上设备上可用。配置期间会自动检测android_camera的可用性。
此设备允许从集成到Camera2 NDK API中的Android设备上的所有相机捕获内容。
可用的相机会在内部枚举,并可以通过camera_index参数选择。输入文件字符串将被忽略。
通常后置摄像头的索引为0,前置摄像头的索引为1。
26.2.1 选项
- video_size
设置视频大小,格式为字符串,如640x480或hd720。 如果请求的视频大小不可用或默认值,会回退到Android报告的首个可用配置。
- framerate
设置视频帧率。 如果请求的帧率不可用或默认值(-1),会回退到Android报告的首个可用配置。
- camera_index
设置要使用的相机索引。默认值为0。
- input_queue_size
设置最大缓冲帧数。默认值为5。
26.3 avfoundation
AVFoundation输入设备。
AVFoundation是Apple推荐的用于OSX >= 10.7和iOS上的流捕获框架。
必须按照以下语法给出输入文件名:
-i "[[VIDEO]:[AUDIO]]"
第一个项选择视频输入,后一个选择音频输入。 流必须通过设备名称或设备索引指定,如设备列表所示。 另外,视频和/或音频输入设备可以通过索引选择,使用 -video_device_index <INDEX> 和/或 -audio_device_index <INDEX> ,覆盖输入文件名中给出的设备名称或索引。
可以使用-list_devices true枚举所有可用设备,列出所有设备名称和对应的索引。
有两个设备名称别名:
default选择对应类型的AVFoundation默认设备。
none不记录对应的媒体类型。 等效于指定一个空的设备名称或索引。
26.3.1 选项
AVFoundation支持以下选项:
- -list_devices <TRUE|FALSE>
如果设置为true,将显示所有可用输入设备的列表,包括设备名称和索引。
- -video_device_index <INDEX>
按索引指定视频设备。覆盖输入文件名中给出的内容。
- -audio_device_index <INDEX>
按索引指定音频设备。覆盖输入文件名中给出的内容。
- -pixel_format <FORMAT>
请求视频设备使用特定的像素格式。 如果指定的格式不受支持,将显示一系列可用格式,并使用列表中的第一个。可用的像素格式包括:
monob, rgb555be, rgb555le, rgb565be, rgb565le, rgb24, bgr24, 0rgb, bgr0, 0bgr, rgb0, bgr48be, uyvy422, yuva444p, yuva444p16le, yuv444p, yuv422p16, yuv422p10, yuv444p10, yuv420p, nv12, yuyv422, gray- -framerate
设置捕获帧率。默认值为
ntsc,对应的帧率为30000/1001.- -video_size
设置视频帧大小。
- -capture_cursor
捕获鼠标指针。默认值为0。
- -capture_mouse_clicks
捕获屏幕鼠标点击。默认值为0。
- -capture_raw_data
捕获原始设备数据。默认值为0。 使用此选项可能会接收传递给AVFoundation框架的底层数据。例如,对于将原始DV数据发送到框架的复用设备(如基于磁带的摄像机),如果将此选项设置为false,则会接收设计像素格式的捕获视频帧;如果设置为true,则会接收未经改动的原始DV流。
26.3.2 示例
- 打印AVFoundation支持的设备列表并退出:
$ ffmpeg -f avfoundation -list_devices true -i ""
- 从视频设备0录制视频,从音频设备0录制音频到out.avi:
$ ffmpeg -f avfoundation -i "0:0" out.avi
- 从视频设备2录制视频,从音频设备1录制音频到out.avi:
$ ffmpeg -f avfoundation -video_device_index 2 -i ":1" out.avi
- 使用像素格式bgr0从系统默认视频设备录制视频,不录制音频到out.avi:
$ ffmpeg -f avfoundation -pixel_format bgr0 -i "default:none" out.avi
- 从合适的输入设备录制原始DV数据,并将输出写入out.dv:
$ ffmpeg -f avfoundation -capture_raw_data true -i "zr100:none" out.dv
26.4 decklink
decklink输入设备为Blackmagic DeckLink设备提供捕获功能。
要启用此输入设备,你需要安装Blackmagic DeckLink SDK并用适当的--extra-cflags和--extra-ldflags配置。
在Windows上,需要通过widl.
处理IDL文件。raw_formatDeckLink对支持的格式要求非常严格。可以通过-list_formats 1设置输入的像素格式。
帧率和视频大小必须由你的设备确定,使用
。音频采样率始终为48 kHz,通道数可以是2、8或16。请注意,所有音频通道捆绑在一个音轨中。
- list_devices
如果设置为true,打印设备列表并退出。 默认值为false。此选项已过时,请使用ffmpeg的
-sources选项列出可用输入设备。- list_formats
如果设置为true,打印支持的格式列表并退出。 默认值为false.
- format_code <FourCC>
将输入视频格式设置为FourCC指定的格式。要查看设备支持的值,请使用list_formats。 请注意,还有一个FourCC'pal '也可以用作pal(3个字母)。 默认行为是自动检测输入视频格式,如果硬件支持。
- raw_format
设置捕获视频的像素格式。 可用值为:
- ‘auto’
-
这是默认值,表示8位YUV 422或如果使用格式自动检测,则为8位ARGB;否则为8位YUV 422。
- ‘uyvy422’
-
8位 YUV 422。
- ‘yuv422p10’
-
10位 YUV 422。
- ‘argb’
-
8位 RGB。
- ‘bgra’
-
8位 RGB。
- ‘rgb10’
-
10位 RGB。
- teletext_lines
如果设置为非零值,将从垂直辅助数据中捕获额外的字幕流。支持SD PAL(576i)和HD(1080i或1080p)源。在HD源的情况下,会解码OP47数据包。
此选项是捕获的SD PAL VBI行的位掩码,具体为第6到22行和第318到335行。位掩码中的最低位对应第6行。不包含字幕信息的选定行将被忽略。您可以使用特殊all常量选择所有可能的行,或者standard跳过第6、第318和第319行,这些行不兼容所有接收设备。
对于SD源,ffmpeg需要使用
--enable-libzvbi进行编译。对于HD源,较旧的(预4K)DeckLink卡型号必须在10位模式下捕获。- channels
定义捕获的音频通道数量。必须为‘2’, ‘8’或‘16’。默认为‘2’.
- duplex_mode
设置DeckLink设备的双工/配置文件模式。必须为‘unset’, ‘half’, ‘full’, ‘one_sub_device_full’, ‘one_sub_device_half’, ‘two_sub_device_full’, ‘four_sub_device_half’。默认为‘unset’.
注:DeckLink SDK 11.0将双工属性替换为配置文件属性。对于DeckLink Duo 2和DeckLink Quad 2,配置文件在使用相同连接器的任何两个子设备之间共享。对于DeckLink 8K Pro,一个配置文件在所有四个子设备间共享。因此DeckLink 8K Pro支持四个配置文件。
DeckLink 8K Pro的有效配置文件模式(DeckLink SDK >= 11.0):‘one_sub_device_full’, ‘one_sub_device_half’, ‘two_sub_device_full’, ‘four_sub_device_half’
DeckLink Quad 2和DeckLink Duo 2的有效配置文件模式:‘half’, ‘full’
- timecode_format
在视频帧和元数据中包括的时间码类型。必须为‘none’, ‘rp188vitc’, ‘rp188vitc2’, ‘rp188ltc’, ‘rp188hfr’, ‘rp188any’, ‘vitc’, ‘vitc2’或‘serial’。默认为‘none’(不包括)。
为了正确支持50/60 fps时间码,对于‘rp188any’类型查询时间码的排序为HFR、VITC1、VITC2和LTC(针对 >30 fps内容)。注意,这与DeckLink API的排序略有不同,后者为HFR、VITC1、LTC、VITC2。
- video_input
设置视频输入来源。必须为‘unset’, ‘sdi’, ‘hdmi’, ‘optical_sdi’, ‘component’, ‘composite’或‘s_video’。默认为‘unset’.
- audio_input
设置音频输入来源。必须为‘unset’, ‘embedded’, ‘aes_ebu’, ‘analog’, ‘analog_xlr’, ‘analog_rca’或‘microphone’。默认为‘unset’.
- video_pts
设置视频数据包时间戳来源。必须为‘video’, ‘audio’, ‘reference’, ‘wallclock’或‘abs_wallclock’。默认为‘video’.
- audio_pts
设置音频数据包时间戳来源。必须为‘video’, ‘audio’, ‘reference’, ‘wallclock’或‘abs_wallclock’。默认为‘audio’.
- draw_bars
如果设置为‘true’,在信号丢失时绘制彩条。默认为‘true’。 此选项已废弃,请使用
signal_loss_action选项。- signal_loss_action
设置在信号丢失情况下采取的行动。接受以下值之一:
- 1, none
在信号丢失时不采取任何行动。这通常会导致黑屏。
- 2, bars
在信号丢失时绘制彩条。仅支持8位输入信号。
- 3, repeat
在信号丢失时重复最后的视频帧。
默认为‘bars’.
- queue_size
设置最大输入缓冲区大小(以字节为单位)。如果缓冲达到此值,则将丢弃传入的帧。默认为‘1073741824’.
- audio_depth
设置音频样本的位深度。必须为‘16’或‘32’。默认为‘16’.
- decklink_copyts
如果设置为true,时间戳将原样转发,而不会移除初始偏移值。默认为false.
- timestamp_align
对齐捕获开始时间(以秒为单位)。如果设置为非零值,输入帧将被丢弃,直到系统时间戳与配置值对齐。对齐差异可容忍一个帧的时长。这对于在‘N路’冗余部署的多个硬件设备之间保持输入同步非常有用。在使用此选项之前,不同硬件设备的系统时间应通过NTP或PTP协议进行同步。注意,这种方法并非完全可靠。在某些边界情况下,由于操作系统中的线程调度抖动,输入同步可能会出错,偏差可能为1帧或在更少情况下为timestamp_align秒。默认为‘0’.
- wait_for_tc (bool)
丢弃帧直到接收到带时间码的帧。有时第一个输入帧没有接收到串行时间码。如果发生这种情况,存储的流时间码将不准确。如果设置为true,输入帧将被丢弃,直到接收到带时间码的帧。选项timecode_format必须指定。默认为false.
- enable_klv(bool)
如果设置为true,从VANC中提取KLV数据并输出KLV数据包。KLV VANC数据包根据MID和PSC字段连接并聚合成一个KLV数据包。默认为false.
26.4.2 示例
- 列出输入设备:
ffmpeg -sources decklink
- 列出支持的格式:
ffmpeg -f decklink -list_formats 1 -i 'Intensity Pro'
- 捕获1080i50视频片段:
ffmpeg -format_code Hi50 -f decklink -i 'Intensity Pro' -c:a copy -c:v copy output.avi
- 捕获1080i50 10位视频片段:
ffmpeg -raw_format yuv422p10 -format_code Hi50 -f decklink -i 'UltraStudio Mini Recorder' -c:a copy -c:v copy output.avi
- 捕获1080i50、16音频通道的视频片段:
ffmpeg -channels 16 -format_code Hi50 -f decklink -i 'UltraStudio Mini Recorder' -c:a copy -c:v copy output.avi
26.5 dshow
Windows DirectShow输入设备。
当FFmpeg使用mingw-w64项目构建时启用DirectShow支持。目前仅支持音频和视频设备。
多个设备可以作为单独的输入打开,但也可以在同一输入上打开,这应会改善同步性。
输入名称应采用以下格式:
类型=名称[:类型=名称]
其中类型可以是音频或视频, 以及名称是设备的名称或替代名称。
26.5.1 选项
如果未指定选项,则使用设备的默认值。 如果设备不支持请求的选项,它将无法打开。
- video_size
设置捕获视频的尺寸。
- framerate
设置捕获视频的帧率。
- sample_rate
设置捕获音频的采样率(以Hz为单位)。
- sample_size
设置捕获音频的样本大小(以位为单位)。
- channels
设置捕获音频的频道数量。
- list_devices
如果设置为true,打印设备列表并退出。
- list_options
如果设置为true,打印选定设备的选项列表并退出。
- video_device_number
为具有相同名称的设备设置视频设备编号(从0开始,默认为0)。
- audio_device_number
为具有相同名称的设备设置音频设备编号(从0开始,默认为0)。
- pixel_format
选择DirectShow使用的像素格式。仅当视频编解码器未设置或设置为rawvideo时才可设置。
- audio_buffer_size
设置音频设备缓冲区大小(以毫秒为单位),这可以直接影响延迟,具体取决于设备。 默认为使用音频设备的默认缓冲区大小(通常是500ms的某个倍数)。 将此值设置得过低可能会降低性能。 另请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx
- video_pin_name
选择视频捕获引脚使用的名称或备用名称。
- audio_pin_name
选择音频捕获引脚使用的名称或备用名称。
- crossbar_video_input_pin_number
选择交叉开关设备的视频输入引脚号。这将被路由到交叉开关设备的视频解码器输出引脚。 注意,更改此值可能会影响未来的调用(设置新的默认值),直到系统重启。
- crossbar_audio_input_pin_number
选择交叉开关设备的音频输入引脚号。这将被路由到交叉开关设备的音频解码器输出引脚。 注意,更改此值可能会影响未来的调用(设置新的默认值),直到系统重启。
- show_video_device_dialog
如果设置为true,在捕获开始之前,会弹出一个显示对话框给最终用户,允许他们手动更改视频过滤器属性和配置。 注意,对于交叉开关设备,有时需要在此对话框中调整值以在PAL(25 fps)和NTSC(29.97 fps)输入帧率、大小、隔行等之间切换。 改变这些值可以启用不同的扫描率/帧率,避免底部出现绿色条、闪烁的扫描线等问题。 注意,对于某些设备,更改这些属性也可能会影响未来的调用(设置新的默认值),直到系统重启。
- show_audio_device_dialog
如果设置为true,在捕获开始之前,会弹出一个显示对话框给最终用户,允许他们手动更改音频过滤器属性和配置。
- show_video_crossbar_connection_dialog
如果设置为true,在捕获开始之前,会弹出一个显示对话框给最终用户,允许他们在打开视频设备时手动修改交叉开关引脚路由。
- show_audio_crossbar_connection_dialog
如果设置为true,在捕获开始之前,会弹出一个显示对话框给最终用户,允许他们在打开音频设备时手动修改交叉开关引脚路由。
- show_analog_tv_tuner_dialog
如果设置为true,在捕获开始之前,会弹出一个显示对话框给最终用户,允许他们手动修改电视频道和频率。
- show_analog_tv_tuner_audio_dialog
如果设置为true,在捕获开始之前,会弹出一个显示对话框给最终用户,允许他们手动修改电视音频(如单声道与立体声、语言A、B或C)。
- audio_device_load
从文件加载音频捕获过滤器设备,而不是通过名称搜索它。如果过滤器支持其属性的序列化,它还可能加载其他参数。 要使用此功能,必须指定音频捕获源,但它可以是任何内容甚至是虚拟的。
- audio_device_save
将当前使用的音频捕获过滤器设备及其参数(如果过滤器支持)保存到文件中。 如果存在同名文件,它将被覆盖。
- video_device_load
从文件加载视频捕获过滤器设备,而不是通过名称搜索它。如果过滤器支持其属性的序列化,它还可能加载其他参数。 要使用此功能,必须指定视频捕获源,但它可以是任何内容甚至是虚拟的。
- video_device_save
将当前使用的视频捕获过滤器设备及其参数(如果过滤器支持)保存到文件中。 如果存在同名文件,它将被覆盖。
- use_video_device_timestamps
如果设置为false,视频帧的时间戳将从挂钟时间派生,而不是使用捕获设备提供的时间戳。这可以解决捕获设备提供不可靠时间戳的问题。
26.5.2 示例
- 打印DirectShow支持的设备列表并退出:
$ ffmpeg -list_devices true -f dshow -i dummy
- 打开视频设备相机:
$ ffmpeg -f dshow -i video="Camera"
- 打开名为相机:
$ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
- 的第二个视频设备并打开音频设备 and audio device 麦克风:
$ ffmpeg -f dshow -i video="Camera":audio="Microphone"
- 打印所选设备支持的选项列表并退出:
$ ffmpeg -list_options true -f dshow -i video="Camera"
- 通过名称或备用名称指定捕获的引脚名称,并指定备用设备名称:
$ ffmpeg -f dshow -audio_pin_name "Audio Out" -video_pin_name 2 -i video=video="@device_pnp_\\?\pci#ven_1a0a&dev_6200&subsys_62021461&rev_01#4&e2c7dd6&0&00e1#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\{ca465100-deb0-4d59-818f-8c477184adf6}":audio="Microphone" - 配置交叉开关设备,指定交叉开关引脚,在启动时允许用户调整视频捕获属性:
$ ffmpeg -f dshow -show_video_device_dialog true -crossbar_video_input_pin_number 0 -crossbar_audio_input_pin_number 3 -i video="AVerMedia BDA Analog Capture":audio="AVerMedia BDA Analog Capture"
26.6 fbdev
Linux帧缓冲输入设备。
Linux帧缓冲是一种与图形硬件无关的抽象层,用于在计算机显示器上显示图形,通常在控制台上。它通过文件设备节点访问,通常为/dev/fb0.
有关更详细的信息,请阅读Linux源码树中包含的文件Documentation/fb/framebuffer.txt。
另见http://linux-fbdev.sourceforge.net/,和fbset(1)。
要从帧缓冲设备录制/dev/fb0使用ffmpeg:
ffmpeg -f fbdev -framerate 10 -i /dev/fb0 out.avi
您可以使用以下命令获取单个截图图像:
ffmpeg -f fbdev -framerate 1 -i /dev/fb0 -frames:v 1 screenshot.jpeg
26.6.1 选项
- framerate
设置帧率。默认值为25。
26.7 gdigrab
基于Win32 GDI的屏幕捕获设备。
此设备允许您在Windows上捕捉显示的区域。
输入文件名的选项包括以下元素:
desktop
或
title=窗口标题
或
hwnd=窗口句柄
第一个选项将捕捉整个桌面或桌面的固定区域。第二和第三个选项将捕捉单个窗口的内容,无论它在屏幕上的位置。
例如,使用以下方法抓取整个桌面ffmpeg:
ffmpeg -f gdigrab -framerate 6 -i desktop out.mpg
抓取640x480区域位置10,20:
ffmpeg -f gdigrab -framerate 6 -offset_x 10 -offset_y 20 -video_size vga -i desktop out.mpg
抓取名为"Calculator"的窗口内容
ffmpeg -f gdigrab -framerate 6 -i title=Calculator out.mpg
26.7.1 选项
- draw_mouse
指定是否绘制鼠标指针。使用值
0不绘制指针。默认值为1.- framerate
设置捕捉帧率。默认值为
ntsc,对应的帧率为30000/1001.- show_region
在屏幕上显示捕捉区域。
如果show_region与
1一起指定,则会在屏幕上指示捕捉区域。通过此选项,如果仅捕捉屏幕的一部分,便可以确定正在捕捉内容。注意show_region与捕捉单窗口内容不兼容。
例如:
ffmpeg -f gdigrab -show_region 1 -framerate 6 -video_size cif -offset_x 10 -offset_y 20 -i desktop out.mpg
- video_size
设置视频帧尺寸。如果选择desktop,默认情况下将捕捉整个屏幕;如果选择title=窗口标题,将捕捉整个窗口大小。
- offset_x
当使用video_size捕捉区域时,设置距离屏幕或桌面左边缘的距离。
注意,偏移计算是基于Windows主显示器的左上角。如果您的主显示器左侧有一个显示器,则需要使用负offset_x值以将区域移至该显示器。
- offset_y
当使用video_size捕捉区域时,设置距离屏幕或桌面顶部边缘的距离。
注意,偏移计算是基于Windows主显示器的左上角。如果您的主显示器顶部有一个显示器,则需要使用负offset_y值以将区域移至该显示器。
26.8 iec61883
使用libiec61883的FireWire DV/HDV输入设备。
要启用此输入设备,需要在系统上安装libiec61883、libraw1394和libavc1394。使用配置选项--enable-libiec61883以启用此设备。
iec61883捕获设备支持从通过IEEE1394(FireWire)连接的视频设备进行捕获,使用libiec61883和新的Linux FireWire堆栈(juju)。这是Linux Kernel 2.6.37及以后版本默认的DV/HDV输入方法,因为旧的FireWire堆栈已被移除。
指定要用作输入文件的FireWire端口,或者选择"auto"以自动选择第一个连接的端口。
26.8.1 选项
- dvtype
覆盖DV/HDV的自动检测。仅当自动检测不起作用或禁止使用不同设备类型时使用。将DV设备视为HDV(或反之)无法正常工作且会导致未定义行为。 支持的值为auto, dv和hdv。
- dvbuffer
设置输入数据缓冲区的最大尺寸,以帧为单位。对于DV,这是一个准确值。对于HDV,它不是帧精确的,因为HDV没有固定帧大小。
- dvguid
通过指定GUID选择捕获设备。捕获操作只会从指定设备中进行,如果未找到具有给定GUID的设备,操作将失败。这在同时连接多个设备时选择输入特别有用。 请查看/sys/bus/firewire/devices以查找GUID。
26.8.2 示例
- 抓取并显示FireWire DV/HDV设备的输入。
ffplay -f iec61883 -i auto
- 抓取并记录FireWire DV/HDV设备的输入,如果来源是HDV,则使用100000个数据包的缓冲区。
ffmpeg -f iec61883 -i auto -dvbuffer 100000 out.mpg
26.9 jack
JACK输入设备。
在配置期间启用此输入设备需安装libjack在系统上。
JACK输入设备为每个音频通道创建一个或多个JACK可写客户机,其名称为client_name:input_N,其中client_name是应用程序提供的名称,而N是标识通道的编号。 每个可写客户机会将获取的数据发送到FFmpeg输入设备。
创建一个或多个JACK可读客户机后,需要将它们连接到一个或多个JACK可写客户机。
可以使用jack_connect和jack_disconnect程序来连接或断开JACK客户机,
或通过图形界面操作,例如使用qjackctl.
要列出JACK客户机及其属性,可以调用命令jack_lsp.
以下是一个示例,展示如何捕获JACK可读客户机并使用ffmpeg.
# Create a JACK writable client with name "ffmpeg". $ ffmpeg -f jack -i ffmpeg -y out.wav # Start the sample jack_metro readable client. $ jack_metro -b 120 -d 0.2 -f 4000 # List the current JACK clients. $ jack_lsp -c system:capture_1 system:capture_2 system:playback_1 system:playback_2 ffmpeg:input_1 metro:120_bpm # Connect metro to the ffmpeg writable client. $ jack_connect metro:120_bpm ffmpeg:input_1
欲了解更多信息,请阅读:http://jackaudio.org/
26.9.1 选项
- channels
设置通道数量。默认值为2。
26.10 kmsgrab
KMS视频输入设备。
捕获与指定的CRTC或平面关联的KMS扫描输出帧缓冲区,作为可传递给其他硬件功能的DRM对象。
运行需要DRM主控或CAP_SYS_ADMIN。
如果不理解以上内容的含义,可能不需要这个功能,请考虑查看x11grab。
26.10.1 选项
- device
要捕获的DRM设备。默认值是/dev/dri/card0.
- format
帧缓冲区的像素格式。如果运行的是Linux 5.7或更高版本,可以自动检测,但对于较旧版本则需要提供。默认值是bgr0, 这是Linux控制台和Xorg X服务器使用的最常见格式。
- format_modifier
格式修饰符以信号形式输出帧。为正确导入某些API,此参数是必要的。如果运行的是Linux 5.7或更高版本,可以自动检测,否则在较旧版本中需显式提供。可能的值请参阅libdrm文档。
- crtc_id
KMS CRTC ID定义捕获源。将在给定CRTC上的第一个活动平面上采样。
- plane_id
KMS平面ID定义捕获源。如果crtc_id和plane_id均未指定,默认使用第一个活动平面。
- framerate
捕获的帧率。这与任何页面翻转或帧缓冲区更改都不同步——它仅定义采样帧缓冲区的时间间隔。采样速度快于帧缓冲更新速率会生成具有相同内容的独立帧。默认值是
30.
26.10.2 示例
- 从第一个活动平面捕获,将结果下载为普通帧并进行编码。
只有帧缓冲既是线性的又是可映射的时候,这才有效——否则结果可能会被打乱或下载失败。
ffmpeg -f kmsgrab -i - -vf 'hwdownload,format=bgr0' output.mp4
- 从CRTC ID 42以60fps捕获,将结果映射到VAAPI,转换为NV12并编码为H.264。
ffmpeg -crtc_id 42 -framerate 60 -f kmsgrab -i - -vf 'hwmap=derive_device=vaapi,scale_vaapi=w=1920:h=1080:format=nv12' -c:v h264_vaapi output.mp4
- 为了只捕获平面的一部分,可以裁剪输出——只要有已知的绝对位置和大小,就可以捕获单个窗口。例如,捕获并编码1920x1080平面的中间四分之一:
ffmpeg -f kmsgrab -i - -vf 'hwmap=derive_device=vaapi,crop=960:540:480:270,scale_vaapi=960:540:nv12' -c:v h264_vaapi output.mp4
26.11 lavfi
Libavfilter输入虚拟设备。
此输入设备从libavfilter滤镜图的开放输出端读取数据。
对于每个滤镜图开放输出,输入设备将创建一个对应的流,其映射到生成的输出。 通过选项指定滤镜图graph.
26.11.1 选项
- graph
指定用作输入的滤镜图。每个视频开放输出必须用一个独特的字符串进行标记,格式为 "outN",其中N是从0开始的数字,对应于设备生成的映射输入流。 第一个未标记的输出自动分配给 "out0" 标记,但所有其他输出需要明确指定。
可以在输出标记后附加后缀"+subcc"以创建一个额外的流,该流带有附加到该输出的隐藏字幕包(实验性,目前仅支持EIA-608/CEA-708)。 隐藏字幕流将按对应流的顺序,在所有正常流之后创建。 例如:如果有"out19+subcc","out7+subcc"并且最高到"out42",则流#43是流#7的隐藏字幕,流#44是流#19的隐藏字幕。
如果未指定,则默认为输入设备指定的文件名。
- graph_file
设置要读取的滤镜图的文件名并将其发送给其他滤镜。滤镜图的语法与选项指定的语法相同graph.
- dumpgraph
把滤镜图转储到标准错误输出。
26.11.2 示例
- 创建一个彩色视频流并用
ffplay:ffplay -f lavfi -graph "color=c=pink [out0]" dummy
- 播放。
ffplay -f lavfi color=c=pink
- 如前一个示例,但使用文件名指定图形描述,并省略"out0"标签:
ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
- 用amovie源读取文件中的音频流并用
ffplay:ffplay -f lavfi "amovie=test.wav"
- 同时读取音频流和视频流并用
ffplay:ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
- 将解码的帧转储为图像,隐藏字幕转储到RCWT备份中:
ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map v frame%08d.png -map s -c copy -f rcwt subcc.bin
26.12 libcdio
基于libcdio的音频CD输入设备。
在配置期间启用此输入设备需安装libcdio在系统上。需要配置选项--enable-libcdio.
此设备允许播放和抓取音频CD。
例如,为了使用ffmpeg复制整个音频CD/dev/sr0,可以运行命令:
ffmpeg -f libcdio -i /dev/sr0 cd.wav
26.12.1 选项
- speed
设置驱动器读取速度。默认值为0。
速度以CD-ROM速度单位指定。读取速度由libcdio
cdio_cddap_speed_set函数设置。在许多CD-ROM驱动器上,指定过大的值会使用最快速度。- paranoia_mode
设置偏执恢复模式标志。接受以下值之一:
- ‘disable’
- ‘verify’
- ‘overlap’
- ‘neverskip’
- ‘full’
默认值是‘disable’.
有关可用恢复模式的更多信息,请查阅偏执项目文档。
26.13 libdc1394
基于libdc1394和libraw1394的IIDC1394输入设备。
需要配置选项--enable-libdc1394.
26.13.1 选项
- framerate
设置帧率。默认值是
ntsc,对应帧率为30000/1001.- pixel_format
选择像素格式。默认值是
uyvy422.- video_size
设置给定的视频尺寸,例如
640x480或hd720。 默认值是qvga.
26.14 openal
OpenAL输入设备在所有具有工作OpenAL 1.1实现的系统上提供音频捕获。
在配置期间启用此输入设备需在系统上安装OpenAL头文件和库,并需要使用--enable-openal.
配置FFmpeg。--extra-cflagsOpenAL头文件和库应该由OpenAL实现提供或作为附加下载(一个SDK)。根据安装方式,可能需要通过--extra-ldflags为构建系统指定额外的标志以定位OpenAL头文件和库。
以下是OpenAL实现的一个不完整列表:
- Creative
官方的Windows实现,支持硬件加速并在支持的设备上提供软件回退。详情见http://openal.org/.
- OpenAL Soft
便携的开源(LGPL)软件实现。包括Windows、Linux、Solaris及BSD操作系统上最常用的声音API后端。详情见http://kcat.strangesoft.net/openal.html.
- 苹果
OpenAL是Core Audio的一部分,这是Mac OS X的官方音频接口。详情见http://developer.apple.com/technologies/mac/audio-and-video.html
该设备允许通过OpenAL从音频输入设备捕获音频。
您需要在提供的文件名中指定要捕获的设备名称。如果提供了空字符串,设备将自动选择默认设备。您可以使用选项list_devices.
26.14.1 选项
- channels
设置捕获音频的通道数。目前仅支持以下值1(单声道)和2(立体声)。默认值为2.
- sample_size
设置捕获音频的采样大小(以位为单位)。目前仅支持以下值8和16。默认值为16.
- sample_rate
设置捕获音频的采样率(以Hz为单位)。默认值为44.1k.
- list_devices
如果设置为true,打印设备列表并退出。默认值为false.
26.14.2 示例
打印支持的OpenAL设备列表并退出:
$ ffmpeg -list_devices true -f openal -i dummy out.ogg
从OpenAL设备捕获:DR-BT101 via PulseAudio:
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
从默认设备捕获(注意文件名为空字符串""):
$ ffmpeg -f openal -i '' out.ogg
同时从两个设备捕获,并写入两个不同的文件,
使用同一条ffmpeg命令:
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
注意:并非所有的OpenAL实现都支持多设备同时捕获 - 如果上述命令无效,请尝试最新的OpenAL Soft。
26.15 oss
开放声音系统(OSS)输入设备。
提供给输入设备的文件名是表示OSS输入设备的设备节点,通常设置为/dev/dsp.
例如,从/dev/dsp中捕获使用ffmpeg可以使用以下命令:
ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
有关OSS的更多信息,请参阅:http://manuals.opensound.com/usersguide/dsp.html
26.15.1 选项
- sample_rate
设置采样率(单位:Hz)。默认值为48000。
- channels
设置通道数。默认值为2。
26.16 pulse
PulseAudio输入设备。
要启用此输出设备,您需要使用以下配置选项构建FFmpeg:--enable-libpulse.
提供给输入设备的文件名可以是源设备或字符串"default"
要列出PulseAudio源设备及其属性,可以调用命令pactl list sources.
有关PulseAudio的更多信息,请访问http://www.pulseaudio.org.
26.16.1 选项
- server
连接到特定的PulseAudio服务器,需指定IP地址。如果未提供,则使用默认服务器。
- name
指定PulseAudio在显示活动客户端时使用的应用程序名称,默认值为
LIBAVFORMAT_IDENT字符串。- stream_name
指定PulseAudio在显示活动流时使用的流名称,默认值为"record"。
- sample_rate
指定采样率(单位:Hz),默认使用48kHz。
- channels
指定使用的通道数,默认值为2(立体声)。
- frame_size
此选项无任何作用,已被弃用。
- fragment_size
指定PulseAudio中最小缓冲段的大小(以字节为单位),这会影响音频延迟。默认情况下设置为50毫秒的数据量。
- wallclock
使用当前时间设置初始PTS。默认值为1。
26.16.2 示例
从默认设备录制流:
ffmpeg -f pulse -i default /tmp/pulse.wav
26.17 sndio
sndio输入设备。
要在配置过程中启用此输入设备,您的系统需要安装libsndio。
提供给输入设备的文件名是表示sndio输入设备的设备节点,通常设置为/dev/audio0.
例如,从/dev/audio0中捕获使用ffmpeg可以使用以下命令:
ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
26.17.1 选项
- sample_rate
设置采样率(单位:Hz)。默认值为48000。
- channels
设置通道数。默认值为2。
26.18 video4linux2, v4l2
Video4Linux2输入视频设备。
“v4l2”可以作为“video4linux2”的别名使用。
如果FFmpeg在构建时支持v4l-utils(通过使用--enable-libv4l2配置选项),可以与-use_libv4l2输入设备选项一起使用。
要捕获的设备名称是文件设备节点,通常在Linux系统中,当设备(例如USB网络摄像头)插入系统时,会自动创建这样的节点,其命名形式通常为/dev/videoN,其中N是与设备相关的编号。
Video4Linux2设备通常支持有限的一组宽x高尺寸和帧率。您可以使用-list_formats all检查Video4Linux2设备支持的格式。
某些设备,例如电视卡,支持一个或多个标准。可通过使用-list_standards all.
列出所有支持的标准。 时间戳的时间基为1微秒。根据内核版本和配置,时间戳可以从实时时钟(以Unix纪元为起点)或单调时钟(通常以开机时间为起点,不受NTP或手动更改时钟的影响)派生。选项-timestamps abs或-ts abs可用于强制转换为实时时钟。
以下是使用Video4Linux2设备的若干使用示例:ffmpeg和ffplay:
- 列出Video4Linux2设备支持的格式:
ffplay -f video4linux2 -list_formats all /dev/video0
- 捕获并显示Video4Linux2设备的输入:
ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0
- 捕获并记录Video4Linux2设备的输入,保留先前设置的帧率和尺寸:
ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video0 out.mpeg
有关Video4Linux的更多信息,请访问http://linuxtv.org/.
26.18.1 选项
- standard
设置标准。必须是支持的标准名称。要获取支持的标准列表,请使用选项list_standards。
- channel
设置输入通道号码。默认值为-1,表示使用先前选择的通道。
- video_size
设置视频帧的大小。参数必须是形式为宽度x高度或有效的尺寸缩写。
- pixel_format
选择像素格式(仅适用于原始视频输入)。
- input_format
设置首选像素格式(用于原始视频)或编解码器名称。 此选项允许在有多个可用输入格式时选择其中一个。
- framerate
设置首选的视频帧率。
- list_formats
列出可用格式(支持的像素格式、编解码器和帧尺寸),然后退出。
可用值为:
- ‘all’
显示所有可用的格式(压缩和非压缩)。
- ‘raw’
仅显示原始视频(非压缩)格式。
- ‘compressed’
仅显示压缩格式。
- list_standards
列出支持的标准并退出。
可用值为:
- ‘all’
显示所有支持的标准。
- timestamps, ts
设置抓取帧的时间戳类型。
可用值为:
- ‘default’
使用内核提供的时间戳。
- ‘abs’
使用绝对时间戳(墙上时钟)。
- ‘mono2abs’
强制从单调时间戳转换为绝对时间戳。
默认值为
default.- use_libv4l2
使用libv4l2(v4l-utils)转换函数。默认值为0。
26.19 vfwcap
VfW(视频窗口)捕获输入设备。
传入的文件名作为输入是捕获驱动程序编号,范围从0到9。您可以使用"list"作为文件名以打印驱动程序列表。任何其他文件名将被解释为设备编号0。
26.19.1 选项
- video_size
设置视频帧尺寸。
- framerate
设置抓取帧率。默认值为
ntsc, 对应的帧率为30000/1001.
26.20 x11抓取
X11视频输入设备。
要在配置期间启用此输入设备,您需要在系统上安装libxcb。它将在配置中自动检测。
此设备允许捕获X11显示的一部分区域。
作为输入的文件名具有以下语法:
[主机名]:显示编号.屏幕编号[+x偏移量,y偏移量]
主机名:显示编号.屏幕编号指定抓取屏幕的X11显示名称。主机名可以省略,默认为"localhost"。环境变量DISPLAY包含默认显示名称。
x偏移量和y偏移量指定抓取区域相对于X11屏幕左上角边界的偏移量。默认为0。
查看X11文档(例如man X)以获取更详细的信息。
使用xdpyinfo程序获取有关X11显示属性的基本信息(例如,搜索"name"或"dimensions")。
例如,从:0.0使用ffmpeg:
ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0 out.mpg
抓取位置10,20:
ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
26.20.1 选项
- select_region
指定是否使用指针图形选择抓取区域。值为
1提示用户通过点击并拖动以图形方式选择抓取区域。不拖动的单击将选择整个屏幕。零宽或零高的区域也将选择整个屏幕。此选项覆盖视频尺寸, 抓取x和抓取y选项。默认值为0.- draw_mouse
指定是否绘制鼠标指针。值为
0表示不绘制指针。默认值为1.- follow_mouse
使抓取区域跟随鼠标。参数可以为
centered或像素数像素.如果指定为"居中",抓取区域将跟随鼠标指针并保持指针在区域的中心;否则,只有当鼠标指针距离区域边缘像素(大于零)时区域才会跟随。
例如:
ffmpeg -f x11grab -follow_mouse centered -framerate 25 -video_size cif -i :0.0 out.mpg
仅当鼠标指针距离边缘100像素时跟随:
ffmpeg -f x11grab -follow_mouse 100 -framerate 25 -video_size cif -i :0.0 out.mpg
- framerate
设置抓取帧率。默认值为
ntsc, 对应的帧率为30000/1001.- show_region
在屏幕上显示抓取的区域。
如果显示区域被指定为
1,那么抓取区域将在屏幕上显示。使用此选项时,如果仅抓取屏幕的一部分,了解抓取的范围非常容易。- region_border
设置区域边框厚度(如果-show_region 1被使用)。范围为1到128,默认值为3(基于XCB的x11抓取)。
例如:
ffmpeg -f x11grab -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
使用跟随鼠标:
ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
- window_id
抓取此窗口,而不是整个屏幕。默认值为0,表示整个屏幕(根窗口)。
可以使用
xwininfo程序查找窗口的id,可能需要使用-tree和-root选项。如果窗口稍后被放大,新区域不会被记录。视频在窗口关闭、取消映射(即图标化)或缩小到视频尺寸(默认初始窗口尺寸)以下时结束。
此选项禁用了选项follow_mouse和select_region.
- video_size
设置视频帧尺寸。默认是整个桌面或窗口。
- grab_x
- grab_y
设置抓取区域的坐标。它们表示从X11窗口左上角开始的偏移量,对应于x偏移量和y偏移量参数在设备名称中。两个选项的默认值均为0。
27 输出设备
输出设备是FFmpeg中配置的元素,可以将多媒体数据写入连接到系统的输出设备。
当配置FFmpeg构建时,所有支持的输出设备默认都是启用的。你可以使用配置选项"–list-outdevs"列出所有可用的设备。
你可以使用配置选项"–disable-outdevs"禁用所有输出设备,也可以使用选项"–enable-outdev=OUTDEV"有选择地启用一个输出设备,或者使用选项"–disable-outdev=OUTDEV".
FF*工具的"-devices"选项会显示已启用的输出设备列表。
以下是当前可用输出设备的描述。
27.1 alsa
ALSA (高级Linux声音架构)输出设备。
27.1.1 示例
- 在默认ALSA设备上播放一个文件:
ffmpeg -i INPUT -f alsa default
- 在声卡1、音频设备7上播放一个文件:
ffmpeg -i INPUT -f alsa hw:1,7
27.2 AudioToolbox
AudioToolbox输出设备。
允许在OSX上的CoreAudio设备上进行原生输出。
输出文件名可以为空(或-)以指代默认的系统输出设备,也可以是一个数字,表示使用的设备索引,如通过以下方式显示:-list_devices true.
此外,可以通过索引选择音频输入设备 -audio_device_index <INDEX> ,覆盖输入文件名中给出的任何设备名称或索引。
可以通过使用-list_devices true列出所有设备名称、UID和对应的索引。
27.2.1 选项
AudioToolbox支持以下选项:
- -audio_device_index <INDEX>
通过设备索引指定音频设备。覆盖输出文件名中给出的任何内容。
27.2.2 示例
- 打印支持的设备列表并向默认设备输出正弦波:
$ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -list_devices true -
- 将正弦波输出到索引为2的设备,覆盖任何输出文件名:
$ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -audio_device_index 2 -
27.3 caca
CACA输出设备。
此输出设备允许在CACA窗口中显示视频流。每个应用程序只允许一个CACA窗口,因此一个应用程序中只能有该输出设备的一个实例。
要启用此输出设备,你需要将FFmpeg配置为--enable-libcaca。
libcaca是一个用文本输出图像的图形库。
关于libcaca的更多信息,请访问:http://caca.zoy.org/wiki/libcaca
27.3.1 选项
- window_title
设置CACA窗口标题,如果未指定,则默认为为输出设备指定的文件名。
- window_size
设置CACA窗口大小,可以是宽x高格式的字符串或视频尺寸缩写。如果未指定,默认为输入视频的大小。
- driver
设置显示驱动。
- algorithm
设置抖动算法。抖动通常是必要的,因为渲染的图片通常比可用调色板拥有更多颜色。 支持的值可以用
-list_dither algorithms.- antialias
列出。 设置抗锯齿方法。抗锯齿可以平滑渲染的图像,并避免常见的锯齿效应。 支持的值可以用
-list_dither antialiases.- charset
指定渲染文本时要使用的字符。 支持的值可以用
-list_dither charsets.- color
设置渲染文本时使用的颜色。 支持的值可以用
-list_dither colors.- list_drivers
如果设置为true,则打印可用驱动程序列表并退出。
- list_dither
列出与参数相关的可用抖动选项。 参数必须是
algorithms,antialiases,charsets,colors.
27.3.2 示例
- 以下命令展示了
ffmpeg输出为CACA窗口,强制设置其大小为80x25:ffmpeg -i INPUT -c:v rawvideo -pix_fmt rgb24 -window_size 80x25 -f caca -
- 显示可用驱动列表并退出:
ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_drivers true -
- 显示可用抖动颜色列表并退出:
ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_dither colors -
27.4 decklink
DeckLink输出设备为Blackmagic DeckLink设备提供播放功能。
要启用此输出设备,需要Blackmagic DeckLink SDK,并以适当的方式进行配置--extra-cflags和--extra-ldflags。
在Windows上, 需要通过运行IDL文件widl.
DeckLink对于支持的格式要求非常严格。像素格式始终是uyvy422,帧率、场顺序和视频大小必须通过-list_formats 1确定设备。音频采样率始终是48 kHz。
27.4.1 选项
- list_devices
如果设置为true,打印设备列表并退出。默认为false。此选项已弃用,请使用ffmpeg的
-sinks选项列出可用的输出设备。- list_formats
如果设置为true,打印支持的格式列表并退出。默认为false.
- preroll
视频的预缓冲时间,以秒为单位。默认为0.5.
- duplex_mode
设置decklink设备的双工/配置模式。必须为‘unset’, ‘half’, ‘full’, ‘one_sub_device_full’, ‘one_sub_device_half’, ‘two_sub_device_full’, ‘four_sub_device_half’。 默认为‘unset’.
注意:在DeckLink SDK 11.0中,双工属性被配置属性取代。对于DeckLink Duo 2和DeckLink Quad 2,配置在使用相同连接器的任意两个子设备之间共享。对于DeckLink 8K Pro,在所有四个子设备之间共享一个配置。因此,DeckLink 8K Pro支持四个配置。
DeckLink 8K Pro有效的配置模式(DeckLink SDK >= 11.0):‘one_sub_device_full’, ‘one_sub_device_half’, ‘two_sub_device_full’, ‘four_sub_device_half’
DeckLink Quad 2和DeckLink Duo 2的有效配置模式:‘half’, ‘full’
- timing_offset
设置输出上同步锁定的像素偏移量。 默认为‘unset’.
- link
设置输出上使用的SDI视频链路配置。 必须为‘unset’, ‘single’链路SDI,‘dual’链路SDI或‘quad’链路SDI。 默认为‘unset’.
- sqd
为四链路SDI输出启用方形划分四分屏模式。 必须为‘unset’, ‘true’或‘false’。 默认为unset.
- level_a
在输出上启用SMPTE Level A模式。 必须为‘unset’, ‘true’或‘false’。 默认为unset.
- vanc_queue_size
设置VANC数据的最大输出缓冲区大小(以字节为单位)。如果缓冲区达到此值,输出的VANC数据将会被丢弃。 默认为‘1048576’.
27.4.2 示例
- 列出输出设备:
ffmpeg -sinks decklink
- 列出支持的格式:
ffmpeg -i test.avi -f decklink -list_formats 1 'DeckLink Mini Monitor'
- 播放视频片段:
ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 'DeckLink Mini Monitor'
- 播放非标准帧率或视频尺寸的视频片段:
ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 -s 720x486 -r 24000/1001 'DeckLink Mini Monitor'
27.5 fbdev
Linux帧缓冲输出设备。
Linux帧缓冲区是一个与硬件无关的抽象层,通常用于在控制台上显示图像。 它通常通过文件设备节点访问,通常是/dev/fb0.
,更多详细信息请参见Linux内核源代码中包含的文件Documentation/fb/framebuffer.txt。
27.5.1 选项
- xoffset
- yoffset
设置左上角的x/y坐标。默认为0。
27.5.2 示例
在帧缓冲设备上播放文件/dev/fb0所需的像素格式取决于当前帧缓冲设置。
ffmpeg -re -i INPUT -c:v rawvideo -pix_fmt bgra -f fbdev /dev/fb0
另请参阅http://linux-fbdev.sourceforge.net/和 fbset(1)。
27.6 oss
OSS(开放声音系统)输出设备。
27.7 pulse
PulseAudio 输出设备。
要启用此输出设备,您需要配置 FFmpeg 使用--enable-libpulse.
有关 PulseAudio 的更多信息,请参见http://www.pulseaudio.org
27.7.1 选项
- server
连接到指定的 PulseAudio 服务器,由 IP 地址指定。 如果未提供,则使用默认服务器。
- name
指定应用程序名称,PulseAudio 在显示活动客户端时使用, 默认情况下是
LIBAVFORMAT_IDENT字符串。- stream_name
指定流名称,PulseAudio 在显示活动流时使用, 默认为指定的输出名称。
- device
指定要使用的设备。如果未提供,则使用默认设备。 可以通过命令获取输出设备列表
pactl list sinks.- buffer_size
- buffer_duration
控制 PulseAudio 缓冲区的大小和持续时间。较小的缓冲区 提供更多控制,但需要更频繁的更新。
buffer_size指定的大小以字节为单位,而buffer_duration指定的持续时间以毫秒为单位。
当同时提供两个选项时,将使用较高的值 (持续时间将根据流参数重新计算为字节)。如果 设置为0(默认值),设备将使用默认的 PulseAudio 持续时间值。缺省情况下,PulseAudio 将缓冲区持续时间 设置为大约2秒。
- prebuf
指定预缓冲大小(以字节为单位)。服务器在 缓冲区中至少有prebuf字节可用之前不会开始播放。 默认情况下,此选项初始化为与buffer_size或buffer_duration(以较大者为准)相同的值。
- minreq
指定最小请求大小(以字节为单位)。服务器从 客户端请求的最小字节数,而是等待缓冲区 足够空闲后一次请求更多字节。建议不要设置 此选项,服务器会将此值初始化为合理值。minreq bytes from the client, instead waits until the buffer is free enough to request more bytes at once. It is recommended to not set this option, which will initialize this to a value that is deemed sensible by the server.
27.7.2 示例
在默认服务器上的默认设备上播放文件:
ffmpeg -i INPUT -f pulse "stream name"
27.8 sndio
sndio 音频输出设备。
27.9 v4l2
Video4Linux2 输出设备。
27.10 xv
XV(XVideo)输出设备。
此输出设备允许在 X 窗口系统窗口中显示视频流。
27.10.1 选项
- display_name
指定硬件显示名称,该名称确定要使用的显示和 通信域。
显示名称或 DISPLAY 环境变量可以是以下格式的字符串主机名[:编号[.屏幕编号]].
主机名指定显示物理连接的主机的名称。编号指定主机上的显示服务器编号。屏幕编号指定要使用的屏幕。
如果未指定,则默认值为 DISPLAY 环境变量的值。
例如,
dual-headed:0.1将指定机器“dual-headed”上显示 0 的屏幕 1。有关显示名称格式的详细信息,请查看 X11 规范。
- window_id
设置为非零值时,设备不会创建新窗口, 而是使用提供的窗口ID。默认情况下, 此选项设置为零,设备会创建自己的窗口。
- window_size
设置创建的窗口大小,可以是以下格式的字符串宽度x高度或者视频大小缩写。如果未指定,则默认输入视频的大小。 当窗口ID已设置时忽略。
- window_x
- window_y
设置创建窗口的 X 和 Y 偏移量。默认情况下它们都设置为 0。 窗口管理器可能会忽略这些值。 当窗口ID已设置时忽略。
- window_title
设置窗口标题,如果未指定则默认设置为为输出设备指定的文件名。 当窗口ID已设置时忽略。
有关 XVideo 的更多信息,请参阅http://www.x.org/.
27.10.2 示例
- 解码、显示并同时使用
ffmpeg编码视频输入:ffmpeg -i INPUT OUTPUT -f xv display
- 解码并将输入视频显示到多个 X11 窗口:
ffmpeg -i INPUT -f xv normal -vf negate -f xv negated
28 重采样器选项
音频重采样器支持以下命名选项。
可以通过指定 -选项 值在 FFmpeg 工具中设置选项,选项=值或通过明确设置值SwrContext选项,或使用libavutil/opt.h程序化用途的 API。
- uchl, used_chlayout
设置使用的输入通道布局。默认未设置。此选项 仅用于特殊的重新映射。
- isr, in_sample_rate
设置输入采样率。默认值为 0。
- osr, out_sample_rate
设置输出采样率。默认值为 0。
- isf, in_sample_fmt
指定输入采样格式。默认设置为
none.- osf, out_sample_fmt
指定输出采样格式。默认设置为
none.- tsf, internal_sample_fmt
设置内部采样格式。默认值为
none。 如果没有明确设置,它会自动选择。- ichl, in_chlayout
- ochl, out_chlayout
设置输入/输出通道布局。
参见(ffmpeg-utils) ffmpeg-utils(1) 手册中通道布局部分以了解要求的语法。
- clev, center_mix_level
设置中央混音级别。它是以分贝表示的值,必须在 [-32,32]区间内。
- slev, surround_mix_level
设置环绕混音级别。它是以分贝表示的值,必须 在[-32,32]区间内。
- lfe_mix_level
设置将 LFE 混入非 LFE 的级别。当输入为 LFE 而输出无 LFE 时使用。它是以分贝表示的值,必须 在[-32,32]区间内。
- rmvol, rematrix_volume
设置重矩阵音量。默认值为1.0。
- rematrix_maxval
设置重矩阵输出的最大值。 这可以用于防止剪裁与防止音量减少。 值为1.0时可防止剪裁。
- flags, swr_flags
设置转换器使用的标志。默认值为0。
支持以下单独标志:
- res
强制重采样,此标志会强制使用重采样,即使输入和输出的采样率匹配。
- dither_scale
设置抖动缩放比例。默认值为1。
- dither_method
设置抖动方法。默认值为0。
支持的值:
- ‘rectangular’
选择矩形抖动
- ‘triangular’
选择三角形抖动
- ‘triangular_hp’
选择带高通的三角形抖动
- ‘lipshitz’
选择Lipshitz噪声整形抖动。
- ‘shibata’
选择Shibata噪声整形抖动。
- ‘low_shibata’
选择低Shibata噪声整形抖动。
- ‘high_shibata’
选择高Shibata噪声整形抖动。
- ‘f_weighted’
选择f加权噪声整形抖动
- ‘modified_e_weighted’
选择修改后的e加权噪声整形抖动
- ‘improved_e_weighted’
选择改进的e加权噪声整形抖动
- resampler
设置重采样引擎。默认值为swr。
支持的值:
- ‘swr’
选择本地SW重采样器;在此情况下筛选器选项precision和cheby不适用。
- ‘soxr’
选择SoX重采样器(如可用);补偿和筛选器选项filter_size、phase_shift、exact_rational、filter_type和kaiser_beta不适用。
- filter_size
仅适用于swr,设置重采样筛选器大小,默认值为32。
- phase_shift
仅适用于swr,设置重采样相移,默认值为10,必须在区间[0,30]内。
- linear_interp
启用时使用线性插值(默认)。禁用它可以在'精确比率失败时'优先保持速度而不是质量。
- exact_rational
仅适用于swr,启用时基于输入和输出采样率尝试使用精确phase_count。但如果大于
1 << phase_shift,则phase_count将设置为1 << phase_shift作为回退。默认启用。- cutoff
设置截止频率(swr: 6dB点;soxr: 0dB点)比例;必须是0到1之间的浮点值。默认值对于swr为0.97,对于soxr为0.91(以样本率44100为例,可以保留整个音频频段到20kHz)。
- precision
仅适用于soxr,将对重新采样信号计算的精度设置为位数。默认值为20(适当抖动情况下适用于16位深度)提供了SoX的“高质量”;值28提供了SoX的“超高质量”。
- cheby
仅适用于soxr,选择非(Chebyshev)通带滚降和对“非理性比率”的高精度近似。默认值为0。
- async
仅适用于swr,简单的1参数音频同步到时间戳,使用拉伸、压缩、填填和修剪。设置为1启用填填和修剪,并且较大的值表示数据可以在每秒内拉伸或压缩的最大样本数量。 默认值为0,因此未应用任何补偿以使样本与音频时间戳匹配。
- first_pts
仅适用于swr,假定第一个pts是此值。时间单位为1 / 采样率。 这样可以使流开头进行填充或修剪。默认情况下,不对首帧的预期pts进行假设,因此不会进行填充或修剪。例如,可以设置为0以用静音填充开始部分(如果音频流在视频流之后开始)或修剪具有负pts的样本(因为编码器延迟)。
- min_comp
仅适用于swr,设置时间戳和音频数据之间的最小差异(以秒为单位),以触发拉伸/压缩/填充或修剪数据使其匹配时间戳。默认情况下,拉伸/压缩/填充和修剪处于禁用状态 (min_comp =
FLT_MAX).- min_hard_comp
仅适用于swr,设置时间戳和音频数据之间的最小差异(以秒为单位),以触发添加/丢弃样本使其匹配时间戳。此选项实际上是选择硬性(修剪/填充)和软性(压缩/拉伸)补偿之间的阈值。注意,所有补偿默认通过禁用min_comp。 默认值为0.1。
- comp_duration
仅适用于swr,设置数据拉伸/压缩到匹配时间戳的持续时间(以秒为单位)。必须为非负浮点值,默认值为1.0。
- max_soft_comp
仅适用于swr,设置数据拉伸/压缩到匹配时间戳的最大因素。必须为非负浮点值,默认值为0。
- matrix_encoding
选择矩阵化立体声编码。
接受以下值:
- ‘none’
选择无
- ‘dolby’
选择杜比
- ‘dplii’
选择杜比Pro Logic II
默认值为
none.- filter_type
仅适用于swr,选择重采样筛选器类型。这仅影响重采样操作。
接受以下值:
- ‘cubic’
选择立方
- ‘blackman_nuttall’
选择Blackman Nuttall窗过滤的sinc
- ‘kaiser’
选择Kaiser窗过滤的sinc
- kaiser_beta
仅适用于swr,设置Kaiser窗beta值。必须是区间[2,16]内的双浮点值,默认值为9。
- output_sample_bits
仅适用于swr,设置用于抖动的输出样本位数。必须是区间[0,64]内的整数,默认值为0,表示未使用。
29 缩放选项
视频缩放器支持以下命名选项。
可以通过指定 -选项 值在FFmpeg工具中设置,有少量仅通过API设置的例外。
对于编程使用,可以明确在SwsContext选项中设置或通过libavutil/opt.hAPI设置。
- sws_flags
设置缩放器标志。这也用于设置缩放算法。只能选择单一算法。默认值为‘bicubic’.
接受以下值:
- ‘fast_bilinear’
选择快速双线性缩放算法。
- ‘bilinear’
选择双线性缩放算法。
- ‘bicubic’
选择双三次样条缩放算法。
- ‘experimental’
选择实验性缩放算法。
- ‘neighbor’
选择最邻近缩放算法。
- ‘area’
选择平均区域缩放算法。
- ‘bicublin’
对亮度分量选择双三次样条缩放算法,对色度分量选择双线性缩放算法。
- ‘gauss’
选择高斯缩放算法。
- ‘sinc’
选择sinc缩放算法。
- ‘lanczos’
选择Lanczos缩放算法。默认宽度(alpha)为3,可以通过设置改变
param0.- ‘spline’
选择自然双三次样条缩放算法。
- ‘print_info’
启用打印/调试日志。
- ‘accurate_rnd’
启用精确舍入。
- ‘full_chroma_int’
启用完全色度插值。
- ‘full_chroma_inp’
选择完全色度输入。
- ‘bitexact’
启用精确输出。
- srcw (仅限API)
设置源宽度。
- srch (仅限API)
设置源高度。
- dstw (仅限API)
设置目标宽度。
- dsth (仅限API)
设置目标高度。
- src_format (仅限API)
设置源像素格式(必须以整数表示)。
- dst_format (仅限API)
设置目标像素格式(必须以整数表示)。
- src_range (布尔值)
如果值设置为
1,表示源为全范围。默认值为0,表示源为有限范围。- dst_range (布尔值)
如果值设置为
1,启用目标的全范围。默认值为0,启用有限范围。- param0, param1
设置缩放算法参数。指定的值对某些缩放算法特定,对其他算法忽略。指定值为浮点数值。
- sws_dither
设置抖动算法。可以接受以下值之一。默认值为‘auto’.
- ‘auto’
自动选择
- ‘none’
无抖动
- ‘bayer’
贝尔抖动
- ‘ed’
误差扩散抖动
- ‘a_dither’
基于加法的算术抖动
- ‘x_dither’
基于异或的算术抖动(更随机/更少明显的图案化)
- alphablend
设置当输入具有Alpha但输出没有Alpha时的Alpha混合方式。 默认值为‘none’.
- ‘uniform_color’
混合到统一的背景颜色
- ‘checkerboard’
混合到棋盘格背景
- ‘none’
无混合
30 过滤器介绍
在FFmpeg中,通过libavfilter库启用过滤功能。
在libavfilter中,一个过滤器可以有多个输入和多个输出。 为了说明可能的操作类型,我们以以下的过滤图为例。
[main]
input --> split ---------------------> overlay --> output
| ^
|[tmp] [flip]|
+-----> crop --> vflip -------+
这个过滤图将输入流分成两条流,然后将其中一条流经过裁剪过滤器和垂直翻转过滤器,再将其通过覆盖过滤器与另一条流合并。使用以下命令可以实现这一点:
ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
结果是视频的上半部分在输出视频的下半部分为镜像。
同一线性链中的过滤器以逗号分隔,不同线性链的过滤器以分号分隔。在我们的例子中,crop,vflip属于一个线性链,split和overlay分别属于另一个。线性链连接的点通过用方括号括起来的名称标记。在这个例子中,split过滤器生成的两个输出被分别与标签[main]和[tmp].
第二个输出的流split,标记为[tmp],通过crop过滤器处理,该过滤器裁剪掉视频的下半部分,然后垂直翻转。该overlay过滤器将未处理的split过滤器第一个输出(标记为[main])作为输入,然后在它的下半部分叠加由crop,vflip过滤链生成的输出。
某些过滤器接受一个参数列表作为输入:这些参数在过滤器名称后通过等号指定,并通过冒号分隔。
存在所谓的源过滤器,它们没有音频/视频输入,而汇过滤器将不会有音频/视频输出。
31 graph2dot
FFmpeg目录中的graph2dot程序可以用来解析过滤图描述并生成一个相应的点语言文本表示。tools执行命令:
以查看如何使用
graph2dot -h
然后你可以将点描述传递给graph2dot.
程序(来自graphviz套件程序),以获取过滤图的图形表示。dot例如以下命令序列:
GRAPH_DESCRIPTION
echo 可以用来创建并显示一个图像,表示由 | \ tools/graph2dot -o graph.tmp && \ dot -Tpng graph.tmp -o graph.png && \ display graph.png
GRAPH_DESCRIPTION字符串描述的图。请注意,这个字符串必须是一个完整的自包含图,明确定义其输入和输出。例如,如果你的命令行为以下形式:你的
ffmpeg -i infile -vf scale=640:360 outfile
GRAPH_DESCRIPTION字符串需要是以下形式:你可能还需要设置
nullsrc,scale=640:360,nullsink
nullsrc参数并添加一个format过滤器以模拟指定的输入文件。32 过滤图描述
一个过滤图是一个连接过滤器的有向图。它可以包含循环,也可以在一对过滤器之间有多个链接。每个链接在一侧有一个输入端连接到一个接受其输入的过滤器,在另一侧有一个输出端连接到一个接受其输出的过滤器。
过滤图中的每个过滤器都是应用程序中注册的过滤器类的一个实例,该类定义了过滤器的功能以及输入和输出端的数量。
没有输入端的过滤器称为“源”,没有输出端的过滤器称为“汇”。
32.1 过滤图语法
过滤图有一种文本表示,FFmpeg中的
和-filter/-vf/-af选项可以识别这种表示,-filter_complex和ffmpeg中的-vf/-af也是。ffplay此外,程序中的avfilter_graph_parse_ptr()函数也能识别这种表示。libavfilter/avfilter.h.
一个过滤链由一系列连接的过滤器组成,每个过滤器与该序列中的前一个相连接。过滤链用一个由逗号分隔的过滤器描述列表表示。
一个过滤图由一系列过滤链组成。过滤链的序列用一个由分号分隔的过滤链描述列表表示。
一个过滤器用以下形式的字符串表示: [in_link_1]...[in_link_N]filter_name@id=arguments[out_link_1]...[out_link_M]
filter_name是过滤器类的名称,描述的过滤器是该类的一个实例,名称必须是程序中注册的过滤器类的名称,之后可选地加上“@id”。 过滤器类的名称后面可选地跟一个字符串“=arguments".
arguments是一个字符串,这个字符串包含了用于初始化过滤器实例的参数。它可以是以下两种形式之一:
- 一个‘:’分隔的key=value对的列表。
- 一个‘:’分隔的value列表。在这种情况下,假设关键字按声明顺序为选项名称。例如,
fade过滤器声明的三个选项按以下顺序——type, start_frame和nb_frames然后参数列表输入:0:30表示该值输入已分配给选项type, 0到start_frame和30到nb_frames. - 由直接值和以冒号分隔的长值以及长键=值对的混合列表。直接值必须位于键=值对之前,并遵守上述顺序约束。接下来的键=值对可以按任何首选顺序设置。
如果选项值本身是一个项目列表(例如,format过滤器需要一个像素格式列表),则列表中的项目通常用“|’.
可以使用字符“'”作为开始和结束符号对列表进行引号处理,并使用字符“\”对字符进行转义;否则当遇到下一个特殊字符(属于集合“[]=;,”)时,参数字符串将被视为结束。
在ffmpegCLI工具中实现了一种特殊语法,允许从文件加载选项值。这是通过在选项名称前添加斜杠“/”实现的,然后提供的值将被解释为加载实际值的路径。例如:
ffmpeg -i <INPUT> -vf drawtext=/text=/tmp/some_text <OUTPUT>
将从/tmp/some_text加载要绘制的文本。希望实现类似功能的API用户应该使用avfilter_graph_segment_*()函数,结合自定义IO代码。
过滤器的名称和参数可选地被链接标签列表前后修饰。链接标签允许命名链接并将其关联到过滤器的输出或输入端。前置标签in_link_1 ... in_link_N, 与过滤器输入端关联,后置标签out_link_1 ... out_link_M, 与输出端关联。
当在过滤图中发现两个具有相同名称的链接标签时,会在相应的输入和输出端之间创建链接。
如果输出端未被标记,则默认为链接到下一过滤器在过滤链中的第一个未标记输入端。例如在过滤链中
nullsrc, split[L1], [L2]overlay, nullsink
split过滤器实例有两个输出端,而overlay过滤器实例有两个输入端。split的第一个输出端标记为"L1",overlay的第一个输入端标记为"L2",而split的第二个输出端与overlay的第二个未标记输入端链接。
在一个过滤器描述中,如果第一个过滤器的输入标签未指定,将假定为"in";如果最后一个过滤器的输出标签未指定,将假定为"out"。
在一个完整的过滤链中,所有未标记的过滤器输入和输出端必须连接。一个过滤图被认为是有效的,如果所有过滤链的所有过滤器输入和输出端都已连接。
过滤图规范中的分隔令牌的前导和尾随空白(空格、制表符或换行符)将被忽略。这意味着可以使用空行和空格来改善过滤图的可读性。
例如,过滤图:
testsrc,split[L1],hflip[L2];[L1][L2] hstack
可以表示为:
testsrc, split [L1], hflip [L2]; [L1][L2] hstack
Libavfilter会在需要格式转换的地方自动插入scale过滤器。可以通过在过滤图描述中添加sws_flags=flags;为这些自动插入的缩放器指定swscale标志。
以下是过滤图语法的BNF描述:
名称 ::= sequence of alphanumeric characters and '_' 过滤器名称 ::= 名称["@"名称] 链接标签 ::= "[" 名称 "]" 链接标签列表 ::= 链接标签 [链接标签列表] 过滤器参数 ::= sequence of chars (possibly quoted) 过滤器 ::= [链接标签列表] 过滤器名称 ["=" 过滤器参数] [链接标签列表] 过滤链 ::= 过滤器 [,过滤链] 过滤图 ::= [sws_flags=标志;] 过滤链 [;过滤图]
32.2 关于过滤图转义的注释
过滤图描述的组成涉及多个级别的转义。详情请参阅(ffmpeg-utils)"引用和转义"章节,位于ffmpeg-utils(1)手册中了解使用的转义步骤的更多信息。
第一级转义影响每个过滤器选项值的内容,可能包含特殊字符:用于分隔值的字符,或者一些转义字符\'.
第二级转义影响整个过滤器描述,可能包含转义字符\'或过滤图描述使用的特殊字符[],;在命令行中指定过滤图时,最终需要对包含的命令行特殊字符进行第三级转义。
例如,考虑嵌入在
For example, consider the following string to be embedded in the drawtext过滤器描述中的以下字符串text值:
this is a 'string': may contain one, or more, special characters
此字符串包含'特殊转义字符和:特殊字符,因此需要如下方式转义:
text=this is a \'string\'\: may contain one, or more, special characters
当嵌入过滤器描述到过滤图描述时,需要第二级转义,以转义所有过滤图的特殊字符。所以之前的示例变成:
drawtext=text=this is a \\\'string\\\'\\: may contain one\, or more\, special characters
(注意除了\'转义特殊字符,,也需要转义)。
最后,当在shell命令中写入过滤图描述时需要进一步的转义,这取决于所采用的shell的转义规则。例如,假设\是特殊的并且需要使用另一个\转义,最后的字符串将变成:
-vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters"
为了避免在使用接受过滤器规格作为输入的命令行工具时进行繁琐的转义,建议避免在shell中直接包含过滤器或选项规格。
例如,在以下情况下drawtext过滤器,你可能更愿意使用textfile选项来代替text来指定要渲染的文本。
33 时间线编辑
一些过滤器支持通用的enable选项。对于支持时间线编辑的过滤器,该选项可以设置为一个表达式,该表达式在发送帧到过滤器之前被计算。如果计算结果为非零,则启用过滤器,否则帧将保持不变并发送到滤镜图中的下一个过滤器。
表达式接受以下值:
- ‘t’
以秒为单位的时间戳,若输入时间戳未知则为NAN
- ‘n’
从0开始的输入帧的序号
- ‘pos’
输入帧在文件中的位置,若未知则为NAN;不推荐使用
- ‘w’
- ‘h’
如果是视频,则为输入帧的宽度和高度
此外,这些滤镜支持一个enable命令,可用于重新定义表达式。
像任何其他过滤选项一样,enable选项遵循相同的规则。
例如,要启用一个模糊滤镜(smartblur)从10秒到3分钟,并在3秒开始启用一个curves滤镜:
smartblur = enable='between(t,10,3*60)', curves = enable='gte(t,3)' : preset=cross_process
查看ffmpeg -filters以了解哪些过滤器支持时间线。
34 使用命令在运行时更改选项
在过滤器运行时,某些选项可以通过命令更改。这些选项会在ffmpeg -h filter=<name of filter>的输出中标记为‘T’。
命令的名称是选项的名称,参数是新的值。
35 多输入滤镜的选项(framesync)
一些具有多个输入的滤镜支持一组通用选项。 这些选项只能通过名称设置,不能使用简短表示法。
- eof_action
在辅助输入上遇到EOF时要采取的操作;它接受以下值之一:
- repeat
重复最后一帧(默认)。
- endall
结束两个流。
- pass
通过主输入流。
- shortest
如果设置为1,则当最短输入结束时强制输出终止。默认值为0。
- repeatlast
如果设置为1,则强制过滤器将辅助流的最后一帧扩展到主流结束。值为0则禁用此行为。 默认值为1。
- ts_sync_mode
根据辅助输入的时间戳严格同步流;它接受以下值之一:
- default
辅助输入中与主输入帧时间戳最近或相等的帧。
- nearest
辅助输入中与主输入帧时间戳绝对最近的帧。
36 音频滤镜
当配置FFmpeg构建时,可以使用--disable-filters禁用任何现有的滤镜。
配置输出将显示构建中包含的音频滤镜。
以下是当前可用音频滤镜的描述。
36.1 aap
使用第二个音频流对第一个音频流应用仿射投影算法。
这种自适应滤波器用于根据多个输入音频样本估算未知的音频。 仿射投影算法可以在计算复杂性和收敛速度之间进行权衡。
以下是接受的选项的描述。
- order
设置滤镜顺序。
- projection
设置投影顺序。
- mu
设置滤波器mu。
- delta
设置系数以初始化内部协方差矩阵。
- out_mode
设置滤镜输出样本。它接受以下值:
- i
通过第1个输入。
- d
通过第2个输入。
- o
通过期望值、第2个输入与误差信号估算值的差异。
- n
通过输入值、第1个输入与误差信号估算值的差异。
- e
通过误差信号估算样本。
默认值是o.
- precision
设置处理样本时使用的精度。
- auto
根据其他滤镜自动选择内部样本格式。
- float
始终使用单浮点精度样本格式。
- double
始终使用双浮点精度样本格式。
36.2 acompressor
压缩器主要用于减小信号的动态范围。 尤其是现代音乐通常以较高的压缩比进行压缩以提高整体响度。 这样做是为了获得听众的最高关注,“增强”声音并赋予曲目更多“力量”。 如果信号被压缩过多,之后可能会听起来暗淡或“无生气”,或者可能开始“跳动”(这可能是一个强大的效果,但也可能完全破坏一个曲目)。 正确的压缩是达到专业声音的关键,是混音和母带制作的高艺术。 由于其复杂的设置,可能需要很长时间才能掌握这种效果的正确感觉。
压缩通过检测超过所选级别的音量threshold并按设置的因子ratio进行分配。
因此,如果阈值设置为-12dB且信号达到-6dB,则压缩比为2:1将导致信号为-9dB。
因为对信号的精确操作会引起波形失真,所以可以在时间内对减少进行调整。
这可以通过设置“攻击”和“释放”来完成。attack决定信号在超过阈值之前需要多久才能开始减少release并设置信号在低于阈值后需要多长时间才能减少减少。
短于所选攻击时间的信号将保持不变。
信号的整体减少可以在之后进行补偿,通过makeup设置。
因此将信号的峰值压缩约6dB并将化妆增益提高到此水平会导致信号比源信号响两倍。
为使压缩更柔和地进入阈值,knee可以平滑硬边缘到选定分贝的范围。
该过滤器接受以下选项:
- level_in
设置输入增益。默认值是1。范围在0.015625到64之间。
- mode
设置压缩器操作模式。可以是
upward或downward。 默认是downward.- threshold
如果流的信号上升超过该水平,它将影响增益减少。 默认值是0.125。范围在0.00097563到1之间。
- ratio
设置信号减少的比例。1:2表示如果水平上升超过4dB,减少后只上升2dB。 默认值是2。范围在1到20之间。
- attack
信号超过阈值之前需要的毫秒数量以开始增益减少。 默认值是20。范围在0.01到2000之间。
- release
信号低于阈值之前需要的毫秒数量以减少降低。 默认值是250。范围在0.01到9000之间。
- makeup
设置信号处理后要放大的数量。 默认值是1。范围从1到64。
- knee
在阈值周围曲柔硬的边缘以更柔和地进入增益减少。 默认值是2.82843。范围在1到8之间。
- link
选择
average级别在输入流的所有通道之间,或者是输入流中更响的(maximum)通道是否影响减少。 默认值是average.- detection
精确信号是否应被采用(在
peak情况下),或者应采用 RMS 信号(在rms情况下)。默认值是rms,通常更平滑。- mix
在输出中使用压缩信号的比例。 默认值是1。范围在0到1之间。
36.2.1 命令
此过滤器支持以上所有选项作为命令.
36.3 acontrast
简单的音频动态范围压缩/扩展过滤器。
该过滤器接受以下选项:
- contrast
设置对比度。默认值是33。允许范围在0到100之间。
36.4 acopy
将输入音频源不变地复制到输出。这主要用于测试目的。
36.5 acrossfade
从一个输入音频流到另一个输入音频流应用交叉渐变。 交叉渐变在第一个流的结束附近的指定持续时间内应用。
过滤器接受以下选项:
- nb_samples, ns
指定交叉渐变效果持续的采样数量。 在交叉渐变效果结束时,第一个输入音频将完全静音。默认值为44100。
- duration, d
指定交叉渐变效果的持续时间。见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分了解接受的语法。 默认情况下,持续时间由nb_samples决定。 如果设置了此选项,则使用它代替nb_samples.
- overlap, o
第一个流是否结束与第二个流的开始重叠。默认启用。
- curve1
设置第一个流交叉渐变过渡的曲线。
- curve2
设置第二个流交叉渐变过渡的曲线。
有关可用曲线类型的描述,请参见afade滤镜说明。
36.5.1 示例
- 从一个输入交叉渐变到另一个输入:
ffmpeg -i first.flac -i second.flac -filter_complex acrossfade=d=10:c1=exp:c2=exp output.flac
- 从一个输入交叉渐变到另一个输入,但没有重叠:
ffmpeg -i first.flac -i second.flac -filter_complex acrossfade=d=10:o=0:c1=exp:c2=exp output.flac
36.6 acrossover
将音频流分成多个频带。
此滤镜将音频流分成两个或更多的频率范围。 所有流重新叠加后将提供平滑的输出。
过滤器接受以下选项:
- split
设置分频频率。这些必须是正数且递增的。
- order
为每个频带分割设置滤波器阶数。这控制滤波器的衰减或传递函数的陡峭度。 可用值为:
- ‘2nd’
每八度12 dB。
- ‘4th’
每八度24 dB。
- ‘6th’
每八度36 dB。
- ‘8th’
每八度48 dB。
- ‘10th’
每八度60 dB。
- ‘12th’
每八度72 dB。
- ‘14th’
每八度84 dB。
- ‘16th’
每八度96 dB。
- ‘18th’
每八度108 dB。
- ‘20th’
每八度120 dB。
默认值为第四阶.
- level
设置输入增益级别。允许范围为0到1。默认值为1。
- gains
为每个频带设置输出增益。默认值为所有频带为1。
- precision
设置处理样本时使用的精度。
- auto
根据其他过滤器自动选择内部样本格式。
- float
始终使用单浮点精度样本格式。
- double
始终使用双浮点精度样本格式。
默认值为
auto.
36.6.1 示例
- 将输入音频流分为两个频带(低频和高频),分频频率为1500 Hz,
每个频带将位于单独的流中:
ffmpeg -i in.flac -filter_complex 'acrossover=split=1500[LOW][HIGH]' -map '[LOW]' low.wav -map '[HIGH]' high.wav
- 同上,但使用更高的滤波器阶数:
ffmpeg -i in.flac -filter_complex 'acrossover=split=1500:order=8th[LOW][HIGH]' -map '[LOW]' low.wav -map '[HIGH]' high.wav
- 同上,但也增加了一个中频频带(1500到8000的频率之间):
ffmpeg -i in.flac -filter_complex 'acrossover=split=1500 8000:order=8th[LOW][MID][HIGH]' -map '[LOW]' low.wav -map '[MID]' mid.wav -map '[HIGH]' high.wav
36.7 acrusher
减少音频位分辨率。
此滤镜是一个增强功能的比特压缩器。比特压缩器 用于可听地减少音频信号的采样位数。 这不会改变位深度,只是产生这种效果。降低位深度的材料听起来更苛刻和“数字化”。 此滤镜甚至可以舍入到连续值而不是离散位深。 另外,它还有一个直流偏差(D/C),这会导致信号的上半部分和下半部分被不同程度地压缩。 抗锯齿设置能够产生更“柔和”的压缩声音。
此滤镜的另一个特点是对数模式。 此设置从线性位距离切换为对数位距离。 结果是一个更自然的压缩器,例如不对低信号进行截止。 人耳具有对数感知,因此这种压缩更令人愉悦。 对数压缩同样可以被抗锯齿处理。
过滤器接受以下选项:
- level_in
设置输入水平。
- level_out
设置输出水平。
- bits
设置位减少量。
- mix
设置混合量。
- mode
可以是线性的:
lin也可以是对数的:log.- dc
设置直流。
- aa
设置抗锯齿。
- samples
设置采样降低量。
- lfo
启用LFO。默认禁用。
- lforange
设置LFO范围。
- lforate
设置LFO频率。
36.7.1 命令
此滤镜支持以上所有选项作为命令.
36.8 acue
延迟音频过滤,直到给定的墙钟时间戳。参见cue滤镜。
36.9 adeclick
从输入音频中移除冲击性噪声。
检测为冲击性噪声的样本将被使用自回归建模的插值样本替换。
- window, w
设置窗口大小,以毫秒为单位。允许范围为
10到100。默认值为55毫秒。 这设置了将一次处理的窗口大小。- overlap, o
设置窗口重叠量,占窗口大小的百分比。允许范围为
50到95。默认值为75百分比。 将此值设置得很高会提高冲击性噪声的去除效果,但会使整个过程变得更慢。- arorder, a
设置自回归顺序,占窗口大小的百分比。允许范围为
0到25。默认值为2百分比。 此选项还控制使用相邻良好样本插值样本的质量。- threshold, t
设置阈值。允许范围为
1到100。 默认值为2。 此选项控制将要移除的冲击性噪声的强度。 值越低,更多的样本将被检测为冲击性噪声。- burst, b
设置突发融合,占窗口大小的百分比。允许范围为
0到10。默认值为2。 如果检测为噪声的任意两个样本的间隔小于此值,则这些两个样本之间的任何样本也将被检测为噪声。- method, m
设置重叠方法。
接受以下值:
- add, a
选择重叠-加法方法。即使未插值的样本也会略有改变。
- save, s
选择重叠-保存方法。未插值的样本保持不变。
默认值为
a.
36.10 adeclip
从输入音频中移除截断样本。
检测到削波的样本将被使用自回归建模的插值样本替换。
- window, w
设置窗口大小,以毫秒为单位。允许范围是
10到100。 默认值是55毫秒。 这设置了将同时处理的窗口大小。- overlap, o
设置窗口重叠,以窗口大小的百分比表示。允许范围是
50到95。 默认值是75百分比。- arorder, a
设置自回归阶数,以窗口大小的百分比表示。允许范围是
0到25。 默认值是8百分比。此选项还控制使用邻近的良好样本进行插值样本的质量。- threshold, t
设置阈值值。允许范围是
1到100。 默认值是10。更高的值使削波检测不那么激进。- hsize, n
设置用于检测削波的直方图大小。允许范围是
100到9999。 默认值是1000。更高的值使削波检测不那么激进。- method, m
设置重叠方法。
它接受以下值:
- add, a
选择叠加加法方法。即使是未插值的样本也会略有变化。
- save, s
选择叠加保存方法。未插值的样本保持不变。
默认值是
a.
36.11 去相关
对输入音频流应用去相关处理。
此过滤器接受以下选项:
- stages
设置去相关过滤的阶段数。 允许范围是1到16。默认值是6。
- seed
设置用于设置跨通道样本延迟的随机种子。
36.12 音频延迟
延迟一个或多个音频通道。
延迟通道中的样本用静音填充。
此过滤器接受以下选项:
- delays
为每个通道设置以‘|’分隔的延迟列表,以毫秒为单位。 未使用的延迟将被默默忽略。如果给定的延迟数量少于通道数量,则所有剩余通道将不会被延迟。 如果您想延迟精确的样本数,请在数字后附加‘S’。 如果您希望改为延迟秒,则在数字后附加‘s’。
- all
对所有剩余通道使用最后设置的延迟。默认情况下禁用。 如果启用此选项,选项
delays的解释将会改变。
36.12.1 示例
- 将第一个通道延迟1.5秒,将第三个通道延迟0.5秒,并使第二个通道(以及可能存在的任何其他通道)保持不变。
adelay=1500|0|500
- 将第二个通道延迟500样本,将第三个通道延迟700样本,并使第一个通道(以及可能存在的任何其他通道)保持不变。
adelay=0|500S|700S
- 对所有通道延迟相同数量的样本:
adelay=delays=64S:all=1
36.13 去规范化
通过添加极低水平的噪声补救音频中的规范性问题。
此过滤器应放置在任何可能产生规范性问题的过滤器之前。
下面是接受参数的描述。
- level
设置添加的噪声水平,以分贝为单位。默认值是
-351。 允许范围是-451到-90。- type
设置添加的噪声类型。
- dc
添加直流信号。
- ac
添加交流信号。
- square
添加方波信号。
- pulse
添加脉冲信号。
默认值是
dc.
36.13.1 命令
此过滤器支持上述所有选项作为命令.
36.14 导数, 积分
计算音频流的导数/积分。
连续应用两个过滤器后会产生原始音频。
36.15 动态范围控制
对输入音频流应用光谱动态范围控制过滤器。
下面是接受选项的描述。
- transfer
设置传输表达式。
表达式可以包含以下常量:
- ch
当前通道号
- sn
当前样本号
- nb_channels
通道数
- t
用秒表示的时间戳
- sr
采样率
- p
当前频率的功率值,以分贝为单位
- f
当前频率,以赫兹为单位
默认值是
p.- attack
设置攻击时间,以毫秒为单位。默认值是
50毫秒。 允许范围是1到1000毫秒。- release
设置释放时间,以毫秒为单位。默认值是
100毫秒。 允许范围是5到2000毫秒。- channels
设置要过滤的通道,默认情况下会过滤
all音频流中的通道。
36.15.1 命令
此过滤器支持上述所有选项作为命令.
36.15.2 示例
- 对所有频率应用光谱压缩,阈值为-50 dB,并以1:6的比例:
adrc=transfer='if(gt(p,-50),-50+(p-(-50))/6,p)':attack=50:release=100
- 类似于上述情况,但比例为1:2,只过滤前中通道:
adrc=transfer='if(gt(p,-50),-50+(p-(-50))/2,p)':attack=50:release=100:channels=FC
- 对所有频率应用光谱噪声门,阈值为-85 dB,并具有短暂的攻击时间和短暂的释放时间:
adrc=transfer='if(lte(p,-85),p-800,p)':attack=1:release=5
- 对所有频率应用光谱扩展,阈值为-10 dB,并以1:2的比例:
adrc=transfer='if(lt(p,-10),-10+(p-(-10))*2,p)':attack=50:release=100
- 对所有频率应用限制器,最大为-60 dB,攻击时间为2毫秒,释放时间为10毫秒:
adrc=transfer='min(p,-60)':attack=2:release=10
36.16 动态均衡器
对输入音频流应用动态均衡。
下面是接受选项的描述。
- threshold
设置用于触发均衡的检测阈值。 检测阈值使用检测过滤器。 默认值是0。允许范围是0到100。
- dfrequency
设置用于触发均衡的检测过滤器的检测频率,以赫兹为单位。 默认值是1000 Hz。允许范围是2到1000000 Hz。
- dqfactor
设置用于触发均衡的检测过滤器的检测共振因子。 默认值是1。允许范围是0.001到1000。
- tfrequency
设置均衡过滤器的目标频率。 默认值是1000 Hz。允许范围是2到1000000 Hz。
- tqfactor
设置目标均衡过滤器的目标共振因子。 默认值是1。允许范围是0.001到1000。
- attack
设置检测信号需要超过检测阈值才能开始均衡的上升时间,以毫秒为单位。 默认值是20。允许范围是1到2000。
- release
设置检测信号需要低于检测阈值才能结束均衡的下降时间,以毫秒为单位。 默认值是200。允许范围是1到2000。
- ratio
设置用于提高均衡增益的比例。 默认值是1。允许范围是0到30。
- makeup
设置用于提高均衡增益的补偿偏移。 默认值是0。允许范围是0到100。
- range
设置允许的最大裁剪/增强量。默认值为50。 允许范围是1到200。
- mode
设置过滤操作的模式,可以是以下之一:
- ‘listen’
仅输出独立的检测信号。
- ‘cutbelow’
裁剪低于检测阈值的频率。
- ‘cutabove’
裁剪高于检测阈值的频率。
- ‘boostbelow’
增强低于检测阈值的频率。
- ‘boostabove’
增强高于检测阈值的频率。
默认模式是‘cutbelow’.
- dftype
设置检测滤波器的类型,可以是以下之一:
- ‘bandpass’
- ‘lowpass’
- ‘highpass’
- ‘peak’
默认类型是‘bandpass’.
- tftype
设置目标滤波器的类型,可以是以下之一:
- ‘bell’
- ‘lowshelf’
- ‘highshelf’
默认类型是‘bell’.
- auto
自动从检测滤波器中收集阈值。默认值是‘disabled’。 此选项适用于在输入音频流的特定时间段检测阈值,在此情况下选项值会在运行时更改。
可用值为:
- ‘disabled’
禁用自动收集的阈值。
- ‘off’
停止选择阈值。
- ‘on’
开始选择阈值。
- ‘adaptive’
通过计算滑动窗口熵自适应地选择阈值。
- precision
设置处理样本时使用的精度。
- auto
根据其他滤波器自动选择内部样本格式。
- float
始终使用单浮点精度样本格式。
- double
始终使用双浮点精度样本格式。
36.16.1 命令
此滤波器支持上述所有选项作为命令.
36.17 动态平滑
对输入音频流应用动态平滑。
以下是接受的选项说明。
- sensitivity
设置对频率波动的敏感程度。默认值是2。 允许范围是0到1e+06。
- basefreq
设置平滑的基础频率。默认值是22050。 允许范围是2到1e+06。
36.17.1 命令
此滤波器支持上述所有选项作为命令.
36.18 回声
对输入音频应用回声效果。
回声是反射的声音,自然发生于山间(有时是大型建筑)谈话或喊叫时;数字回声效果模仿这种行为,通常用于填充独奏乐器或人声的声音。原始信号和反射之间的时间差是delay,反射信号的响度是decay。
多个回声可以有不同的延迟和衰减。
以下是接受的参数说明。
- in_gain
设置反射信号的输入增益。默认值是
0.6.- out_gain
设置反射信号的输出增益。默认值是
0.3.- delays
设置原始信号和反射之间时间间隔(以毫秒为单位)的列表,用’|’分隔。每个
delay的允许范围是(0 - 90000.0]。 默认值是1000.- decays
设置反射信号响度的列表,用’|’分隔。 每个
decay的允许范围是(0 - 1.0]。 默认值是0.5.
36.18.1 示例
- 让听起来像有两倍的乐器实际在演奏:
aecho=0.8:0.88:60:0.4
- 如果延迟非常短,则听起来像是一个(机械)机器人在演奏音乐:
aecho=0.8:0.88:6:0.4
- 较长的延迟听起来像是在山间举行的露天音乐会:
aecho=0.8:0.9:1000:0.3
- 与以上相同,但添加了一个山:
aecho=0.8:0.9:1000|1800:0.3|0.25
36.19 强调
音频强调滤波器创建或恢复直接从LP或强调的CD中提取的材料,具有不同的滤波曲线。例如,为了将音乐存储在唱片上,信号必须首先通过滤波器进行修改,以平衡这种记录介质的缺点。 播放材料时,必须应用反向滤波器恢复频率响应的失真。
滤波器接受以下选项:
- level_in
设置输入增益。
- level_out
设置输出增益。
- mode
设置滤波模式。用于恢复材料时使用
reproduction模式,否则使用production模式。默认是reproduction模式。- type
设置滤波器类型。选择介质。可以是以下之一:
- col
选择 Columbia。
- emi
选择 EMI。
- bsi
选择 BSI (78转)。
- riaa
选择 RIAA。
- cd
选择 Compact Disc (CD)。
- 50fm
选择 50µs (FM)。
- 75fm
选择 75µs (FM)。
- 50kf
选择 50µs (FM-KF)。
- 75kf
选择 75µs (FM-KF)。
36.19.1 命令
此滤波器支持上述所有选项作为命令.
36.20 表达式评估
根据指定的表达式修改音频信号。
该滤波器接受一个或多个表达式(每个通道一个), 这些表达式被评估并用于修改相应的音频信号。
接受以下参数:
- exprs
设置为每个独立通道分隔的表达式列表。如果输入通道数大于表达式数量,则最后指定的表达式用于剩余输出通道。
- channel_layout, c
设置输出通道布局。如果未指定,通道布局由表达式数量指定。如果设置为‘same’,则默认使用相同的输入通道布局。
在每个exprs表达式中可以包含以下常量和函数:
- ch
当前表达式的通道编号
- n
从0开始的评估样本编号
- s
采样率
- t
评估样本的时间(以秒为单位)
- nb_in_channels
- nb_out_channels
输入和输出的通道数量
- val(CH)
编号为CH
注意:此滤波器较慢。为了更快处理,应使用专门的滤波器。
36.20.1 示例
- 降低音量一半:
aeval=val(ch)/2:c=same
- 反转第二通道的相位:
aeval=val(0)|-val(1)
36.21 激励器
激励器用于产生原始信号中不存在的高音。这是通过创建受限范围的信号谐波失真并将其添加到原始信号来实现的。激励器在不简单提高高频的情况下提升音频信号的上限,如均衡器会提高高频一样,从而产生更“清脆”或“明亮”的声音。
滤波器接受以下选项:
- level_in
在处理信号之前设置输入级别。 允许范围是0到64。 默认值是1。
- level_out
设置信号处理后的输出级别。 允许范围是0到64。 默认值为1。
- amount
设置添加到原始信号的谐波数量。 允许范围是0到64。 默认值为1。
- drive
设置新创建的谐波数量。 允许范围是0.1到10。 默认值为8.5。
- blend
设置新创建谐波的八度。 允许范围是-10到10。 默认值为0。
- freq
设置谐波产生的低频限制(单位Hz)。 允许范围是2000到12000 Hz。 默认值为7500 Hz。
- ceil
设置谐波产生的高频限制。 允许范围是9999到20000 Hz。 如果值低于10000 Hz,则不适用限制。
- listen
将原始信号静音,仅输出添加的谐波。 默认情况下禁用。
36.21.1 命令
该滤镜支持以上所有选项作为命令.
36.22 afade
对输入音频应用淡入/淡出效果。
以下是可接受参数的描述。
- type, t
指定效果类型,可以是
in表示淡入,或者out表示淡出。默认是in.- start_sample, ss
指定开始应用淡化效果的起始采样点数。默认值是0。
- nb_samples, ns
指定淡化效果的持续采样数。 在淡入效果结束时,输出音频的音量将与输入音频相同, 在淡出过渡结束时,输出音频将为静音。默认值为44100。
- start_time, st
指定淡化效果的开始时间。默认值是0。 该值必须以时间持续长度指定;请参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续部分以获取可接受的语法。 如果设置了该选项,则优先使用该选项,而不是start_sample.
- duration, d
指定淡化效果的持续时间。请参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续部分以获取可接受的语法。 在淡入效果结束时,输出音频的音量将与输入音频相同, 在淡出过渡结束时,输出音频将为静音。 默认情况下,持续时间由nb_samples确定。 如果设置了该选项,则优先使用该选项,而不是nb_samples.
- curve
设置淡化过渡的曲线。
可接受以下值:
- tri
选择三角形线性斜率(默认)
- qsin
选择四分之一正弦波
- hsin
选择半正弦波
- esin
选择指数正弦波
- log
选择对数
- ipar
选择倒置抛物线
- qua
选择二次方
- cub
选择立方
- squ
选择平方根
- cbr
选择立方根
- par
选择抛物线
- exp
选择指数
- iqsin
选择倒置的四分之一正弦波
- ihsin
选择倒置的半正弦波
- dese
选择双指数座椅
- desi
选择双指数S形
- losi
选择逻辑S形
- sinc
选择正弦卡尔函数
- isinc
选择倒置的正弦卡尔函数
- quat
选择四次方
- quatr
选择四次方根
- qsin2
选择平方的四分之一正弦波
- hsin2
选择平方的半正弦波
- nofade
未应用淡化
- silence
设置淡入的初始增益或淡出的最终增益。 默认值为
0.0.- unity
设置淡出的初始增益或淡入的最终增益。 默认值为
1.0.
36.22.1 命令
该滤镜支持以上所有选项作为命令.
36.22.2 示例
- 对前15秒的音频进行淡入:
afade=t=in:ss=0:d=15
- 对900秒音频的最后25秒进行淡出:
afade=t=out:st=875:d=25
36.23 afftdn
使用FFT去噪音频样本。
以下是可接受参数的描述。
- noise_reduction, nr
设置噪声减少量(单位dB),允许范围是0.01到97。 默认值是12 dB。
- noise_floor, nf
设置噪声底线(单位dB),允许范围是-80到-20。 默认值是-50 dB。
- noise_type, nt
设置噪声类型。
可接受以下值:
- white, w
选择白噪音。
- vinyl, v
选择黑胶噪音。
- shellac, s
选择贝壳噪音。
- custom, c
选择自定义噪音,定义在
bn选项中。默认值为白噪音。
- band_noise, bn
为15个频段中的每一个设置自定义带噪声配置文件。 频段由’ ’或’|’分隔。
- residual_floor, rf
设置残留底线(单位dB),允许范围是-80到-20。 默认值是-38 dB。
- track_noise, tn
启用噪声底线跟踪。默认情况下禁用。 启用后,噪声底线将自动调整。
- track_residual, tr
启用残留跟踪。默认情况下禁用。
- output_mode, om
设置输出模式。
可接受以下值:
- input, i
保持输入不变。
- output, o
仅传递去除噪声的部分。
- noise, n
仅传递噪声。
默认值是输出.
- adaptivity, ad
设置自适应因子,用于确定每个频率单元增益调整的速度。 值0表示瞬时调整,而较高值反应较慢。 允许范围是0到1。默认值为0.5.
- floor_offset, fo
设置噪声底线偏移因子。此选项用于调整应用于测量噪声底线的偏移量。 仅当启用噪声底线跟踪时有效。 允许范围是-2.0到2.0。默认值为1.0.
- noise_link, nl
设置用于多声道音频的噪声连接选项。
可接受以下值:
- none
使用未改变的通道噪声底线。
- min
使用所有通道测量的最小噪声底线。
- max
使用所有通道测量的最大噪声底线。
- average
使用所有通道测量的平均噪声底线。
默认值为最小.
- band_multiplier, bm
设置带宽倍增因子,用于定义如何在频率箱中分散频带。 允许的范围是从0.2到5。默认值是1.25.
- sample_noise, sn
切换是否从输入音频中捕获和测量噪声轮廓。
它接收以下值:
- start, begin
开始采样噪声捕获。
- stop, end
停止采样噪声捕获并测量新的噪声频带轮廓。
默认值是
none.
- gain_smooth, gs
设置增益平滑空间半径,用于平滑应用于每个频率箱的增益。 有助于减少随机音乐噪声伪影。 更高的值会增加增益的平滑效果。 允许的范围是从
0到50。 默认值是0.
36.23.1 命令
此过滤器支持上述选项中的一些作为命令.
36.23.2 示例
- 将白噪声减少10dB,并使用先前测量的噪声底限值-40dB:
afftdn=nr=10:nf=-40
- 将白噪声减少10dB,还设置初始噪声底限值为-80dB,并启用自动跟踪噪声底限值功能,使噪声底限在处理过程中逐渐改变:
afftdn=nr=10:nf=-80:tn=1
- 将噪声减少20dB,使用噪声底限值-40dB,并通过命令捕捉输入音频前0.4秒的噪声轮廓:
asendcmd=0.0 afftdn sn start,asendcmd=0.4 afftdn sn stop,afftdn=nr=20:nf=-40
36.24 afftfilt
在频率域上对采样应用任意表达式。
- real
为每个独立的通道设置频率域实数表达式,用‘|’分隔。 默认值为"re"。 如果输入通道数大于表达式数,最后指定的表达式将用于剩余的输出通道。
- imag
为每个独立的通道设置频率域虚数表达式,用‘|’分隔。 默认值为"im"。
在实部和虚部中的每个表达式可以包含以下常量和函数:
- sr
采样率
- b
当前频率箱编号
- nb
可用箱的数量
- ch
当前表达式的通道编号
- chs
通道数量
- pts
当前帧的pts
- re
当前通道当前频率箱的实部
- im
当前通道当前频率箱的虚部
- real(b, ch)
返回位于位置(箱,通道)
- imag(b, ch)
)的频率箱的实部值箱,通道)
- win_size
设置窗口大小。允许范围是从16到131072。 默认值是
4096- win_func
设置窗口函数。
它接收以下值:
- ‘rect’
- ‘bartlett’
- ‘hann, hanning’
- ‘hamming’
- ‘blackman’
- ‘welch’
- ‘flattop’
- ‘bharris’
- ‘bnuttall’
- ‘bhann’
- ‘sine’
- ‘nuttall’
- ‘lanczos’
- ‘gauss’
- ‘tukey’
- ‘dolph’
- ‘cauchy’
- ‘parzen’
- ‘poisson’
- ‘bohman’
- ‘kaiser’
默认值是
hann.- overlap
设置窗口重叠。如果设置为1,将选择推荐的窗口函数的重叠。 默认值是
0.75.
36.24.1 示例
- 在音频中几乎只保留低频:
afftfilt="'real=re * (1-clip((b/nb)*b,0,1))':imag='im * (1-clip((b/nb)*b,0,1))'"
- 应用机器人效果:
afftfilt="real='hypot(re,im)*sin(0)':imag='hypot(re,im)*cos(0)':win_size=512:overlap=0.75"
- 应用耳语效果:
afftfilt="real='hypot(re,im)*cos((random(0)*2-1)*2*3.14)':imag='hypot(re,im)*sin((random(1)*2-1)*2*3.14)':win_size=128:overlap=0.8"
- 应用相位移:
afftfilt="real=re*cos(1)-im*sin(1):imag=re*sin(1)+im*cos(1)"
36.25 afir
应用任意有限脉冲响应滤波器。
此滤波器设计用于应用长FIR滤波器,最长可达60秒。
它可以作为数字分频滤波器、房间均衡、串扰取消、波场合成、听觉化、冰阻声学、全景声和空间化的组件。
此过滤器使用第一个流之后的流作为FIR系数。 如果非第一个流只有一个通道,它将用于第一个流的所有输入通道, 否则非第一个流的通道数必须与第一个流的通道数相同。
它接受以下参数:
- dry
设置干声增益。这会设置输入增益。
- wet
设置湿声增益。这会设置最终输出增益。
- length
设置脉冲响应滤波器长度。默认值为1,即处理整个IR。
- gtype
此选项已弃用,并无任何作用。
- irnorm
设置过滤前应用于IR系数的规范化。 允许的范围是从-1到2。 IR系数根据此选项设置的计算向量规范化。 对于负值,不会计算规范化,IR系数不会被修改。 默认值是1.
- irlink
对于多通道IR,如果该选项设置为true,所有IR通道将使用所有IR通道系数的最大测量增益作为
irnorm选项设置进行规范化。 如果禁用,则每个IR通道中的所有IR系数将独立规范化。 默认值是true.- irgain
设置过滤前应用于IR系数的增益。 允许范围是0到1。在应用任何使用irnorm选项的增益后,再应用此增益。
- irfmt
设置IR流的格式。可以为
mono或input。 默认值是input.- maxir
设置脉冲响应滤波器允许的最大持续时间,以秒为单位。 默认值为30秒。允许范围是0.1到60秒。
- response
此选项已弃用,并无任何作用。
- channel
此选项已弃用,并无任何作用。
- size
此选项已弃用,并无任何作用。
- rate
此选项已弃用,并无任何作用。
- minp
设置用于卷积的最小分区大小。 默认值是8192。 允许的范围是从1到65536。 较低的值会以更高的CPU使用率为代价减少延迟。
- maxp
设置用于卷积的最大分区大小。 默认值是8192。 允许范围是从8到65536。 较低的值可能会增加CPU使用率。
- nbirs
设置输入脉冲响应流的数量,这些流可以在运行时切换。 允许范围是从1到32。默认值是1.
- ir
设置将在卷积中使用的IR流,从0开始。应始终低于
nbirs选项提供的值。 默认值是0。 此选项可以通过命令.- precision
设置运行时样本处理的精度。
- auto
根据其他过滤器自动选择内部样本格式。
- float
始终使用单精度浮点样本格式。
- double
始终使用双精度浮点样本格式。
默认值是自动。
- irload
设置加载IR流的时间,可以是
init或者access。 第一个选项在初始化时加载并准备所有IR,第二个选项在首次访问特定IR时加载。 默认值是init.
36.25.1 示例
- 使用单声道IR文件作为第二输入,对流式数据应用混响效果,完整命令示例使用ffmpeg:
ffmpeg -i input.wav -i middle_tunnel_1way_mono.wav -lavfi afir output.wav
- 针对输入立体声音频流和左右声道的两个立体声音响应文件(文件名分别为l_ir.wav和r_ir.wav)应用真实立体声处理,并设置irnorm选项值:
"pan=4C|c0=FL|c1=FL|c2=FR|c3=FR[a];amovie=l_ir.wav[LIR];amovie=r_ir.wav[RIR];[LIR][RIR]amerge[ir];[a][ir]afir=irfmt=input:irnorm=1.2,pan=stereo|FL<c0+c2|FR<c1+c3"
- 类似于上述示例,但将
irgain显式设置为估计值,并将irnorm禁用:"pan=4C|c0=FL|c1=FL|c2=FR|c3=FR[a];amovie=l_ir.wav[LIR];amovie=r_ir.wav[RIR];[LIR][RIR]amerge[ir];[a][ir]afir=irfmt=input:irgain=-5dB:irnom=-1,pan=stereo|FL<c0+c2|FR<c1+c3"
36.26 aformat
设置输入音频的输出格式约束。框架将协商最合适的格式以最大化减少转换。
接受以下参数:
- sample_fmts, f
一个用 ‘|’ 分隔的请求样本格式列表。
- sample_rates, r
一个用 ‘|’ 分隔的请求采样率列表。
- channel_layouts, cl
一个用 ‘|’ 分隔的请求通道布局列表。
参见(ffmpeg-utils)ffmpeg-utils(1)手册中的通道布局部分以了解所需语法。
如果省略某个参数,则允许所有值。
强制输出为无符号8位或有符号16位立体声。
aformat=sample_fmts=u8|s16:channel_layouts=stereo
36.27 afreqshift
对输入音频样本应用频率偏移。
过滤器接受以下选项:
- shift
指定频率偏移。允许范围是 -INT_MAX 至 INT_MAX。 默认值是0.0。
- level
设置应用于最终输出的增益。允许范围从0.0到1.0。 默认值是1.0。
- order
设置用于过滤器的阶数。允许范围是1到16。 默认值是8。
36.27.1 命令
此过滤器支持所有上述选项作为命令.
36.28 afwtdn
使用小波从输入样本中减少宽带噪声。
以下是接受的选项描述。
- sigma
设置噪声标准差,允许范围是0到1。 默认值是0。 此选项控制施加到输入样本上的降噪强度。 最常用的设置方式是使用分贝,例如 -45dB。
- levels
设置小波分解的层数。 允许范围是1到12。 默认值是10。 设置得过低会使降噪性能非常差。
- wavet
设置用于分解输入帧的小波类型。 它们按照系数数量排序,从最少到最多。 更多的系数意味着更差的过滤速度,但总体质量更高。 可用的小波包括:
- ‘sym2’
- ‘sym4’
- ‘rbior68’
- ‘deb10’
- ‘sym10’
- ‘coif5’
- ‘bl3’
- percent
设置完全降噪的百分比。允许范围是0到100%。 默认值是85%或部分降噪。
- profile
如果启用,第一个输入帧将用作噪声剖面。 如果第一个帧样本包含非噪声,性能会非常差。
- adaptive
如果启用,输入帧会被分析以检测噪声的存在。 如果高可能性检测到噪声,则输入帧配置文件将用于处理后续帧,直到检测到新的噪声帧。
- samples
设置单帧的样本数大小。允许范围是512到65536。 默认帧大小为8192个样本。
- softness
设置应用于阈值函数内部的柔性度。允许范围是0到10。 默认柔性度是1。
36.28.1 命令
过滤器支持所有上述选项作为命令.
36.29 agate
门限主要用于减少信号中更低部分的分量。这种信号处理能减少有用信号之间的干扰噪声。
通过检测信号音量低于所选水平阈值并除以用比例因子设置的值来完成门控。 噪声底部由范围设置。 由于对信号的精确操作会使波形失真,减弱信号可以随着时间慢慢进行。 此过程由设置攻击时间和释放时间.
攻击时间确定信号需低于阈值维持的时间,以开始减弱信号,释放时间设置信号需高于阈值维持的时间,以减少减弱程度。 短于选定攻击时间的信号将不受影响。
- level_in
设置过滤前的输入级别。 默认值是1。允许范围是0.015625到64。
- mode
设置操作模式。可以是
upward或者downward。 默认值是downward。 如果设置为upward模式,信号的较高部分将被放大,向上扩大动态范围。 否则,在downward模式下,信号的较低部分将被减少。- range
设置当信号低于阈值时的增益减少量。 默认值是0.06125。允许范围是0到1。 将此设置为0会禁用减少,然后过滤器表现为扩展器。
- threshold
如果信号升高超过此水平,增益减少将被释放。 默认值是0.125。允许范围是0到1。
- ratio
设置信号被减少的比例。 默认值是2。允许范围是1到9000。
- attack
设置信号需要上升到阈值以上,增益减少停止的毫秒数。 默认值是20毫秒。允许范围是0.01到9000。
- release
设置信号需要下降到阈值以下,减少程度再次增加的毫秒数。 默认值是250毫秒。允许范围是0.01到9000。
- makeup
设置处理后信号的放大值。 默认值是1。允许范围是1到64。
- knee
曲线在阈值附近形成更柔和的过渡来更平滑地进入增益减少。 默认值是2.828427125。允许范围是1到8。
- detection
选择是否使用精确信号进行检测或类似RMS的信号。 默认值是
rms。 可以是peak或者rms.- link
选择是所有通道的平均音量还是更响的通道决定减少程度。 默认值是
average。 可以是average或者maximum.
36.29.1 命令
过滤器支持所有上述选项作为命令.
36.30 aiir
应用任意无限冲击响应过滤器。
接收以下参数:
- zeros, z
设置B/分子/零点/反射系数。
- poles, p
设置A/分母/极点/梯子系数。
- gains, k
设置通道增益。
- dry_gain
设置输入增益。
- wet_gain
设置输出增益。
- format, f
设置系数格式。
- ‘ll’
级联梯形功能
- ‘sf’
模拟传递函数
- ‘tf’
数字传递函数
- ‘zp’
Z平面零点/极点,笛卡尔坐标(默认)
- ‘pr’
Z平面零点/极点,极坐标弧度
- ‘pd’
Z平面零点/极点,极坐标角度
- ‘sp’
S平面零点/极点
- process, r
设置处理类型。
- ‘d’
直接处理
- ‘s’
串行处理
- ‘p’
并行处理
- precision, e
设置过滤精度。
- ‘dbl’
双精度浮点(默认)
- ‘flt’
单精度浮点
- ‘i32’
32位整数
- ‘i16’
16位整数
- normalize, n
归一化滤波器系数,默认启用。 启用后将使直流上的幅度响应规格化为0dB。
- mix
设置输出中使用过滤信号的量。默认值为1。 范围是0到1之间。
- response
在额外的视频流中显示滤波器的频率响应,幅度(洋红色)、相位(绿色)和群延迟(黄色)。 默认禁用。
- channel
设置显示频率响应的滤波器通道。默认显示第一个通道。 当response启用时使用此选项。
- size
设置视频流大小。当response启用时使用此选项。
系数在tf和sf格式中用空格分隔,按升序排列。
系数在zp格式中用空格分隔,系数的顺序无关紧要。在zp格式中的系数是复数,包含i虚数单位。
可以为每个通道提供不同的系数和增益,在这种情况下 使用“|”分隔系数或增益。最后提供的系数将 用于所有剩余的通道。
36.30.1 示例
- 为48000 Hz采样率应用一个大约5000Hz频率的2极椭圆形陷波器:
aiir=k=1:z=7.957584807809675810E-1 -2.575128568908332300 3.674839853930788710 -2.57512875289799137 7.957586296317130880E-1:p=1 -2.86950072432325953 3.63022088054647218 -2.28075678147272232 6.361362326477423500E-1:f=tf:r=d
- 与上述相同,但使用
zp格式:aiir=k=0.79575848078096756:z=0.80918701+0.58773007i 0.80918701-0.58773007i 0.80884700+0.58784055i 0.80884700-0.58784055i:p=0.63892345+0.59951235i 0.63892345-0.59951235i 0.79582691+0.44198673i 0.79582691-0.44198673i:f=zp:r=s
- 应用3阶模拟归一化Butterworth低通滤波器,使用模拟传递函数格式:
aiir=z=1.3057 0 0 0:p=1.3057 2.3892 2.1860 1:f=sf:r=d
36.31 限制器(alimiter)
限制器用于防止输入信号超过预期的阈值。 此限制器使用前瞻技术来防止信号失真。 这意味着信号处理后会有一些延迟。请记住 产生的延迟是您设置的攻击时间。
过滤器接受以下选项:
- level_in
设置输入增益。默认值为1。
- level_out
设置输出增益。默认值为1。
- limit
不允许信号超过此级别通过限制器。默认值为1。
- attack
限制器将在此时间内(以毫秒为单位)达到其衰减水平。 默认值为5毫秒。
- release
从限制恢复到1.0的衰减水平所需的时间(以毫秒为单位)。 默认值为50毫秒。
- asc
当始终需要增益衰减时,ASC负责释放到 平均衰减水平,而不是在释放时间内达到衰减0。
- asc_level
选择ASC影响释放时间的程度。0表示释放时间几乎没有变化, 1表示更长的释放时间。
- level
自动调整输出信号电平。默认启用。 如果启用,此功能会将音频规格化到0dB。
- latency
补偿使用攻击参数设置的前瞻缓冲引入的延迟。 当流到达EOF时,也会输出前瞻缓冲中的有效音频数据。
根据选定的设置,建议将输入上采样两倍或四倍, 并使用aresample在应用此滤波器之前。
36.32 全通(allpass)
应用一个中心频率为(以Hz为单位)的两极全通滤波器frequency,带宽为width。 全通滤波器改变音频的频率与相位关系,而不改变其频率与幅度的关系。
过滤器接受以下选项:
- frequency, f
设置频率(以Hz为单位)。
- width_type, t
设置指定滤波器带宽的方法。
- h
Hz
- q
Q因子
- o
倍频程
- s
斜率
- k
kHz
- width, w
以宽度类型单位指定滤波器的带宽。
- mix, m
设置输出中使用过滤信号的量。默认值为1。 范围是0到1之间。
- channels, c
指定要过滤的通道,默认情况下会过滤所有可用通道。
- normalize, n
归一化双二阶系数,默认已禁用。 启用此选项将使直流上的幅度响应规格化为0dB。
- order, o
设置滤波器阶数,可以为1或2。默认值为2。
- transform, a
设置IIR滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- precision, r
设置过滤精度。
- auto
根据环绕滤波器自动选择采样格式。
- s16
始终使用有符号16位。
- s32
始终使用有符号32位。
- f32
始终使用浮点32位。
- f64
始终使用浮点64位。
36.32.1 命令
此过滤器支持以下命令:
- frequency, f
更改全通频率。 命令的语法是: "frequency"
- width_type, t
更改全通宽度类型。 命令的语法是: "width_type"
- width, w
更改全通宽度。 命令的语法是: "width"
- mix, m
更改全通混合比例。 命令的语法是: "mix"
36.33 循环(aloop)
循环音频样本。
过滤器接受以下选项:
- loop
设置循环次数。将该值设置为-1表示无限循环。 默认值为0。
- size
设置最大样本数。默认值为0。
- start
设置循环的第一个样本。默认值为0。
- time
设置循环开始的时间(以秒为单位)。 仅在选项start设置为
-1.
36.34 声道合并(amerge)
将两个或更多音频流合并为一个单一的多通道流。
过滤器接受以下选项:
- inputs
设置输入数量。默认是2。
如果输入的通道布局互不重叠,因此彼此兼容, 输出的通道布局将据此设置,并按需要重新排列通道。 如果输入的通道布局不兼容,输出将包含第一个输入的所有通道, 然后是第二个输入的所有通道,按顺序排列,并且输出的通道布局 将是对应于通道总数的默认值。
例如,如果第一个输入是2.1(FL+FR+LF),第二个输入 是FC+BL+BR,那么输出将是5.1,通道的顺序如下:a1, a2, b1, a3, b2, b3 (a1是第一个输入的第一个通道,b1是第二个输入的第一个通道)。
另一方面,如果两个输入都是立体声,那么输出通道将是 默认顺序:a1, a2, b1, b2,而且通道布局将被任意设置为4.0, 这可能或可能不是预期的值。
所有输入必须具有相同的采样率和格式。
如果输入的时长不同,输出将以最短的时长停止。
36.34.1 示例
- 将两个单声道文件合并为一个立体声流:
amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
- 假设 1 个视频流和 6 个音频流的多个合并input.mkv:
ffmpeg -i input.mkv -filter_complex "[0:1][0:2][0:3][0:4][0:5][0:6] amerge=inputs=6" -c:a pcm_s16le output.mkv
36.35 amix
将多个音频输入混合到单个输出。
注意此滤镜仅支持浮点样本(amerge和pan音频滤镜支持多种格式)。如果amix输入为整数样本,则aresample将自动插入以执行转换到浮点样本。
它接受以下参数:
- inputs
输入的数量。如果未指定,则默认为 2。
- duration
如何确定流结束。
- longest
最长输入的时长。(默认)
- shortest
最短输入的时长。
- first
第一个输入的时长。
- dropout_transition
重新调整音量的过渡时间,以秒为单位,当输入流结束时。默认值为 2 秒。
- weights
按空格分隔的一组数字指定每个输入音频流的权重。如果指定的权重少于输入的数量,则最后一个权重将分配给其余的输入。 每个输入的默认权重为 1。
- normalize
始终缩放输入,而不是仅仅对样本进行求和。如果禁用此选项,则此滤镜之前或之后未归一化的输入可能会导致严重的剪切。默认启用。
36.35.1 示例
- 这将混合 3 个输入音频流为一个输出,输出的时长与第一个输入相同,掉音过渡时间为 3 秒:
ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT
- 这将混合一个人声和一个音乐输入音频流为一个输出,输出的时长与最长的输入相同。音乐的权重是人声的四分之一,并且输入未经过归一化:
ffmpeg -i VOCALS -i MUSIC -filter_complex amix=inputs=2:duration=longest:dropout_transition=0:weights="1 0.25":normalize=0 OUTPUT
36.35.2 命令
此滤镜支持以下命令:
- weights
- normalize
语法与具有相同名称的选项相同。
36.36 amultiply
将第一个音频流与第二个音频流相乘,并将结果存储在输出音频流中。乘法通过将第一个流中的每个样本与第二个流中相同位置的样本相乘来完成。
通过这种元素级别的乘法,用户可以创建幅度渐变和幅度调制。
36.37 anequalizer
针对每个通道的高阶参数多段均衡器。
它接受以下参数:
- params
-
此选项字符串格式为: "cchnf=cfw=wg=gt=f| ..." 每个均衡器频段由 '|' 分隔。
- chn
设置将应用均衡的通道号。如果输入中没有该通道,则忽略该条目。
- f
设置频段的中心频率。如果输入中没有该频率,则忽略该条目。
- w
以赫兹为单位设置频段宽度。
- g
以分贝为单位设置频段增益。
- t
为频段设置滤镜类型,选项包括:
- ‘0’
Butterworth,这是默认值。
- ‘1’
Chebyshev 第一类。
- ‘2’
Chebyshev 第二类。
- curves
启用此选项后,均衡器的频率响应将在视频流中显示。
- size
设置视频流的大小。仅在启用曲线选项时有用。
- mgain
设置将要显示的最大增益。仅在启用曲线选项时有用。 将其设置为合理值,可以显示邻近频段产生的增益,其中某些频段过于接近彼此并激活时会产生更高的增益。
- fscale
设置用于在视频输出中绘制频率响应的频率刻度。 可以是线性或对数。默认值为对数。
- colors
设置将在视频流中显示的每个通道曲线的颜色。 这是由空格或 '|' 分隔的颜色名称列表。 无法识别或缺失的颜色将替换为白色。
36.37.1 示例
- 使用 Chebyshev 第一类滤镜,降低前两个通道的中心频率为 200Hz 宽度为 100Hz 的增益 10:
anequalizer=c0 f=200 w=100 g=-10 t=1|c1 f=200 w=100 g=-10 t=1
36.37.2 命令
此滤镜支持以下命令:
- change
更改现有的滤镜参数。 命令语法:fN|f=freq|w=width|g=gain"
fN是现有滤镜编号,从 0 开始,如果没有可用的此类滤镜,则返回错误。freq设置新的频率参数。width以赫兹为单位设置新的宽度参数。gain以分贝为单位设置新的增益参数。
使用 asendcmd 调用完整滤镜可能如下所示: asendcmd=c=’4.0 anequalizer change 0|f=200|w=50|g=1’,anequalizer=...
36.38 anlmdn
使用非局部均值算法减少音频样本中的宽带噪声。
通过查找具有相似上下文的其他样本来调整每个样本。上下文相似性通过比较其周围区域的补丁定义,大小为p。补丁在一个r范围内搜索。
滤镜接受以下选项:
- strength, s
设置去噪强度。允许范围为 0.00001 到 10000。默认值为 0.00001。
- patch, p
设置补丁半径时长。允许范围为 1 到 100 毫秒。 默认值为 2 毫秒。
- research, r
设置搜索半径时长。允许范围为 2 到 300 毫秒。 默认值为 6 毫秒。
- output, o
设置输出模式。
它接受以下值:
- i
传递输入不变。
- o
传递过滤掉的噪声。
- n
仅传递噪声。
默认值为o.
- smooth, m
设置平滑因子。默认值为11。允许范围从1到1000.
36.38.1 命令
该过滤器支持以上所有选项,作为命令.
36.39 anlmf, anlms
使用第二个音频流,对第一个音频流应用归一化最小均方(平方|四次方)算法。
此自适应滤波器用于通过找到与产生最小均方误差信号(期望信号(第二个输入音频流)与实际信号(第一个输入音频流)之间的差)相关的滤波器系数来模仿目标过滤器。
以下是接受的选项的描述。
- order
设置滤波器阶数。
- mu
设置滤波器的 mu。
- eps
设置滤波器的 eps。
- leakage
设置滤波器泄漏值。
- out_mode
接受以下值:
- i
传递第一个输入。
- d
传递第二个输入。
- o
传递期望信号(第二个输入)与误差信号估计值之间的差。
- n
传递输入信号(第一个输入)与误差信号估计值之间的差。
- e
传递估算的误差信号样本。
默认值为o.
- precision
设置处理样本时使用的精度。
- auto
根据其他过滤器自动选择内部样本格式。
- float
始终使用单精度浮点样本格式。
- double
始终使用双精度浮点样本格式。
36.39.1 示例
- 此过滤器的许多用途之一是降噪,输入音频将通过相同的延迟固定时间量的样本过滤。例如对于立体声音频:
asplit[a][b],[a]adelay=32S|32S[a],[b][a]anlms=order=128:leakage=0.0005:mu=.5:out_mode=o
36.39.2 命令
该过滤器支持与选项相同的命令,但不包括选项order.
36.40 anull
将音频源未改变地传递到输出。
36.41 apad
用静音填充音频流的末尾。
这可以与ffmpeg -shortest一起使用,以将音频流延伸到与视频流相同的长度。
以下是接受的选项的描述。
- packet_size
设置静音包大小。默认值为 4096。
- pad_len
设置要添加到末尾的静音样本数量。在达到此值后,流会终止。此选项与whole_len.
- whole_len
设置输出音频流中的最小总样本数。如果该值比输入音频长度长,则会在末尾添加静音,直到达到此值为止。此选项与pad_len.
- pad_dur
指定要添加的静音样本的持续时间。请参见(ffmpeg-utils)在 ffmpeg-utils(1) 手册的时间持续时间部分获取接受的语法。仅在设置为非负值时使用。
- whole_dur
指定输出音频流中的最小总持续时间。请参见(ffmpeg-utils)在 ffmpeg-utils(1) 手册的时间持续时间部分获取接受的语法。仅在设置为非负值时使用。如果该值比输入音频长度长,则会在末尾添加静音,直到达到此值为止。此选项与pad_dur
如果pad_len也没有设置,过滤器将无限期地向输入流末尾添加静音。whole_len nor pad_dur nor whole_dur option is set, the filter will add silence to the end of the input stream indefinitely.
请注意,对于 ffmpeg 4.4 及更早版本,零pad_dur或whole_dur也会导致过滤器无限制地添加静音。
36.41.1 示例
- 在输入末尾添加 1024 个静音样本:
apad=pad_len=1024
- 确保音频输出至少包含 10000 个样本,如果需要则用静音填充输入:
apad=whole_len=10000
- 使用
ffmpeg将音频输入用静音填充,从而视频流将始终缩短,并在输出文件中转码直到结束,使用shortest选项:ffmpeg -i VIDEO -i AUDIO -filter_complex "[1:0]apad" -shortest OUTPUT
36.42 aphaser
为输入音频添加移相效果。
移相器过滤器在频率谱中创建一系列峰值和谷值。这些峰值和谷值的位置会随着时间调制,从而产生一种扫荡效果。
以下是接受的参数描述。
- in_gain
设置输入增益。默认值为 0.4。
- out_gain
设置输出增益。默认值为 0.74。
- delay
设置延迟(以毫秒为单位)。默认值为 3.0。
- decay
设置衰减。默认值为 0.4。
- speed
设置调制速度(以 Hz 为单位)。默认值为 0.5。
- type
设置调制类型。默认值为三角形。
接受以下值:
- ‘triangular, t’
- ‘sinusoidal, s’
36.43 aphaseshift
对输入音频样本应用相移。
过滤器接受以下选项:
- shift
指定相移值。允许范围是 -1.0 到 1.0。默认值为 0.0。
- level
设置应用于最终输出的输出增益。允许范围是 0.0 到 1.0。默认值为 1.0。
- order
设置用于过滤的滤波器阶数。允许范围是 1 到 16。默认值为 8。
36.43.1 命令
该过滤器支持上述所有选项作为命令.
36.44 apsnr
测量音频峰值信噪比。
此过滤器接受两个音频流作为输入,并输出第一个音频流。 结果以 dB 每通道在任一输入末端显示。
36.45 apsyclip
对输入音频流应用心理声学剪辑器。
过滤器接受以下选项:
- level_in
设置输入增益。默认值为 1。范围是 [0.015625 - 64]。
- level_out
设置输出增益。默认值为 1。范围是 [0.015625 - 64]。
- clip
设置剪辑启动值。默认值为 0dBFS 或 1。
- diff
仅输出差异样本,便于听到引入的失真。 默认情况下禁用。
- adaptive
设置应用的自适应失真的强度。默认值为 0.5。 允许范围为 0 到 1。
- iterations
设置心理声学剪辑器的迭代次数。 允许范围是 1 到 20。默认值为 10。
- level
自动调整输出信号音量。默认情况下禁用。 如果启用,这将使音频恢复到 0dBFS。
36.45.1 命令
该过滤器支持上述所有选项作为命令.
36.46 apulsator
音频脉冲器介于自动声相和颤音之间。 但它也可以制作有趣的立体声效果。脉冲器基于 LFO(低频振荡器) 使用不同的波形和移位的相位,改变左右声道的音量。 该过滤器可以定义左右声道之间的偏移量。偏移量为 0 表示两个 LFO 形状彼此匹配。左右声道的变化是相等的 - 常规颤音。偏移量达到 50% 表示右声道的形状正好在相位上发生了移位(或退后了约一半的频率)- 脉冲器作为 自动声相器运行。当偏移量为 1 时,两个曲线再次匹配。从中间( 0.5 开始)设置偏移量越接近 1,信号从左移到右扬声器的速度越 快。
过滤器接受以下选项:
- level_in
设置输入增益。默认值为 1。范围是 [0.015625 - 64]。
- level_out
设置输出增益。默认值为 1。范围是 [0.015625 - 64]。
- mode
设置 LFO 将使用的波形形状。可以是:正弦、三角形、方波、 上锯齿波(sawup)或下锯齿波(sawdown)。默认值为正弦。
- amount
设置调制。定义 LFO 对原始信号的影响程度。
- offset_l
设置左声道偏移量。默认值为0,允许范围是[0 - 1]。
- offset_r
设置右声道偏移量。默认值为0.5,允许范围是[0 - 1]。
- width
设置脉宽。默认值为1,允许范围是[0 - 2]。
- timing
设置可能的定时模式。可以是bpm、ms或hz之一。默认值是hz。
- bpm
设置bpm。默认值是120,允许范围是[30 - 300]。仅当定时模式设置为bpm时使用。
- ms
设置毫秒(ms)。默认值是500,允许范围是[10 - 2000]。仅当定时模式设置为ms时使用。
- hz
设置频率(Hz)。默认值是2,允许范围是[0.01 - 100]。仅当定时模式设置为hz时使用。
36.47 音频重采样
使用libswresample库将输入音频重采样到指定参数。如果未指定参数,滤镜将自动在输入和输出之间转换。
该滤镜还可以拉伸/压缩音频数据以匹配时间戳,或通过插入静音/剪除音频来匹配时间戳,可以使用两者的组合或不使用任何一种方式。
滤镜接受以下语法 [采样率:]重采样器选项,其中采样率表示采样率,重采样器选项是一个选项列表,键=值对由":"分隔。参见ffmpeg-resampler手册中“重采样器选项”章节了解支持选项的完整列表。
36.47.1 示例
- 将输入音频重采样为44100Hz:
aresample=44100
- 根据给定时间戳拉伸/压缩样本,最大补偿为每秒1000样本:
aresample=async=1000
36.48 音频反转
反转音频片段。
警告:此滤镜需要内存来缓冲整个片段,因此建议进行剪辑。
36.48.1 示例
- 取片段的前5秒,反转它。
atrim=end=5,areverse
36.49 自适应滤波器
使用第二个音频流对第一个音频流应用递归最小二乘(RLS)算法。
这种自适应滤波器用于通过递归找到滤波器系数,以最小化误差信号(目标音频流2与实际信号音频流1之间差异)的加权线性最小二乘代价函数。
以下是接受的选项描述。
- order
设置滤波器阶数。
- lambda
设置遗忘因子。
- delta
设置初始化内部协方差矩阵的系数。
- out_mode
设置滤波器输出样本。接受以下值:
- i
传递第一个输入。
- d
传递第二个输入。
- o
传递目标音频流2与误差信号估计之间的差值。
- n
传递输入音频流1与误差信号估计之间的差值。
- e
传递估算的误差信号样本。
默认值为o.
- precision
设置处理样本时使用的精度。
- auto
根据其他滤镜自动选择内部样本格式。
- float
始终使用单浮点精度样本格式。
- double
始终使用双浮点精度样本格式。
36.50 噪音抑制
使用循环神经网络降低语音噪音。
此滤镜接受以下选项:
- model, m
设置要加载的训练模型文件。此选项是必需的。
- mix
设置滤波样本混入最终输出的比例。 允许范围是-1到1。默认值为1。 负值有特殊意义,它们指定过滤噪音保留在最终输出中的比例。 将此选项设置为-1可听到从输入信号中移除的实际噪音。
36.50.1 命令
此滤镜支持所有上述选项作为命令.
36.51 信噪比测量
测量音频信号与失真比。
此滤镜接受两个音频流作为输入,并输出第一个音频流。 结果以每个频道的分贝表示,测量于任意输入结束时。
36.52 设置输出音框样本数
设置每个输出音频帧的样本数。
最后一个输出包可能包含不同数量的样本,因为滤镜将在输入音频信号结束时刷新所有剩余样本。
滤镜支持以下选项:
- nb_out_samples, n
设置每个输出音频帧的帧数。此数量表示样本数per each channel。 默认值为1024。
- pad, p
如果设置为1,滤镜将填充最后的音频帧,使其长度与前一帧长度一致。默认值为1。
例如,设置每帧样本数为1234并禁用最后一帧的填充:
asetnsamples=n=1234:p=0
36.53 设置采样率
在不改变PCM数据的情况下设置采样率。 这将导致速度和音调的变化。
滤镜接受以下选项:
- sample_rate, r
设置输出采样率。默认值为44100Hz。
36.54 显示信息
为每个输入音频帧显示一行包含各种信息。 输入音频未被修改。
显示的行包含以下格式的键/值对序列键:值.
输出中显示以下值:
- n
输入帧的(顺序)编号,从0开始计数。
- pts
输入帧的展示时间戳,以时基单位表示;时基取决于滤镜输入端,通常为1/采样率.
- pts_time
输入帧的展示时间戳,以秒为单位。
- fmt
样本格式。
- chlayout
频道布局。
- rate
音频帧的采样率。
- nb_samples
帧中样本数(每频道)。
- checksum
音频数据的Adler-32校验和(以十六进制打印)。对于平面音频,数据被视为所有数据平面拼接在一起。
- plane_checksums
每个数据平面的Adler-32校验和列表。
36.55 无量纲信噪比测量
测量音频可缩放无量纲信号与失真比。
此滤镜接受两个音频流作为输入,并输出第一个音频流。 结果以每个频道的分贝表示,测量于任意输入结束时。
36.56 软剪切
应用音频软剪切。
软剪切是一种失真效果,信号的振幅在一个平滑曲线上饱和,而不是硬剪切那样的突然形状。
此滤镜接受以下选项:
- type
设置软剪切类型。
接受以下值:
- hard
- tanh
- atan
- cubic
- exp
- alg
- quintic
- sin
- erf
- threshold
设置开始剪切的阈值。默认值为0dB或1。
- output
设置对输出应用的增益。默认值为0dB或1。
- param
设置控制S型函数的附加参数。
- oversample
设置过采样因子。
36.56.1 命令
此过滤器支持上述所有选项为命令.
36.57 频谱统计
显示音频通道的频域统计信息。 统计信息会被计算并存储为每个音频通道和每帧音频的元数据。
它接受以下选项:
- win_size
设置窗口长度(以样本为单位)。默认值为2048。 允许范围为32到65536。
- win_func
设置窗口函数。
它接受以下值:
- ‘rect’
- ‘bartlett’
- ‘hann, hanning’
- ‘hamming’
- ‘blackman’
- ‘welch’
- ‘flattop’
- ‘bharris’
- ‘bnuttall’
- ‘bhann’
- ‘sine’
- ‘nuttall’
- ‘lanczos’
- ‘gauss’
- ‘tukey’
- ‘dolph’
- ‘cauchy’
- ‘parzen’
- ‘poisson’
- ‘bohman’
- ‘kaiser’
默认是
hann.- overlap
设置窗口重叠。允许范围为
0到1。默认值是0.5.- measure
选择需要测量的参数。这些元数据键可以 用作标志,默认值是all,即测量所有参数。none禁用所有测量。
以下是每个元数据键的列表:
- mean
- variance
- centroid
- spread
- skewness
- kurtosis
- entropy
- flatness
- crest
- flux
- slope
- decrease
- rolloff
36.58 自动语音识别
自动语音识别
此过滤器使用PocketSphinx进行语音识别。要启用
此过滤器的编译,需要将FFmpeg配置为--enable-pocketsphinx.
它接受以下选项:
- rate
设置输入音频的采样率。默认为
16000。 这需要与语音模型匹配,否则会得到较差的结果。- hmm
设置包含声学模型文件的字典。
- dict
设置发音字典。
- lm
设置语言模型文件。
- lmctl
设置语言模型集。
- lmname
设置要使用的语言模型。
- logfn
设置日志消息的输出。
过滤器将识别的语音导出为帧元数据lavfi.asr.text.
36.59 音频统计
显示音频通道的时域统计信息。 统计会为每个音频通道计算和显示, 如适用,还会给出一个总体数值。
它接受以下选项:
- length
短窗口长度(以秒为单位),用于测量峰值和低谷的RMS。 默认是
0.05(50毫秒)。允许的范围是[0 - 10].- metadata
-
设置元数据注入。所有元数据键的前缀为
lavfi.astats.X, 其中X是从1开始的通道号或字符串Overall。默认是 禁用。每个通道可用的键是:Bit_depth(位深度) Crest_factor(波峰因数) DC_offset(直流偏移) Dynamic_range(动态范围) Entropy(熵) Flat_factor(平坦因数) Max_difference(最大差值) Max_level(最大电平) Mean_difference(平均差值) Min_difference(最小差值) Min_level(最小电平) Noise_floor(噪声底层) Noise_floor_count(噪声底层数量) Number_of_Infs(无穷值数量) Number_of_NaNs(非数值数量) Number_of_denormals(非规范值数量) Peak_count(峰值数量) Abs_Peak_count(绝对峰值数量) Peak_level(峰值电平) RMS_difference(RMS差值) RMS_peak(RMS峰值) RMS_trough(RMS低谷) Zero_crossings(过零点数量) Zero_crossings_rate(过零点速率)
以及对于
Overall: Bit_depth(位深度) DC_offset(直流偏移) Entropy(熵) Flat_factor(平坦因数) Max_difference(最大差值) Max_level(最大电平) Mean_difference(平均差值) Min_difference(最小差值) Min_level(最小电平) Noise_floor(噪声底层) Noise_floor_count(噪声底层数量) Number_of_Infs(无穷值数量) Number_of_NaNs(非数值数量) Number_of_denormals(非规范值数量) Number_of_samples(样本数量) Peak_count(峰值数量) Abs_Peak_count(绝对峰值数量) Peak_level(峰值电平) RMS_difference(RMS差值) RMS_level(RMS电平) RMS_peak(RMS峰值) RMS_trough(RMS低谷)例如,完整的键看起来像
lavfi.astats.1.DC_offset或lavfi.astats.Overall.Peak_count.下面是这些键的说明。
- reset
设置累计统计值在重置之前计算的帧数量。默认是禁用。
- measure_perchannel
选择按通道测量的参数。这些元数据键可以 用作标志,默认值是all,即测量所有参数。none禁用所有按通道测量。
- measure_overall
选择总体测量的参数。这些元数据键可以 用作标志,默认值是all,即测量所有参数。none禁用所有总体测量。
以下是测量键的描述:
- none
无措施
- all
所有措施
- Bit_depth
音频的总体位深度,即每个样本使用的位数
- Crest_factor
峰值与RMS(均方根)水平的标准比率(注:不是以分贝为单位)
- DC_offset
从零点的平均振幅偏移
- Dynamic_range
以分贝测量的音频动态范围
- Entropy
在整个音频中的熵测量,白噪声的熵值通常接近1.0
- Flat_factor
信号在其峰值水平(如:最小水平或最大水平)
- Max_difference
两个连续样本之间的最大差异
- Max_level
最大样本水平
- Mean_difference
两个连续样本之间差异的平均值,即每两个连续样本之差的平均值
- Min_difference
两个连续样本之间的最小差异
- Min_level
最小样本水平
- Noise_floor
在短时间窗内以dBFS测量的最低局部峰值
- Noise_floor_count
信号达到以下水平的次数(不是样本数量):噪声底
- Number_of_Infs
具有无限值的样本数量
- Number_of_NaNs
具有NaN(非数字)值的样本数量
- Number_of_denormals
具有次正常值的样本数量
- Number_of_samples
样本总数
- Peak_count
信号达到以下水平的次数(不是样本数量):最小水平或最大水平
- Abs_Peak_count
信号的绝对样本值达到以下最大绝对值水平的次数:最小水平和最大水平
- Peak_level
以dBFS测量的标准峰值水平
- RMS_difference
两个连续样本之间的均方差
- RMS_level
以dBFS测量的标准RMS水平
- RMS_peak
- RMS_trough
在短时间窗内测量的RMS水平的峰值和谷值,以dBFS表示
- Zero crossings
波形穿越零水平轴的点数
- Zero crossings rate
零交叉的率和音频样本数量
36.60 低音增强器
增强超低音频率。
过滤器接受以下选项:
- dry
设置干增益,保持原始信号的比例。允许范围为0到1。默认值为1.0。
- wet
设置湿增益,保留过滤后信号的比例。允许范围为0到1。默认值为1.0。
- boost
设置最大增强因子。允许范围为1到12。默认值为2。
- decay
设置延迟线衰减增益值。允许范围为0到1。默认值为0.0。
- feedback
设置延迟线反馈增益值。允许范围为0到1。默认值为0.9。
- cutoff
设置截止频率,单位为赫兹。允许范围为50到900。默认值为100。
- slope
设置截止频率的坡度量。允许范围为0.0001到1。默认值为0.5。
- delay
设置延迟。允许范围为1到100。默认值为20。
- channels
设置要处理的通道。默认值为所有可用通道。
36.60.1 命令
此过滤器支持以上所有选项作为命令.
36.61 超低音切割器
切割超低音频率。
此过滤器允许设置自定义的、更陡峭的滚降比高通滤波器更陡,从而能够更大程度衰减停止带的频率内容。
过滤器接受以下选项:
- cutoff
设置截止频率,单位为赫兹。允许范围为2到200。默认值为20。
- order
设置过滤器阶次。可用值为3到20。默认值为10。
- level
设置输入增益水平。允许范围为0到1。默认值为1。
36.61.1 命令
此过滤器支持以上所有选项作为命令.
36.62 超高频切割器
切割超高频频率。
过滤器接受以下选项:
- cutoff
设置截止频率,单位为赫兹。允许范围为20000到192000。默认值为20000。
- order
设置过滤器阶次。可用值为3到20。默认值为10。
- level
设置输入增益水平。允许范围为0到1。默认值为1。
36.62.1 命令
此过滤器支持以上所有选项作为命令.
36.63 带通过滤器
应用高阶巴特沃斯带通滤波器。
过滤器接受以下选项:
- centerf
设置中心频率,单位为赫兹。允许范围为2到999999。默认值为1000。
- order
设置过滤器阶次。可用值为4到20。默认值为4。
- qfactor
设置Q因子。允许范围为0.01到100。默认值为1。
- level
设置输入增益水平。允许范围为0到2。默认值为1。
36.63.1 命令
此过滤器支持以上所有选项作为命令.
36.64 带阻过滤器
应用高阶巴特沃斯带阻滤波器。
过滤器接受以下选项:
- centerf
设置中心频率,单位为赫兹。允许范围为2到999999。默认值为1000。
- order
设置过滤器阶次。可用值为4到20。默认值为4。
- qfactor
设置Q因子。允许范围为0.01到100。默认值为1。
- level
设置输入增益水平。允许范围为0到2。默认值为1。
36.64.1 命令
此过滤器支持以上所有选项作为命令.
36.65 音频节奏调整
调整音频节奏。
过滤器只接受一个参数,即音频节奏。如果未指定,过滤器将假设默认的1.0节奏范围。节奏必须在[0.5, 100.0]范围内。
请注意,节奏大于2时会跳过一些样本,而不是将其融合。如果这种情况是个问题,总是可以通过串联多个atempo实例实现所需的目标节奏。
36.65.1 示例
- 将音频减速至80%节奏:
atempo=0.8
- 将音频提速至300%节奏:
atempo=3
- 通过串联两个atempo实例将音频提速至300%节奏:
atempo=sqrt(3),atempo=sqrt(3)
36.65.2 命令
该滤镜支持以下命令:
- tempo
更改滤镜节奏缩放因子。 命令语法为:"节奏"
36.66 倾斜
对音频流应用频谱倾斜滤镜。
该滤镜可针对任何指定的频率范围应用任意频谱滚降斜率。
该滤镜接受以下选项:
- freq
设置倾斜的中心频率(单位:Hz)。默认值为10000 Hz。
- slope
设置倾斜的斜率方向。默认值为0。允许范围为-1到1。
- width
设置倾斜的宽度。默认值为1000。允许范围为100到10000。
- order
设置倾斜滤镜的阶数。
- level
设置输入音量级别。允许范围为0到4。 默认值为1。
36.66.1 命令
该滤镜支持以上所有选项作为命令.
36.67 裁剪
裁剪输入,以使输出仅包含输入的一个连续子部分。
它接受以下参数:
- start
要保留部分的起始时间戳(单位:秒)。即音频 样本的时间戳开始将成为输出的第一个样本。
- end
指定将被丢弃的第一个音频样本的时间, 即前一个样本的时间戳结束将成为 输出的最后一个样本。
- start_pts
与开始相同,但此选项以样本而不是秒设置起始时间戳。
- end_pts
与结束相同,但此选项以样本而不是秒设置结束时间戳。
- duration
输出的最大持续时间(单位:秒)。
- start_sample
应输出的第一个样本编号。
- end_sample
应丢弃的第一个样本编号。
start, end, 和duration表示为时间 duration规格;请参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分.
请注意,前两组开始/结束选项与duration选项查看的是帧时间戳,而_sample选项只是简单地计数通过滤镜的样本。 因此,start/end_pts和start/end_sample在时间戳错误、不准确或未从零开始时会产生不同的结果。 此外请注意,此滤镜不修改时间戳。 如果希望输出时间戳从零开始,请在atrim滤镜之后插入asetpts滤镜。
如果设置了多个开始或结束选项,此滤镜会尝试贪婪地保留至少符合一个指定约束的所有样本。 要只保留同时符合所有约束的部分,请链接多个atrim滤镜。
默认设置为保留所有输入。因此,可以仅设置例如结束值,以保留指定时间之前的所有内容。
示例:
- 仅保留输入的第二分钟内容:
ffmpeg -i INPUT -af atrim=60:120
- 仅保留前1000个样本:
ffmpeg -i INPUT -af atrim=end_sample=1000
36.68 交叉相关度
计算两个输入音频流之间的窗口归一化交叉相关度。
结果样本始终在-1到1之间。 如果结果为1,表示选定片段中两个输入样本高度相关。 结果为0表示完全无相关。 结果为-1表示两个输入样本相位相反,即它们相互抵消。
该滤镜接受以下选项:
- size
设置用于计算交叉相关度的片段大小。 默认值为256。允许范围为2到131072。
- algo
设置交叉相关度算法。可以是
slow或fast或best。 默认值为best。 快速算法假设任何给定片段中的平均值始终为零,从而需要较少的计算。 这通常不正确,但对于典型音频流是有效的。
36.68.1 示例
- 计算立体声音频流中通道之间的相关性:
ffmpeg -i stereo.wav -af channelsplit,axcorrelate=size=1024:algo=fast correlation.wav
36.69 带通
应用两极Butterworth带通滤波器,具有中心 频率频率和(3dB点)带宽宽度。csg选项选择恒定边裙增益(峰值增益=Q),而不是默认值:恒定0dB峰值增益。 滤镜的滚降速率为每倍频程6dB(每十倍频程20dB)。
该滤镜接受以下选项:
- frequency, f
设置滤波器的中心频率。默认值为
3000.- csg
如果设置为1则为恒定边裙增益。默认值为0。
- width_type, t
设置滤波器带宽的指定方法。
- h
Hz
- q
Q因子
- o
倍频程
- s
斜率
- k
千赫
- width, w
使用width_type单位指定滤波器的带宽。
- mix, m
在输出中使用滤波信号的程度。默认值为1。 范围为0到1。
- channels, c
指定要过滤的通道,默认情况下过滤所有可用通道。
- normalize, n
规范化双二阶系数,默认情况下禁用。 启用后将规范化DC的幅值响应为0dB。
- transform, a
设置IIR滤镜的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- precision, r
设置滤波精度。
- auto
根据环绕滤镜选择自动样本格式。
- s16
始终使用有符号16位。
- s32
始终使用有符号32位。
- f32
始终使用32位浮点。
- f64
始终使用64位浮点。
- block_size, b
设置用于反向IIR处理的块大小。如果此值设置为足够高的值(高于接近零值时截断的脉冲响应长度),滤波将变为线性相位,否则如果不足够大,它将仅产生难看的伪影。
请注意,当设置为非零值时,滤镜的延迟将正好为此样本数量。
36.69.1 命令
该滤镜支持以下命令:
- frequency, f
更改带通频率。 命令语法为:"频率"
- width_type, t
更改带通width_type。 命令语法为:"width_type"
- width, w
更改带通宽度。 命令语法为:"宽度"
- mix, m
更改带通混合。 命令语法为:"混合"
36.70 带阻
应用两极Butterworth带阻滤波器,具有中心 频率频率和(3dB点)带宽宽度。 滤镜的滚降速率为每倍频程6dB(每十倍频程20dB)。
该滤镜接受以下选项:
- frequency, f
设置滤波器的中心频率,默认值为
3000.- width_type, t
设置指定滤波器带宽的方法。
- h
赫兹
- q
Q因子
- o
倍频程
- s
斜率
- k
千赫兹
- width, w
在宽度单位内指定滤波器的带宽。
- mix, m
设置过滤后信号在输出中的使用程度,默认值为1。 范围介于0到1之间。
- channels, c
指定要过滤的音频通道,默认情况下将过滤所有可用通道。
- normalize, n
标准化双二阶滤波器系数,默认情况下禁用。 启用后将规范化DC处的幅度响应为0dB。
- transform, a
设置IIR滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- precision, r
设置过滤的精度。
- auto
根据环绕滤波器选择自动样本格式。
- s16
始终使用签名16位。
- s32
始终使用签名32位。
- f32
始终使用浮点32位。
- f64
始终使用浮点64位。
- block_size, b
设置用于反向IIR处理的块大小。如果该值设置得足够高 (高于冲激响应的长度,在接近零值时截断)过滤 将成为线性相位;否则,如果不够大,将产生明显的伪影。
注意,当设置为非零值时,滤波器延迟将正好是这个数量的样本。
36.70.1 命令
此滤波器支持以下命令:
- frequency, f
更改带拒绝频率。 命令语法为:"频率"
- width_type, t
更改带拒绝的宽度类型。 命令语法为:"宽度类型"
- width, w
更改带拒绝的宽度。 命令语法为:"宽度"
- mix, m
更改带拒绝的混合。 命令语法为:"混合"
36.71 低音,高架滤波
使用双极高架滤波器提升或削减音频的低音(较低)频率,响应类似于标准的 高保真的音量控制。这也称为高架均衡(EQ)。
滤波器接受以下选项:
- gain, g
设定在0赫兹的增益。其有效范围约为-20 (大幅度削减)至+20(大幅度提升)。 使用正增益时需注意可能存在过载。
- frequency, f
设置滤波器的中心频率,因此可以用于扩展或减少要提升或削减的频率范围。 默认值为
100赫兹。- width_type, t
设置指定滤波器带宽的方法。
- h
赫兹
- q
Q因子
- o
倍频程
- s
斜率
- k
千赫兹
- width, w
确定滤波器高架过渡的陡峭程度。
- poles, p
设置极数,默认值为2。
- mix, m
设置过滤后的信号在输出中的使用程度,默认值为1。 范围介于0到1之间。
- channels, c
指定要过滤的音频通道,默认情况下将过滤所有可用通道。
- normalize, n
标准化双二阶滤波器系数,默认情况下禁用。 启用后将规范化DC处的幅度响应为0dB。
- transform, a
设置IIR滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- precision, r
设置过滤的精度。
- auto
根据环绕滤波器选择自动样本格式。
- s16
始终使用签名16位。
- s32
始终使用签名32位。
- f32
始终使用浮点32位。
- f64
始终使用浮点64位。
- block_size, b
设置用于反向IIR处理的块大小。如果该值设置得足够高 (高于冲激响应的长度,在接近零值时截断)过滤 将成为线性相位;否则,如果不够大,将产生明显的伪影。
注意,当设置为非零值时,滤波器延迟将正好是这个数量的样本。
36.71.1 命令
此滤波器支持以下命令:
- frequency, f
更改低音频率。 命令语法为:"频率"
- width_type, t
更改低音的宽度类型。 命令语法为:"宽度类型"
- width, w
更改低音宽度。 命令语法为:"宽度"
- gain, g
更改低音增益。 命令语法为:"增益"
- mix, m
更改低音混合。 命令语法为:"混合"
36.72 双二阶滤波
应用具有给定系数的双二阶IIR滤波器。 其中b0, b1, b2和a0, a1, a2分别是分子和分母系数。 以及通道, c指定要过滤的音频通道,默认情况下将过滤所有可用通道。
36.72.1 命令
此滤波器支持以下命令:
- a0
- a1
- a2
- b0
- b1
- b2
更改双二阶参数。 命令语法为:"值"
- mix, m
设置过滤后的信号在输出中的使用程度,默认值为1。 范围介于0到1之间。
- channels, c
指定要过滤的音频通道,默认情况下将过滤所有可用通道。
- normalize, n
标准化双二阶滤波器系数,默认情况下禁用。 启用后将规范化DC处的幅度响应为0dB。
- transform, a
设置IIR滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- precision, r
设置过滤的精度。
- auto
根据环绕滤波器选择自动样本格式。
- s16
始终使用签名16位。
- s32
始终使用签名32位。
- f32
始终使用浮点32位。
- f64
始终使用浮点64位。
- block_size, b
设置用于反向IIR处理的块大小。如果该值设置得足够高 (高于冲激响应的长度,在接近零值时截断)过滤 将成为线性相位;否则,如果不够大,将产生明显的伪影。
注意,当设置为非零值时,滤波器延迟将正好是这个数量的样本。
36.73 bs2b
Bauer立体声到双耳转换,改善通过耳机收听立体声音频记录的体验。
要启用此滤波器的编译,需使用以下配置选项来配置FFmpeg--enable-libbs2b.
它接受以下参数:
- profile
预定义的交叉反馈级别。
- default
默认级别(fcut=700, feed=50)。
- cmoy
Chu Moy 电路(fcut=700, feed=60)。
- jmeier
Jan Meier 电路(fcut=650, feed=95)。
- fcut
截止频率(单位:赫兹)。
- feed
反馈级别(单位:赫兹)。
36.74 频道映射
将输入频道重新映射到新的位置。
它接受以下参数:
- map
将输入频道从一个位置映射到另一个位置。该参数是一个以‘|’分隔的映射列表,格式为
输入频道-输出频道或者输入频道的形式。输入频道可以是输入频道的名称(例如,FL 表示前左)或其在输入频道布局中的索引。输出频道是输出频道的名称或其在输出频道布局中的索引。如果输出频道未指定,那么其索引将被隐式定义,从零开始,每个映射依次增加一。在映射中混合使用不同类型将导致解析错误。- channel_layout
输出流的频道布局。如果未指定,过滤器将基于输出频道名称或映射数量来猜测布局。猜测的布局不一定按照映射的顺序包含频道。
如果没有映射,过滤器将隐式地将输入频道映射到输出频道,保留索引。
36.74.1 示例
- 例如,假设一个 5.1+降混输入的 MOV 文件,
ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
将创建一个输出的 WAV 文件,标记为立体声,由输入的降混频道组成。
- 修复一个 5.1 的 WAV 文件错误编码为 AAC 本地频道顺序。
ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:5.1' out.wav
36.75 频道分离
将输入音频流中的每个频道分离为单独的输出流。
它接受以下参数:
- channel_layout
输入流的频道布局。默认是“立体声”。
- channels
描述要作为单独输出流提取的频道布局或选择“all”,以便将每个输入频道作为单独流输出。默认为“all”。
选择输入频道布局中不存在的频道会导致错误。
36.75.1 示例
- 例如,假设一个立体声输入的 MP3 文件,
ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv
将创建一个输出 Matroska 文件,其中包含两个音频流,一个仅包含左频道,另一个仅包含右频道。
- 将一个 5.1 WAV 文件分离为每频道文件:
ffmpeg -i in.wav -filter_complex 'channelsplit=channel_layout=5.1[FL][FR][FC][LFE][SL][SR]' -map '[FL]' front_left.wav -map '[FR]' front_right.wav -map '[FC]' front_center.wav -map '[LFE]' lfe.wav -map '[SL]' side_left.wav -map '[SR]' side_right.wav
- 从一个 5.1 WAV 文件中仅提取 LFE(低频音效):
ffmpeg -i in.wav -filter_complex 'channelsplit=channel_layout=5.1:channels=LFE[LFE]' -map '[LFE]' lfe.wav
36.76 合唱效果
为音频添加合唱效果。
可以使单一人声听起来像合唱,也可以应用于乐器。
合唱效果类似短延迟的回声效果,但与回声中的延迟恒定不同,合唱效果中的延迟通过正弦或三角调制变化。调制深度定义了调制延迟在延迟之前或之后播放的范围。因此延迟的声音会听起来更慢或更快,即延迟的声音围绕原声音进行调整,就像合唱中一些人声略微跑调一样。
它接受以下参数:
- in_gain
设置输入增益。默认值为 0.4。
- out_gain
设置输出增益。默认值为 0.4。
- delays
设置延迟。典型值为 40ms 至 60ms。
- decays
设置衰减。
- speeds
设置速度。
- depths
设置深度。
36.76.1 示例
- 单一延迟:
chorus=0.7:0.9:55:0.4:0.25:2
- 两个延迟:
chorus=0.6:0.9:50|60:0.4|0.32:0.25|0.4:2|1.3
- 三个延迟的更饱满的合唱效果:
chorus=0.5:0.9:50|60|40:0.4|0.32|0.3:0.25|0.4|0.3:2|2.3|1.3
36.77 动态范围调节
压缩或扩展音频的动态范围。
它接受以下参数:
- attacks
- decays
每个频道的时间列表(单位:秒),用于计算输入信号的瞬时音量水平。攻击时间指音量增加,衰减时间指音量减少。通常情况下,攻击时间(音频变大的响应时间)应该比衰减时间短,因为人耳对突然而响的音频比突然而小的音频更敏感。攻击时间的典型值为 0.3 秒,衰减时间的典型值为 0.8 秒。如果设置的攻击时间和衰减时间数量少于频道数,则最后设置的攻击/衰减时间将应用于所有剩余频道。
- points
指定 dB 相对最大可能信号幅度的传输函数的点列表。每个关键点列表必须使用以下语法定义:
x0/y0|x1/y1|x2/y2|....或者x0/y0 x1/y1 x2/y2 ....输入值必须按严格递增顺序排列,但传输函数不一定是单调上升的。点
0/0是默认值,但可以被0/out-dBn覆盖。传输函数的典型值为-70/-70|-60/-20|1/0.- soft-knee
设置所有连接点的曲线半径,单位 dB。默认为 0.01。
- gain
为传输函数的所有点设置额外增益,单位 dB。这可以轻松调整整体增益。默认值为 0。
- volume
在过滤器开始时为每个频道设置一个初始音量(单位:dB)。这样允许用户一开始就提供一个名义水平,例如,在压缩开始运行之前,避免将非常大的增益应用于初始信号电平。对于初始安静的音频,典型值为 -90 dB。默认为 0。
- delay
设置延迟时间(单位:秒)。输入音频会立即被分析,但音频会在被音量调节器处理之前发生延迟。指定一个大约等于攻击/衰减时间的延迟可以使过滤器在预测模式而非反应模式下运行。默认为 0。
36.77.1 示例
- 使具有安静和响亮段落的音乐适合在嘈杂的环境中聆听:
compand=.3|.3:1|1:-90/-60|-60/-40|-40/-30|-20/-20:6:0:-90:0.2
另一个例子,适用于含有低声和爆炸部分的音频:
compand=0|0:1|1:-90/-900|-70/-70|-30/-9|0/-3:6:0:0:0
- 当噪音低于信号电平时的噪声门:
compand=.1|.1:.2|.2:-900/-900|-50.1/-900|-50/-50:.01:0:-90:.1
- 另一个噪声门示例,这次是当噪音高于信号电平时(某些方面类似于静噪):
compand=.1|.1:.1|.1:-45.1/-45.1|-45/-900|0/-900:.01:45:-90:.1
- 从 -6dB 开始的 2:1 压缩:
compand=points=-80/-80|-6/-6|0/-3.8|20/3.5
- 从 -9dB 开始的 2:1 压缩:
compand=points=-80/-80|-9/-9|0/-5.3|20/2.9
- 从 -12dB 开始的 2:1 压缩:
compand=points=-80/-80|-12/-12|0/-6.8|20/1.9
- 从 -18dB 开始的 2:1 压缩:
compand=points=-80/-80|-18/-18|0/-9.8|20/0.7
- 从 -15dB 开始的 3:1 压缩:
compand=points=-80/-80|-15/-15|0/-10.8|20/-5.2
- 压缩器/门限器:
compand=points=-80/-105|-62/-80|-15.4/-15.4|0/-12|20/-7.6
- 扩展器:
compand=attacks=0:points=-80/-169|-54/-80|-49.5/-64.6|-41.1/-41.1|-25.8/-15|-10.8/-4.5|0/0|20/8.3
- 在 -6dB 的硬限制器:
compand=attacks=0:points=-80/-80|-6/-6|20/-6
- 在 -12dB 的硬限制器:
compand=attacks=0:points=-80/-80|-12/-12|20/-12
- 在 -35 dB 的硬噪声门:
compand=attacks=0:points=-80/-115|-35.1/-80|-35/-35|20/20
- 软限制器:
compand=attacks=0:points=-80/-80|-12.4/-12.4|-6/-8|0/-6.8|20/-2.8
36.78 补偿延迟
补偿延迟线是一种基于度量的延迟,用于补偿麦克风或扬声器的位置差异。
例如,您使用两个麦克风在不同位置录制吉他。由于声波前沿在正常条件下速度是固定的,麦克风的相位可能会不同,取决于它们的位置和距离。最好在这些麦克风相位同步时混合声音。需要注意的是,麦克风之间约 30 厘米的距离会使一个麦克风捕获信号与另一麦克风相位相反。这样最终的混音听起来会有情绪化。这种过滤器可以通过为每个麦克风音轨添加不同的延迟来解决相位问题,使它们同步。
最好的结果可以通过将一个曲目作为基础,并一个一个与它同步其他曲目来实现。需要记住的是,同步/延迟容差也取决于采样率。较高的采样率将产生更多容差。
过滤器接受以下参数:
- mm
设置毫米距离。这是用于微调的补偿距离。默认值为 0。
- cm
设置厘米距离。这是用于距离调整的补偿距离。默认值为 0。
- m
设置米距离。这是用于硬距离设置的补偿距离。默认值为 0。
- dry
设置干信号量。未处理的(干)信号量。默认值为 0。
- wet
设置湿信号量。处理过的(湿)信号量。默认值为 1。
- temp
设置环境温度(单位:摄氏度)。这是环境的温度。默认值为 20。
36.78.1 命令
此滤镜支持上述所有选项作为命令.
36.79 跨声道混合
应用耳机跨声道混合滤镜。
跨声道混合是将立体声音频记录的左右声道合并的过程。 主要用于减少低频的极端立体声分离。
其目的是为听众提供更类似于扬声器的声音效果。
此滤镜接受以下选项:
- strength
设置跨声道混合强度。默认值为 0.2。允许范围为 0 至 1。 这设置了立体声图像侧部分的低频架滤波器增益。 默认值为 -6dB,当强度设置为 1 时,最大允许值为 -30db。
- range
设置声场宽度。默认值为 0.5。允许范围为 0 至 1。 这设置了低频架滤波器的截止频率。默认截止频率接近 1550 Hz。 范围设置为 1 时,截止频率设置为 2100 Hz。
- slope
设置低频架滤波器的曲线斜率。默认值为 0.5。 允许范围为 0.01 至 1。
- level_in
设置输入增益。默认值为 0.9。
- level_out
设置输出增益。默认值为 1。
- block_size
设置用于反向 IIR 处理的块大小。如果此值设置得足够高 (高于当接近零值时被截断的脉冲响应长度),过滤器将变为线性相位,否则如果设置过低将产生明显的失真。
请注意,当设置为非零值时,滤波器延迟将精确为此样本数量。
36.79.1 命令
此滤镜支持上述所有选项作为命令.
36.80 晶体器
用于音频噪声锐化的简单算法。
此滤镜线性增强每个音频样本之间的差异。
此滤镜接受以下选项:
- i
设置效果强度(默认:2.0)。范围必须在 -10.0 到 0 (声音不变)到 10.0(最大效果)之间。 要进行反向过滤,请使用负值。
- c
启用截断。默认情况下启用。
36.80.1 命令
此滤镜支持上述所有选项作为命令.
36.81 直流偏移
对音频应用直流偏移。
这可用于从音频中去除直流偏移(可能由于录制链中的硬件问题 引起)。直流偏移的影响是减少动态范围,因此减少音量。astats滤镜可用于确定 信号是否存在直流偏移。
- shift
设置直流偏移,允许范围为 [-1, 1]。它表示音频的偏移量。
- limitergain
可选项。值应远小于 1(例如 0.05 或 0.02), 用于防止剪切。
36.82 去齿音器
对音频样本应用去齿音效果。
- i
设置触发去齿音的强度。允许范围为 0 至 1。 默认值为 0。
- m
设置对声音高频部分的削弱量。允许范围为 0 至 1。 默认值为 0.5。
- f
去齿音时保留的原始频率内容比例。允许范围为 0 至 1。 默认值为 0.5。
- s
设置输出模式。
接受以下值:
- i
传递未更改的输入。
- o
传递过滤掉的齿音。
- e
仅传递齿音。
默认值为o.
36.83 对话增强
增强立体声音频中的对话。
此滤镜接受立体声输入并输出环绕声音频(3.0声道)。 新增的前中声道增强了原本在立体声两个声道中的语音对话。 此滤镜将前左和前右声道原样输出。
此滤镜接受以下选项:
- original
设置在前中声道输出中保留的原始中间因素。 允许范围为 0 至 1。默认值为 1。
- enhance
设置前中声道输出中对话增强的比例。 允许范围为 0 到 3。默认值为 1。
- voice
设置语音检测因子。 允许范围为 2 到 32。默认值为 2。
36.83.1 命令
此滤镜支持上述所有选项作为命令.
36.84 动态范围计
测量音频的动态范围。
DR 值为 14 或更高表示材料具有非常动态的特点。DR 值为 8 到 13 表示材料的动态特性处于过渡状态。而低于 8 的值表示动态很差, 内容被压缩得厉害。
此滤镜接受以下选项:
- length
设置用于将音频分割成等长段的窗口时长,以秒为单位。 默认值为 3 秒。
36.85 动态音频均衡
动态音频均衡器。
此滤镜对输入音频应用一定的增益,以将其峰值幅度达到目标级别 (例如 0 dBFS)。然而,与"简单"的归一化算法相比, 动态音频均衡器会动态重新调整输入音频的增益系数。 这允许对音频的"低音"部分应用额外增益,同时避免失真或剪切"高音" 部分。换句话说:动态音频均衡器将"平衡"安静与响亮部分之间的音量, 并将每部分的音量提高到相同的目标级别。然而需要注意的是,动态音频 均衡器在每部分中不会进行"动态范围压缩",它将100%保留每部分内的动态范围。
- framelen, f
设置帧的长度,以毫秒为单位。范围是 10 到 8000 毫秒。 默认值是 500 毫秒。 动态音频均衡器以小块处理输入音频, 称为帧。这是必要的,因为峰值幅度对于单一的样本值没有意义。 相反,我们需要决定连续样本序列的峰值幅度。标准均衡器可能 g接受整条音频文件的峰值幅度,然而,动态均衡器接收独立对每一帧 determined的峰值值。
- gausssize, g
设置高斯滤镜的窗口尺寸。范围是 3 至 301 必须是奇数。 默认值是31 高斯滤波器的窗口大小。
window sizeFilter’s window尺寸 被设定为 centered 窗格 around 当前frame simply 奇数默认 这个.- peak, p
峰值值 目标的设置 默认是 .等级可能 是 peak 放大.
- maxgain, m
Set the maximum gain factor. In range from 1.0 to 100.0. Default is 10.0. The Dynamic Audio Normalizer determines the maximum possible (local) gain factor for each input frame, i.e. the maximum gain factor that does not result in clipping or distortion. The maximum gain factor is determined by the frame’s highest magnitude sample. However, the Dynamic Audio Normalizer additionally bounds the frame’s maximum gain factor by a predetermined (global) maximum gain factor. This is done in order to avoid excessive gain factors in "silent" or almost silent frames. By default, the maximum gain factor is 10.0, For most inputs the default value should be sufficient and it usually is not recommended to increase this value. Though, for input with an extremely low overall volume level, it may be necessary to allow even higher gain factors. Note, however, that the Dynamic Audio Normalizer does not simply apply a "hard" threshold (i.e. cut off values above the threshold). Instead, a "sigmoid" threshold function will be applied. This way, the gain factors will smoothly approach the threshold value, but never exceed that value.
- targetrms, r
Set the target RMS. In range from 0.0 to 1.0. Default is 0.0 - disabled. By default, the Dynamic Audio Normalizer performs "peak" normalization. This means that the maximum local gain factor for each frame is defined (only) by the frame’s highest magnitude sample. This way, the samples can be amplified as much as possible without exceeding the maximum signal level, i.e. without clipping. Optionally, however, the Dynamic Audio Normalizer can also take into account the frame’s root mean square, abbreviated RMS. In electrical engineering, the RMS is commonly used to determine the power of a time-varying signal. It is therefore considered that the RMS is a better approximation of the "perceived loudness" than just looking at the signal’s peak magnitude. Consequently, by adjusting all frames to a constant RMS value, a uniform "perceived loudness" can be established. If a target RMS value has been specified, a frame’s local gain factor is defined as the factor that would result in exactly that RMS value. Note, however, that the maximum local gain factor is still restricted by the frame’s highest magnitude sample, in order to prevent clipping.
- coupling, n
Enable channels coupling. By default is enabled. By default, the Dynamic Audio Normalizer will amplify all channels by the same amount. This means the same gain factor will be applied to all channels, i.e. the maximum possible gain factor is determined by the "loudest" channel. However, in some recordings, it may happen that the volume of the different channels is uneven, e.g. one channel may be "quieter" than the other one(s). In this case, this option can be used to disable the channel coupling. This way, the gain factor will be determined independently for each channel, depending only on the individual channel’s highest magnitude sample. This allows for harmonizing the volume of the different channels.
- correctdc, c
Enable DC bias correction. By default is disabled. An audio signal (in the time domain) is a sequence of sample values. In the Dynamic Audio Normalizer these sample values are represented in the -1.0 to 1.0 range, regardless of the original input format. Normally, the audio signal, or "waveform", should be centered around the zero point. That means if we calculate the mean value of all samples in a file, or in a single frame, then the result should be 0.0 or at least very close to that value. If, however, there is a significant deviation of the mean value from 0.0, in either positive or negative direction, this is referred to as a DC bias or DC offset. Since a DC bias is clearly undesirable, the Dynamic Audio Normalizer provides optional DC bias correction. With DC bias correction enabled, the Dynamic Audio Normalizer will determine the mean value, or "DC correction" offset, of each input frame and subtract that value from all of the frame’s sample values which ensures those samples are centered around 0.0 again. Also, in order to avoid "gaps" at the frame boundaries, the DC correction offset values will be interpolated smoothly between neighbouring frames.
- altboundary, b
Enable alternative boundary mode. By default is disabled. The Dynamic Audio Normalizer takes into account a certain neighbourhood around each frame. This includes the preceding frames as well as the subsequent frames. However, for the "boundary" frames, located at the very beginning and at the very end of the audio file, not all neighbouring frames are available. In particular, for the first few frames in the audio file, the preceding frames are not known. And, similarly, for the last few frames in the audio file, the subsequent frames are not known. Thus, the question arises which gain factors should be assumed for the missing frames in the "boundary" region. The Dynamic Audio Normalizer implements two modes to deal with this situation. The default boundary mode assumes a gain factor of exactly 1.0 for the missing frames, resulting in a smooth "fade in" and "fade out" at the beginning and at the end of the input, respectively.
- compress, s
Set the compress factor. In range from 0.0 to 30.0. Default is 0.0. By default, the Dynamic Audio Normalizer does not apply "traditional" compression. This means that signal peaks will not be pruned and thus the full dynamic range will be retained within each local neighbourhood. However, in some cases it may be desirable to combine the Dynamic Audio Normalizer’s normalization algorithm with a more "traditional" compression. For this purpose, the Dynamic Audio Normalizer provides an optional compression (thresholding) function. If (and only if) the compression feature is enabled, all input frames will be processed by a soft knee thresholding function prior to the actual normalization process. Put simply, the thresholding function is going to prune all samples whose magnitude exceeds a certain threshold value. However, the Dynamic Audio Normalizer does not simply apply a fixed threshold value. Instead, the threshold value will be adjusted for each individual frame. In general, smaller parameters result in stronger compression, and vice versa. Values below 3.0 are not recommended, because audible distortion may appear.
- threshold, t
Set the target threshold value. This specifies the lowest permissible magnitude level for the audio input which will be normalized. If input frame volume is above this value frame will be normalized. Otherwise frame may not be normalized at all. The default value is set to 0, which means all input frames will be normalized. This option is mostly useful if digital noise is not wanted to be amplified.
- channels, h
Specify which channels to filter, by default all available channels are filtered.
- overlap, o
Specify overlap for frames. If set to 0 (default) no frame overlapping is done. Using >0 and <1 values will make less conservative gain adjustments, like when framelen option is set to smaller value, if framelen option value is compensated for non-zero overlap then gain adjustments will be smoother across time compared to zero overlap case.
- curve, v
Specify the peak mapping curve expression which is going to be used when calculating gain applied to frames. The max output frame gain will still be limited by other options mentioned previously for this filter.
The expression can contain the following constants:
- ch
current channel number
- sn
current sample number
- nb_channels
number of channels
- t
timestamp expressed in seconds
- sr
sample rate
- p
current frame peak value
36.85.1 Commands
This filter supports the all above options as commands.
36.86 earwax
Make audio easier to listen to on headphones.
This filter adds ‘cues’ to 44.1kHz stereo (i.e. audio CD format) audio so that when listened to on headphones the stereo image is moved from inside your head (standard for headphones) to outside and in front of the listener (standard for speakers).
Ported from SoX.
36.87 equalizer
Apply a two-pole peaking equalisation (EQ) filter. With this filter, the signal-level at and around a selected frequency can be increased or decreased, whilst (unlike bandpass and bandreject filters) that at all other frequencies is unchanged.
In order to produce complex equalisation curves, this filter can be given several times, each with a different central frequency.
The filter accepts the following options:
- frequency, f
Set the filter’s central frequency in Hz.
- width_type, t
Set method to specify band-width of filter.
- h
Hz
- q
Q-Factor
- o
八度
- s
斜率
- k
千赫兹
- width, w
以宽度类型单位指定滤波器的带宽。
- gain, g
设置所需的增益或衰减(单位:分贝)。 当使用正增益时,需注意信号剪裁。
- mix, m
决定输出中过滤信号的使用程度。默认值为1。 范围在0到1之间。
- channels, c
指定要过滤的声道,默认会过滤所有可用声道。
- normalize, n
归一化双二阶滤波器系数,默认禁用。 启用后会在直流处将幅度响应归一化到0分贝。
- transform, a
设置IIR滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- precision, r
设置滤波精度。
- auto
根据环绕滤波器自动选择样本格式。
- s16
始终使用16位有符号整数。
- s32
始终使用32位有符号整数。
- f32
始终使用32位浮点数。
- f64
始终使用64位浮点数。
- block_size, b
设置用于反向IIR处理的块大小。如果这个值设置的足够高 (高于随近零值截断时的冲激响应长度),滤波 将变为线性相位,否则如果设置过低,将产生难看的伪影。
注意,当设置为非零值时,滤波器延迟将正好是这么多的样本。
36.87.1 示例
- 在1000 Hz处衰减10分贝,带宽为200 Hz:
equalizer=f=1000:t=h:width=200:g=-10
- 在1000 Hz处应用2分贝增益,Q值为1,并在100 Hz处衰减5分贝,Q值为2:
equalizer=f=1000:t=q:w=1:g=2,equalizer=f=100:t=q:w=2:g=-5
36.87.2 命令
此滤波器支持以下命令:
- frequency, f
改变均衡器频率。 命令语法:"频率"
- width_type, t
改变均衡器宽度类型。 命令语法:"宽度类型"
- width, w
改变均衡器宽度。 命令语法:"宽度"
- gain, g
改变均衡器增益。 命令语法:"增益"
- mix, m
改变均衡器混合。 命令语法:"混合"
36.88 额外立体声
线性增强左右声道之间的差别,会给播放添加某种“现场”效果。
此滤波器接受以下选项:
- m
设置差异系数(默认值:2.5)。0.0表示单声道声音 (两个声道的平均值),1.0声音不变,-1.0左右声道交换。
- c
启用信号剪裁。默认启用。
36.88.1 命令
此滤波器支持以上所有选项作为命令.
36.89 FIR均衡器
使用任意频率响应应用FIR均衡。
此滤波器接受以下选项:
- gain
设置增益曲线方程(单位:分贝)。表达式可以包含变量:
- f
评估的频率
- sr
采样率
- ch
声道编号,当多声道评估被禁用时为0
- chid
声道ID,参见libavutil/channel_layout.h,当 多声道评估被禁用时设置为第一个声道ID
- chs
声道数量
- chlayout
声道布局,参见libavutil/channel_layout.h
以及函数:
- gain_interpolate(f)
在基于增益项的频率f上插值增益
- cubic_interpolate(f)
与gain_interpolate相同,但更平滑
此选项也可作为命令使用。默认值为
gain_interpolate(f).- gain_entry
为gain_interpolate函数设置增益项表达式。表达式可以 包含函数:
- entry(f, g)
在频率f处以值g存储增益项
此选项也可作为命令使用。
- delay
以秒为单位设置滤波器延迟。值越高越精确。 默认值为
0.01.- accuracy
以Hz为单位设置滤波器精度。值越低越精确。 默认值为
5.- wfunc
设置窗口函数。可接受的值有:
- rectangular
矩形窗口,当增益曲线已较平滑时适用
- hann
汉宁窗口(默认)
- hamming
汉明窗口
- blackman
布莱克曼窗口
- nuttall3
连续一阶导数3项努特尔窗口
- mnuttall3
不连续3项最小努特尔窗口
- nuttall
连续一阶导数4项努特尔窗口
- bnuttall
不连续4项最小努特尔(布莱克曼努特尔)窗口
- bharris
布莱克曼-哈里斯窗口
- tukey
图基窗口
- fixed
如果启用,使用固定数量的音频样本。这在滤波中具有较大延迟时能够显著提高速度。 默认禁用。
- multi
启用增益的多声道评估。默认禁用。
- zero_phase
启用零相位模式,通过减去时间戳来补偿延迟。 默认禁用。
- scale
设置增益使用的比例。可接受的值有:
- linlin
线性频率,线性增益
- linlog
线性频率,对数(单位:分贝)增益(默认)
- loglin
对数频率(以八度标度,其中20 Hz为0),线性增益
- loglog
对数频率,对数增益
- dumpfile
设置用于输出的文件,适用于gnuplot。
- dumpscale
为输出文件设置刻度。可接受的值与scale选项相同。 默认值为linlog。
- fft2
启用使用复杂FFT的双声道卷积。这显著提高了速度。 默认禁用。
- min_phase
启用最小相位脉冲响应。默认禁用。
36.89.1 示例
- 在1000 Hz处低通滤波:
firequalizer=gain='if(lt(f,1000), 0, -INF)'
- 在1000 Hz处加增益项的低通滤波:
firequalizer=gain_entry='entry(1000,0); entry(1001, -INF)'
- 自定义均衡器:
firequalizer=gain_entry='entry(100,0); entry(400, -4); entry(1000, -6); entry(2000, 0)'
- 更大的延迟并用零相位补偿延迟:
firequalizer=delay=0.1:fixed=on:zero_phase=on
- 左声道低通滤波,右声道高通滤波:
firequalizer=gain='if(eq(chid,1), gain_interpolate(f), if(eq(chid,2), gain_interpolate(1e6+f), 0))' :gain_entry='entry(1000, 0); entry(1001,-INF); entry(1e6+1000,0)':multi=on
36.90 颤音器
对音频应用颤音效果。
此滤波器接受以下选项:
- delay
以毫秒为单位设置基准延迟。范围为0到30。默认值为0。
- depth
以毫秒为单位设置额外的扫频延迟。范围为0到10。默认值为2。
- regen
设置百分比再生(延迟信号反馈)。范围为-95到95。 默认值为0。
- width
设置与原始信号混合的延迟信号百分比。范围为0到100。 默认值为71。
- speed
设置每秒扫频次数(Hz)。范围为0.1到10。默认值为0.5。
- shape
设置扫频波形,可以是三角形或是正弦波. 默认值为正弦曲线.
- phase
设置多通道的扫频波百分比偏移。范围为0到100。 默认值为25。
- interp
设置延迟线插值,线性或二次方。 默认值为线性.
36.91 Haas效应
将Haas效应应用于音频。
请注意,这在单声道信号上应用最有意义。 将此滤镜应用于单声道信号时,可以增强其方向性并拓展其立体声图像。
此滤镜接受以下选项:
- level_in
设置输入电平。默认值为1,或0dB
- level_out
设置输出电平。默认值为1,或0dB。
- side_gain
设置应用于信号侧部分的增益。默认值为1.
- middle_source
设置中间源的类型。可以是以下之一:
- ‘left’
选择左声道。
- ‘right’
选择右声道。
- ‘mid’
选择立体声图像的中间部分信号。
- ‘side’
选择立体声图像的侧面部分信号。
- middle_phase
更改中间相位。默认情况下禁用。
- left_delay
设置左声道延迟。默认值为2.05毫秒。
- left_balance
设置左声道平衡。默认值为-1.
- left_gain
设置左声道增益。默认值为1.
- left_phase
更改左相位。默认情况下禁用。
- right_delay
设置右声道延迟。默认值为2.12毫秒。
- right_balance
设置右声道平衡。默认值为1.
- right_gain
设置右声道增益。默认值为1.
- right_phase
更改右相位。默认情况下启用。
36.92 HDCD
解码高分辨率兼容数字 (HDCD) 数据。一个16位PCM流 嵌入HDCD代码,并扩展为20位PCM流。
此滤镜支持HDCD的峰值扩展和低电平增益调整功能, 并检测瞬态滤波器标志。
ffmpeg -i HDCD16.flac -af hdcd OUT24.flac
使用滤镜和wav时,请注意wav的默认编码为16位,
因此结果20位流将被截断为16位。使用以下命令-acodec pcm_s24le在滤镜之后以获取24位PCM输出。
ffmpeg -i HDCD16.wav -af hdcd OUT16.wav ffmpeg -i HDCD16.wav -af hdcd -c:a pcm_s24le OUT24.wav
此滤镜接受以下选项:
- disable_autoconvert
禁用滤镜图中任何自动格式转换或重新采样。
- process_stereo
一起处理立体声声道。如果两个声道之间的目标增益 不匹配,则认为目标增益无效并使用最后一个有效目标增益。
- cdt_ms
设置代码检测计时器周期(以毫秒为单位)。
- force_pe
即使没有信号指示峰值扩展,也始终扩展超过-3dBFS的峰值。
- analyze_mode
用一个固定的音调替换音频,并调整其振幅以信号化解码过程的 某个具体方面。可以将输出文件加载到音频编辑器中,与原始音频 一起以协助分析。
analyze_mode=pe:force_pe=true可以用来查看所有超过峰值扩展水平的样本。模式包括:
- ‘0, off’
禁用
- ‘1, lle’
每个样本的增益调整水平
- ‘2, pe’
发生峰值扩展的样本
- ‘3, cdt’
代码检测计时器处于活动状态的样本
- ‘4, tgm’
目标增益与声道之间不匹配的样本
36.93 耳机
应用头相关传递函数 (HRTFs),创建虚拟 用户周围的扬声器,用于通过耳机进行双耳收听。 每个声道需要一个立体声输入流作为附加流提供HRIR。
滤镜接受以下选项:
- map
设置用于卷积输入流的映射。 参数是一个以’|’分隔的声道名称列表,按顺序 提供给滤镜的附加流输入。 这也指定了输入流的数量。输入流的数量必须不少于第一个流的声道数量加1。
- gain
设置应用于音频的增益。值以dB为单位。默认值为0。
- type
设置处理类型。可以是时间或频率. 时间是在时间域中处理音频,这比较慢。频率是在频率域中处理音频,这比较快。 默认值为频率.
- lfe
为低频效果声道设置自定义增益。值以dB为单位。默认值为0。
- size
设置一次处理样本帧的大小。 默认值为1024。允许范围是1024到96000。
- hrir
设置HRIR流的格式。 默认值为立体声。可选值为多声道。 如果值设置为立体声,附加流的数量应 大于或等于第一个输入流中的声道数量。 此外,每个附加流应具有立体声声道数量。 如果值设置为多声道,附加流的数量应 恰好为一个。此外,附加流的输入声道数量 应等于或大于第一个输入流声道数量的两倍。
36.93.1 示例
- 完整示例使用wav文件作为系数,与amovie滤镜一起实现7.1下混,
每个amovie滤镜使用一个立体声文件作为IR系数的输入。
这些文件为虚拟扬声器每个位置提供系数:
ffmpeg -i input.wav -filter_complex "amovie=azi_270_ele_0_DFC.wav[sr];amovie=azi_90_ele_0_DFC.wav[sl];amovie=azi_225_ele_0_DFC.wav[br];amovie=azi_135_ele_0_DFC.wav[bl];amovie=azi_0_ele_0_DFC.wav,asplit[fc][lfe];amovie=azi_35_ele_0_DFC.wav[fl];amovie=azi_325_ele_0_DFC.wav[fr];[0:a][fl][fr][fc][lfe][bl][br][sl][sr]headphone=FL|FR|FC|LFE|BL|BR|SL|SR" output.wav
- 完整示例使用wav文件作为系数,与amovie滤镜一起实现7.1下混,
但现在使用多声道 HRIR格式。
ffmpeg -i input.wav -filter_complex "amovie=minp.wav[hrirs];[0:a][hrirs]headphone=map=FL|FR|FC|LFE|BL|BR|SL|SR:hrir=multich" output.wav
36.94 高通
应用一个具有3dB点频率的高通滤波器。 滤波器可以是单极的,或双极的(默认)。 滤波器以每极每倍频程6dB的速度下降(每极每十倍频程20dB)。
此滤镜接受以下选项:
- frequency, f
设置频率(以Hz为单位)。默认值为3000。
- poles, p
设置极点数量。默认值为2。
- width_type, t
设置过滤器带宽的指定方法。
- h
Hz
- q
Q因子
- o
倍频程
- s
斜率
- k
kHz
- width, w
用宽度类型的单位指定过滤器的带宽。 仅适用于双极过滤器。 默认值为0.707q,可生成巴特沃斯响应。
- mix, m
在输出中使用过滤信号的比率。默认值为1。 范围在0到1之间。
- channels, c
指定要过滤的声道,默认情况下过滤所有可用的声道。
- normalize, n
归一化双二项式系数,默认情况下禁用。 启用后将对DC处的幅度响应进行标准化至0dB。
- transform, a
设置IIR滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- precision, r
设置过滤的精度。
- auto
根据环绕过滤器选择自动采样格式。
- s16
始终使用有符号的16位。
- s32
始终使用有符号的32位。
- f32
始终使用32位浮点。
- f64
始终使用64位浮点。
- block_size, b
设置用于反向IIR处理的块大小。如果此值设置得足够高 (高于接近零值时截断的冲激响应长度),过滤将变为线性相位; 否则如果不足够大则只会产生不良的伪影。
请注意,当设置为非零值时,过滤延迟将精确地是这些样本数量。
36.94.1 命令
此过滤器支持以下命令:
- frequency, f
更改高通频率。 命令的语法为: "frequency"
- width_type, t
更改高通宽度类型。 命令的语法为: "width_type"
- width, w
更改高通宽度。 命令的语法为: "width"
- mix, m
更改高通混合。 命令的语法为: "mix"
36.95 join
将多个输入流合并为一个多声道流。
它接受以下参数:
- inputs
输入流的数量。默认值为2。
- channel_layout
期望的输出通道布局。默认值为立体声。
- map
将输入的通道映射到输出。参数是由‘|’分隔的映射列表, 每个映射的格式为
input_idx.in_channel-out_channel形式。input_idx是输入流的从零开始的索引。in_channel可以是输入通道的名称(例如FL表示前左声道)或指定输入流中的索引。out_channel是输出通道的名称。
当未明确指定映射时,过滤器将尝试进行猜测。 它首先尝试找到未使用的匹配输入通道,如果失败,则选取第一个未使用的输入通道。
合并3个输入(需要正确设置通道布局):
ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT
从6个单声道流构建5.1声道输出:
ffmpeg -i fl -i fr -i fc -i sl -i sr -i lfe -filter_complex 'join=inputs=6:channel_layout=5.1:map=0.0-FL|1.0-FR|2.0-FC|3.0-SL|4.0-SR|5.0-LFE' out
36.96 ladspa
加载LADSPA(Linux音频开发者简单插件API)插件。
要启用此过滤器的编译,需要使用以下命令配置FFmpeg--enable-ladspa.
- file, f
指定要加载的LADSPA插件库的名称。如果环境变量
LADSPA_PATH已定义,则会在环境变量指定的每个目录(用冒号分隔的列表)中搜索LADSPA插件,LADSPA_PATH否则在标准LADSPA路径中搜索,按以下顺序:HOME/.ladspa/lib/, /usr/local/lib/ladspa/, /usr/lib/ladspa/.- plugin, p
指定库中的插件。一些库仅包含一个插件,但其他库可能包含多个插件。 如果未设置,则过滤器会列出指定库中所有可用的插件。
- controls, c
设置由‘|’分隔的零个或多个浮点值组成的控制列表,这些值确定所加载插件的行为 (例如延迟、阈值或增益)。 控件需要用以下语法定义: c0=value0|c1=value1|c2=value2|..., 其中valuei是为i-th控件设置的值。 或者,也可以使用以下语法定义:value0|value1|value2|..., 其中valuei是为i-th控件设置的值。 如果controls被设置为
help,则会打印所有可用控件及其有效范围。- sample_rate, s
指定采样率,默认值为44100。仅当插件没有输入时才使用此设置。
- nb_samples, n
设置每个输出帧中每个通道的样本数,默认值为1024。 仅当插件没有输入时才使用此设置。
- duration, d
设置源音频的最短时长。详见(ffmpeg-utils)有关ffmpeg-utils(1)手册的时间时长部分接受的语法。 请注意,生成的时长可能大于指定的时长,因为音频的生成始终在完整帧的末尾裁剪。 如果未指定,或者表达的时长为负值,则假定音频将永远生成。 仅当插件没有输入时才使用此设置。
- latency, l
启用延迟补偿,默认禁用。 仅当插件有输入时使用。
36.96.1 示例
- 列表显示amp(LADSPA示例插件)库中的所有可用插件:
ladspa=file=amp
- 列出某个插件的所有可用控件及其有效范围:
vcf_notch插件来自VCF库:ladspa=f=vcf:p=vcf_notch:c=help
- 使用插件模拟低质量音频设备:
Computer Music Toolkit(CMT) 插件库:ladspa=file=cmt:plugin=lofi:controls=c0=22|c1=12|c2=12
- 使用TAP插件(Tom的音频处理插件)为音频添加混响:
ladspa=file=tap_reverb:tap_reverb
- 生成白噪声,幅度为0.2:
ladspa=file=cmt:noise_source_white:c=c0=.2
- 使用插件生成20 bpm的点击音:
C* Click - Metronome来自C* Audio Plugin Suite(CAPS) 库:ladspa=file=caps:Click:c=c1=20'
- 应用
C* Eq10X2 - Stereo 10-band equaliser效果:ladspa=caps:Eq10X2:c=c0=-48|c9=-24|c3=12|c4=2
- 使用Steve Harris的快速提前限制器将音量增加20dB
SWH Plugins集合:ladspa=fast_lookahead_limiter_1913:fastLookaheadLimiter:20|0|2
- 使用Steve Harris的多频均衡器衰减低频音
SWH Plugins集合:ladspa=mbeq_1197:mbeq:-24|-24|-24|0|0|0|0|0|0|0|0|0|0|0|0
- 使用
Narrower减少立体声图像,来自C* Audio Plugin Suite(CAPS) 库:ladspa=caps:Narrower
- 另一个白噪声,现在使用
C* Audio Plugin Suite(CAPS) 库:ladspa=caps:White:.2
- 一些分形噪声,使用
C* Audio Plugin Suite(CAPS) 库:ladspa=caps:Fractal:c=c1=1
- 使用
VLevel插件实现动态音量归一化:ladspa=vlevel-ladspa:vlevel_mono
36.96.2 命令
此过滤器支持以下命令:
- cN
修改第-个控制值。
如果指定值无效,它将被忽略并保留之前的值。
36.97 loudnorm
EBU R128响度标准化。包括动态和线性标准化模式。
支持单次处理(直播流、文件)和双次处理(文件)模式。
此算法可以针对IL、LRA和最大真实峰值。在动态模式中,为了准确检测真实峰值,音频流将被升采样到192 kHz。
使用-ar选项或aresample过滤器显式设置输出采样率。
滤镜接受以下选项:
- I, i
设置集成响度目标。 范围为-70.0到-5.0。默认值为-24.0。
- LRA, lra
设置响度范围目标。 范围为1.0到50.0。默认值为7.0。
- TP, tp
设置最大真实峰值。 范围为-9.0到+0.0。默认值为-2.0。
- measured_I, measured_i
输入文件的测量集成响度。 范围为-99.0到+0.0。
- measured_LRA, measured_lra
输入文件的测量响度范围。 范围为0.0到99.0。
- measured_TP, measured_tp
输入文件的测量真实峰值。 范围为-99.0到+99.0。
- measured_thresh
输入文件的测量阈值。 范围为-99.0到+0.0。
- offset
设置偏移增益。在真实峰值限制器之前应用增益。 范围为-99.0到+99.0。默认值为+0.0。
- linear
通过线性缩放源音频进行归一化。
measured_I,measured_LRA,measured_TP, 和measured_thresh必须都被指定。目标响度范围不应低于源响度范围,集成响度的变化不应导致真实峰值超过目标TP。如果不满足任何这些条件,归一化模式将恢复为动态。 选项包括true或false。默认值为true.- dual_mono
将单声道输入文件视为“双声道”。如果单声道文件旨在立体声系统上播放,其EBU R128测量将会在感知上出现错误。 如果设置为
true,此选项将补偿这种效果。 多声道输入文件不会受此选项影响。 选项为true或false。默认值为false。- print_format
设置统计信息的打印格式。选项为总结、json或无。 默认值为无。
36.98 lowpass
应用具有3dB截止频率的低通滤波器。 滤波器可以是单极或双极(默认)。 滤波器每极每倍频程衰减6dB(每极每十倍频程衰减20dB)。
滤镜接受以下选项:
- frequency, f
设置频率,单位为Hz。默认值为500。
- poles, p
设置极点数量。默认值为2。
- width_type, t
设置用于指定滤波器频带宽度的方法。
- h
赫兹
- q
Q因子
- o
倍频程
- s
斜率
- k
千赫
- width, w
用宽度类型单位指定滤波器的频带宽度。 仅适用于双极滤波器。 默认值是0.707q,提供巴特沃斯响应。
- mix, m
设置输出中使用过滤信号的程度。默认值为1。 范围在0到1之间。
- channels, c
指定需要过滤的通道,默认情况下所有可用通道都会被过滤。
- normalize, n
规范化双二阶系数,默认情况下禁用。 启用它将使响应在直流处归一化到0dB。
- transform, a
设置IIR滤波器变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- precision, r
设置过滤精度。
- auto
根据环绕滤波器自动选择样本格式。
- s16
始终使用有符号16位。
- s32
始终使用有符号32位。
- f32
始终使用浮点32位。
- f64
始终使用浮点64位。
- block_size, b
设置反向IIR处理使用的块大小。如果此值设置得足够高 (高于当接近零值时截断的脉冲响应长度),过滤将成为线性相位, 否则如果设置不足,则会产生明显伪影。
注意,当设置为非零值时,滤波延迟将准确等于这个样本数量。
36.98.1 示例
- 仅对LFE通道低通,如果LFE不存在则不执行任何操作:
lowpass=c=LFE
36.98.2 命令
此滤镜支持以下命令:
- frequency, f
更改低通频率。 命令语法为:"频率"
- width_type, t
更改低通宽度类型。 命令语法为:"宽度类型"
- width, w
更改低通宽度。 命令语法为:"宽度"
- mix, m
更改低通混合。 命令语法为:"混合"
36.99 lv2
加载LV2(LADSPA版本2)插件。
要启用此滤波器的编译,您需要使用以下配置FFmpeg:--enable-lv2.
- plugin, p
指定插件URI。可能需要转义’:’。
- controls, c
设置通过’|’分隔的控制列表,这些控制是一个或多个浮点值, 决定已加载插件的行为(例如延迟、阈值或增益)。 如果controls被设置为
help,所有可用控制及其有效范围都将被打印。- sample_rate, s
指定采样率,默认为44100。仅在插件没有输入时使用。
- nb_samples, n
设置每个输出帧每通道的样本数,默认值为1024。 仅在插件没有输入时使用。
- duration, d
设置来源音频的最短持续时间。参见(ffmpeg-utils) 在ffmpeg-utils(1)手册中的时间持续时间部分了解可接受的语法。 注意,生成的持续时间可能会比指定的持续时间长, 因为生成的音频总是在完整帧末端截断。 如果未指定或者表达的持续时间为负,音频将会无限生成。 仅在插件没有输入时使用。
36.99.1 示例
- 应用Calf的低音增强插件:
lv2=p=http\\\\://calf.sourceforge.net/plugins/BassEnhancer:c=amount=2
- 应用Calf的黑胶插件:
lv2=p=http\\\\://calf.sourceforge.net/plugins/Vinyl:c=drone=0.2|aging=0.5
- 应用ArtyFX的比特压碎器插件:
lv2=p=http\\\\://www.openavproductions.com/artyfx#bitta:c=crush=0.3
36.99.2 命令
此滤镜支持所有由插件导出的选项作为命令。
36.100 mcompand
多频段压缩或扩展音频的动态范围。
输入音频通过4阶Linkwitz-Riley IIR滤波器划分为多个频段。 这类似于扬声器的分频器,当没有压缩器作用时会产生平滑的频率响应。
接受以下参数:
- args
此选项语法为: 攻击,衰减,[攻击,衰减..] 柔和拐点 分频频率 [延迟 [初始音量 [增益]]] | 攻击,衰减 ... 有关每项的解释,请参见compand滤镜文档。
36.101 pan
使用特定增益水平混合通道。滤镜接受输出通道布局,后接一组通道定义。
此滤镜还设计为高效重新映射音频流的通道。
滤镜接受如下形式的参数: "l|输出定义|输出定义|..."
- l
输出通道布局或通道数量
- outdef
输出通道规格,格式如下: "输出名称=[增益*]输入名称[(+-)[增益*]输入名称...]"
- out_name
定义输出声道,可以是声道名称(如FL, FR等)或声道编号(如c0, c1等)。
- gain
声道的乘法系数,1表示音量保持不变。
- in_name
要使用的输入声道,具体详见out_name;无法混合命名和编号的输入声道。
如果在声道规范中将‘=’替换为‘<’,则规范的增益将重新归一化,使总增益为1,从而避免剪切噪声。
36.101.1 混音示例
例如,如果您想将立体声下混为单声道,但为左声道增加权重:
pan=1c|c0=0.9*c0+0.1*c1
一个自动适用于3、4、5和7声道环绕的自定义立体声下混:
pan=stereo| FL < FL + 0.5*FC + 0.6*BL + 0.6*SL | FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
注意ffmpeg集成了默认的下混(和上混)系统,应该优先使用(参见“-ac”选项),除非您有非常具体的需求。
36.101.2 重映射示例
声道重映射将仅在以下情况下有效:
- 增益系数为0或1,
- 每个输出声道仅有一个输入,
如果满足所有这些条件,滤镜将通知用户("检测到纯声道映射"),并使用优化和无损的方法进行重映射。
例如,如果您有一个5.1源并希望通过丢弃额外声道获得立体声音频流:
pan="stereo| c0=FL | c1=FR"
给定同一源,您也可以交换前左和前右声道,同时保持输入声道布局:
pan="5.1| c0=c1 | c1=c0 | c2=c2 | c3=c3 | c4=c4 | c5=c5"
如果输入是立体声音频流,您可以静音前左声道(仍保持立体声声道布局):
pan="stereo|c1=c1"
仍然使用立体声音频流输入,您可以将右声道复制到前左和右声道:
pan="stereo| c0=FR | c1=FR"
36.102 重播增益
重播增益扫描滤镜。此滤镜以音频流为输入,并保持输出不变。
在过滤结束时,它显示track_gain和track_peak.
滤镜接受以下导出的只读选项:
- track_gain
流结束时导出的音轨增益,以分贝显示。
- track_peak
流结束时导出的音轨峰值。
36.103 重采样
转换音频样本格式、采样率和声道布局。 不适合直接使用。
36.104 橡皮带
使用librubberband应用时间拉伸和音调移位。
为了启用此滤镜的编译,您需要使用以下配置选项设置FFmpeg:--enable-librubberband.
滤镜接受以下选项:
- tempo
设置节奏缩放因子。
- pitch
设置音调缩放因子。
- transients
设置瞬态检测器。 可能的值为:
- 清晰
- 混合
- 平滑
- detector
设置检测器。 可能的值为:
- 复合
- 打击乐光
- 柔和
- phase
设置相位。 可能的值为:
- 层流
- 独立
- window
设置处理窗口大小。 可能的值为:
- 标准
- 短
- 长
- smoothing
设置平滑。 可能的值为:
- 关闭
- 开启
- formant
在移调时启用格式保留。 可能的值为:
- 移调
- 保留
- pitchq
设置音高质量。 可能的值为:
- 质量
- 速度
- 一致性
- channels
设置声道。 可能的值为:
- 分离
- 一起
36.104.1 命令
此滤镜支持以下命令:
- tempo
更改滤镜节奏缩放因子。 命令语法为:"节奏"
- pitch
更改滤镜音调缩放因子。 命令语法为:"音调"
36.105 侧链压缩
此滤镜的行为类似于普通压缩器,但能够使用第二输入信号对检测到的信号进行压缩。 需要两个输入流,并返回一个输出流。 第一个输入流将根据第二个流信号进行处理。 过滤后的信号随后可以在后续处理阶段与其他滤镜结合过滤。参见声道混音以及音频合并滤镜。
滤镜接受以下选项:
- level_in
设置输入增益。默认值为1。范围为0.015625到64。
- mode
设置压缩器操作模式。可以是
upward或downward。 默认值为downward.- threshold
如果第二流的信号超过此级别,它将影响第一流的增益减少。 默认值为0.125。范围为0.00097563到1。
- ratio
设置信号减少的比例。1:2表示如果信号超过阈值4dB,它将在减少后仅超出2dB。 默认值为2。范围为1到20。
- attack
信号需要超过阈值的毫秒数,之后才开始减少增益。默认值为20。范围为0.01到2000。
- release
信号需要低于阈值的毫秒数,之后才开始增加减少效果。默认值为250。范围为0.01到9000。
- makeup
设置处理后信号将被放大的量。默认值为1。范围为1到64。
- knee
在接近阈值时,设置如何柔和地进入增益减少。默认值为2.82843。范围为1到8。
- link
选择
average在侧链流的所有声道之间的级别,或侧链流的更响亮的(maximum)声道影响减少。 默认值为average.- detection
侧链信号应该是
peak的准确信号,还是rms的RMS信号。 默认值为rms的RMS信号,通常更平滑。- level_sc
设置侧链增益。默认值为1。范围为0.015625到64。
- mix
设置在输出中使用压缩信号的多少。默认值为1。 范围为0到1。
36.105.1 命令
此滤镜支持上述所有选项作为命令.
36.105.2 示例
- 完整的ffmpeg示例,使用两个音频输入,第一输入根据第二输入信号进行压缩,然后压缩后的信号与第二输入合并:
ffmpeg -i main.flac -i sidechain.flac -filter_complex "[1:a]asplit=2[sc][mix];[0:a][sc]sidechaincompress[compr];[compr][mix]amerge"
36.106 侧链门
侧链门的行为类似于普通(宽带)门,但能够在发送到增益减少阶段之前过滤检测到的信号。 通常,门使用全范围信号以检测是否超过阈值。 例如:如果从侧链信号中切除所有低频,门将仅在没有足够高频出现时减少音轨音量。 使用这种技术,您可以减少自然鼓的共鸣或去除重度失真吉他中静音笔触的“杂音”。 它需要两个输入流,并返回一个输出流。 第一个输入流取决于第二个流信号进行处理。
滤镜接受以下选项:
- level_in
设置过滤前的输入电平。 默认值为1,允许范围为0.015625到64。
- mode
设置操作模式。可以是
upward或downward。 默认值为downward。如果设置为upward模式,信号的高频部分将被放大,在向上的动态范围内扩展。 否则,在downward的情况下,信号的低频部分将被减少。- range
设置当信号低于阈值时的增益减少水平。 默认值为0.06125。允许范围为0到1。 将其设置为0可禁用减少,此时滤波器会像扩展器一样工作。
- threshold
如果信号升到超过此级别,增益减少将被释放。 默认值为0.125,允许范围为0到1。
- ratio
设置信号减少的比率。 默认值为2,允许范围为1到9000。
- attack
信号必须上升超过阈值的毫秒数,之后增益减少停止。 默认值为20毫秒,允许范围为0.01到9000。
- release
信号必须下降到低于阈值的毫秒数,之后减少会再次增加。 默认值为250毫秒,允许范围为0.01到9000。
- makeup
设置处理后信号的放大量。 默认值为1,允许范围为1到64。
- knee
调节阈值周围的锐角以更柔和地进入增益减少。 默认值为2.828427125,允许范围为1到8。
- detection
选择是使用确切的信号进行检测还是使用类似RMS的信号。 默认值为rms。可以是peak或rms。
- link
选择是所有通道的平均电平还是响亮通道的电平影响减少。 默认值为average。可以是average或maximum。
- level_sc
设置侧链增益。默认值为1,范围为0.015625到64。
36.106.1 命令
此过滤器支持上述所有选项作为命令.
36.107 静音检测
检测音频流中的静音。
当输入的音频音量小于或等于一个噪声容许值,且持续时间大于或等于最小检测噪声持续时间时,此过滤器会记录一条消息。
打印的时间和持续时间以秒为单位。lavfi.silence_start或lavfi.silence_start.X元数据键会在时间戳等于或超过检测持续时间的第一个帧上设置,该时间戳包含静音开始的第一帧时间。
在lavfi.silence_duration或lavfi.silence_duration.X和lavfi.silence_end或lavfi.silence_end.X的元数据键会在静音后的第一个帧上设置。如果mono启用,并且每个通道单独评估,则会使用带后缀的键,并且.X对应于通道号。X corresponds to the channel number.
过滤器接受以下选项:
- noise, n
设置噪声容许度。可以以dB为单位(如果指定值后加 'dB')或振幅比指定。默认值为-60dB或0.001。
- duration, d
设置静音通知的持续时间(默认2秒)。请参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分以获取可接受的语法。
- mono, m
单独处理每个通道,而不是组合处理。默认禁用。
36.107.1 示例
- 检测5秒静音,噪声容许度为-50dB:
silencedetect=n=-50dB:d=5
- 完整示例,使用
ffmpeg检测噪声容许度为0.0001的静音silence.mp3:ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
36.108 去除静音
从音频的开头、中间或结尾移除静音。
过滤器接受以下选项:
- start_periods
该值用于指示是否应从音频开头移除静音。为零表示不从头部移除静音。当指定非零值时,它会从头开始移除音频,直到找到非静音。 通常,从音频开头移除静音时start_periods为
1,但可以增加到更高值以移除所有音频直到找到特定数量的非静音周期。 默认值为0.- start_duration
指定检测到非静音后停止修剪音频的时间量。通过增加持续时间,可能会将噪声爆发视为静音而去掉。 默认值为
0.- start_threshold
指示应将哪个样本值视为静音。对于数字音频,值为
0可能足够,但对于模拟录音,您可能需要增加该值以适应背景噪声。 可以以dB为单位(如果指定值后加'dB')或振幅比指定。默认值为0.- start_silence
指定修整后保留下来的开头静音的最大持续时间。默认值为0,表示移除检测到的所有静音样本。
- start_mode
指定多通道音频开头静音检测结束的模式。 可以是any或all。默认值为any。 当为any时,任何通道的任何检测为非静音的样本都会触发从音频流开头的静音修剪结束。 当为all时,仅当每个通道的每个样本都检测为非静音时,才会触发从音频流开头的静音修剪结束,使用范围有限。
- stop_periods
设置从音频结尾修剪静音的计数。指定正值时,它会在找到指定的静音周期后修剪音频。 要从文件中删除中间静音,指定一个stop_periods为负值。该值随后被视为正值并用于指示效果应按stop_periods指定内容重新开始处理,这适合于移除音频中间的静音段。 默认值为
0.- stop_duration
指定必须存在的静音持续时间,使音频不再被复制。通过指定更长的持续时间,可以在音频中保留想要的静音。 默认值为
0.- stop_threshold
与start_threshold相同,但用于从音频结尾修剪静音。 可以以dB为单位(如果指定值后加'dB')或振幅比指定。默认值为
0.- stop_silence
指定修整后保留下来的结尾静音的最大持续时间。默认值为0,表示移除检测到的所有静音样本。
- stop_mode
指定在多通道音频开始后检测静音开始的模式。 可以是any或all。默认值为all。 当为any时,任何通道中的任何检测为静音的样本都会触发从音频流开头修剪静音开始,使用范围有限。 当为all时,仅当每个通道的每个样本都检测为静音时,才会触发从音频流开头修剪静音开始。
- detection
设置如何检测静音。
- avg
移动窗口中样本绝对值的平均值。
- rms
移动窗口中样本绝对值的平方均值。
- peak
移动窗口中样本绝对值的最大值。
- median
移动窗口中样本绝对值的中值。
- ptp
移动窗口中样本最大峰值与最小峰值差值的绝对值。
- dev
移动窗口中样本值的标准差。
默认值为
rms.- window
设置用于计算窗口大小(以样本数计算)的持续时间(以秒为单位)来检测静音。如果使用
0,将有效禁用任何窗口并仅使用每个通道的单个样本进行静音检测。 在这种情况下,可能还需要将start_silence和/或stop_silence设置为非零值,并将start_duration和/或stop_duration设置为非零值。 默认值为0.02允许的范围是从0到10.- timestamp
设置每个音频帧输出时间戳的处理模式。
- write
完整时间戳重写,仅保留第一个输出帧的开始时间。
- copy
非丢弃帧的时间戳与输入音频帧保持一致。
默认值是
write.
36.108.1 示例
- 以下示例显示如何使用此过滤器启动不包含录制开始时通常发生的延迟部分的录音:
silenceremove=start_periods=1:start_duration=5:start_threshold=0.02
- 修剪音频中从头到尾的所有静音部分,其中静音时间超过 1 秒:
silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-90dB
- 使用峰值检测,从音频的头到尾修剪所有数字静音样本,其中数字静音时间超过 0 样本,并且在流中的所有通道中检测到数字静音在相同位置:
silenceremove=window=0:detection=peak:stop_mode=all:start_mode=all:stop_periods=-1:stop_threshold=0
- 修剪音频中从头到尾的每个第二个静音区间,其中每个静音区间的静音时间超过 1 秒:
silenceremove=stop_periods=-2:stop_duration=1:stop_threshold=-90dB
- 与上类似,但保留每个修剪的静音区间的最多 0.5 秒静音:
silenceremove=stop_periods=-2:stop_duration=1:stop_threshold=-90dB:stop_silence=0.5
- 与上类似,但保留音频开始处最多 1.5 秒的静音:
silenceremove=stop_periods=-2:stop_duration=1:stop_threshold=-90dB:stop_silence=0.5:start_periods=1:start_duration=1:start_silence=1.5:stop_threshold=-90dB
36.108.2 命令
此过滤器支持一些上述选项作为命令.
36.109 sofalizer
SOFAlizer 使用头相关传输函数 (HRTFs) 创建虚拟扬声器,供用户通过耳机进行双耳收听(支持最多 9 声道的音频格式)。 HRTFs 储存在 SOFA 文件中(参见http://www.sofacoustics.org/了解更多数据库)。 SOFAlizer 由奥地利科学院声学研究所 (ARI) 开发。
要启用此过滤器的编译,您需要使用以下配置 FFmpeg--enable-libmysofa.
该过滤器接受以下选项:
- sofa
设置用于渲染的 SOFA 文件。
- gain
设置应用于音频的增益。值为 dB。默认值为 0。
- rotation
设置虚拟扬声器的旋转角度(单位:度)。默认值为 0。
- elevation
设置虚拟扬声器的仰角(单位:度)。默认值为 0。
- radius
设置近场 HRTFs 中扬声器与听者之间的距离(单位:米)。默认值为 1。
- type
设置处理类型,可以是时间或频率. 时间以时间域处理音频,处理速度慢。频率以频率域处理音频,处理速度快。 默认值是频率.
- speakers
设置虚拟扬声器的自定义位置。本选项的语法是:<CH> <AZIM> <ELEV>[|<CH> <AZIM> <ELEV>|...]。 每个虚拟扬声器描述包括短通道名称、方位角和仰角值(单位:度)。 每个虚拟扬声器描述由符号 '|' 分隔。 例如要覆盖前左和前右通道位置,可使用:'speakers=FL 45 15|FR 345 15'。 无法识别的通道名称描述将被忽略。
- lfegain
设置 LFE 通道的自定义增益。值为 dB。默认值为 0。
- framesize
以样本数设置自定义帧大小。默认值为 1024。 允许范围是从 1024 到 96000。仅在选项 'type’ 被设置为频率.
- normalize
在导入 SOFA 文件时是否对所有 IRs 进行归一化。 默认情况下是启用的。
- interpolate
如果不是精确匹配位置,是否使用邻居 IRs 插值最近的 IRs。 默认情况下是禁用的。
- minphase
在加载 SOFA 文件时对所有 IRs 实施最小相位变换。 默认情况下是禁用的。
- anglestep
设置邻居搜索角度步长。仅在选项插值启用时使用。
- radstep
设置邻居搜索半径步长。仅在选项插值启用时使用。
36.109.1 示例
- 使用 ClubFritz6 SOFA 文件:
sofalizer=sofa=/path/to/ClubFritz6.sofa:type=freq:radius=1
- 使用 ClubFritz12 SOFA 文件并设置更大的半径和较小的旋转:
sofalizer=sofa=/path/to/ClubFritz12.sofa:type=freq:radius=2:rotation=5
- 与上类似,但包含自定义的扬声器位置(前左、前右、后左、后右)并且具有自定义增益:
"sofalizer=sofa=/path/to/ClubFritz6.sofa:type=freq:radius=2:speakers=FL 45|FR 315|BL 135|BR 225:gain=28"
36.110 speechnorm
语音归一化过滤器。
该过滤器根据阈值扩展或压缩音频样本的每半个周期(局部样本组均高于或低于零并在两个最近的零交叉之间),使音频在所控制的选项条件下达到目标峰值。
该过滤器接受以下选项:
- peak, p
设置扩展目标峰值。这指定了归一化音频输入的最大允许绝对幅度级别。 默认值为 0.95。允许范围是从 0.0 到 1.0。
- expansion, e
设置最大扩展系数。允许范围是从 1.0 到 50.0。默认值为 2.0。 此选项控制最大局部半周期样本扩展。最大扩展将使局部峰值达到目标峰值但不得超过,并且新旧峰值的比率不得超过此选项值。
- compression, c
设置最大压缩系数。允许范围是从 1.0 到 50.0。默认值为 2.0。 仅当选项threshold被设置为大于 0.0 的值时使用,在此情况下,当局部峰值低于或等于threshold设定值时,该峰值半周期下的所有样本将根据当前压缩系数进行压缩。
- threshold, t
设置阈值值。默认值为 0.0。允许范围是从 0.0 到 1.0。 此选项决定哪些样本半周期会被压缩或扩展。 任何局部峰值低于或等于此值的样本半周期会根据当前压缩系数进行压缩;否则, 如果高于阈值,这些样本会根据扩展系数进行扩展以达到目标峰值。
- raise, r
设置每个样本半周期扩展提升量。默认值为 0.001。 允许范围是从 0.0 到 1.0。此选项控制扩展系数增长的速度,直到它达到expansion设定值。 如果此值设置过高,可能会导致失真。
- fall, f
设置每个样本半周期压缩提升量。默认值为 0.001。 允许范围是从 0.0 到 1.0。此选项控制压缩系数增长的速度,直到它达到compression设定值。
- channels, h
指定要过滤的通道,默认情况下过滤所有可用通道。
- invert, i
启用反向过滤,默认情况下为禁用。这将反转阈值选项的解释。 启用时,任何样本半周期的局部峰值低于或等于阈值选项会被扩展, 否则会被压缩。threshold option. When enabled any half-cycle of samples with their local peak value below or same as threshold option will be expanded otherwise it will be compressed.
- link, l
在计算应用于每个过滤通道样本的增益时链接通道,默认情况下为禁用。 禁用时,每个过滤通道的增益计算是独立的,启用时,每个过滤通道增益可能值的最小值用于过滤。
- rms, m
设置扩展目标 RMS 值。这指定了归一化音频输入的最大允许 RMS 级别。 默认值为 0.0,因此禁用。允许范围是从 0.0 到 1.0。
36.110.1 命令
此过滤器支持所有上述选项作为命令.
36.110.2 示例
- 微弱且缓慢的放大:
speechnorm=e=3:r=0.00001:l=1
- 适度且缓慢的放大:
speechnorm=e=6.25:r=0.00001:l=1
- 强劲且快速的放大:
speechnorm=e=12.5:r=0.0001:l=1
- 非常强劲且快速的放大:
speechnorm=e=25:r=0.0001:l=1
- 极限且快速的放大:
speechnorm=e=50:r=0.0001:l=1
36.111 stereotools
该过滤器提供一些处理立体声信号的实用工具,用于将 M/S 立体声录音转换为 L/R 信号并可控制参数, 或扩展母轨的立体镜像。
该过滤器接受以下选项:
- level_in
设置过滤前两个声道的输入电平。默认值为 1。 允许范围是从 0.015625 到 64。
- level_out
设置过滤后两个声道的输出电平。默认值为 1。 允许范围是从 0.015625 到 64。
- balance_in
设置两个声道之间的输入平衡。默认值为 0。 允许范围是从 -1 到 1。
- balance_out
设置两个声道之间的输出平衡。默认值为 0。 允许范围是从 -1 到 1。
- softclip
启用软剪辑。此功能会导致模拟失真,而不是刺耳的数字 0dB 剪辑。 默认情况下禁用。
- mutel
静音左声道。默认情况下禁用。
- muter
静音右声道。默认情况下禁用。
- phasel
改变左声道的相位。默认情况下禁用。
- phaser
改变右声道的相位。默认情况下禁用。
- mode
设置立体声模式。可用值是:
- ‘lr>lr’
左/右到左/右,默认值。
- ‘lr>ms’
左/右到中/侧。
- ‘ms>lr’
中/侧到左/右。
- ‘lr>ll’
左/右到左/左。
- ‘lr>rr’
左/右 转为 右/右。
- ‘lr>l+r’
左/右 转为 左 + 右。
- ‘lr>rl’
左/右 转为 右/左。
- ‘ms>ll’
中/侧 转为 左/左。
- ‘ms>rr’
中/侧 转为 右/右。
- ‘ms>rl’
中/侧 转为 右/左。
- ‘lr>l-r’
左/右 转为 左 - 右。
- slev
设置侧信号的电平。默认值为 1。 允许范围是 0.015625 到 64。
- sbal
设置侧信号的平衡。默认值为 0。 允许范围是 -1 到 1。
- mlev
设置中信号的电平。默认值为 1。 允许范围是 0.015625 到 64。
- mpan
设置中信号的声相。默认值为 0。 允许范围是 -1 到 1。
- base
设置单声道与反相通道之间的立体声基。默认值为 0。 允许范围是 -1 到 1。
- delay
设置左声道相对于右声道以及右声道相对于左声道的延迟时间(以毫秒为单位)。默认值为 0。 允许范围是 -20 到 20。
- sclevel
设置 S/C 电平。默认值为 1。 允许范围是 1 到 100。
- phase
设置立体声相位(以度为单位)。默认值为 0。 允许范围是 0 到 360。
- bmode_in, bmode_out
设置输入平衡/输出平衡选项的平衡模式。
可以是以下选项之一:
- ‘balance’
经典平衡模式。一次衰减一个通道。 增益最大到 1。
- ‘amplitude’
类似于上述经典模式,但增益最大到 2。
- ‘power’
等功率分配,从 -6dB 到 +6dB 范围。
36.111.1 命令
该过滤器支持上述所有选项作为命令.
36.111.2 示例
- 应用卡拉OK效果:
stereotools=mlev=0.015625
- 将中/侧信号转换为左/右:
"stereotools=mode=ms>lr"
36.112 立体声宽化
此过滤器通过抑制两个通道共有的信号,并将左右信号互相延迟,以增强立体声效果,从而加宽立体声效果。
该过滤器接受以下选项:
- delay
左右信号互相延迟的时间(以毫秒为单位)。 默认值为 20 毫秒。
- feedback
延迟信号的增益量。 使右通道输出具有左信号的延迟效果,反之亦然,从而产生扩展效果。 默认值为 0.3。
- crossfeed
具有反相的左右交叉馈送。这有助于抑制单声道信号。 如果值为 1,将取消两个通道共有的所有信号。 默认值为 0.3。
- drymix
设置原始通道输入信号的电平。 默认值为 0.8。
36.112.1 命令
该过滤器支持上述所有选项,除了delay作为命令.
36.113 超级均衡器
应用18频段均衡器。
该滤波器接受以下选项:
- 1b
设置 65Hz 频段增益。
- 2b
设置 92Hz 频段增益。
- 3b
设置 131Hz 频段增益。
- 4b
设置 185Hz 频段增益。
- 5b
设置 262Hz 频段增益。
- 6b
设置 370Hz 频段增益。
- 7b
设置 523Hz 频段增益。
- 8b
设置 740Hz 频段增益。
- 9b
设置 1047Hz 频段增益。
- 10b
设置 1480Hz 频段增益。
- 11b
设置 2093Hz 频段增益。
- 12b
设置 2960Hz 频段增益。
- 13b
设置 4186Hz 频段增益。
- 14b
设置 5920Hz 频段增益。
- 15b
设置 8372Hz 频段增益。
- 16b
设置 11840Hz 频段增益。
- 17b
设置 16744Hz 频段增益。
- 18b
设置 20000Hz 频段增益。
36.114 环绕
应用音频环绕上混过滤器。
此过滤器允许从音频流产生多声道输出。
该过滤器接受以下选项:
- chl_out
设置输出通道布局。默认是5.1.
- chl_in
设置输入通道布局。默认是立体声.
- level_in
设置输入音量电平。默认是1.
- level_out
设置输出音量电平。默认是1.
- lfe
如果输出通道布局具有 LFE 通道,则启用 LFE 通道输出。默认情况下启用。
- lfe_low
设置 LFE 低频截止频率。默认是128Hz。
- lfe_high
设置 LFE 高频截止频率。默认是256Hz。
- lfe_mode
设置 LFE 模式,可以是添加或减。默认是添加。 在添加模式下,从输入音频创建 LFE 通道并添加到输出中。 在减模式下,从输入音频创建 LFE 通道并添加到输出中,但同时从所有非 LFE 输出通道中减去输出 LFE 通道。
- smooth
设置时间平滑度强度,用于在时间上逐渐改变立体声声音的转换因子。 允许范围从0.0到1.0。 对于focus选项值大于0.0时,有助于提高输出质量。 默认是0.0。只有在此范围内且不在边界上的值才有效。
- angle
设置立体声环绕转换的角度。 允许范围从0到360。 默认是90.
- focus
设置立体声环绕转换的聚焦范围。 允许范围从-1至1。 默认值是0.
- fc_in
设置前置中声道输入音量。默认值是1.
- fc_out
设置前置中声道输出音量。默认值是1.
- fl_in
设置前置左声道输入音量。默认值是1.
- fl_out
设置前置左声道输出音量。默认值是1.
- fr_in
设置前置右声道输入音量。默认值是1.
- fr_out
设置前置右声道输出音量。默认值是1.
- sl_in
设置侧左声道输入音量。默认值是1.
- sl_out
设置侧左声道输出音量。默认值是1.
- sr_in
设置侧右声道输入音量。默认值是1.
- sr_out
设置侧右声道输出音量。默认值是1.
- bl_in
设置后置左声道输入音量。默认值是1.
- bl_out
设置后置左声道输出音量。默认值是1.
- br_in
设置后置右声道输入音量。默认值是1.
- br_out
设置后置右声道输出音量。默认值是1.
- bc_in
设置后置中声道输入音量。默认值是1.
- bc_out
设置后置中声道输出音量。默认值是1.
- lfe_in
设置低频增强(LFE)输入音量。默认值是1.
- lfe_out
设置低频增强(LFE)输出音量。默认值是1.
- allx
设置立体声图像在所有通道上沿X轴的扩展使用范围。 允许范围是从-1至15。 默认情况下,该值为负-1,因此未使用。
- ally
设置立体声图像在所有通道上沿Y轴的扩展使用范围。 允许范围是从-1至15。 默认情况下,该值为负-1,因此未使用。
- fcx, flx, frx, blx, brx, slx, srx, bcx
设置立体声图像在每个通道上沿X轴的扩展使用范围。 允许范围是从0.06至15。 默认值是0.5.
- fcy, fly, fry, bly, bry, sly, sry, bcy
设置立体声图像在每个通道上沿Y轴的扩展使用范围。 允许范围是从0.06至15。 默认值是0.5.
- win_size
设置窗口大小。允许范围是从1024至65536。默认大小是4096.
- win_func
设置窗口函数。
它接受以下值:
- ‘rect’
- ‘bartlett’
- ‘hann, hanning’
- ‘hamming’
- ‘blackman’
- ‘welch’
- ‘flattop’
- ‘bharris’
- ‘bnuttall’
- ‘bhann’
- ‘sine’
- ‘nuttall’
- ‘lanczos’
- ‘gauss’
- ‘tukey’
- ‘dolph’
- ‘cauchy’
- ‘parzen’
- ‘poisson’
- ‘bohman’
- ‘kaiser’
默认值是
hann.- overlap
设置窗口重叠值。如果设置为1,则选择窗口函数的推荐重叠值。 默认值是
0.5.
36.115 倾斜架
使用二极架式滤波器通过类似于标准高保真音响音调控制的响应 提升或削减音频的低频,并削减或提升高频。 这也被称为架式均衡(EQ)。
过滤器接受以下选项:
- gain, g
设置0 Hz的增益。推荐范围约为-20 (大幅削减)到+20(大幅提升)。 使用正增益时需要注意削波问题。
- frequency, f
设置滤波器的中心频率,可用于扩展或减少要提升或削减的 频率范围。默认值是
3000Hz。- width_type, t
设置指定滤波器带宽的方法。
- h
Hz
- q
Q因子
- o
八度
- s
斜率
- k
千赫兹
- width, w
确定滤波器架过渡的陡峭程度。
- poles, p
设置极点数目。默认是2。
- mix, m
过滤后的信号在输出中的使用量。默认值是1。 范围为0到1之间。
- channels, c
指定要过滤的声道,默认对所有可用声道进行过滤。
- normalize, n
归一化双二次滤波器系数,默认关闭。 启用会将直流响应幅度归一化为0dB。
- transform, a
设置IIR滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- precision, r
设置过滤精度。
- auto
根据环绕滤波器选择自动采样格式。
- s16
始终使用有符号16位。
- s32
始终使用有符号32位。
- f32
始终使用浮点32位。
- f64
始终使用浮点64位。
- block_size, b
设置用于反向IIR处理的块大小。如果该值设置得足够高 (高于当接近零值时截断的脉冲响应长度)过滤处理 将成为线性相位,否则如果不足够大将会产生严重的伪影。
注意,当设置为非零值时,滤波延迟将恰好为该数量的样本。
36.115.1 命令
此过滤器支持某些选项作为命令.
36.116 高音,高架
使用二极架式滤波器通过类似于标准 高保真音响音调控制的响应提升或削减音频的高音(高频)。 这也被称为架式均衡(EQ)。
过滤器接受以下选项:
- gain, g
设置~22 kHz和奈奎斯特频率较低者的增益。 推荐范围约为-20(大幅削减)到+20(大幅提升)。 使用正增益时需要注意削波问题。
- frequency, f
设置滤波器的中心频率,可用于扩展或减少要提升或削减的 频率范围。默认值是
3000Hz。- width_type, t
设置指定滤波器带宽的方法。
- h
Hz
- q
Q因子
- o
八度
- s
斜率
- k
千赫兹
- width, w
确定滤波器架过渡的陡峭程度。
- poles, p
设置极点数目。默认是2。
- mix, m
过滤后的信号在输出中的使用量。默认值是1。 范围为0到1之间。
- channels, c
指定要过滤的声道,默认对所有可用声道进行过滤。
- normalize, n
归一化双二次滤波器系数,默认关闭。 启用会将直流响应幅度归一化为0dB。
- transform, a
设置IIR滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- precision, r
设置过滤精度。
- auto
根据环绕滤波器选择自动采样格式。
- s16
始终使用有符号16位。
- s32
始终使用有符号32位。
- f32
始终使用浮点32位。
- f64
始终使用浮点64位。
- block_size, b
设置用于反向IIR处理的块大小。如果该值设置得足够高 (高于当接近零值时截断的脉冲响应长度)过滤处理 将成为线性相位,否则如果不足够大将会产生严重的伪影。
注意,当设置为非零值时,滤波延迟将恰好为该数量的样本。
36.116.1 命令
该过滤器支持以下命令:
- frequency, f
更改高音频率。 命令的语法是: "频率"
- width_type, t
更改高音width_type。 命令的语法是:"width_type"
- width, w
更改高音宽度。 命令的语法是:"宽度"
- gain, g
更改高音增益。 命令的语法是:"增益"
- mix, m
更改高音混合。 命令的语法是:"混合"
36.117 颤音
正弦波的振幅调制。
过滤器接受以下选项:
- f
调制频率单位是赫兹。亚谐波范围(20Hz或更低)的调制频率将产生颤音效果。 通过指定高于20Hz的调制频率,该滤镜也可以用作环形调制器。 范围是0.1 - 20000.0。默认值是5.0 Hz。
- d
调制深度的百分比值。范围是0.0 - 1.0。 默认值是0.5。
36.118 颤音调制
正弦波相位调制。
过滤器接受以下选项:
- f
调制频率单位是赫兹。 范围是0.1 - 20000.0。默认值是5.0 Hz。
- d
调制深度的百分比值。范围是0.0 - 1.0。 默认值是0.5。
36.119 虚拟低音
应用音频虚拟低音滤波器。
此过滤器接受立体声输入并生成带低音效果(2.1声道)的输出。 新生成的低音增强声道最初从两个立体声声道获得。 此过滤器输出的左前和右前声道与输入中的立体声内容保持不变。
过滤器接受以下选项:
- cutoff
设置虚拟低音的截止频率。默认值为250 Hz。 允许的范围是100到500 Hz。
- strength
设置虚拟低音强度。允许范围是0.5到3。 默认值是3。
36.120 功率音量
调整输入音频的音量。
接受以下参数:
- volume
设置音频音量表达式。
输出值被截短到最大值。
输出音量由以下公式确定:
输出音量 = 音量 * 输入音量
默认值为音量是“1.0”。
- precision
此参数表示数学精度。
它决定了允许的输入采样格式,从而影响音量缩放的精度。
- fixed
8位定点;这将限制输入采样格式为U8、S16和S32。
- float
32位浮点;这将限制输入采样格式为FLT。(默认)
- double
64位浮点;这将限制输入采样格式为DBL。
- replaygain
选择在遇到输入帧中的ReplayGain侧数据时的行为。
- drop
移除ReplayGain侧数据,忽略其内容(默认)。
- ignore
忽略ReplayGain侧数据,但将其保留在帧中。
- track
如果存在,优先选择轨道增益。
- album
如果存在,优先选择专辑增益。
- replaygain_preamp
对选择的replaygain增益应用的前置放大增益(单位dB)。
默认值是replaygain_preamp为0.0。
- replaygain_noclip
通过限制应用的增益来防止削波。
默认值为replaygain_noclip为1。
- eval
设置音量表达式的计算时间。
接受以下值:
- ‘once’
只在过滤器初始化期间计算一次表达式,或者在收到‘volume’命令时。
- ‘frame’
每帧输入音频都重新计算表达式。
默认值是‘once’.
音量表达式可包含以下参数。
- n
帧编号(从零开始)
- nb_channels
通道数
- nb_consumed_samples
过滤器处理的采样数
- nb_samples
当前帧中的采样数量
- pos
文件中原始帧位置;已弃用,请勿使用
- pts
帧PTS(时间戳)
- sample_rate
采样率
- startpts
流的起始PTS
- startt
流的起始时间
- t
帧时间
- tb
时间戳时间基准
- volume
最后设置的音量值
请注意,当eval设置为‘once’时,只有sample_rate和tb变量可用,其他变量将评估为NAN。
36.120.1 命令
此过滤器支持以下命令:
- volume
修改音量表达式。 命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持当前值。
36.120.2 示例
- 将输入音频音量减半:
volume=volume=0.5 volume=volume=1/2 volume=volume=-6.0206dB
在以上例子中,命名键值volume可以省略,例如这样:
volume=0.5
- 使用定点精度将输入音频功率增加6分贝:
volume=volume=6dB:precision=fixed
- 在10秒后音量开始衰退,衰减期为5秒:
volume='if(lt(t,10),1,max(1-(t-10)/5,0))':eval=frame
36.121 音量检测
检测输入视频的音量。
此过滤器没有参数。它仅支持16位有符号整数采样,因此在需要时会进行输入转换。 输入流结束时,将在日志中打印有关音量的统计信息。
尤其会显示平均音量(均方根)、最大音量(按采样计算)以及已注册音量值的直方图起始部分(从最大值到累计的1/1000样本量)。
所有音量数值均以相对于最大PCM值的分贝为单位。
36.121.1 示例
以下是输出的一个摘录:
[Parsed_volumedetect_0 0xa23120] mean_volume: -27 dB [Parsed_volumedetect_0 0xa23120] max_volume: -4 dB [Parsed_volumedetect_0 0xa23120] histogram_4db: 6 [Parsed_volumedetect_0 0xa23120] histogram_5db: 62 [Parsed_volumedetect_0 0xa23120] histogram_6db: 286 [Parsed_volumedetect_0 0xa23120] histogram_7db: 1042 [Parsed_volumedetect_0 0xa23120] histogram_8db: 2551 [Parsed_volumedetect_0 0xa23120] histogram_9db: 4609 [Parsed_volumedetect_0 0xa23120] histogram_10db: 8409
这意味着:
- 均方能量约为-27 dB,或者10^-2.7。
- 最大的采样值为-4 dB,或更精确地介于-4 dB和-5 dB之间。
- 有 6 个样本在 -4 dB,62 个样本在 -5 dB,286 个样本在 -6 dB,等等。
换句话说,将音量提高 +4 dB 不会导致任何样本剪辑,将音量提高 +5 dB 会导致 6 个样本发生剪辑,等等。
37 个音频源
以下是当前可用音频源的描述。
37.1 abuffer
缓冲音频帧,并使其可用于滤波链。
此源主要用于编程目的,特别是通过接口定义。libavfilter/buffersrc.h.
它接受以下参数:
- time_base
将用于提交帧时间戳的时间基准。它必须是浮点数或形式为分子/分母的数字。
- sample_rate
传入音频缓冲区的采样率。
- sample_fmt
传入音频缓冲区的采样格式。可以是采样格式名称,也可以是其对应的整数表示形式(来自 enum AVSampleFormat)。libavutil/samplefmt.h
- channel_layout
传入音频缓冲区的声道布局。可以是源于 channel_layout_map 的声道布局名称,也可以是其对应的整数表示形式(来自宏 AV_CH_LAYOUT_*)。libavutil/channel_layout.c or its corresponding integer representation from the AV_CH_LAYOUT_* macros in libavutil/channel_layout.h
- channels
传入音频缓冲区的声道数量。如果同时指定了声道和声道布局,它们必须一致。
37.1.1 示例
abuffer=sample_rate=44100:sample_fmt=s16p:channel_layout=stereo
将指示源接受 16bit 有符号立体声格式的平面数据,采样率为 44100Hz。由于名称为 "s16p" 的采样格式对应于数字 6,而 "立体声" 声道布局对应值 0x3,这等同于:
abuffer=sample_rate=44100:sample_fmt=6:channel_layout=0x3
37.2 aevalsrc
生成由表达式指定的音频信号。
此源输入一个或多个表达式(每个声道一个),表达式被评估用于生成相应的音频信号。
此源接受以下选项:
- exprs
设置每个声道的以‘|’分隔的表达式列表。如果未指定channel_layout选项,选择的声道布局将取决于提供的表达式数量。否则,最后指定的表达式将应用于剩余的输出声道。
- channel_layout, c
设置声道布局。指定布局中的声道数量必须与指定的表达式数量相等。
- duration, d
设置源音频的最小时长。请参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间时长部分以了解接受的语法。注意,生成音频的实际时长可能大于指定的时长,因为生成的音频总是在完整帧结束时截断。
如果未指定,或指定的时长为负数,则音频将连续生成。
- nb_samples, n
设置每个输出帧的每声道样本数量,默认值为 1024。
- sample_rate, s
指定采样率,默认值为 44100。
在表达式中,每个表达式可以包含以下常量:
- n
评估样本的编号,从 0 开始。
- t
以秒为单位表达的评估样本时间,从 0 开始。
- s
采样率
37.2.1 示例
- 生成静音:
aevalsrc=0
- 生成频率为 440 Hz 的正弦信号,采样率设置为 8000 Hz:
aevalsrc="sin(440*2*PI*t):s=8000"
- 生成两个声道信号,明确指定声道布局(前中 + 后中):
aevalsrc="sin(420*2*PI*t)|cos(430*2*PI*t):c=FC|BC"
- 生成白噪音:
aevalsrc="-2+random(0)"
- 生成调幅信号:
aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
- 在 360 Hz 载波上生成 2.5 Hz 双耳节拍:
aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)"
37.3 afdelaysrc
生成分数延迟 FIR 系数。
生成的流可以与afir滤波器一起过滤音频信号。
该滤波器接受以下选项:
- delay, d
设置分数延迟。默认值为 0。
- sample_rate, r
设置采样率,默认值为 44100。
- nb_samples, n
设置每帧的样本数。默认值为 1024。
- taps, t
设置输出音频流中的滤波器系数数量。默认值为 0。
- channel_layout, c
指定声道布局,可以是表示声道布局的字符串。声道布局的默认值为 "立体声"。
37.4 afireqsrc
生成 FIR 均衡器系数。
生成的流可以与afir滤波器一起过滤音频信号。
该滤波器接受以下选项:
- preset, p
设置均衡器预设。
flat.可用的预设包括:
- ‘custom’
- ‘flat’
- ‘acoustic’
- ‘bass’
- ‘beats’
- ‘classic’
- ‘clear’
- ‘deep bass’
- ‘dubstep’
- ‘electronic’
- ‘hard-style’
- ‘hip-hop’
- ‘jazz’
- ‘metal’
- ‘movie’
- ‘pop’
- ‘r&b’
- ‘rock’
- ‘vocal booster’
- gains, g
设置每个频段的自定义增益。仅在预设选项设置为
custom时使用。增益通过空格分隔,每个增益以 dBFS 为单位设置。默认值为0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.- bands, b
设置用于定义自定义均衡器增益的自定义频段。必须严格递增。仅在预设选项设置为
custom时使用。频段通过空格分隔,每个频段表示频率(Hz)。默认值为25 40 63 100 160 250 400 630 1000 1600 2500 4000 6300 10000 16000 24000.- taps, t
设置输出音频流中的滤波器系数数量。默认值为
4096.- sample_rate, r
设置输出音频流的采样率,默认值为
44100.- nb_samples, n
设置输出音频流中每帧的样本数。默认值为
1024.- interp, i
设置 FIR 均衡器系数的插值方法。可以是
linear或cubic.- phase, h
设置 FIR 滤波器的相位类型。可以是
linear或min:最小相位。默认值为最小相位滤波器。
37.5 afirsrc
使用频率采样方法生成 FIR 系数。
生成的流可以与afir滤波器一起过滤音频信号。
该滤波器接受以下选项:
- taps, t
设置输出音频流中的滤波器系数数量。默认值为 1025。
- frequency, f
设置从中定义幅度和相位的频率点。必须为非递减顺序,首个元素必须为 0,最后一个元素必须为 1。元素之间使用空格分隔。
- magnitude, m
为每个由frequency设置的频率点定义幅度值。值数量必须与频率点数量相同。值之间使用空格分隔。
- phase, p
为每个由frequency设置的频率点定义相位值。值数量必须与频率点数量相同。值之间使用空格分隔。
- sample_rate, r
设置采样率,默认值为 44100。
- nb_samples, n
设置每帧的样本数。默认值为 1024。
- win_func, w
设置窗口函数。默认值为 Blackman 窗口。
37.6 anullsrc
一个空音频源,返回未经处理的音频帧。主要用于作为模板以及分析/调试工具,或者作为过滤器的音频数据源(例如 sox synth filter)。
此源接受以下选项:
- channel_layout, cl
-
指定通道布局,可以是整数或代表通道布局的字符串。默认值为channel_layout是"stereo"(立体声)。
检查libavutil/channel_layout.c中的channel_layout_map定义以了解字符串和通道布局值之间的映射关系。
- sample_rate, r
指定采样率,默认值为44100。
- nb_samples, n
设置每帧请求的采样数。
- duration, d
设置音频的来源持续时间。参见(ffmpeg-utils) ffmpeg-utils(1)手册中的时间持续时间部分获取可接受的语法。
如果未指定,或所表达的持续时间为负,则音频将被认为是无限生成的。
37.6.1 示例
- 将采样率设置为48000 Hz,通道布局设置为AV_CH_LAYOUT_MONO。
anullsrc=r=48000:cl=4
- 使用更显而易见的语法进行相同操作:
anullsrc=r=48000:cl=mono
所有参数都需要显式定义。
37.7 flite
使用libflite库合成语音表达。
若要启用此过滤器的编译,您需要使用以下配置FFmpeg:--enable-libflite.
注意,flite库2.0版本之前的版本不是线程安全的。
过滤器接受以下选项:
- list_voices
如果设置为1,则列出可用语音的名称并立刻退出。默认值为0。
- nb_samples, n
设置每帧的最大采样数,默认值为512。
- textfile
设置包含语音文本的文件名。
- text
设置要合成的文本。
- voice, v
设置语音合成使用的语音。默认值是
kal。另见list_voices选项。
37.7.1 示例
- 从文件speech.txt读取,并使用标准flite语音合成文本:
flite=textfile=speech.txt
- 读取指定文本并选择
slt语音:flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
- 向ffmpeg输入文本:
ffmpeg -f lavfi -i flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
- 使ffplay朗读指定文本,使用
flite和lavfi设备:ffplay -f lavfi flite=text='No more be grieved for which that thou hast done.'
有关libflite的更多信息,请访问:http://www.festvox.org/flite/
37.8 anoisesrc
生成噪声音频信号。
过滤器接受以下选项:
- sample_rate, r
指定采样率。默认值为48000 Hz。
- amplitude, a
指定生成音频流的振幅(0.0 - 1.0)。默认值为1.0。
- duration, d
指定生成的音频流的持续时间。如果未指定此选项,则会生成无限长的噪音。
- color, colour, c
指定噪声的颜色。可用的噪声颜色有白、粉、棕、蓝、紫和丝绒。默认颜色是白。
- seed, s
指定用于种子PRNG的值。
- nb_samples, n
设置每帧的输出采样数,默认值为1024。
- density
设置丝绒噪声生成器的密度(0.0 - 1.0),默认值为0.05。
37.8.1 示例
- 生成60秒的粉噪声,采样率为44.1 kHz,振幅为0.5:
anoisesrc=d=60:c=pink:r=44100:a=0.5
37.9 hilbert
生成奇数抽头的Hilbert变换FIR系数。
生成的流可以与afir过滤器一起使用,将信号相移90度。
这在许多矩阵编码方案和分析信号生成中使用。该过程通常表示为乘以i(或j,虚数单位)。
过滤器接受以下选项:
- sample_rate, s
设置采样率,默认值为44100。
- taps, t
设置FIR过滤器长度,默认值为22051。
- nb_samples, n
设置每帧的采样数。
- win_func, w
设置生成FIR系数时使用的窗函数。
37.10 sinc
生成用凯瑟窗加权的低通、高通、带通或带阻FIR系数。
生成的流可以与afir过滤器一起使用来过滤音频信号。
过滤器接受以下选项:
- sample_rate, r
设置采样率,默认值为44100。
- nb_samples, n
设置每帧的采样数。默认值为1024。
- hp
设置高通频率。默认值为0。
- lp
设置低通频率。默认值为0。 如果高通频率低于低通频率且低通频率大于0,则过滤器将创建带通过滤器系数,否则为带阻过滤器系数。
- phase
设置过滤器的相位响应。默认值为50。允许的范围是0到100。
- beta
设置凯瑟窗β值。
- att
设置阻带衰减。默认值为120dB,允许范围为40到180dB。
- round
启用舍入,默认为禁用。
- hptaps
设置高通过滤器的抽头数。
- lptaps
设置低通过滤器的抽头数。
37.11 sine
生成一个由幅值1/8的正弦波组成的音频信号。
音频信号是位精确的。
过滤器接受以下选项:
- frequency, f
设置载波频率。默认值为440 Hz。
- beep_factor, b
启用每秒一个周期性的哔声,频率为beep_factor倍的载波频率。默认值为0,表示禁用哔声。
- sample_rate, r
指定采样率,默认值为44100。
- duration, d
指定生成音频流的持续时间。
- samples_per_frame
设置每帧的输出采样数。
表达式可以包含以下常量:
- n
输出音频帧的序列号,从0开始。
- pts
输出音频帧的PTS(显示时间戳),以TB为单位。
- t
输出音频帧的PTS,以秒为单位。
- TB
输出音频帧的时间基。
默认值是
1024.
37.11.1 示例
- 生成一个简单的440 Hz正弦波:
sine
- 生成一个220 Hz的正弦波,每秒叠加一个880 Hz的蜂鸣声,持续5秒:
sine=220:4:d=5 sine=f=220:b=4:d=5 sine=frequency=220:beep_factor=4:duration=5
- 生成一个1 kHz的正弦波,遵循
1602,1601,1602,1601,1602NTSC 图案:sine=1000:samples_per_frame='st(0,mod(n,5)); 1602-not(not(eq(ld(0),1)+eq(ld(0),3)))'
38 音频接收器
以下是当前可用的音频接收器的描述。
38.1 abuffersink
缓冲音频帧,并将其提供给过滤链的末端。
该接收器主要用于编程用途,特别是通过接口libavfilter/buffersink.h或选项系统定义。
它接受一个指向AVABufferSinkContext结构的指针,该结构定义了传入缓冲区的格式,可作为opaque参数传递给avfilter_init_filter进行初始化。
38.2 anullsink
空音频接收器,对输入音频完全不做任何处理。它主要作为模板使用,或用于分析/调试工具。
39 视频滤镜
当配置FFmpeg构建时,可以使用--disable-filters禁用任何现有的滤镜。
配置结果会显示构建中包含的视频滤镜。
以下是当前可用的视频滤镜的描述。
39.1 addroi
在视频帧中标记感兴趣区域。
帧数据未发生变化,但元数据会附加到帧上,指示感兴趣区域,这可能影响后续编码的行为。通过多次应用滤镜,可以标记多个区域。
- x
距帧左边缘的像素距离。
- y
距帧顶部的像素距离。
- w
区域宽度(以像素为单位)。
- h
区域高度(以像素为单位)。
参数x, y, w和h是表达式,可包含以下变量:
- iw
输入帧的宽度。
- ih
输入帧的高度。
- qoffset
对区域内应用的量化偏移。
必须是范围在-1到+1的实数值。值为零表示没有质量变化。负值表示质量更好(较少量化),而正值表示质量较差(较多量化)。
范围经过校准,以便极端值表示最大可能偏移——如果帧的其余部分以最差质量编码,则偏移-1表示该区域仍应以最佳质量编码。中间值则以某种编解码器相关方式插值。
例如,在10位的H.264中,量化参数范围为-12到51。典型的qoffset值为-1/10表示该区域应以比帧其他部分好约十分之一的QP编码。所以如果大部分帧以QP约30编码,则该区域会以QP约24编码(偏移约为-1/10 * (51 - -12) = -6.3)。值为-1表示区域应以最好质量编码,不管帧其他部分如何处理,即应以QP为-12的编码。
- clear
如果设置为true,删除帧上标记的任何现有兴趣区域后再添加新区域。
39.1.1 示例
- 将帧的中心四分之一标记为感兴趣。
addroi=iw/4:ih/4:iw/2:ih/2:-1/10
- 将帧左边缘100像素宽的区域标记为非常不重要(以比其余帧部分低得多的质量编码)。
addroi=0:0:100:ih:+1/5
39.2 alphaextract
从输入中提取alpha分量作为灰度视频。这在配合alphamerge滤镜时特别有用。
39.3 alphamerge
将主输入的alpha分量替换或添加为第二输入的灰度值。此功能旨在与alphaextract配合使用,以便在不支持alpha通道的格式中传输或存储具有alpha的帧序列。
例如,要从普通的YUV编码视频和使用alphaextract创建的单独视频重构完整帧,可以使用:
movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]
39.4 amplify
放大当前像素与相邻帧中相同像素位置像素之间的差异。
此滤镜接受以下选项:
- radius
设置帧半径。默认值为2。允许范围从1到63。 例如,半径为3将指示滤镜计算7帧的平均值。
- factor
设置放大差异的倍数。默认值为2。允许范围从0到65535。
- threshold
设置差异放大的阈值。任何大于或等于此值的差异将不会改变源像素。默认值为10。 允许范围从0到65535。
- tolerance
设置差异放大的容忍值。任何低于此值的差异将不会改变源像素。默认值为0。 允许范围从0到65535。
- low
设置降低源像素值的下限。默认值为65535。允许范围从0到65535。 此选项控制减少源像素值的最大可能值。
- high
设置提高源像素值的上限。默认值为65535。允许范围从0到65535。 此选项控制增加源像素值的最大可能值。
- planes
设置要过滤的平面。默认值为全部。允许范围从0到15。
39.4.1 命令
此滤镜支持以下命令与具有相同名称的选项对应:
- factor
- threshold
- tolerance
- low
- high
- planes
39.5 ass
与subtitles滤镜相同,只是它不需要libavcodec和libavformat工作。但另一方面,它仅限于ASS(高级字幕站Alpha)字幕文件。
除了subtitles滤镜中的常见选项外,此滤镜接受以下选项:
- shaping
设置整形引擎
可用的值有:
- ‘auto’
默认libass整形引擎,是最好的选项。
- ‘simple’
快速、与字体无关的整形器,仅能进行替换
- ‘complex’
使用OpenType进行替换和定位的较慢的整形器
默认值是
auto.
39.6 atadenoise
对视频输入应用自适应时间平均去噪滤镜。
此滤镜接受以下选项:
- 0a
为第一个平面设置阈值A。默认值为0.02。 有效范围是0到0.3。
- 0b
为第一个平面设置阈值B。默认值为0.04。 有效范围是0到5。
- 1a
为第二个平面设置阈值A。默认值为0.02。 有效范围是0到0.3。
- 1b
为第二个平面设置阈值B。默认值为0.04。 有效范围是0到5。
- 2a
为第三个平面设置阈值A。默认值为0.02。 有效范围是0到0.3。
- 2b
为第三个平面设置阈值B。默认值为0.04。 有效范围是0到5。
阈值A用来响应输入信号的突然变化,阈值B用来响应输入信号的连续变化。
- s
设置滤镜将用于平均的帧数。默认值为9。必须是范围[5, 129]中的奇数。
- p
设置滤镜将用于平均的帧平面。默认值为全部。
- a
设置滤镜将用于平均的算法变体。默认值是
pparallel。 还可以设置为sserial。parallel可能比serial快,而相反情况从未发生过。 parallel将在首次改变超过阈值时提前终止,而serial将在帧的另一侧继续处理,如果它们等于或低于阈值。
- 0s
- 1s
- 2s
为第一个平面、第二个平面或第三个平面设置sigma。默认值是32767。 有效范围从0到32767。 此选项控制半径定义的每个像素的权重。 默认值意味着每个像素权重相同。 将此选项设置为0实际上禁用过滤。
39.6.1 命令
此滤镜支持与选项相同的命令除选项外s该命令接受与对应选项相同的语法。
39.7 平均模糊
应用平均模糊滤镜。
滤镜接受以下选项:
- sizeX
设置水平半径大小。
- planes
设置要过滤的平面。默认情况下过滤所有平面。
- sizeY
设置垂直半径大小,如果为零,则与水平半径相同。
sizeX默认值为0.
39.7.1 命令
此滤镜支持与选项相同的命令。 该命令接受与对应选项相同的语法。
如果指定的表达式无效,则保持当前值不变。
39.8 背景关键
将静态背景转换为透明度。
滤镜接受以下选项:
- threshold
场景变化检测的阈值。
- similarity
与背景的相似百分比。
- blend
设置不相似像素的混合量。
39.8.1 命令
此滤镜支持上述所有选项作为命令.
39.9 边界框
计算输入帧亮度平面中非黑色像素的边界框。
此滤镜计算包含所有亮度值大于最低允许值的像素的边界框。 描述边界框的参数打印到滤镜日志中。
滤镜接受以下选项:
- min_val
设置最低亮度值。默认值为
16.
39.9.1 命令
此滤镜支持上述所有选项作为命令.
39.10 双边滤镜
应用双边滤镜,进行空间平滑时保留边缘。
滤镜接受以下选项:
- sigmaS
设置用于计算空间权重的高斯函数的sigma。 允许范围为0到512。默认值为0.1。
- sigmaR
设置用于计算范围权重的高斯函数的sigma。 允许范围为0到1。默认值为0.1。
- planes
设置要过滤的平面。默认值为仅第一个平面。
39.10.1 命令
此滤镜支持上述所有选项作为命令.
39.11 位平面噪声
显示并测量位平面的噪声。
滤镜接受以下选项:
- bitplane
设置要分析的平面。默认值为
1.- filter
从设定的平面中过滤噪声像素。 默认没有启用。
bitplaneset above. Default is disabled.
39.12 黑色检测
检测几乎完全黑的视频区间。可以用于检测章节转换、广告或无效录制。
滤镜将其检测分析输出到日志以及帧元数据中。如果找到了至少指定的最短持续时间的黑色区间,则在日志中打印一行内容,包括开始和结束时间戳以及持续时间,日志等级为info此外,每帧打印一行日志内容,表示该帧检测到的黑色量,日志等级为debug。
滤镜还会在黑色区间的第一帧中添加元数据键lavfi.black_start,以及黑色区间结束后第一帧中添加元数据键lavfi.black_end。值为帧的时间戳。无论指定的最短持续时间如何,此元数据都会添加。
滤镜接受以下选项:
- black_min_duration, d
设置检测到的黑色最短时间,以秒表示。必须为非负浮点数。
默认值为2.0。
- picture_black_ratio_th, pic_th
设置考虑图片为“黑色”的阈值。 表示最低比值:
黑色像素数 / 像素数
图片被认为是黑色。默认值为0.98。
- pixel_black_th, pix_th
设置考虑像素为“黑色”的阈值。
该阈值表示像素被认为是“黑色”的最大亮度值。提供的值根据以下公式进行缩放:
绝对阈值 = 最低亮度值 + 黑色像素阈值 * 亮度范围大小
亮度范围大小和最低亮度值取决于输入视频格式,范围为[0-255]对于YUV全范围格式,[16-235]对于YUV非全范围格式。
默认值为0.10。
以下示例将最大像素阈值设置为最低值,并仅检测2秒或更长的黑色区间:
blackdetect=d=2:pix_th=0.00
39.13 黑帧检测
检测几乎完全黑的帧。可以用于检测章节转换或广告。输出行包括检测帧的帧号、黑度百分比、文件中的位置(如果已知)或-1,以及时间戳(以秒为单位)。
为了显示输出行,需要将日志级别至少设置为AV_LOG_INFO值。
此滤镜导出帧元数据lavfi.blackframe.pblack。
值表示图片中像素下超过阈值的百分比。
它接受以下参数:
- amount
必须低于阈值的像素百分比;默认值为
98.- threshold, thresh
低于此阈值的像素值被认为是黑色;默认值为
32.
39.14 混合
将两个视频帧混合到一起。
该blend滤镜接收两个输入流并输出一个流,第一个输入流为“顶层”,第二个输入流为“底层”。 默认情况下,输出流在最长的输入流结束时终止。
该tblend(时间混合)滤镜从一个单独的流中接收两个连续帧,并输出通过将新帧混合到旧帧顶部得到的结果。
以下是接受的选项的描述。
- c0_mode
- c1_mode
- c2_mode
- c3_mode
- all_mode
设置特定像素组件或所有像素组件的混合模式,当使用全部模式时。默认值为
normal.组件模式的可用值为:
- ‘addition’
- ‘and’
- ‘average’
- ‘bleach’
- ‘burn’
- ‘darken’
- ‘difference’
- ‘divide’
- ‘dodge’
- ‘exclusion’
- ‘extremity’
- ‘freeze’
- ‘geometric’
- ‘glow’
- ‘grainextract’
- ‘grainmerge’
- ‘hardlight’
- ‘hardmix’
- ‘hardoverlay’
- ‘harmonic’
- ‘heat’
- ‘interpolate’
- ‘lighten’
- ‘linearlight’
- ‘multiply’
- ‘multiply128’
- ‘negation’
- ‘normal’
- ‘or’
- ‘overlay’
- ‘phoenix’
- ‘pinlight’
- ‘reflect’
- ‘screen’
- ‘softdifference’
- ‘softlight’
- ‘stain’
- ‘subtract’
- ‘vividlight’
- ‘xor’
- c0_opacity
- c1_opacity
- c2_opacity
- c3_opacity
- all_opacity
设置特定像素组件或所有像素组件的混合不透明度,当使用全部不透明度时。仅在结合像素组件混合模式时使用。
- c0_expr
- c1_expr
- c2_expr
- c3_expr
- all_expr
设置特定像素组件或所有像素组件的混合表达式,当使用全部表达式时。请注意,如果设置了表达式,则相关模式选项将被忽略。
表达式可以使用以下变量:
- N
过滤帧的连续编号,从
0.- X
- Y
当前样本的坐标
- W
- H
当前过滤平面的宽度和高度
- SW
- SH
正在过滤的平面的宽度和高度比例。它是当前平面到亮度平面的尺寸比例,例如应用于
yuv420p帧,值是1,1对于亮度平面,并且0.5,0.5对于色度平面。- T
当前帧的时间,以秒为单位。
- TOP, A
第一个视频帧(顶部图层)当前位置的像素分量值。
- BOTTOM, B
第二个视频帧(底部图层)当前位置的像素分量值。
这个blend滤镜还支持帧同步选项。
39.14.1 示例
- 在前10秒内从底层到顶层应用过渡:
blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10)))'
- 从顶层到底层应用线性水平过渡:
blend=all_expr='A*(X/W)+B*(1-X/W)'
- 应用1x1棋盘效果:
blend=all_expr='if(eq(mod(X,2),mod(Y,2)),A,B)'
- 应用从左侧揭开的效果:
blend=all_expr='if(gte(N*SW+X,W),A,B)'
- 应用向下揭开的效果:
blend=all_expr='if(gte(Y-N*SH,0),A,B)'
- 应用向左上揭开的效果:
blend=all_expr='if(gte(T*SH*40+Y,H)*gte((T*40*SW+X)*W/H,W),A,B)'
- 对视频进行对角线分割,并在每一侧显示顶部和底部图层:
blend=all_expr='if(gt(X,Y*(W/H)),A,B)'
- 显示当前帧与前一帧之间的差异:
tblend=all_mode=grainextract
39.14.2 命令
此滤镜支持与选项相同的命令。
39.15 blockdetect
在不改变输入帧的情况下确定帧的块状程度。
基于 Remco Muijs 和 Ihor Kirenko 的研究:“一种用于自适应视频处理的无参考块状伪影测量方法”。2005年第13届欧洲信号处理会议。
此滤镜接受以下选项:
- period_min
- period_max
设置用于确定像素网格(周期)的最小和最大值。默认值为[3,24]。
- planes
设置要过滤的平面。默认只过滤第一个平面。
39.15.1 示例
- 为第一个平面确定块状度,并在[8,32]范围内搜索周期:
blockdetect=period_min=8:period_max=32:planes=1
39.16 blurdetect
在不改变输入帧的情况下确定帧的模糊程度。
基于 Marziliano, Pina 等人的研究:“一种无参考感知模糊指标。”支持基于块的简化。
此滤镜接受以下选项:
- low
- high
设置 Canny 阈值算法使用的低阈值和高阈值。
高阈值选择“强”边缘像素,这些像素通过8连通性与低阈值选择的“弱”边缘像素连接。
低和高阈值必须在[0,1]范围内选择,并且低应小于或等于高.
低的默认值是,而
20/255高的默认值是。50/255.- radius
定义在边缘像素周围搜索局部最大值的半径。
- block_pct
仅为给定百分比的最显著块确定模糊度。
- block_width
确定宽度为block_width的块的模糊度。如果设置为小于1的值,则不使用任何块,并无论block_height.
- block_height
如何,将整个图像视为一个块进行处理。block_height块的模糊度。如果设置为小于1的值,则不使用任何块,并无论block_width.
- planes
设置要过滤的平面。默认只过滤第一个平面。
39.16.1 示例
- 为80%的最显著的32x32块确定模糊度:
blurdetect=block_width=32:block_height=32:block_pct=80
39.17 bm3d
使用块匹配3D算法去噪帧。
此滤镜接受以下选项。
- sigma
设置去噪强度。默认值为1。允许范围是0到999.9。去噪算法对sigma的值非常敏感,因此请根据源对象进行调整。
- block
设置本地补丁的大小。这定义了2维的大小。
- bstep
设置处理块的滑动步长。默认值为4。允许范围是1到64。较小的值允许处理更多的参考块,但速度较慢。
- group
设置用于3维的最大相似块数。默认值为1。设置为1时,不进行块匹配。较大的值允许在单组中有更多块。允许范围是1到256。
- range
设置块匹配搜索的半径。默认值为9。允许范围是1到INT32_MAX。
- mstep
设置块匹配中两个搜索位置之间的步长。默认值为1。允许范围是1到64。较小的值处理速度较慢。
- thmse
设置用于块匹配的均方误差阈值。有效范围是0到INT32_MAX。
- hdthr
设置3D变换域中的硬阈值参数。较大的值会在频域中产生较强的硬阈值过滤。
- estim
设置过滤估计模式。可以是
basic或final。默认值是basic.- ref
如果启用,滤镜将使用第二个流进行块匹配。默认情况下,
basicestim选项的值会禁用此功能,而当 option, and always enabled if value of estim的值时始终启用。final.- planes
设置要过滤的平面。默认是所有可用平面,除了alpha透明度通道。
39.17.1 示例
- 使用bm3d进行基础过滤:
bm3d=sigma=3:block=4:bstep=2:group=1:estim=basic
- 与上述相同,但仅过滤亮度:
bm3d=sigma=3:block=4:bstep=2:group=1:estim=basic:planes=1
- 与上述相同,但同时使用两种估计模式:
split[a][b],[a]bm3d=sigma=3:block=4:bstep=2:group=1:estim=basic[a],[b][a]bm3d=sigma=3:block=4:bstep=2:group=16:estim=final:ref=1
- 与上述相同,但使用nlmeans滤镜代替:
split[a][b],[a]nlmeans=s=3:r=7:p=3[a],[b][a]bm3d=sigma=3:block=4:bstep=2:group=16:estim=final:ref=1
39.18 boxblur
将boxblur算法应用于输入视频。
它接受以下参数:
- luma_radius, lr
- luma_power, lp
- chroma_radius, cr
- chroma_power, cp
- alpha_radius, ar
- alpha_power, ap
下面是接受的选项的说明。
- luma_radius, lr
- chroma_radius, cr
- alpha_radius, ar
为用于模糊对应输入平面的框半径设置一个表达式,以像素为单位。
半径值必须是非负数,并且必须小于或等于
min(w,h)/2,对于亮度和透明度平面,min(cw,ch)/2对于色度平面。默认值为luma_radius是 "2"。如果未指定,chroma_radius和alpha_radius默认为对应的值设置为luma_radius.
表达式可以包含以下常量:
- w
- h
输入的宽度和高度以像素为单位。
- cw
- ch
输入的色度图像宽度和高度以像素为单位。
- hsub
- vsub
水平和垂直色度子采样值。例如,对于像素格式"yuv422p",hsub为 2,而vsub为 1。
- luma_power, lp
- chroma_power, cp
- alpha_power, ap
指定应用于对应平面的框模糊过滤器的次数。
的默认值为luma_power2。如果未指定,chroma_power和alpha_power默认为对应的值设置为luma_power.
值为 0 将禁用此效果。
39.18.1 示例
- 应用框模糊过滤器,亮度、色度和透明度半径设置为 2:
boxblur=luma_radius=2:luma_power=1 boxblur=2:1
- 将亮度半径设置为 2,透明度和色度半径设置为 0:
boxblur=2:1:cr=0:ar=0
- 将亮度和色度半径设置为视频尺寸的一部分:
boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
39.19 bwdif
对输入视频进行去隔行("bwdif" 代表 "Bob Weaver 去隔行过滤器")。
基于 yadif 的运动自适应去隔行,使用 w3fdif 和立方插值算法。 它接受以下参数:
- mode
要采用的隔行模式。接受以下值之一:
- 0, send_frame
为每帧输出一个帧。
- 1, send_field
为每个场输出一个帧。
默认值为
send_field.- parity
假设输入隔行视频的画面场序。接受以下值之一:
- 0, tff
假设上场优先。
- 1, bff
假设下场优先。
- -1, auto
启用场序的自动检测。
默认值为
auto。 如果隔行信息未知或解码器未导出此信息,将假定为上场优先。- deint
指定要去隔行的帧。接受以下值之一:
- 0, all
去隔行所有帧。
- 1, interlaced
仅对标记为隔行的帧去隔行。
默认值为
all.
39.20 ccrepack
重新打包 CEA-708 隐藏字幕附加数据。
此过滤器修复了与商用编码器相关的上游格式错误的 CEA-708 有效负载中的各种问题, 特别是元组数不正确(目标 FPS 的错误 cc_count),以及元组顺序不正确(例如,CEA-608 元组不在有效负载的首个条目中)。
39.21 cas
对视频流应用对比度自适应锐化过滤器。
该过滤器接受以下选项:
- strength
设置锐化强度。默认值为 0。
- planes
设置要过滤的平面。默认值是过滤除透明平面外的所有平面。
39.21.1 命令
此过滤器支持相同的命令作为选项。
39.22 chromahold
移除所有颜色信息,仅保留某些特定颜色。
该过滤器接受以下选项:
- color
不会被置换为中性色彩的颜色。
- similarity
与上述颜色的相似百分比。 0.01 仅匹配完全相同的键颜色,而 1.0 匹配所有颜色。
- blend
混合百分比。 0.0 使像素要么完全是灰色,要么完全不是灰色。 较高的值会保留更多的颜色。
- yuv
表示传递的颜色已在 YUV 而不是 RGB 格式中。
启用后,诸如"绿色"或"红色"这样的文字颜色不再有意义。 可以使用六进制数字传递确切的 YUV 值。
39.22.1 命令
此过滤器支持相同的命令作为选项。 此命令接受与对应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.23 chromakey
YUV 颜色空间的色度键控。
该过滤器接受以下选项:
- color
将被替换为透明的颜色。
- similarity
与键颜色的相似百分比。
0.01 仅匹配完全相同的键颜色,而 1.0 匹配所有颜色。
- blend
混合百分比。
0.0 使像素要么完全透明,要么完全不透明。
较高的值会生成半透明像素,像素颜色越接近键颜色,透明度越高。
- yuv
表示传递的颜色已在 YUV 而不是 RGB 格式中。
启用后,诸如"绿色"或"红色"这样的文字颜色不再有意义。 可以使用六进制数字传递确切的 YUV 值。
39.23.1 命令
此过滤器支持相同的命令作为选项。 此命令接受与对应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.23.2 示例
- 使输入图像中的每个绿色像素透明:
ffmpeg -i input.png -vf chromakey=green out.png
- 在静态黑色背景上叠加绿色背景视频。
ffmpeg -f lavfi -i color=c=black:s=1280x720 -i video.mp4 -shortest -filter_complex "[1:v]chromakey=0x70de77:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mkv
39.24 chromanr
减少色度噪声。
该过滤器接受以下选项:
- thres
设置用于平均色度值的阈值。 当前像素与邻近像素的 Y、U 和 V 分量的绝对差之和低于该阈值时, 会被用于平均。亮度分量保持不变并复制到输出中。 默认值为 30,允许范围为 1 到 200。
- sizew
设置用于平均的矩形的水平半径。 允许范围为 1 到 100。默认值为 5。
- sizeh
设置用于平均的矩形的垂直半径。 允许范围为 1 到 100。默认值为 5。
- stepw
设置平均时的水平步长。默认值为 1。 允许范围为 1 到 50。 主要用于加速过滤过程。
- steph
设置平均时的垂直步长。默认值为 1。 允许范围为 1 到 50。 主要用于加速过滤过程。
- threy
为平均色度值设置 Y 分量的阈值。 为当前像素与邻近像素之间的 Y 分量的最大允许差设置更精细的控制。 默认值为 200,范围为 1 到 200。
- threu
为平均色度值设置 U 分量的阈值。 为当前像素与邻近像素之间的 U 分量的最大允许差设置更精细的控制。 默认值为 200,范围为 1 到 200。
- threv
为平均色度值设置 V 分量的阈值。 为当前像素与邻近像素之间的 V 分量的最大允许差设置更精细的控制。 默认值为 200,范围为 1 到 200。
- distance
设置计算中使用的距离类型。
- ‘manhattan’
绝对差。
- ‘euclidean’
差的平方。
默认距离类型为曼哈顿距离。
39.24.1 命令
此过滤器支持相同的命令作为选项。 该命令接受与对应选项相同的语法。
39.25 色度偏移
水平和/或垂直移动色度像素。
该滤镜接受以下选项:
- cbh
设置水平移动色度-蓝的量。
- cbv
设置垂直移动色度-蓝的量。
- crh
设置水平移动色度-红的量。
- crv
设置垂直移动色度-红的量。
- edge
设置边缘模式,可以是涂抹,默认值,或者扭曲.
39.25.1 命令
此滤镜支持以上所有选项作为命令.
39.26 CIE色域图
显示CIE颜色图并将像素叠加到其上。
该滤镜接受以下选项:
- system
设置颜色系统。
- ‘ntsc, 470m’
- ‘ebu, 470bg’
- ‘smpte’
- ‘240m’
- ‘apple’
- ‘widergb’
- ‘cie1931’
- ‘rec709, hdtv’
- ‘uhdtv, rec2020’
- ‘dcip3’
- cie
设置CIE系统。
- ‘xyy’
- ‘ucs’
- ‘luv’
- gamuts
设置要绘制的色域。
请参阅
system选项以获取可用值。- size, s
设置CIE色域图的大小,默认设置为512。
- intensity, i
设置用于将输入像素值映射到CIE图的强度。
- contrast
设置对比度,用于绘制在活动颜色系统色域之外的舌部颜色。
- corrgamma
校正在范围内显示的伽马值,默认启用。
- showwhite
在CIE图上显示白点,默认禁用。
- gamma
设置输入伽马值,仅用于XYZ输入色彩空间。
- fill
填充CIE颜色。默认启用。
39.27 编码视图
可视化某些编解码器导出的信息。
一些编解码器可以通过帧使用辅助数据或其他方式导出信息。例如,某些基于MPEG的编解码器可以通过export_mvs标志在编解码器flags2选项中导出运动矢量。
该滤镜接受以下选项:
- block
使用亮度平面显示块分区结构。
- mv
设置要可视化的运动矢量。
可以用来作为mv的标志包括:
- ‘pf’
P帧的前向预测运动矢量
- ‘bf’
B帧的前向预测运动矢量
- ‘bb’
B帧的后向预测运动矢量
- qp
使用色度平面显示量化参数。
- mv_type, mvt
设置要可视化的运动矢量类型。包括所有帧的运动矢量,除非由frame_type选项指定。
可以用来作为mv_type的标志包括:
- ‘fp’
前向预测运动矢量
- ‘bp’
后向预测运动矢量
- frame_type, ft
设置要可视化运动矢量的帧类型。
可以用来作为frame_type的标志包括:
- ‘if’
帧内编码(I帧)
- ‘pf’
预测帧(P帧)
- ‘bf’
双向预测帧(B帧)
39.27.1 示例
- 使用以下方式可视化所有帧的前向预测运动矢量:
ffplay:ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv_type=fp
- 使用以下方式可视化P帧和B帧的多方向运动矢量:
ffplay:ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv=pf+bf+bb
39.28 颜色平衡
修改输入帧的主要颜色(红、绿和蓝)的强度。
滤镜允许调整输入帧的暗部、中间调或亮部区域的红-青绿、绿-洋红或蓝-黄色平衡。
正的调整值向主要颜色方向偏移,负的调整值向补色方向偏移。
该滤镜接受以下选项:
- rs
- gs
- bs
调整红、绿和蓝暗部(最暗的像素)。
- rm
- gm
- bm
调整红、绿和蓝中间调(中等像素)。
- rh
- gh
- bh
调整红、绿和蓝亮部(最亮的像素)。
选项的允许范围是
[-1.0, 1.0]。默认值是0.- pl
改变颜色平衡时保留亮度。默认禁用。
39.28.1 示例
- 为暗部添加红色颜色偏移:
colorbalance=rs=.3
39.28.2 命令
此滤镜支持以上所有选项作为命令.
39.29 颜色对比度
调整RGB分量之间的颜色对比度。
该滤镜接受以下选项:
- rc
设置红-青绿对比度。默认值是0.0。允许范围为-1.0到1.0。
- gm
设置绿-洋红对比度。默认值是0.0。允许范围为-1.0到1.0。
- by
设置蓝-黄色对比度。默认值是0.0。允许范围为-1.0到1.0。
- rcw
- gmw
- byw
设置每个
rc,gm,by选项值的权重。默认值是0.0。 允许范围为0.0到1.0。如果所有权重为0.0,则过滤将被禁用。- pl
设置保持亮度的量。默认值是0.0。允许范围为0.0到1.0。
39.29.1 命令
此滤镜支持以上所有选项作为命令.
39.30 色彩校正
针对黑色和白色选择性调整颜色白平衡。 此滤镜在YUV颜色空间中操作。
该滤镜接受以下选项:
- rl
设置红色阴影点。允许范围为-1.0到1.0。 默认值是0。
- bl
设置蓝色阴影点。允许范围为-1.0到1.0。 默认值是0。
- rh
设置红色高光点。允许范围为-1.0到1.0。 默认值是0。
- bh
设置蓝色高光点。允许范围为-1.0到1.0。 默认值是0。
- saturation
设置饱和度的量。允许范围为-3.0到3.0。 默认值是1。
- analyze
如果设置为非
manual则会分析每帧并使用派生参数来过滤输出帧。可能的值有:
- ‘manual’
- ‘average’
- ‘minmax’
- ‘median’
默认值为
manual.
39.30.1 命令
此滤镜支持以上所有选项作为命令.
39.31 colorchannelmixer
通过重新混合颜色通道来调整视频输入帧。
此滤镜通过将同一像素其他通道的值添加到目标通道值来修改色彩通道。例如,如果修改的是红色,输出值将为:
红=红*rr + 蓝*rb + 绿*rg + 透明*ra
该滤镜接受以下选项:
- rr
- rg
- rb
- ra
为输出红色通道调整输入红、绿、蓝和透明通道的贡献。 默认值为
1对于rr,以及0对于rg, rb和ra.- gr
- gg
- gb
- ga
为输出绿色通道调整输入红、绿、蓝和透明通道的贡献。 默认值为
1对于gg,以及0对于gr, gb和ga.- br
- bg
- bb
- ba
为输出蓝色通道调整输入红、绿、蓝和透明通道的贡献。 默认值为
1对于bb,以及0对于br, bg和ba.- ar
- ag
- ab
- aa
为输出透明通道调整输入红、绿、蓝和透明通道的贡献。 默认值为
1对于aa,以及0对于ar, ag和ab.选项的允许范围为
[-2.0, 2.0].- pc
设置是否保留颜色模式。接受的值为:
- ‘none’
禁用颜色保留,这是默认值。
- ‘lum’
保留亮度。
- ‘max’
保留RGB三元组的最大值。
- ‘avg’
保留RGB三元组的平均值。
- ‘sum’
保留RGB三元组的总和值。
- ‘nrm’
保留RGB三元组的规范化值。
- ‘pwr’
保留RGB三元组的幂值。
- pa
设置在更改颜色时保留颜色的程度。允许范围是从
[0.0, 1.0]。 默认值是0.0,因此是禁用状态。
39.31.1 示例
- 将来源转换为灰度:
colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3
- 模拟复古色调:
colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131
39.31.2 命令
此滤镜支持以上所有选项作为命令.
39.32 colorize
覆盖一个纯色到视频流上。
此滤镜接受以下选项:
- hue
设置颜色的色相。允许范围为0到360。 默认值为0。
- saturation
设置颜色的饱和度。允许范围为0到1。 默认值为0.5。
- lightness
设置颜色的亮度。允许范围为0到1。 默认值为0.5。
- mix
设置来源亮度的混合。默认设置为1.0。 允许范围为0.0到1.0。
39.32.1 命令
此滤镜支持以上所有选项作为命令.
39.33 colorkey
RGB颜色空间的颜色键控。 此滤镜通过设置每个像素的透明度组件为0来操作8位RGB格式帧, 如果该像素的颜色与键色的相似半径内一致。超出相似半径的像素透明度取决于混合选项的值。
此滤镜接受以下选项:
- color
设置透明度为0(完全透明)的颜色。 参见(ffmpeg-utils)"颜色"部分中的ffmpeg-utils手册。 默认值为
black.- similarity
设置与键色的相似半径,其范围内的其他颜色也完全透明。 计算的距离与RGB值之间的单位分数距离相关。 范围为0.01到1.0。0.01匹配键色周围非常小的半径, 1.0匹配全部颜色。 默认值为
0.01.- blend
设置超出相似半径的像素透明度计算方式。 0.0使像素完全透明或完全不透明。 更高的值将产生半透明像素,与键颜色越相似,透明度越高。 范围为0.0到1.0。 默认值为
0.0.
39.33.1 示例
- 将输入图像中的每个绿色像素设置为透明:
ffmpeg -i input.png -vf colorkey=green out.png
- 将绿屏视频覆盖到静态背景图像上。
ffmpeg -i background.png -i video.mp4 -filter_complex "[1:v]colorkey=0x3BBD1E:0.3:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.flv
39.33.2 命令
此滤镜支持与选项相同的命令。 命令接受与对应选项相同的语法。
如果指定的表达式无效,则会保留当前值。
39.34 颜色保持
移除所有 RGB 颜色中的色彩信息,除了某一指定颜色。
该滤镜接受以下选项:
- color
不会被替换成中性灰的颜色。
- similarity
与上述颜色的相似度百分比。 0.01 仅匹配完全相同的关键颜色,而 1.0 匹配所有颜色。
- blend
混合百分比。0.0 使像素完全变灰。 更高的数值会保留更多颜色。
39.34.1 命令
此滤镜支持相同的命令作为选项。命令接受与对应选项相同的语法。
如果指定的表达式无效,则保持当前值。
39.35 颜色级别
通过级别调整视频输入帧。
该滤镜接受以下选项:
- rimin
- gimin
- bimin
- aimin
调整红、绿、蓝和 Alpha 输入黑点。 选项的允许范围是
[-1.0, 1.0]。默认值是0.- rimax
- gimax
- bimax
- aimax
调整红、绿、蓝和 Alpha 输入白点。 选项的允许范围是
[-1.0, 1.0]。默认值是1.输入级别用于使高光(亮调)变亮,使阴影(暗调)变暗,改变亮调和暗调的平衡。
- romin
- gomin
- bomin
- aomin
调整红、绿、蓝和 Alpha 输出黑点。 选项的允许范围是
[0, 1.0]。默认值是0.- romax
- gomax
- bomax
- aomax
调整红、绿、蓝和 Alpha 输出白点。 选项的允许范围是
[0, 1.0]。默认值是1.输出级别允许手动选择受限的输出级别范围。
- preserve
设置保留颜色模式。接受的值是:
- ‘none’
禁用颜色保留,这是默认值。
- ‘lum’
保留亮度。
- ‘max’
保留 RGB 三元组的最大值。
- ‘avg’
保留 RGB 三元组的平均值。
- ‘sum’
保留 RGB 三元组的总和值。
- ‘nrm’
保留 RGB 三元组的归一化值。
- ‘pwr’
保留 RGB 三元组的幂值。
39.35.1 示例
- 使视频输出变暗:
colorlevels=rimin=0.058:gimin=0.058:bimin=0.058
- 增加对比度:
colorlevels=rimin=0.039:gimin=0.039:bimin=0.039:rimax=0.96:gimax=0.96:bimax=0.96
- 使视频输出变亮:
colorlevels=rimax=0.902:gimax=0.902:bimax=0.902
- 增加亮度:
colorlevels=romin=0.5:gomin=0.5:bomin=0.5
39.35.2 命令
此滤镜支持上述所有选项作为命令.
39.36 颜色映射
对视频流应用自定义颜色映射。
此滤镜需要三个输入视频流。 第一个流是将要被过滤的视频流。 第二和第三个视频流指定源颜色到目标颜色的颜色块映射。
该滤镜接受以下选项:
- patch_size
设置源和目标视频流的颜色块大小(单位为像素)。
- nb_patches
设置从源和目标视频流中使用的最大颜色块数。 默认值是额外视频流中可用的颜色块数。 允许的最大颜色块数是
64.- type
设置目标颜色使用的调整。可以是
relative或absolute。 默认值是absolute.- kernel
设置用于测量映射颜色之间的颜色差异的内核。
接受的值是:
- ‘euclidean’
- ‘weuclidean’
默认值是
euclidean.
39.37 色彩矩阵
转换色彩矩阵。
该滤镜接受以下选项:
- src
- dst
指定源和目标色彩矩阵。必须同时指定两个值。
接受的值是:
- ‘bt709’
BT.709
- ‘fcc’
FCC
- ‘bt601’
BT.601
- ‘bt470’
BT.470
- ‘bt470bg’
BT.470BG
- ‘smpte170m’
SMPTE-170M
- ‘smpte240m’
SMPTE-240M
- ‘bt2020’
BT.2020
例如:要从 BT.601 转换为 SMPTE-240M,请使用命令:
colormatrix=bt601:smpte240m
39.38 色彩空间
转换色彩空间、传输特性或色彩基准。 输入视频需要是偶数大小。
该滤镜接受以下选项:
- all
一次性指定所有色彩属性。
接受的值是:
- ‘bt470m’
BT.470M
- ‘bt470bg’
BT.470BG
- ‘bt601-6-525’
BT.601-6 525
- ‘bt601-6-625’
BT.601-6 625
- ‘bt709’
BT.709
- ‘smpte170m’
SMPTE-170M
- ‘smpte240m’
SMPTE-240M
- ‘bt2020’
BT.2020
- space
指定输出色彩空间。
接受的值是:
- ‘bt709’
BT.709
- ‘fcc’
FCC
- ‘bt470bg’
BT.470BG 或 BT.601-6 625
- ‘smpte170m’
SMPTE-170M 或 BT.601-6 525
- ‘smpte240m’
SMPTE-240M
- ‘ycgco’
YCgCo
- ‘bt2020ncl’
BT.2020(不使用恒定亮度)
- trc
指定输出的传输特性。
接受的值是:
- ‘bt709’
BT.709
- ‘bt470m’
BT.470M
- ‘bt470bg’
BT.470BG
- ‘gamma22’
恒定伽玛值 2.2
- ‘gamma28’
恒定伽玛值 2.8
- ‘smpte170m’
SMPTE-170M、BT.601-6 625 或 BT.601-6 525
- ‘smpte240m’
SMPTE-240M
- ‘srgb’
SRGB
- ‘iec61966-2-1’
iec61966-2-1
- ‘iec61966-2-4’
iec61966-2-4
- ‘xvycc’
xvycc
- ‘bt2020-10’
适用于 10 位内容的 BT.2020
- ‘bt2020-12’
适用于 12 位内容的 BT.2020
- primaries
指定输出的色彩基准。
可接受的值包括:
- ‘bt709’
BT.709
- ‘bt470m’
BT.470M
- ‘bt470bg’
BT.470BG 或 BT.601-6 625
- ‘smpte170m’
SMPTE-170M 或 BT.601-6 525
- ‘smpte240m’
SMPTE-240M
- ‘film’
电影
- ‘smpte431’
SMPTE-431
- ‘smpte432’
SMPTE-432
- ‘bt2020’
BT.2020
- ‘jedec-p22’
JEDEC P22 磷光体
- range
指定输出色彩范围。
可接受的值包括:
- ‘tv’
电视 (限制) 范围
- ‘mpeg’
MPEG (限制) 范围
- ‘pc’
PC (全) 范围
- ‘jpeg’
JPEG (全) 范围
- format
指定输出色彩格式。
可接受的值包括:
- ‘yuv420p’
YUV 4:2:0 平面 8 位
- ‘yuv420p10’
YUV 4:2:0 平面 10 位
- ‘yuv420p12’
YUV 4:2:0 平面 12 位
- ‘yuv422p’
YUV 4:2:2 平面 8 位
- ‘yuv422p10’
YUV 4:2:2 平面 10 位
- ‘yuv422p12’
YUV 4:2:2 平面 12 位
- ‘yuv444p’
YUV 4:4:4 平面 8 位
- ‘yuv444p10’
YUV 4:4:4 平面 10 位
- ‘yuv444p12’
YUV 4:4:4 平面 12 位
- fast
执行快速转换,跳过伽马/主色调校正。这将显著减少 CPU 的使用量,但数学上不正确。要获得与 colormatrix 过滤器生成的输出兼容的结果,请使用 fast=1。
- dither
指定抖动模式。
可接受的值包括:
- ‘none’
无抖动
- ‘fsb’
Floyd-Steinberg 抖动
- wpadapt
白点适配模式。
可接受的值包括:
- ‘bradford’
Bradford 白点适配
- ‘vonkries’
von Kries 白点适配
- ‘identity’
身份白点适配(即无白点适配)
- iall
一次性覆盖所有输入属性。可接受的值与所有属性相同.
- ispace
覆盖输入的色彩空间。可接受的值与色彩空间相同.
- iprimaries
覆盖输入的色彩基准。可接受的值与色彩基准相同.
- itrc
覆盖输入的传递特性。可接受的值与传递特性相同.
- irange
覆盖输入的色彩范围。可接受的值与色彩范围相同.
该过滤器将传递特性、色彩空间和色彩基准转换为指定的用户值。如果没有指定输出值,则根据 "所有属性" 的值设置默认值。如果该属性也未指定,过滤器将记录错误。输出色彩范围和格式默认为输入色彩范围和格式的值。输入数据应设置输入的传递特性、色彩空间、色彩基准和色彩范围。如果缺少任何这些值,过滤器将记录错误并且不执行任何转换。
例如,要将输入转换为 SMPTE-240M,请使用以下命令:
colorspace=smpte240m
39.39 色温
调整视频中的色温以模拟环境色温的变化。
过滤器接受以下选项:
- temperature
设置温度(以开尔文为单位)。允许的范围是 1000 到 40000。默认值为 6500 K。
- mix
设置与过滤输出的混合程度。允许范围是 0 到 1。默认值为 1。
- pl
设置保持亮度的程度。允许范围是 0 到 1。默认值为 0。
39.39.1 命令
此过滤器支持与选项相同的命令。
39.40 卷积
应用 3x3、5x5、7x7 或水平/垂直最多 49 元素的卷积。
过滤器接受以下选项:
- 0m
- 1m
- 2m
- 3m
为每个平面设置矩阵。 矩阵是 9、25 或 49 个有符号整数的序列,用于方形模式, 或用于 1 到 49 的奇数个有符号整数的序列,用于行状模式。
- 0rdiv
- 1rdiv
- 2rdiv
- 3rdiv
为每个平面的计算值设置乘数。 如果未设置或为 0,则默认为矩阵元素总和的倒数。
- 0bias
- 1bias
- 2bias
- 3bias
为每个平面设置偏差。此值将添加到乘积的结果中。 在需要使整体图像变亮或变暗时很有用。默认值为 0.0。
- 0mode
- 1mode
- 2mode
- 3mode
为每个平面设置矩阵模式。可以是方形, 行状或列状。 默认值为方形.
39.40.1 命令
此过滤器支持上述所有选项作为命令.
39.40.2 示例
- 应用锐化:
convolution="0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0"
- 应用模糊:
convolution="1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1/9:1/9:1/9:1/9"
- 应用边缘增强:
convolution="0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:5:1:1:1:0:128:128:128"
- 应用边缘检测:
convolution="0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:5:5:5:1:0:128:128:128"
- 应用包含对角线的拉普拉斯边缘探测器:
convolution="1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:5:5:5:1:0:128:128:0"
- 应用浮雕:
convolution="-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2"
39.41 卷积处理
在频域中,使用第二个流作为脉冲对视频流应用二维卷积。
过滤器接受以下选项:
- planes
设置要处理的平面。
- impulse
设置将处理哪一个脉冲视频帧,可以是第一个或所有帧。默认值为全部.
该convolve滤镜也支持帧同步选项。
39.42 复制
将输入视频源不变地复制到输出。这主要用于测试目的。
39.43 coreimage
在OSX上使用Apple的CoreImage API通过GPU进行视频滤镜处理。
硬件加速基于OpenGL上下文。通常,这意味着它由视频硬件处理。然而,也存在软件实现的OpenGL,这意味着不能保证是硬件处理。这取决于具体的OSX。
Apple提供了许多滤镜和图像生成器,带有各种选项。必须通过名称和选项引用滤镜。
coreimage滤镜接受以下选项:
- list_filters
列出所有可用的滤镜和生成器以及它们的所有选项、可能的最小值和最大值以及默认值。
list_filters=true
- filter
通过其名称和选项指定所有滤镜。 使用list_filters获取所有有效的滤镜名称和选项。 数值选项由一个浮点值指定,并自动限制在其各自的值范围内。向量和颜色选项必须由一个以空格分隔的浮点值列表指定。需要进行字符转义。 一个特殊的选项名称
default可用于对滤镜使用默认选项。必须指定
default或至少一个滤镜选项。 所有未指定的选项将使用其默认值。 滤镜字符串的语法如下:filter=<NAME>@<OPTION>=<VALUE>[@<OPTION>=<VALUE>][@...][#<NAME>@<OPTION>=<VALUE>[@<OPTION>=<VALUE>][@...]][#...]
- output_rect
指定一个矩形,其中滤镜链的输出被复制到输入图像中。它由一个以空格分隔的浮点值列表指定:
output_rect=x\ y\ width\ height
如果未指定,输出矩形与输入图像的尺寸相同。输出矩形会自动在输入图像的边界处裁剪。每个组件的负值都是有效的。
output_rect=25\ 25\ 100\ 100
多个滤镜可以链接以进行连续处理而无需GPU与主机之间的传输,从而实现复杂滤镜链的快速处理。 目前,仅支持具有零个(生成器)或恰好一个(滤镜)输入图像和一个输出图像的滤镜。此外,过渡滤镜尚不能按预期使用。
某些滤镜会根据各自的滤镜内核生成带有额外填充的输出图像。这些填充会自动移除,以确保滤镜输出与输入图像的大小相同。
对于图像生成器,输出图像的大小由滤链的前一个输出图像或整个滤链的输入图像确定。这些生成器不会使用该图像的像素信息来生成其输出。然而,生成的输出会叠加到该图像上,导致部分或完全覆盖输出图像。
这个coreimagesrc视频源可用于生成直接输入到滤镜链中的输入图像。使用它时,不需要通过另一个视频源或输入视频提供输入图像。
39.43.1 示例
- 列出所有可用的滤镜:
coreimage=list_filters=true
- 使用带有默认选项的CIBoxBlur滤镜来模糊一个图像:
coreimage=filter=CIBoxBlur@default
- 使用一个滤镜链,其中CISepiaTone具有默认值,CIVignetteEffect的中心在100x100,半径为50像素:
coreimage=filter=CIBoxBlur@default#CIVignetteEffect@inputCenter=100\ 100@inputRadius=50
- 使用nullsrc和CIQRCodeGenerator为FFmpeg主页创建一个二维码,这是为Apple的标准bash shell给出的完整且转义的命令行:
ffmpeg -f lavfi -i nullsrc=s=100x100,coreimage=filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.png
39.44 corr
获取两个输入视频之间的相关性。
此滤镜需要两个输入视频。
两个输入视频必须具有相同的分辨率和像素格式才能使此滤镜正常运行。此外,它假设两者具有相同数量的帧,并逐帧比较。
通过日志系统打印每个分量的平均、最小和最大相关性。
滤镜将每帧计算的相关性存储在帧元数据中。
此滤镜还支持帧同步选项。
在下面的示例中,正在处理的输入文件main.mpg与参考文件进行比较ref.mpg.
ffmpeg -i main.mpg -i ref.mpg -lavfi corr -f null -
39.45 cover_rect
覆盖矩形对象
它接受以下选项:
- cover
可选覆盖图像的文件路径,需要是yuv420格式。
- mode
设置覆盖模式。
它接受以下值:
- ‘cover’
用提供的图像覆盖它
- ‘blur’
通过插值周围像素覆盖它
默认值是模糊.
39.45.1 示例
- 使用提供的图像覆盖给定视频的矩形对象
ffmpeg:ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
39.46 裁剪
将输入视频裁剪到给定的尺寸。
它接收以下参数:
- w, out_w
输出视频的宽度。默认值是
iw。 此表达式仅在滤镜配置期间或发送'w'或'out_w’命令时计算一次。- h, out_h
输出视频的高度。默认值是
ih。 此表达式仅在滤镜配置期间或发送'h'或'out_h’命令时计算一次。- x
输入视频中,输出视频左边缘的水平位置。默认值是
(in_w-out_w)/2。 此表达式每帧计算。- y
输入视频中,输出视频上边缘的垂直位置。默认值是
(in_h-out_h)/2。 此表达式每帧计算。- keep_aspect
如果设置为1,将强制输出显示宽高比与输入相同,方法是更改输出采样宽高比。默认值为0。
- exact
启用精确裁剪。如果启用,子采样视频将按照指定的确切宽度/高度/x/y裁剪,并且不会四舍五入至最接近的较小值。默认值为0。
这些输出宽度, 输出高度, x坐标, y坐标参数是 包含以下常量的表达式:
- x
- y
计算值x坐标和y坐标。它们在每个新帧时被计算。
- in_w
- in_h
输入的宽度和高度。
- iw
- ih
与输入宽度和输入高度相同.
- out_w
- out_h
输出(裁剪后)的宽度和高度。
- ow
- oh
与输出宽度和输出高度相同.
- a
与输入宽度 / 输入高度
- sar
输入采样宽高比
- dar
输入显示宽高比,与(输入宽度 / 输入高度) * sar
- hsub
- vsub
水平和垂直的色度抽样值。例如,对于像素格式 "yuv422p"hsub为 2,vsub为 1。
- n
输入帧的编号,从 0 开始。
- pos
输入帧在文件中的位置,如果未知则为 NAN;已弃用,请勿使用。
- t
时间戳以秒表示。如果输入时间戳未知,则为 NAN。
的表达式out_w可能依赖于out_h的值, 且out_h的表达式可能依赖于out_w,但它们不能依赖于x和y,因为x和y是在out_w和out_h.
之后评估的。x和y参数指定输出(非裁剪)区域左上角位置的表达式。它们会为每帧评估一次。如果计算值无效,将近似到最接近的有效值。
的表达式x可能依赖于y,并且y的表达式可能依赖于x.
39.46.1 示例
- 在位置 (12,34) 裁剪尺寸为 100x100 的区域。
crop=100:100:12:34
使用命名选项,上述示例变为:
crop=w=100:h=100:x=12:y=34
- 裁剪中心部分,尺寸为 100x100:
crop=100:100
- 裁剪中心部分,尺寸为输入视频的 2/3:
crop=2/3*in_w:2/3*in_h
- 裁剪输入视频的中心正方区域:
crop=out_w=in_h crop=in_h
- 限定矩形,左上角位于 (100:100),右下角对应于输入图像的右下角。
crop=in_w-100:in_h-100:100:100
- 从左右边各裁剪 10 像素,从上下边各裁剪 20 像素。
crop=in_w-2*10:in_h-2*20
- 保留输入图像的右下四分之一:
crop=in_w/2:in_h/2:in_w/2:in_h/2
- 裁剪高度以获得希腊式对称:
crop=in_w:1/PHI*in_w
- 应用抖动效果:
crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)
- 根据时间戳应用不规则相机效果:
crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)
- 设置 x 的值依赖于 y 的值:
crop=in_w/2:in_h/2:y:10+10*sin(n/10)
39.46.2 命令
此滤镜支持以下命令:
- w, out_w
- h, out_h
- x
- y
设置输出视频的宽度/高度及输入视频中的水平/垂直位置。 该命令接受与相应选项相同的语法。
如果指定的表达式无效,则保留为当前值。
39.47 cropdetect
自动检测裁剪尺寸。
它计算必要的裁剪参数,并通过日志系统打印出推荐的参数。检测到的维度对应于输入视频的非黑或视频区域,根据模式.
它接受以下参数:
- mode
根据模式,裁剪检测基于周围像素的黑值或运动矢量和边缘像素的结合。
- ‘black’
检测播放视频周围的黑色像素。如需精确控制,请使用选项限制.
- ‘mvedges’
通过视频内部的运动矢量和扫描通常构成播放视频边界的边缘像素来检测播放视频。
- limit
设置较高的黑色值阈值,可选范围从 0(无)到 255(针对 8 位格式的一切)。强度值高于该设定值视为非黑色。默认值为 24。 您也可以指定一个介于 0.0 和 1.0 之间的值,它将根据像素格式的位深度进行缩放。
- round
宽度/高度应整除的值。默认值为 16。偏移量会自动调整以使视频居中。使用 2 以获取只有偶数维度的视频(需要 4:2:2 视频)。编码到大多数视频编解码器时,最好使用 16。
- skip
设置跳过评估的初始帧的数量。默认值为 2。范围为 0 到 INT_MAX。
- reset_count, reset
设置计数器,确定经过多少帧后 cropdetect 将重置之前检测到的最大视频区域并重新开始检测当前最优裁剪区域。默认值为 0。
这对于频道徽标导致视频区域失真的情况可能是有用的。0 表示“从不重置”,返回播放期间遇到的最大区域。
- mv_threshold
设置运动检测的像素单位阈值。默认值为 8。
- low
- high
设置 Canny 阈值算法中使用的低阈值和高阈值值。
高阈值选择“强”边缘像素,然后通过 8 连通性连接到“弱”边缘像素,低阈值选择
低和高阈值必须在 [0,1] 范围内选择,且低应小于或等于高。.
对于低的默认值是
5/255,对于高的默认值是15/255.
39.47.1 示例
- 查找被黑边围绕的视频区域:
ffmpeg -i file.mp4 -vf cropdetect,metadata=mode=print -f null -
- 查找嵌入式视频区域,提前生成运动矢量:
ffmpeg -i file.mp4 -vf mestimate,cropdetect=mode=mvedges,metadata=mode=print -f null -
- 查找嵌入式视频区域,使用解码器中生成的运动矢量:
ffmpeg -flags2 +export_mvs -i file.mp4 -vf cropdetect=mode=mvedges,metadata=mode=print -f null -
39.47.2 命令
此滤镜支持以下命令:
- limit
该命令接受与相应选项相同的语法。 如果指定的表达式无效,则保留为当前值。
39.48 cue
延迟视频过滤,直到给定的挂钟时间戳。该滤镜首先传递输入视频片段。preroll帧的数量,然后最多缓冲buffer帧的数量并等待触发点。在到达触发点后,它会转发缓冲的帧,以及输入中随后到来的任何帧。
该滤镜可用于同步多个 ffmpeg 进程的输出,以便实时输出设备(如 decklink)。通过将延迟添加到过滤链中并预缓冲帧,进程可以在达到目标壁钟时间戳后几乎立即将数据传递到输出。
不能保证完美的帧精确度,但结果对于某些使用场景来说已经足够好了。
- cue
触发点时间戳以微秒表示的 UNIX 时间戳。默认值为 0。
- preroll
以秒为单位设定的前滚内容传递时长。默认值为 0。
- buffer
以秒为单位设定在等待触发点之前缓冲的最大内容时长。默认值为 0。
39.49 曲线
使用曲线应用颜色调整。
此滤镜与 Adobe Photoshop 和 GIMP 的曲线工具类似。每个组件(红色、绿色和蓝色)的值由N关键点通过光滑曲线彼此连接来定义。x 轴表示来自输入帧的像素值,y 轴表示为输出帧设置的新像素值。
默认情况下,一个组件曲线由两个点定义(0;0)和(1;1)。这会创建一条直线,每个原始像素值都会“调整”为其自身的值,这意味着图像没有发生变化。
该滤镜允许您重新定义这两个点并添加更多点。一条新的曲线将被定义,以平滑地通过所有这些新坐标。这些新定义的点需要在 x 轴上严格递增,并且它们x和y值必须在[0;1]区间内。曲线是使用自然或单调的三次样条插值形成的,这取决于interp选项(默认值:natural)。natural样条通常生成更平滑的曲线,而单调曲线(pchip)样条确保指定点之间的过渡是单调的。如果计算出的曲线超出了向量空间,则值将被相应地剪裁。
滤镜接受以下选项:
- preset
选择一个可用的颜色预设。此选项可以与r, g, b参数一起使用;在这种情况下,后面的选项优先于预设值。 可用的预设有:
- ‘none’
- ‘color_negative’
- ‘cross_process’
- ‘darker’
- ‘increase_contrast’
- ‘lighter’
- ‘linear_contrast’
- ‘medium_contrast’
- ‘negative’
- ‘strong_contrast’
- ‘vintage’
默认值为
none.- master, m
设置主关键点。这些点将定义第二次映射。它有时被称为“亮度”或“值”映射。它可以与r, g, b或all一起使用,因为它的作用类似于后处理 LUT。
- red, r
设置红色组件的关键点。
- green, g
设置绿色组件的关键点。
- blue, b
设置蓝色组件的关键点。
- all
设置所有组件的关键点(不包括主组件)。 可以与其他关键点组件选项一起使用。在这种情况下,未设置的组件将回退到此all设置。
- psfile
指定 Photoshop 曲线文件 (
.acv) 从中导入设置。- plot
保存 GNUplot 脚本中的曲线到指定文件。
- interp
指定插值类型。可用的算法有:
- ‘natural’
自然三次样条使用一个分段的三次多项式,该多项式是二阶连续可微的。
- ‘pchip’
单调三次样条使用分段三次 Hermite 插值多项式 (PCHIP)。
为了避免某些滤镜图语法冲突,每个关键点列表需要使用以下语法来定义:x0/y0 x1/y1 x2/y2 ....
39.49.1 命令
此滤镜支持与选项相同的命令。
39.49.2 示例
- 略微提升蓝色中间级别:
curves=blue='0/0 0.5/0.58 1/1'
- 复古效果:
curves=r='0/0.11 .42/.51 1/0.95':g='0/0 0.50/0.48 1/1':b='0/0.22 .49/.44 1/0.8'
这里我们为每种组件分别获得以下坐标:
- 红色
(0;0.11) (0.42;0.51) (1;0.95)- 绿色
(0;0) (0.50;0.48) (1;1)- 蓝色
(0;0.22) (0.49;0.44) (1;0.80)
- 前面的示例也可以通过相关内置预设来实现:
curves=preset=vintage
- 或者简单地使用:
curves=vintage
- 使用 Photoshop 预设并重新定义绿色组件的点:
curves=psfile='MyCurvesPresets/purple.acv':green='0/0 0.45/0.53 1/1'
- 检查
cross_process配置文件的曲线,使用ffmpeg和gnuplot:ffmpeg -f lavfi -i color -vf curves=cross_process:plot=/tmp/curves.plt -frames:v 1 -f null - gnuplot -p /tmp/curves.plt
39.50 数据范围
视频数据分析滤镜。
此滤镜显示视频部分的十六进制像素值。
滤镜接受以下选项:
- size, s
设置输出视频大小。
- x
设置要从中提取像素的 x 偏移。
- y
设置要从中提取像素的 y 偏移。
- mode
设置范围模式,可以是以下之一:
- ‘mono’
在黑色背景上用白色绘制十六进制像素值。
- ‘color’
在黑色背景上用输入视频像素颜色绘制十六进制像素值。
- ‘color2’
在从输入视频中选取的彩色背景上绘制十六进制像素值,文本颜色被选择为始终可见。
- axis
在视频的左侧和顶部绘制行号和列号。
- opacity
设置背景不透明度。
- format
设置显示数字格式,可以是
hex或dec。默认值为hex.- components
设置要显示的像素组件。默认情况下,显示所有像素组件。
39.50.1 命令
此滤镜支持与选项相同的命令,但不包括size选项。
39.51 定向模糊
应用定向模糊滤镜。
滤镜接受以下选项:
- angle
设置定向模糊的角度。默认值为
45.- radius
设置定向模糊的半径。默认值为
5.- planes
设置要过滤的平面。默认情况下过滤所有平面。
39.51.1 命令
此滤镜支持与选项相同的命令。 命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.52 dctdnoiz
使用 2D DCT(频率域过滤)降噪帧。
此滤镜并非为实时设计。
滤镜接受以下选项:
- sigma, s
设置噪声 sigma 常数。
此西格玛定义了一个硬阈值为
3 * sigma;每个离散余弦变换(DCT)系数(绝对值)低于该阈值的将被丢弃。如果需要更高级的过滤,请参见expr.
默认是
0.- overlap
设置每块的重叠像素数量。因为过滤可能较慢,所以可以在一定程度上降低此值,但会降低过滤效果,并存在各种伪影的风险。
如果重叠值无法处理整个输入宽度或高度,将显示警告,相应的边界将不会去噪。
默认值是块大小-1,这是最佳设置。
- expr, e
设置系数因子表达式。
对于每个DCT块的系数,将评估该表达式作为系数的乘数值。
如果此选项被设置,sigma选项将被忽略。
可以通过c变量访问系数的绝对值。
- n
设置块大小使用比特数。
1<<n定义了块大小,即处理块的宽度和高度。默认值为3(8x8),可以升到4以实现块大小16x16。注意,更改此设置会对处理速度产生巨大影响。此外,更大的块大小未必意味着更好的去噪效果。
39.52.1 示例
使用一个sigma为4.5:
dctdnoiz=4.5
相同的操作可以通过表达式系统实现:
dctdnoiz=e='gte(c, 4.5*3)'
使用块大小为16x16:
dctdnoiz=15:n=4
39.53 消除色带
从输入视频中移除色带伪影。 它通过替换色带像素为参考像素的平均值来工作。
该过滤器接受以下选项:
- 1thr
- 2thr
- 3thr
- 4thr
为每一平面设置色带检测阈值。默认值为0.02。 有效范围是0.00003到0.5。 如果当前像素和参考像素之间的差异小于阈值,则其将被视为色带。
- range, r
色带检测范围(以像素为单位)。默认值为16。如果为正,将使用0到设置值范围内的随机数。如果为负,将使用准确的绝对值。 范围定义了当前像素周围的一个四像素的正方形。
- direction, d
设置用于比较的四个像素方向(以弧度表示)。如果为正,将从0到设置方向范围内随机选择方向。如果为负,将选择绝对值的准确方向。例如,方向0、-PI或-2*PI弧度只会选择同一行上的像素,而-PI/2只会选择同一列上的像素。
- blur, b
如果启用,则当前像素将与所有四周围像素的平均值进行比较。默认开启。如果禁用,则当前像素会分别与所有四周围像素进行比较。如果仅当所有四个与周围像素的差异小于阈值时,该像素才被视为有色带。
- coupling, c
如果启用,当前像素只有在所有像素分量都有色带时才会被改变,例如,所有颜色分量都触发了色带检测阈值。默认禁用。
39.53.1 命令
该过滤器支持以上所有选项作为命令.
39.54 去块
从输入视频中移除块状伪影。
该过滤器接受以下选项:
- filter
设置过滤器类型,可选择弱或强。默认是强。 这控制了进行什么样的去块处理。
- block
设置块大小,允许范围为4到512。默认值为8.
- alpha
- beta
- gamma
- delta
设置块状检测阈值。允许范围是0到1。 默认值是:0.098用于alpha和0.05用于其余部分。 更高的阈值提供更强的去块效果。 设置alpha控制块边缘处的阈值检测。 剩余选项控制靠近边缘的阈值检测。每个都分别控制在下方/上方或左侧/右侧的检测。将任何这些设置为0将禁用去块。
- planes
设置需要过滤的平面。默认是过滤所有可用平面。
39.54.1 示例
- 使用弱过滤器和块大小为4像素的去块。
deblock=filter=weak:block=4
- 使用强过滤器、块大小为4像素,并为更多边缘的去块设置自定义阈值。
deblock=filter=strong:block=4:alpha=0.12:beta=0.07:gamma=0.06:delta=0.05
- 与上述类似,但是仅过滤第一个平面。
deblock=filter=strong:block=4:alpha=0.12:beta=0.07:gamma=0.06:delta=0.05:planes=1
- 与上述类似,但是仅过滤第二和第三平面。
deblock=filter=strong:block=4:alpha=0.12:beta=0.07:gamma=0.06:delta=0.05:planes=6
39.54.2 命令
此过滤器支持以上所有选项作为命令.
39.55 下采样
以规则间隔丢弃重复帧。
该过滤器接受以下选项:
- cycle
设置从中丢弃一个帧的帧数。设置为N表示每批N帧中将有一个帧被丢弃。 默认值为
5.- dupthresh
设置重复检测的阈值。如果某帧的差异度量小于或等于该值,则它会被认为是重复的。默认值为
1.1- scthresh
设置场景变化阈值。默认值为
15.- blockx
- blocky
设置用于度量计算的X轴和Y轴块的大小。较大的块可以更好地抑制噪声,但会对小运动的检测变差。必须是二的幂。默认值为
32.- ppsrc
将主要输入标记为预处理输入,并激活干净源输入流。这允许先对输入进行预处理,然后再进行度量计算,同时保持帧选择无损失。当设置为
1时,第一个流用于预处理输入,第二个流是保留帧选择的干净源。默认值为0.- chroma
设置度量计算中是否考虑色度。默认值为
1.- mixed
设置输入是否仅部分包含需要下采样的内容。 默认值为
false。 如果启用,视频输出流将为可变帧率。
39.56 解卷积
使用频域中的第二视频流作为脉冲,应用视频流的二维解卷积。
该过滤器接受以下选项:
- planes
设置要处理的平面。
- impulse
设置将处理哪些脉冲视频帧,可以是第一个或所有。默认值是所有.
- noise
设置在进行除法操作时的噪声。默认值是0.0000001。当宽度和高度不相同且不是2的幂或在卷积前的流有噪声时,这十分有用。
这个deconvolve滤镜还支持帧同步选项。
39.57 去点状
减少视频中的交叉亮度(点爬行现象)和交叉颜色(彩虹现象)。
它接受以下选项:
- m
设置操作模式。可以是点爬行用于减少交叉亮度和/或彩虹用于减少交叉颜色的组合。
- lt
设置空间亮度阈值。较低的值会增加交叉亮度的减少。
- tl
设置时间亮度容差。较高的值会增加交叉亮度的减少。
- tc
设置时间色度变化的容差。较高的值会增加交叉颜色的减少。
- ct
设置时间色度阈值。较低的值会增加交叉颜色的减少。
39.58 压缩
对视频应用压缩效果。
这个滤镜通过仅考虑比像素值低的值,用局部(3x3)平均值替换像素。
它接受以下选项:
- threshold0
- threshold1
- threshold2
- threshold3
限制每个平面的最大变化,默认值是65535。如果设置为0,则平面保持不变。
39.58.1 命令
这个滤镜支持以上所有选项作为命令.
39.59 去闪烁
去除时间帧亮度变化。
它接受以下选项:
- size, s
设置移动平均滤镜的帧大小。默认值是5。允许范围是2 - 129。
- mode, m
设置平均模式以平滑时间亮度变化。
可用值是:
- ‘am’
算术平均值
- ‘gm’
几何平均值
- ‘hm’
调和平均值
- ‘qm’
二次平均值
- ‘cm’
立方平均值
- ‘pm’
幂平均值
- ‘median’
中值
- bypass
实际上不修改帧。只用于获取元数据时很有用。
39.60 去抖动
移除部分隔行转码内容产生的抖动。
抖动可能由以下情况引起,例如,拉伸滤镜如果原始来源是部分隔行转码内容,滤镜输出将具有可变帧率。这可能改变容器的记录帧率。除此之外,这个滤镜不会影响固定帧率的视频。pullup,dejudder选项的用途在于:
指定抖动重复窗口的长度。
- cycle
接受任何大于1的整数。常见值有:
Accepts any integer greater than 1. Useful values are:
- ‘4’
如果原始内容从24 fps转码到30 fps(电影转NTSC)。
- ‘5’
如果原始内容从25 fps转码到30 fps(PAL转NTSC)。
- ‘20’
如果两者混合。
默认值是‘4’.
39.61 去标识
通过简单插值周围像素来抑制电视台的标识。只需设置覆盖标识的区域,看它消失。但有时可能出现更难看的效果——效果因情况而异。
它接受以下参数:
- x
- y
指定标识的左上角坐标。必须指定。
- w
- h
指定需要清除的标识的宽度和高度。必须指定。
- show
设置为1时,会在屏幕上显示绿色矩形以简化找到正确的x, y, w和h参数。默认值是0。
矩形绘制在用于插值的最外层像素上。矩形外侧的像素值将用来计算矩形内的插值像素值。
39.61.1 示例
- 设置覆盖区域的矩形,左上角坐标为0,0,大小为100x77:
delogo=x=0:y=0:w=100:h=77
39.62 去雨
通过基于卷积神经网络的去雨方法去除输入图像/视频中的雨滴。支持的模型包括:
- 递归缩减与上下文聚合网络(RESCAN)。参见http://openaccess.thecvf.com/content_ECCV_2018/papers/Xia_Li_Recurrent_Squeeze-and-Excitation_Context_ECCV_2018_paper.pdf.
训练和模型生成脚本已在以下仓库中提供:https://github.com/XueweiMeng/derain_filter.git.
该滤镜接受以下选项:
- filter_type
指定使用哪个滤镜。该选项接受以下值:
- ‘derain’
去雨滤镜。进行去雨处理需要使用去雨模型。
- ‘dehaze’
去雾滤镜。进行去雾处理需要使用去雾模型。
默认值是‘derain’.
- dnn_backend
指定用于模型加载和执行的DNN后端。这一选项接受以下值:
- ‘tensorflow’
TensorFlow 后端。启用此后端需要安装 TensorFlow for C 库(见https://www.tensorflow.org/install/lang_c)并配置FFmpeg为
--enable-libtensorflow
- model
设置模型文件的路径,该文件指定网络架构及其参数。注意,不同后端使用的文件格式不同。TensorFlow只能加载其特定格式的文件。
为了获得完整功能(如异步执行),请使用dnn_processing滤镜。
39.63 去抖动
试图修复水平和/或垂直方向上的微小变化。这个滤镜有助于消除手持相机拍摄、三脚架震动或移动的车辆所产生的相机抖动。
滤镜接受以下选项:
- x
- y
- w
- h
指定一个矩形区域,用于限制运动矢量的搜索范围。 如果需要,可以将运动矢量搜索限制在帧内的一个矩形区域中,该区域由其左上角、宽度和高度定义。 这些参数的含义与用于可视化边框位置的 drawbox 滤镜相同。
这在帧内对象移动可能被运动矢量搜索混淆为摄像机运动时很有用。
如果x, y, w和h中的任何或所有设置为-1,则使用完整帧。这允许稍后设置其他选项而无需指定运动矢量搜索的边界框。
默认值 - 搜索整个帧。
- rx
- ry
指定在x和y方向上的最大移动范围,范围为0-64像素。默认值为16。
- edge
指定如何生成像素以填充边框的空白区域。可用的值有:
- ‘blank, 0’
在空白位置填充零值
- ‘original, 1’
在空白位置使用原始图像
- ‘clamp, 2’
在空白位置使用外扩的边缘值
- ‘mirror, 3’
在空白位置使用镜像边缘
默认值是'mirror’.
- blocksize
指定用于运动搜索的块大小。范围为4-128像素,默认值为8。
- contrast
指定块的对比度阈值。只有对比度(最暗和最亮像素之间的差异)超过指定值的块才会被考虑。范围为1-255,默认值为125。
- search
指定搜索策略。可用的值有:
- ‘exhaustive, 0’
设置为全量搜索
- ‘less, 1’
设置为较少量的搜索。
默认值是'exhaustive’.
- filename
如果设置了这个选项,则运动搜索的详细日志将写入指定的文件。
39.64 去溢色
去除由于绿幕或蓝幕颜色反射引起的前景颜色的不良污染。
此滤镜接受以下选项:
- type
设置要使用的去溢色类型。
- mix
设置溢色图的生成方式。
- expand
设置去除剩余溢色的程度。
- red
控制溢色区域中的红色量。
- green
控制溢色区域中的绿色量。 绿幕情况下应为-1。
- blue
控制溢色区域中的蓝色量。 蓝幕情况下应为-1。
- brightness
控制溢色区域的亮度,同时保留颜色。
- alpha
根据生成的溢色图修改alpha值。
39.64.1 命令
此滤镜支持上述所有选项作为命令.
39.65 去隔行
应用与隔行操作完全相反的效果。需要使用通过pattern选项指定的预定义模式,该模式必须与传递给隔行滤镜的模式相同。
此滤镜接受以下选项:
- first_field
- ‘top, t’
顶部场优先
- ‘bottom, b’
底部场优先 默认值为
top.
- pattern
一个代表您希望应用的下拉图案的数字字符串。 默认值为
23.- start_frame
表示第一帧相对于隔行模式的起始位置的数字。如果流被剪切,请使用此选项。默认值为
0.
39.66 膨胀
对视频应用膨胀效果。
此滤镜用局部(3x3)最大值替换像素。
它接受以下选项:
- threshold0
- threshold1
- threshold2
- threshold3
限制每个平面的最大变化量,默认值为65535。 如果为0,平面将保持不变。
- coordinates
指定要参考的像素标志。默认值为255,即使用所有八个像素。
针对局部3x3坐标的标志映射如下:
1 2 3 4 5 6 7 8
39.66.1 命令
此滤镜支持上述所有选项作为命令.
39.67 位移
根据第二和第三个输入流指示的情况对像素进行位移。
它接受三个输入流并输出一个流,第一个输入是源,第二和第三个输入是位移图。
第二个输入指定像素沿x轴位移的量,第三个输入指定像素沿y轴位移的量。 如果其中一个位移图流终止,则会使用该位移图的最后一帧。
请注意,一旦生成,位移图可以被反复使用。
以下是所接受选项的描述。
- edge
设置超出范围的像素的位移行为。
可用的值有:
- ‘blank’
缺失的像素将被黑色像素替代。
- ‘smear’
相邻像素将扩展以替代缺失的像素。
- ‘wrap’
超出范围的像素将被包裹以指向另一侧的像素。
- ‘mirror’
超出范围的像素将被镜像的像素替代。
默认值是'smear’.
39.67.1 示例
- 为hd720大小的rgb输入视频添加涟漪效果:
ffmpeg -i INPUT -f lavfi -i nullsrc=s=hd720,lutrgb=128:128:128 -f lavfi -i nullsrc=s=hd720,geq='r=128+30*sin(2*PI*X/400+T):g=128+30*sin(2*PI*X/400+T):b=128+30*sin(2*PI*X/400+T)' -lavfi '[0][1][2]displace' OUTPUT
- 为hd720大小的rgb输入视频添加波浪效果:
ffmpeg -i INPUT -f lavfi -i nullsrc=hd720,geq='r=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T)):g=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T)):b=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T))' -lavfi '[1]split[x][y],[0][x][y]displace' OUTPUT
39.68 dnn分类
基于边界框使用深度神经网络进行分类。
此滤镜接受以下选项:
- dnn_backend
指定用于加载和执行模型的DNN后端。此选项目前仅接受openvino,tensorflow后端将添加。
- model
设置指定网络架构及其参数的模型文件路径。 请注意,不同的后端使用不同的文件格式。
- input
设置dnn网络的输入名称。
- output
设置dnn网络的输出名称。
- confidence
设置置信度阈值(默认值:0.5)。
- labels
设置标签文件的路径,用于指定标签ID与名称之间的映射。 每个标签名称写在一行中,尾随空格和空行会被忽略。 第一行是标签ID为0的名称,第二行是标签ID为1的名称,依此类推。 如果未提供标签文件,则将标签ID视为名称。
- backend_configs
设置要传递到后端的配置
对于tensorflow后端,您可以使用sess_config选项设置其配置, 请使用tools/python/tf_sess_config.py获取您系统的配置。
39.69 dnn检测
使用深度神经网络进行对象检测。
此滤镜接受以下选项:
- dnn_backend
指定用于加载和执行模型的DNN后端。此选项目前仅接受openvino,tensorflow后端将添加。
- model
设置指定网络架构及其参数的模型文件路径。 请注意,不同的后端使用不同的文件格式。
- input
设置dnn网络的输入名称。
- output
设置dnn网络的输出名称。
- confidence
设置置信度阈值(默认值:0.5)。
- labels
设置标签文件路径,用于指定标签ID与名称之间的映射。 每个标签名称写在一行中,尾随空格和空行会被忽略。 第一行是标签ID为0(通常为“背景”),第二行是标签ID为1的名称,依此类推。 如果未提供标签文件,则将标签ID视为名称。
- backend_configs
设置要传递到后端的配置。为了使用异步执行,请设置异步(默认值:已设置)。 如果后端不支持异步,将回滚到同步执行。
39.70 dnn处理
使用深度神经网络进行图像处理。它与另一个滤镜协作,将帧的像素格式转换为神经网络所需的格式。
此滤镜接受以下选项:
- dnn_backend
指定用于加载和执行模型的DNN后端。 此选项接受以下值:
- ‘tensorflow’
TensorFlow后端。要启用此后端,您需要安装TensorFlow for C库(请参阅https://www.tensorflow.org/install/lang_c)并用以下配置FFmpeg:
--enable-libtensorflow- ‘openvino’
OpenVINO后端。要启用此后端,您需要构建并安装OpenVINO for C库(请参阅https://github.com/openvinotoolkit/openvino/blob/master/build-instruction.md)并用以下选项配置FFmpeg:
--enable-libopenvino(如果未将头文件和库安装到系统路径,可能需要--extra-cflags=-I... --extra-ldflags=-L...)- ‘torch’
Libtorch后端。要启用此后端,您需要构建并安装Libtorch for C++库。请下载cxx11 ABI版本(参阅https://pytorch.org/get-started/locally),并用以下配置FFmpeg:
--enable-libtorch --extra-cflags=-I/libtorch_root/libtorch/include --extra-cflags=-I/libtorch_root/libtorch/include/torch/csrc/api/include --extra-ldflags=-L/libtorch_root/libtorch/lib/
- model
设置模型文件的路径,指定网络架构及其参数。 请注意,不同的后端使用不同的文件格式。TensorFlow、OpenVINO 和Libtorch后端只能加载它们各自格式的文件。
- input
设置dnn网络的输入名称。
- output
设置dnn网络的输出名称。
- backend_configs
设置传递到后端的配置。要使用异步执行,请设置为异步(默认:设置)。 如果后端不支持异步执行,将回滚到同步执行。
对于tensorflow后端,您可以通过以下方式设置其配置sess_config选项, 请使用tools/python/tf_sess_config.py获取您的系统的TensorFlow后端的配置。
39.70.1 示例
- 使用can.pb(参见去雨过滤器)去除rgb24帧中的雨:
./ffmpeg -i rain.jpg -vf format=rgb24,dnn_processing=dnn_backend=tensorflow:model=can.pb:input=x:output=y derain.jpg
- 使用srcnn.pb处理Y通道(参见超分辨率过滤器),用于yuv420p框架(支持平面YUV格式):
./ffmpeg -i 480p.jpg -vf format=yuv420p,scale=w=iw*2:h=ih*2,dnn_processing=dnn_backend=tensorflow:model=srcnn.pb:input=x:output=y -y srcnn.jpg
- 使用espcn.pb处理Y通道(参见超分辨率过滤器),调整帧尺寸,用于yuv420p格式(支持平面YUV格式),
请使用tools/python/tf_sess_config.py获取您的系统的TensorFlow后端的配置。
./ffmpeg -i 480p.jpg -vf format=yuv420p,dnn_processing=dnn_backend=tensorflow:model=espcn.pb:input=x:output=y:backend_configs=sess_config=0x10022805320e09cdccccccccccec3f20012a01303801 -y tmp.espcn.jpg
39.71 绘制框
在输入图像上绘制彩色框。
它接受以下参数:
- x
- y
指定框的左上角坐标的表达式,默认为0。
- width, w
- height, h
指定框的宽度和高度的表达式;如果为0,则解释为输入的宽度和高度。默认为0。
- color, c
指定框的颜色。有关此选项的一般语法,请参阅(ffmpeg-utils)"颜色"部分,位于ffmpeg-utils手册中。如果使用特殊值
invert,框边缘的颜色将与视频的亮度反转相同。- thickness, t
设置框边缘厚度的表达式。 值为
fill将创建一个填充的框。默认值为3.请参阅下方接受的常量列表。
- replace
当输入具有透明度时适用。值为
1时,绘制的框像素将覆盖视频的颜色和透明度像素。 默认值为0,将框合成到输入中,同时保留视频的透明度。
参数x, y, w和h以及t是包含以下常量的表达式:
- dar
输入的显示宽高比,与(w / h) * sar.
- hsub
- vsub
水平和垂直色度抽取值。例如,对于像素格式“yuv422p”hsub为2,vsub为1。
- in_h, ih
- in_w, iw
输入宽度和高度。
- sar
输入的采样宽高比。
- x
- y
绘制框的x和y偏移坐标。
- w
- h
绘制框的宽度和高度。
- box_source
框源可以设置为side_data_detection_bboxes,如果您希望使用检测框边数据的框数据。
如果box_source已设置,则x, y, width和height将被忽略, 并仍然使用检测框边数据的框数据。因此,如果您不确定框源,请不要使用此参数。
- t
绘制框的厚度。
这些常量使得x, y, w, h和t表达式可以相互引用,因此您可以例如指定
y=x/dar或h=w/dar.
39.71.1 示例
- 在输入图像边缘绘制黑框:
drawbox
- 绘制一个红色并具有50%不透明度的框:
drawbox=10:20:200:60:red@0.5
前一个示例可以指定为:
drawbox=x=10:y=20:w=200:h=60:color=red@0.5
- 用粉红色填充框:
drawbox=x=10:y=10:w=100:h=100:color=pink@0.5:t=fill
- 绘制一个2像素宽的红色2.40:1遮罩:
drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red
39.71.2 命令
此过滤器支持与选项相同的命令。 命令接受与相应选项相同的语法。
如果指定的表达式无效,它将保持当前值。
39.72 绘制图表
使用输入视频元数据绘制图表。
它接受以下参数:
- m1
设置用于从中获取元数据值绘制图表的第一个帧元数据键。
- fg1
设置第一个前景色表达式。
- m2
设置用于从中获取元数据值绘制图表的第二个帧元数据键。
- fg2
设置第二个前景色表达式。
- m3
设置用于从中获取元数据值绘制图表的第三个帧元数据键。
- fg3
设置第三个前景色表达式。
- m4
设置用于从中获取元数据值绘制图表的第四个帧元数据键。
- fg4
设置第四个前景色表达式。
- min
设置元数据值的最小值。
- max
设置元数据值的最大值。
- bg
设置图表背景颜色。默认为白色。
- mode
设置图表模式。
模式的可用值为:
- ‘bar’
- ‘dot’
- ‘line’
默认值为
line.- slide
设置滑动模式。
滑动模式的可用值为:
- ‘frame’
到达右边界时绘制新帧。
- ‘replace’
用新列替换旧列。
- ‘scroll’
从右向左滚动。
- ‘rscroll’
从左向右滚动。
- ‘picture’
绘制单张图片。
默认值是
frame.- size
设置图形视频的大小。此选项的语法请参考ffmpeg-utils 手册中的“视频大小”部分。 默认值是
900x256.- rate, r
设置输出帧率。默认值是
25.前景色表达式可以使用以下变量:
- MIN
元数据值的最小值。
- MAX
元数据值的最大值。
- VAL
当前元数据键的值。
颜色定义为 0xAABBGGRR。
使用signalstats滤镜元数据的示例:
signalstats,drawgraph=lavfi.signalstats.YAVG:min=0:max=255
使用ebur128滤镜元数据的示例:
ebur128=metadata=1,adrawgraph=lavfi.r128.M:min=-120:max=5
39.73 绘制网格
在输入图像上绘制网格。
接受以下参数:
- x
- y
指定网格交点某点坐标的表达式(用于配置偏移)。两者默认值都为 0。
- width, w
- height, h
指定网格单元格宽度和高度的表达式。如果为 0,则分别解释为输入宽度和高度减去
thickness,这样图像会被框住。默认值为 0。- color, c
指定网格颜色。此选项的通用语法请参考ffmpeg-utils 手册中的“颜色”部分。 如果使用了特殊值
invert,则网格颜色与视频颜色相同,但亮度反转。- thickness, t
设置网格线厚度的表达式。默认值为
1.参见下面列出的可接受常量列表。
- replace
当输入具有透明度时适用。使用
1时,绘制的网格像素会覆盖视频的颜色和透明度像素。 默认值是0,网格叠加到输入视频上,同时保留视频的透明度。
参数x, y, w和h以及t是包含以下常量的表达式:
- dar
输入显示宽高比,与(w / h) * sar.
- hsub
- vsub
水平和垂直色度子采样值。例如像素格式为“yuv422p”时,hsub为 2,vsub为 1。
- in_h, ih
- in_w, iw
输入网格单元格的宽度和高度。
- sar
输入样本宽高比。
- x
- y
网格交点某点的 x 和 y 坐标(用于配置偏移)。
- w
- h
绘制单元格的宽度和高度。
- t
绘制单元格的厚度。
这些常量允许x, y, w, h和t表达式相互引用,例如可以指定
y=x/dar或h=w/dar.
39.73.1 示例
- 绘制一个网格,单元格宽高为100x100像素,厚度为2像素,红色,50%不透明度:
drawgrid=width=100:height=100:thickness=2:color=red@0.5
- 绘制一个白色的3x3网格,50%不透明度:
drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5
39.73.2 命令
此滤镜支持与选项相同的命令。 命令接受与对应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.74 绘制文本
使用 libfreetype 库在视频顶部绘制字符串或指定文件中的文本。
要启用此滤镜的编译,需要使用以下选项配置 FFmpeg:--enable-libfreetype以及--enable-libharfbuzz。
要启用默认字体回退和字体选项,需要使用以下选项配置 FFmpeg:--enable-libfontconfig。
要启用文本形状选项,需要使用以下选项配置 FFmpeg:--enable-libfribidi.
39.74.1 语法
接受以下参数:
- box
使用背景色绘制文本周围的框。 值必须是 1(启用)或 0(禁用)。 默认值box是 0。
- boxborderw
设置使用框颜色绘制框时的边框宽度。 值必须用以下格式之一指定:
-
boxborderw=10将所有边框宽度设置为 10 -
boxborderw=10|20将顶部和底部边框宽度设置为 10, 左右边框宽度设置为 20 -
boxborderw=10|20|30将顶部边框宽度设置为 10, 底部边框宽度设置为 30,左右边框宽度设置为 20 -
boxborderw=10|20|30|40将顶部边框宽度设置为 10,右侧 20, 底部 30,左侧 40
默认值框边框宽度是 "0"。
-
- boxcolor
指定用于绘制文本框的颜色。此选项的语法参考ffmpeg-utils 手册中的“颜色”部分.
默认值是框颜色是 "白色"。
- line_spacing
设置行间距的像素值。默认值为line_spacing是 0。
- text_align
设置文本相对于框边界的垂直和水平对齐方式。 值是标志的组合,一个表示垂直对齐(T=顶部,M=中间,B=底部),一个表示水平对齐(L=左,C=居中,R=右)。 请注意,制表符仅支持左水平对齐方式。
- y_align
指定y值的参考对象。可能的值如下:
-
text最高字形的顶部与第一行文本放置在y -
baseline第一行文本的基线与y -
font第一行文本的基线与y加上字体度量中的上升部分(像素)放置位置
默认值为y_align是 "text",用于向后兼容。
-
- borderw
设置用于围绕文本绘制边框的宽度,使用bordercolor。 默认值为borderw是 0。
- bordercolor
设置用于围绕文本绘制边框的颜色。有关此选项的语法,请检查(ffmpeg-utils)"颜色"部分的 ffmpeg-utils 手册.
默认值为bordercolor是 "黑色"。
- expansion
选择文本的扩展方式。可以是
none,strftime(已弃用) 或normal(默认)。请参阅文本扩展详细信息的部分。- basetime
设置计数的开始时间。值以微秒表示,仅在已弃用的
strftime扩展模式中应用。在正常扩展模式中模拟,使用pts函数,将开始时间(以秒为单位)作为第二个参数提供。- fix_bounds
如果为真,检查并修正文本坐标以避免裁剪。
- fontcolor
用于绘制字体的颜色。有关此选项的语法,请检查(ffmpeg-utils)"颜色"部分的 ffmpeg-utils 手册.
默认值为fontcolor是 "黑色"。
- fontcolor_expr
与text以相同方式展开的字符串,用于动态获取fontcolor值。默认情况下,此选项为空值且未处理。当此选项设置时,会覆盖fontcolor选项。
- font
用于绘制文本的字体族。默认是 Sans。
- fontfile
用于绘制文本的字体文件。路径必须包含此文件。 当 fontconfig 支持被禁用时,此参数是必需的。
- alpha
应用 alpha 混合绘制文本的值。 值可以是 0.0 到 1.0 之间的数字。 表达式也接受相同变量x, y。 默认值是 1。 请参阅fontcolor_expr.
- fontsize
用于绘制文本的字体大小。 默认值为fontsize是 16。
- text_shaping
如果设置为 1,则尝试在绘制前整形文本(例如,反转右到左文本的顺序并连接阿拉伯字符)。 否则,只绘制给定的文本。 默认值为 1(如果支持)。
- ft_load_flags
用于加载字体的标志。
标志匹配 libfreetype 支持的对应标志,并且是以下值的组合:
- 默认
- 不缩放
- 无提示
- 渲染
- 无位图
- 垂直布局
- 强制自动提示
- 裁剪位图
- 执着
- 忽略全局前进宽度
- 不递归
- 忽略变换
- 单色
- 线性设计
- 不自动提示
默认值是 "default"。
有关详细信息,请查阅 FT_LOAD_* libfreetype 标志的文档。
- shadowcolor
用于在绘制的文本背后绘制阴影的颜色。 有关此选项的语法,请检查(ffmpeg-utils)"颜色"部分的 ffmpeg-utils 手册.
默认值为shadowcolor是 "黑色"。
- boxw
设置用于围绕文本绘制框的宽度。 默认值为boxw自动计算以匹配文本宽度。
- boxh
设置用于围绕文本绘制框的高度。 默认值为boxh自动计算以匹配文本高度。
- shadowx
- shadowy
用于设置文本阴影位置相对于文本位置的 x 和 y 偏移量。 它们可以是正值或负值。 默认情况下,两者的值均为 "0"。
- start_number
用于 n/frame_num 变量的起始帧号。 默认值为 "0"。
- tabsize
用于渲染制表符的空格数量。 默认值为 4。
- timecode
以 "hh:mm:ss[:;.]ff" 格式设置初始时间码表示。 可以使用或不使用 text 参数。timecode_rate选项必须指定。
- timecode_rate, rate, r
设置时间码帧率(仅限时间码)。值将四舍五入为最接近的整数。 最小值为 "1"。 支持 30 和 60 帧速率的丢帧时间码。
- tc24hmax
如果设置为 1,timecode 选项的输出将在 24 小时内回绕。 默认值为 0(禁用)。
- text
要绘制的文本字符串。文本必须是 UTF-8 编码字符的序列。此参数在未通过参数指定文件时是必填项。文本文件.
- textfile
包含待绘制文本的文本文件。文本必须是 UTF-8 编码字符的序列。
如果未通过参数指定文本字符串,此参数是必填项。文本.
如果同时文本和文本文件均被指定,将会抛出错误。
- text_source
如果需要在检测边界框中的辅助数据中使用文本数据,则应将文本来源设置为 side_data_detection_bboxes。
如果设置了文本来源,文本和文本文件将被忽略,仍然使用检测边界框中的辅助数据中的文本数据。因此,如果不确定文本来源,请勿使用此参数。
- reload
该文本文件将在指定帧间隔重新加载。请确保原子地更新文本文件,否则可能会部分读取或读取失败。范围为 0 到 INT_MAX。默认值为 0。
- x
- y
指定文本将在视频帧中绘制的偏移位置的表达式。它们相对于输出图像的顶部/左侧边界。
默认值x和y为 "0"。
请参见下方接受的常量和函数的列表。
参数x和y是包含以下常量和函数的表达式:
- dar
显示宽高比。与 (宽度 / 高度) * 样本宽高比
- hsub
- vsub
水平和垂直色度子采样值。例如,对于像素格式 "yuv422p"水平子采样为 2,垂直子采样为 1。
- line_h, lh
每行文本的高度
- main_h, h, H
输入高度
- main_w, w, W
输入宽度
- max_glyph_a, ascent
所有渲染的字符中用于放置字形轮廓点的最高/上方网格坐标到基线的最大距离。由于网格的Y轴向上方向性,该值为正。
- max_glyph_d, descent
所有渲染的字符中用于放置字形轮廓点的最低网格坐标到基线的最大距离。由于网格的Y轴向上方向性,该值为负。
- max_glyph_h
最大字符高度,即渲染文本中所有字符的最大高度,相当于上行部分 - 下行部分.
- max_glyph_w
最大字符宽度,即渲染文本中所有字符的最大宽度
- font_a
字体度量中定义的上行大小
- font_d
字体度量中定义的下行大小
- top_a
第一行文本的最大字形上沿
- bottom_d
最后一行文本的最大字形下沿
- n
输入帧的序号,从 0 开始
- rand(min, max)
返回介于最小值和最大值
- sar
输入样本宽高比。
- t
时间戳以秒表示,如果输入时间戳未知则为 NAN
- text_h, th
渲染文本的高度
- text_w, tw
渲染文本的宽度
- x
- y
绘制文本的 x 和 y 偏移坐标。
这些参数允许x和y表达式相互引用,因此您可以例如指定
y=x/dar.- pict_type
当前帧图片类型的一个字符描述。
- pkt_pos
当前数据包在输入文件或流中的位置(以字节为单位,从输入的开始位置计算)。值为 -1 表示此信息不可用。
- duration
当前数据包的持续时间,以秒计。
- pkt_size
当前数据包的大小(以字节计)。
39.74.2 文本扩展
如果expansion设置为strftime,过滤器会识别提供的文本中被strftimeC 函数接受的序列,并相应地扩展它们。请查看strftime的文档说明。该功能已不建议使用,推荐使用normal扩展以及gmtime或localtime扩展函数。
如果expansion设置为none,文本将按原样打印。
如果expansion设置为normal(默认设置),将使用以下扩展机制。
反斜杠字符 '\' 后跟任何字符,总是扩展为第二个字符。
形式为%{...}的序列将被扩展。大括号中的文本是函数名称,可能后跟用 ':' 分隔的参数。如果参数包含特殊字符或分隔符(':' 或 '}'}),则需要转义。
注意它们可能还需要在过滤器参数字符串的值中转义,在过滤图描述中的过滤器参数中转义,以及可能用于 shell 的转义,总共可能需要四级转义;使用文本文件与text选项可以避免这些问题。textfile以下函数可用:
表达式评估的结果。
expr, e它必须带有一个指定要评估表达式的参数,该参数接受与
xx和y值。注意,并非所有常量都应使用,例如在评估表达式时文本大小是未知的,所以常量text_w和text_h将没有定义的值。
expr_int_format, eif评估表达式的值并以格式化的整数输出。
第一个参数是要评估的表达式,与expr函数的用法相同。 第二个参数指定输出格式。允许的值有‘x’, ‘X’, ‘d’和‘u’,它们的处理方式与
printf函数完全相同。 第三个参数是可选的,设置输出占用的字符宽度。 它可用于从左边以零填充。gmtime过滤器运行的时间,表示为UTC。 它可以接受一个参数:一个
strftimeC函数格式字符串。 格式字符串扩展支持变量%[1-6]N,它打印秒的分数,支持可选指定的位数。localtime过滤器运行的时间,表示为本地时区时间。 它可以接受一个参数:一个
strftimeC函数格式字符串。 格式字符串扩展支持变量%[1-6]N,它打印秒的分数,支持可选指定的位数。metadata帧元数据。需要一个或两个参数。
第一个参数是必需的,指定元数据键。
第二个参数是可选的,指定默认值,当元数据键未找到或为空时使用。
可以通过检查以TAG开头的条目来识别可用的元数据,这些条目包含在运行时打印的每个帧部分中。
ffprobe -show_frames.通过通往drawtext滤镜的滤镜生成的字符串元数据也可用。
n, frame_num帧号,从0开始。
pict_type当前图片类型的一个字符描述。
pts当前帧的时间戳。 它最多可以接受三个参数。
第一个参数是时间戳的格式;默认值为
flt,表示以微秒精度的小数秒;hms表示格式化的[-]HH:MM:SS.mmm时间戳,具有毫秒精度。gmtime表示帧格式化为UTC时间的时间戳;localtime表示帧格式化为本地时区时间的时间戳。第二个参数是添加到时间戳的偏移量。
如果格式设置为
hms,第三个参数24HH可以被提供,以使格式化时间戳的小时部分以24小时制(00-23)表示。如果格式设置为
localtime或gmtime,第三个参数可以被提供:一个strftimeC函数格式字符串。 默认情况下,将使用YYYY-MM-DD HH:MM:SS格式。
39.74.3 命令
此过滤器支持通过命令更改参数:
- reinit
修改现有过滤器参数。
参数的语法与滤镜调用相同,例如:
fontsize=56:fontcolor=green:text='Hello World'
使用sendcmd的完整过滤器调用看起来像这样:
sendcmd=c='56.0 drawtext reinit fontsize=56\:fontcolor=green\:text=Hello\\ World'
如果整个参数不能被解析或应用为有效值,则过滤器将继续使用其现有参数。
以下选项也支持作为命令:
- x
- y
- 不透明度
- 字体大小
- 字体颜色
- 框颜色
- 边框颜色
- 阴影颜色
- 框启用
- 框宽度
- 框高度
- 框边框宽度
- 行间距
- 文本对齐
- 阴影水平偏移
- 阴影垂直偏移
- 边框宽度
39.74.4 示例
- 使用字体FreeSerif绘制"Test Text",默认使用可选参数的值。
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
- 使用字体FreeSerif,字体大小为24,在位置x=100和y=50绘制"Test Text"(从屏幕左上角开始计数),文字为黄色,周围有一个红色框。文字和框的透明度均为20%。
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\ x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2"注意,如果参数列表中没有使用空格,双引号不是必要的。
- 将文字显示在视频框架的中心:
drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h)/2"
- 将文字显示在一个随机位置,每30秒切换到一个新位置:
drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=if(eq(mod(t\,30)\,0)\,rand(0\,(w-text_w))\,x):y=if(eq(mod(t\,30)\,0)\,rand(0\,(h-text_h))\,y)"
- 在视频框架的最后一行显示一行从右向左滑动的文字。文件LONG_LINE假设包含一行没有换行符的内容。
drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
- 显示文件内容CREDITS从框架底部开始滚动向上。
drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
- 在输入视频的中心绘制一个绿色的字母"g"。
字形基线位于屏幕高度的一半。
drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
- 每3秒显示1秒文本:
drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
- 使用fontconfig设置字体。注意冒号需要被转义。
drawtext='fontfile=Linux Libertine O-40\\:style=Semibold:text=FFmpeg'
- 根据视频高度绘制依赖字体大小的"Test Text"。
drawtext="text='Test Text': fontsize=h/30: x=(w-text_w)/2: y=(h-text_h*2)"
- 打印实时编码的日期(参见
strftimeC函数的文档):drawtext='fontfile=FreeSans.ttf:text=%{localtime\:%a %b %d %Y}' - 显示文字渐隐渐现(出现/消失):
#!/bin/sh DS=1.0 # display start DE=10.0 # display end FID=1.5 # fade in duration FOD=5 # fade out duration ffplay -f lavfi "color,drawtext=text=TEST:fontsize=50:fontfile=FreeSerif.ttf:fontcolor_expr=ff0000%{eif\\\\: clip(255*(1*between(t\\, $DS + $FID\\, $DE - $FOD) + ((t - $DS)/$FID)*between(t\\, $DS\\, $DS + $FID) + (-(t - $DE)/$FOD)*between(t\\, $DE - $FOD\\, $DE) )\\, 0\\, 255) \\\\: x\\\\: 2 }" - 水平对齐多个独立文本。注意max_glyph_a和fontsize值被包含在y偏移中。
drawtext=fontfile=FreeSans.ttf:text=DOG:fontsize=24:x=10:y=20+24-max_glyph_a, drawtext=fontfile=FreeSans.ttf:text=cow:fontsize=24:x=80:y=20+24-max_glyph_a
- 将特定lavf.image2dec.source_basename元数据绘制到每个帧上(如果此类元数据存在)。否则,绘制字符串"NA"。注意,image2解复用器必须有选项-export_path_metadata 1,特殊元数据字段才会对滤镜可用。
drawtext="fontsize=20:fontcolor=white:fontfile=FreeSans.ttf:text='%{metadata\:lavf.image2dec.source_basename\:NA}':x=10:y=10"
关于libfreetype的更多信息,请访问:http://www.freetype.org/.
关于fontconfig的更多信息,请访问:http://freedesktop.org/software/fontconfig/fontconfig-user.html.
有关libfribidi的更多信息,请查看:http://fribidi.org/.
有关libharfbuzz的更多信息,请查看:https://github.com/harfbuzz/harfbuzz.
39.75 边缘检测
检测并绘制边缘。该滤镜使用Canny边缘检测算法。
该滤镜接受以下选项:
- low
- high
设置Canny阈值算法使用的低阈值和高阈值。
高阈值选择“强”边缘像素,这些像素随后通过8连通性与低阈值选择的“弱”边缘像素连接。
低和高阈值必须选择在[0,1]范围内,且低应小于或等于高.
默认值对于低是
20/255,且默认值对于高是50/255.- mode
定义绘制模式。
- ‘wires’
在黑色背景上绘制白色/灰色线条。
- ‘colormix’
混合颜色以创建绘画/卡通效果。
- ‘canny’
在所有选定的平面上应用Canny边缘检测。
默认值是线条.
- planes
选择要滤波的平面。默认情况下,所有可用平面都会被滤波。
39.75.1 示例
- 使用定制的滞后阈值进行标准边缘检测:
edgedetect=low=0.1:high=0.4
- 无阈值的绘画效果:
edgedetect=mode=colormix:high=0
39.76 elbg
使用ELBG(增强型LBG)算法应用海报化效果。
对于每一张输入图像,该滤镜将根据码本长度(即不同输出颜色的数量)计算从输入到输出的最优映射。
此滤镜接受以下选项。
- codebook_length, l
设置码本长度。值必须是正整数,表示不同输出颜色的数量。默认值为256。
- nb_steps, n
设置应用于计算最优映射的最大迭代次数。值越高,结果越好,但计算时间也会更长。默认值为1。
- seed, s
设置随机种子,必须是介于0和UINT32_MAX之间的整数。如果未指定或明确设置为-1,滤镜将尽力使用一个良好的随机种子。
- pal8
设置pal8输出像素格式。此选项不适用与码本长度大于256的情况。默认情况下是禁用的。
- use_alpha
在量化计算中包含透明度值。允许创建具有多个透明度平滑混合的调色板化输出图像(例如PNG8)。
39.77 熵
测量视频帧颜色通道直方图中的灰度熵。
它接受以下参数:
- mode
可以是正常或者差异。默认是正常.
差异模式测量直方图的差值熵,即相邻直方图值之间的绝对差值。
39.78 epx
应用用于像素艺术的EPX放大滤镜。
它接受以下选项:
- n
设置缩放维度:
2用于2xEPX,3用于3xEPX。 默认是3.
39.79 eq
设置亮度、对比度、饱和度和近似伽马调整。
该滤镜接受以下选项:
- contrast
设置对比度表达式。值必须是范围
-1000.0到1000.0的浮点值。默认值为"1"。- brightness
设置亮度表达式。值必须是范围
-1.0到1.0的浮点值。默认值为"0"。- saturation
设置饱和度表达式。值必须是范围
0.0到3.0的浮点值。默认值为"1"。- gamma
设置伽马表达式。值必须是范围
0.1到10.0的浮点值。默认值为"1"。- gamma_r
设置红色伽马表达式。值必须是范围
0.1到10.0的浮点值。默认值为"1"。- gamma_g
设置绿色伽马表达式。值必须是范围
0.1到10.0的浮点值。默认值为"1"。- gamma_b
设置蓝色伽马表达式。值必须是范围
0.1到10.0的浮点值。默认值为"1"。- gamma_weight
设置伽马权重表达式。它可用于减少高伽马值对亮图像区域的影响,例如防止它们被过度放大而变成纯白。值必须是范围
0.0到1.0的浮点值。值为0.0将伽马校正完全降低,而1.0保持其最大强度。默认值是"1"。- eval
设置亮度、对比度、饱和度和伽马表达式的评估时间。
它接受以下值:
- ‘init’
仅在滤镜初始化期间或处理命令时评估表达式
- ‘frame’
为每个传入帧评估表达式
默认值是‘init’.
表达式接受以下参数:
- n
从0开始的输入帧的帧计数
- pos
对应数据包在输入文件中的字节位置,未指定时为NAN;已弃用,不建议使用
- r
输入视频的帧率,如果输入帧率未知,则为NAN
- t
以秒为单位表示的时间戳,如果输入时间戳未知,则为NAN
39.79.1 命令
该滤镜支持以下命令:
- contrast
设置对比度表达式。
- brightness
设置亮度表达式。
- saturation
设置饱和度表达式。
- gamma
设置伽马表达式。
- gamma_r
设置红色通道伽马表达式。
- gamma_g
设置绿色通道伽马表达式。
- gamma_b
设置蓝色通道伽马表达式。
- gamma_weight
设置伽马权重表达式。
该命令接受与对应选项相同的语法。
如果指定的表达式无效,则保持当前值不变。
39.80 腐蚀
对视频应用腐蚀效果。
此滤镜将像素替换为局部(3x3)最小值。
它接受以下选项:
- threshold0
- threshold1
- threshold2
- threshold3
限制每个平面的最大变化,默认值为65535。如果为0,则平面保持不变。
- coordinates
指定参考像素的标志。默认值为255,即使用所有八个像素。
局部3x3坐标与标志映射如下:
1 2 3 4 5 6 7 8
39.80.1 命令
此滤镜支持上述所有选项作为命令.
39.81 estdif
对输入视频进行去隔行处理(“estdif”表示“边缘斜率跟踪去隔行滤镜”)。
仅空间滤镜,使用边缘斜率跟踪算法插值缺失的行。 它接受以下参数:
- mode
采用的隔行模式。可接受以下值之一:
- frame
每帧输出一个画面。
- field
每场输出一个画面。
默认值是
field.- parity
假定输入隔行视频的画面场顺序。可接受以下值之一:
- tff
假定顶场优先。
- bff
假定底场优先。
- auto
启用场顺序自动检测。
默认值是
auto。 如果隔行信息未知或解码器未导出此信息,将假定为顶场优先。- deint
指定需要去隔行的帧。可接受以下值之一:
- all
对所有帧进行去隔行处理。
- interlaced
仅去隔行标记为隔行的视频帧。
默认值是
all.- rslope
指定边缘斜率跟踪的搜索半径。默认值为1。 允许范围为1到15。
- redge
指定最佳边缘匹配的搜索半径。默认值为2。 允许范围为0到15。
- ecost
指定边缘匹配的边缘成本。默认值为2。 允许范围为0到50。
- mcost
指定边缘匹配的中间成本。默认值为1。 允许范围为0到50。
- dcost
指定边缘匹配的距离成本。默认值为1。 允许范围为0到50。
- interp
指定使用的插值方法。默认使用4点插值。 可接受以下值之一:
- 2p
两点插值。
- 4p
四点插值。
- 6p
六点插值。
39.81.1 命令
此滤镜支持与选项相同的命令。
39.82 曝光
调整视频流的曝光。
该滤镜接受以下选项:
- exposure
设置曝光校正值(单位:EV)。允许范围为-3.0到3.0 EV。 默认值为0 EV。
- black
设置黑电平校正。允许范围为-1.0到1.0。 默认值为0。
39.82.1 命令
此滤镜支持与选项相同的命令。
39.83 提取平面
从输入视频流中提取颜色通道分量为单独的灰度视频流。
该滤镜接受以下选项:
- planes
设置提取的平面。
可用的平面值包括:
- ‘y’
- ‘u’
- ‘v’
- ‘a’
- ‘r’
- ‘g’
- ‘b’
选择输入中不可用的平面将导致错误。 这意味着无法同时选择
r,g,b平面与y,u,v平面。
39.83.1 示例
- 从输入视频帧中提取亮度、U和V颜色通道分量为3个灰度输出:
ffmpeg -i video.avi -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]' y.avi -map '[u]' u.avi -map '[v]' v.avi
39.84 淡入淡出
对输入视频应用淡入/淡出效果。
它接受以下参数:
- type, t
效果类型可以是"in"(淡入)或"out"(淡出)。 默认是
in.- start_frame, s
指定开始应用淡入淡出效果的帧号。 默认值为0。
- nb_frames, n
淡入淡出效果的持续帧数。在淡入效果结束时,输出视频的强度将与输入视频相同。 在淡出效果结束时,输出视频将填充为所选颜色。color。 默认值为25。
- alpha
如果设置为1,则仅对输入视频的Alpha通道(如果存在)应用淡入效果。 默认值为0。
- start_time, st
指定开始应用淡入淡出效果的时间戳(以秒为单位)。 如果同时指定了start_frame和start_time,则淡入淡出将在两者中较晚的时刻开始。 默认值为0。
- duration, d
淡入淡出效果的持续时间(以秒为单位)。在淡入效果结束时,输出视频的强度将与输入视频相同。 在淡出效果结束时,输出视频将填充为所选颜色。color。 如果同时指定了duration和nb_frames,则使用duration。 默认值为0(使用nb_frames作为默认值)。
- color, c
指定淡入淡出的颜色。默认是"黑色"。
39.84.1 示例
- 将视频的前30帧淡入:
fade=in:0:30
上述命令等同于:
fade=t=in:s=0:n=30
- 将200帧视频的最后45帧淡出:
fade=out:155:45 fade=type=out:start_frame=155:nb_frames=45
- 将1000帧视频的前25帧淡入,最后25帧淡出:
fade=in:0:25, fade=out:975:25
- 将前5帧设为黄色,然后从第5到第24帧淡入:
fade=in:5:20:color=yellow
- 将视频的前25帧Alpha通道淡入:
fade=in:0:25:alpha=1
- 将前5.5秒设为黑色,然后花费0.5秒淡入:
fade=t=in:st=5.5:d=0.5
39.85 反馈
应用反馈视频滤镜。
此滤镜将裁剪后的输入帧传递到第二个输出。 从那里可以与其他视频滤镜进行过滤。 滤镜接收到来自第二输入的帧后,该帧将与第一输入的原始帧叠加并传递到第一输出。
典型用途是仅过滤帧的一部分。
此滤镜接受以下选项:
- x
- y
设置裁剪区域的左上角位置。
- w
- h
设置裁剪的尺寸。
39.85.1 示例
- 使用gblur滤镜模糊视频帧左上角尺寸为100x100的矩形部分。
[in][blurin]feedback=x=0:y=0:w=100:h=100[out][blurout];[blurout]gblur=8[blurin]
- 使用drawbox滤镜在视频帧左上角绘制100x100的黑框。
[in][blurin]feedback=x=0:y=0:w=100:h=100[out][blurout];[blurout]drawbox=x=0:y=0:w=100:h=100:t=100[blurin]
- 对视频帧中100x100大小的矩形区域应用像素化滤镜。
[in][blurin]feedback=x=320:y=240:w=100:h=100[out][blurout];[blurout]pixelize[blurin]
39.86 fftdnoiz
使用3D FFT(频域滤波)去噪帧。
该滤镜接受以下选项:
- sigma
设置噪声强度常量,这决定了去噪的强度。 默认值为1,允许范围是0到30。 使用非常高的强度并伴随较低的重叠可能会导致块状伪影。
- amount
设置去噪的程度。默认情况下,所有检测到的噪声都会降低。 默认值为1,允许范围是0到1。
- block
设置块的大小(以像素为单位),默认值为32,可设置范围为8到256。
- overlap
设置块的重叠程度。默认值为0.5,允许范围是0.2到0.8。
- method
设置去噪方法。默认值是
wiener,也可以是hard.- prev
设置用于去噪的前面的帧数。默认值为0。
- next
设置用于去噪的后面的帧数。默认值为0。
- planes
设置将被滤波的通道,默认情况下,所有可用的通道都会被滤波,除了alpha通道。
39.87 fftfilt
在频域中对样本应用任意表达式。
- dc_Y
调整图像亮度平面的直流值(增益)。该滤镜接受一个整数值,范围是
0到1000,默认值为0.- dc_U
调整图像第一个色度平面的直流值(增益)。 该滤镜接受一个整数值,范围是
0到1000,默认值为0.- dc_V
调整图像第二个色度平面的直流值(增益)。 该滤镜接受一个整数值,范围是
0到1000,默认值为0.- weight_Y
设置亮度平面的频域权重表达式。
- weight_U
设置第一个色度平面的频域权重表达式。
- weight_V
设置第二个色度平面的频域权重表达式。
- eval
设置何时评估表达式。
它接受以下值:
- ‘init’
只在滤镜初始化期间评估一次表达式。
- ‘frame’
对每个输入帧评估表达式。
默认值为‘init’.
该滤镜接受以下变量:
- X
- Y
当前样本的坐标。
- W
- H
图像的宽度和高度。
- N
从0开始的输入帧数。
- WS
- HS
用于水平和垂直处理的FFT数组大小。
39.87.1 示例
- 高通过滤器:
fftfilt=dc_Y=128:weight_Y='squish(1-(Y+X)/100)'
- 低通过滤器:
fftfilt=dc_Y=0:weight_Y='squish((Y+X)/100-1)'
- 锐化:
fftfilt=dc_Y=0:weight_Y='1+squish(1-(Y+X)/100)'
- 模糊:
fftfilt=dc_Y=0:weight_Y='exp(-4 * ((Y+X)/(W+H)))'
39.88 field
从交错图像中提取单个字段,使用步幅计算方式以避免浪费CPU时间。输出帧会被标记为非交错。
该滤镜接受以下选项:
- type
指定是提取顶部字段(如果值为
0或top)还是底部字段(如果值为1或bottom).
39.89 fieldhint
通过从提示文件中指定的周围帧中复制顶部和底部字段创建新帧。
- hint
设置包含提示的文件:绝对/相对帧数。
剪辑中的每一帧必须有一行。每行必须包含两个用逗号分隔的数字,后续可以选择性包含
-或+。 文件中每行提供的数字不能超出[N-1,N+1]范围,其中N是当前帧号,针对absolute模式或超出[-1, 1]范围,针对relative模式。第一个数字表示从哪一帧提取顶部字段,第二个数字表示从哪一帧提取底部字段。如果之后选择性地包含
+输出帧会被标记为交错,否则如果之后为-输出帧会被标记为逐行,否则会保留输入帧的标记。 如果之后选择性地包含t输出帧将仅使用顶部字段,或者在b的情况下,它将仅使用底部字段。 如果行以#或;开头,则该行将被跳过。- mode
可以是
absolute或relative或pattern。默认值是absolute。pattern模式与relative模式相同,不同之处在于当文件的最后一条记录之后还有帧要处理时,文件将重新从开始处查找。hint以下是第一行的
文件示例,针对hint模式:relative mode:
0,0 - # first frame 1,0 - # second frame, use third's frame top field and second's frame bottom field 1,0 - # third frame, use fourth's frame top field and third's frame bottom field 1,0 - 0,0 - 0,0 - 1,0 - 1,0 - 1,0 - 0,0 - 0,0 - 1,0 - 1,0 - 1,0 - 0,0 -
39.90 fieldmatch
反向抽帧的字段匹配滤镜,旨在从交错帧流中重建逐行帧。此滤镜不会删除重复帧,因此要完成完整的反向抽帧fieldmatch需要在滤镜链中跟随一个抽取滤镜,例如decimate。
区分字段匹配和抽取的主要目的是可以在两者之间插入一个备用的去交错滤镜。
如果源中存在混合的交错内容和实际交错内容,fieldmatch将无法匹配交错部分的字段。但是剩余的梳状帧将被标记为交错,因此可以通过后续滤镜(如yadif)进行去交错处理。
除了多种配置选项之外,fieldmatch还可以通过激活ppsrc选项来接收一个可选的第二流。如果启用,帧的重建将基于来自该第二流的字段和帧。这允许第一输入经过预处理以辅助滤镜的各种算法,同时确保输出无损(假设字段匹配正确)。通常,基于字段的去噪器或亮度/对比度调整可能有所帮助。
注意,此滤镜使用与TIVTC/TFM(AviSynth项目)和VIVTC/VFM(VapourSynth项目)相同的算法。后者是TFM的精简克隆,fieldmatch是基于它的。尽管语义和用法非常接近,一些行为和选项名称可能会有所不同。
当前decimate滤镜仅适用于恒定帧率输入。如果您的输入包含混合的交错(30fps)和低帧率(如24fps)的逐行内容可以使用以下滤镜链生成所需的cfr流:dejudder,fps=30000/1001,fieldmatch,decimate.
该滤镜接受以下选项:
- order
指定输入流的假定字段顺序。可用的值是:
- ‘auto’
自动检测奇偶性(使用FFmpeg的内部奇偶性值)。
- ‘bff’
假定底部字段优先。
- ‘tff’
假定顶部字段优先。
注意,有时建议不要完全相信流中声明的奇偶性值。
默认值是auto.
- mode
设置匹配模式或策略。pcmode 是最安全的,因为它在可能的情况下不会因重复帧导致画面不流畅,但如果有错误剪辑或混合场,则可能会输出梳状帧,即使可能存在良好的匹配。而另一方面,pcn_ubmode 是最容易导致画面不流畅的,但如果有良好的帧,它几乎总能找到。其他值则在两者之间。pc和pcn_ub在导致画面不流畅和生成重复帧与在有问题的剪辑部分中找到良好匹配之间的风险程度。
关于 p/c/n/u/b 的更多详细信息可以在p/c/n/u/b 含义部分中找到。
可用值为:
- ‘pc’
两方式匹配 (p/c)
- ‘pc_n’
两方式匹配,如仍为梳状则尝试第三种匹配 (p/c + n)
- ‘pc_u’
两方式匹配,如仍为梳状则尝试第三种匹配(相同顺序) (p/c + u)
- ‘pc_n_ub’
两方式匹配,如仍为梳状则尝试第三种匹配,然后尝试第四/第五种匹配 (p/c + n + u/b)
- ‘pcn’
三方式匹配 (p/c/n)
- ‘pcn_ub’
三方式匹配,如所有三种初始匹配均为梳状,则尝试第四/第五种匹配 (p/c/n + u/b)
括号中的内容表示假设order=tff时该模式会使用的匹配(以及field在auto或top).
就速度而言,pcmode 是最快的,pcn_ub是最慢的。
默认值是pc_n.
- ppsrc
将主输入流标记为预处理输入,并启用二次输入流作为干净的源来挑选场。有关更多详细信息,请参见滤镜介绍。它类似于clip2VFM/TFM 的功能。
默认值是
0(禁用)。- field
设置用于匹配的场。建议将此设置为与order相同的值,除非您在该设置下遇到匹配失败。在某些情况下,改变用于匹配的场可以对匹配性能产生很大的影响。可用值为:
- ‘auto’
自动(与order).
- ‘bottom’
从底部场匹配。
- ‘top’
从顶部场匹配。
默认值是auto.
- mchroma
设置是否在匹配比较中包含色度。在大多数情况下,建议保持启用。仅当您的剪辑有严重的色度问题,例如严重的彩虹效应或其他伪影时,才应将其设置为
0。将其设置为0也可以以牺牲一些精度为代价加快速度。默认值是
1.- y0
- y1
这些定义了一个排除范围,用以排除在匹配决策中包含的y0到y1之间的线条。排除范围可以用来忽略字幕、徽标或其他可能干扰匹配的内容。y0设置开始扫描线,y1设置结束线;y0和y1之间的所有线条(包括y0和y1)将被忽略。设置y0和y1为相同值将禁用此功能。y0和y1默认值是
0.- scthresh
设置场景变化检测阈值,以最大变化的百分比(基于亮度平面)为单位。良好的值范围在
[8.0, 14.0]范围。场景变化检测仅在combmatch=sc时相关。scthresh的范围是[0.0, 100.0].默认值是
12.0.- combmatch
当combatch不为none,
fieldmatch时,匹配决策将考虑匹配的梳状分数。可用值有:- ‘none’
不基于梳状分数进行最终匹配。
- ‘sc’
仅在检测到场景变化时使用梳状分数。
- ‘full’
始终使用梳状分数。
默认值是sc.
- combdbg
强制
fieldmatch计算某些匹配的梳状指标并打印。这一设置在 TFM/VFM 中称为micout。可用值为:- ‘none’
不强制计算。
- ‘pcn’
强制计算 p/c/n。
- ‘pcnub’
强制计算 p/c/n/u/b。
默认值是none.
- cthresh
这是用于梳状帧检测的区域梳状阈值。这基本上控制了梳状必须有多“强”或“明显”才能被检测到。较大的值意味着梳状必须更明显,较小的值意味着梳状可以较不明显且仍被检测到。有效的设定范围从
-1(每个像素都会被检测为梳状)到255(没有像素会被检测为梳状)。这基本上是一个像素差异值。合适的范围是[8, 12].默认值是
9.- chroma
设置是否在梳状帧决策中考虑色度。仅当您的源有色度问题(如彩虹效应等)导致此功能表现不良时才禁用色度检测。实际上,使用chroma=0通常更可靠,除非源中存在仅色度梳状。
默认值是
0.- blockx
- blocky
分别设置用于梳状帧检测的窗口在x轴和y轴上的大小。这与combpel像素在一个区域内需要被检测为梳状以判定整个帧为梳状有关。请参阅combpel参数描述了解更多信息。可能的值为任何从4开始到512的2的次方值。
默认值是
16.- combpel
在任何blockyxblockx大小的块内的梳状像素数量,决定是否将整个帧检测为梳状。虽然cthresh控制梳状的“可见程度”,这一设置则控制梳状在局部区域(由blockx和blocky定义的窗口)上的“数量”。最小值是
0,最大值是blocky x blockx(此时任何帧都不会被检测为梳状)。在TFM/VFM术语中,这一设置称为MI。默认值是
80.
39.90.1 p/c/n/u/b 的含义
39.90.1.1 p/c/n
我们假设以下是经过电视化处理的流:
Top fields: 1 2 2 3 4 Bottom fields: 1 2 3 4 4
数字对应的是与字段相关的渐进帧。这里,前两个帧是渐进的,第3和4帧是梳状的,依此类推。
当fieldmatch被配置为从底部运行匹配(field=底部)时,此输入流会被转换为如下所示:
Input stream:
T 1 2 2 3 4
B 1 2 3 4 4 <-- matching reference
Matches: c c n n c
Output stream:
T 1 2 3 4 4
B 1 2 3 4 4
由于字段匹配的结果,我们可以看到某些帧会被复制。为了完成完整的逆向电视化处理,您需要在此操作之后依赖减量过滤器。参见例如decimate过滤器。
现在以顶部字段匹配执行相同的操作(field=顶部) 如以下所示:
Input stream:
T 1 2 2 3 4 <-- matching reference
B 1 2 3 4 4
Matches: c c p p c
Output stream:
T 1 2 2 3 4
B 1 2 2 3 4
在这些示例中,我们可以看到p, c和n的意思; 基本上,它们指的是与相反奇偶性相关的帧和字段:
- p匹配前一帧中与相反奇偶性相关的字段
- c匹配当前帧中与相反奇偶性相关的字段
- n匹配下一帧中与相反奇偶性相关的字段
39.90.1.2 u/b
u和b匹配有些特殊,因为它们从相反的奇偶性标志进行匹配。在以下示例中,我们假设我们当前正在匹配第二帧(顶部:2,底部:2)。根据匹配规则,在每个匹配到的字段上下放置一个“x”。 matching are a bit special in the sense that they match from the opposite parity flag. In the following examples, we assume that we are currently matching the 2nd frame (Top:2, bottom:2). According to the match, a ’x’ is placed above and below each matched fields.
使用底部匹配(field=底部):
Match: c p n b u
x x x x x
Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2
Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
x x x x x
Output frames:
2 1 2 2 2
2 2 2 1 3
使用顶部匹配(field=顶部):
Match: c p n b u
x x x x x
Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2
Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
x x x x x
Output frames:
2 2 2 1 2
2 1 3 2 2
39.90.2 示例
一个简单的顶部字段优先的电视化流IVTC:
fieldmatch=order=tff:combmatch=none, decimate
高级IVTC,当仍存在梳状帧时回退至yadif:
fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate
39.91 fieldorder
转换输入视频的字段顺序。
它接受以下参数:
- order
输出字段顺序。有效值为tff表示顶部字段优先或bff表示底部字段优先。
默认值为“tff’.
转换通过上下移动一行画面内容,并用相应的画面内容填充剩余的行来完成。这种方法与大多数广播字段顺序转换器一致。
如果输入视频未被标记为交错,或者它已经被标记为所需的输出字段顺序,那么此过滤器不会更改传入的视频。
在转换至或从PAL DV素材时非常有用,PAL DV素材是底部字段优先。
例如:
ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
39.92 fillborders
填充输入视频的边框,而不更改视频流的尺寸。有时视频的四个边可能有杂乱内容,而您可能为了保持尺寸是某个数字的倍数而不想裁剪视频输入。
此过滤器接受以下选项:
- left
从左边框填充的像素数。
- right
从右边框填充的像素数。
- top
从顶部边框填充的像素数。
- bottom
从底部边框填充的像素数。
- mode
设置填充模式。
它接受以下值:
- ‘smear’
使用最外层像素填充像素
- ‘mirror’
使用镜像(半样态对称)填充像素
- ‘fixed’
使用常量值填充像素
- ‘reflect’
使用反射(全样态对称)填充像素
- ‘wrap’
使用包裹填充像素
- ‘fade’
将像素淡化为常量值
- ‘margins’
使用边界附近的加权平均像素填充顶部和底部的像素
默认值是smear.
- color
设置固定或淡化模式下像素的颜色。默认值是黑色.
39.92.1 命令
此过滤器支持相同的命令作为选项。 命令接受与对应选项相同的语法。
如果指定的表达式无效,则保留其当前值。
39.93 find_rect
在输入视频中找到一个矩形对象。
要搜索的对象必须指定为一个以gray8格式指定的图像,使用object选项。
对于每个可能的匹配项,会计算一个分数。如果分数达到指定的阈值,该对象被认为已找到。
如果输入视频包含对象的多个实例,过滤器只会找到其中之一。
当找到对象时,以下元数据条目会在匹配的帧中设置:
- lavfi.rect.w
对象的宽度
- lavfi.rect.h
对象的高度
- lavfi.rect.x
对象的x位置
- lavfi.rect.y
对象的y位置
- lavfi.rect.score
找到的对象的匹配分数
它接受以下选项:
- object
对象图像的文件路径,需要是gray8格式。
- threshold
检测阈值,以0-1范围的十进制数表示。
阈值为0.01表示只有完全匹配,阈值为0.99表示几乎所有内容都匹配。
默认值为0.5。
- mipmaps
mipmap的数量,默认值为3。
- xmin, ymin, xmax, ymax
指定搜索的矩形区域。
- discard
丢弃未检测到对象的帧。默认禁用。
39.93.1 示例
- 通过给定视频中的提供图像覆盖一个矩形对象
ffmpeg:ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
- 在每一帧中找到物体的位置并使用
ffprobe并将其写入日志文件:ffprobe -f lavfi movie=test.mp4,find_rect=object=object.pgm:threshold=0.3 \ -show_entries frame=pkt_pts_time:frame_tags=lavfi.rect.x,lavfi.rect.y \ -of csv -o find_rect.csv
39.94 填充区域
用另一个像素分量值填充具有相同像素分量值的区域。
它接受以下选项:
- x
设置像素的 x 坐标。
- y
设置像素的 y 坐标。
- s0
设置源 #0 的分量值。
- s1
设置源 #1 的分量值。
- s2
设置源 #2 的分量值。
- s3
设置源 #3 的分量值。
- d0
设置目标 #0 的分量值。
- d1
设置目标 #1 的分量值。
- d2
设置目标 #2 的分量值。
- d3
设置目标 #3 的分量值。
39.95 格式
将输入视频转换为指定的像素格式之一。 Libavfilter 将尝试选择一个适合作为下一个过滤器输入的格式。
它接受以下参数:
- pix_fmts
一个以 '|' 分隔的像素格式名称列表,例如 "pix_fmts=yuv420p|monow|rgb24"。
- color_spaces
一个以 '|' 分隔的颜色空间名称列表,例如 "color_spaces=bt709|bt470bg|bt2020nc"。
- color_ranges
一个以 '|' 分隔的颜色范围名称列表,例如 "color_ranges=tv|pc"。
39.95.1 示例
- 将输入视频转换为yuv420p格式
format=pix_fmts=yuv420p
将输入视频转换为列表中的任意一种格式
format=pix_fmts=yuv420p|yuv444p|yuv410p
39.96 帧率 (fps)
通过必要时复制或丢弃帧,将视频转换为指定的恒定帧率。
它接受以下参数:
- fps
期望的输出帧率。它接受包含以下常量的表达式:
- ‘source_fps’
输入的帧率
- ‘ntsc’
NTSC 帧率
30000/1001- ‘pal’
PAL 帧率
25.0- ‘film’
电影帧率
24.0- ‘ntsc_film’
NTSC-电影帧率
24000/1001
默认值是
25.- start_time
假设第一个 PTS 应为给定值(以秒为单位)。这允许在流的开头进行填充/剪切。默认情况下,不对第一个帧的预期 PTS 做任何假设,因此不会进行填充或剪切。例如,如果视频流在音频流之后开始,这可以设置为 0 以通过第一个帧的副本填充开头,或者剪除任何具有负 PTS 的帧。
- round
时间戳 (PTS) 四舍五入方法。
可能的值有:
- zero
向 0 靠拢
- inf
远离 0
- down
向 -无穷靠拢
- up
向 +无穷靠拢
- near
四舍五入到最接近值
默认值是
near.- eof_action
读取最后一帧时执行的操作。
可能的值有:
- round
使用与其他帧相同的时间戳四舍五入方法。
- pass
如果输入持续时间尚未达到,则透传最后一帧。
默认值是
round.
或者,可以将选项指定为一个普通字符串:fps[:start_time[:round]].
另请参阅setpts滤镜。
39.96.1 示例
- 一个典型用法以将帧率设置为 25:
fps=fps=25
- 将帧率设置为 24,使用缩写并使用四舍五入方法到最接近值:
fps=fps=film:round=near
39.97 帧打包 (framepack)
将两个不同视频流打包成一个立体视频,在支持的编解码器上设置适当的元数据。两个视图应具有相同的尺寸和帧率,并且处理将在较短的视频结束时停止。请注意,可以使用scale和fps过滤器方便地调整视图属性。
它接受以下参数:
- format
期望的打包格式。支持的值有:
- sbs
视图并排排列(默认)。
- tab
视图上下排列。
- lines
视图按行打包。
- columns
视图按列打包。
- frameseq
视图按时间交替排列。
一些示例:
# Convert left and right views into a frame-sequential video ffmpeg -i LEFT -i RIGHT -filter_complex framepack=frameseq OUTPUT # Convert views into a side-by-side video with the same output resolution as the input ffmpeg -i LEFT -i RIGHT -filter_complex [0:v]scale=w=iw/2[left],[1:v]scale=w=iw/2[right],[left][right]framepack=sbs OUTPUT
39.98 帧率转换 (framerate)
通过从源帧插值新的视频输出帧来改变帧率。
此过滤器并未设计为与隔行扫描媒体正确配合使用。如果您希望更改隔行扫描媒体的帧率,那么在使用此过滤器之前需要进行反交错,之后需要重新交错。
以下是接受选项的描述。
- fps
指定每秒输出的帧数。此选项也可以单独作为一个值指定。默认值是
50.- interp_start
指定一个范围的开始,其中输出帧将作为两帧的线性插值创建。范围是 [
0-255],默认值是15.- interp_end
指定一个范围的结束,其中输出帧将作为两帧的线性插值创建。范围是 [
0-255],默认值是240.- scene
指定检测场景变化的级别,值范围从 0 到 100,用于指示新的场景;较低的值表示当前帧引入新场景的概率较低,而较高的值表示当前帧更有可能是一个新的场景。默认值是
8.2.- flags
指定影响过滤器过程的标志。
可用值为flags是:
- scene_change_detect, scd
启用基于场景选项scene的场景变化检测。 此标志默认启用。
39.99 帧步进 (framestep)
选择每 N 个帧中的一帧。
此过滤器接受以下选项:
- step
每隔
step帧选择一次帧。 允许的值是大于 0 的正整数。默认值是1.
39.100 冻结检测 (freezedetect)
检测冻结的视频。
如果检测到输入视频在指定的持续时间内内容没有显著变化,此过滤器将记录一条消息并设置帧元数据。视频冻结检测计算视频帧所有分量的平均绝对差,并与噪声门限进行比较。
打印的时间和持续时间以秒为单位。lavfi.freezedetect.freeze_start在第一帧上设置元数据键,时间戳等于或超过检测持续时间且包含冻结第一帧的时间戳。lavfi.freezedetect.freeze_duration和lavfi.freezedetect.freeze_end元数据键设置在冻结后的第一帧。
该过滤器接受以下选项:
- noise, n
设置噪声容差。可以以分贝(如果指定值后附加"dB")或者0到1之间的差异比率指定。默认为-60dB,或0.001。
- duration, d
设置冻结持续时间直到通知(默认为2秒)。
39.101 冻结帧
冻结视频帧。
此过滤器使用第二个输入的帧冻结视频帧。
该过滤器接受以下选项:
- first
设置从哪个第一帧开始冻结。
- last
设置从哪个最后一帧结束冻结。
- replace
设置第二个输入中将用于替代被替换帧的帧编号。
39.102 frei0r
对输入视频应用frei0r效果。
要启用此过滤器的编译,您需要安装frei0r头文件并使用以下配置编译FFmpeg:--enable-frei0r.
它接受以下参数:
- filter_name
加载的frei0r效果的名称。如果环境变量
FREI0R_PATH已定义,则会在由冒号分隔的列表中指定的目录中搜索frei0r效果。FREI0R_PATH否则,将按以下顺序搜索标准frei0r路径:HOME/.frei0r-1/lib/, /usr/local/lib/frei0r-1/, /usr/lib/frei0r-1/.- filter_params
传递给frei0r效果的以‘|’分隔的参数列表。
frei0r效果参数可以是布尔值(其值为"y"或"n"),双精度数,颜色(指定为R/G/B,其中R, G和B是介于0.0到1.0之间的浮点数,包括0.0和1.0)或ffmpeg-utils手册中指定的颜色描述为(ffmpeg-utils)"颜色"章节中规定的位置(指定为X/Y,其中X和Y是浮点数)和/或字符串。
参数的数量和类型取决于加载的效果。如果未指定效果参数,则设置默认值。
39.102.1 示例
- 应用distort0r效果,设置前两个双精度参数:
frei0r=filter_name=distort0r:filter_params=0.5|0.01
- 应用colordistance效果,将颜色作为第一个参数:
frei0r=colordistance:0.2/0.3/0.4 frei0r=colordistance:violet frei0r=colordistance:0x112233
- 应用perspective效果,指定左上角和右上角图像位置:
frei0r=perspective:0.2/0.2|0.8/0.2
更多信息请参阅http://frei0r.dyne.org
39.102.2 命令
该过滤器支持filter_params选项作为命令.
39.103 fspp
应用快速简单后期处理。这是spp.
的一个更快的版本。它将(I)DCT拆分为水平/垂直过程。不像简单后期处理过滤器,其中一个过程每块执行一次,而不是每像素执行一次。这允许更高的速度。
该过滤器接受以下选项:
- quality
设置质量。这个选项定义了平均的等级数量。它接受一个范围为4到5的整数。默认值为
4.- qp
强制使用常量量化参数。它接受范围为0到63的整数。如果未设置,过滤器将使用视频流中的QP(如果可用)。
- strength
设置过滤强度。它接受范围为-15到32的整数。较低的值意味着更多的细节,但也更多的伪影,而较高的值会使图像更光滑,但也更模糊。默认值为
0- PSNR最佳。- use_bframe_qp
启用使用B帧的QP参数,如果设置为
1。使用此选项可能会导致闪烁,因为B帧通常具有更大的QP值。默认值为0(未启用)。
39.104 fsync
使用来源文件的外部映射同步视频帧。
对于映射文件中给出的每个输入PTS,过滤器会丢弃或创建所需数量的帧,以重现映射文件中给出的输出帧序列。
此过滤器有助于根据fps过滤器记录到映射文件中的帧率转换输出帧,并对对应的帧进行进一步处理,如质量比较。-stats_mux_pre, and do further processing to the corresponding frames
e.g. quality comparison.
映射文件的每行必须包含对应每个输入帧的三项:输入PTS(十进制)、输出PTS(十进制)以及输出时间基准(十进制/十进制),以空格分隔。
该文件格式与以下日志输出格式相对应-stats_mux_pre_fmt="{ptsi} {pts} {tb}".
过滤器假定映射文件按输入PTS递增排序。
此过滤器接受以下选项:
- file, f
将使用的映射文件的文件名。
示例:
# Convert a video to 25 fps and record a MAP_FILE file with the default format of this filter
ffmpeg -i INPUT -vf fps=fps=25 -stats_mux_pre MAP_FILE -stats_mux_pre_fmt "{ptsi} {pts} {tb}" OUTPUT
# Sort MAP_FILE by increasing input PTS
sort -n MAP_FILE
# Use INPUT, OUTPUT and the MAP_FILE from above to compare the corresponding frames in INPUT and OUTPUT via SSIM
ffmpeg -i INPUT -i OUTPUT -filter_complex '[0:v]fsync=file=MAP_FILE[ref];[1:v][ref]ssim' -f null -
39.105 gblur
应用高斯模糊过滤器。
此过滤器接受以下选项:
- sigma
设置水平sigma,即高斯模糊的标准差。默认值为
0.5.- steps
设置高斯近似的步骤数量。默认值为
1.- planes
设置要过滤哪些平面。默认情况下过滤所有平面。
- sigmaV
设置垂直sigma,如果为负值,它将与
sigma值相同。 默认值为-1.
39.105.1 命令
该过滤器支持与选项相同的命令。 命令接受选项对应的相同语法。
如果指定的表达式无效,则保留其当前值。
39.106 geq
对每个像素应用通用方程。
此过滤器接受以下选项:
- lum_expr, lum
设置亮度表达式。
- cb_expr, cb
设置色度蓝表达式。
- cr_expr, cr
设置色度红表达式。
- alpha_expr, a
设置透明度表达式。
- red_expr, r
设置红色表达式。
- green_expr, g
设置绿色表达式。
- blue_expr, b
设置蓝色表达式。
色彩空间根据指定的选项选择。如果指定了lum_expr, cb_expr,或cr_expr选项,过滤器将自动选择YCbCr色彩空间。如果指定了red_expr, green_expr,或blue_expr如果指定了options,它将选择RGB颜色空间。
如果没有定义其中一个色度表达式,它将回退到另一个表达式。 如果未指定alpha表达式,它将评估为不透明值。 如果没有指定任何色度表达式,它们将评估为亮度表达式。
表达式可以使用以下变量和函数:
- N
从已过滤帧的顺序号开始。
0.- X
- Y
当前样本的坐标。
- W
- H
图像的宽度和高度。
- SW
- SH
宽度和高度比例取决于当前过滤的平面。 它是对应亮度平面像素数量与当前平面像素数量之间的比例。例如,对于YUV4:2:0,值为
1,1亮度平面的比例为0.5,0.5色度平面的比例为- T
当前帧的时间,以秒表示。
- p(x, y)
返回当前平面上位置(x,y)的像素值。
- lum(x, y)
返回亮度平面上位置(x,y)的像素值。
- cb(x, y)
返回蓝色差色度平面上位置(x,y)的像素值。如果没有这样的平面,则返回0。
- cr(x, y)
返回红色差色度平面上位置(x,y)的像素值。如果没有这样的平面,则返回0。
- r(x, y)
- g(x, y)
- b(x, y)
返回红/绿/蓝组件上位置(x,y)的像素值。如果没有这样的组件,则返回0。
- alpha(x, y)
返回alpha平面上位置(x,y)的像素值。如果没有这样的平面,则返回0。
- psum(x,y), lumsum(x, y), cbsum(x,y), crsum(x,y), rsum(x,y), gsum(x,y), bsum(x,y), alphasum(x,y)
样本值在从(0,0)到(x,y)的矩形范围内的总和,这允许获取矩形内样本的总和。 参见无sum后缀的函数。
- interpolation
设置其中一种插值方法:
- nearest, n
- bilinear, b
默认方法是双线性插值。
对于函数,如果x和y超出区域范围,值将自动剪裁到最近的边界。
请注意,此滤镜可以使用多个线程,在这种情况下每个切片都会有自己的表达式状态。 如果您的表达式依赖于之前的状态并且希望仅使用一个表达式状态,则应将滤镜线程数限制为1。
39.106.1 示例
- 水平翻转图像:
geq=p(W-X\,Y)
- 生成一个二维正弦波,角度为
PI/3,波长为100像素:geq=128 + 100*sin(2*(PI/100)*(cos(PI/3)*(X-50*T) + sin(PI/3)*Y)):128:128
- 生成一个花哨的谜题般的移动灯光:
nullsrc=s=256x256,geq=random(1)/hypot(X-cos(N*0.07)*W/2-W/2\,Y-sin(N*0.09)*H/2-H/2)^2*1000000*sin(N*0.02):128:128
- 产生一个快速的浮雕效果:
format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2'
- 根据像素位置修改RGB组件:
geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)'
- 创建一个与输入同样大小的径向渐变(另请参见渐晕滤镜):
geq=lum=255*gauss((X/W-0.5)*3)*gauss((Y/H-0.5)*3)/gauss(0)/gauss(0),format=gray
39.107 gradfun
修复因截断到8位颜色深度而有时引入的平坦区域中的条状伪影。 插值应该位于条状伪影处的渐变,并进行抖动。
它仅为播放而设计。不要在有损压缩之前使用它,因为压缩倾向于丢失抖动并带回条状伪影。
它接受以下参数:
- strength
滤镜将改变任何一个像素的最大量。这也是检测几乎平坦区域的阈值。 可接受的值范围为0.51到64; 默认值为1.2。超出范围的值将被剪裁到有效范围。
- radius
拟合渐变的邻域。较大的半径产生更平滑的渐变, 但也阻止过滤器修改邻近详细区域的像素。 可接受的值为8到32;默认值为16。超出范围的值将被剪裁到有效范围。
或者,可以将选项指定为一个简单的字符串:强度[:半径]
39.107.1 示例
- 以
3.5强度和半径应用滤镜:8:gradfun=3.5:8
- 指定半径,省略强度(将会回落到默认值):
gradfun=radius=8
39.108 graphmonitor
显示各种滤镜图表统计信息。
使用此滤镜可以调试完整的滤镜图表。 特别是解决链接填充有排队帧的问题。
此滤镜接受以下选项:
- size, s
设置视频输出大小。默认值为高清720.
- opacity, o
设置视频不透明度。默认值为0.9。允许范围从0到1.
- mode, m
设置输出模式标志。
标志的可用值为:
- ‘full’
不进行任何过滤。默认值。
- ‘compact’
仅显示排队帧的过滤器。
- ‘nozero’
仅显示具有非零统计信息的过滤器。
- ‘noeof’
仅显示具有非EOF统计信息的过滤器。
- ‘nodisabled’
仅显示时间轴中启用的过滤器。
- flags, f
设置标志以启用在视频中显示的统计信息。
标志的可用值为:
- ‘none’
所有标志关闭。
- ‘all’
所有标志开启。
- ‘queue’
显示每个链接中的排队帧数量。
- ‘frame_count_in’
显示从过滤器中取出的帧的数量。
- ‘frame_count_out’
显示从过滤器输出的帧的数量。
- ‘frame_count_delta’
显示上述两个值之间的帧数量差值。
- ‘pts’
显示当前过滤帧的pts。
- ‘pts_delta’
显示当前帧与上一帧之间的pts差值。
- ‘time’
显示当前过滤帧的时间。
- ‘time_delta’
显示当前帧与上一帧之间的时间差值。
- ‘timebase’
显示过滤器链接的时间基准。
- ‘format’
显示过滤器链接使用的格式。
- ‘size’
显示过滤器链接使用的视频尺寸或音频通道数量(如果使用音频)。
- ‘rate’
显示过滤器链接使用的视频帧率或音频采样率(如果使用音频)。
- ‘eof’
显示链接输出状态。
- ‘sample_count_in’
显示从过滤器中取出的样本数量。
- ‘sample_count_out’
显示从滤镜中分配的样本数量。
- ‘sample_count_delta’
显示上述两个值之间样本数量的差异。
- ‘disabled’
显示时间轴滤镜状态。
- rate, r
设置输出流的视频速率上限,默认值是25。 这保证输出视频帧率不会高于该值。
39.109 灰度世界
基于灰度世界假设应用颜色校正的颜色恒常性滤镜
算法使用线性光,因此输入数据应事先线性化(并可能正确标记)。
ffmpeg -i INPUT -vf zscale=transfer=linear,grayworld,zscale=transfer=bt709,format=yuv420p OUTPUT
39.110 灰边缘
一种颜色恒常性变体滤镜,通过灰边缘算法估计场景光照并相应校正场景颜色。
参见:https://staff.science.uva.nl/th.gevers/pub/GeversTIP07.pdf
滤镜接受以下选项:
- difford
要在场景上应用的微分阶数。必须在范围[0,2]内选择,默认值为1。
- minknorm
用于计算闵可夫斯基距离的闵可夫斯基参数。必须在范围[0,20]内选择,默认值为1。设置为0以获取最大值而不是计算闵可夫斯基距离。
- sigma
用于在场景上应用的高斯模糊的标准差。必须在范围[0,1024.0]内选择,默认值为1。floor(sigma* break_off_sigma(3) ) 若difford大于0,则不能为0。
39.110.1 示例
- 灰边缘:
greyedge=difford=1:minknorm=5:sigma=2
- 最大边缘:
greyedge=difford=1:minknorm=0:sigma=2
39.111 引导
应用引导滤镜,用于边缘保留平滑、去雾等。
滤镜接受以下选项:
- radius
设置方框半径(像素)。 允许范围为1到20,默认值为3。
- eps
设置正则化参数(平方)。 允许范围为0到1,默认值为0.01。
- mode
设置滤镜模式。可以是
basic或fast。 默认值是basic.- sub
为
fast模式设置子采样比。 范围为2到64,默认值为4。 在basic模式中不进行子采样。- guidance
设置引导模式。可以是
off或on。默认值为off。 如果是off,则需要单个输入。 如果是on,则需要两个分辨率和像素格式相同的输入。第二个输入作为引导。- planes
设置要过滤的平面。默认值为仅过滤第一个。
39.111.1 命令
此滤镜支持上述所有选项作为命令.
39.111.2 示例
- 使用引导滤镜进行边缘保留平滑:
ffmpeg -i in.png -vf guided out.png
- 使用引导滤镜进行去雾、结构传递滤波、细节增强。
有关生成引导图像的信息,请参阅论文《引导图像滤波》。
参见:http://kaiminghe.com/publications/pami12guidedfilter.pdf.
ffmpeg -i in.png -i guidance.png -filter_complex guided=guidance=on out.png
39.112 Hald CLUT
对视频流应用 Hald CLUT。
第一个输入是要处理的视频流,第二个输入是 Hald CLUT。 Hald CLUT 输入可以是简单图片或完整视频流。
滤镜接受以下选项:
- clut
设置从第二个输入流中要处理的 CLUT 视频帧, 可以是first(第一个)或all(全部)。默认值是all(全部).
- shortest
在最短的输入结束时强制终止。默认值为
0.- repeatlast
在 CLUT 的最后一帧之后继续应用上一帧。 值为
0在达到 CLUT 的最后一帧后禁用滤镜。 默认值为1.
haldclut还有与lut3d相同的插值选项(两个滤镜共享相同的内部实现)。
此滤镜还支持framesync选项。
有关 Hald CLUT 的更多信息可以在 Eskil Steenberg(Hald CLUT 作者)的网站上找到,位于:http://www.quelsolaar.com/technology/clut.html.
39.112.1 命令
此滤镜支持interp选项作为命令.
39.112.2 工作流程示例
39.112.2.1 Hald CLUT 视频流
以各种效果生成一个修改后的身份 Hald CLUT 流:
ffmpeg -f lavfi -i haldclutsrc=8 -vf "hue=H=2*PI*t:s=sin(2*PI*t)+1, curves=cross_process" -t 10 -c:v ffv1 clut.nut
注意:确保使用无损编解码器。
然后用它来haldclut将其应用于一个随机流:
ffmpeg -f lavfi -i mandelbrot -i clut.nut -filter_complex '[0][1] haldclut' -t 20 mandelclut.mkv
Hald CLUT 将应用于前 10 秒(clut.nut的持续时间),然后将最新的 CLUT 流图片应用于mandelbrot流的其余帧。
39.112.2.2 带预览的 Hald CLUT
Hald CLUT 应为一个Level*Level*Level乘Level*Level*Level像素的方形图像。对于一个给定的 Hald CLUT,FFmpeg 将从图片左上角选择尽可能大的正方形。
多余的填充像素(底部或右侧)将被忽略。这部分区域可以用于添加 Hald CLUT 的预览。
通常,以下生成的 Hald CLUT 将被haldclut滤镜支持:
ffmpeg -f lavfi -i haldclutsrc=8 -vf " pad=iw+320 [padded_clut]; smptebars=s=320x256, split [a][b]; [padded_clut][a] overlay=W-320:h, curves=color_negative [main]; [main][b] overlay=W-320" -frames:v 1 clut.png
它包含原始和 CLUT 效果的预览:SMPTE 彩条显示在右上方, 下方显示经过颜色更改后的同样彩条。
然后可以通过以下方式可视化此 Hald CLUT 的效果:
ffplay input.mkv -vf "movie=clut.png, [in] haldclut"
39.113 hflip
将输入视频水平翻转。
例如,使用以下命令将输入视频水平翻转:ffmpeg:
ffmpeg -i in.avi -vf "hflip" out.avi
39.114 histeq
此滤镜对每帧应用全局颜色直方图均衡化。
它可用于校正像素强度范围被压缩的视频。 该滤镜重新分布像素强度以均衡其在整个强度范围内的分布。 可以将其视为“自动调整对比度滤镜”。此滤镜 仅对修复退化或捕获质量不佳的源视频有用。
过滤器接受以下选项:
- strength
确定要应用的均衡化量。当强度降低时,像素强度的分布逐渐接近输入帧的分布。该值必须是范围为 [0,1] 的浮点数,默认值为 0.200。
- intensity
设置可以生成的最大强度,并适当地缩放输出值。应按照需要设置强度,然后如有必要,限制强度以避免过曝。该值必须是范围为 [0,1] 的浮点数,默认值为 0.210。
- antibanding
设置防条带级别。如果启用,该过滤器将随机对输出像素的亮度进行微小的变化,以避免直方图条带化。可能的值是
none,weak或strong。默认值为none.
39.115 直方图
为输入视频计算并显示一个颜色分布直方图。
计算出的直方图是图像中颜色分量分布的表示。
标准直方图显示图像中的颜色分量分布。为每种颜色分量显示颜色图。根据输入格式显示当前帧中 Y、U、V、A 或 R、G、B 分量的分布。在每个图之下显示颜色分量比例刻度计。
过滤器接受以下选项:
- level_height
设置级别高度。默认值为
200。 允许范围为 [50, 2048]。- scale_height
设置颜色比例的高度。默认值为
12。 允许范围为 [0, 40]。- display_mode
设置显示模式。可接受以下值:
- ‘stack’
将每种颜色分量的图表上下排列。
- ‘parade’
将每种颜色分量的图表并排排列。
- ‘overlay’
显示的信息与
parade中的信息相同, 但表示颜色分量的图表直接彼此叠加。
默认值为
stack.- levels_mode
设置模式。可以是
linear,或logarithmic。 默认值为linear.- components
设置要显示的颜色分量。默认值为
7.- fgopacity
设置前景不透明度。默认值为
0.7.- bgopacity
设置背景不透明度。默认值为
0.5.- colors_mode
设置颜色模式。可接受以下值:
- ‘whiteonblack’
- ‘blackonwhite’
- ‘whiteongray’
- ‘blackongray’
- ‘coloronblack’
- ‘coloronwhite’
- ‘colorongray’
- ‘blackoncolor’
- ‘whiteoncolor’
- ‘grayoncolor’
默认值为
whiteonblack.
39.115.1 示例
- 计算并绘制直方图:
ffplay -i input -vf histogram
39.116 hqdn3d
这是一个高精度/高质量的三维降噪过滤器。它旨在减少图像噪点,生成平滑图像,并使静态图像真正静态。它应增强压缩性能。
它接受以下可选参数:
- luma_spatial
一个非负浮点数,指定空间亮度强度。默认值为 4.0。
- chroma_spatial
一个非负浮点数,指定空间色度强度。默认值为 3.0*luma_spatial/4.0.
- luma_tmp
一个浮点数,指定亮度时间强度。默认值为 6.0*luma_spatial/4.0.
- chroma_tmp
一个浮点数,指定色度时间强度。默认值为luma_tmp*chroma_spatial/luma_spatial.
39.116.1 命令
此过滤器支持与命令相同的选项。 此命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.117 hwdownload
将硬件帧下载到系统内存。
输入必须是硬件帧,输出为非硬件格式。 并非所有格式都支持输出 - 可能需要在图中插入一个额外的format过滤器紧随其后,才能得到支持的输出格式。
39.118 hwmap
将硬件帧映射到系统内存或其他设备。
此过滤器有多种不同的操作模式;具体操作模式取决于输入和输出格式:
- 硬件帧输入,普通帧输出
将输入帧映射到系统内存,并传递到输出。如果稍后需要原始硬件帧(例如,在其上叠加其他内容之后),可以使用hwmap过滤器以下一种模式检索。
- 普通帧输入,硬件帧输出
如果输入实际上是软件映射的硬件帧,则取消映射——即返回原始硬件帧。
否则必须提供一个设备。在该设备上为输出创建新的硬件表面,然后将它们映射回输入的软件格式,并将这些帧交给前面的过滤器。这将类似于hwupload过滤器,但可能会在输入已经处于兼容格式的情况下避免额外的复制。
- 硬件帧输入和输出
必须为输出提供设备,可以直接提供或使用derive_device选项。输入和输出设备必须是不同类型且兼容的——其具体含义取决于系统,但通常它意味着它们必须引用同一个底层硬件上下文(例如,同一显卡)。
如果输入帧最初是在输出设备上创建的,则取消映射以检索原始帧。
否则,将帧映射到输出设备——在输出上创建新的硬件帧,与输入上的帧相对应。
接受以下附加参数:
- mode
设置帧映射模式。一些组合选项包括:
- 读取
映射的帧应该是可读的。
- 写入
映射的帧应该是可写的。
- 覆盖
映射将始终覆盖整个帧。
在某些情况下,这可能提高性能,因为无需加载帧的原始内容。
- 直接
映射不得涉及任何复制。
在某些情况下,当直接映射不可行或其特性意外时,会创建到帧副本的间接映射。设置此标志确保映射是直接的,如果不可能,则会失败。
默认为read+write(如果未指定)。
- derive_device 类型
不要使用初始化时提供的设备,而是从输入帧所在的设备派生一个新的类型的设备。
- reverse
在硬件到硬件映射中,反向映射——在接收端创建帧并将其映射回源端。在某些情况下,这可能是必要的,例如需要一个方向的映射但设备只能支持相反方向的映射。
此选项很危险——如果前面的过滤器具有任何额外约束,其输出可能会以不确定的方式被破坏。请在完全理解其使用影响后再使用。
39.119 hwupload
将系统内存中的帧上传到硬件表面。
在过滤器初始化时必须提供要上传到的设备。如果使用 ffmpeg,请通过-filter_hw_device选项或derive_device选项选择适当的设备。输入设备和输出设备必须是不同类型且兼容的——其具体含义取决于系统,但通常它意味着它们必须引用同一个底层硬件上下文(例如,同一显卡)。
接受以下附加参数:
- derive_device 类型
不要使用初始化时提供的设备,而是从输入帧所在的设备派生一个新的类型的设备。
39.120 hwupload_cuda
将系统内存中的帧上传到 CUDA 设备。
它接受以下可选参数:
- device
使用的CUDA设备编号
39.121 hqx
应用一个专为像素艺术设计的高质量放大滤镜。该滤镜最初由Maxim Stepin创建。
它接受以下选项:
- n
设置缩放尺寸:
2用于hq2x,3用于hq3x和4用于hq4x。 默认值为3.
39.122 hstack
水平堆叠输入视频。
所有流必须具有相同的像素格式和相同的高度。
请注意,此滤镜比使用叠加(overlay)和填充(pad)滤镜创建相同输出更快。
滤镜接受以下选项:
- inputs
设置输入流数量。默认值为2。
- shortest
如果设置为1,则在最短输入终止时强制输出终止。默认值为0。
39.123 hsvhold
将特定的HSV范围转换为灰度值。
此滤镜测量选项中设置的HSV颜色与视频流中测量的颜色之间的颜色差异。 根据选项,输出颜色可以更改为灰度或保持原样。
滤镜接受以下选项:
- hue
设置将在颜色差异计算中使用的色调值。 允许范围为-360到360。默认值为0。
- sat
设置将在颜色差异计算中使用的饱和度值。 允许范围为-1到1。默认值为0。
- val
设置将在颜色差异计算中使用的明度值。 允许范围为-1到1。默认值为0。
- similarity
设置与关键颜色的相似度百分比。 允许范围为0到1。默认值为0.01。
0.00001仅匹配准确的关键颜色,而1.0匹配所有颜色。
- blend
混合百分比。 允许范围为0到1。默认值为0。
0.0使像素完全为灰色或完全不灰色。
较高的值会产生更多灰色像素,与关键颜色越相似,灰色像素越多。
39.124 hsvkey
将特定的HSV范围转换为透明度。
此滤镜测量选项中设置的HSV颜色与视频流中测量的颜色之间的颜色差异。 根据选项,通过添加Alpha通道可更改为透明。
滤镜接受以下选项:
- hue
设置将在颜色差异计算中使用的色调值。 允许范围为-360到360。默认值为0。
- sat
设置将在颜色差异计算中使用的饱和度值。 允许范围为-1到1。默认值为0。
- val
设置将在颜色差异计算中使用的明度值。 允许范围为-1到1。默认值为0。
- similarity
设置与关键颜色的相似度百分比。 允许范围为0到1。默认值为0.01。
0.00001仅匹配准确的关键颜色,而1.0匹配所有颜色。
- blend
混合百分比。 允许范围为0到1。默认值为0。
0.0使像素完全透明或完全不透明。
较高的值会产生半透明像素,与关键颜色越相似,透明度越高。
39.125 hue
修改输入的色调和/或饱和度。
它接受以下参数:
- h
将色调角度指定为以度数表示的数字。它接受一个表达式,默认值为 "0"。
- s
在[-10,10]范围内指定饱和度。它接受一个表达式,默认值为 "1"。
- H
将色调角度指定为以弧度表示的数字。它接受一个表达式,默认值为 "0"。
- b
在[-10,10]范围内指定亮度。它接受一个表达式,默认值为 "0"。
h和H是互斥的,不能同时指定。
选项b, h, H和s的值是包含以下常量的表达式:
- n
从0开始的输入帧的帧计数
- pts
输入帧的演示时间戳,以时间基单位表示
- r
输入视频的帧速率,如果输入帧速率未知则为NAN
- t
时间戳以秒为单位表示,如果输入时间戳未知则为NAN
- tb
输入视频的时间基
39.125.1 示例
- 将色调设置为90度,饱和度设置为1.0:
hue=h=90:s=1
- 相同命令但以弧度表示色调:
hue=H=PI/2:s=1
- 旋转色调并使饱和度在1秒内在0到2之间摆动:
hue="H=2*PI*t: s=sin(2*PI*t)+1"
- 应用一个3秒的饱和度淡入效果,从0开始:
hue="s=min(t/3\,1)"
通用的淡入表达式可以写为:
hue="s=min(0\, max((t-START)/DURATION\, 1))"
- 应用一个5秒后开始的3秒饱和度淡出效果:
hue="s=max(0\, min(1\, (8-t)/3))"
通用的淡出表达式可以写为:
hue="s=max(0\, min(1\, (START+DURATION-t)/DURATION))"
39.125.2 命令
此滤镜支持以下命令:
- b
- s
- h
- H
修改输入视频的色调和/或饱和度和/或亮度。 该命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持当前值。
39.126 huesaturation
对输入视频流应用色调-饱和度-强度调整。
此滤镜在RGB色彩空间中操作。
此滤镜接受以下选项:
- hue
设置要应用的色调偏移(以度为单位)。默认值为0。 允许范围为-180到180。
- saturation
设置饱和度偏移。默认值为0。 允许范围为-1到1。
- intensity
设置强度偏移。默认值为0。 允许范围为-1到1。
- colors
设置要调整的主要颜色和互补颜色。 通过提供一个或多个值来设置该选项。 一次可以选择多种颜色。默认情况下选择所有颜色。
- ‘r’
调整红色。
- ‘y’
调整黄色。
- ‘g’
调整绿色。
- ‘c’
调整青色。
- ‘b’
调整蓝色。
- ‘m’
调整品红色。
- ‘a’
调整所有颜色。
- strength
设置滤镜强度。允许范围为0到100。 默认值为1。
- rw, gw, bw
为每个RGB分量设置权重。允许范围为0到1。 默认值为0.333, 0.334, 0.333。 这些选项用于饱和度和亮度处理。
- lightness
设置保持亮度,默认值为禁用。 调整色调可能会改变原始RGB组合的亮度,启用此选项时亮度保持相同值。
39.127 hysteresis
通过连接组件将第一个流扩展到第二个流。 这使得能够构建更稳健的边缘掩码。
此滤镜接受以下选项:
- planes
设置将作为位图处理的平面,未处理的平面将从第一个流中复制。 默认值为0xf,所有平面都将被处理。
- threshold
设置用于过滤的阈值。如果像素分量值高于此值,则激活连接组件的过滤算法。 默认值为0。
The hysteresis滤镜还支持帧同步选项。
39.128 检测ICC
检测嵌入式ICC配置文件(如果存在)中的色彩空间,并相应地更新帧的标签。
此滤镜接受以下选项:
- force
如果为真,帧的现有色彩空间标签将始终被ICC配置文件检测到的值覆盖。否则,仅在标签为空时赋值。
unknown默认启用。
39.129 生成ICC
生成ICC配置文件并将其附加到帧。
此滤镜接受以下选项:
- color_primaries
- color_trc
配置将为其生成ICC配置文件的色彩空间。默认值
auto从输入帧的元数据中推断值,适当地默认为BT.709/sRGB。参见参数设置滤镜,获取可能值的列表,但注意
unknown不是此滤镜的有效值。- force
如果为真,即使会覆盖现有的ICC配置文件,也会生成新配置文件。默认禁用。
39.130 身份识别
获取两个输入视频之间的身份分数。
此滤镜需要两个输入视频。
两个输入视频必须具有相同分辨率和像素格式,才能使此滤镜正确工作。此外,它假设两个输入视频具有相同数量的帧,并逐一比较这些帧。
获得的组件平均值、最小值和最大值的身份分数会通过日志系统打印出来。
此滤镜将计算出的每帧的身份分数存储在帧的元数据中。
此滤镜也支持帧同步选项。
在下面的示例中,输入文件main.mpg被处理并与参考文件进行比较ref.mpg.
ffmpeg -i main.mpg -i ref.mpg -lavfi identity -f null -
39.131 交错检测
检测视频交错类型。
此滤镜尝试检测输入帧是交错、渐进、顶场优先还是底场优先。它还将尝试检测相邻帧之间是否存在重复的场(这是电影胶片转换的标志)。
单帧检测只考虑相邻帧以分类每一帧。多帧检测结合了前几帧的分类历史。
滤镜将记录以下元数据值:
- single.current_frame
使用单帧检测检测到的当前帧类型。可能值为:“tff”(顶场优先)、“bff”(底场优先)、“progressive”(渐进)或“undetermined”(未确定)
- single.tff
使用单帧检测累计检测为顶场优先的帧数量。
- multiple.tff
使用多帧检测累计检测为顶场优先的帧数量。
- single.bff
使用单帧检测累计检测为底场优先的帧数量。
- multiple.current_frame
使用多帧检测检测到的当前帧类型。可能值为:“tff”(顶场优先)、“bff”(底场优先)、“progressive”(渐进)或“undetermined”(未确定)
- multiple.bff
使用多帧检测累计检测为底场优先的帧数量。
- single.progressive
使用单帧检测累计检测为渐进的帧数量。
- multiple.progressive
使用多帧检测累计检测为渐进的帧数量。
- single.undetermined
使用单帧检测无法分类的累积帧数量。
- multiple.undetermined
使用多帧检测无法分类的累积帧数量。
- repeated.current_frame
当前帧的哪个字段与上一帧重复。可能值为“无”、“顶”或“底”。
- repeated.neither
没有重复字段的累积帧数量。
- repeated.top
从上一帧的顶字段重复的顶字段的累积帧数量。
- repeated.bottom
从上一帧的底字段重复的底字段的累积帧数量。
滤镜接受以下选项:
- intl_thres
设置交错阈值。
- prog_thres
设置渐进阈值。
- rep_thres
重复字段检测阈值。
- half_life
超过一定帧数后,帧对统计数据的贡献减半(即,只贡献0.5的分类权重)。 默认值为0,意味着所有见到的帧都永远贡献其完整权重值1.0。
- analyze_interlaced_flag
如果设置值不为0,则交错检测器将使用指定帧数来确定交错标志是否准确,不会计入未确定帧。如果标志准确,将被使用,无需进一步计算;如果不准确,将被清除,无需进一步计算。这允许插入交错检测器作为一种低计算成本的方法清理交错标志。
39.131.1 示例
详细检查视频的前360帧的字段顺序:
ffmpeg -i INPUT -filter:v idet,metadata=mode=print -frames:v 360 -an -f null -
交错检测器会将分析元数据添加到每一帧,之后会将元数据丢弃。最后,滤镜还会打印带有统计数据的最终报告。
39.132 分离交错
分离或交叉字段。
此滤镜允许在不将交错图像去交错的情况下处理交错图像字段。分离会将输入帧分成两个字段(所谓的半图)。奇数行被移动到输出图像的上半部分,偶数行移动到下半部分。您可以独立处理(过滤)它们,然后重新交叉。
滤镜接受以下选项:
- luma_mode, l
- chroma_mode, c
- alpha_mode, a
可用于亮度模式(luma_mode), 色度模式(chroma_mode)以及透明度模式(alpha_mode)的值包括:
- ‘none’
不做任何事情。
- ‘deinterleave, d’
分离字段,将一个放置在另一个之上。
- ‘interleave, i’
交叉字段。反转分离字段的效果。
默认值为
none.- luma_swap, ls
- chroma_swap, cs
- alpha_swap, as
交换亮度/色度/透明度字段,用偶数行替换奇数行。默认值为
0.
39.132.1 命令
此滤镜支持上述所有选项作为命令.
39.133 膨胀
对视频应用膨胀效果。
此滤镜将用更高于当前像素的局部(3x3)平均值替换像素。
它接受以下选项:
- threshold0
- threshold1
- threshold2
- threshold3
限制每个平面更改的最大值,默认值为65535。如果为0,则平面保持不变。
39.133.1 命令
此滤镜支持上述所有选项作为命令.
39.134 交叉、交叉_vulkan
从渐进内容的简单交错滤镜。此滤镜将奇数帧的上(或下)行与偶数帧的下(或上)行交叉,以达到帧率减半并保持图像高度的效果。
Original Original New Frame
Frame 'j' Frame 'j+1' (tff)
========== =========== ==================
Line 0 --------------------> Frame 'j' Line 0
Line 1 Line 1 ----> Frame 'j+1' Line 1
Line 2 ---------------------> Frame 'j' Line 2
Line 3 Line 3 ----> Frame 'j+1' Line 3
... ... ...
New Frame + 1 will be generated by Frame 'j+2' and Frame 'j+3' and so on
它接受以下可选参数:
- scan
这决定了交错帧是来自渐进帧的偶数(默认值tff)还是奇数(bff)行。
- lowpass
垂直低通滤波器,以避免交错闪烁并减少条纹图案。
- ‘0, off’
禁用垂直低通滤波器
- ‘1, linear’
启用线性滤波器(默认值)
- ‘2, complex’
启用复杂滤波器。这会稍微减少闪烁和条纹,但能更好地保留细节和主观的清晰度印象。
39.135 核心去交错
通过应用Donald Graft的自适应核去交错来为输入视频去交错。此滤镜适用于视频的交错部分,以生成渐进帧。
接受参数的描述如下。
- thresh
设置影响滤镜容忍度的阈值,用于确定是否需要处理像素线。它必须是范围[0,255]内的整数,默认值为10。值为0将导致处理所有像素。
- map
如果设置为1,将超出阈值的像素涂白。默认值为0。
- order
设置字段顺序。如果设置为1,则切换字段;如果设置为0,则保持字段不变。默认值为0。
- sharp
如果设置为1,则启用额外的锐化。默认值为0。
- twoway
如果设置为1,则启用双向锐化。默认值为0。
39.135.1 示例
- 应用默认值:
kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
- 启用额外锐化:
kerndeint=sharp=1
- 用白色绘制处理过的像素:
kerndeint=map=1
39.136 kirsch
对输入的视频流应用 kirsch 算子。
该滤镜接受以下选项:
- planes
设置将被处理的平面,未处理的平面将被复制。 默认值为 0xf,所有平面将被处理。
- scale
设置将与过滤后的结果相乘的值。
- delta
设置将与过滤后的结果相加的值。
39.136.1 命令
该滤镜支持以上所有选项作为命令.
39.137 lagfun
缓慢更新较暗的像素。
该滤镜使短暂的光闪效果出现得更长。 该滤镜接受以下选项:
- decay
设置衰减的因子。默认值是 0.95。允许范围是 0 到 1。
- planes
设置要过滤的平面。默认是所有平面。允许范围是 0 到 15。
39.137.1 命令
该滤镜支持以上所有选项作为命令.
39.138 镜头校正
修正径向镜头失真
该滤镜可以用于修正广角镜头产生的径向失真,并重新矫正图像。 获取正确的参数可以使用诸如 OpenCV 的工具或者通过试错法。 使用 OpenCV,使用校正样本(位于 samples/cpp 文件夹)并从生成的矩阵中提取 k1 和 k2 系数。
注意,基本相同的滤镜在开源工具 Krita 和 KDE 项目中的 Digikam 中也可用。
与渐晕滤镜相比(也可以用于补偿镜头误差), 该滤镜修正图像的失真,而渐晕修正亮度分布。 在某些情况下,您可能需要同时使用这两个滤镜,但您需要注意顺序,即渐晕效果是否应该在镜头校正之前或之后应用。
39.138.1 选项
该滤镜接受以下选项:
- cx
图像焦点的相对 x 坐标,从而确定失真的中心。该值范围为 [0,1],以图像宽度的分数表示。默认值是 0.5。
- cy
图像焦点的相对 y 坐标,从而确定失真的中心。该值范围为 [0,1],以图像高度的分数表示。默认值是 0.5。
- k1
二次校正项的系数。该值范围为 [-1,1]。0 表示没有校正。默认值是 0。
- k2
双二次校正项的系数。该值范围为 [-1,1]。 0 表示没有校正。默认值是 0。
- i
设置插值类型。可以是
nearest或bilinear。 默认值是nearest.- fc
指定未映射像素的颜色。有关此选项的语法, 请查看(ffmpeg-utils) “颜色”部分在 ffmpeg-utils 手册中。默认颜色是
black@0.
生成校正的公式是:
r_src = r_tgt * (1 + k1 * (r_tgt / r_0)^2 + k2 * (r_tgt / r_0)^4)
其中r_0是图像对角线的一半,并且r_src和r_tgt分别是源图像和目标图像中焦点的距离。
39.138.2 命令
该滤镜支持以上所有选项作为命令.
39.139 lensfun
通过 lensfun 库(http://lensfun.sourceforge.net/).
)应用镜头校正。lensfun滤镜需要摄像机品牌、摄像机型号和镜头型号来应用镜头校正。滤镜将加载 lensfun 数据库并查询以查找对应的摄像机和镜头条目。
只要给定选项能够找到这些条目,滤镜就可以对帧进行校正。
请注意,不完整的字符串将导致滤镜根据给定选项选择最合适的匹配项,并将输出已选择的摄像机和镜头型号(日志级别为“info”)。
必须提供品牌、摄像机型号和镜头型号,因为这些是必需的。
为了获得可用品牌和型号的列表,请省略一个或多个make和model选项。滤镜将以INFO级别的日志输出完整列表。
第一列是品牌,第二列是型号。
为了获得可用镜头的列表,请设置品牌和型号值并省略lens_model选项。滤镜将在日志中以INFO级别输出完整的镜头列表。ffmpeg 工具将在打印完列表后退出。
滤镜接受以下选项:
- make
摄像机品牌(例如,“Canon”)。此选项是必需的。
- model
摄像机型号(例如,“Canon EOS 100D”)。此选项是 必需的。
- lens_model
镜头型号(例如,“Canon EF-S 18-55mm f/3.5-5.6 IS STM”)。 此选项是必需的。
- db_path
镜头数据库文件夹的完整路径。如果未设置,滤镜将尝试从库 构建的安装路径加载数据库。默认值为未设置。
- mode
要应用的校正类型。以下值是有效选项:
- ‘vignetting’
启用修复镜头渐晕。
- ‘geometry’
启用修复镜头几何形状。这是默认值。
- ‘subpixel’
启用修复色差。
- ‘vig_geo’
启用修复镜头渐晕和镜头几何形状。
- ‘vig_subpixel’
启用修复镜头渐晕和色差。
- ‘distortion’
启用修复镜头几何形状和色差。
- ‘all’
启用所有可能的校正。
- focal_length
图像/视频的焦距(缩放;期望视频为固定值)。例如,18-55mm 镜头的焦距范围为 [18-55],因此在使用该镜头时应选择该范围内的值。默认值为 18。
- aperture
图像/视频的光圈(期望视频为固定值)。请注意,光圈仅用于渐晕校正。默认值为 3.5。
- focus_distance
图像/视频的焦距(期望视频为固定值)。请注意,焦距仅稍微影响渐晕校正过程。如果未知,请将其保留为默认值(即 1000)。
- scale
转换后应用的缩放系数。校正后的视频不一定是矩形的。此参数控制结果图像的可见程度。值 0 表示将自动选择一个值,使输出图像中的未映射区域很少或没有。1.0 表示不进行额外缩放。较低的值可能会使更多的校正图像可见,而较高的值可能会避免输出中的未映射区域。
- target_geometry
输出图像/视频的目标几何形状。以下值是有效选项:
- ‘rectilinear (default)’
- ‘fisheye’
- ‘panoramic’
- ‘equirectangular’
- ‘fisheye_orthographic’
- ‘fisheye_stereographic’
- ‘fisheye_equisolid’
- ‘fisheye_thoby’
- reverse
应用图像校正的反向效果(而不是修正失真,应用失真)。
- interpolation
校正失真时使用的插值类型。以下值是有效选项:
- ‘nearest’
- ‘linear (default)’
- ‘lanczos’
39.139.1 示例
- 使用品牌“Canon”,摄像机型号“Canon EOS 100D”,镜头型号“Canon EF-S 18-55mm f/3.5-5.6 IS STM”,焦距为“18”,光圈为“8.0”应用镜头校正。
ffmpeg -i input.mov -vf lensfun=make=Canon:model="Canon EOS 100D":lens_model="Canon EF-S 18-55mm f/3.5-5.6 IS STM":focal_length=18:aperture=8 -c:v h264 -b:v 8000k output.mov
- 应用与前述相同的校正,但仅限视频的前 5 秒。
ffmpeg -i input.mov -vf lensfun=make=Canon:model="Canon EOS 100D":lens_model="Canon EF-S 18-55mm f/3.5-5.6 IS STM":focal_length=18:aperture=8:enable='lte(t\,5)' -c:v h264 -b:v 8000k output.mov
39.140 LCEVC
基于 liblcevc_dec 的低复杂度增强视频编解码滤镜 (https://github.com/v-novaltd/LCEVCdec).
39.141 Libplacebo
基于 Libplacebo 的灵活 GPU 加速处理滤镜 (https://code.videolan.org/videolan/libplacebo).
39.141.1 选项
此过滤器的选项分为以下几个部分:
39.141.1.1 输出模式
这些选项控制整体输出模式。默认情况下,libplacebo 会尽可能保留源颜色信息和大小,但它会应用任何嵌入的胶片颗粒、杜比视界元数据或源帧中的变形SAR。
- inputs
设置输入的数量。这可以与
idx变量一起使用,允许在输出帧中放置/混合多个输入。这实际上启用了类似于hstack, overlay等效果。- w
- h
设置输出视频尺寸表达式。默认值是
iw和ih.允许与scale过滤器相同的表达式。
- crop_x
- crop_y
设置输入裁剪x/y表达式,默认值是
(iw-cw)/2和(ih-ch)/2.- crop_w
- crop_h
设置输入裁剪宽度/高度表达式,默认值是
iw和ih.- pos_x
- pos_y
设置输出放置x/y表达式,默认值是
(ow-pw)/2和(oh-ph)/2.- pos_w
- pos_h
设置输出放置宽度/高度表达式,默认值是
ow和oh.- rotate
按指定角度顺时针旋转输入帧。
- ‘0, 360’
- ‘90’
- ‘180’
- ‘270’
- fps
设置输出帧率。可以为有理数,例如
60000/1001。如果设置为特殊字符串none(默认),则输入时间戳将无修改地传递到输出。否则,输入视频帧将根据需要进行插值,重新缩放视频至指定的目标帧率,具体方式由frame_mixer选项决定。- format
设置输出格式覆盖。如果未设置(默认),帧将以与各自输入帧相同的格式输出。否则将执行格式转换。
- force_original_aspect_ratio
- force_divisible_by
与相同的scale过滤选项功能一致。
- normalize_sar
如果启用,输出帧将始终具有1:1的像素纵横比。这将根据需要增加额外的填充/裁剪。如果禁用(默认),包括来自如变形视频源的任何纵横比不匹配都会转发到输出像素纵横比。
- pad_crop_ratio
指定一个介于
0.0和1.0之间的比率,用于在输入纵横比与输出纵横比不匹配且normalize_sar生效时,在填充与裁剪之间平衡。默认值为0.0始终以黑色边框填充内容,而值为1.0始终裁剪掉部分内容。可设置中间值,导致两种方式的混合。- fillcolor
设置填充输出区域未被输出图像覆盖的颜色,例如由于normalize_sar。有关此选项的一般语法,请查阅(ffmpeg-utils)中的"Color"部分。默认值为
black@0.- corner_rounding
以圆角渲染帧。值为介于
0.0到1.0之间的浮点数,指示圆角的相对程度,从完全方形到完全圆形。换句话说,它给出了半径除以较小边长一半的比值。默认值为0.0.- extra_opts
传递额外的libplacebo内部配置选项。这些可以作为键=值对的列表,用‘:’分隔。以下示例显示了如何配置自定义过滤内核("EWA LanczosSharp")并使用它将输入图像分辨率加倍:
-vf "libplacebo=w=iw*2:h=ih*2:extra_opts='upscaler=custom\:upscaler_preset=ewa_lanczos\:upscaler_blur=0.9812505644269356'"
- shader_cache
libplacebo 用于存储和加载缓存着色器对象的缓存目录的文件路径。此缓存不会自动清理。如果路径未以目录分隔符结束,则生成的文件名将有效地以最后的路径组件作为前缀。所有目录必须已存在。
-vf "libplacebo=shader_cache=/tmp/pl-shader-"
- colorspace
- color_primaries
- color_trc
- range
配置输出帧将使用的色彩空间。默认值为
auto,表示输出帧与输入帧格式相同,不会发生更改。对于任何其他值,将执行转换。请参阅setparams过滤器,获取可能值的列表。
- apply_filmgrain
如果源帧中存在,则应用胶片颗粒(例如AV1或H.274),并从输出中移除。默认启用。
- apply_dolbyvision
如果源帧中存在,则应用杜比视界RPU元数据,并从输出中移除。默认启用。请注意,杜比视界将始终输出BT.2020+PQ,覆盖通常的输入帧元数据。这些值也将被选为
auto分别用于输出帧选项的值。
除了为scale过滤器记录的表达式常量外,crop_w, crop_h, crop_x, crop_y, pos_w, pos_h, pos_x和pos_y选项也可包含以下常量:
- in_idx, idx
当前活动输入流的(从0开始的)数值索引。
- crop_w, cw
- crop_h, ch
的计算值crop_w和crop_h.
- pos_w, pw
- pos_h, ph
的计算值pos_w和pos_h.
- in_t, t
输入帧的时间戳(以秒为单位)。如果输入时间戳未知,则为NAN。
- out_t, ot
输入帧的时间戳(以秒为单位)。如果输入时间戳未知,则为NAN。
- n
输入帧编号,从0开始。
39.141.1.2 缩放
本节的选项控制libplacebo如何进行向上和必要时的向下缩放。请注意,libplacebo始终在4:4:4内容上内部运行,因此任何子采样的色度格式(例如yuv420p)在渲染过程中将被上采样和下采样。这意味着即使源和目标分辨率相同,也可能会执行缩放。
- upscaler
- downscaler
配置用于向上和向下缩放的滤波内核。分别默认值为
spline36和mitchell。要获取所有可能值的完整列表,请传入help至这些选项。最重要的值包括:- ‘none’
强制使用内置的GPU纹理采样(通常是双线性)。非常快但质量较差,尤其是向下缩放时。
- ‘bilinear’
双线性插值。一般在GPU上免费完成,除非这种方式会导致混叠。快速且质量较低。
- ‘nearest’
最近邻插值。清晰但混叠严重。
- ‘oversample’
一种算法,外观与最近邻插值相似,但尝试保留像素纵横比。适合像素艺术,因为它最小化了艺术外观的失真。
- ‘lanczos’
标准的sinc-sinc插值内核。
- ‘spline36’
Lanczos的立方样条近似。性能几乎没有差异,但振铃稍微少一些。
- ‘ewa_lanczos’
基于jinc-jinc内核的椭圆加权平均版本的Lanczos。通常只称为"Jinc 缩放"。速度较慢但质量非常高。
- ‘gaussian’
高斯内核。具有一定理想的数学特性,但主观上非常模糊。
- ‘mitchell’
采用Mitchell和Netravali推荐参数的立方BC样条。几乎没有振铃。
- frame_mixer
控制用于在时间上混合帧的内核。默认值为
none,表示禁用帧混合。要获取所有可能值的完整列表,请传help至该选项。最重要的值包括:- ‘none’
禁用帧混合,结果相当于"最近邻"语义。
- ‘oversample’
对输入视频进行超采样以创建"平滑运动"类型的效果:如果输出帧恰好落在两个视频帧的过渡处,则根据相对重叠进行混合。每当需要保留原始主观外观时,这都是推荐选项。
- ‘mitchell_clamp’
较大的滤波内核,平滑地插值多个帧,尽可能消除振铃和其他伪影。这是追求最大视觉平滑度时的推荐选项。
- ‘linear’
在帧之间进行线性混合/淡出。特别适合构建例如幻灯片放映。
- antiringing
启用抗振铃(适用于非EWA滤波器)。该值(介于
0.0和1.0之间)配置抗振铃算法的强度。如果设置得太高,可能会增加混叠。默认禁用。- sigmoid
在缩放过程中启用S形压缩。略微减少振铃。默认启用。
39.141.1.3 去隔行
当帧标记为隔行时,自动支持去隔行,但是不会对帧进行去隔行,除非选择了去隔行算法。
- deinterlace
选择要使用的去隔行算法。
- ‘weave’
无去隔行处理,将字段交织为单一帧。这是默认设置。
- ‘bob’
简单重复每个字段的行两次的去隔行处理。
- ‘yadif’
另一种去隔行滤镜。参见yadif滤镜了解更多细节。
- skip_spatial_check
使用时跳过空间去隔行检查
yadif去隔行处理。- send_fields
为每个字段输出一帧,而不是为每帧输出。请注意,这将始终使标记的输出帧率加倍,即使输入中没有隔行帧。默认禁用。
39.141.1.4 去色带
Libplacebo带有内置去色带滤镜,可以很好地抵消许多常见的色带和块状问题。在需要高质量时,建议启用此功能。
- deband
启用(快速)去色带算法。默认禁用。
- deband_iterations
去色带算法的去色带迭代次数。每次迭代都会逐渐增加半径(并减小阈值)。推荐值范围为
1到4。默认值为1.- deband_threshold
去色带滤镜强度。更高的数值会导致更积极的去色带。默认值为
4.0.- deband_radius
去色带滤镜半径。较大的半径对缓慢渐变更好,而较小的半径对陡峭的渐变更好。默认值为
16.0.- deband_grain
添加的额外输出粒度量。帮助隐藏缺陷。默认值为
6.0.
39.141.1.5 颜色调整
一系列主观颜色控制。不是非常严格,因此具体效果会因输入基色和色彩空间而有所变化。
- brightness
亮度提升,在
-1.0和1.0之间。默认值为0.0.- contrast
对比度增益,在
0.0和16.0之间。默认值为1.0.- saturation
饱和度增益,在
0.0和16.0之间。默认值为1.0.- hue
以弧度为单位的色调偏移,在
-3.14和3.14之间。默认值为0.0。这将旋转UV子向量,RGB输入默认为BT.709系数。- gamma
伽玛调整,在
0.0和16.0之间。默认值为1.0.- cones
用于色盲模拟的锥体模型。接受任意组合的
l,m和s。以下是一些示例:- ‘m’
绿色盲/绿色色弱(影响3%-4%的人口)
- ‘l’
红色盲/红色色弱(影响1%-2%的人口)
- ‘l+m’
单色视(非常罕见)
- ‘l+m+s’
全色觉丧失(完全丧失白昼视力,极其罕见)
- cone-strength
由指定锥体的增益系数
cones,在0.0和10.0之间。值为1.0不会改变色觉。值为0.0(默认值)模拟对这些锥体的完全丧失。超过1.0的值会夸大锥体之间的差异,这可能有助于补偿色觉减少。
39.141.1.6 峰值检测
为帮助处理仅具有静态HDR10元数据或完全没有标记的来源,libplacebo使用了自己的内部帧分析计算着色器来分析源帧并实时调整色调映射函数。如果过于缓慢或者需要完全可重复的帧准确结果,建议关闭此功能。
- peak_detect
启用HDR峰值检测。忽略静态MaxCLL/MaxFALL值,动态从输入中检测。请注意,检测到的值不会写回到输出帧,而仅指导内部色调映射过程。默认启用。
- smoothing_period
峰值检测平滑周期,介于
0.0和1000.0之间。更高的值将使峰值检测对输入变化的响应变慢。默认值为100.0.- scene_threshold_low
- scene_threshold_high
场景变化检测的下限和上限阈值。在以对数尺度表示的
0.0和100.0之间。默认值为5.5和10.0。设置任一为负值可禁用此功能。- percentile
用于色调映射的帧亮度直方图的百分位数。默认值为
99.995,这是相当保守的值。将此设置为100.0禁用帧直方图测量,而是使用真实的峰值亮度进行色调映射。
39.141.1.7 色调映射
本节中的选项控制libplacebo在处理宽色域或HDR内容不匹配时如何执行色调映射和色域映射。一般来说,libplacebo依赖于准确的源标签和母版显示色域信息来生成最佳结果。
- gamut_mode
如何处理由于色度色域映射导致的超出色域的颜色。
- ‘clip’
不进行处理,只是将超出范围的颜色剪裁到RGB体积。质量较低但速度极快。
- ‘perceptual’
基于视觉感知的软剪裁颜色到色域体积。这是默认设置。
- ‘relative’
相对色度硬剪裁。类似于
perceptual但没有软曲线。- ‘saturation’
饱和度映射,在RGB空间中直接将原色映射到原色。不建议用于人工计算机图形,除非需要明亮、饱和显示。
- ‘absolute’
绝对色度硬剪裁。不调整白点。
- ‘desaturate’
强烈去饱和超出色域的颜色向白色,同时保持亮度。倾向于扭曲明亮物体的视觉外观。
- ‘darken’
线性降低内容亮度以保留饱和细节,然后剪裁剩余的超出色域的颜色。
- ‘warn’
突出显示超出色域的像素(通过反转/标记它们)。
- ‘linear’
线性降低整个图像的色度,以使其符合目标颜色体积。在没有适当母版元数据的BT.2020来源上谨慎使用,因为这样做会导致过度去饱和。
- tonemapping
使用的色调映射算法。可用值为:
- ‘auto’
基于内部启发式的自动选择。这是默认设置。
- ‘clip’
不进行色调映射,只是剪裁超出范围的颜色。保留范围内颜色的完美颜色准确性,但完全破坏超出范围的信息。不进行任何黑点适应。不可配置。
- ‘st2094-40’
来自SMPTE ST 2094-40附件B的EETF,这种算法基于HDR10+动态元数据的Bezier曲线进行色调映射。根据目标与实际显示峰值亮度之间的比率调整OOTF。
- ‘st2094-10’
来自SMPTE ST 2094-10附件B.2的EETF,考虑到输入信号平均亮度以及最大/最小值。可配置对比度参数影响线性输出段的斜率,默认值为
1.0表示对比度无增加/减少。请注意,这目前不包括附件B.3中定义的主观增益/偏移/伽玛控制。- ‘bt.2390’
来自ITU-R报告BT.2390的EETF,是带有线性段的Hermite样条曲线。膝点偏移是可配置的。请注意,该参数的默认值为
1.0,而不是ITU-R规范中的0.5的值。- ‘bt.2446a’
来自ITU-R报告BT.2446方法A的EETF。专为良好母版HDR来源设计。可用于正向和反向色调映射。不可配置。
- ‘spline’
由两个多项式组成的简单样条线,由单个支点连接。参数提供支点位置(以PQ空间表示),默认值为
0.30。可用于正向和反向色调映射。- ‘reinhard’
简单的非线性、全局色调映射算法。参数指定显示峰值处的局部对比度系数。本质上,参数值为
0.5意味着参考白色的亮度大约是剪裁情况下的一半。默认值为0.5,这是此功能的最简单形式。- ‘mobius’
Reinhard色调映射算法的推广,支持黑色附近的附加线性斜率。色调映射参数指示线性部分与非线性部分之间的权衡。本质上,对于给定参数x,每个颜色值低于x将进行线性映射,而更高的值将进行非线性色调映射。接近
1.0的值使此曲线行为类似于clip,而接近0.0的值使此曲线行为类似于reinhard。默认值为0.3, 提供了色彩准确性和保留超出色域细节之间的良好平衡。- ‘hable’
由约翰·哈布尔开发的分段电影式色调映射算法,最初用于《神秘海域2》,灵感来源于柯达使用的类似色调映射算法。通过其在支持HDR渲染的视频游戏中的应用而广受欢迎。可以很好地保留暗部和亮部的细节,但其缺点是会显著改变平均亮度。这有点类似于
reinhard参数0.24.- ‘gamma’
拟合一个伽玛(幂)函数以在源颜色空间和目标颜色空间之间进行转换,实质上产生感知硬转折点连接两个大致线性部分。这可以在所有尺度上相当准确地保留细节,但可能导致图像呈现出平淡或暗沉的外观。该参数用作截止点,默认值为
0.5.- ‘linear’
在线性范围内通过PQ空间扩展输入到输出的范围。这会准确地保留所有细节,但会显著改变平均亮度。除了常规色调映射之外,还可用于反向色调映射。参数可以用来作为额外的线性增益系数(默认值为
1.0).
- tonemapping_param
对于可调节的色调映射函数,可以使用此参数微调曲线行为。参考
tonemapping的文档。默认值为0.0被曲线的默认偏好设置取代。- inverse_tonemapping
如果启用,此滤镜还将尝试将SDR信号扩展至填充HDR输出色彩范围。默认禁用。
- tonemapping_lut_size
色调映射LUT的大小,介于
2和1024之间。默认值为256。注意,与peak_detect.- contrast_recovery
结合时,此数值是平方计算的。
0.0的值,源图像将划分为高频和低频部分,并将高频图像的一部分加回到色调映射的输出中。对于某些HDR源可能会导致过度振铃伪影,但在色调映射后可以改善主观的清晰度和剩余细节。默认值为0.30.- contrast_smoothness
对比度恢复低通核大小。默认值为
3.5。增加或减少此值会显著影响视觉效果。启用contrast_recovery时无效。
39.141.1.8 抖动
默认情况下,libplacebo会在必要时进行抖动处理,包括渲染到任何低于16位精度的整数格式中。建议始终开启此项,因为关闭可能会导致输出中出现可见的色带,即使debanding滤镜已启用。如果需要最大性能,请使用ordered_fixed而不是关闭抖动。
- dithering
要使用的抖动方法。接受以下值:
- ‘none’
完全禁用抖动处理。这可能会导致出现可见的色带。
- ‘blue’
使用伪蓝噪声抖动处理。这是默认设置。
- ‘ordered’
可调有序抖动模式。
- ‘ordered_fixed’
更快的有序抖动,具有固定大小为
6的纹理。无纹理。- ‘white’
使用白噪声进行抖动。无纹理。
- dither_lut_size
抖动LUT大小,以log base2表示,介于
1和8之间。默认值为6,对应的LUT大小为64x64.- dither_temporal
启用时间抖动。默认禁用。
39.141.1.9 自定义着色器
libplacebo 支持基于mpv .hook GLSL语法的多个自定义着色器。可以在以下位置找到这些着色器集合:https://github.com/mpv-player/mpv/wiki/User-Scripts#user-shaders
mpv着色器格式的完整描述超出了本章节的范围,但可在以下链接找到概要:https://mpv.io/manual/master/#options-glsl-shader
- custom_shader_path
指定在运行时加载自定义着色器文件的路径。
- custom_shader_bin
指定完整的自定义着色器作为原始字符串。
39.141.1.10 调试 / 性能
本部分中的所有选项默认为关闭。当尝试以质量为代价实现最大性能时,它们可能有所帮助。
- skip_aa
禁用下采样时的抗锯齿。
- disable_linear
禁用线性光标缩放。
- disable_builtin
禁用内置GPU采样(强制使用LUT)。
- disable_fbos
强制禁用FBOs,导致几乎所有功能都丧失,但可提供最大可能速度。
39.141.2 命令
此过滤器支持几乎所有上述选项作为命令。.
39.141.3 示例
- 将输入色调映射到标准BT.709色域输出:
libplacebo=colorspace=bt709:color_primaries=bt709:color_trc=bt709:range=tv
- 重新调整输入以适应标准1080p分辨率,使用高质量缩放:
libplacebo=w=1920:h=1080:force_original_aspect_ratio=decrease:normalize_sar=true:upscaler=ewa_lanczos:downscaler=ewa_lanczos
- 将低FPS / 可变帧率输入插值到平滑的恒定60fps输出:
libplacebo=fps=60:frame_mixer=mitchell_clamp
- 转换输入为标准sRGB JPEG:
libplacebo=format=yuv420p:colorspace=bt470bg:color_primaries=bt709:color_trc=iec61966-2-1:range=pc
- 使用更高质量的去带化设置:
libplacebo=deband=true:deband_iterations=3:deband_radius=8:deband_threshold=6
- 在安装了Mesa的系统上运行此滤镜(并禁用最昂贵的选项):
ffmpeg ... -init_hw_device vulkan:llvmpipe ... -vf libplacebo=upscaler=none:downscaler=none:peak_detect=false
- 在解码器中抑制基于CPU的AV1/H.274电影颗粒应用,转为使用此滤镜进行处理。需注意的是,只有当帧已在GPU上,或正在使用libplacebo进行其他目的时才会带来收益,否则VRAM往返将抵消任何预期的加速。
ffmpeg -export_side_data +film_grain ... -vf libplacebo=apply_filmgrain=true
- 与VAAPI硬件解码交互,避免通过RAM往返:
ffmpeg -init_hw_device vulkan -hwaccel vaapi -hwaccel_output_format vaapi ... -vf libplacebo
39.142 libvmaf
计算参考/失真视频对输入的VMAF(视频多方法评估融合)分数。
第一个输入是失真视频,第二个输入是参考视频。
通过日志系统输出获取的VMAF分数。
此功能需要Netflix的vmaf库(libvmaf)作为前提条件。安装库后可以使用以下命令启用:./configure --enable-libvmaf.
过滤器具有以下选项:
- model
一个使用‘|’分隔的vmaf模型列表。每个模型可以配置多个参数。默认值:
"version=vmaf_v0.6.1"- feature
一个使用‘|’分隔的功能列表。每个功能可以配置多个参数。
- log_path
设置用于存储日志文件的路径。
- log_fmt
设置日志文件格式(xml、json、csv或sub)。
- pool
设置用于计算vmaf的池方法。选项有
min,harmonic_mean或mean(默认)。- n_threads
设置初始化libvmaf时使用的线程数。默认值:
0,不使用线程。- n_subsample
设置用于帧子采样的间隔。
此过滤器还支持帧同步选项。
39.142.1 示例
- 以下示例中,将失真视频distorted.mpg与参考文件reference.mpg.
- 进行比较。
ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf=log_path=output.xml -f null -
- 基本使用:
ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf='model=version=vmaf_v0.6.1\\:name=vmaf|version=vmaf_v0.6.1neg\\:name=vmaf_neg' -f null -
- 使用多个模型的示例:
ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf='feature=name=psnr|name=ciede' -f null -
- 使用多个附加功能的示例:
ffmpeg -i distorted.mpg -i reference.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]libvmaf=log_fmt=json:log_path=output.json" -f null -
39.143 libvmaf_cuda
这是libvmaf过滤器的CUDA变体。它只接受CUDA帧。
此功能需要Netflix的vmaf库(libvmaf)作为前提条件。安装库后可以使用以下命令启用:./configure --enable-nonfree --enable-ffnvcodec --enable-libvmaf.
39.143.1 示例
- 基本使用显示CUVID硬件解码和CUDA缩放,与scale_cuda:
ffmpeg \ -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i dis.obu \ -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i ref.obu \ -filter_complex " [0:v]scale_cuda=format=yuv420p[dis]; \ [1:v]scale_cuda=format=yuv420p[ref]; \ [dis][ref]libvmaf_cuda=log_fmt=json:log_path=output.json " \ -f null -
39.144 limitdiff
使用第二个(可选)第三个视频流应用有限差异过滤器。
过滤器接受以下选项:
- threshold
设置在允许视频流之间某些差异时使用的阈值。绝对差异值低于或等于此阈值时,将从第一个视频流中选取像素组件。
- elasticity
设置处理视频流时软阈值的弹性。该值乘以第一个值设置第二个阈值。绝对差异值大于或等于第二个阈值时,将从第二个视频流中选取像素组件。对于两个阈值之间的值,将使用第一个和第二个视频流之间的线性插值。
- reference
启用参考(第三个)视频流处理。默认关闭。如果设置,将使用此视频流计算与第一个视频流的绝对差异。
- planes
指定要处理的平面。默认处理所有可用平面。
39.144.1 命令
此滤镜支持以上所有选项作为命令除了选项 ‘reference’.
39.145 限制器
将像素分量值限制到指定范围 [min, max]。
滤镜接受以下选项:
- min
下限。默认为输入允许的最低值。
- max
上限。默认为输入允许的最高值。
- planes
指定要处理的平面。默认为所有可用平面.
39.145.1 命令
此滤镜支持以上所有选项作为命令.
39.146 循环
循环视频帧。
滤镜接受以下选项:
- loop
设置循环次数。将此值设置为 -1 将导致无限循环。 默认值为 0。
- size
设置最大帧数大小。默认值为 0。
- start
设置循环的首帧。默认值为 0。
- time
设置循环开始的时间(以秒为单位)。 仅当选项start设置时使用
-1.
39.146.1 示例
- 无限循环第一个单帧:
loop=loop=-1:size=1:start=0
- 循环第一个单帧 10 次:
loop=loop=10:size=1:start=0
- 循环前 10 帧 5 次:
loop=loop=5:size=10:start=0
39.147 lut1d
对输入视频应用 1D 查找表(LUT)。
滤镜接受以下选项:
- file
设置 1D LUT 文件名。
当前支持的格式:
- ‘cube’
Iridas
- ‘csp’
cineSpace
- interp
选择插值模式。
可供选择的值有:
- ‘nearest’
使用最近定义点的值。
- ‘linear’
使用线性插值法插值值。
- ‘cosine’
使用余弦插值法插值值。
- ‘cubic’
使用立方插值法插值值。
- ‘spline’
使用样条插值法插值值。
39.147.1 命令
此滤镜支持以上所有选项作为命令.
39.148 lut3d
对输入视频应用 3D 查找表(LUT)。
滤镜接受以下选项:
- file
设置 3D LUT 文件名。
当前支持的格式:
- ‘3dl’
AfterEffects
- ‘cube’
Iridas
- ‘dat’
DaVinci
- ‘m3d’
Pandora
- ‘csp’
cineSpace
- interp
选择插值模式。
可供选择的值有:
- ‘nearest’
使用最近定义点的值。
- ‘trilinear’
使用定义立方体的 8 个点进行插值。
- ‘tetrahedral’
使用四面体插值法进行插值。
- ‘pyramid’
使用金字塔插值法进行插值。
- ‘prism’
使用棱柱插值法进行插值。
39.148.1 命令
此滤镜支持interp选项作为命令.
39.149 lumakey
将某些亮度值转换为透明度。
滤镜接受以下选项:
- threshold
设置将用于透明度的亮度值。 默认值为
0.- tolerance
设置需要被键掉的亮度值范围。 默认值为
0.01.- softness
设置柔化范围。默认值为
0。 用于控制从零到完全透明的逐渐过渡。
39.149.1 命令
此滤镜支持与选项相同的命令。 命令接受与对应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.150 lut,lutrgb,lutyuv
计算查找表,将每个像素组件输入值绑定到输出值,并将其应用于输入视频。
lutyuv对 YUV 输入视频应用查找表,lutrgb对 RGB 输入视频应用查找表。
这些滤镜接受以下参数:
- c0
设置第一个像素分量表达式。
- c1
设置第二个像素分量表达式。
- c2
设置第三个像素分量表达式。
- c3
设置第四个像素分量表达式,对应于 alpha 分量。
- r
设置红色分量表达式。
- g
设置绿色分量表达式。
- b
设置蓝色分量表达式。
- a
设置 alpha 分量表达式。
- y
设置 Y/亮度分量表达式。
- u
设置 U/Cb 分量表达式。
- v
设置 V/Cr 分量表达式。
每一个都指定了用于计算与对应像素分量值的查找表表达式。
每个c*选项的具体分量与输入的格式相关。
在lut滤镜要求输入中使用YUV或RGB像素格式,lutrgb需要输入为RGB像素格式,并且lutyuv需要YUV。
表达式可以包含以下常量和函数:
- w
- h
输入视频宽度和高度。
- val
像素分量的输入值。
- clipval
输入值,限制在最小值-最大值范围内。
- maxval
像素分量的最大值。
- minval
像素分量的最小值。
- negval
像素分量值的反值,限制在最小值-最大值范围内;其表达式为"maxval-clipval+minval"。
- clip(val)
在计算值中计算出的值,限制在最小值-最大值范围内。
- gammaval(gamma)
像素分量值的伽马校正值,限制在最小值-最大值范围内。其表达式为 "pow((clipval-minval)/(maxval-minval),伽马值)*(maxval-minval)+minval"。
所有表达式默认值为"clipval"。
39.150.1 命令
此滤镜支持与选项相同的命令。
39.150.2 示例
- 使输入视频取反:
lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val" lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val"
上述操作等同于:
lutrgb="r=negval:g=negval:b=negval" lutyuv="y=negval:u=negval:v=negval"
- 取反亮度:
lutyuv=y=negval
- 移除彩色分量,将视频转为灰度图像:
lutyuv="u=128:v=128"
- 应用亮度刻录效果:
lutyuv="y=2*val"
- 移除绿色和蓝色分量:
lutrgb="g=0:b=0"
- 为输入设置一个固定的透明通道值:
format=rgba,lutrgb=a="maxval-minval/2"
- 将亮度伽玛校正因子设置为0.5:
lutyuv=y=gammaval(0.5)
- 丢弃亮度中的最低有效位:
lutyuv=y='bitand(val, 128+64+32)'
- 显现Technicolor效果:
lutyuv=u='(val-maxval/2)*2+maxval/2':v='(val-maxval/2)*2+maxval/2'
39.151 lut2, tlut2
该lut2滤镜接收两路输入流并输出一路视频流。
该tlut2(时间的lut2)滤镜从一个输入流中提取两帧连续的画面。
此滤镜支持以下参数:
- c0
设置像素分量1的表达式
- c1
设置像素分量2的表达式
- c2
设置像素分量3的表达式
- c3
设置像素分量4的表达式,对应于alpha分量
- d
设置输出的位深度,仅适用于
lut2滤镜。默认值为0, 表示位深度从第一输入格式中自动选择。
该lut2滤镜还支持帧同步选项。
每个选项指明了用于计算相应像素分量查找表的表达式。
每个与分量相关的选项的确切分量取决于输入格式。
表达式可包含以下常量:
- w
- h
输入视频宽度和高度。
- x
像素分量的第一个输入值。
- y
像素分量的第二个输入值。
- bdx
第一个输入视频的位深度。
- bdy
第二个输入视频的位深度。
所有表达式默认值为"x"。
39.151.1 命令
此滤镜支持以上所有选项作为命令,除了选项d.
39.151.2 示例
- 高亮显示两个RGB视频流之间的差异:
lut2='ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,0,pow(2,bdx)-1)'
- 高亮显示两个YUV视频流之间的差异:
lut2='ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,pow(2,bdx-1),pow(2,bdx)-1):ifnot(x-y,pow(2,bdx-1),pow(2,bdx)-1)'
- 显示两个视频流之间的最大差异:
lut2='if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1))):if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1))):if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1)))'
39.152 maskedclamp
使用第二和第三个输入流对第一个输入流进行值限制。
返回第一个输入流的值,限制在第二个输入流 -undershoot和第三个输入流 +overshoot.
此滤镜支持以下选项:
- undershoot
默认值为
0.- overshoot
默认值为
0.- planes
设置将以位图方式处理哪个平面,未处理的平面将从第一个输入流中复制。 默认值为0xf,处理所有平面。
39.152.1 命令
此滤镜支持以上所有选项作为命令.
39.153 maskedmax
通过比较第二和第三输入流与第一个输入流的绝对差异,将第二输入流和 第三输入流的值合并到输出流中。若第二个绝对差异更大,则选取第二输入流的值,否则选取第三输入流的值。
此滤镜支持以下选项:
- planes
设置将以位图方式处理哪个平面,未处理的平面将从第一个输入流中复制。 默认值为0xf,处理所有平面。
39.153.1 命令
此滤镜支持以上所有选项作为命令.
39.154 maskedmerge
使用第三个输入流中的每像素权重,将第一个输入流与第二个输入流合并。
第三个流像素分量的值为 0 时,返回第一个流中未改变的像素分量;而最大值(例如 8 位视频中的 255)则返回第二个流中未改变的像素分量。中间值定义了两个输入流像素分量之间合并的程度。
此滤镜接受以下选项:
- planes
设置作为位图处理的平面,未处理的平面将从第一个流复制。默认值为 0xf,所有平面都将被处理。
39.154.1 命令
此滤镜支持上面所有选项作为命令.
39.155 maskedmin
使用第二个输入流和第一个输入流之间的绝对差异以及第三个输入流和第一个输入流之间的绝对差异,将第二和第三输入流合并为输出流。如果第二个绝对差异小于第一个绝对差异,则选择第二个输入流的值,否则选择第三个输入流的值。
此滤镜接受以下选项:
- planes
设置作为位图处理的平面,未处理的平面将从第一个流复制。默认值为 0xf,所有平面都将被处理。
39.155.1 命令
此滤镜支持上面所有选项作为命令.
39.156 maskedthreshold
通过比较两个视频流的绝对差异与固定阈值来选择像素。
如果第一个和第二个视频流的像素分量之间的绝对差异等于或低于用户提供的阈值,则选择第一个视频流的像素分量,否则选择第二个视频流的像素分量。
此滤镜接受以下选项:
- threshold
设置用于从两个输入视频流的绝对差异中选择像素的阈值。
- planes
设置作为位图处理的平面,未处理的平面将从第二个流复制。默认值为 0xf,所有平面都将被处理。
- mode
设置滤镜操作模式。可以是
abs或diff。 默认是abs.
39.156.1 命令
此滤镜支持上面所有选项作为命令.
39.157 maskfun
从输入视频创建掩码。
例如,在tblend滤镜之后创建运动掩码非常有用。
此滤镜接受以下选项:
- low
设置低阈值。任何像素分量低于或等于该值的都将设置为 0。
- high
设置高阈值。任何像素分量高于该值的都将设置为当前像素格式的最大值。
- planes
设置要过滤的平面,默认情况下所有可用平面都会被过滤。
- fill
用此值填充所有帧像素。
- sum
设置帧的最大平均像素值。如果所有像素分量的总和高于该平均值,则输出帧将完全用fill选项设置的值填充。 通常在场景变化时结合
tblend滤镜使用时非常有用。
39.157.1 命令
此滤镜支持上面所有选项作为命令.
39.158 mcdeint
应用运动补偿去隔行处理。
它需要每帧有一个字段作为输入,因此必须与 yadif=1/3 或类似方法一起使用。
此滤镜接受以下选项:
- mode
设置去隔行处理模式。
它可接受以下值之一:
- ‘fast’
- ‘medium’
- ‘slow’
使用迭代运动估计算法
- ‘extra_slow’
类似于‘slow’,但使用多个参考帧。
默认值是‘fast’.
- parity
设置输入视频假定的画面字段排列。它必须是以下值之一:
- ‘0, tff’
假定是上场优先
- ‘1, bff’
假定是下场优先
默认值是‘bff’.
- qp
设置内部编码器使用的每块量化参数(QP)。
较高的值应该会产生更平滑的运动矢量场,但个别矢量的优化较少。默认值为 1。
39.159 median
根据半径定义的特定矩形选取中位像素。
此滤镜接受以下选项:
- radius
设置水平半径大小。默认值是
1。 允许的范围是 1 到 127 的整数。- planes
设置要处理的平面。默认值是
15,表示所有可用平面。- radiusV
设置垂直半径大小。默认值是
0。 允许的范围是 0 到 127 的整数。 如果为 0,则值将从水平radius选项中选取。- percentile
设置中位数百分比值。默认值是
0.5。 默认值为0.5将始终选择中位值,而0将选择 最小值,1最大值。
39.159.1 命令
此滤镜支持与选项相同的命令。 命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持当前值。
39.160 mergeplanes
合并多个视频流的颜色通道分量。
此滤镜最多接受 4 个输入流,并将选定的输入平面合并到输出视频中。
此滤镜接受以下选项:
- mapping
设置输入到输出平面映射。默认值是
0.映射指定为位图。它应以十六进制形式指定,例如 0xAa[Bb[Cc[Dd]]]。 ’Aa’ 描述输出流第一个平面的映射。‘A’ 设置要使用的输入流编号(从 0 到 3),‘a’ 设置对应输入流的平面编号(从 0 到 3)。其余映射类似,‘Bb’ 描述输出流第二个平面的映射,‘Cc’ 描述输出流第三个平面的映射,‘Dd’ 描述输出流第四个平面的映射。
- format
设置输出像素格式。默认值是
yuva444p.- map0s
- map1s
- map2s
- map3s
设置输出第 N 个平面输入到输出流映射。默认值是
0.- map0p
- map1p
- map2p
- map3p
设置输出第 N 个平面的输入到输出平面映射。默认值是
0.
39.160.1 示例
- 将宽度和高度相同的三个灰度视频流合并为单个视频流:
[a0][a1][a2]mergeplanes=0x001020:yuv444p
- 将第一个 yuv444p 流和第二个灰度视频流合并为 yuva444p 视频流:
[a0][a1]mergeplanes=0x00010210:yuva444p
- 交换 yuva444p 流中的 Y 和 A 平面:
format=yuva444p,mergeplanes=0x03010200:yuva444p
- 交换 yuv420p 流中的 U 和 V 平面:
format=yuv420p,mergeplanes=0x000201:yuv420p
- 将 rgb24 剪辑转换为 yuv444p:
format=rgb24,mergeplanes=0x000102:yuv444p
39.161 mestimate
使用块匹配算法估算并导出运动矢量。 运动矢量存储在帧辅助数据中,可供其他滤镜使用。
此滤镜接受以下选项:
- method
指定运动估计方法。接受以下值之一:
- ‘esa’
穷尽搜索算法。
- ‘tss’
三级搜索算法。
- ‘tdls’
二维对数搜索算法。
- ‘ntss’
新的三步搜索算法。
- ‘fss’
四步搜索算法。
- ‘ds’
菱形搜索算法。
- ‘hexbs’
基于六边形的搜索算法。
- ‘epzs’
增强型预测分区搜索算法。
- ‘umh’
不均匀多六边形搜索算法。
默认值为‘esa’.
- mb_size
宏块大小。默认
16.- search_param
搜索参数。默认
7.
39.162 中途均衡器
使用两个视频流应用中途图像均衡化效果。
中途图像均衡化调整一对图像以使它们具有相同的直方图,同时尽可能地保留其动态性。它对匹配一对立体摄像头的曝光非常有用。
该滤镜有两个输入和一个输出,它们必须是相同的像素格式,但大小可能不同。滤镜输出为使用两个输入中途直方图调整的第一个输入。
此滤镜接受以下选项:
- planes
设置要处理的平面。默认值为
15,即所有可用平面。
39.163 动态插值
使用运动插值将视频转换为指定的帧率。
此滤镜接受以下选项:
- fps
指定输出帧率。例如可以是有理数
60000/1001。如果fps小于源帧率,将会删除帧。默认60.- mi_mode
运动插值模式。接受以下值:
- ‘dup’
为插值的新帧复制前一帧或下一帧。
- ‘blend’
混合源帧。插值帧是前一帧和下一帧的平均值。
- ‘mci’
运动补偿插值。当选择此模式时,以下选项有效:
- ‘mc_mode’
运动补偿模式。接受以下值:
- ‘obmc’
重叠块运动补偿。
- ‘aobmc’
自适应重叠块运动补偿。窗口权重系数根据相邻运动矢量的可靠性自适应控制,以减少过度平滑。
默认模式为‘obmc’.
- ‘me_mode’
运动估计模式。接受以下值:
- ‘bidir’
双向运动估计。运动矢量分别在每个源帧的前向和后向上进行估计。
- ‘bilat’
双边运动估计。运动矢量直接为插值帧估计。
默认模式为‘bilat’.
- ‘me’
用于运动估计的算法。接受以下值:
- ‘esa’
全搜索算法。
- ‘tss’
三步搜索算法。
- ‘tdls’
二维对数搜索算法。
- ‘ntss’
新三步搜索算法。
- ‘fss’
四步搜索算法。
- ‘ds’
菱形搜索算法。
- ‘hexbs’
基于六边形的搜索算法。
- ‘epzs’
增强型预测分区搜索算法。
- ‘umh’
不均匀多六边形搜索算法。
默认算法为‘epzs’.
- ‘mb_size’
宏块大小。默认
16.- ‘search_param’
运动估计搜索参数。默认
32.- ‘vsbmc’
启用可变大小块运动补偿。在对象边界处使用较小块大小的运动估计,以减少模糊。默认值为
0(禁用)。
- scd
场景变换检测方法。场景变换会导致运动矢量随机方向。场景变换检测用重复帧替换插值帧。可能对其他模式不需要。接受以下值:
- ‘none’
禁用场景变换检测。
- ‘fdiff’
帧差异。比较相应像素值,如果满足scd_threshold,则检测到场景变换。
默认方法为‘fdiff’.
- scd_threshold
场景变换检测阈值。默认值为
10..
39.164 混合
将多个视频输入流混合为一个视频流。
以下是接受选项的说明。
- inputs
输入数量。如果未指定,则默认为2。
- weights
指定每个输入视频流的权重作为序列。 每个权重由空格分隔。如果权重数目小于帧数,则最后指定的权重将用于未设置的所有剩余权重。
- scale
指定比例,如果设置了比例,它将与每个权重乘以像素值之和相乘,以给出最终目标像素值。默认情况下比例自动调整为权重总和。
- planes
设置要过滤的平面。默认值是全部。允许范围是0到15。
- duration
指定流结束的确定方式。
- ‘longest’
最长输入的持续时间。(默认)
- ‘shortest’
最短输入的持续时间。
- ‘first’
第一个输入的持续时间。
39.164.1 命令
此滤镜支持以下命令:
- weights
- scale
- planes
语法与具有相同名称的选项相同。
39.165 单色
使用自定义颜色滤镜将视频转换为灰色。
以下是接受选项的说明。
- cb
设置色度蓝点。允许范围从-1到1。默认值为0。
- cr
设置色度红点。允许范围从-1到1。默认值为0。
- size
设置颜色滤镜大小。允许范围从0.1到10。默认值为1。
- high
设置高光强度。允许范围从0到1。默认值为0。
39.165.1 命令
此滤镜支持以上所有作为命令.
39.166 形态学
此滤镜允许应用主要的形态学灰度变换, 腐蚀和膨胀,使用在第二输入流中设置的任意结构。
与简单实现相比,此滤镜在腐蚀和膨胀滤镜中速度更为关键,
表现更慢。morpho应使用此滤镜进行替代。
以下是接受的选项描述,
- mode
设置要应用的形态学变换,可以是:
- ‘erode’
- ‘dilate’
- ‘open’
- ‘close’
- ‘gradient’
- ‘tophat’
- ‘blackhat’
默认值为
erode.- planes
设置要过滤的平面,默认情况下除Alpha外的所有平面都会被过滤。
- structure
设置将从第二输入流中处理的结构视频帧, 可以是第一个或全部. 默认值为全部.
该morpho滤镜还支持帧同步选项。
39.166.1 命令
此滤镜支持与命令作为选项相同。
39.167 mpdecimate
删除与上一帧差异不大的帧以降低帧率。
此滤镜的主要用途是极低码率编码(例如通过拨号调制解调器进行流媒体传输),但理论上也可用于修复逆转逐帧扫描错误的电影。
以下是接受选项的描述。
- max
设置可连续删除的最大帧数(如果为正),或删除之间的最小间隔(如果为负)。如果值为0,帧将被忽略之前连续删除的帧数量而直接删除。
默认值为0。
- keep
设置要忽略连续相似帧的最大数量,然后开始删除它们。 如果值为0,帧将被忽略之前连续相似帧的数量而直接删除。
默认值为0。
- hi
- lo
- frac
设置删除阈值。
的值hi和lo针对8x8像素块表示实际像素值差异,因此阈值为64表示每个像素有1单位的差异,或者跨块分布的差异。
如果没有8x8块的差异超过hi的阈值,并且不超过frac块(1表示整个图像)具有超过lo.
的阈值,帧将成为候选删除对象。hi的默认值为64*12,lo的默认值为64*5,frac的默认值为0.33。
39.168 msad
获得两个输入视频之间的MSAD(平均绝对差之和)。
此滤镜需要两个输入视频。
两个输入视频必须具有相同的分辨率和像素格式才能使此滤镜正常工作。此外,它默认假定两个输入具有相同数量的帧,并逐帧进行比较。
通过日志系统打印获取的每个分量、平均值、最小值和最大值的MSAD。
滤镜将每帧计算的MSAD存储在帧元数据中。
此滤镜还支持帧同步选项。
在以下示例中,处理的输入文件main.mpg与参考文件进行比较ref.mpg.
ffmpeg -i main.mpg -i ref.mpg -lavfi msad -f null -
39.169 multiply
将第一视频流像素值与第二视频流像素值相乘。
滤镜接受以下选项:
- scale
设置应用于第二视频流的比例. 默认值为
1. 允许范围从0到9.- offset
设置应用于第二视频流的偏移量. 默认值为
0.5. 允许范围从-1到1.- planes
指定要处理输入视频流的平面。 默认情况下处理所有平面。
39.169.1 命令
此滤镜支持与命令作为选项相同。
39.170 negate
否定(反转)输入视频。
它接受以下选项:
- components
设置要否定的组件。
组件的可用值为:
- ‘y’
- ‘u’
- ‘v’
- ‘a’
- ‘r’
- ‘g’
- ‘b’
- negate_alpha
值为1时否定alpha组件(如果存在)。默认值为0。
39.170.1 命令
此滤镜支持与命令作为选项相同。
39.171 nlmeans
使用非局部均值算法对帧进行去噪。
每个像素会通过查找具有相似上下文的其他像素进行调整。 上下文相似性由比较大小为pxp的相邻块来定义。块在rxr的区域内搜索。
请注意,搜索区域定义块中心,这意味着某些块将由搜索区域外的像素组成。
滤镜接受以下选项。
- s
设置降噪强度。默认值为1.0。范围必须为 [1.0, 30.0]。
- p
设置块大小。默认值为7。必须为范围 [0, 99] 中的奇数。
- pc
与p相同,但适用于色度平面。
默认值为0,表示自动。
- r
设置搜索大小。默认值为15。必须为范围 [0, 99] 中的奇数。
- rc
与r相同,但适用于色度平面。
默认值为0,表示自动。
39.172 nnedi
使用神经网络边缘定向插值对视频进行去隔行。
此滤镜接受以下选项:
- weights
必须选项,没有二进制文件滤镜无法工作。 当前文件可在此处找到: https://github.com/dubhater/vapoursynth-nnedi3/blob/master/src/nnedi3_weights.bin
- deint
设置要去隔行的帧,默认值为
all. 可以是all或interlaced.- field
设置操作模式。
可以是以下之一:
- ‘af’
使用帧标志,双场。
- ‘a’
使用帧标志,单场。
- ‘t’
仅使用顶场。
- ‘b’
仅使用底场。
- ‘tf’
使用双场,优先顶场。
- ‘bf’
使用双场,优先底场。
- planes
设置要处理的平面,默认情况下过滤器会处理所有帧。
- nsize
设置神经网络预测器在每个像素周围使用的局部邻域大小。
可以是以下选项之一:
- ‘s8x6’
- ‘s16x6’
- ‘s32x6’
- ‘s48x6’
- ‘s8x4’
- ‘s16x4’
- ‘s32x4’
- nns
设置神经网络预测器中的神经元数量。 可以是以下选项之一:
- ‘n16’
- ‘n32’
- ‘n64’
- ‘n128’
- ‘n256’
- qual
控制用于计算最终输出值的神经网络预测次数。可以是
fast,默认值为slow.- etype
设置预测器要使用的权重值。 可以是以下选项之一:
- ‘a, abs’
为最小化绝对误差训练的权重
- ‘s, mse’
为最小化平方误差训练的权重
- pscrn
控制是否使用预筛选神经网络来决定哪些像素应由预测器神经网络处理,哪些可以通过简单的立方插值处理。 预筛选器训练的目标是判断像素的立方插值是否足够,或者是否应该由预测器神经网络预测。 预筛选神经网络的计算复杂性远小于预测器神经网络。由于大多数像素可以通过立方插值处理,使用预筛选器通常能显著加快处理速度。 预筛选器的准确性较高,因此使用与不使用之间的差异几乎总是难以察觉。
可以是以下选项之一:
- ‘none’
- ‘original’
- ‘new’
- ‘new2’
- ‘new3’
默认值为
new.
39.172.1 命令
此过滤器支持与选项相同的命令,不包括权重选项。
39.173 无格式
强制 libavfilter 不使用指定的某些像素格式作为输入传递给下一个过滤器。
它接受以下参数:
- pix_fmts
用‘|’分隔的像素格式名称列表,例如 pix_fmts=yuv420p|monow|rgb24。
39.173.1 示例
- 强制 libavfilter 使用一个不同于yuv420p的格式作为输入传递给 vflip 过滤器:
noformat=pix_fmts=yuv420p,vflip
- 将输入视频转码为列表中不包含的任何格式:
noformat=yuv420p|yuv444p|yuv410p
39.174 噪声
在视频输入帧上添加噪声。
过滤器接受以下选项:
- all_seed
- c0_seed
- c1_seed
- c2_seed
- c3_seed
为特定像素分量或所有像素分量设置噪声种子,当选择all_seed时。默认值为
123457.- all_strength, alls
- c0_strength, c0s
- c1_strength, c1s
- c2_strength, c2s
- c3_strength, c3s
为特定像素分量或所有像素分量设置噪声强度,当选择all_strength时。默认值为
0。允许范围为 [0, 100]。- all_flags, allf
- c0_flags, c0f
- c1_flags, c1f
- c2_flags, c2f
- c3_flags, c3f
设置像素分量标志,或者如果选择all_flags,则为所有分量设置标志。 分量标志的可用值为:
- ‘a’
平均时间噪声(更平滑)
- ‘p’
将随机噪声与(半)规则图案混合
- ‘t’
时间噪声(噪声图案在帧间变化)
- ‘u’
均匀噪声(否则为高斯噪声)
39.174.1 示例
向输入视频添加时间噪声和均匀噪声:
noise=alls=20:allf=t+u
39.175 归一化
归一化 RGB 视频(即直方图拉伸,对比度拓展)。 参阅:https://en.wikipedia.org/wiki/Normalization_(image_processing)
对于每帧的每个通道,过滤器计算输入范围并将其线性映射到用户指定的输出范围。输出范围默认为从纯黑到纯白的全动态范围。
可以对输入范围使用时间平滑以减少由暗或亮的小物体进入或离开场景引起的闪烁(亮度的快速变化)。 这类似于视频摄像机的自动曝光(自动增益控制),并且与摄像机类似,它可能导致视频的过度曝光或曝光不足。
R、G、B 三个通道可以独立归一化,这可能会导致颜色偏移,或者将它们链接在一起作为一个单独的通道,这可以防止颜色偏移。 链接的归一化保持色相。独立的归一化不保持色相,因此它可以用于移除某些颜色偏差。独立和链接的归一化可以以任意比例组合。
归一化过滤器接受以下选项:
- blackpt
- whitept
定义输出范围的颜色。最小输入值映射到blackpt。最大输入值映射到whitept。 默认分别为黑色和白色。指定白色作为blackpt,黑色作为whitept将生成颜色反转的归一化视频。 使用灰度可以减少动态范围(对比度)。指定饱和的颜色可以产生一些有趣的效果。
- smoothing
用于时间平滑的前一帧的数量。每个通道的输入范围使用加权平均值(滚动平均值)平滑,范围包括当前帧和smoothing前帧的加权平均数。默认值为 0(无时间平滑)。
- independence
控制独立(颜色偏移)通道归一化和链接(保持颜色)归一化的比例:0.0 表示完全链接,1.0 表示完全独立。默认值为 1.0(完全独立)。
- strength
整个滤镜的强度。1.0 表示完全启用效果,0.0 则是耗费算力的空操作。默认值为 1.0(完全启用)。
39.175.1 命令
此过滤器支持与选项一样的命令,不包括smoothing选项。 命令接受与相应选项相同的语法。
如果指定的表达式无效,它将保持为当前值。
39.175.2 示例
将视频对比度拉伸以使用完整的动态范围,不使用时间平滑;可能会根据源内容出现闪烁:
normalize=blackpt=black:whitept=white:smoothing=0
与上面相同,但使用50帧的时间平滑;根据源内容闪烁应该会减少:
normalize=blackpt=black:whitept=white:smoothing=50
与上面相同,但使用色调保持的链接通道归一化:
normalize=blackpt=black:whitept=white:smoothing=50:independence=0
与上面相同,但强度为一半:
normalize=blackpt=black:whitept=white:smoothing=50:independence=0:strength=0.5
将最暗的输入颜色映射到红色,将最亮的输入颜色映射到青色:
normalize=blackpt=red:whitept=cyan
39.176 空过滤器
将视频源不做任何更改地传递到输出。
39.177 OCR 识别
光学字符识别
该过滤器使用 Tesseract 进行光学字符识别。要启用该过滤器的编译,您需要使用以下方式配置 FFmpeg:--enable-libtesseract.
它接受以下选项:
- datapath
设置 Tesseract 数据路径。默认是安装时设定的路径。
- language
设置语言,默认是“eng”。
- whitelist
设置字符白名单。
- blacklist
设置字符黑名单。
过滤器将识别的文本以帧元数据的形式输出为lavfi.ocr.text。
过滤器将识别单词的置信度以帧元数据的形式输出为lavfi.ocr.confidence.
39.178 OpenCV
使用 libopencv 应用视频变换。
要启用此过滤器,请安装 libopencv 库和相关头文件,并使用以下配置方式设置 FFmpeg:--enable-libopencv.
它接受以下参数:
- filter_name
要应用的 libopencv 滤镜名称。
- filter_params
传递给 libopencv 滤镜的参数。如果未指定,则假定为默认值。
有关更详细的信息,请参考 libopencv 官方文档:http://docs.opencv.org/master/modules/imgproc/doc/filtering.html
支持多个 libopencv 滤镜,请参阅以下子部分。
39.178.1 膨胀
使用特定的结构元素膨胀图像。
对应于libopencv函数cvDilate.
它接受以下参数:结构元素|迭代次数.
结构元素表示结构元素,语法如下:列数x行数+锚点列x锚点行/形状
列数和行数表示结构元素的列数和行数,锚点列和锚点行锚点, 以及形状表示结构元素的形状。形状必须为"rect"(矩形)、"cross"(十字形)、"ellipse"(椭圆形)或"custom"(自定义)。
如果形状的值为"custom"(自定义),必须后跟一个形式为"=文件名"的字符串。名称为文件名的文件被认为表示二值化图像,每个可打印字符对应一个亮点像素。当使用自定义形状时,列数和行数将被忽略,改为文件本身的列数和行数。
默认值结构元素为"3x3+0x0/rect"。
迭代次数指定对图像应用变换的次数,默认值为1。
一些示例:
# Use the default values ocv=dilate # Dilate using a structuring element with a 5x5 cross, iterating two times ocv=filter_name=dilate:filter_params=5x5+2x2/cross|2 # Read the shape from the file diamond.shape, iterating two times. # The file diamond.shape may contain a pattern of characters like this # * # *** # ***** # *** # * # The specified columns and rows are ignored # but the anchor point coordinates are not ocv=dilate:0x0+2x2/custom=diamond.shape|2
39.178.2 腐蚀
使用特定的结构元素腐蚀图像。
对应于libopencv函数cvErode.
它接受以下参数:结构元素:迭代次数, 与膨胀滤镜具有相同的语法和语义。
39.178.3 平滑
平滑输入视频。
滤镜接受以下参数:类型|参数1|参数2|参数3|参数4.
类型是要应用的平滑滤镜类型,必须是以下值之一:"blur"(模糊)、"blur_no_scale"(不缩放模糊)、"median"(中值滤波)、"gaussian"(高斯滤波)或"bilateral"(双边滤波)。默认值为"gaussian"(高斯)。
参数参数1, 参数2, 参数3和参数4的含义取决于平滑类型。参数1和参数2接受正整数值或0。参数3和参数4接受浮点值。
默认值参数1为3。其他参数的默认值为0。
这些参数对应于分配给libopencv函数的参数cvSmooth.
39.179 示波器
二维视频示波器。
用于测量空间脉冲、阶跃响应、色度延迟等。
它接受以下参数:
- x
设置示波器中心x位置。
- y
设置示波器中心y位置。
- s
设置示波器大小,相对于框架对角线。
- t
设置示波器倾斜/旋转。
- o
设置轨迹透明度。
- tx
设置轨迹中心x位置。
- ty
设置轨迹中心y位置。
- tw
设置轨迹宽度,相对于框架宽度。
- th
设置轨迹高度,相对于框架高度。
- c
设置跟踪哪些组件。默认跟踪前三个组件。
- g
绘制轨迹网格。默认启用。
- st
绘制一些统计信息。默认启用。
- sc
绘制示波器。默认启用。
39.179.1 命令
此过滤器支持相同的命令作为选项。 该命令接受与对应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.179.2 示例
- 检查视频帧的完整第一行。
oscilloscope=x=0.5:y=0:s=1
- 检查视频帧的完整最后一行。
oscilloscope=x=0.5:y=1:s=1
- 检查高度为1080的视频帧的完整第5行。
oscilloscope=x=0.5:y=5/1080:s=1
- 检查视频帧的完整最后一列。
oscilloscope=x=1:y=0.5:s=1:t=1
39.180 叠加
将一个视频叠加在另一个视频之上。
它接受两个输入并有一个输出。第一个输入是“主”视频,第二个输入叠加在其上。
它接受以下参数:
以下是接受选项的说明。
- x
- y
设置叠加视频在主视频上的x和y坐标表达式。默认值为两个表达式都是“0”。如果表达式无效,则设置为一个很大的值(意味着叠加不会显示在输出可见区域内)。
- eof_action
参见framesync.
- eval
设置表达式的x和y何时被计算。
它接受以下值:
- ‘init’
只在滤镜初始化或处理命令时计算表达式一次
- ‘frame’
针对每个传入帧计算表达式
默认值是'frame’.
- shortest
参见framesync.
- format
设置输出视频的格式。
它接受以下值:
- ‘yuv420’
强制使用 YUV 4:2:0 8位平面输出
- ‘yuv420p10’
强制使用 YUV 4:2:0 10位平面输出
- ‘yuv422’
强制使用 YUV 4:2:2 8位平面输出
- ‘yuv422p10’
强制使用 YUV 4:2:2 10位平面输出
- ‘yuv444’
强制使用 YUV 4:4:4 8位平面输出
- ‘yuv444p10’
强制使用 YUV 4:4:4 10位平面输出
- ‘rgb’
强制使用 RGB 8位打包输出
- ‘gbrp’
强制使用 RGB 8位平面输出
- ‘auto’
自动选择格式
默认值是'yuv420’.
- repeatlast
参见framesync.
- alpha
设置叠加视频透明度的格式,它可以是直行或预乘。默认是直行.
The x和y表达式可以包含以下参数。
- main_w, W
- main_h, H
主输入的宽度和高度。
- overlay_w, w
- overlay_h, h
叠加输入的宽度和高度。
- x
- y
计算出的x和y值。它们在每一新帧中被计算。
- hsub
- vsub
输出格式的水平和垂直色度子采样值。例如,对于像素格式“yuv422p”hsub是2,vsub是1。
- n
输入帧的编号,从0开始
- pos
输入帧在文件中的位置,未知时为NAN;已弃用,请勿使用
- t
时间戳,以秒为单位表示。如果输入时间戳未知,则为NAN。
该过滤器还支持framesync选项。
注意,n, t变量只有在per frame时可用,并在eval设置为'init’.
请注意,帧是根据时间戳顺序从每个输入视频中获取的,因此,如果它们的初始时间戳不同,最好通过setpts=PTS-STARTPTS过滤器使它们从相同的零时间戳开始,如movie过滤器示例中所示。
您可以串联更多的叠加,但应测试这种方法的效率。
39.180.1 命令
此过滤器支持以下命令:
- x
- y
修改叠加输入的x和y。该命令接受与对应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.180.2 示例
- 将叠加绘制在主视频右下角偏离10像素的位置:
overlay=main_w-overlay_w-10:main_h-overlay_h-10
使用命名选项,上述示例变为:
overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
- 在输入的左下角插入一个透明的PNG标志,使用
ffmpeg工具和-filter_complex选项:ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
- 使用
ffmpeg工具插入两个不同的透明PNG标志(第二标志在右下角):ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
- 在主视频顶部添加一个透明色层;
WxH必须为叠加滤镜指定主输入的大小:color=color=red@.3:size=WxH [over]; [in][over] overlay [out]
- 使用
ffplay工具将原始视频和过滤后的版本(此处使用防抖滤镜)并排播放:ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
上面的命令等同于:
ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
- 制作从屏幕左上角到右上角滑动出现的叠加,时间从2秒开始:
overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
- 通过将两个输入视频并排放置来构成输出:
ffmpeg -i left.avi -i right.avi -filter_complex " nullsrc=size=200x100 [background]; [0:v] setpts=PTS-STARTPTS, scale=100x100 [left]; [1:v] setpts=PTS-STARTPTS, scale=100x100 [right]; [background][left] overlay=shortest=1 [background+left]; [background+left][right] overlay=shortest=1:x=100 [left+right] "
- 在视频的10-20秒之间通过对一部分应用去标志过滤器进行遮盖
ffmpeg -i test.avi -codec:v:0 wmv2 -ar 11025 -b:v 9000k -vf '[in]split[split_main][split_delogo];[split_delogo]trim=start=360:end=371,delogo=0:0:640:480[delogoed];[split_main][delogoed]overlay=eof_action=pass[out]' masked.avi
- 级联链式连接几个叠加:
nullsrc=s=200x200 [bg]; testsrc=s=100x100, split=4 [in0][in1][in2][in3]; [in0] lutrgb=r=0, [bg] overlay=0:0 [mid0]; [in1] lutrgb=g=0, [mid0] overlay=100:0 [mid1]; [in2] lutrgb=b=0, [mid1] overlay=0:100 [mid2]; [in3] null, [mid2] overlay=100:100 [out0]
39.181 owdenoise
应用过完备小波去噪器。
该滤镜接受以下选项:
- depth
设置深度。
更大的深度值将对低频分量进行更多的去噪,但会降低过滤速度。
必须是范围8-16的整数,默认值为
8.- luma_strength, ls
设置亮度强度。
必须是范围0-1000的双精度值,默认值为
1.0.- chroma_strength, cs
设置色度强度。
必须是范围0-1000的双精度值,默认值为
1.0.
39.182 pad
为输入图片添加填充,并将原始输入置于指定的x, y坐标处。
它接受以下参数:
- width, w
- height, h
指定带有填充的输出图片大小的表达式。如果宽度或高度的值为0,则使用输入对应的大小作为输出。
该宽度表达式可以引用由高度表达式设置的值,反之亦然。
默认值为宽度和高度为0。
- x
- y
指定在填充区域内放置输入图片的偏移量,以输出图片的顶部/左侧边界为参照。
该x表达式可以引用由y表达式设置的值,反之亦然。
默认值为x和y为0。
如果x或y的计算结果为负数,它们将被修改为使输入图片居中于填充区域。
- color
指定填充区域的颜色。此选项的语法,请参考ffmpeg-utils手册中的“颜色”部分.
默认值为颜色为“黑色”。
- eval
指定何时评估宽度, 高度, x和y表达式。
它接受以下值:
- ‘init’
仅在滤镜初始化或命令处理时评估表达式一次。
- ‘frame’
对每一帧输入进行评估。
默认值为‘init’.
- aspect
填充到比例而不是分辨率。
该选项中的宽度, 高度, x和y表达式是包含以下常量的表达式:
- in_w
- in_h
输入视频的宽度和高度。
- iw
- ih
与in_w和in_h.
- out_w
- out_h
输出宽度和高度(填充区域的大小),由宽度和高度表达式指定。
- ow
- oh
与out_w和out_h.
- x
- y
由x和y表达式指定的x和y偏移量,或者如果尚未指定则为NAN。
- a
与iw / ih
- sar
输入样本的纵横比
- dar
输入显示纵横比,与(iw / ih) * sar
- hsub
- vsub
水平和垂直色度子采样值。例如,对于像素格式"yuv422p"hsub是2,并且vsub是1。
39.182.1 示例
- 为输入视频添加颜色为“紫罗兰”的填充。输出视频的尺寸为640x480,输入视频的左上角位于列0、行40。
pad=640:480:0:40:violet
上述示例等同于以下命令:
pad=width=640:height=480:x=0:y=40:color=violet
- 为输入视频添加填充以使输出尺寸增加到原来的3/2,并将输入视频放在填充区域的中心:
pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2"
- 为输入视频添加填充以得到一个尺寸等于输入宽度和高度最大值的正方形输出,并将输入视频放在填充区域的中心:
pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2"
- 为输入视频添加填充以获得16:9的输出宽高比:
pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
- 在处理宽高比异常的视频时,为了正确设置输出的显示宽高比,必须使用sar在表达式中,根据以下关系:
(ih * X / ih) * sar = output_dar X = output_dar / sar
因此需要将之前的示例修改为:
pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
- 将输出尺寸加倍并将输入视频放在输出填充区域的右下角:
pad="2*iw:2*ih:ow-iw:oh-ih"
39.183 palettegen
为整个视频流生成一个调色板。
它接受以下选项:
- max_colors
设置调色板中要量化的最大颜色数。 注意:调色板仍然会包含256种颜色;未使用的调色板条目将为黑色。
- reserve_transparent
创建最多255种颜色的调色板,并将最后一种颜色保留为透明色。 保留透明颜色对于GIF优化有用。如果未设置,调色板中的最大颜色数将为256。 对于独立图像,您可能希望禁用此选项。 默认启用。
- transparency_color
设置用于透明背景的颜色。
- stats_mode
设置统计模式。
它接受以下值:
- ‘full’
计算全帧直方图。
- ‘diff’
仅计算与前一帧不同的部分的直方图。 如果背景是静态的,这可能与输入的移动部分更相关。
- ‘single’
为每帧计算新的直方图。
默认值是full.
此滤镜还导出帧元数据lavfi.color_quant_ratio
(nb_color_in / nb_color_out),您可以使用它来评估调色板的颜色量化程度。
此信息也可见于info日志级别。
39.183.1 示例
- 使用如下方法生成给定视频的代表性调色板
ffmpeg:ffmpeg -i input.mkv -vf palettegen palette.png
39.184 paletteuse
使用调色板对输入视频流进行降采样。
此滤镜需要两个输入:一个视频流和一个调色板。调色板必须是一个256像素的图像。
它接受以下选项:
- dither
选择抖动模式。可用算法包括:
- ‘bayer’
有序8x8 Bayer抖动(确定性)
- ‘heckbert’
按照Paul Heckbert在1982年定义的抖动(简单误差扩散)。 注意:这种抖动有时被认为是“不正确的”,它作为参考而被包含。
- ‘floyd_steinberg’
Floyd和Steingberg抖动(误差扩散)
- ‘sierra2’
Frankie Sierra抖动版本2(误差扩散)
- ‘sierra2_4a’
Frankie Sierra抖动版本2“简化版”(误差扩散)
- ‘sierra3’
Frankie Sierra抖动版本3(误差扩散)
- ‘burkes’
Burkes抖动(误差扩散)
- ‘atkinson’
由Apple Computer的Bill Atkinson实施的Atkinson抖动(误差扩散)
- ‘none’
禁用抖动。
默认值是sierra2_4a.
- bayer_scale
当bayer抖动被选择时,此选项定义模式的缩放(十字阴影图案的可见程度)。 较低值意味着图案更明显且带宽更少;较高值意味着图案不太明显,但代价是更多的带宽。
选项值必须是[0,5]范围内的整数。默认值是2.
- diff_mode
如果设置,定义处理区域
- ‘rectangle’
只有变动的矩形部分将被重新处理。这类似于GIF裁剪/偏移压缩机制。 如果仅图像的一部分发生变化,此选项可以提高速度,并在某些用例中限制错误扩散作用域。dither到绑定运动场景的矩形(如果场景变化不多,会产生更确定的输出,从而减少运动噪音并提高GIF压缩效率)。
默认值是none.
- new
为每个输出帧获取新的调色板。
- alpha_threshold
设置透明度的alpha阈值。高于此阈值的alpha值将被视为完全不透明,低于此阈值的alpha值将被视为完全透明。
选项值必须是[0,255]范围内的整数。默认值是128.
39.184.1 示例
- 使用调色板(例如通过palettegen生成的)编码GIF
ffmpeg:ffmpeg -i input.mkv -i palette.png -lavfi paletteuse output.gif
39.185 perspective
校正视频中不是垂直于屏幕录制的透视。
接受参数的描述如下。
- x0
- y0
- x1
- y1
- x2
- y2
- x3
- y3
设置左上角、右上角、左下角和右下角的坐标表达式。 默认值是
0:0:W:0:0:H:W:H透视保持不变。 如果sense选项设置为source,则指定的点将发送到目标的角落。 如果sense选项设置为destination,则将来源的角落发到指定坐标。表达式可以使用以下变量:
- W
- H
视频帧的宽度和高度。
- in
输入帧计数。
- on
输出帧计数。
- interpolation
设置透视校正的插值。
它接受以下值:
- ‘linear’
- ‘cubic’
默认值是‘linear’.
- sense
设置坐标选项的解释方式。
它接受以下值:
- ‘0, source’
-
将源指定坐标点发送到目标的角落。
- ‘1, destination’
-
将源角点发送到目标指定的坐标点。
默认值是‘source’.
- eval
设置什么时候评估坐标表达式x0,y0,...x3,y3。
它接受以下值:
- ‘init’
滤镜初始化期间或处理命令时,仅评估一次表达式
- ‘frame’
对每个输入帧评估表达式
默认值是‘init’.
39.186 phase
将隔行视频延迟一个场时间以改变场顺序。
预期用途是修复PAL电影,它们捕获的场顺序与电影传输到视频的顺序相反。
接受参数的说明如下。
- mode
设置相位模式。
它接受以下值:
- ‘t’
捕获场顺序为顶部优先,传输为底部优先。 滤镜将延迟底部场。
- ‘b’
捕获场顺序为底部优先,传输为顶部优先。 滤镜将延迟顶部场。
- ‘p’
用相同的场顺序捕获和传输。此模式仅用于文档中的其他选项进行引用,但如果实际选择此模式,滤镜将忠实地不做任何操作。
- ‘a’
通过场标志自动确定捕获场顺序,传输相反。 滤镜在‘t’ 和 ‘b’ 模式之间逐帧选择,使用场标志。如果没有可用的场信息,则此模式的效果与‘u’.
- ‘u’
捕获未知或变化,传输相反。 滤镜在‘t’ 和 ‘b’ 模式之间逐帧通过图像分析选择,以产生与场之间最佳匹配的替代方案。
- ‘T’
捕获顶场优先,传输未知或变化。 滤镜在‘t’ 和 ‘p’ 之间通过图像分析选择。
- ‘B’
捕获底场优先,传输未知或变化。 滤镜在‘b’ 和 ‘p’ 之间通过图像分析选择。
- ‘A’
通过场标志确定捕获,传输未知或变化。 滤镜在‘t’, ‘b’ 和 ‘p’ 之间通过场标志和图像分析选择。如果没有可用的场信息,则此模式效果与‘U’ 一样。这是默认模式。
- ‘U’
捕获和传输均为未知或变化。 滤镜仅使用图像分析在‘t’, ‘b’ 和 ‘p’ 之间选择。
39.186.1 命令
此滤镜支持上述所有选项作为命令。.
39.187 光敏性
减少视频中的各种闪烁,以帮助患有癫痫的用户。
它接受以下选项:
- frames, f
设置滤波时使用的帧数。默认值为30。
- threshold, t
设置检测阈值系数。默认值为1。 值越低越严格。
- skip
设置采样帧时跳过的像素数。默认值为1。 允许范围为1到1024。
- bypass
保持帧不变。默认禁用。
39.188 pixdesctest
像素格式描述符测试滤镜,主要用于内部测试。输出视频应该等于输入视频。
例如:
format=monow, pixdesctest
可以用来测试 monowhite 像素格式描述符的定义。
39.189 pixelize
对视频流应用像素化效果。
滤镜接受以下选项:
- width, w
- height, h
设置将用于像素化的块尺寸。 默认值是
16.- mode, m
设置使用的像素化模式。
可能的值有:
- ‘avg’
- ‘min’
- ‘max’
默认值是
avg.- planes, p
设置要滤镜处理的平面。默认处理所有平面。
39.189.1 命令
此滤镜支持所有选项作为命令。.
39.190 pixscope
显示颜色通道的样本值。主要用于检查颜色和级别。最低支持分辨率为640x480。
滤镜接受以下选项:
- x
设置示波器的X位置,即在X轴上的相对偏移。
- y
设置示波器的Y位置,即在Y轴上的相对偏移。
- w
设置示波器宽度。
- h
设置示波器高度。
- o
设置窗口的不透明度。此窗口还包含有关像素区域的统计信息。
- wx
设置窗口X位置,即在X轴上的相对偏移。
- wy
设置窗口Y位置,即在Y轴上的相对偏移。
39.190.1 命令
此滤镜支持与选项相同的命令。作为选项。
39.191 pp7
应用后处理滤镜7。这是spp滤镜的变体,类似于 spp=6 的变体,使用7点DCT,且仅在IDCT之后使用中心样本。
滤镜接受以下选项:
- qp
强制使用恒定量化参数。接受范围为0到63的整数。如果未设置,滤镜将使用视频流中的QP(如果可用)。
- mode
设置阈值模式。可用的模式有:
- ‘hard’
设置硬阈值。
- ‘soft’
设置软阈值(更好的去振铃效果,但可能更模糊)。
- ‘medium’
设置中等阈值(效果良好,默认值)。
39.192 premultiply
对输入视频流应用alpha预乘效果,使用第二个流的首个平面作为alpha。
两个流必须具有相同的维度和像素格式。
滤镜接受以下选项:
- planes
设置将被处理的平面,未处理的平面将被复制。 默认值是0xf,即所有平面将被处理。
- inplace
不需要第二个输入来处理,而是使用来自输入流的alpha平面。
39.193 prewitt
对输入视频流应用Prewitt算子。
滤镜接受以下选项:
- planes
设置将被处理的平面,未处理的平面将被复制。 默认值是0xf,即所有平面将被处理。
- scale
设置将与滤波结果相乘的值。
- delta
设置将添加到滤波结果的值。
39.193.1 命令
此滤镜支持上述所有选项作为命令。.
39.194 pseudocolor
通过伪色彩更改视频中的帧颜色。
滤镜接受以下选项:
- c0
设置像素的首个组件表达式
- c1
设置像素的第二个组件表达式
- c2
设置像素的第三个组件表达式
- c3
设置像素的第四个组件表达式,对应于alpha组件。
- index, i
设置用于更改颜色的基础组件。
- preset, p
选择一个内置的查找表(LUT)。默认设置为无。
可用的查找表有:
- ‘magma’
- ‘inferno’
- ‘plasma’
- ‘viridis’
- ‘turbo’
- ‘cividis’
- ‘range1’
- ‘range2’
- ‘shadows’
- ‘highlights’
- ‘solar’
- ‘nominal’
- ‘preferred’
- ‘total’
- ‘spectral’
- ‘cool’
- ‘heat’
- ‘fiery’
- ‘blues’
- ‘green’
- ‘helix’
- opacity
设置输出颜色的不透明度。允许范围是0到1。 默认值是1。
每个表达式选项指定用于计算对应像素组件值的查找表的表达式。
表达式可以包含以下常量和函数:
- w
- h
输入的宽度和高度。
- val
像素组件的输入值。
- ymin, umin, vmin, amin
组件值的最小允许值。
- ymax, umax, vmax, amax
最大允许的组件值。
所有表达式默认为 "val"。
39.194.1 命令
该过滤器支持上述所有选项,如命令.
39.194.2 示例
- 将过高的亮度值更改为渐变:
pseudocolor="'if(between(val,ymax,amax),lerp(ymin,ymax,(val-ymax)/(amax-ymax)),-1):if(between(val,ymax,amax),lerp(umax,umin,(val-ymax)/(amax-ymax)),-1):if(between(val,ymax,amax),lerp(vmin,vmax,(val-ymax)/(amax-ymax)),-1):-1'"
39.195 psnr
获取两个输入视频之间的平均、最大和最小 PSNR(峰值信噪比)。
此过滤器接收两个输入视频,第一个输入被视为“主”源并未更改地传递到输出。第二个输入用作“参考”视频,用于计算 PSNR。
要使此过滤器正常工作,两个视频输入必须具有相同的分辨率和像素格式。此外,假设两个输入具有相同数量的帧,它们将一对一地进行比较。
通过日志系统打印出获得的平均 PSNR。
过滤器存储每帧的累计均方误差 (MSE),在处理结束时,将其在所有帧中平均,并应用以下公式获得 PSNR:
PSNR = 10*log10(MAX^2/MSE)
其中 MAX 是每个图像组件最大值的平均值。
以下是可接受的参数的说明。
- stats_file, f
如果指定,过滤器将使用命名文件保存每个单独帧的 PSNR。当文件名为 "-" 时,数据将发送到标准输出。
- stats_version
指定使用哪个版本的统计文件格式。每个格式的详细信息如下。 默认值为 1。
- stats_add_max
决定是否将最大值输出到统计日志。 默认值为 0。 需要 stats_version >= 2。如果设置此选项且 stats_version < 2,过滤器将返回错误。
此过滤器还支持framesync选项。
如果选择了stats_file打印出的文件,将包含一个键:值的序列
对于每对比较帧。stats_version大于 1,则在每对帧统计列表之前有一个标题行,标题行的键值对与每帧格式中描述的参数如下:
- psnr_log_version
日志文件格式的版本。将与stats_version.
- fields
在日志中列出的每帧对参数的逗号分隔列表。
下面是每帧对中显示的每个参数的描述:
- n
输入帧的序号,从 1 开始
- mse_avg
帧之间的逐像素平均差异的均方误差,所有图像组件的平均值。
- mse_y, mse_u, mse_v, mse_r, mse_g, mse_b, mse_a
帧之间的逐像素平均差异的均方误差,特指由后缀指定的组件。
- psnr_y, psnr_u, psnr_v, psnr_r, psnr_g, psnr_b, psnr_a
帧之间的峰值信噪比,特指由后缀指定的组件。
- max_avg, max_y, max_u, max_v
每个通道的最大允许值,以及所有通道的平均值。
39.195.1 示例
- 例如:
movie=ref_movie.mpg, setpts=PTS-STARTPTS [main]; [main][ref] psnr="stats_file=stats.log" [out]
在此示例中,正在处理的输入文件与参考文件进行对比ref_movie.mpg。每帧 PSNR 存储在stats.log.
- 另一种具有不同容器的示例:
ffmpeg -i main.mpg -i ref.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]psnr" -f null -
39.196 pullup
下拉逆转(逆向电影传送)过滤器,能够处理混合硬电影传送、24000/1001 fps 逐行扫描和 30000/1001 fps 逐行扫描内容。
pullup 过滤器设计为在做决定时利用未来上下文。该过滤器是无状态的,因为它不会锁定到某个模式,而是通过查看后续的字段以识别匹配并重建逐行扫描帧。
为了生成具有一致帧率的内容,在 pullup 过滤器后插入 fps 过滤器,如果输入帧率是 29.97fps,则使用fps=24000/1001,如果是 30fps 或(罕见的)电影传送 25fps 输入,则使用fps=24。
此过滤器接受以下选项:
- jl
- jr
- jt
- jb
这些选项设置忽略图像左右上下的“垃圾”量。左右以 8 像素为单位,上下以 2 行为单位。 默认值为每侧 8 像素。
- sb
设置严格中断。将此选项设置为 1 将减少过滤器在高运动场景中生成错误匹配帧的可能性,但也可能导致较高运动场景中丢弃过多的帧。 相反,将其设置为 -1 将使过滤器更容易匹配字段。 这可能有助于处理字段之间略有模糊的视频,但也可能导致输出中有交错的帧。 默认值为
0.- mp
设置使用的度量平面。它接受以下值:
- ‘l’
使用亮度平面。
- ‘u’
使用蓝色色度平面。
- ‘v’
使用红色色度平面。
可以设置此选项以使用色度平面,而不是默认的亮度平面来进行过滤器的计算。这可能会在非常清晰的源材料上提高精度,但更有可能降低精度,特别是当有色度噪声(彩虹效应)或灰度视频时。 设置mp为色度平面的主要目的是减少 CPU 负载,使 pullup 在慢速机器上可实时使用。
为了获得最佳结果(输出文件中无重复帧),需要更改输出帧率。例如,逆向处理 NTSC 输入:
ffmpeg -i input -vf pullup -r 24000/1001 ...
39.197 qp
更改视频量化参数 (QP)。
此过滤器接受以下选项:
- qp
为量化参数设置表达式。
表达式通过 eval API 评估,并可以包含以下常数:
- 已知
索引如果不是 129 则为 1,否则为 0。
- qp
从 -129 到 128 的顺序索引。
39.197.1 示例
- 一些方程如:
qp=2+2*sin(PI*qp)
39.198 qrencode
使用 libqrencode 库生成二维码(参见https://fukuchi.org/works/qrencode/),并将其覆盖到当前帧之上。
要启用此过滤器的编译,您需要用--enable-libqrencode.
来配置 FFmpeg。
二维码是根据提供的文本或文本模式生成的。生成的二维码按指定的选项缩放并覆盖到视频输出上。
如果未指定文本,则不会覆盖二维码。
- qrcode_width, q
- padded_qrcode_width, Q
为渲染二维码(有或无填充)的宽度指定表达式。qrcode_width表达式可以引用padded_qrcode_width表达式所设置的值,反之亦然。 默认情况下,padded_qrcode_width设置为qrcode_width,这意味着没有填充。
这些表达式将在每个新帧时进行评估。
详见qrencode 表达式部分。
- x
- y
为填充二维码左上角的位置指定表达式。x表达式可以引用y表达式所设置的值,反之亦然。
默认情况下,x和是设置为0,这意味着二维码被放置在输入的左上角。
这些表达式会为每一帧新画面进行评估。
请参阅二维码编码表达式部分了解详情。
- case_sensitive, cs
指示 libqrencode 使用区分大小写的编码,这是默认启用的。可以禁用此功能以减少二维码编码的大小。
- level, l
指定二维码编码错误纠正级别。错误纠正级别越高,编码大小会增加,但代码在受损时的鲁棒性也会增强。较低的级别是L.
接受以下值:
- ‘L’
- ‘M’
- ‘Q’
- ‘H’
- expansion
选择如何扩展输入文本。可以是
none,或者normal(默认)。请参阅二维码编码文本扩展部分了解详情。- text
- textfile
定义要渲染的文本。如果未指定任何内容,仅渲染一个空的彩色框。
如果启用了扩展,则将文本视为文本模板,使用二维码编码扩展机制。请参阅二维码编码文本扩展部分了解详情。
- background_color, bc
- foreground_color, fc
设置二维码和背景颜色。默认值foreground_color为“黑色”,默认值background_color为“白色”。
有关颜色选项的语法,请查看(ffmpeg-utils)ffmpeg-utils 手册中的“颜色”部分.
39.198.1 二维码编码表达式
选项设置的表达式包含以下常量和函数。
- dar
输入显示长宽比,与以下计算相同 (宽度 / 高度) * sar
- duration
当前帧的时长,以秒为单位
- hsub
- vsub
水平和垂直的色度抽样值。例如对于像素格式 "yuv422p"hsub为 2, 而vsub为 1。
- main_h, H
输入高度
- main_w, W
输入宽度
- n
输入帧的编号,从 0 开始
- pict_type
表示画面类型的数字
- qr_w, w
编码后的二维码宽度
- rendered_qr_w, q
- rendered_padded_qr_w, Q
渲染出的二维码宽度,包括及不包括填充。
这些参数允许q和Q表达式相互引用,因此例如可以指定
q=3/4*Q.- rand(min, max)
返回介于最小值和最大值
- sar
输入样本长宽比
- t
时间戳以秒为单位表示,当输入时间戳未知时为 NAN
- x
- y
文本绘制的位置的 x 和 y 偏移坐标。
这些参数允许x和y表达式相互引用,因此例如可以指定
y=x/dar.
39.198.2 二维码编码文本扩展
如果expansion设置为none,则文本直接打印。
如果expansion设置为normal(默认值),则使用以下扩展机制。
反斜杠字符“\”,后跟任何字符,总是扩展为第二个字符。
格式为%{...}的序列会进行扩展。括号内的文本是函数名称,可能后面跟有用“:”分隔的参数。如果参数包含特殊字符或分隔符(“:”或“}”),则应该进行转义。
注意,它们可能还必须作为text选项的值在滤镜参数字符串和滤镜参数的滤镜图描述中进行转义,可能还需针对 shell 转义,总共最多四级转义;使用包含textfile选项的文本文件可以避免这些问题。
可用以下函数:
n, frame_num返回帧编号
pts返回当前帧的演示时间戳。
它最多可以接收两个参数。
第一个参数是时间戳的格式;默认为
flt秒,精确到微秒的十进制数;hms表示格式为[-]HH:MM:SS.mmm的时间戳,精确到毫秒。gmtime表示格式为 UTC 时间的时间戳;localtime表示格式为当地时区时间的时间戳。如果格式设置为hms24hh,时间以 24 小时制(00-23)格式呈现。第二个参数是添加到时间戳的偏移量。
如果格式设置为
localtime或gmtime,则可以提供第三个参数:strftimeC 函数格式字符串。默认使用YYYY-MM-DD HH:MM:SS格式。expr, e计算表达式的值并以双精度数输出。
它必须接收一个参数,指定要计算的表达式,接受定义在二维码编码表达式.
expr_formatted, ef计算表达式的值并以格式化字符串输出。
第一个参数是要计算的表达式,与表达式函数。 第二个参数指定输出格式。允许的值是'x’, ‘X’, ‘d’和‘u’。它们的处理方式与
printf函数完全相同。 第三个参数是可选的,用于设置输出所占的位数。 可以用来从左边填充零。gmtime过滤器运行的时间,以UTC表示。 它可以接受一个参数:一个
strftimeC函数格式字符串。 该格式字符串被扩展以支持变量%[1-6]N,该变量以可选的指定的位数打印秒的小数部分。localtime过滤器运行的时间,以本地时区表示。 它可以接受一个参数:一个
strftimeC函数格式字符串。 该格式字符串被扩展以支持变量%[1-6]N,该变量以可选的指定的位数打印秒的小数部分。metadata帧元数据。接受一个或两个参数。
第一个参数是必需的,指定元数据键。
第二个参数是可选的,指定默认值,当元数据键未找到或为空时使用。
可用的元数据可以通过检查每个帧部分中以TAG开头的条目来识别,这些条目可以通过运行
ffprobe -show_frames.生成的过滤器中的字符串元数据也可用。
rand(min, max)返回一个介于最小值和最大值之间的随机数。
39.198.3 示例
- 生成一个QR码,编码指定文本,使用默认大小,覆盖在输入视频的左上角,默认大小:
qrencode=text=www.ffmpeg.org
- 与上方相同,但选择蓝色和粉色颜色:
qrencode=text=www.ffmpeg.org:bc=pink@0.5:fc=blue
- 将QR码放置在输入视频的右下角:
qrencode=text=www.ffmpeg.org:x=W-Q:y=H-Q
- 生成一个宽度为200像素并带有填充的QR码,使填充宽度为QR码宽度的4/3:
qrencode=text=www.ffmpeg.org:q=200:Q=4/3*q
- 生成一个填充宽度为200像素并带有填充的QR码,使QR码宽度为填充宽度的3/4:
qrencode=text=www.ffmpeg.org:Q=200:q=3/4*Q
- 使QR码的宽度成为输入视频宽度的一部分:
qrencode=text=www.ffmpeg.org:q=W/5
- 生成一个编码帧号的QR码:
qrencode=text=%{n} - 生成一个编码GMT时间戳的QR码:
qrencode=text=%{gmtime} - 生成一个编码为浮点数表示的时间戳的QR码:
qrencode=text=%{pts}
39.199 quirc
使用libquirc库(参见https://github.com/dlbeer/quirc/)识别并解码一个QR码,并将识别的QR码位置和有效负载作为元数据打印。
要启用此过滤器的编译,需要用以下配置FFmpeg:--enable-libquirc.
对于输入视频中找到的每个QR码,会添加一些以lavfi.quirc.N为前缀的元数据项,其中N是与QR码相关联的索引,从0开始。
以下是每个元数据值的描述:
- lavfi.quirc.count
找到QR码的数量,如果没有找到则不会设置。
- lavfi.quirc.N.corner.M.x
- lavfi.quirc.N.coreer.M.y
QR码所在方形四角的x/y位置,其中M是从0开始的角的索引。
- lavfi.quirc.N.payload
QR码的有效负载。
39.200 random
从内部帧缓存中以随机顺序刷新视频帧。 没有帧会被丢弃。 灵感来自frei0rnervous过滤器。
- frames
设置内部缓存的帧数范围,从
2到512。默认值是30.- seed
为随机数生成器设置种子,必须是介于
0和UINT32_MAX之间的整数。如果未指定或显式设置为小于0的值,过滤器将尝试使用一个尽可能好的随机种子。
39.201 readeia608
从视频帧的顶行读取关闭字幕(EIA-608)信息。
此过滤器会为lavfi.readeia608.X.cc和lavfi.readeia608.X.line添加帧元数据,其中X是具有EIA-608数据的已识别行的编号(从0开始)。以下是每个元数据值的描述:
- lavfi.readeia608.X.cc
以EIA-608格式存储的两个字节(以十六进制打印)。
- lavfi.readeia608.X.line
EIA-608数据被识别和读取的行号。
此过滤器接受以下选项:
- scan_min
设置开始扫描EIA-608数据的行号。默认值是
0.- scan_max
设置结束扫描EIA-608数据的行号。默认值是
29.- spw
设置为同步码检测保留的宽度比例。 默认值是
0.27。允许的范围是[0.1 - 0.7].- chp
启用校验奇偶校验位。如果发生奇偶校验错误,过滤器将为该字符输出
0x00。默认值为false。- lp
在进一步处理之前对行进行低通滤波。默认启用。
39.201.1 命令
此过滤器支持所有上述选项作为命令.
39.201.2 示例
- 输出一个包含展示时间和识别的EIA-608字幕数据的前两行的CSV。
ffprobe -f lavfi -i movie=captioned_video.mov,readeia608 -show_entries frame=pts_time:frame_tags=lavfi.readeia608.0.cc,lavfi.readeia608.1.cc -of csv
39.202 readvitc
从视频帧的顶行读取垂直间隔时间码(VITC)信息。
如果检测到有效时间码,此过滤器会添加帧元数据键lavfi.readvitc.tc_str并设置时间码值。此外,元数据键lavfi.readvitc.found将根据是否找到时间码数据设置为0或1。
此过滤器接受以下选项:
- scan_max
设置扫描VITC数据的最大行数。如果值设置为
-1则会扫描整个视频帧。默认值为45.- thr_b
设置黑色的亮度阈值。接受范围为[0.0,1.0]的浮点数,默认值为
0.2。该值必须小于或等于thr_w.- thr_w
设置白色的亮度阈值。接受范围为[0.0,1.0]的浮点数,默认值为
0.6。该值必须大于或等于thr_b.
39.202.1 示例
- 检测并在视频帧上绘制VITC数据;如果未检测到有效的VITC,则绘制
--:--:--:--作为占位符:ffmpeg -i input.avi -filter:v 'readvitc,drawtext=fontfile=FreeMono.ttf:text=%{metadata\\:lavfi.readvitc.tc_str\\:--\\\\\\:--\\\\\\:--\\\\\\:--}:x=(w-tw)/2:y=400-ascent'
39.203 remap
使用第二个输入视频流(Xmap)和第三个输入视频流(Ymap)重新映射像素。
目标像素在位置(X, Y)选取源位置(x, y)的像素,其中x = Xmap(X, Y),y = Ymap(X, Y)。如果映射值超出范围,则目标像素将使用零值。
Xmap和Ymap输入视频流必须具备相同的分辨率。输出视频流将具有Xmap/Ymap输入视频流的分辨率。 Xmap和Ymap输入视频流应为16位深度单通道。
- format
指定此过滤器输出的像素格式。可以是
color或者gray。 默认值是color.- fill
指定未映射像素的颜色。关于此选项的语法,请查看(ffmpeg-utils)"颜色"部分在ffmpeg-utils手册中的说明。默认颜色是
black.
39.204 removegrain
removegrain滤镜是一种用于逐行视频的空间降噪器。
- m0
设置第一个平面的模式。
- m1
设置第二个平面的模式。
- m2
设置第三个平面的模式。
- m3
设置第四个平面的模式。
模式的范围是0到24。以下是每种模式的描述:
- 0
保持输入平面不变。默认。
- 1
剪切像素到其8个邻居像素的最小值和最大值。
- 2
剪切像素到其8个邻居像素的第二最小值和最大值。
- 3
剪切像素到其8个邻居像素的第三最小值和最大值。
- 4
剪切像素到其8个邻居像素的第四最小值和最大值。 等同于中值滤镜。
- 5
线敏感剪切,给出最小变化。
- 6
线敏感剪切,中间值。
- 7
线敏感剪切,中间值。
- 8
线敏感剪切,中间值。
- 9
在线中剪切,其中邻居像素距离最近。
- 10
将目标像素替换为最近的邻居像素。
- 11
使用[1 2 1]水平和垂直内核模糊。
- 12
与模式11相同。
- 13
Bob模式,从邻居像素距离最近的行插值出顶部场。
- 14
Bob模式,从邻居像素距离最近的行插值出底部场。
- 15
Bob模式,插值出顶部场。与13类似,但使用更复杂的插值公式。
- 16
Bob模式,插值出底部场。与14类似,但使用更复杂的插值公式。
- 17
剪切像素到分别是相对邻居像素对的最大值和最小值。
- 18
使用距离当前像素最小的相对邻居进行线敏感剪切。
- 19
将像素替换为其8个邻居的平均值。
- 20
算出9个像素的平均值(使用[1 1 1]水平和垂直模糊)。
- 21
使用相对邻居的平均值剪切像素。
- 22
与模式21类似,但更简单并且速度更快。
- 23
小边缘和光晕移除,但被认为无用。
- 24
与模式23类似。
39.205 removelogo
使用图像文件来确定哪些像素构成电视频道的台标,并抑制它。 通过用邻近像素填充构成台标的像素来工作。
此滤镜接受以下选项:
- filename, f
设置滤镜的位图文件,可以是任何libavformat支持的图像格式。 图像文件的宽度和高度必须与正在处理的视频流匹配。
提供的位图图像中值为零的像素不被视为台标的一部分,非零像素被视为台标的一部分。 如果您为台标使用白色(255)并为其他部分使用黑色(0),就不会有问题。 建议采用屏幕捕捉一个带有台标可见的黑色帧,然后使用阈值滤镜,接下来使用一次或两次侵蚀(erode)滤镜来制作滤镜位图。
如果需要,可以手动修复小斑点。记住,如果台标像素未被覆盖,滤镜质量会大大降低。 标记为台标的像素过多影响相对较小,但会增加覆盖图像所需的模糊量并破坏比必要更多的信息, 额外的像素会让处理较大的台标变慢。
39.206 repeatfields
此滤镜使用视频ES头中的repeat_field标志,并根据该值硬重复字段。
39.207 reverse
反转一个视频剪辑。
警告:此滤镜需要内存来缓存整个剪辑,因此建议进行裁剪。
39.207.1 示例
- 取剪辑的前5秒并反转它。
trim=end=5,reverse
39.208 rgbashift
水平和/或垂直平移红/绿/蓝/透明像素。
此滤镜接受以下选项:
- rh
设置红色水平平移的数量。
- rv
设置红色垂直平移的数量。
- gh
设置绿色水平平移的数量。
- gv
设置绿色垂直平移的数量。
- bh
设置蓝色水平平移的数量。
- bv
设置蓝色垂直平移的数量。
- ah
设置透明水平平移的数量。
- av
设置透明垂直平移的数量。
- edge
设置边缘模式,可以为涂抹(默认值),或者扭曲.
39.208.1 命令
此滤镜支持以上所有选项作为命令.
39.209 roberts
将罗伯茨交叉算子应用到输入视频流。
此滤镜接受以下选项:
- planes
设置将被处理的平面,未处理的平面将被复制。 默认值是0xf,所有平面都会被处理。
- scale
设置将与过滤结果相乘的值。
- delta
设置将添加到过滤结果的值。
39.209.1 命令
此滤镜支持以上所有选项作为命令.
39.210 rotate
按表达为弧度的任意角度旋转视频。
此滤镜接受以下选项:
以下是可选参数的描述。
- angle, a
设置一个表达式以顺时针旋转输入视频的角度,单位为弧度。 负值将导致逆时针旋转。默认值为"0"。
此表达式将在每帧上评估。
- out_w, ow
设置输出宽度表达式,默认值为"iw"。 此表达式在配置时仅评估一次。
- out_h, oh
设置输出高度表达式,默认值为"ih"。 此表达式在配置时仅评估一次。
- bilinear
如果设置为1,则启用双线性插值,值为0则禁用它。 默认值为1。
- fillcolor, c
设置用于填充旋转图像未覆盖的输出区域的颜色。 关于此选项的一般语法,请查看(ffmpeg-utils)"颜色"部分在ffmpeg-utils手册中的说明。 如果选择特殊值"无",则不打印背景(例如背景从未显示时很有用)。
默认值为"黑色"。
角度和输出大小的表达式可以包含以下常量和函数:
- n
输入帧的连续编号,从0开始。在过滤第一帧之前,它始终是NAN。
- t
输入帧的时间(秒),当滤镜配置时设置为0。在过滤第一帧之前,它始终是NAN。
- hsub
- vsub
水平和垂直色度子采样值。例如,对于像素格式"yuv422p"hsub是2,而vsub是1。
- in_w, iw
- in_h, ih
输入视频的宽度和高度
- out_w, ow
- out_h, oh
输出的宽度和高度,即指定的填充区域的大小宽度以及高度表达式
- rotw(a)
- roth(a)
完全包含输入视频所需的最小宽度/高度,旋转角度为一个弧度。
这些只有在计算out_w以及out_h表达式时才可用。
39.210.1 示例
- 顺时针将输入旋转 PI/6 弧度:
rotate=PI/6
- 逆时针将输入旋转 PI/6 弧度:
rotate=-PI/6
- 顺时针将输入旋转 45 度:
rotate=45*PI/180
- 应用一个以周期 T 的常量旋转,初始角度为 PI/3:
rotate=PI/3+2*PI*t/T
- 使输入视频以周期 T 秒和振幅 A 弧度的方式进行振荡旋转:
rotate=A*sin(2*PI/T*t)
- 旋转视频,输出大小将选择为使旋转的整个输入视频始终完全包含在输出内:
rotate='2*PI*t:ow=hypot(iw,ih):oh=ow'
- 旋转视频,减小输出大小以确保从不显示背景:
rotate=2*PI*t:ow='min(iw,ih)/sqrt(2)':oh=ow:c=none
39.210.2 命令
该滤镜支持以下命令:
- a, angle
设置角度表达式。 该命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持当前值。
39.211 sab
应用形状自适应模糊。
该滤镜接受以下选项:
- luma_radius, lr
设置亮度模糊滤镜强度,必须是范围 0.1-4.0 的值,默认值为 1.0。更大的值将导致更模糊的图像,并且处理速度更慢。
- luma_pre_filter_radius, lpfr
设置亮度预滤波半径,必须是范围 0.1-2.0 的值,默认值为 1.0。
- luma_strength, ls
设置亮度像素之间仍可被考虑的最大差值,必须是范围 0.1-100.0 的值,默认值为 1.0。
- chroma_radius, cr
设置色度模糊滤镜强度,必须是范围 -0.9-4.0 的值。更大的值将导致更模糊的图像,并且处理速度更慢。
- chroma_pre_filter_radius, cpfr
设置色度预滤波半径,必须是范围 -0.9-2.0 的值。
- chroma_strength, cs
设置色度像素之间仍可被考虑的最大差值,必须是范围 -0.9-100.0 的值。
每个色度选项的值,如果未明确指定,将设置为相应的亮度选项值。
39.212 scale
使用 libswscale 库缩放(调整大小)输入视频。
缩放滤镜强制输出显示长宽比与输入相同,改变输出样本长宽比。
如果输入图像格式与下个滤镜请求的格式不同,缩放滤镜将把输入转换为请求的格式。
39.212.1 选项
滤镜接受以下选项,支持 libswscale 缩放器的任何选项,以及framesync选项。
详细参见(ffmpeg-scaler)ffmpeg-scaler 手册完整缩放器选项列表。
- width, w
- height, h
设置输出视频尺寸表达式。默认值为输入尺寸。
如果宽度或w值为 0,输入宽度将用于输出。如果高度或h值为 0,输入高度将用于输出。
如果仅一个值为 -n 且 n >= 1,缩放滤镜将使用保持输入图像长宽比的值,依据其他指定尺寸计算。之后它将确保计算出的尺寸可被 n 整除,并酌情调整值。
如果两个值均为 -n 且 n >= 1,则其效果与前面所述的两个值均设置为 0 的情况相同。
参见下文接受常量列表,用于尺寸表达式。
- eval
指定何时评估宽度以及高度表达式。接受以下值:
- ‘init’
仅在滤镜初始化或处理命令时评估表达式一次。
- ‘frame’
为每个输入帧评估表达式。
默认值为“init’.
- interl
设置隔行模式。接受以下值:
- ‘1’
强制隔行意识缩放。
- ‘0’
不应用隔行缩放。
- ‘-1’
根据源帧是否标记为隔行选择隔行意识缩放。
默认值为“0’.
- flags
设置 libswscale 缩放标志。参见(ffmpeg-scaler)ffmpeg-scaler 手册完整值列表。如果未明确指定,滤镜应用默认标志。
- param0, param1
为需要它们的缩放算法设置 libswscale 输入参数。参见(ffmpeg-scaler)ffmpeg-scaler 手册完整文档。如果未明确指定,滤镜应用空参数。
- intent
设置在不同颜色空间之间转换时使用的 ICC 呈现意图。接受以下值:
- ‘perceptual’
使用视觉引导的音调和色域映射曲线。映射详情可能随时更改,不应作为稳定的参考。这一意图推荐用于图像/视频内容在典型观看设置中的最终显示。
- ‘relative_colorimetric’
使用颜色度最相近的色域内颜色的颜色度剪裁曲线静态剪裁超出色域的颜色。此意图执行白点和黑点适配。默认值为此意图,推荐在精确颜色再现至关重要时使用,即使以剪裁为代价。
- ‘absolute_colorimetric’
硬剪裁超出色域的颜色,不尝试白点或黑点再现。此意图会以 1:1 的方式再现色域内的颜色,假设输出显示适当校准时它们如同在参考显示上出现。
- ‘saturation’
执行饱和度映射 - 即,直接将输入色彩体积拉伸到输出色彩体积,以非线性方式尽可能保留原始信号外观。这一意图推荐用于信号内容评估,因为它不会导致任何剪裁。它大致类似于不执行任何颜色映射,虽然仍考虑到主显示基色以及编码 TRC 的任何差异。
- size, s
设置视频大小。有关此选项的语法,请参阅(ffmpeg-utils)ffmpeg-utils 手册中的 "视频大小" 部分.
- in_color_matrix
- out_color_matrix
设置输入/输出 YCbCr 颜色空间类型。
这允许覆盖自动检测到的值,同时允许强制使用特定值作为输出和编码器使用。
如果未指定,颜色空间类型取决于像素格式。
可能的值:
- ‘auto’
自动选择。
- ‘bt709’
符合国际电信联盟 (ITU) 推荐 BT.709 的格式。
- ‘fcc’
设置符合美国联邦通信委员会 (FCC) 2003 年第 47 标题 73.682 (a) 的颜色空间。
- ‘bt601’
- ‘bt470’
- ‘smpte170m’
设置符合以下标准的颜色空间:
- 国际电信联盟无线电通信部门 (ITU-R) 推荐 BT.601
- ITU-R Rec. BT.470-6 (1998) 系统 B、B1 和 G
- 电影和电视工程师协会 (SMPTE) ST 170:2004
- ‘smpte240m’
设置符合 SMPTE ST 240:1999 的颜色空间。
- ‘bt2020’
设置符合 ITU-R BT.2020 非恒定亮度系统的颜色空间。
- in_range
- out_range
设置输入/输出 YCbCr 样本范围。
这允许覆盖自动检测到的值,同时允许强制使用特定值作为输出和编码器使用。如果未指定,范围取决于像素格式。可能的值:
- ‘auto/unknown’
自动选择。
- ‘jpeg/full/pc’
设置完全范围(以 8 位亮度为例,范围 0-255)。
- ‘mpeg/limited/tv’
设置“MPEG”范围(以 8 位亮度为例,范围 16-235)。
- in_chroma_loc
- out_chroma_loc
设置输入/输出的色度样本位置。如果未指定,默认使用中心位置。可能的值:
- ‘auto, unknown’
- ‘left’
- ‘center’
- ‘topleft’
- ‘top’
- ‘bottomleft’
- ‘bottom’
- in_primaries
- out_primaries
设置输入/输出的RGB原色。
此选项允许覆盖自动检测的值,并可以强制使用指定的值用于输出和编码器。可能的值:
- ‘auto’
自动选择。这是默认值。
- ‘bt709’
- ‘bt470m’
- ‘bt470bg’
- ‘smpte170m’
- ‘smpte240m’
- ‘film’
- ‘bt2020’
- ‘smpte428’
- ‘smpte431’
- ‘smpte432’
- ‘jedec-p22’
- ‘ebu3213’
- in_transfer
- out_transfer
设置输入/输出的传输响应曲线 (TRC)。
此选项允许覆盖自动检测的值,并可以强制使用指定的值用于输出和编码器。可能的值:
- ‘auto’
自动选择。这是默认值。
- ‘bt709’
- ‘bt470m’
- ‘gamma22’
- ‘bt470bg’
- ‘gamma28’
- ‘smpte170m’
- ‘smpte240m’
- ‘linear’
- ‘iec61966-2-1’
- ‘srgb’
- ‘iec61966-2-4’
- ‘xvycc’
- ‘bt1361e’
- ‘bt2020-10’
- ‘bt2020-12’
- ‘smpte2084’
- ‘smpte428’
- ‘arib-std-b67’
- force_original_aspect_ratio
启用对输出视频宽度或高度进行调整,以保持原始纵横比。可能的值:
- ‘disable’
按指定比例缩放视频并禁用此功能。
- ‘decrease’
如果需要,输出视频尺寸会自动减小。
- ‘increase’
如果需要,输出视频尺寸会自动增大。
此选项的一种有用场景是,当您知道设备的最大分辨率时,可以使用此选项限制输出视频,同时保留纵横比。例如,设备A允许播放1280x720的分辨率,而视频为1920x800。使用此选项(设置为“减小”)并在命令行中指定1280x720,会使输出为1280x533。
请注意,这与指定w-1h不同,您仍需指定输出分辨率以让此选项生效。
- force_divisible_by
确保输出的宽度和高度同时能被指定的整数整除,当与force_original_aspect_ratio一起使用时。这类似于在
-n与w和h选项中使用。此选项遵循设定的值force_original_aspect_ratio,根据需要调整分辨率的增减。视频的纵横比可能会略微修改。
如果您需要视频在定义的分辨率范围内或超出范围,同时还需要编码器对宽度或高度可整除的限制,此选项非常实用。force_original_aspect_ratio此选项适用于
- reset_sar
启用此选项会使输出的SAR重置为1。此外,如果用户通过宽度或高度表达式请求按比例缩放,例如
w=-4:h=360或w=iw/2:h=-1-2force_original_aspect_ratio,或启用了
-2选项,则会考虑输入的DAR并对输出进行缩放以生成方形像素。默认值为假。w选项的值以及h和
- 表达式中包含以下常量:
- 输入宽度
输入高度
- iw
- ih
这些与in_w和in_h.
- 输出宽度
- 输出高度
经过缩放的宽度和高度
- ow
- oh
这些与out_w和out_h
- a
与iw / ih
- sar
输入样本纵横比
- dar
输入显示纵横比。通过计算得出
(iw / ih) * sar.- 水平和垂直的输入色度子采样值。例如对于像素格式 "yuv422p"
- vsub
horizontal and vertical input chroma subsample values. For example for the pixel format "yuv422p" 水平色度子采样值为2,垂直色度子采样值为1。
- 水平色度子采样值 (输出)
- 垂直色度子采样值 (输出)
水平和垂直的输出色度子采样值。例如对于像素格式 "yuv422p"水平为2,垂直为1。
- n
输入帧的编号(从0开始计数)。仅在
eval=frame.- 启用时可用。
输入帧的显示时间戳,以秒为单位。仅在
eval=frame.- 启用时可用。
帧在输入流中的位置(字节偏移量),如果该信息不可用或者没有意义(例如在生成的合成视频的情况下),返回NaN。仅在
eval=frame已弃用,请勿使用。- ref_w, rw
- ref_h, rh
- ref_a
- ref_dar, rdar
- ref_n
- ref_t
- ref_pos
与上述变量对应,但用于第二个参考输入。如果存在这些变量,过滤器将接受两个输入。
39.212.2 示例
- 将输入视频缩放到200x100大小
scale=w=200:h=100
这等价于:
scale=200:100
或者:
scale=200x100
- 为输出大小指定一个缩写:
scale=qcif
这也可以写成:
scale=size=qcif
- 将输入缩放至2倍大小:
scale=w=2*iw:h=2*ih
- 上述与以下内容相同:
scale=2*in_w:2*in_h
- 将输入缩放至2倍大小,并强制交错缩放:
scale=2*iw:2*ih:interl=1
- 将输入缩放至一半大小:
scale=w=iw/2:h=ih/2
- 增加宽度,并将高度设置为宽度的相同大小:
scale=3/2*iw:ow
- 寻求希腊式的和谐:
scale=iw:1/PHI*iw scale=ih*PHI:ih
- 增加高度,并将宽度设置为高度的3/2:
scale=w=3/2*oh:h=3/5*ih
- 增大尺寸,使尺寸成为色度子采样值的倍数:
scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
- 将宽度增加到最多500像素,保持与输入相同的宽高比:
scale=w='min(500\, iw*3/2):h=-1'
- 通过结合scale和setsar使像素呈正方形:
scale='trunc(ih*dar):ih',setsar=1/1
- 使用reset_sar使像素呈正方形,确保结果分辨率为偶数(某些编码器要求):
scale='-2:ih-mod(ih,2):reset_sar=1'
- 按目标精确缩放,同时将SAR重置为1:
scale='400:300:reset_sar=1'
- 缩放到适合在400x300内的偶数尺寸,保留输入SAR:
scale='400:300:force_original_aspect_ratio=decrease:force_divisible_by=2'
- 缩放以生成适合在400x300内的正方形像素且为偶数维度:
scale='400:300:force_original_aspect_ratio=decrease:force_divisible_by=2:reset_sar=1'
- 在叠加之前,将字幕流(sub)缩放至与主视频(main)的大小匹配。(使用“scale2ref”)
'[main]split[a][b]; [ref][a]scale=rw:rh[c]; [b][c]overlay'
- 将一个标志的高度缩放为视频高度的1/10,同时保留其显示的纵横比。
[logo-in][video-in]scale=w=oh*dar:h=rh/10[logo-out]
39.212.3 命令
该滤镜支持以下命令:
- width, w
- height, h
设置输出视频尺寸表达式。该命令接受与对应选项相同的语法。
如果指定的表达式无效,则保持当前值。
39.213 scale_vt
使用VTPixelTransferSession进行缩放和颜色参数转换。
该滤镜接受以下选项:
- w
- h
设置输出视频尺寸表达式。默认值为输入尺寸。
- color_matrix
设置输出色彩空间矩阵。
- color_primaries
设置输出颜色原色。
- color_transfer
设置输出传递特性。
39.214 scharr
对输入视频流应用scharr算子。
该滤镜接受以下选项:
- planes
设置将处理哪些平面,未处理的平面将被复制。默认值为0xf,所有平面都将被处理。
- scale
设置将乘以过滤结果的值。
- delta
设置将添加到过滤结果的值。
39.214.1 命令
该滤镜支持所有上述选项作为命令.
39.215 scroll
以恒定的速度水平和/或垂直滚动输入视频。
该滤镜接受以下选项:
- horizontal, h
设置水平滚动速度。默认值为0。允许范围从-1到1,负值会改变滚动方向。
- vertical, v
设置垂直滚动速度。默认值为0。允许范围从-1到1,负值会改变滚动方向。
- hpos
设置初始水平滚动位置。默认值为0。允许范围从0到1。
- vpos
设置初始垂直滚动位置。默认值为0。允许范围从0到1。
39.215.1 命令
该滤镜支持以下命令:
- horizontal, h
设置水平滚动速度。
- vertical, v
设置垂直滚动速度。
39.216 scdet
检测视频场景变化。
此滤镜为帧设置场景分数和两个帧之间的mafd元数据,并将帧传递给下一个滤镜,以便它们可以使用这些元数据检测场景变化或其他用途。
此外,当此滤镜通过以下方式检测到场景变化时,会记录消息并设置帧元数据。threshold.
lavfi.scd.mafd每帧的场景分值元数据键。
lavfi.scd.score每帧的场景变化分数元数据键,以检测场景变化。
lavfi.scd.time当前过滤帧的时间元数据键,用于检测场景变化。threshold.
该滤镜接受以下选项:
- threshold, t
设置场景变化检测阈值为最大变化百分比。推荐值在
[8.0, 14.0]范围内。范围为threshold is[0., 100.].默认值为
10..- sc_pass, s
设置是否将场景变化帧传递到下一个滤镜的标志。默认值为
0如果您只想获取场景变化帧的快照,可以启用它。
39.217 selectivecolor
调整青色、洋红、黄色和黑色(CMYK)的值到某些颜色范围(如“红色”、“黄色”、“绿色”、“青色”等)。调整范围由颜色的“纯度”(即饱和度)定义。
此滤镜类似于Adobe Photoshop中的选择性颜色工具。
该滤镜接受以下选项:
- correction_method
选择颜色校正方法。
可选值为:
- ‘absolute’
指定的调整直接应用(原像素分量值增加/减少相应值)。
- ‘relative’
指定的调整相对于原分量值进行调整。
默认值为
absolute.- reds
对红色像素(红色分量为最大值的像素)的调整
- yellows
对黄色像素(蓝色分量为最小值的像素)的调整
- greens
对绿色像素(绿色分量为最大值的像素)的调整
- cyans
对青色像素(红色分量为最小值的像素)的调整
- blues
对蓝色像素(蓝色分量为最大值的像素)的调整
- magentas
对洋红色像素(绿色分量为最小值的像素)的调整
- whites
对白色像素(所有分量都大于128的像素)的调整
- neutrals
对除纯黑和纯白以外的所有像素的调整
- blacks
对黑色像素(所有分量都小于128的像素)的调整
- psfile
指定一个Photoshop选择性颜色文件(
.asv)以导入设置。
所有调整设置(reds, yellows等)最多可以接受4个以空格分隔的浮点数调整值,范围为[-1,1],分别调整对应范围像素的青色、洋红、黄色和黑色的量。
39.217.1 示例
- 在所有绿色区域中增加50%的青色和减少33%的黄色,并在蓝色区域中增加27%的洋红:
selectivecolor=greens=.5 0 -.33 0:blues=0 .27
- 使用Photoshop选择性颜色预设:
selectivecolor=psfile=MySelectiveColorPresets/Misty.asv
39.218 separatefields
此滤镜从帧基视频输入中提取出每一帧的场字段,生成一个新的视频剪辑,其高度减半,帧速率和帧数增加一倍。separatefields takes a frame-based video input and splits
each frame into its components fields, producing a new half height clip
with twice the frame rate and twice the frame count.
该滤镜使用帧中的字段优势信息来决定输出中每对字段的排列顺序。如果错误,请使用setfield滤镜在此滤镜之前。separatefields滤镜。
39.219 setdar, setsar
“setdar”滤镜为滤镜输出视频设置显示宽高比(DAR)。setdar这是通过调整指定的采样(即像素)宽高比(SAR)完成的,根据以下公式:
This is done by changing the specified Sample (aka Pixel) Aspect Ratio, according to the following equation:
DAR = 水平分辨率 / 垂直分辨率 * SAR
请记住,“setdar”滤镜不会修改视频帧的像素尺寸。此外,由此滤镜设置的显示宽高比可能会在滤镜链中后面的滤镜(例如缩放或其他“setdar”或“setsar”滤镜)中被更改。setdar filter does not modify the pixel
dimensions of the video frame. Also, the display aspect ratio set by
this filter may be changed by later filters in the filterchain,
e.g. in case of scaling or if another "setdar" or a "setsar" filter is
applied.
“setsar”滤镜为滤镜输出视频设置采样(即像素)宽高比(SAR)。setsar请注意,应用此滤镜后,输出的显示宽高比将根据上述公式更改。
请记住,由“setsar”设置的采样宽高比
Keep in mind that the sample aspect ratio set by the setsar滤镜可能会被滤镜链中的后续滤镜修改,例如,如果另一个 "setsar" 或 "setdar" 滤镜被应用。
它接受以下参数:
- r, ratio, dar (
setdaronly), sar (setsaronly) 设置滤镜使用的纵横比。
参数可以是浮点数字符串或表达式。如果未指定参数,则假定值为 "0",表示使用相同的输入值。
- max
设置在将表达的纵横比化简为一个合理数时用于表示分子和分母的最大整数值。默认值是
100.
参数sar是包含以下常量的表达式:
- w, h
输入的宽度和高度。
- a
与w / h.
- sar
输入样本纵横比。
- dar
输入显示纵横比。它与w / h) * sar.
- hsub, vsub
水平和垂直色度子采样值。例如,对于像素格式 "yuv422p"hsub是 2 而vsub是 1。
39.219.1 示例
- 要将显示纵横比更改为 16:9,请指定以下之一:
setdar=dar=1.77777 setdar=dar=16/9
- 要将样本纵横比更改为 10:11,请指定:
setsar=sar=10/11
- 要设置一个 16:9 的显示纵横比,并在纵横比缩减时指定最大整数值 1000,可以使用命令:
setdar=ratio=16/9:max=1000
39.220 setfield
为输出视频帧强制设置扫描场。
该setfield滤镜标记输出帧的隔行扫描类型字段。它不会更改输入帧,只是设置了相应的属性,这会影响后续滤镜(例如fieldorder或yadif).
的处理方式。
- mode
可用值为:
- ‘auto’
保持相同的场属性。
- ‘bff’
标记帧为自下而上的场优先。
- ‘tff’
标记帧为自上而下的场优先。
- ‘prog’
标记帧为渐进。
39.221 setparams
为输出视频帧强制设置帧参数。
该setparams滤镜标记输出帧的隔行扫描和颜色范围。它不会更改输入帧,只是设置了相应的属性,影响后续滤镜/编码器的处理方式。
- field_mode
可用值为:
- ‘auto’
保持相同的场属性(默认)。
- ‘bff’
标记帧为自下而上的场优先。
- ‘tff’
标记帧为自上而下的场优先。
- ‘prog’
标记帧为渐进。
- range
可用值为:
- ‘auto’
保持颜色范围属性不变(默认)。
- ‘unspecified, unknown’
标记帧为未指定颜色范围。
- ‘limited, tv, mpeg’
标记帧为限定范围。
- ‘full, pc, jpeg’
标记帧为全范围。
- color_primaries
设置颜色主成分。 可用值为:
- ‘auto’
保持颜色主成分属性不变(默认)。
- ‘bt709’
- ‘unknown’
- ‘bt470m’
- ‘bt470bg’
- ‘smpte170m’
- ‘smpte240m’
- ‘film’
- ‘bt2020’
- ‘smpte428’
- ‘smpte431’
- ‘smpte432’
- ‘jedec-p22’
- color_trc
设置颜色传递。 可用值为:
- ‘auto’
保持颜色传递属性不变(默认)。
- ‘bt709’
- ‘unknown’
- ‘bt470m’
- ‘bt470bg’
- ‘smpte170m’
- ‘smpte240m’
- ‘linear’
- ‘log100’
- ‘log316’
- ‘iec61966-2-4’
- ‘bt1361e’
- ‘iec61966-2-1’
- ‘bt2020-10’
- ‘bt2020-12’
- ‘smpte2084’
- ‘smpte428’
- ‘arib-std-b67’
- colorspace
设置颜色空间。 可用值为:
- ‘auto’
保持颜色空间属性不变(默认)。
- ‘gbr’
- ‘bt709’
- ‘unknown’
- ‘fcc’
- ‘bt470bg’
- ‘smpte170m’
- ‘smpte240m’
- ‘ycgco’
- ‘bt2020nc’
- ‘bt2020c’
- ‘smpte2085’
- ‘chroma-derived-nc’
- ‘chroma-derived-c’
- ‘ictcp’
- chroma_location
设置色度取样位置。 可用值为:
- ‘auto’
保持色度位置不变(默认)。
- ‘unspecified, unknown’
- ‘left’
- ‘center’
- ‘topleft’
- ‘top’
- ‘bottomleft’
- ‘bottom’
39.222 shear
对输入视频应用剪切变换。
此滤镜支持以下选项:
- shx
X 方向上的剪切系数。默认值为 0。 允许范围为 -2 到 2。
- shy
Y 方向上的剪切系数。默认值为 0。 允许范围为 -2 到 2。
- fillcolor, c
设置用于填充未被变换视频覆盖的输出区域的颜色。有关此选项的通用语法,请检查(ffmpeg-utils)ffmpeg-utils 手册中的 "颜色" 部分。 如果选定了特殊值 "none",则不会打印背景(例如当背景从不显现时很有用)。
默认值为 "black"。
- interp
设置插值类型。可以是
bilinear或nearest。默认是bilinear.
39.222.1 命令
此滤镜支持所有上述选项作为命令.
39.223 showinfo
显示每个输入视频帧的各种信息的行。 输入视频不会被修改。
此滤镜支持以下选项:
- checksum
计算每个平面的校验和。默认启用。
- udu_sei_as_ascii
尽可能尝试将未注册的 SEI 用户数据作为 ASCII 字符打印,否则以十六进制格式打印。
显示的行包含一个键/值对序列,格式为键:值.
输出中显示以下值:
- n
输入帧的(顺序)编号,从 0 开始。
- pts
输入帧的显示时间戳,以时间基单位表示。时间基单位取决于滤镜输入端。
- pts_time
输入帧的显示时间戳,以秒为单位。
- fmt
像素格式名称。
- sar
输入帧的样本纵横比,表示形式为分子/分母.
- s
输入帧的大小。有关此选项的语法,请检查(ffmpeg-utils)ffmpeg-utils 手册中的 "视频大小" 部分.
- i
隔行模式的类型("P" 表示 "渐进","T" 表示顶部场优先,"B" 表示底部场优先)。
- iskey
如果帧是关键帧,则为 1,否则为 0。
- type
输入帧的图像类型("I" 表示 I 帧,"P" 表示 P 帧,"B" 表示 B 帧,"?" 表示未知类型)。 有关
AVPictureType枚举和av_get_picture_type_char函数定义的文档,请参阅libavutil/avutil.h.- checksum
输入帧所有平面的 Adler-32 校验和(以十六进制打印)。
- plane_checksum
输入帧每个平面的 Adler-32 校验和,格式为 "[c0 c1 c2 c3]".
- mean
输入帧每个平面的像素平均值,以"["的形式表示平均值0 平均值1 平均值2 平均值3]".
- stdev
输入帧每个平面的像素值标准差,以"["的形式表示标准差0 标准差1 标准差2 标准差3]".
39.224 显示调色板
显示每帧的256种颜色调色板。此过滤器仅适用于pal8像素格式帧。
它接受以下选项:
- s
设置用于表示一个调色板颜色条目的框大小。默认值为
30(用于30x30像素框)。
39.225 帧混排
重新排序和/或重复和/或丢弃视频帧。
它接受以下参数:
- mapping
设置输入帧的目标索引。 这是一个由空格或“|”分隔的索引列表,用于将输入帧映射到输出 帧。索引的数量也设置了每个索引可能具有的最大值。 “-1”索引具有特殊意义,即丢弃帧。
第一帧的索引为0。默认值为保持输入不变。
39.225.1 示例
- 每三帧中交换输入的第二帧和第三帧:
ffmpeg -i INPUT -vf "shuffleframes=0 2 1" OUTPUT
- 每十帧中交换输入的第10帧和第1帧:
ffmpeg -i INPUT -vf "shuffleframes=9 1 2 3 4 5 6 7 8 0" OUTPUT
39.226 像素混排
重新排序视频帧中的像素。
此过滤器接受以下选项:
- direction, d
设置混排方向。可以是正向或反向方向。 默认方向为正向。
- mode, m
设置混排模式。可以是水平、垂直或块模式。
- width, w
- height, h
设置混排块大小。在水平混排模式下,仅使用大小的宽度部分,在垂直混排模式下,仅使用大小的高度部分。
- seed, s
设置与像素混排相关使用的随机种子。主要用途是为了能够逆转过滤过程以恢复原始输入。 例如,为了逆转正向混排,需要使用相同的参数、完全相同的种子,并将方向设置为逆向。
39.227 平面混排
重新排序和/或重复视频平面。
它接受以下参数:
- map0
用于作为第一个输出平面的输入平面的索引。
- map1
用于作为第二个输出平面的输入平面的索引。
- map2
用于作为第三个输出平面的输入平面的索引。
- map3
用于作为第四个输出平面的输入平面的索引。
第一个平面的索引为0。默认值为保持输入不变。
39.227.1 示例
- 交换输入的第二个和平面第三个平面:
ffmpeg -i INPUT -vf shuffleplanes=0:2:1:3 OUTPUT
39.228 信号统计
评估各种视觉指标,协助确定与模拟视频媒体数字化相关的问题。
默认情况下,过滤器将记录以下元数据值:
- YMIN
显示输入帧中所含的最小Y值。范围为[0-255]。
- YLOW
显示输入帧中第10%百分位的Y值。范围为[0-255]。
- YAVG
显示输入帧中的平均Y值。范围为[0-255]。
- YHIGH
显示输入帧中第90%百分位的Y值。范围为[0-255]。
- YMAX
显示输入帧中包含的最大Y值。范围为[0-255]。
- UMIN
显示输入帧中所含的最小U值。范围为[0-255]。
- ULOW
显示输入帧中第10%百分位的U值。范围为[0-255]。
- UAVG
显示输入帧中的平均U值。范围为[0-255]。
- UHIGH
显示输入帧中第90%百分位的U值。范围为[0-255]。
- UMAX
显示输入帧中包含的最大U值。范围为[0-255]。
- VMIN
显示输入帧中所含的最小V值。范围为[0-255]。
- VLOW
显示输入帧中第10%百分位的V值。范围为[0-255]。
- VAVG
显示输入帧中的平均V值。范围为[0-255]。
- VHIGH
显示输入帧中第90%百分位的V值。范围为[0-255]。
- VMAX
显示输入帧中包含的最大V值。范围为[0-255]。
- SATMIN
显示输入帧中所含的最小饱和度值。范围为[0-~181.02]。
- SATLOW
显示输入帧中第10%百分位的饱和度值。范围为[0-~181.02]。
- SATAVG
显示输入帧中的平均饱和度值。范围为[0-~181.02]。
- SATHIGH
显示输入帧中第90%百分位的饱和度值。范围为[0-~181.02]。
- SATMAX
显示输入帧中包含的最大饱和度值。范围为[0-~181.02]。
- HUEMED
显示输入帧内色调的中位数值。范围为[0-360]。
- HUEAVG
显示输入帧内色调的平均值。范围为[0-360]。
- YDIF
显示当前帧的Y平面所有值与前一个输入帧对应值之间的样本值差异的平均值。 范围为[0-255]。
- UDIF
显示当前帧的U平面所有值与前一个输入帧对应值之间的样本值差异的平均值。 范围为[0-255]。
- VDIF
显示当前帧的V平面所有值与前一个输入帧对应值之间的样本值差异的平均值。 范围为[0-255]。
- YBITDEPTH
显示当前帧Y平面的位深度。 范围为[0-16]。
- UBITDEPTH
显示当前帧U平面的位深度。 范围为[0-16]。
- VBITDEPTH
显示当前帧V平面的位深度。 范围为[0-16]。
过滤器接受以下选项:
- stat
- out
-
stat指定额外的图像分析形式。out输出视频以突出显示指定类型的像素。
两个选项均接受以下值:
- ‘tout’
识别时间异常值像素。一个时间异常值是一个与同一场景的邻近像素不同的像素。 时间异常值的例子包括视频丢帧、磁头堵塞或磁带跟踪问题。
- ‘vrep’
识别垂直线重复。垂直线重复包括帧内相似的像素行。在原生数字视频中 垂直线重复非常常见,但在从模拟源数字化的视频中这种模式并不常见。 如果它发生在从模拟源数字化的视频中,它可能表明存在缺陷补偿器的掩盖。
- ‘brng’
识别超出合法广播范围的像素。
- color, c
设置out选项的突出显示颜色。默认颜色是 黄色。
39.228.1 示例
- 输出各种视频指标的数据:
ffprobe -f lavfi movie=example.mov,signalstats="stat=tout+vrep+brng" -show_frames
- 输出每帧关于Y平面最小值和最大值的具体数据:
ffprobe -f lavfi movie=example.mov,signalstats -show_entries frame_tags=lavfi.signalstats.YMAX,lavfi.signalstats.YMIN
- 播放视频并将超出广播范围的像素以红色突出显示。
ffplay example.mov -vf signalstats="out=brng:color=red"
- 播放视频并在帧上绘制信号统计元数据。
ffplay example.mov -vf signalstats=stat=brng+vrep+tout,drawtext=fontfile=FreeSerif.ttf:textfile=signalstat_drawtext.txt
命令中使用的signalstat_drawtext.txt内容为:
time %{pts:hms} Y (%{metadata:lavfi.signalstats.YMIN}-%{metadata:lavfi.signalstats.YMAX}) U (%{metadata:lavfi.signalstats.UMIN}-%{metadata:lavfi.signalstats.UMAX}) V (%{metadata:lavfi.signalstats.VMIN}-%{metadata:lavfi.signalstats.VMAX}) saturation maximum: %{metadata:lavfi.signalstats.SATMAX}
39.229 签名
计算MPEG-7视频签名。过滤器可以处理多个输入。在这种情况下,可以额外计算输入之间的匹配。 过滤器始终通过第一个输入。每个流的签名可以写入一个文件。
它接受以下选项:
- detectmode
启用或禁用匹配过程。
可用值为:
- ‘off’
禁用匹配计算(默认)。
- ‘full’
计算整个视频的匹配结果,并输出是整个视频匹配还是仅部分匹配。
- ‘fast’
仅计算直到找到匹配或视频结束。在某些情况下应该会更快。
- nb_inputs
设置输入数量。选项值必须是一个非负整数。默认值为1。
- filename
设置输出写入的路径。如果有多个输入,路径必须是一个模式,即必须包含 %d 或 %0nd(其中 n 是一个正整数),将替换为输入编号。如果未指定文件名,则不会写入输出。这是默认设置。
- format
选择输出格式。
可用值为:
- ‘binary’
使用指定的二进制表示(默认)。
- ‘xml’
使用指定的XML表示形式。
- th_d
设置检测单词相似的阈值。选项值必须是大于零的整数。默认值为9000。
- th_dc
设置检测所有单词相似的阈值。选项值必须是大于零的整数。默认值为60000。
- th_xh
设置检测帧相似的阈值。选项值必须是大于零的整数。默认值为116。
- th_di
设置识别为匹配序列的最短帧序列长度。选项值必须是非负整数。默认值为0。
- th_it
设置匹配帧与所有帧必须达到的最低比例。选项值必须是0到1之间的双精度值。默认值为0.5。
39.229.1 示例
- 计算输入视频的签名并将其存储在 signature.bin 中:
ffmpeg -i input.mkv -vf signature=filename=signature.bin -map 0:v -f null -
- 检测两个视频是否匹配,并将签名字存储为 XML 格式在 signature0.xml 和 signature1.xml 中:
ffmpeg -i input1.mkv -i input2.mkv -filter_complex "[0:v][1:v] signature=nb_inputs=2:detectmode=full:format=xml:filename=signature%d.xml" -map :v -f null -
39.230 siti
计算视频的空间信息(SI)和时间信息(TI)得分,定义见 ITU-T Rec. P.910 (11/21):多媒体应用的主观视频质量评估方法。PDF 可在以下网址获取https://www.itu.int/rec/T-REC-P.910-202111-S/en。 请注意,这是一个对应于已废除建议的遗留实现。有关最新版本,请参阅 ITU-T Rec. P.910 (07/22):https://www.itu.int/rec/T-REC-P.910-202207-I/en
它接受以下选项:
- print_summary
如果设置为1,摘要统计信息将打印到控制台。默认值为0。
39.230.1 示例
- 计算 SI/TI 指标并打印摘要:
ffmpeg -i input.mp4 -vf siti=print_summary=1 -f null -
39.231 smartblur
模糊输入视频,不影响轮廓。
它接受以下选项:
- luma_radius, lr
设置亮度半径。选项值必须是范围 [0.1, 5.0] 内的浮点数,指定用于模糊图像的高斯滤波器的方差(值越大速度越慢)。默认值为 1.0。
- luma_strength, ls
设置亮度强度。选项值必须是范围 [-1.0, 1.0] 内的浮点数,用来配置模糊过程。[0.0, 1.0] 范围内的值会模糊图像,而 [-1.0, 0.0] 范围内的值会锐化图像。默认值为 1.0。
- luma_threshold, lt
设置亮度阈值,用作系数以确定像素是否应模糊。选项值必须是范围 [-30, 30] 内的整数。值为 0 会过滤整个图像,[0, 30] 范围内的值会过滤平坦区域,而 [-30, 0] 范围内的值会过滤边缘。默认值为 0。
- chroma_radius, cr
设置色度半径。选项值必须是范围 [0.1, 5.0] 内的浮点数,指定用于模糊图像的高斯滤波器的方差(值越大速度越慢)。默认值为luma_radius.
- chroma_strength, cs
设置色度强度。选项值必须是范围 [-1.0, 1.0] 内的浮点数,用来配置模糊过程。[0.0, 1.0] 范围内的值会模糊图像,而 [-1.0, 0.0] 范围内的值会锐化图像。默认值为luma_strength.
- chroma_threshold, ct
设置色度阈值,用作系数以确定像素是否应模糊。选项值必须是范围 [-30, 30] 内的整数。值为0会过滤整个图像,[0, 30] 范围的值会过滤平坦区域,而 [-30, 0] 范围的值会过滤边缘。默认值为luma_threshold.
- alpha_radius, ar
设置透明度半径。选项值必须是范围 [0.1, 5.0] 内的浮点数,指定用于模糊图像的高斯滤波器的方差(值越大速度越慢)。默认值为luma_radius.
- alpha_strength, as
设置透明度强度。选项值必须是范围 [-1.0, 1.0] 内的浮点数,用来配置模糊过程。[0.0, 1.0] 范围内的值会模糊图像,而 [-1.0, 0.0] 范围内的值会锐化图像。默认值为luma_strength.
- alpha_threshold, at
设置透明度阈值,用作系数以确定像素是否应模糊。选项值必须是范围 [-30, 30] 内的整数。值为 0 会过滤整个图像,[0, 30] 范围内的值会过滤平坦区域,而 [-30, 0] 范围内的值会过滤边缘。默认值为luma_threshold.
如果未显式设置色度或透明度选项,则设置为对应的亮度值。
39.232 sobel
对输入视频流应用 Sobel 运算符。
过滤器接受以下选项:
- planes
设置要处理的平面,未处理的平面将被复制。默认值为0xf,所有平面都将被处理。
- scale
设置要与过滤结果相乘的值。
- delta
设置要添加到过滤结果的值。
39.232.1 命令
此过滤器支持所有上述选项作为命令.
39.233 spp
应用一个简单的后处理过滤器,在几个(或在qualitylevel6- 所有)偏移量上压缩和解压图像,并平均结果。
过滤器接受以下选项:
- quality
设置质量。此选项定义用于平均化的级别数量。接受的范围是 0-6 的整数。如果设置为
0,过滤器将不起作用。值6表示较高质量。每增加一个级别的值,速度会大约减半。默认值为3.- qp
强制使用固定的量化参数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。
- mode
设置阈值模式。可用模式为:
- ‘hard’
设置硬阈值(默认)。
- ‘soft’
设置软阈值(去振铃效果更好,但可能稍显模糊)。
- use_bframe_qp
如果设置为
1,启用使用 B 帧中的 QP。使用此选项可能会导致闪烁,因为 B 帧通常有更大的 QP。默认值为0(未启用)。
39.233.1 命令
此过滤器支持以下命令:
- quality, level
设置质量级别。值
max可用于设置最大级别,当前为6.
39.234 sr
通过应用基于卷积神经网络的超分辨率方法对输入进行缩放。支持的模型:
- 超分辨率卷积神经网络模型(SRCNN)。参见https://arxiv.org/abs/1501.00092.
- 高效子像素卷积神经网络模型(ESPCN)。参见https://arxiv.org/abs/1609.05158.
训练脚本以及用于保存模型文件(.pb)的脚本可以在以下地址找到https://github.com/XueweiMeng/sr/tree/sr_dnn_native。原始存储库在https://github.com/HighVoltageRocknRoll/sr.git.
过滤器接受以下选项:
- dnn_backend
指定用于模型加载和执行的 DNN 后端。此选项接受以下值:
- ‘tensorflow’
TensorFlow 后端。启用此后端需要安装 TensorFlow for C 库(参见https://www.tensorflow.org/install/lang_c)并使用以下方式配置 FFmpeg
--enable-libtensorflow
- model
设置指定网络架构及其参数的模型文件路径。请注意,不同的后端使用不同的文件格式。TensorFlow 和 OpenVINO 后端只能加载其格式的文件。
- scale_factor
为 SRCNN 模型设置缩放因子。允许的值为
2,3和4。 默认值为2。SRCNN 模型需要缩放因子,因为它接受使用双三次插值进行适当缩放的输入。
要获得完全功能(如异步执行),请使用dnn_processing过滤器。
39.235 sr_amf
使用 AMD 高级媒体框架库进行视频硬件加速处理,为输入视频进行放大(尺寸增加)。 采用高级算法实现更高输出质量的上采样。 设置输出宽度和高度的方式与scale过滤器相同。
过滤器接受以下选项:
- w
- h
设置输出视频的尺寸表达式。默认值为输入尺寸。
允许与缩放滤镜。
- algorithm
设置用于缩放的算法:
- 双线性
双线性
- 双三次
双三次
- 视频 SR1.0
视频 SR1.0 这是默认值
- 点采样
点采样
- 视频 SR1.1
视频 SR1.1
- sharpness
控制高清缩放器的锐化程度。值为范围 [0.0, 2.0] 之间的浮点型。
- format
控制输出像素格式。默认情况下,或未指定时,使用输入像素格式。
- keep-ratio
强制缩放器保持输入图像的长宽比例,当输出尺寸有不同长宽比时。 默认值为false。
- fill
指定是否在兴趣区域之外的输出图像不会填满整个输出表面时,是否用纯色填充。
39.235.1 示例
- 将输入缩放至720p,保持长宽比并确保输出为yuv420p。
sr_amf=-2:720:format=yuv420p
- 使用算法视频 SR1.1 将视频上采样至4K。
sr_amf=4096:2160:algorithm=sr1-1
39.236 ssim
获取两个输入视频之间的结构相似性指标(SSIM)。
此滤镜接收两个输入视频,第一个输入被视为“主”源并不做改变输出。 第二个输入被用作计算SSIM的“参考”视频。
两个视频输入必须具有相同的分辨率和像素格式, 否则此滤镜无法正常工作。此外,它假设两个输入具有相同帧数,逐帧比较。
滤镜存储每帧计算的SSIM值。
以下是接受参数的说明。
- stats_file, f
如果指定,滤镜会使用提供的文件名保存每帧的SSIM值。 当文件名为"-"时,数据发送到标准输出。
如果选择了stats_file选项,生成的文件包含一系列键值对,格式为键:值每帧视频的比较结果。
以下是每个显示参数的说明:
- n
输入帧的顺序号,从1开始。
- Y, U, V, R, G, B
比较帧指定组件的SSIM值,由后缀指定。
- All
整个帧的比较SSIM值。
- dB
与上述相同,但以分贝表示。
此滤镜还支持帧同步选项。
39.236.1 示例
- 例如:
movie=ref_movie.mpg, setpts=PTS-STARTPTS [main]; [main][ref] ssim="stats_file=stats.log" [out]
在此示例中,正在处理的输入文件与参考文件进行对比, 每帧的SSIM存储于ref_movie.mpg中。stats.log.
- 另一个同时使用psnr和ssim的示例:
ffmpeg -i main.mpg -i ref.mpg -lavfi "ssim;[0:v][1:v]psnr" -f null -
- 另一个具有不同容器的示例:
ffmpeg -i main.mpg -i ref.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]ssim" -f null -
39.237 stereo3d
在不同的立体图像格式之间进行转换。
滤镜接受以下选项:
- in
设置输入的立体图像格式。
可用的输入图像格式有:
- ‘sbsl’
左右并排并行(左眼左边,右眼右边)
- ‘sbsr’
左右并排交叉(右眼左边,左眼右边)
- ‘sbs2l’
左右并排并行,宽度分辨率减半(左眼左边,右眼右边)
- ‘sbs2r’
左右并排交叉,宽度分辨率减半(右眼左边,左眼右边)
- ‘abl’
- ‘tbl’
上下(左眼在上,右眼在下)
- ‘abr’
- ‘tbr’
上下(右眼在上,左眼在下)
- ‘ab2l’
- ‘tb2l’
上下,高度分辨率减半(左眼在上,右眼在下)
- ‘ab2r’
- ‘tb2r’
上下,高度分辨率减半(右眼在上,左眼在下)
- ‘al’
交替帧(左眼优先,右眼第二)
- ‘ar’
交替帧(右眼优先,左眼第二)
- ‘irl’
交错行(左眼从顶部行开始,右眼从下一行开始)
- ‘irr’
交错行(右眼从顶部行开始,左眼从下一行开始)
- ‘icl’
交错列,左眼优先
- ‘icr’
交错列,右眼优先
默认值为'sbsl’.
- out
设置输出的立体图像格式。
- ‘sbsl’
左右并排并行(左眼左边,右眼右边)
- ‘sbsr’
左右并排交叉(右眼左边,左眼右边)
- ‘sbs2l’
左右并排并行,宽度分辨率减半(左眼左边,右眼右边)
- ‘sbs2r’
左右并排交叉,宽度分辨率减半(右眼左边,左眼右边)
- ‘abl’
- ‘tbl’
上下(左眼在上,右眼在下)
- ‘abr’
- ‘tbr’
上下(右眼在上,左眼在下)
- ‘ab2l’
- ‘tb2l’
上下,高度分辨率减半(左眼在上,右眼在下)
- ‘ab2r’
- ‘tb2r’
上下,高度分辨率减半(右眼在上,左眼在下)
- ‘al’
交替帧(左眼优先,右眼第二)
- ‘ar’
交替帧(右眼优先,左眼第二)
- ‘irl’
交错行(左眼从顶部行开始,右眼从下一行开始)
- ‘irr’
交错行(右眼从顶部行开始,左眼从下一行开始)
- ‘arbg’
红/蓝灰色的残像 (左眼红色滤镜,右眼蓝色滤镜)
- ‘argg’
红/绿色灰色的残像 (左眼红色滤镜,右眼绿色滤镜)
- ‘arcg’
红/青灰色的残像 (左眼红色滤镜,右眼青色滤镜)
- ‘arch’
红/青半色的残像 (左眼红色滤镜,右眼青色滤镜)
- ‘arcc’
红/青彩色的残像 (左眼红色滤镜,右眼青色滤镜)
- ‘arcd’
红/青色彩通过杜布瓦优化最小二乘投影的残像 (左眼红色滤镜,右眼青色滤镜)
- ‘agmg’
绿色/品红色灰色的残像 (左眼绿色滤镜,右眼品红色滤镜)
- ‘agmh’
绿色/品红色半色的残像 (左眼绿色滤镜,右眼品红色滤镜)
- ‘agmc’
绿色/品红色彩色的残像 (左眼绿色滤镜,右眼品红色滤镜)
- ‘agmd’
绿色/品红色彩通过杜布瓦优化最小二乘投影的残像 (左眼绿色滤镜,右眼品红色滤镜)
- ‘aybg’
黄色/蓝色灰色的残像 (左眼黄色滤镜,右眼蓝色滤镜)
- ‘aybh’
黄色/蓝色半色的残像 (左眼黄色滤镜,右眼蓝色滤镜)
- ‘aybc’
黄色/蓝色彩色的残像 (左眼黄色滤镜,右眼蓝色滤镜)
- ‘aybd’
黄色/蓝色彩通过杜布瓦优化最小二乘投影的残像 (左眼黄色滤镜,右眼蓝色滤镜)
- ‘ml’
输出单目(仅左眼)
- ‘mr’
输出单目(仅右眼)
- ‘chl’
棋盘,左眼优先
- ‘chr’
棋盘,右眼优先
- ‘icl’
交错列,左眼优先
- ‘icr’
交错列,右眼优先
- ‘hdmi’
HDMI 帧封装
默认值是 ‘arcd’.
39.237.1 示例
- 将输入视频从左右并排格式转换为黄/蓝杜波依斯(anaglyph yellow/blue dubois):
stereo3d=sbsl:aybd
- 将输入视频从上下(左眼在上,右眼在下)格式转换为并排交叉眼格式。
stereo3d=abl:sbsr
39.238 streamselect, astreamselect
选择视频或音频流。
该滤镜接受以下选项:
- inputs
设置输入数量。默认值是 2。
- map
设置输入索引以重新映射到输出。
39.238.1 命令
该streamselect和astreamselect滤镜支持以下命令:
- map
设置输入索引以重新映射到输出。
39.238.2 示例
- 选择第一流的前 5 秒,其余时间选择第二流:
sendcmd='5.0 streamselect map 1',streamselect=inputs=2:map=0
- 与上相同,但针对音频:
asendcmd='5.0 astreamselect map 1',astreamselect=inputs=2:map=0
39.239 字幕
使用 libass 库在输入视频上叠加字幕。
要启用此滤镜的编译,您需要用以下命令配置 FFmpeg:--enable-libass。此滤镜还需要一个带有 libavcodec 和 libavformat 的构建来将传入的字幕文件转换为 ASS(高级字幕 Alpha)字幕格式。
该滤镜接受以下选项:
- filename, f
设置要读取的字幕文件名。该选项必须指定。
- original_size
指定原始视频的尺寸,也就是字幕文件所针对的视频。对此选项的语法描述见(ffmpeg-utils)ffmpeg-utils 手册中的“视频尺寸”部分。 由于 ASS 的宽高比算法的设计缺陷,如果更改宽高比,必须设置此选项以正确缩放字体。
- fontsdir
设置包含可被滤镜使用的字体目录路径。这些字体将被补充到字体提供程序使用的字体中。
- alpha
处理阿尔法通道,默认情况下阿尔法通道保持不变。
- charenc
设置字幕输入的字符编码。
subtitles仅适用于 滤镜。如果不是 UTF-8,这才有用。- stream_index, si
设置字幕流索引。
subtitles仅适用于滤镜。- force_style
覆盖默认的样式或脚本信息参数。该选项接受包含 ASS 样式格式的字符串
KEY=VALUE键-值对,使用","分隔。- wrap_unicode
根据 Unicode 换行算法换行。需要至少 libass 版本 0.17.0(或 LIBASS_VERSION 为 0x01600010),andlibass 必须已配备 libunibreak 构建。
此选项默认为启用,除非是本地的 ASS。
如果未指定第一个键,则假设第一个值为filename.
例如,要将文件sub.srt渲染到输入视频上,使用命令:
subtitles=sub.srt
这等价于:
subtitles=filename=sub.srt
要从文件中渲染默认的字幕流,请使用:video.mkv,使用以下命令:
subtitles=video.mkv
要从该文件中渲染第二字幕流,请使用:
subtitles=video.mkv:si=1
要将字幕流从sub.srt设置为 80% 透明的蓝色DejaVu Serif,使用:
subtitles=sub.srt:force_style='Fontname=DejaVu Serif,PrimaryColour=&HCCFF0000'
39.240 super2xsai
通过 Super2xSaI(比例缩放和插值)像素艺术缩放算法,将输入图像放大 2 倍并平滑。
对于放大像素艺术图像且不降低清晰度非常有用。
39.241 swaprect
在视频中交换两个矩形对象位置。
该滤镜接受以下选项:
- w
设置对象宽度。
- h
设置对象高度。
- x1
设置第一个矩形的 x 坐标。
- y1
设置第一个矩形的 y 坐标。
- x2
设置第二个矩形的 x 坐标。
- y2
设置第二个矩形的 y 坐标。
所有表达式在每一帧都被求值。
所有选项都是包含以下常量的表达式:
- w
- h
输入的宽度和高度。
- a
同w / h
- sar
输入的样本宽高比。
- dar
输入的视频显示宽高比,与(w / h) * sar
- n
输入帧的编号,从 0 开始。
- t
以秒表示的时间戳。如果输入时间戳未知则为 NAN。
- pos
输入帧在文件中的位置,如果位置未知则为 NAN;该项已弃用,请勿使用。
39.241.1 命令
此滤镜支持以上所有选项作为命令.
39.242 swapuv
交换 U 和 V 平面。
39.243 tblend
混合连续的视频帧。
39.244 telecine
对视频应用变换扫描(telecine)处理。
该滤镜接受以下选项:
- first_field
- ‘top, t’
自上场(top field first)
- ‘bottom, b’
自下场(bottom field first) 默认值是
top.
- pattern
一个由数字组成的字符串,表示您希望应用的 变换扫描模式。 默认值是
23.
Some typical patterns:
NTSC output (30i):
27.5p: 32222
24p: 23 (classic)
24p: 2332 (preferred)
20p: 33
18p: 334
16p: 3444
PAL output (25i):
27.5p: 12222
24p: 222222222223 ("Euro pulldown")
16.67p: 33
16p: 33333334
39.245 thistogram
计算并绘制随时间变化的视频颜色分布直方图。
与直方图视频滤镜不同,它只显示特定时间的单帧直方图,而此滤镜还显示定义的帧数的过去直方图width选项。
计算出的直方图表示图像中的颜色成分分布。
该滤镜接受以下选项:
- width, w
设置单个颜色分量输出的宽度。默认值是
0。 值为0表示宽度将从输入视频中获取。此选项还设置保留的直方图数量。 允许的范围是 [0, 8192]。- display_mode, d
设置显示模式。 可接受以下值:
- ‘stack’
每个颜色分量的图表纵向排列。
- ‘parade’
每个颜色分量的图表横向排列。
- ‘overlay’
显示与
parade中相同的信息, 除了颜色分量图表直接叠加在一起。
默认值是
stack.- levels_mode, m
设置模式。可以是
linear,或者logarithmic。 默认值是linear.- components, c
设置要显示的颜色分量。 默认值是
7.- bgopacity, b
设置背景透明度。默认值是
0.9.- envelope, e
显示包络线。默认禁用。
- ecolor, ec
设置包络线颜色。默认值是
gold.- slide
设置滑动模式。
滑动的可用值为:
- ‘frame’
当到达右边界时绘制新帧。
- ‘replace’
用新的列替换旧的列。
- ‘scroll’
从右向左滚动。
- ‘rscroll’
从左向右滚动。
- ‘picture’
绘制单一图片。
默认值是
replace.
39.246 阈值
对视频流应用阈值效果。
此过滤器需要四个视频流以执行阈值操作。 第一个流是我们要过滤的流。 第二个流保存阈值,第三个流保存最小值, 最后,第四个流保存最大值。
该过滤器接受以下选项:
- planes
设置要处理的平面,未处理的平面将被复制。 默认值为0xf,即所有平面将被处理。
例如,如果第一个流的像素分量值小于第二个阈值流的像素分量值, 将选取第三个流的值,否则将选取第四个流的像素分量值。
使用颜色源过滤器可以执行各种类型的阈值操作:
39.246.1 命令
此过滤器支持与命令.
39.246.2 示例
- 二值化阈值,使用灰色作为阈值:
ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=black -f lavfi -i color=white -lavfi threshold output.avi
- 反向二值化阈值,使用灰色作为阈值:
ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=white -f lavfi -i color=black -lavfi threshold output.avi
- 截断二值化阈值,使用灰色作为阈值:
ffmpeg -i 320x240.avi -f lavfi -i color=gray -i 320x240.avi -f lavfi -i color=gray -lavfi threshold output.avi
- 零阈值,使用灰色作为阈值:
ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=white -i 320x240.avi -lavfi threshold output.avi
- 反向零阈值,使用灰色作为阈值:
ffmpeg -i 320x240.avi -f lavfi -i color=gray -i 320x240.avi -f lavfi -i color=white -lavfi threshold output.avi
39.247 缩略图
在给定的一系列连续帧中选择最具代表性的帧。
该过滤器接受以下选项:
- n
设置要分析的帧批量大小;在一个包含n帧的集合中,过滤器 将选择其中一个,然后处理下一个批量的n帧直到结束。默认值是
100.- log
设置日志级别以显示所选帧的统计数据。 默认值是
info.
因为过滤器会跟踪整个帧序列,一个较大的n值将导致更高的内存使用,所以不建议使用高值。
39.247.1 示例
- 每50帧提取一张图片:
thumbnail=50
- 用完整示例创建的缩略图:
ffmpeg:ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
39.248 拼贴
将多个连续帧拼贴在一起。
过滤器抗拼贴可以执行逆操作。
过滤器接受以下选项:
- layout
设置网格尺寸格式
COLUMNSxROWS. 范围为最多UINT_MAX单元。 默认值是6x5.- nb_frames
在给定区域内设置要渲染的最大帧数量。它必须小于或等于wxh. 默认值是
0, 意味着将使用整个区域。- margin
以像素为单位设置外边框的边距。范围是0到1024。默认值是
0.- padding
设置内边框厚度(即帧之间的像素数)。 有关更高级的填充选项(例如不同边缘的不同值),请参见视频填充过滤器。 范围是0到1024。默认值是
0.- color
指定未使用区域的颜色。有关此选项的语法,请检查(ffmpeg-utils)"颜色"部分的ffmpeg-utils手册。。 默认值为颜色是"黑色"。
- overlap
设置拼贴多个连续帧时帧之间的重叠数量。 值必须在
0和nb_frames - 1之间。默认值是0.- init_padding
设置初始空帧数量,控制首次输出帧显示的时间。 该值必须在
0和nb_frames - 1之间。默认值是0.
39.248.1 示例
- 生成所有关键帧的8x8 PNG拼图 (-skip_frame nokey):
ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
一-vsync 0是防止
ffmpeg重复输出帧以适应检测到的帧率。 - 显示
5图像区域由3x2帧组成, 边框为7像素,初始边距为2像素,同时使用混合的平整和命名的选项:tile=3x2:nb_frames=5:padding=7:margin=2
39.249 倾斜和移位
应用倾斜和移位效果。
当时间和空间倒转时会发生什么?
通常,视频由几个帧组成,每帧表示时间上的一个瞬间,展示随 捕获场景的变化。但是,此滤镜与这种概念相反,借鉴了倾斜和移位摄影。
过滤后的帧包含了组成序列的整条时间线事件,这是通过将每帧的一部分像素放入一个图像中来实现的。然而,由于缺乏无限宽的帧,这个过程限制在输入帧的宽度之内,并通过在随后的每帧中平移一列逐步重新组合新的视频。为了将空间映射到时间上,过滤器也倾斜每个输入帧,以维持动作表现。这通过从每帧中的选择不同的像素列逐步实现。
最后的结果是一个类似于反向视差的效果,从而使远处的物体比前景的物体移动得更快。 这种视频效果的理想条件是,要么有非常小的运动并且背景是静止的,要么有非常大的运动和非常宽的景深(例如在火车上移动时的宽景全景)。
该过滤器接受以下参数:
- tilt
倾斜视频同时移位(默认)。如果未设置,视频将静态滑动图片,由每帧的第一列组成。
- start
过滤开始时要做的事情(见下文)。
- end
过滤结束时要做的事情(见下文)。
- hold
在开始过滤之前应通过多少列。
- pad
在过滤结束之前应插入多少列。
通常情况下,过滤器从第一个画面开始移动和倾斜,并在接收到最后一个画面时停止。然而,在过滤开始之前,可以保留正常视频,使效果缓慢地展现到位。同样,在过滤结束时也可以恢复最后一帧视频。或者也可以选择以黑场开始和结束。
- ‘none’
过滤立即开始并在接收到最后一帧时结束。
- ‘frame’
在处理期间保留第一帧或最后一帧不变。
- ‘black’
在过滤开始或结束时填充黑色。
39.250 tinterlace
执行各种类型的时间域场交错。
帧从1开始计数,因此第一输入帧被认为是奇数帧。
过滤器接受以下选项:
- mode
指定交错模式。该选项也可以单独指定值。以下是此选项的值列表。
可用值有:
- ‘merge, 0’
将奇数帧移动到上场,将偶数帧移动到下场,生成一个双高度、半帧率的画面。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 Output: 11111 33333 22222 44444 11111 33333 22222 44444 11111 33333 22222 44444 11111 33333 22222 44444
- ‘drop_even, 1’
仅输出奇数帧,丢弃偶数帧,生成一个高度不变、半帧率的画面。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 Output: 11111 33333 11111 33333 11111 33333 11111 33333
- ‘drop_odd, 2’
仅输出偶数帧,丢弃奇数帧,生成一个高度不变、半帧率的画面。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 Output: 22222 44444 22222 44444 22222 44444 22222 44444- ‘pad, 3’
将每帧扩展到全高,但用黑色填充交替行,生成一个双高度、与输入帧率相同的画面。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 Output: 11111 ..... 33333 ..... ..... 22222 ..... 44444 11111 ..... 33333 ..... ..... 22222 ..... 44444 11111 ..... 33333 ..... ..... 22222 ..... 44444 11111 ..... 33333 ..... ..... 22222 ..... 44444
- ‘interleave_top, 4’
将奇数帧的上场与偶数帧的下场交替排列,生成一个高度不变、半帧率的画面。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111<- 22222 33333<- 44444 11111 22222<- 33333 44444<- 11111<- 22222 33333<- 44444 11111 22222<- 33333 44444<- Output: 11111 33333 22222 44444 11111 33333 22222 44444
- ‘interleave_bottom, 5’
将奇数帧的下场与偶数帧的上场交替排列,生成一个高度不变、半帧率的画面。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222<- 33333 44444<- 11111<- 22222 33333<- 44444 11111 22222<- 33333 44444<- 11111<- 22222 33333<- 44444 Output: 22222 44444 11111 33333 22222 44444 11111 33333
- ‘interlacex2, 6’
保持高度不变的双帧率。插入的帧包含来自上一输入帧的第二时间场和下一输入帧的第一时间场。此模式依赖于 top_field_first 标志。适合无场同步的交错视频显示。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 Output: 11111 22222 22222 33333 33333 44444 44444 11111 11111 22222 22222 33333 33333 44444 11111 22222 22222 33333 33333 44444 44444 11111 11111 22222 22222 33333 33333 44444
- ‘mergex2, 7’
将奇数帧移动到上场,将偶数帧移动到下场,生成一个双高度、相同帧率的画面。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 Output: 11111 33333 33333 55555 22222 22222 44444 44444 11111 33333 33333 55555 22222 22222 44444 44444 11111 33333 33333 55555 22222 22222 44444 44444 11111 33333 33333 55555 22222 22222 44444 44444
数值值已弃用,但为了向后兼容仍然接受。
默认模式是
merge.- flags
指定影响过滤过程的标志。
可用值为flags是:
- low_pass_filter, vlpf
在过滤器中启用线性垂直低通过滤。垂直低通过滤在基于包含高频垂直细节的渐进源创建交错目标时是必需的。这种过滤将减少交错 '闪烁' 和条纹图案。
- complex_filter, cvlpf
启用复杂的垂直低通过滤。这将带来稍少的交错 '闪烁' 和条纹图案减少,但更好地保留细节和主观清晰感。
- bypass_il
绕过已经交错的帧,仅调整帧率。
仅可为mode interleave_top和interleave_bottom.
39.251 tmedian
从多个连续输入视频帧中挑选中位像素。
过滤器接受以下选项:
- radius
设置中位过滤器的半径。默认值为1,允许范围是1到127。
- planes
设置要过滤的平面。默认值为
15,即对所有平面进行处理。- percentile
设置中位百分比。默认值是
0.5。默认值为0.5时总是选择中位值,而0时选择最小值,1选择最大值。
39.251.1 命令
此过滤器支持上面所有选项作为命令,除了选项radius.
39.252 tmidequalizer
应用时间中的中间视频均衡效果。
中间视频均衡将视频帧序列调整为具有相同直方图,同时尽可能保持其动态性。它对于匹配视频帧序列的曝光效果非常有用。
此过滤器接受以下选项:
- radius
设置过滤半径。默认值是
5。允许范围是1到127。- sigma
设置过滤的sigma值。默认值是
0.5。这控制过滤强度。将此选项设置为0实际上什么都不做。- planes
设置要处理的平面。默认是
15,即所有可用平面。
39.253 tmix
混合连续视频帧。
以下是可接受选项的描述。
- frames
要混合的连续帧数量。如果未指定,则默认为3。
- weights
指定每个输入视频帧的权重。每个权重用空格分隔。如果权重数量小于frames,则最后指定的权重将用于所有未设置的剩余权重。
- scale
指定缩放比例,如果设置,则会与每个权重与像素值相乘的总和相乘,以得到最终目标像素值。默认情况下scale会自动缩放为权重之和。
- planes
设置要过滤的平面。默认是所有平面。允许范围是0到15。
39.253.1 示例
- 平均7个连续帧:
tmix=frames=7:weights="1 1 1 1 1 1 1"
- 应用简单的时间卷积:
tmix=frames=3:weights="-1 3 -1"
- 与上述类似,但仅显示时间差异:
tmix=frames=3:weights="-1 2 -1":scale=1
39.253.2 命令
此过滤器支持以下命令:
- weights
- scale
- planes
语法与具有相同名称的选项相同。
39.254 tonemap
从不同动态范围调整颜色映射。
此滤镜期望数据为单精度浮点数格式,因为需要处理超出范围的值并且可能输出这些值。需要另一个过滤器,如zscale,将生成的帧转换为可用格式。
实现的色调映射算法仅适用于线性光,因此输入数据应事先线性化(并可能正确标记)。
ffmpeg -i INPUT -vf zscale=transfer=linear,tonemap=clip,zscale=transfer=bt709,format=yuv420p OUTPUT
39.254.1 选项
此过滤器接受以下选项。
- tonemap
设置要使用的色调映射算法。
可能的值有:
- none
不要应用任何色调映射,只对过亮像素进行去饱和处理。
- clip
对所有范围外的值进行硬剪裁。适用于范围内值的完美色彩精度,同时扭曲范围外的值。
- linear
将整个参考范围拉伸为显示范围的线性倍数。
- gamma
在色调曲线之间配合对数转换。
- reinhard
使用非线性对比,以简单曲线保持整体图像亮度,这会扁平化细节并降低色彩精度。
- hable
比莱因哈德,以稍微使所有内容变暗为代价。当细节保留比颜色和亮度的准确性更重要时使用它。
- 莫比乌斯
平滑映射超出范围的值,同时尽可能保留范围内材料的对比度和颜色。当颜色准确性比细节保留更重要时使用它。
默认值为无。
- param
调整色调映射算法。
这会影响以下算法:
- 无
被忽略。
- 线性
指定拉伸时使用的缩放因子。 默认值为1.0。
- 伽马
指定函数的指数。 默认值为1.8。
- 剪裁
指定一个额外的线性系数,用于在剪裁之前乘以信号。 默认值为1.0。
- 莱因哈德
指定显示峰值下的局部对比度系数。 默认值为0.5,这意味着色域内的值将大约比剪裁时暗一半。
- 哈布尔
被忽略。
- 莫比乌斯
指定从线性到莫比乌斯变换的过渡点。此点以下的所有值都保证以1:1映射。值越高,结果越准确,但会损失高亮细节。 默认值为0.3,由于初始斜率陡峭,仍能相对准确地保留范围内的颜色。
- desat
对亮度超过此水平的高光应用去饱和处理。参数越高,保留的颜色信息越多。 此设置帮助防止超级高光中颜色的异常漂白,通过以平滑方式变为白色代替。这使图像更自然,代价是减少了超出范围颜色的信息。
默认值为2.0,相对保守,主要适用于天空或直接阳光照射的表面。设置为0.0可禁用此选项。
此选项仅在输入帧具有支持的颜色标签时有效。
- peak
使用此值覆盖信号/名义/参考峰值。当显示元数据中的嵌入峰值信息不可靠或从较低范围到较高范围的色调映射时非常有用。
39.255 视频帧填充
临时填充视频帧。
此过滤器接受以下选项:
- start
指定在输入视频流前的延迟帧数。默认值为0。
- stop
指定输入视频流后的填充帧数。 设置为-1以无限制地填充。默认值为0。
- start_mode
设置添加到流开头的帧类型。 可以是添加或克隆。 对于添加,会添加实心颜色帧。 对于克隆,会克隆第一帧。 默认值为添加.
- stop_mode
设置添加到流末尾的帧类型。 可以是添加或克隆。 对于添加,会添加实心颜色帧。 对于克隆,会克隆最后一帧。 默认值为添加.
- start_duration, stop_duration
指定开始/停止延迟的持续时间。请参阅(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续部分了解接受的语法。 这些选项覆盖开始和停止。默认值为0。
- color
指定填充区域的颜色。有关此选项的语法,请检查(ffmpeg-utils)"颜色"部分在ffmpeg-utils手册中.
默认值为颜色是“黑色”。
39.256 行列转换
将输入视频中的行与列转换,并可选择翻转。
它接受以下参数:
- dir
指定转换方向。
可以假定以下值:
- ‘0, 4, cclock_flip’
逆时针旋转90度并垂直翻转(默认),即:
L.R L.l . . -> . . l.r R.r
- ‘1, 5, clock’
顺时针旋转90度,即:
L.R l.L . . -> . . l.r r.R
- ‘2, 6, cclock’
逆时针旋转90度,即:
L.R R.r . . -> . . l.r L.l
- ‘3, 7, clock_flip’
顺时针旋转90度并垂直翻转,即:
L.R r.R . . -> . . l.r l.L
对于4-7之间的值,只有当输入视频几何形状是纵向而非横向时才进行转换。这些值已被弃用,
passthrough选项应被使用。数值已被弃用,应该改用符号常量。
- passthrough
如果输入几何与指定值匹配,则不应用转换。它接受以下值:
- ‘none’
始终应用转换。
- ‘portrait’
保留纵向几何(当高度 >= 宽度).
- ‘landscape’
保留横向几何(当宽度 >= 高度).
默认值为
none.
例如,要顺时针旋转90度并保留纵向布局:
transpose=dir=1:passthrough=portrait
上面的命令也可以表示为:
transpose=1:portrait
39.257 截取
截取输入,使输出包含输入的一个连续子部分。
它接受以下参数:
- start
指定保留部分的开始时间,即具有时间戳的帧起始将是输出中的第一帧。
- end
指定将被丢弃的第一帧的时间,即紧接时间戳为结束的帧将是输出中的最后一帧。
- start_pts
这与起始相同,只是此选项以时间基数单位而非秒设置起始时间戳。
- end_pts
这与结束相同,只是此选项以时间基数单位而非秒设置结束时间戳。
- duration
输出的最大持续时间(以秒为单位)。
- start_frame
应传递到输出的第一个帧号。
- end_frame
应弃用的第一个帧号。
start, end,以及duration用作时间持续时间的表示;请参阅ffmpeg-utils 手册中的时间持续时间部分以了解可接受的语法。
请注意,第一组和第二组的起始/结束选项以及duration选项会查看帧时间戳,而 _frame 参数仅计算通过过滤器的帧数。另外,请注意,此过滤器不会修改时间戳。如果希望输出时间戳从零开始,请在修剪过滤器之后插入一个 setpts 过滤器。
如果设置了多个起始或结束选项,此过滤器会尝试尽可能多地保留符合至少一个指定约束条件的帧。要仅保留同时符合所有约束条件的部分,可以链接多个修剪过滤器。
默认情况下会保留所有输入内容。例如,可以仅设置结束值以保留指定时间之前的所有内容。
示例:
- 仅保留输入的第二分钟内容:
ffmpeg -i INPUT -vf trim=60:120
- 仅保留第一秒:
ffmpeg -i INPUT -vf trim=duration=1
39.258 去预乘
使用第二个流的第一平面作为透明度,对输入视频流应用 alpha 去预乘效果。
两个流必须有相同的维度和像素格式。
过滤器接受以下选项:
- planes
设置将被处理的平面,未处理的平面将被复制。默认值为 0xf,表示所有平面将被处理。
如果格式有 1 或 2 个分量,则亮度为位 0。 如果格式有 3 或 4 个分量: 对于 RGB 格式,位 0 为绿色,位 1 为蓝色,位 2 为红色; 对于 YUV 格式,位 0 为亮度,位 1 为色度-U,位 2 为色度-V。 如果存在,alpha 通道始终为最后一位。
- inplace
无需第二输入进行处理,而是使用输入流的 alpha 平面。
39.259 非锐化
对输入视频进行锐化或模糊处理。
接受以下参数:
- luma_msize_x, lx
设置亮度矩阵的水平尺寸。必须是 3 到 23 的奇整数。默认值为 5。
- luma_msize_y, ly
设置亮度矩阵的垂直尺寸。必须是 3 到 23 的奇整数。默认值为 5。
- luma_amount, la
设置亮度效果强度。必须是一个浮点数,合理值介于 -1.5 和 1.5 之间。
负值将使输入视频模糊,而正值将使其锐化,零值将禁用效果。
默认值为 1.0。
- chroma_msize_x, cx
设置色度矩阵的水平尺寸。必须是 3 到 23 的奇整数。默认值为 5。
- chroma_msize_y, cy
设置色度矩阵的垂直尺寸。必须是 3 到 23 的奇整数。默认值为 5。
- chroma_amount, ca
设置色度效果强度。必须是一个浮点数,合理值介于 -1.5 和 1.5 之间。
负值将使输入视频模糊,而正值将使其锐化,零值将禁用效果。
默认值为 0.0。
- alpha_msize_x, ax
设置 alpha 矩阵的水平尺寸。必须是 3 到 23 的奇整数。默认值为 5。
- alpha_msize_y, ay
设置 alpha 矩阵的垂直尺寸。必须是 3 到 23 的奇整数。默认值为 5。
- alpha_amount, aa
设置 alpha 效果强度。必须是一个浮点数,合理值介于 -1.5 和 1.5 之间。
负值将使输入视频模糊,而正值将使其锐化,零值将禁用效果。
默认值为 0.0。
所有参数都是可选的,且默认值等于字符串 '5:5:1.0:5:5:0.0'。
39.259.1 示例
- 应用强烈的亮度锐化效果:
unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
- 对亮度和色度参数同时应用强烈模糊:
unsharp=7:7:-2:7:7:-2
39.260 解拼图
将由拼图图像组成的视频分解为单独的图像。
输出视频的帧率为输入视频的帧率乘以拼图的数量。
此过滤器与拼图.
相反。
- layout
设置网格大小(即行数和列数)。有关此选项的语法,请查看ffmpeg-utils 手册中的“视频大小”部分.
39.260.1 示例
- 从由 25 帧垂直堆叠的静止图像文件生成 1 秒的视频,就像模拟电影胶片一样:
ffmpeg -r 1 -i image.jpg -vf untile=1x25 movie.mkv
39.261 超慢后处理
应用超慢/简单的后处理过滤器,该过滤器在多个(或对于quality等级8—所有)
级别对图像进行压缩和解压缩,并对结果进行平均。
这种效果与 spp 的行为不同,uspp 实际上使用 libavcodec 的 Snow 编解码器对每种情况进行编码和解码,而 spp 使用类似于 MJPEG 的简化型仅帧内 8x8 DCT。
此过滤器在 ffmpeg 5.0 至 6.0 版本之间不可用。
- quality
设置质量。此选项定义用于平均的级别数量。接受范围为 0 到 8 的整数。如果设置为
0过滤器将不起作用。值为8表示较高质量。每增加一级,该值的速度将大约降低一倍。默认值为3.- qp
强制使用恒定的量化参数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。
- codec
使用指定的编解码器代替雪花(Snow)。
39.262 v360
在各种格式之间转换 360 度视频。
过滤器接受以下选项:
- input
- output
设置输入/输出视频的格式。
可用格式:
- ‘e’
- ‘equirect’
等矩形投影。
- ‘c3x2’
- ‘c6x1’
- ‘c1x6’
3x2/6x1/1x6 格局的立方体地图。
格式特定选项:
- in_pad
- out_pad
设置输入/输出立方体地图的填充比例。取值为小数。
示例值:
- ‘0’
无填充。
- ‘0.01’
面宽度的1%为填充。例如,对于 1920x1280 分辨率,面大小为 640x640,则每侧填充3个像素。(640 * 0.01 = 6像素)
默认值为‘0’。 最大值为‘0.1’.
- fin_pad
- fout_pad
设置输入/输出立方体地图的固定填充。单位为像素。
默认值为‘0’。如果大于零,它将覆盖其他填充选项。
- in_forder
- out_forder
设置输入/输出立方体地图的面排列顺序。为每个位置选择一个方向。
方向标识:
- ‘r’
右
- ‘l’
左
- ‘u’
上
- ‘d’
下
- ‘f’
前
- ‘b’
后
默认值为‘rludfb’.
- in_frot
- out_frot
设置输入/输出立方体地图的面旋转角度。为每个位置选择一个角度。
角度标识:
- ‘0’
顺时针 0度
- ‘1’
顺时针 90度
- ‘2’
顺时针 180度
- ‘3’
顺时针 270度
默认值为‘000000’.
- ‘eac’
等角立方体地图。
- ‘flat’
- ‘gnomonic’
- ‘rectilinear’
普通视频。
格式特定选项:
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角视场角,单位为度。
如果设置了对角视场角,它将覆盖水平和垂直视场角。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角视场角,单位为度。
如果设置了对角视场角,它将覆盖水平和垂直视场角。
- ‘dfisheye’
双鱼眼。
格式特定选项:
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角视场角,单位为度。
如果设置了对角视场角,它将覆盖水平和垂直视场角。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角视场角,单位为度。
如果设置了对角视场角,它将覆盖水平和垂直视场角。
- ‘barrel’
- ‘fb’
- ‘barrelsplit’
Facebook的360格式。
- ‘sg’
立体格式。
格式特定选项:
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角视场角,单位为度。
如果设置了对角视场角,它将覆盖水平和垂直视场角。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角视场角,单位为度。
如果设置了对角视场角,它将覆盖水平和垂直视场角。
- ‘mercator’
墨卡托格式。
- ‘ball’
球形格式,向后产生显著失真。
- ‘hammer’
Hammer-Aitoff地图投影格式。
- ‘sinusoidal’
正弦地图投影格式。
- ‘fisheye’
鱼眼投影。
格式特定选项:
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角视场角,单位为度。
如果设置了对角视场角,它将覆盖水平和垂直视场角。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角视场角,单位为度。
如果设置了对角视场角,它将覆盖水平和垂直视场角。
- ‘pannini’
潘尼尼投影。
格式特定选项:
- h_fov
设置输出潘尼尼参数。
- ih_fov
设置输入潘尼尼参数。
- ‘cylindrical’
圆柱投影。
格式特定选项:
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角视场角,单位为度。
如果设置了对角视场角,它将覆盖水平和垂直视场角。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角视场角,单位为度。
如果设置了对角视场角,它将覆盖水平和垂直视场角。
- ‘perspective’
透视投影。(仅输出)
格式特定选项:
- v_fov
设置透视参数。
- ‘tetrahedron’
四面体投影。
- ‘tsp’
截断正方锥体投影。
- ‘he’
- ‘hequirect’
半等距投影。
- ‘equisolid’
等固体格式。
格式特定选项:
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角视场角,单位为度。
如果设置了对角视场角,它将覆盖水平和垂直视场角。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角视场角,单位为度。
如果设置了对角视场角,它将覆盖水平和垂直视场角。
- ‘og’
正交格式。
格式特定选项:
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角视场角,单位为度。
如果设置了对角视场角,它将覆盖水平和垂直视场角。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角视场角,单位为度。
如果设置了对角视场角,它将覆盖水平和垂直视场角。
- ‘octahedron’
八面体投影。
- ‘cylindricalea’
圆柱等面积投影。
- interp
设置插值方法。
注意:更复杂的插值方法需要更多内存运行。可选方法:
- ‘near’
- ‘nearest’
最近邻。
- ‘line’
- ‘linear’
双线性插值。
- ‘lagrange9’
拉格朗日9插值。
- ‘cube’
- ‘cubic’
双三次插值。
- ‘lanc’
- ‘lanczos’
Lanczos插值。
- ‘sp16’
- ‘spline16’
样条16插值。
- ‘gauss’
- ‘gaussian’
高斯插值。
- ‘mitchell’
Mitchell插值。
默认值为‘line’.
- w
- h
设置输出视频分辨率。
默认分辨率取决于格式。
- in_stereo
- out_stereo
设置输入/输出立体格式。
- ‘2d’
2D单声道
- ‘sbs’
并排
- ‘tb’
上下叠放
默认值为‘2d’用于输入和输出格式。
- yaw
- pitch
- roll
设置输出视频的旋转角度,单位为度。
- rorder
设置输出视频的旋转顺序,为每个位置选择一项。
- ‘y, Y’
偏航
- ‘p, P’
俯仰
- ‘r, R’
滚转
默认值为‘ypr’.
- h_flip
- v_flip
- d_flip
水平(交换左右)/垂直(交换上下)/深度(交换前后)翻转输出视频。布尔值。
- ih_flip
- iv_flip
设置输入视频是否水平/垂直翻转。布尔值。
- in_trans
设置输入视频是否转置。布尔值,默认禁用。
- out_trans
设置输出视频是否需要转置。布尔值,默认禁用。
- h_offset
- v_offset
设置输出水平/垂直的非中心偏移。默认设置为0。 允许范围为-1到1。
- alpha_mask
在所有未映射像素的alpha平面内构建掩膜,将它们标记为完全透明。布尔值,默认禁用。
- reset_rot
重置输出视频的旋转。布尔值,默认禁用。
39.262.1 示例
- 使用双三次插值将等距长方形视频转换为3x2布局的立方体映射,并添加1%的填充:
ffmpeg -i input.mkv -vf v360=e:c3x2:cubic:out_pad=0.01 output.mkv
- 提取等角立方体映射的后视图:
ffmpeg -i input.mkv -vf v360=eac:flat:yaw=180 output.mkv
- 将转置和水平翻转的等角立方体映射以立体并排格式转换为等距长方形上下立体格式:
v360=eac:equirect:in_stereo=sbs:in_trans=1:ih_flip=1:out_stereo=tb
39.262.2 命令
此过滤器支持上述选项子集作为命令.
39.263 模糊降噪器
应用基于小波的去噪器。
将视频输入的每帧转换为小波域,使用 Cohen-Daubechies-Feauveau 9/7。然后对获取的系数进行一些过滤处理,并在之后进行逆小波变换。由于小波的特性,这应该会带来一个平滑的结果,减少噪点,同时不模糊画面特征。
该滤镜接受以下选项:
- threshold
过滤强度。值越高,视频过滤效果越强。硬阈值在视频看起来过度过滤之前可使用比软阈值更高的阈值。默认值为 2。
- method
过滤器将使用的过滤方法。
可接受以下值:
- ‘hard’
所有低于阈值的值将被置零。
- ‘soft’
所有低于阈值的值将被置零。所有高于阈值的值将减少阈值。
- ‘garrote’
对系数进行缩放或置零——介于(更软)软阈值和(更硬)硬阈值之间。
默认为 garrote。
- nsteps
小波分解图片的次数。图片不能超过特定点进行分解(通常,640x480帧的最大分解次数为8,因为 2^9 = 512 > 480)。有效值为1到32之间的整数。默认值为 6。
- percent
部分或完整去噪(有限系数压缩),范围从 0 到 100。默认值为 85。
- planes
要处理的平面列表。默认情况下,所有平面都被处理。
- type
过滤器将使用的阈值类型。
可接受以下值:
- ‘universal’
阈值对于所有分解都是相同的。
- ‘bayes’
阈值也取决于每个分解系数。
默认为 universal。
39.264 可变模糊
通过使用第二个视频流设置模糊半径来应用可变模糊滤镜。第二个流必须具有相同的尺寸。
该滤镜接受以下选项:
- min_r
设置允许的最小半径。允许范围是 0 到 254。默认值为 0。
- max_r
设置允许的最大半径。允许范围是 1 到 255。默认值为 8。
- planes
设置要处理的平面。默认情况下,所有平面都使用。
该varblur滤镜还支持帧同步选项。
39.264.1 命令
该滤镜支持以上所有选项作为命令.
39.265 向量示波器
在二维图表中显示两种颜色分量值(称为向量示波器)。
该滤镜接受以下选项:
- mode, m
设置向量示波器模式。
可接受以下值:
- ‘gray’
- ‘tint’
图表上显示灰度值,更高的亮度表示该位置在图表中具有相同颜色分量值的像素更多。这是默认模式。
- ‘color’
图表上显示灰度值。在视频帧中不出现的周围像素值在由选项设置的两种颜色分量的渐变中绘制。
x和y。第三个颜色分量是静态的。- ‘color2’
视频帧中实际的颜色分量值在图表上显示。
- ‘color3’
类似于 color2,但相同值的较高频率
x和y在图表上增加另一个颜色分量的值,从默认值的亮度开始。x和y.- ‘color4’
视频帧中实际的颜色在图表上显示。如果两个不同颜色映射到图表上的同一位置,则选择不在图表中的颜色分量值较高的颜色。
- ‘color5’
图表上显示灰度值。类似于
color但第三种颜色分量从径向渐变中选取。
- x
设置哪个颜色分量将在 X 轴上表示。默认值为
1.- y
设置哪个颜色分量将在 Y 轴上表示。默认值为
2.- intensity, i
设置强度,由模式:灰色、彩色、彩色3和彩色5用于增强表示图表中 (X, Y) 位置频率颜色分量的亮度。
- envelope, e
- ‘none’
无包络,这是默认设置。
- ‘instant’
立即包络,即使最暗的单个像素也会被清晰地突出显示。
- ‘peak’
将图表中呈现的最大值和最小值保持不变。这样可以在无需始终注视向量示波器的情况下仍然发现超范围值。
- ‘peak+instant’
峰值和即时包络相结合。
- graticule, g
设置要绘制的网格类型。
- ‘none’
- ‘green’
- ‘color’
- ‘invert’
- opacity, o
设置网格的不透明度。
- flags, f
设置网格标志。
- ‘white’
为白点绘制网格。
- ‘black’
为黑点绘制网格。
- ‘name’
绘制颜色点的简短名称。
- bgopacity, b
设置背景的不透明度。
- lthreshold, l
设置未在 X 或 Y 轴上表示的颜色分量的低阈值。低于此值的值将被忽略。默认值为 0。请注意此值与一个像素分量的实际最大可能值相乘。所以对于 8 位输入和低阈值值为 0.1 的情况,实际的阈值为 0.1 * 255 = 25。
- hthreshold, h
设置未在 X 或 Y 轴上表示的颜色分量的高阈值。高于此值的值将被忽略。默认值为 1。请注意此值与一个像素分量的实际最大可能值相乘。所以对于 8 位输入和高阈值值为 0.9 的情况,实际的阈值为 0.9 * 255 = 230。
- colorspace, c
设置绘制网格时要使用的颜色空间类型。
- ‘auto’
- ‘601’
- ‘709’
默认值为自动。
- tint0, t0
- tint1, t1
为灰色/色调向量示波器模式设置颜色色调。默认情况下两个选项均为零。这意味着没有色调,输出将保持灰色。
39.266 视频稳定检测
分析视频稳定/去抖动。执行第 1 步(共 2 步),参见vidstabtransform的第 2 步。
此滤镜生成一个文件,其中包含后续帧的相对平移和旋转变换信息,然后由vidstabtransform滤镜使用。
要启用此滤镜的编译,您需要使用以下方式配置 FFmpeg--enable-libvidstab.
该滤镜接受以下选项:
- result
设置用于写入变换信息的文件路径。默认值为transforms.trf.
- shakiness
设置视频的抖动程度以及相机的快速程度。可接受范围为 1-10 的整数,值 1 表示抖动较小,值 10 表示抖动较大。默认值为 5。
- accuracy
设置检测过程的精度。必须是范围为 1-15 的值,值 1 表示低精度,值 15 表示高精度。默认值为 15。
- stepsize
设置搜索过程的步长。以 1 像素分辨率扫描最小值附近的区域。默认值为 6。
- mincontrast
设置最小对比度。低于此值的局部测量字段将被丢弃。必须在范围 0-1 内的浮点值。默认值为 0.3。
- tripod
为三脚架模式设置参考帧编号。
如果启用,帧的运动将与过滤流中的参考帧进行比较,由指定的编号标识。目的是在静态场景中补偿所有运动,并使摄像机视图完全静止。
如果设置为 0,则禁用。帧从 1 开始计数。
- show
在结果帧中显示字段和变换。可接受范围为 0-2 的整数。默认值为 0,表示禁用任何可视化。
- fileformat
变换数据文件的格式。可接受值为
- ‘ascii’
人类可读的纯文本
- ‘binary’
二进制格式,大约比
ascii. (default)
39.266.1 示例
- 使用默认值:
vidstabdetect
- 分析非常抖动的电影并将结果保存在文件中mytransforms.trf:
vidstabdetect=shakiness=10:accuracy=15:result="mytransforms.trf"
- 在结果视频中直观地查看内部转换结果:
vidstabdetect=show=1
- 使用中度抖动分析视频
ffmpeg:ffmpeg -i input -vf vidstabdetect=shakiness=5:show=1 dummy.avi
39.267 视频稳定转化
视频稳定/去抖动:第 2 步(共 2 步),参见vidstabdetect的第 1 步。
读取每个帧的变换信息文件并应用/补偿。这和vidstabdetect滤镜一起可以用于视频去抖动。另见http://public.hronopik.de/vid.stab。也重要的是使用锐化滤镜,见下文。
要启用此滤镜的编译,需要配置FFmpeg并--enable-libvidstab.
39.267.1 选项
- input
设置用于读取变换的文件路径。默认值是transforms.trf.
- smoothing
设置用于对相机移动进行低通滤波的帧数(value*2 + 1)。默认值是10。
例如,一个值为10意味着会使用21帧(过去的10帧和未来的10帧)来平滑视频中的运动。更大的值会生成更平滑的视频,但会限制相机的加速度(平移/倾斜运动)。值为0是一个特殊情况,在这种情况下会模拟一个静止的相机。
- optalgo
设置相机路径优化算法。
接受的值为:
- ‘gauss’
高斯核对相机运动进行低通滤波(默认)
- ‘avg’
变换平均值
- maxshift
设置最大像素数以平移帧。默认值为-1,表示无限制。
- maxangle
设置最大角度(弧度)(度数*PI/180)以旋转帧。默认值为-1,表示无限制。
- crop
指定如何处理由于运动补偿可能可见的边框。
可用值有:
- ‘keep’
保留前一帧中的图像信息(默认)
- ‘black’
填充黑色边框
- invert
如果设置为1,颠倒变换。默认值是0。
- relative
如果设置为1,将变换视为相对于上一帧的变换。如果设置为0,则视为绝对变换。默认值是0。
- zoom
设置缩放百分比。正值会导致缩小效果,负值会导致放大效果。默认值是0(无缩放)。
- optzoom
设置最佳缩放以避免边框。
接受的值为:
- ‘0’
禁用
- ‘1’
确定最佳静态缩放值(仅非常强的运动会导致可见的边框)(默认)
- ‘2’
确定最佳自适应缩放值(不会出现边框),见zoomspeed
注意,缩放的值会加到这里计算出的值上。
- zoomspeed
设置每帧最大缩放百分比(在optzoom设置为2时启用)。范围从0到5,默认值是0.25。
- interpol
指定插值类型。
可用值有:
- ‘no’
无插值
- ‘linear’
仅水平线性插值
- ‘bilinear’
二维方向线性插值(默认)
- ‘bicubic’
二维方向立方插值(慢)
- tripod
如果设置为1,则启用虚拟三脚架模式,这相当于
relative=0:smoothing=0。默认值是0。也使用
tripod选项vidstabdetect.- debug
如果设置为1,则增加日志详细级别。检测到的全球运动也将写入临时文件global_motions.trf。默认值是0。
39.267.2 示例
- 使用
ffmpeg进行典型的稳定处理,使用默认值:ffmpeg -i inp.mpeg -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 inp_stabilized.mpeg
注意使用锐化的滤镜,总是推荐使用。
- 稍微多缩放一点并从指定文件加载变换数据:
vidstabtransform=zoom=5:input="mytransforms.trf"
- 进一步平滑视频:
vidstabtransform=smoothing=30
39.268 垂直翻转
将输入视频垂直翻转。
例如,使用ffmpeg:
ffmpeg -i in.avi -vf "vflip" out.avi
39.269 可变帧率检测
检测可变帧率视频。
此滤镜尝试检测输入是可变帧率还是固定帧率。
在结束时,它将输出检测为具有可变增量PTS的帧数以及具有固定增量PTS的帧数。 如果有具有可变增量的帧,它还会显示遇到的最小、最大和平均增量。
39.270 生动饱和
增强或改变饱和度。
此滤镜接受以下选项:
- intensity
如果是正值则增强强度,负值则改变强度。默认值是0。允许范围是-2到2。
- rbal
设置红色平衡。默认值是1。允许范围是-10到10。
- gbal
设置绿色平衡。默认值是1。允许范围是-10到10。
- bbal
设置蓝色平衡。默认值是1。允许范围是-10到10。
- rlum
设置红色亮度系数。
- glum
设置绿色亮度系数。
- blum
设置蓝色亮度系数。
- alternate
如果
intensity是负数并且设置为1,颜色会改变,否则颜色会更不饱和,接近灰色。
39.270.1 命令
此滤镜支持所有上述选项为命令.
39.271 VIF
获得两个输入视频之间的平均VIF(视觉信息保真度)。
此滤镜需要两个输入视频。
对于这个滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。同时,假设两个输入具有相同数量的帧,并逐一进行比较。
获得的平均VIF分数通过日志系统打印。
滤镜存储每帧的计算的VIF分数。
此滤镜还支持帧同步选项。
以下示例中,输入文件main.mpg正在处理,与参考文件进行比较ref.mpg.
ffmpeg -i main.mpg -i ref.mpg -lavfi vif -f null -
39.272 暗角
创建或反转自然暗角效果。
此滤镜接受以下选项:
- angle, a
设置镜头角度表达式为弧度数。
此值被限制在
[0,PI/2]范围。默认值:
"PI/5"- x0
- y0
设置中心坐标表达式。分别为
"w/2"和"h/2"默认值。- mode
设置前进/后退模式。
可用模式为:
- ‘forward’
距离中心点越大,图像越暗。
- ‘backward’
距离中心点越大,图像越亮。这可以用来反转暗角效果,不过尚无自动检测用于提取镜头angle和其他设置(尚未完成)。它也可以用来创造燃烧效果。
默认值是‘forward’.
- eval
设置表达式的评估模式(angle, x0, y0).
接受以下值:
- ‘init’
仅在过滤器初始化期间评估表达式一次。
- ‘frame’
为每个进入的视频帧评估表达式。这比“init”模式慢得多,因为它需要重新计算所有标定值,但它允许高级动态表达式。
默认值为‘init’.
- dither
设置抖动以减少环形条纹效应。默认值为
1(启用)。- aspect
设置渐晕的纵横比。此设置允许调整渐晕的形状。 将此值设置为输入视频的SAR比例可以创建跟随视频尺寸的矩形渐晕效果。
默认值为
1/1.
39.272.1 表达式
The alpha, x0和y0表达式可以包含以下参数。
- w
- h
输入宽度和高度
- n
输入帧的数量,从0开始
- pts
过滤视频帧的PTS(展示时间戳),以TB单位表示,如果未定义则为NAN
- r
输入视频的帧率,如果输入帧率未知则为NAN
- t
过滤的视频帧的PTS(展示时间戳), 以秒为单位表示,如果未定义则为NAN
- tb
输入视频的时间基准
39.272.2 示例
- 应用简单的强渐晕效果:
vignette=PI/4
- 制作闪烁的渐晕效果:
vignette='PI/4+random(1)*PI/50':eval=frame
39.273 vmafmotion
获取视频的平均VMAF运动得分。 这是VMAF的一个组件指标。
通过日志系统打印获得的平均运动得分。
过滤器接受以下选项:
- stats_file
如果指定,过滤器将使用命名文件保存每个帧与前一个帧的运动得分。 当文件名为"-"时,数据发送到标准输出。
示例:
ffmpeg -i ref.mpg -vf vmafmotion -f null -
39.274 vpp_amf
使用AMD高级媒体框架库进行硬件加速,对输入视频进行缩放(调整大小),并转换色彩空间、传输特性或色彩原色。 设置输出宽度和高度的方式与scale过滤器相同。
过滤器接受以下选项:
- w
- h
设置输出视频尺寸表达式。默认值为输入尺寸。
允许使用与scale过滤器相同的表达式。
- scale_type
设置用于缩放的算法:
- 双线性
双线性
这是默认值。
- 双三次
双三次
- format
控制输出像素格式。默认情况下,或者如果未指定,则使用输入像素格式。
- force_original_aspect_ratio
- force_divisible_by
与相同的scale过滤器选项相同。
- reset_sar
与相同的scale过滤器选项相同。
- color_profile
一次性指定所有颜色属性。
接受的值为:
- ‘bt601’
BT.601
- ‘bt709’
BT.709
- ‘bt2020’
BT.2020
- trc
指定输出传输特性。
接受的值为:
- ‘bt709’
BT.709
- ‘gamma22’
常量伽马值为2.2
- ‘gamma28’
常量伽马值为2.8
- ‘smpte170m’
SMPTE-170M
- ‘smpte240m’
SMPTE-240M
- ‘linear’
线性
- ‘log’
日志
- ‘log-sqrt’
LOG_SQRT
- ‘iec61966-2-4’
iec61966-2-4
- ‘bt1361-ecg’
BT1361_ECG
- ‘iec61966-2-1’
iec61966-2-1
- ‘bt2020-10’
BT.2020用于10位内容
- ‘bt2020-12’
BT.2020用于12位内容
- ‘smpte2084’
SMPTE2084
- ‘smpte428’
SMPTE428
- ‘arib-std-b67’
ARIB_STD_B67
- primaries
指定输出色彩原色。
接受的值为:
- ‘bt709’
BT.709
- ‘bt470m’
BT.470M
- ‘bt470bg’
BT.470BG或BT.601-6 625
- ‘smpte170m’
SMPTE-170M或BT.601-6 525
- ‘smpte240m’
SMPTE-240M
- ‘film’
电影
- ‘bt2020’
BT.2020
- ‘smpte428’
SMPTE-428
- ‘smpte431’
SMPTE-431
- ‘smpte432’
SMPTE-432
- ‘jedec-p22’
JEDEC P22荧光粉
39.274.1 示例
- 将输入缩放到720p,保持纵横比并确保输出为yuv420p。
vpp_amf=-2:720:format=yuv420p
- 升至4K并将色彩配置文件更改为bt2020。
vpp_amf=4096:2160:color_profile=bt2020
39.275 vstack
将输入视频垂直堆叠。
所有流必须具有相同的像素格式和宽度。
注意,该过滤器比使用overlay和pad过滤器来创建相同的输出更快。
此过滤器接受以下选项:
- inputs
设置输入流的数量。默认值为2。
- shortest
如果设置为1,则在最短的输入结束时强制输出终止。默认值为0。
39.276 w3fdif
对输入视频进行去隔行处理(“w3fdif”代表“Weston 3场去隔行滤波器”)。
基于BBC研发的Martin Weston描述的过程,并根据Jim Easterbrook为BBC研发编写的去隔行算法实现,Weston 3场去隔行滤波器使用由BBC研发计算的滤波器系数。
此滤波器使用帧中的场主次信息来决定输出中每对场中的哪一个优先。如果判断错误,请使用setfield过滤器应用在w3fdif过滤器之前。
这里有两组滤波器系数,分别称为“简单”和“复杂”。可以通过传递一个可选参数来设置使用哪组滤波器系数:
- filter
设置隔行滤波器系数。接受以下值之一:
- ‘simple’
简单滤波器系数集。
- ‘complex’
更复杂的滤波器系数集。
默认值是‘complex’.
- mode
采用的隔行模式。接受以下值之一:
- frame
每帧输出一帧。
- field
每场输出一帧。
默认值是
field.- parity
假定输入隔行视频的图像场顺序。接受以下值之一:
- tff
假定上场优先。
- bff
假定下场优先。
- auto
启用场顺序的自动检测。
默认值是
auto。 如果隔行信息未知或解码器未导出此信息,将假定为上场优先。- deint
指定要去隔行处理的帧。接受以下值之一:
- ‘all’
去隔行处理所有帧。
- ‘interlaced’
仅对标记为隔行的帧进行去隔行处理。
默认值是‘all’.
39.276.1 命令
此过滤器支持与选项相同的命令。
39.277 波形监视器
视频波形监视器。
波形监视器显示颜色分量强度。默认情况下仅显示亮度。波形的每一列对应于源视频中的一列像素。
它接受以下选项:
- mode, m
可以是
row,或column。默认是column。 在行模式下,左侧的图表示颜色分量值为0,右侧表示值为255。在列模式下,上侧表示颜色分量值为0,下侧表示值为255。- intensity, i
设置强度。较小的值有助于了解相同亮度值如何在输入行/列中分布。 默认值是
0.04。允许范围是[0, 1]。- mirror, r
设置镜像模式。
0表示不镜像,1表示镜像。 在镜像模式下,较高的值将在row模式的左侧显示,在column模式的顶部显示。默认是1(镜像)。- display, d
设置显示模式。 接受以下值:
- ‘overlay’
显示与
parade中相同的信息, 但表示颜色分量的图表直接重叠在一起。这种显示模式可以更容易地发现颜色分量中重叠区域的相对差异或相似性,这些相应区域应为中性白、灰或黑色。
- ‘stack’
在
row模式中,颜色分量的单独图表并排显示,或在column模式下,一个在另一个之下。- ‘parade’
在
column模式中,颜色分量的单独图表并排显示,或在row模式下,一个在另一个之下。使用这种显示模式可以通过比较每个波形顶部和底部的轮廓,在图像的高光和阴影中轻松发现颜色偏差。由于白色、灰色和黑色的特点是红、绿、蓝的数量完全相等,图片的中性区域应该显示出大致相等宽度/高度的三个波形。如果不是这样,可以通过调整让三个波形的水平来轻松修正。
默认是
stack.- components, c
设置要显示的颜色分量。默认值是1,这意味着仅显示亮度,或输入为RGB颜色空间的情况下显示红色分量。例如,设置为7时,显示所有三个(如果有的话)可用颜色分量。
- envelope, e
- ‘none’
无包络,这是默认设置。
- ‘instant’
即时包络,图表中显示的最小值和最大值即使在较小的
step值时也易于看见。- ‘peak’
跨时间保持图表中显示的最小值和最大值。这样可以在不需要不断查看波形的情况下仍观察到超出范围的值。
- ‘peak+instant’
峰值与即时包络相结合。
- filter, f
- ‘lowpass’
无过滤,这是默认设置。
- ‘flat’
亮度和色度合并在一起。
- ‘aflat’
与上述类似,但显示蓝色与红色色度之间的差异。
- ‘xflat’
与上述类似,但使用不同的颜色。
- ‘yflat’
与上述类似,但再次使用不同的颜色。
- ‘chroma’
仅显示色度。
- ‘color’
在波形上显示实际颜色值。
- ‘acolor’
与上述类似,但亮度显示色度值的频率。
- graticule, g
设置显示的刻度线。
- ‘none’
不显示刻度线。
- ‘green’
显示绿色刻度线,表示合法广播范围。
- ‘orange’
显示橙色刻度线,表示合法广播范围。
- ‘invert’
显示反转刻度线,表示合法广播范围。
- opacity, o
设置刻度线的不透明度。
- flags, fl
设置刻度线标志。
- ‘numbers’
在刻度线上方绘制数字。默认是启用的。
- ‘dots’
用点代替线。
- scale, s
设置用于显示刻度线的比例。
- ‘digital’
- ‘millivolts’
- ‘ire’
默认是数字。
- bgopacity, b
设置背景不透明度。
- tint0, t0
- tint1, t1
设置输出的色调。 仅在低通滤波器与非叠加显示模式以及输入像素格式不是RGB时使用。
- fitmode, fm
设置视频输出帧的采样纵横比。 可以将波形配置为在某个方向上不被拉伸过多。
- ‘none’
将采样纵横比设为1/1。
- ‘size’
将采样纵横比设为匹配视频的输入大小。
默认是‘none’.
- input
为过滤器设置要选择的输入格式。 可以是‘all’,表示从所有可用格式中选择, 或‘first’,表示选择第一个可用格式。 默认是‘first’.
39.278 梳状交织,双梳状交织
该weave过滤器接收场为单位的视频输入,将每两个连续场合并成一帧,生成一个新的视频,高度加倍,但帧率和帧数减半。
该doubleweave过滤器与上述工作方式相同。weave但不会减少帧速率和帧数。
它接受以下选项:
- first_field
设置第一个场。可用值为:
- ‘top, t’
将帧设置为顶场优先。
- ‘bottom, b’
将帧设置为底场优先。
39.278.1 示例
39.279 xbr
应用xBR高质量缩放滤镜,该滤镜设计用于像素艺术。它遵循一套边缘检测规则,请参阅https://forums.libretro.com/t/xbr-algorithm-tutorial/123.
它接受以下选项:
- n
设置缩放维度:
2对于2xBR,3对于3xBR和4对于4xBR。 默认值是3.
39.280 xcorrelate
对第一和第二输入视频流应用归一化互相关。
第二个输入视频流的尺寸必须小于第一个输入视频流。
该滤镜接受以下选项:
- planes
设置要处理的平面。
- secondary
设置将从第二个输入视频流中处理的次要视频帧,可以是第一个或所有。默认值是所有.
该xcorrelate滤镜还支持帧同步选项。
39.281 xfade
从一个输入视频流到另一个输入视频流应用交叉淡化效果。 交叉淡化针对指定的持续时间应用。
两个输入必须是固定帧率且具有相同的分辨率、像素格式、帧率和时间基准。
该滤镜接受以下选项:
- transition
设置一种可用的过渡效果:
- ‘custom’
- ‘fade’
- ‘wipeleft’
- ‘wiperight’
- ‘wipeup’
- ‘wipedown’
- ‘slideleft’
- ‘slideright’
- ‘slideup’
- ‘slidedown’
- ‘circlecrop’
- ‘rectcrop’
- ‘distance’
- ‘fadeblack’
- ‘fadewhite’
- ‘radial’
- ‘smoothleft’
- ‘smoothright’
- ‘smoothup’
- ‘smoothdown’
- ‘circleopen’
- ‘circleclose’
- ‘vertopen’
- ‘vertclose’
- ‘horzopen’
- ‘horzclose’
- ‘dissolve’
- ‘pixelize’
- ‘diagtl’
- ‘diagtr’
- ‘diagbl’
- ‘diagbr’
- ‘hlslice’
- ‘hrslice’
- ‘vuslice’
- ‘vdslice’
- ‘hblur’
- ‘fadegrays’
- ‘wipetl’
- ‘wipetr’
- ‘wipebl’
- ‘wipebr’
- ‘squeezeh’
- ‘squeezev’
- ‘zoomin’
- ‘fadefast’
- ‘fadeslow’
- ‘hlwind’
- ‘hrwind’
- ‘vuwind’
- ‘vdwind’
- ‘coverleft’
- ‘coverright’
- ‘coverup’
- ‘coverdown’
- ‘revealleft’
- ‘revealright’
- ‘revealup’
- ‘revealdown’
默认的过渡效果是淡化。
- duration
设置交叉淡化的持续时间,以秒为单位。 范围是0到60秒。 默认持续时间是1秒。
- offset
设置交叉淡化相对于第一个输入流的开始时间,以秒为单位。 默认偏移是0。
- expr
设置自定义过渡效果的表达式。
表达式可以使用以下变量和函数:
- X
- Y
当前样本的坐标。
- W
- H
图像的宽度和高度。
- P
过渡效果的进度。
- PLANE
当前处理的平面。
- A
返回当前位置和平面上的第一输入的值。
- B
返回当前位置和平面上的第二输入的值。
- a0(x, y)
- a1(x, y)
- a2(x, y)
- a3(x, y)
返回第一个输入在位置 (x,y) 的 第一个/第二个/第三个/第四个组件的像素值。
- b0(x, y)
- b1(x, y)
- b2(x, y)
- b3(x, y)
返回第二个输入在位置 (x,y) 的 第一个/第二个/第三个/第四个组件的像素值。
39.281.1 示例
- 从一个输入视频到另一个输入视频进行交叉淡化,使用淡化过渡效果,过渡持续2秒,起始偏移为5秒:
ffmpeg -i first.mp4 -i second.mp4 -filter_complex xfade=transition=fade:duration=2:offset=5 output.mp4
39.282 xmedian
从多个输入视频中挑选出中值像素。
该滤镜接受以下选项:
- inputs
设置输入数量。 默认是3。允许范围是3到255。 如果输入数量是偶数,则结果将是两个中值之间的平均值。
- planes
设置要过滤的平面。默认值是
15,由此处理所有平面。- percentile
设置中值分位数。默认值是
0.5。 默认值0.5将始终选择中值,而0将选择 最小值,1选择最大值。
39.282.1 命令
该滤镜支持所有上述选项作为命令,但不包括选项inputs.
39.283 xpsnr
获取两个输入视频之间所有输入帧的平均值(跨所有颜色平面的平均值)和最小值(跨所有颜色平面平均值)的扩展感知加权峰值信噪比(XPSNR)。
XPSNR是一种低复杂度心理视觉驱动的失真测量算法,用于评估两个视频流或图像之间的差异。这在定量衡量视频和图像编解码器引起的失真的客观评估中特别有用,作为正式主观测试的替代方案。输出的对数XPSNR值与传统psnr评估的值范围类似,但更能反映人类对视觉编码质量的印象。关于XPSNR测量的更多细节,即PSNR测量的区块加权变体,可以在以下免费提供的文章中找到:
- C. R. Helmrich, M. Siekmann, S. Becker, S. Bosse, D. Marpe, 和 T. Wiegand,"XPSNR:一种低复杂度扩展感知加权峰值信噪比的高分辨率视频质量评估,"发表在IEEE国际会议声学、语音、信号处理(ICASSP),在线虚拟,2020年5月。www.ecodis.de/xpsnr.htm
- C. R. Helmrich, S. Bosse, H. Schwarz, D. Marpe, 和 T. Wiegand,"不同分辨率和位深度的视频压缩感知加权峰值信噪比扩展研究(XPSNR),"ITU期刊:ICT发现,卷3,第一期,页65 - 72,2020年5月。http://handle.itu.int/11.1002/pub/8153d78b-en
当使用例如该FFmpeg滤镜获得的XPSNR评估结果进行发布时,强烈建议参考上述文章作为一种文档方式。该滤镜需要两个输入视频。第一个输入通常被认为是未失真的参考源,并以原样传递到输出,而第二个输入则是失真的测试信号。除了位深度外,这两个视频输入必须具有相同的像素格式。此外,为了获得最佳性能,两个比较的输入视频应该采用YCbCr颜色格式。
上述获得的整体XPSNR值通过日志系统进行打印。如果输入包含多个颜色平面,我们建议报道最小的XPSNR平均值。
以下参数,可像用于psnr滤镜那样,予以接受:
- stats_file, f
如果指定,滤镜将使用命名文件保存每个个别帧和颜色平面的XPSNR值。当文件名为"-"时,数据将发送到标准输出。
该滤镜也支持帧同步选项。
39.283.1 示例
- 对两个1080p高清视频ref_source.yuv和test_video.yuv进行XPSNR分析,两者帧率均为24,颜色格式为4:2:0,位深度为8,并输出一个名为"xpsnr.log"的日志文件:
ffmpeg -s 1920x1080 -framerate 24 -pix_fmt yuv420p -i ref_source.yuv -s 1920x1080 -framerate 24 -pix_fmt yuv420p -i test_video.yuv -lavfi xpsnr="stats_file=xpsnr.log" -f null -
- 对两个2160p超高清视频ref_source.yuv(位深度为8)和test_video.yuv(位深度为10)进行XPSNR分析,两者帧率均为60,颜色格式为4:2:0,无日志文件输出:
ffmpeg -s 3840x2160 -framerate 60 -pix_fmt yuv420p -i ref_source.yuv -s 3840x2160 -framerate 60 -pix_fmt yuv420p10le -i test_video.yuv -lavfi xpsnr="stats_file=-" -f null -
39.284 xstack
将视频输入叠加成自定义布局。
所有视频流必须使用相同的像素格式。
此过滤器接受以下选项:
- inputs
设置输入视频流的数量。默认值为2。
- layout
指定输入的布局。 此选项要求用户明确设置所需的布局配置。 这用于设置每个视频输入在输出中的位置。每个输入 通过’|’分隔。 第一个数字表示列,第二个数字表示行。 数字从0开始,并通过’_’分隔。可选地,用户可以使用 wX 和 hX, 其中 X 是从视频输入中提取宽度或高度。 多个值可通过 ’+’ 分隔使用。在这种 情况下,这些值将被相加。
请注意,如果输入大小不同可能会出现空隙,因为并不是所有的 输出视频帧都会被填满。同样,如果视频的位置没有足够的空间容纳 相邻视频的完整帧,它们可能会相互重叠。
对于两个输入,默认布局为
0_0|w0_0(相当于grid=2x1)。在所有其他情况下,用户必须设置布局或网格。只能设置grid或layout中的一个。 同时指定两者将导致错误。- grid
指定固定大小的输入网格。 此选项用于创建固定大小的输入流网格。设置网格大小为
COLUMNSxROWS的形式。必须有ROWS * COLUMNS个输入视频流,它们将被排列为一个拥有ROWS行和COLUMNS列的网格。在使用此选项时, 每一行中的每个输入视频流必须具有相同高度,并且所有行的宽度必须相同。如果
grid被设置,则inputs选项将被忽略,并隐式设置为ROWS * COLUMNS.对于两个输入,默认网格为
2x1(相当于layout=0_0|w0_0)。在所有其他情况下,用户必须设置布局或网格。只能设置grid或layout中的一个。 同时指定两者将导致错误。- shortest
如果设置为1,强制在最短输入终止时输出终止。默认值为0。
- fill
如果设置为有效颜色,所有未使用的像素将填充为该颜色。 默认填充设置为无,因此被禁用。
39.284.1 示例
- 将4个输入显示为2x2网格。
布局:
input1(0, 0) | input3(w0, 0) input2(0, h0) | input4(w0, h0)
xstack=inputs=4:layout=0_0|0_h0|w0_0|w0_h0
请注意,如果输入大小不同,可能会出现空隙或重叠。
- 将4个输入显示为1x4网格。
布局:
input1(0, 0) input2(0, h0) input3(0, h0+h1) input4(0, h0+h1+h2)
xstack=inputs=4:layout=0_0|0_h0|0_h0+h1|0_h0+h1+h2
请注意,如果输入宽度不同,将会出现未使用的空间。
- 将9个输入显示为3x3网格。
布局:
input1(0, 0) | input4(w0, 0) | input7(w0+w3, 0) input2(0, h0) | input5(w0, h0) | input8(w0+w3, h0) input3(0, h0+h1) | input6(w0, h0+h1) | input9(w0+w3, h0+h1)
xstack=inputs=9:layout=0_0|0_h0|0_h0+h1|w0_0|w0_h0|w0_h0+h1|w0+w3_0|w0+w3_h0|w0+w3_h0+h1
请注意,如果输入大小不同,可能会出现空隙或重叠。
- 将16个输入显示为4x4网格。
布局:
input1(0, 0) | input5(w0, 0) | input9 (w0+w4, 0) | input13(w0+w4+w8, 0) input2(0, h0) | input6(w0, h0) | input10(w0+w4, h0) | input14(w0+w4+w8, h0) input3(0, h0+h1) | input7(w0, h0+h1) | input11(w0+w4, h0+h1) | input15(w0+w4+w8, h0+h1) input4(0, h0+h1+h2)| input8(w0, h0+h1+h2)| input12(w0+w4, h0+h1+h2)| input16(w0+w4+w8, h0+h1+h2)
xstack=inputs=16:layout=0_0|0_h0|0_h0+h1|0_h0+h1+h2|w0_0|w0_h0|w0_h0+h1|w0_h0+h1+h2|w0+w4_0| w0+w4_h0|w0+w4_h0+h1|w0+w4_h0+h1+h2|w0+w4+w8_0|w0+w4+w8_h0|w0+w4+w8_h0+h1|w0+w4+w8_h0+h1+h2
请注意,如果输入大小不同,可能会出现空隙或重叠。
39.285 yadif
对输入视频进行去隔行处理(“yadif”意为“又一个去隔行过滤器”)。
它接受以下参数:
- mode
要采用的隔行模式。它接受以下值之一:
- 0, send_frame
每帧输出一个帧。
- 1, send_field
每场输出一个帧。
- 2, send_frame_nospatial
类似于
send_frame,但跳过空间隔行检查。- 3, send_field_nospatial
类似于
send_field,但跳过空间隔行检查。
默认值为
send_frame.- parity
输入隔行视频所假定的图像场的顺序。它接受以下值之一:
- 0, tff
假定顶部场先出现。
- 1, bff
假定底部场先出现。
- -1, auto
启用自动检测场的顺序。
默认值为
auto。 如果隔行状态未知或解码器未导出该信息,将假定为顶部场优先。- deint
指定要去隔行的帧。接受以下值之一:
- 0, all
去隔行所有帧。
- 1, interlaced
仅去隔行标记为隔行的帧。
默认值为
all.
39.286 yaepblur
在保留边缘的情况下应用模糊过滤器(“yaepblur”意为“又一个边缘保留模糊过滤器”)。 该算法描述在 《J. S. Lee, 基于局部统计的数字图像增强和噪声过滤,IEEE Trans. Pattern Anal. Mach. Intell. PAMI-2, 1980》中。
它接受以下参数:
- radius, r
设置窗口半径。默认值为3。
- planes, p
设置要过滤的色彩平面。默认仅处理第一个平面。
- sigma, s
设置模糊强度。默认值为128。
39.286.1 命令
此过滤器支持与选项相同的命令。
39.287 zoompan
应用缩放和平移效果。
此过滤器接受以下选项:
- zoom, z
设置缩放表达式。范围为1-10。默认值为1。
- x
- y
设置x和y的表达式。默认值为0。
- d
设置帧数表示的持续时间。 这设置单个输入图像的效果持续的帧数。默认值为90。
- s
设置输出图像大小,默认值为‘hd720’。
- fps
设置输出帧率,默认值为‘25’。
每个表达式可以包含以下常量:
- in_w, iw
输入宽度。
- in_h, ih
输入高度。
- out_w, ow
输出宽度。
- out_h, oh
输出高度。
- in
输入帧计数。
- on
输出帧计数。
- in_time, it
以秒为单位的输入时间戳。如果输入时间戳未知,则为NAN。
- out_time, time, ot
以秒为单位的输出时间戳。
- x
- y
当前输入帧由'x'和'y'表达式计算的最后一个'x'和'y'位置。
- px
- py
上一输入帧的最后一个输出帧的“x”和“y”,或者在第一次输入帧时为0。
- zoom
当前输入帧由“z”表达式计算的最后一个缩放值。
- pzoom
上一输入帧的最后一个输出帧的最后一个计算缩放值。
- duration
为当前输入帧生成的输出帧数量。对每个输入帧基于“d”表达式计算。
- pduration
上一输入帧生成的输出帧数
- a
有理数:输入宽度 / 输入高度
- sar
样本纵横比
- dar
显示纵横比
39.287.1 示例
- 最多放大到1.5倍,同时平移到图片中心附近。
zoompan=z='min(zoom+0.0015,1.5)':d=700:x='if(gte(zoom,1.5),x,x+1/a)':y='if(gte(zoom,1.5),y,y+1)':s=640x360
- 最多放大到1.5倍,始终平移到图片中心。
zoompan=z='min(zoom+0.0015,1.5)':d=700:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
- 与上例相同,但不暂停。
zoompan=z='min(max(zoom,pzoom)+0.0015,1.5)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
- 仅在输入视频的第一秒内,放大到图片中心2倍。
zoompan=z='if(between(in_time,0,1),2,1)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
39.288 zscale 缩放
使用 z.lib 库对输入视频进行缩放(调整大小):https://github.com/sekrit-twc/zimg。 要启用此滤镜的编译,需要使用以下配置编译 FFmpeg:--enable-libzimg.
zscale 滤镜通过更改输出样本长宽比,强制输出显示的长宽比与输入一致。
如果输入图像格式与下一个滤镜要求的格式不同,zscale 滤镜会将输入转换为所需格式。
39.288.1 选项
滤镜接受以下选项。
- width, w
- height, h
设置输出视频的尺寸表达式。默认值为输入尺寸。
如果宽度或者w值为 0,则输出使用输入宽度。如果高度或者h值为 0,则输出使用输入高度。
如果只有一个值为 -n 且 n >= 1,则 zscale 滤镜将使用一个值,该值保持输入图像的长宽比,并根据其他指定维度来计算。之后,它会确保计算得到的尺寸能被 n 整除,并在必要时调整该值。
如果两个值都是 -n 且 n >= 1,行为将与两个值均设置为 0 的情况相同,如上所述。
下面列出了尺寸表达式中可接受的常量列表。
- size, s
设置视频尺寸。有关此选项的语法,请参阅(ffmpeg-utils)ffmpeg-utils 手册中的“视频尺寸 (Video size)”一节.
- dither, d
设置抖动类型。
可能的值为:
- 无
- 有序
- 随机
- 误差扩散
默认值是无。
- filter, f
设置调整大小的滤镜类型。
可能的值为:
- 点采样
- 双线性
- 双三次
- 样条16
- 样条36
- 兰索斯
默认值是双线性。
- range, r
设置颜色范围。
可能的值为:
- 输入
- 有限
- 完全
默认值与输入相同。
- primaries, p
设置颜色基准。
可能的值为:
- 输入
- 709
- 未指定
- 170m
- 240m
- 2020
默认值与输入相同。
- transfer, t
设置传输特性。
可能的值为:
- 输入
- 709
- 未指定
- 601
- 线性
- 2020_10
- 2020_12
- smpte2084
- iec61966-2-1
- arib-std-b67
默认值与输入相同。
- matrix, m
设置色彩空间矩阵。
可能的值为:
- 输入
- 709
- 未指定
- 470bg
- 170m
- 2020_ncl
- 2020_cl
默认值与输入相同。
- rangein, rin
设置输入的颜色范围。
可能的值为:
- 输入
- 有限
- 完全
默认值与输入相同。
- primariesin, pin
设置输入的颜色基准。
可能的值为:
- 输入
- 709
- 未指定
- 170m
- 240m
- 2020
默认值与输入相同。
- transferin, tin
设置输入的传输特性。
可能的值为:
- 输入
- 709
- 未指定
- 601
- 线性
- 2020_10
- 2020_12
默认值与输入相同。
- matrixin, min
设置输入的色彩空间矩阵。
可能的值为:
- 输入
- 709
- 未指定
- 470bg
- 170m
- 2020_ncl
- 2020_cl
- chromal, c
设置输出的色度位置。
可能的值为:
- 输入
- 左
- 居中
- 左上
- 上
- 左下
- 下
- chromalin, cin
设置输入的色度位置。
可能的值是:
- 输入
- 左
- 居中
- 左上
- 上
- 左下
- 下
- npl
设置标称峰值亮度。
- param_a
用于缩放滤镜的参数A。“b”参数用于双三次滤波,“taps”数量用于兰佐斯滤波。
- param_b
用于缩放滤镜的参数B。“c”参数用于双三次滤波。
的值w和h选项是包含以下常量的表达式:
- 输入宽度(in_w)
- 输入高度(in_h)
输入的宽度和高度
- 输入宽度(iw)
- 输入高度(ih)
它们与输入宽度(in_w)和输入高度(in_h)相同.
- 输出宽度(out_w)
- 输出高度(out_h)
输出(缩放后)的宽度和高度
- 输出宽度(ow)
- 输出高度(oh)
它们与输出宽度(out_w)和输出高度(out_h)相同
- 参数a
与输入宽度(iw) / 输入高度(ih)相同
- sar
输入样本长宽比
- dar
输入显示长宽比。由以下计算所得
(iw / ih) * sar.- hsub
- vsub
水平和垂直输入色度子采样值。比如对于像素格式“yuv422p”hsub为2,vsub为1。
- ohsub
- ovsub
水平和垂直输出色度子采样值。比如对于像素格式“yuv422p”hsub为2,vsub为1。
39.288.2 命令
该滤镜支持以下命令:
- width, w
- height, h
设置输出视频尺寸表达式。 该命令接受与对应选项相同的语法。
如果指定的表达式无效,当前值将保持不变。
40 CUDA 视频滤镜
要启用CUDA和/或NPP滤镜,请参阅以下配置指南:CUDA及CUDA NPP滤镜。
运行CUDA滤镜需要初始化硬件设备并将该设备传递给任何滤镜图中的所有滤镜。
- -init_hw_device cuda[=名称][:设备[,键值对(key=value)...]]
初始化一个名为cuda的硬件设备,设备名为名称, 并使用指定的设备参数。
- -filter_hw_device 名称
将名为名称的硬件设备传递给任何滤镜图中的所有滤镜。
有关更详细的信息,请参阅https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options
- 举例:初始化系统上的第二个CUDA设备并运行scale_cuda和bilateral_cuda滤镜。
./ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -init_hw_device cuda:1 -filter_complex \ "[0:v]scale_cuda=format=yuv444p[scaled_video];[scaled_video]bilateral_cuda=window_size=9:sigmaS=3.0:sigmaR=50.0" \ -an -sn -c:v h264_nvenc -cq 20 out.mp4
由于CUDA滤镜专门对GPU内存操作,帧数据有时需要上传(硬件上传(hwupload))到与适当CUDA设备关联的硬件表面进行处理,并在之后如果需要,再从正常内存下载(硬件下载(hwdownload))。是否需要硬件上传(hwupload)或硬件下载(hwdownload)取决于具体的工作流程:
- 如果输入帧已处于GPU内存中(例如,当使用
-hwaccel cuda或-hwaccel_output_format cuda时),则显式使用硬件上传(hwupload)不需要,因为数据已经在合适的内存空间中。 - 如果输入帧在CPU内存中(例如,通过软件解码的帧或由基于CPU的滤镜处理的帧),则需要使用hwupload将数据转移到GPU内存以进行CUDA处理。
- 如果CUDA滤镜的输出需要进一步由基于软件的滤镜处理或保存为GPU编码器不支持的格式,hwdownload需要将数据转移回CPU内存。
请注意,hwupload将数据上传到与软件帧布局相同的表面,因此可能需要在format滤镜之前立即添加一个hwupload以确保输入格式正确。同样,hwdownload可能不支持所有输出格式,因此可能需要在format滤镜后面紧接着插入一个hwdownload以确保兼容性。
40.1 CUDA
以下是当前可用的Nvidia CUDA视频滤镜的描述。
先决条件:
- 安装Nvidia CUDA Toolkit
注意:如果FFmpeg在配置期间检测到Nvidia CUDA Toolkit,它将自动启用CUDA滤镜,而无需任何附加标志。如果希望显式启用它们,请使用以下选项:
- 配置FFmpeg时使用
--enable-cuda-nvcc --enable-nonfree. - 配置FFmpeg时使用
--enable-cuda-llvm。额外要求:llvm必须安装lib。
40.1.1 bilateral_cuda
CUDA加速双边滤镜,一种保留边缘的滤镜。 通过使用GPU加速,该滤镜数学上是准确的。 为获得最佳输出质量,请使用一对一的色度抽样,例如yuv444p格式。
滤镜接受以下选项:
- sigmaS
设置用于计算空间权重的高斯函数的sigma,也称为sigma空间。 允许范围为0.1到512。默认值为0.1。
- sigmaR
设置用于计算颜色范围权重的高斯函数的sigma,也称为sigma颜色。 允许范围为0.1到512。默认值为0.1。
- window_size
设置双边函数的窗口大小,以决定要循环的邻居数量。 如果输入的数字是偶数,将自动加1。 允许范围为1到255。默认值为1。
40.1.1.1 示例
- 对视频应用双边滤镜。
./ffmpeg -v verbose \ -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \ -init_hw_device cuda \ -filter_complex \ " \ [0:v]scale_cuda=format=yuv444p[scaled_video]; [scaled_video]bilateral_cuda=window_size=9:sigmaS=3.0:sigmaR=50.0" \ -an -sn -c:v h264_nvenc -cq 20 out.mp4
40.1.2 bwdif_cuda
使用bwdif算法对输入视频进行去隔行处理,但在CUDA中实现, 这样它可以与nvdec和/或nvenc一起作为GPU加速管道的一部分工作。
它接受以下参数:
- mode
采用的隔行模式。它接受以下值之一:
- 0, send_frame
每帧输出一个帧。
- 1, send_field
每场输出一个帧。
默认值为
send_field.- parity
输入隔行视频的画面场顺序假设。它接受以下值之一:
- 0, tff
假设顶场优先。
- 1, bff
假设底场优先。
- -1, auto
启用场顺序的自动检测。
默认值为
auto。 如果隔行状况未知或解码器未导出此信息,将假设顶场优先。- deint
指定需要去隔行处理的帧。接受以下值之一:
- 0, all
去隔行处理所有帧。
- 1, interlaced
仅去隔行处理标记为隔行的帧。
默认值为
all.
40.1.3 chromakey_cuda
CUDA加速的YUV色彩空间颜色/色度键。
此滤镜的工作方式类似于普通的chromakey滤镜,但在CUDA帧上运行。 有关更多详细信息和参数,请参见chromakey.
40.1.3.1 示例
- 将输入视频中的所有绿色像素变为透明并用作另一个视频的叠加层:
./ffmpeg \ -hwaccel cuda -hwaccel_output_format cuda -i input_green.mp4 \ -hwaccel cuda -hwaccel_output_format cuda -i base_video.mp4 \ -init_hw_device cuda \ -filter_complex \ " \ [0:v]chromakey_cuda=0x25302D:0.1:0.12:1[overlay_video]; \ [1:v]scale_cuda=format=yuv420p[base]; \ [base][overlay_video]overlay_cuda" \ -an -sn -c:v h264_nvenc -cq 20 output.mp4 - 处理两个软件源,显式上传帧:
./ffmpeg -init_hw_device cuda=cuda -filter_hw_device cuda \ -f lavfi -i color=size=800x600:color=white,format=yuv420p \ -f lavfi -i yuvtestsrc=size=200x200,format=yuv420p \ -filter_complex \ " \ [0]hwupload[under]; \ [1]hwupload,chromakey_cuda=green:0.1:0.12[over]; \ [under][over]overlay_cuda" \ -c:v hevc_nvenc -cq 18 -preset slow output.mp4
40.1.4 colorspace_cuda
一种CUDA加速的colorspace滤镜实现。
与软件colorspace滤镜相比,它绝不是功能齐全的, 目前仅支持JPEG/全范围与MPEG/有限范围之间的颜色范围转换。
滤镜接受以下选项:
- range
指定输出颜色范围。
接受的值为:
- ‘tv’
电视(限制)范围
- ‘mpeg’
MPEG(限制)范围
- ‘pc’
PC(全)范围
- ‘jpeg’
JPEG(全)范围
40.1.5 overlay_cuda
将一个视频覆盖到另一个视频上。
这是overlay滤镜的CUDA变体。 它只接受CUDA帧。底层输入像素格式必须匹配。
它接受两个输入并有一个输出。第一个输入是“主” 视频,第二个输入将被覆盖到主视频上。
它接受以下参数:
- x
- y
为叠加视频在主视频上的x和y坐标设置表达式。
它们可以包含以下参数:
- main_w, W
- main_h, H
主输入宽度和高度。
- overlay_w, w
- overlay_h, h
叠加输入宽度和高度。
- x
- y
计算的x和y值。它们针对每个新帧进行评估。
- n
主输入帧的序号索引,从0开始。
- pos
主输入帧的文件中的字节偏移位置,如果未知则为NAN。 已弃用,请勿使用。
- t
主输入帧的时间戳,以秒为单位表示,如果未知则为NAN。
默认值为“0”,用于两者表达式。
- eval
设置评估表达式时的情况。x和y。
它接受以下值:
- init
在滤镜初始化或处理命令时评估表达式一次。
- frame
针对每个传入帧评估表达式
默认值为frame.
- eof_action
查看帧同步.
- shortest
查看帧同步.
- repeatlast
查看帧同步.
此滤镜还支持帧同步选项。
40.1.6 scale_cuda
使用加速的CUDA内核缩放(调整大小)并转换(像素格式)输入视频。 设置输出宽度和高度的工作方式与放缩滤镜相同。
该滤镜接受以下选项:
- w
- h
设置输出视频的维度表达式。默认值是输入的维度。
允许使用与放缩滤镜相同的表达式。
- interp_algo
设置用于缩放的算法:
- 最近邻
最近邻
如果输入参数与期望输出相符时默认使用。
- 双线性
双线性
- 双三次
双三次
这是默认值。
- Lanczos
Lanczos
- format
控制输出像素格式。默认情况下,或如果未指定,则使用输入的像素格式。
该滤镜不支持在YUV和RGB像素格式之间进行转换。
- passthrough
如果设置为0,即使没有必要的转换,每帧也将被处理。 此模式可以用作一个缓冲区,供下游帧-消费者用尽有限的解码器帧池时使用。
如果设置为1,当帧与期望输出参数匹配时,直接通过而不做任何修改。这是默认行为。
- param
算法特定参数。
影响双三次算法的曲线。
- force_original_aspect_ratio
- force_divisible_by
与相同的放缩滤镜选项相同。
- reset_sar
与相同的放缩滤镜选项相同。
40.1.6.1 示例
- 将输入缩放到720p,保持宽高比并确保输出为yuv420p。
scale_cuda=-2:720:format=yuv420p
- 使用最近邻算法将分辨率放大至4K。
scale_cuda=4096:2160:interp_algo=nearest
- 不做任何转换或缩放,而是将所有输入帧复制到新分配的帧中。
这可以用来处理可能会用尽解码器帧池的滤镜和编码链。
scale_cuda=passthrough=0
40.1.7 thumbnail_cuda
使用CUDA在一组连续帧中选择最具代表性的帧。
该滤镜接受以下选项:
- n
设置要分析的帧批量大小;在一组n帧中,该滤镜 将从中选择其中一帧,然后处理下一组n帧,直到结束。默认值是
100.
由于滤镜需要跟踪整个帧序列,较大的n值会导致较高的内存使用,因此不建议使用较高的值。
40.1.7.1 示例
- 从每个n=150帧的批次中提取缩略图,每批次选择一帧。然后用scale_cuda.
./ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i ./input.mp4 -vf "thumbnail_cuda=150,scale_cuda=1920:1080,hwdownload,format=nv12" ./output/out%03d.png
40.1.8 yadif_cuda
使用yadif算法对输入视频进行去交错,但在CUDA中实现,因此可以作为一个与nvdec和/或nvenc的GPU加速管道的一部分工作。
它接受以下参数:
- mode
采用的交错模式。接受以下值之一:
- 0, send_frame
每帧输出一帧。
- 1, send_field
每字段输出一帧。
- 2, send_frame_nospatial
类似于
send_frame,但跳过空间交错检查。- 3, send_field_nospatial
类似于
send_field,但跳过空间交错检查。
默认值是
send_frame.- parity
输入的交错视频假定的图片字段顺序。可以接受以下值之一:
- 0, tff
假定顶部字段优先。
- 1, bff
假定底部字段优先。
- -1, auto
启用字段顺序的自动检测。
默认值是
auto。 如果交错模式未知或解码器未导出此信息,则假定顶字段优先。- deint
指定需要去交错的帧。接受以下值之一:
- 0, all
去交错所有帧。
- 1, interlaced
仅去交错标记为交错的帧。
默认值是
all.
40.2 CUDA NPP
以下是当前可用的NVIDIA性能原语(libnpp)视频滤镜的说明。
前置条件:
- 安装Nvidia CUDA工具包
- 安装libnpp
启用CUDA NPP滤镜:
- 使用以下配置编译FFmpeg
--enable-nonfree --enable-libnpp.
40.2.1 scale_npp
使用NVIDIA性能原语(libnpp)对CUDA视频帧执行缩放和/或像素格式转换。设置输出宽度和高度的方式与放缩滤镜相同。
接受以下附加选项:
- format
输出CUDA帧的像素格式。如果设置为字符串"same"(默认值),将保留输入格式。请注意,硬件帧目前尚不支持自动格式协商和转换。
- interp_algo
用于缩放的插值算法。以下之一:
- nn
最近邻。
- linear
- cubic
- cubic2p_bspline
2参数立方(B=1, C=0)
- cubic2p_catmullrom
两参数三次函数 (B=0, C=1/2)
- cubic2p_b05c03
两参数三次函数 (B=1/2, C=3/10)
- super
超采样
- lanczos
- force_original_aspect_ratio
启用必要时视频宽度或高度的减少或增加,以保持原始纵横比。可能的值为:
- ‘disable’
按指定比例缩放视频并禁用此功能。
- ‘decrease’
如果需要,输出视频尺寸将自动减少。
- ‘increase’
如果需要,输出视频尺寸将自动增加。
此选项的一个实用例子是,当你知道某个设备允许的最大分辨率时,可以使用此选项来限制输出视频到该分辨率,同时保持纵横比。例如,设备A允许1280x720播放,而你的视频是1920x800。使用此选项(设置为减少)并对命令行指定1280x720,使输出为1280x533。
请注意,这与为w或h指定-1不同,你仍需要为此选项指定输出分辨率才能生效。
- force_divisible_by
确保输出宽度和高度均能被指定整数整除,与force_original_aspect_ratio一起使用时,此功能类似于使用
-n在w与h选项中的效果。此选项尊重为force_original_aspect_ratio设置的值,增加或减少分辨率。这样可能略微修改视频的纵横比。
如果需要视频在指定分辨率内或超过指定分辨率,同时使用force_original_aspect_ratio但还需要考虑编码器对宽度或高度是否可整除的限制,此选项会很有用。
- reset_sar
与相同的scale滤镜选项效果一样。
- eval
指定何时评估宽度与高度表达式。接受以下值:
- ‘init’
仅在滤镜初始化期间或处理命令时评估表达式一次。
- ‘frame’
为每个输入帧评估表达式。
以下是w与h选项的值可包含的表达式常量:
- in_w
- in_h
输入的宽度与高度
- iw
- ih
这些与in_w与in_h.
- out_w
- out_h
输出(缩放后的)宽度与高度
- ow
- oh
这些与out_w与out_h
- a
与iw / ih
- sar
输入采样纵横比
- dar
输入显示纵横比。通过以下计算得出:
(iw / ih) * sar.- n
输入帧的序列号,从0开始。仅在使用
eval=frame.- t
输入帧的显示时间戳(以秒表示)。仅在使用
eval=frame.- pos
帧在输入流中的位置(字节偏移量),或若此信息不可用和/或无意义时返回NaN(例如在合成视频情况下)。仅在使用
eval=frame时可用。已弃用,请勿使用。
40.2.2 scale2ref_npp
使用NVIDIA性能原语(libnpp)基于参考视频来缩放(调整大小)输入视频。
请参阅scale_npp滤镜以了解可用选项,scale2ref_npp支持相同的选项,但以参考视频而非主要输入视频作为基础。scale2ref_npp还支持以下额外的常量用于w与h选项:
- main_w
- main_h
主要输入视频的宽度与高度
- main_a
与main_w / main_h
- main_sar
主要输入视频的采样纵横比
- main_dar, mdar
主要输入视频的显示纵横比。通过以下计算得出:
(main_w / main_h) * main_sar.- main_n
主要输入帧的序列号,从0开始。仅在使用
eval=frame.- main_t
主要输入帧的显示时间戳(以秒表示)。仅在使用
eval=frame.- main_pos
帧在主要输入流中的位置(字节偏移量),或若此信息不可用和/或无意义时返回NaN(例如在合成视频情况下)。仅在使用
eval=frame.
40.2.2.1 示例
- 将字幕流(b)缩放到与主视频(a)大小匹配后再叠加
'scale2ref_npp[b][a];[a][b]overlay_cuda'
- 将徽标缩放到视频高度的1/10,同时保持其显示纵横比。
[logo-in][video-in]scale2ref_npp=w=oh*mdar:h=ih/10[logo-out][video-out]
40.2.3 sharpen_npp
使用NVIDIA性能原语(libnpp)执行带边框控制的图像锐化。
接受以下附加选项:
- border_type
指定在帧边框处使用的采样类型。以下之一:
- replicate
复制像素值。
40.2.4 transpose_npp
在输入视频中将行与列置换并可选地翻转视频。有关更多详细示例,请参阅转置视频滤镜,与大多数相同选项共享。
它接受以下参数:
- dir
指定转置方向。
可以采用以下值:
- ‘cclock_flip’
逆时针旋转90度并垂直翻转。(默认)
- ‘clock’
顺时针旋转90度。
- ‘cclock’
逆时针旋转90度。
- ‘clock_flip’
顺时针旋转90度并垂直翻转。
- passthrough
如果输入几何形状与指定值匹配,则不要应用转置。它接受以下值:
- ‘none’
始终应用转置。(默认)
- ‘portrait’
保留纵向几何形状(当高度 >= 宽度).
- ‘landscape’
保留横向几何形状(当宽度 >= 高度).
41 OpenCL 视频滤镜
以下是当前可用的OpenCL视频滤镜的描述。
要启用这些滤镜的编译,需要使用以下配置FFmpeg:--enable-opencl.
运行OpenCL滤镜需要初始化一个硬件设备,并将该设备传递给任何滤镜图中的所有滤镜。
- -init_hw_device opencl[=名称][:设备[,键=值...]]
初始化一个类型为opencl的新硬件设备,称为名称,使用指定的设备参数。
- -filter_hw_device 名称
将名为名称的硬件设备传递给任何滤镜图中的所有滤镜。
有关更详细信息,请参阅https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options
- 选择第二平台上的第一个设备并使用默认参数运行avgblur_opencl滤镜的示例。
-init_hw_device opencl=gpu:1.0 -filter_hw_device gpu -i INPUT -vf "hwupload, avgblur_opencl, hwdownload" OUTPUT
由于OpenCL滤镜无法访问普通内存中的帧数据,因此所有帧数据都需要上传(hwupload)到连接到适当设备的硬件表面才能使用,然后再下载(hwdownload)返回到普通内存。请注意,hwupload将上传到与软件帧具有相同布局的表面,因此可能需要立即添加一个format滤镜以将输入转换为正确的格式,并且hwdownload不支持输出的所有格式 — 可能需要在图中立即添加一个额外的format滤镜以将输出转换为支持的格式。
41.1 avgblur_opencl
应用平均模糊滤镜。
该滤镜接受以下选项:
- sizeX
设置水平半径大小。 范围是
[1, 1024]并且默认值是1.- planes
设置要过滤的平面。默认值是
0xf,其中所有平面都被处理。- sizeY
设置垂直半径大小。范围是
[1, 1024]并且默认值是0。如果为零,则使用sizeX值。
41.1.1 示例
- 应用平均模糊滤镜,水平和垂直大小均为3,将输出的每个像素设置为输入中以它为中心的7x7区域的平均值。对于图像边缘上的像素,区域不会超出图像边界,因此计算中不会使用超出范围的坐标。
-i INPUT -vf "hwupload, avgblur_opencl=3, hwdownload" OUTPUT
41.2 boxblur_opencl
对输入视频应用盒模糊算法。
它接受以下参数:
- luma_radius, lr
- luma_power, lp
- chroma_radius, cr
- chroma_power, cp
- alpha_radius, ar
- alpha_power, ap
以下是接受选项的描述。
- luma_radius, lr
- chroma_radius, cr
- alpha_radius, ar
为用于模糊相应输入平面的盒半径设置表达式,以像素为单位。
半径值必须为非负数字,并且不得大于表达式的值
min(w,h)/2对于亮度和Alpha平面,以及min(cw,ch)/2对于色度平面。默认值为luma_radius为 "2"。如果未指定,chroma_radius和alpha_radius默认值为为luma_radius.
针对设置的对应值。
- w
- h
输入宽度和高度(像素)。
- cw
- ch
输入色度图像的宽度和高度(像素)。
- hsub
- vsub
水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub是2,vsub是1。
- luma_power, lp
- chroma_power, cp
- alpha_power, ap
指定盒模糊滤镜应用到对应平面的次数。
默认值为luma_power是2。如果未指定,chroma_power和alpha_power默认值为为luma_power.
设置的对应值。值为0将禁用效果。
41.2.1 示例
应用盒模糊滤镜,将输出的每个像素设置为亮度半径, 色度半径, Alpha半径分别对应每个平面的平均值。滤镜将应用亮度功率, 色度功率, Alpha功率次到对应平面。对于图像边缘上的像素,半径不会超出图像边界,因此计算中不会使用超出范围的坐标。
- 应用盒模糊滤镜,亮度、色度和Alpha半径均设置为2,亮度、色度和Alpha功率均设置为3。滤镜将运行3次,盒半径设置为图像每个平面的2。
-i INPUT -vf "hwupload, boxblur_opencl=luma_radius=2:luma_power=3, hwdownload" OUTPUT -i INPUT -vf "hwupload, boxblur_opencl=2:3, hwdownload" OUTPUT
- 应用盒模糊滤镜,亮度半径设置为2,亮度功率设置为1,色度半径设置为4,色度功率设置为5,Alpha半径设置为3,Alpha功率设置为7。
对于亮度平面,将运行一次2x2盒子半径。
对于色度平面,将运行5次4x4盒子半径。
对于透明度平面,将运行7次3x3盒子半径。
-i INPUT -vf "hwupload, boxblur_opencl=2:1:4:5:3:7, hwdownload" OUTPUT
41.3 colorkey_opencl
RGB色彩空间的色键处理。
该滤镜接受以下选项:
- color
将被替换为透明的颜色。
- similarity
与键颜色的相似度百分比。
0.01只匹配完全相同的键颜色,而1.0匹配所有颜色。
- blend
混合百分比。
0.0使像素要么完全透明,要么完全不透明。
较高的值会导致像素呈现半透明状态,像素颜色与键颜色越相似,透明度越高。
41.3.1 示例
- 让输入中每个接近绿色的像素透明并稍微混合:
-i INPUT -vf "hwupload, colorkey_opencl=green:0.3:0.1, hwdownload" OUTPUT
41.4 convolution_opencl
应用3x3、5x5、7x7矩阵的卷积。
该滤镜接受以下选项:
- 0m
- 1m
- 2m
- 3m
为每个平面设置矩阵。 矩阵由9、25或49个有符号数字组成。 每个平面的默认值为
0 0 0 0 1 0 0 0 0.- 0rdiv
- 1rdiv
- 2rdiv
- 3rdiv
为每个平面设置计算值的乘数。 如果未设置或为0,将为所有矩阵元素的总和。 该选项的值必须为大于或等于的浮点数
0.0。默认值为1.0.- 0bias
- 1bias
- 2bias
- 3bias
为每个平面设置偏差。此值会加到乘法结果上。 这对使整体图像变得更亮或更暗很有用。 该选项的值必须为大于或等于的浮点数
0.0。默认值为0.0.
41.4.1 示例
- 应用锐化:
-i INPUT -vf "hwupload, convolution_opencl=0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0, hwdownload" OUTPUT
- 应用模糊:
-i INPUT -vf "hwupload, convolution_opencl=1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1/9:1/9:1/9:1/9, hwdownload" OUTPUT
- 应用边缘增强:
-i INPUT -vf "hwupload, convolution_opencl=0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:5:1:1:1:0:128:128:128, hwdownload" OUTPUT
- 应用边缘检测:
-i INPUT -vf "hwupload, convolution_opencl=0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:5:5:5:1:0:128:128:128, hwdownload" OUTPUT
- 应用包含对角线的拉普拉斯边缘探测器:
-i INPUT -vf "hwupload, convolution_opencl=1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:5:5:5:1:0:128:128:0, hwdownload" OUTPUT
- 应用浮雕效果:
-i INPUT -vf "hwupload, convolution_opencl=-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2, hwdownload" OUTPUT
41.5 erosion_opencl
对视频应用侵蚀效果。
此滤镜将像素替换为本地(3x3)最小值。
它接受以下选项:
- threshold0
- threshold1
- threshold2
- threshold3
限制每个平面的最大更改范围。范围为
[0, 65535],默认值为65535。 如果0,平面将保持不变。- coordinates
指定参考像素的标志。 范围为
[0, 255],默认值为255,即使用所有八个像素。指向以为中心的本地3x3坐标区域的标志
x:1 2 3
4 x 5
6 7 8
41.5.1 示例
- 应用侵蚀滤镜,其中threshold0设置为30,threshold1设置为40,threshold2设置为50,坐标设置为231,将输出的每个像素设置为输入中以它为中心的3x3区域像素: 1, 2, 3, 6, 7, 8 的本地最小值。如果输入像素与本地最小值的差异超过相应平面的阈值,将输出像素设置为输入像素减去相应平面的阈值。
-i INPUT -vf "hwupload, erosion_opencl=30:40:50:coordinates=231, hwdownload" OUTPUT
41.6 deshake_opencl
基于特征点的视频稳定滤镜。
该滤镜接受以下选项:
- tripod
通过完全消除原始帧的任何相机移动来模拟三脚架。默认值为
0.- debug
是否应显示附加调试信息,既在处理后的输出中也在控制台中。
注意,如果要看到控制台调试输出,还需要将
-v verbose传递给ffmpeg。在输出视频中查看特征点匹配仅支持RGB输入。
默认值为
0.- adaptive_crop
是否在视频边框处做一点裁剪以减少镜像像素的数量。
默认值为
1.- refine_features
是否在次像素级别优化特征点。
禁用此选项可以稍微提升性能,但会降低准确性。
默认值为
1.- smooth_strength
从
0.0到1.0.1.0的相机路径平滑强度。 值越小,平滑越少。0.0会使滤镜根据每帧自适应地选择平滑强度。默认值为
0.0.- smooth_window_multiplier
控制平滑窗口的大小(缓冲帧数以确定运动信息)。
平滑窗口的大小通过视频的帧率乘以该数字确定。
可接受值范围从
0.1到10.0.。较大的值会增加可用的运动数据量以确定如何平滑摄像机路径, 可能改进平滑效果,但也会增加延迟和内存使用。
默认值为
2.0.
41.6.1 示例
- 用固定的中等平滑强度稳定视频:
-i INPUT -vf "hwupload, deshake_opencl=smooth_strength=0.5, hwdownload" OUTPUT
- 使用调试功能稳定视频(包括控制台和渲染视频):
-i INPUT -filter_complex "[0:v]format=rgba, hwupload, deshake_opencl=debug=1, hwdownload, format=rgba, format=yuv420p" -v verbose OUTPUT
41.7 dilation_opencl
对视频应用膨胀效果。
此滤镜将像素替换为本地(3x3)最大值。
它接受以下选项:
- threshold0
- threshold1
- threshold2
- threshold3
限制每个平面的最大更改范围。范围为
[0, 65535],默认值为65535。 如果0,平面将保持不变。- coordinates
指定参考像素的标志。 范围为
[0, 255],默认值为255,即使用所有八个像素。指向以为中心的本地3x3坐标区域的标志
x:1 2 3
4 x 5
6 7 8
41.7.1 示例
- 应用膨胀滤镜,其中threshold0设置为30,threshold1设置为40,threshold2设置为50,坐标设置为231,将输出的每个像素设置为输入中以它为中心的3x3区域像素: 1, 2, 3, 6, 7, 8 的本地最大值。如果输入像素与本地最大值的差异超过相应平面的阈值,将输出像素设置为输入像素加上相应平面的阈值。
-i INPUT -vf "hwupload, dilation_opencl=30:40:50:coordinates=231, hwdownload" OUTPUT
41.8 nlmeans_opencl
通过OpenCL实现的非局部均值去噪滤镜,该滤镜接受与nlmeans.
相同的选项。
将一个视频叠加在另一个视频上。
它需要两个输入并有一个输出。第一个输入是“主”视频,第二个输入是叠加的视频。 此滤镜需要所有输入具有相同的内存布局。所以可能需要格式转换。
该滤镜接受以下选项:
- x
设置叠加视频在主视频上的x坐标。 默认值为
0.- y
设置叠加视频在主视频上的y坐标。 默认值为
0.
41.9.1 示例
- 将一个图像LOGO叠加在INPUT视频的左上角。两个输入均为yuv420p格式。
-i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuv420p, hwupload[b], [a][b]overlay_opencl, hwdownload" OUTPUT
- 输入的颜色通道内存布局相同,叠加有额外的alpha平面,例如,INPUT是yuv420p,而LOGO是yuva420p。
-i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuva420p, hwupload[b], [a][b]overlay_opencl, hwdownload" OUTPUT
41.10 pad_opencl
为输入图像添加填充,并将原始输入放置在提供的x, y坐标上。
它接受以下选项:
- width, w
- height, h
指定一个表达式,用于确定添加填充后的输出图像的大小。如果宽度或高度的值为0,则对应的输入大小将用于输出。
表达式宽度可以引用由高度表达式设置的值,反之亦然。
默认值宽度和高度为0。
- x
- y
指定将输入图像放置在填充区域内的位置偏移量,参考输出图像的顶部/左侧边界。
表达式x可以引用由y表达式设置的值,反之亦然。
默认值x和y为0。
如果x或y的值为负数,它们会被调整以使输入图像居中于填充区域。
- color
指定填充区域的颜色。有关此选项的语法,请查看ffmpeg-utils手册中的"颜色"部分。.
- aspect
填充到一个宽高比,而不是分辨率。
选项宽度, 高度, x和y的值为包含以下常量的表达式:
- in_w
- in_h
输入视频的宽度和高度。
- iw
- ih
与in_w和in_h.
- out_w
- out_h
输出宽度和高度(填充区域的大小),由宽度和高度表达式指定。
- ow
- oh
与out_w和out_h.
- x
- y
由x和y表达式指定或未指定时为NAN的x和y偏移量。
- a
与iw / ih
- sar
输入采样宽高比
- dar
输入显示宽高比,与 (iw / ih) * sar
41.11 prewitt_opencl
对输入视频流应用Prewitt算子 (https://en.wikipedia.org/wiki/Prewitt_operator)。
过滤器接受以下选项:
- planes
设置要过滤的平面。默认值为
0xf,即所有平面都被处理。- scale
设置将与过滤结果相乘的值。范围是
[0.0, 65535]且默认值为1.0.- delta
设置将添加到过滤结果的值。范围是
[-65535, 65535]且默认值为0.0.
41.11.1 示例
- 应用Prewitt算子,设置scale为2,delta为10。
-i INPUT -vf "hwupload, prewitt_opencl=scale=2:delta=10, hwdownload" OUTPUT
41.12 program_opencl
使用OpenCL程序过滤视频。
- source
OpenCL程序源文件。
- kernel
程序中的内核名称。
- inputs
过滤器的输入数量。默认值为1。
- size, s
输出帧的大小。默认为与第一个输入相同。
该program_opencl过滤器还支持帧同步选项。
程序源文件必须包含一个具有给定名称的内核函数,该函数将在每个输出平面上运行一次。每次对平面的运行分别作为一个2D全局NDRange队列,其中每个工作项对应一个要生成的像素。每个工作项的全局ID偏移量因此为目标图像中像素的坐标。
内核函数需要接收以下参数:
- 目标图像,__write_only image2d_t.
此图像将成为输出;内核应写入其全部内容。
- 帧索引,无符号整数.
这是一个从零开始,每帧加一的计数器。
- 源图像,__只读 image2d_t.
这些是每个输入的最新图像。内核可以从中读取以生成输出,但不能将数据写入其中。
示例程序:
- 将输入复制到输出(输出必须与输入尺寸相同)。
__kernel void copy(__write_only image2d_t destination, unsigned int index, __read_only image2d_t source) { const sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE; int2 location = (int2)(get_global_id(0), get_global_id(1)); float4 value = read_imagef(source, sampler, location); write_imagef(destination, location, value); } - 应用简单的变换,以增加的索引计数为基础旋转输入图像。采样器线性插值像素值,输出不必与输入尺寸相同。
__kernel void rotate_image(__write_only image2d_t dst, unsigned int index, __read_only image2d_t src) { const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE | CLK_FILTER_LINEAR); float angle = (float)index / 100.0f; float2 dst_dim = convert_float2(get_image_dim(dst)); float2 src_dim = convert_float2(get_image_dim(src)); float2 dst_cen = dst_dim / 2.0f; float2 src_cen = src_dim / 2.0f; int2 dst_loc = (int2)(get_global_id(0), get_global_id(1)); float2 dst_pos = convert_float2(dst_loc) - dst_cen; float2 src_pos = { cos(angle) * dst_pos.x - sin(angle) * dst_pos.y, sin(angle) * dst_pos.x + cos(angle) * dst_pos.y }; src_pos = src_pos * src_dim / dst_dim; float2 src_loc = src_pos + src_cen; if (src_loc.x < 0.0f || src_loc.y < 0.0f || src_loc.x > src_dim.x || src_loc.y > src_dim.y) write_imagef(dst, dst_loc, 0.5f); else write_imagef(dst, dst_loc, read_imagef(src, sampler, src_loc)); } - 将两个输入混合在一起,每个输入的使用量随索引计数的变化而变化。
__kernel void blend_images(__write_only image2d_t dst, unsigned int index, __read_only image2d_t src1, __read_only image2d_t src2) { const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE | CLK_FILTER_LINEAR); float blend = (cos((float)index / 50.0f) + 1.0f) / 2.0f; int2 dst_loc = (int2)(get_global_id(0), get_global_id(1)); int2 src1_loc = dst_loc * get_image_dim(src1) / get_image_dim(dst); int2 src2_loc = dst_loc * get_image_dim(src2) / get_image_dim(dst); float4 val1 = read_imagef(src1, sampler, src1_loc); float4 val2 = read_imagef(src2, sampler, src2_loc); write_imagef(dst, dst_loc, val1 * blend + val2 * (1.0f - blend)); }
41.13 remap_opencl
使用第二个:Xmap和第三个:Ymap输入视频流重映射像素。
目标像素在位置 (X, Y) 将从源位置 (x, y) 获取,其中 x = Xmap(X, Y),y = Ymap(X, Y)。如果映射值超出范围,目标像素将使用零值。
Xmap 和 Ymap 输入视频流必须具有相同的尺寸。输出视频流的尺寸将与 Xmap/Ymap 视频流一致。 Xmap 和 Ymap 输入视频流是 32 位浮点像素格式、单通道。
- interp
指定用于像素重映射的插值。 允许的值是
near和linear。 默认值是linear.- fill
指定未映射像素的颜色。关于此选项的语法,请查阅(ffmpeg-utils)的 "颜色" 部分,位于 ffmpeg-utils 手册中。默认颜色是
black.
41.14 roberts_opencl
对输入视频流应用 Roberts 边算子。https://en.wikipedia.org/wiki/Roberts_cross)。
滤镜接受以下选项:
- planes
设置需要处理的平面。默认值是
0xf,即所有平面都会被处理。- scale
设置值,该值将与处理后的结果相乘。 范围是
[0.0, 65535],默认值是1.0.- delta
设置值,该值将添加到处理后的结果中。 范围是
[-65535, 65535],默认值是0.0.
41.14.1 示例
- 应用 Roberts 边算子,设置 scale 为 2,delta 为 10。
-i INPUT -vf "hwupload, roberts_opencl=scale=2:delta=10, hwdownload" OUTPUT
41.15 sobel_opencl
对输入视频流应用 Sobel 算子。https://en.wikipedia.org/wiki/Sobel_operator)。
滤镜接受以下选项:
- planes
设置需要处理的平面。默认值是
0xf,即所有平面都会被处理。- scale
设置值,该值将与处理后的结果相乘。 范围是
[0.0, 65535],默认值是1.0.- delta
设置值,该值将添加到处理后的结果中。 范围是
[-65535, 65535],默认值是0.0.
41.15.1 示例
- 应用 Sobel 操作算子,设置 scale 为 2,delta 为 10。
-i INPUT -vf "hwupload, sobel_opencl=scale=2:delta=10, hwdownload" OUTPUT
41.16 tonemap_opencl
使用色调映射进行 HDR(PQ/HLG) 转换为 SDR。
它接受以下参数:
- tonemap
指定要使用的色调映射操作符。与tonemap.
- param
中的同名选项相同。调节色调映射算法。与.
- desat
为亮度超过该值的高光应用去饱和。参数值越高,颜色信息保留越多。 此设置可以防止超高光的颜色过度溢出,从而(平滑地)变为白色。这使得图像更加自然,但会以减少超范围颜色信息为代价。
默认值为 0.5,此算法与目前 CPU 版本 tonemap 略有不同。设置为 0.0 可禁用此选项。
- threshold
色调映射算法参数会针对每个场景进行微调,并使用一个阈值来检测场景是否发生了变化。 如果当前帧平均亮度与当前运行平均值之间的差距超过阈值,我们将重新计算场景平均亮度和峰值亮度。 默认值为 0.2。
- format
指定输出像素格式。
当前支持的格式为:
- p010
- nv12
- range, r
设置输出颜色范围。
可能的值为:
- tv/mpeg
- pc/jpeg
默认为与输入相同。
- primaries, p
设置输出颜色主色调。
可能的值为:
- bt709
- bt2020
默认为与输入相同。
- transfer, t
设置输出传递特性。
可能的值为:
- bt709
- bt2020
默认值为 bt709。
- matrix, m
设置输出颜色空间矩阵。
可能的值为:
- bt709
- bt2020
默认为与输入相同。
41.16.1 示例
- 使用线性操作器将 HDR(PQ/HLG) 视频转换为 bt2020 传递特性 p010 格式。
-i INPUT -vf "format=p010,hwupload,tonemap_opencl=t=bt2020:tonemap=linear:format=p010,hwdownload,format=p010" OUTPUT
41.17 unsharp_opencl
对输入视频进行锐化或模糊处理。
它接受以下参数:
- luma_msize_x, lx
设置亮度矩阵的水平尺寸。 范围是
[1, 23],默认值是5.- luma_msize_y, ly
设置亮度矩阵的垂直尺寸。 范围是
[1, 23],默认值是5.- luma_amount, la
设置亮度效果强度。 范围是
[-10, 10],默认值是1.0.负值将使输入视频模糊,正值将锐化视频,零值将禁用效果。
- chroma_msize_x, cx
设置色度矩阵的水平尺寸。 范围是
[1, 23],默认值是5.- chroma_msize_y, cy
设置色度矩阵的垂直尺寸。 范围是
[1, 23],默认值是5.- chroma_amount, ca
设置色度效果强度。 范围是
[-10, 10],默认值是0.0.负值将使输入视频模糊,正值将锐化视频,零值将禁用效果。
所有参数都是可选的,并默认为字符串’5:5:1.0:5:5:0.0’的等价值。
41.17.1 示例
- 应用强烈的亮度锐化效果:
-i INPUT -vf "hwupload, unsharp_opencl=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5, hwdownload" OUTPUT
- 同时对亮度和色度参数应用强模糊:
-i INPUT -vf "hwupload, unsharp_opencl=7:7:-2:7:7:-2, hwdownload" OUTPUT
41.18 xfade_opencl
使用OpenCL通过自定义过渡效果来交错淡入两段视频。
接受以下选项:
- transition
设置可能的过渡效果之一。
- custom
选择自定义过渡效果,实际的过渡描述将从source和kernel选项中提取。
- fade
- wipeleft
- wiperight
- wipeup
- wipedown
- slideleft
- slideright
- slideup
- slidedown
-
默认的过渡是渐隐(fade)。
- source
用于自定义过渡的OpenCL程序源文件。
- kernel
设置从程序源文件中用于自定义过渡的内核名称。
- duration
设置视频过渡的持续时间。
- offset
设置过渡相对于第一个视频的开始时间。
程序源文件必须包含一个具有指定名称的内核函数,该函数将针对输出的每个平面运行一次。每次运行平面时会作为一个独立的二维全局NDRange队列,其中每个工作项目对应生成的一个像素。每个工作项目的全局ID偏移因此为目标图像中像素的坐标。
内核函数需要接受以下参数:
- 目标图像,__write_only image2d_t.
这个图像将成为输出,内核需要写入所有内容。
- 第一个源图像,__read_only image2d_t。
第二个源图像,__read_only image2d_t.
这些是每个输入的最近图像。内核可以从中读取数据以生成输出,但不能写入它们。
- 过渡进度,float。此值始终在0到1之间(含0和1)。
示例程序:
- 应用点幕过渡效果:
__kernel void blend_images(__write_only image2d_t dst, __read_only image2d_t src1, __read_only image2d_t src2, float progress) { const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE | CLK_FILTER_LINEAR); int2 p = (int2)(get_global_id(0), get_global_id(1)); float2 rp = (float2)(get_global_id(0), get_global_id(1)); float2 dim = (float2)(get_image_dim(src1).x, get_image_dim(src1).y); rp = rp / dim; float2 dots = (float2)(20.0, 20.0); float2 center = (float2)(0,0); float2 unused; float4 val1 = read_imagef(src1, sampler, p); float4 val2 = read_imagef(src2, sampler, p); bool next = distance(fract(rp * dots, &unused), (float2)(0.5, 0.5)) < (progress / distance(rp, center)); write_imagef(dst, p, next ? val1 : val2); }
42 VAAPI 视频滤镜
VAAPI视频滤镜通常与VAAPI解码器和VAAPI编码器一起使用。以下是VAAPI视频滤镜的描述。
要启用这些滤镜的编译,需要使用以下命令配置FFmpeg:--enable-vaapi.
要使用VAAPI滤镜,需要正确设置VAAPI设备。更多信息,请阅读https://trac.ffmpeg.org/wiki/Hardware/VAAPI
42.1 overlay_vaapi
将一个视频覆盖在另一个视频之上。
它接受两个输入并产生一个输出。第一个输入是“主”视频,第二个输入将覆盖在其上。
滤镜接受以下选项:
- x
- y
设置覆盖视频在主视频上的x和y坐标表达式。
默认值为两个表达式均为“0”。
- w
- h
设置覆盖视频在主视频上的宽度和高度表达式。
默认值分别为‘overlay_iw’(宽度)和‘overlay_ih*w/overlay_iw’(高度)。
表达式可以包含以下参数:
- main_w, W
- main_h, H
主输入的宽度和高度。
- overlay_iw
- overlay_ih
覆盖输入的宽度和高度。
- overlay_w, w
- overlay_h, h
覆盖输出的宽度和高度。
- overlay_x, x
- overlay_y, y
覆盖层在主视频内的位置
- alpha
设置覆盖视频的透明度。允许范围为0.0至1.0。 值越高,透明度越低。 默认值为
1.0.- eof_action
参见framesync.
- shortest
参见framesync.
- repeatlast
参见framesync.
该滤镜还支持framesync选项。
42.1.1 示例
- 将一张LOGO图片叠加到输入视频的左上角。该滤镜的两个输入均采用yuv420p格式。
-i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuv420p, hwupload[b], [a][b]overlay_vaapi" OUTPUT
- 将一张LOGO图片叠加到输入视频左上角偏移(200, 100)的位置。
输入的视频和LOGO的颜色通道内存布局相同,LOGO还具有附加的alpha平面,例如输入为yuv420p,LOGO为yuva420p。
-i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuva420p, hwupload[b], [a][b]overlay_vaapi=x=200:y=100:w=400:h=300:alpha=1.0, hwdownload, format=nv12" OUTPUT
42.2 tonemap_vaapi
执行HDR到SDR或HDR到HDR的色调映射。 目前仅接受HDR10作为输入。
接受以下参数:
- format
指定输出像素格式。
HDR到SDR色调映射的默认值为nv12,HDR到HDR色调映射的默认值为p010。
- primaries, p
设置输出颜色原件。
HDR到SDR色调映射的默认值为bt709,HDR到HDR色调映射与输入保持相同。
- transfer, t
设置输出传输特性。
HDR到SDR色调映射的默认值为bt709,HDR到HDR色调映射与输入保持相同。
- matrix, m
设置输出颜色空间矩阵。
HDR到SDR色调映射的默认值为bt709,HDR到HDR色调映射与输入保持相同。
- display
设置输出母版显示颜色体积。通过用‘|’分隔的两个值组成。其中两个值以空格分隔。设置显示原色x和y(按G、B、R顺序),然后是白点x和y,以及标称的最小与最大显示亮度。
设置该选项时将执行HDR到HDR的色调映射。
- light
设置输出内容的光级信息。接受两个以空格分隔的值, 第一个值为最大光级,第二个值为最大平均光级。
该选项对HDR到SDR色调映射无效,而对于HDR到HDR色调映射是可选的。
42.2.1 示例
- 将HDR(HDR10)视频转换为bt2020传输特性的p010格式
tonemap_vaapi=format=p010:t=bt2020-10
- 将HDR视频转换为HDR视频
tonemap_vaapi=display=7500\ 3000|34000\ 16000|13250\ 34500|15635\ 16450|500\ 10000000
42.3 hstack_vaapi
将输入视频水平堆叠。
这是hstack滤镜的VA-API变体,每个输入流可以具有不同的高度,此滤镜将对每个输入流进行缩放以保持原始纵横比。
接受以下选项:
42.4 vstack_vaapi
将输入视频垂直堆叠。
这是vstack滤镜的VA-API变体,每个输入流可以具有不同的宽度,此滤镜将对每个输入流进行缩放以保持原始纵横比。
接受以下选项:
42.5 xstack_vaapi
将多个视频输入叠加到自定义布局中.
这是 VA-API 的变体xstack滤镜,每个输入流可以具有不同的大小,此滤镜会根据给定的输出大小或第一个输入流的大小将每个输入流缩小或放大。
它接受以下选项:
- inputs
查看xstack.
- shortest
查看xstack.
- layout
查看xstack此外,这允许用户为每个输入流提供输出大小。
xstack_vaapi=inputs=4:layout=0_0_1920x1080|0_h0_1920x1080|w0_0_1920x1080|w0_h0_1920x1080
- grid
查看xstack.
- grid_tile_size
在设置grid时,为每个输入流设置输出大小。如果未设置此选项,滤镜将默认将输出大小设置为第一个输入流的大小。有关此选项的语法,请查看(ffmpeg-utils)"视频大小"在 ffmpeg-utils 手册中的部分.
- fill
查看xstack.
42.6 pad_vaapi
向输入图像添加边距,并将原始输入放置到提供的x, y坐标。
它接受以下选项:
- width, w
- height, h
指定添加边距后输出图像大小的表达式。如果宽度或高度的值为 0,将使用对应的输入大小作为输出大小。
可以在宽度表达式中引用由高度表达式设置的值,反之亦然。
的默认值是宽度和高度均为 0。
- x
- y
指定在边距区域内放置输入图像的偏移量,相对于输出图像的上/左边界。
可以在x表达式中引用由y表达式设置的值,反之亦然。
的默认值是x和y均为 0。
如果x或y为负值,它们会被修改为使输入图像居中到边距区域。
- color
指定边距区域的颜色。有关此选项的语法,请查看(ffmpeg-utils)"颜色"在 ffmpeg-utils 手册中的部分.
- aspect
根据比例而不是分辨率添加边距。
以下选项的值是包含以下常量的表达式:宽度, 高度, x, 和y选项。
- in_w
- in_h
输入视频的宽度和高度。
- iw
- ih
这些与in_w和in_h.
- out_w
- out_h
输出宽度和高度(边距区域的大小),由宽度和高度表达式指定。
- ow
- oh
这些与out_w和out_h.
- x
- y
由x和y表达式指定的 x 和 y 偏移量,或者如果尚未指定则为 NAN。
- a
与iw / ih
- sar
输入样本宽高比
- dar
输入显示宽高比,与 (iw / ih) * sar
42.7 drawbox_vaapi
在输入图像上绘制一个彩色框。
它接受以下参数:
- x
- y
指定框的左上角坐标的表达式。默认值是 0。
- width, w
- height, h
指定框的宽度和高度的表达式;如果为 0,则将被解释为输入的宽度和高度。默认值是 0。
- color, c
指定框的颜色。有关此选项的通用语法,请查看(ffmpeg-utils)“颜色”部分在ffmpeg-utils手册中.
- thickness, t
设置框边厚度的表达式。 值为
fill将创建一个填充的框。默认值是3.请参阅下面列出的接受常量的列表。
- replace
使用值
1时,绘制的框的像素将覆盖视频的颜色和透明像素。 默认值是0,将框与输入视频进行组合。
的参数x, y, w和h以及t是包含以下常量的表达式:
- in_h, ih
- in_w, iw
输入的宽度和高度。
- x
- y
绘制框时的x和y偏移坐标。
- w
- h
绘制框的宽度和高度。
- t
绘制框的厚度。
42.7.1 示例
- 在输入图像的边界上绘制一个黑色框:
drawbox
- 绘制一个红色框,并设置50%的不透明度:
drawbox=10:20:200:60:red@0.5
上述示例方法也可指定为:
drawbox=x=10:y=20:w=200:h=60:color=red@0.5
- 用粉色填充框:
drawbox=x=10:y=10:w=100:h=100:color=pink@0.5:t=fill
- 绘制一个2像素厚的比例为2.40:1的红色遮罩:
drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red
43 Vulkan视频滤镜
以下是当前可用的Vulkan视频滤镜的描述。
要启用这些滤镜的编译,需要配置FFmpeg并使用--enable-vulkan以及--enable-libglslang或--enable-libshaderc.
运行Vulkan滤镜需要初始化一个硬件设备,并将该设备传递给任意滤镜图中的所有滤镜。
- -init_hw_device vulkan[=名称][:设备[,键=值...]]
初始化一个类型为vulkan的新硬件设备,设备名称为name,使用给定的设备参数和选项键=值。以下选项支持:
- debug
如果设置为1,则启用验证层。
- linear_images
分配线性图片。不适用于解码。
- disable_multiplane
禁用多平面图片。不适用于解码。
- -filter_hw_device 名称
将名为name的硬件设备传递给任意滤镜图中的所有滤镜。
查看更多详细信息,请参阅https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options
- 选择第一个设备并在其上以默认参数运行nlmeans_vulkan滤镜的示例。
-init_hw_device vulkan=vk:0 -filter_hw_device vk -i INPUT -vf "hwupload,nlmeans_vulkan,hwdownload" OUTPUT
由于Vulkan滤镜无法访问普通内存中的帧数据,因此所有帧数据需要上传(hwupload)到连接到适当设备的硬件表面,然后下载(hwdownload)回到普通内存。注意hwupload将上传到一个与软件帧布局相同的帧,因此可能需要在之前添加一个format滤镜以调整输入到正确的格式;同时hwdownload不支持所有输出格式——通常需要在图中紧接其后插入一个额外的format滤镜以使输出成为支持的格式。
43.1 avgblur_vulkan
应用一个平均模糊滤镜,该滤镜使用Vulkan在GPU上实现。
该滤镜接受以下选项:
- sizeX
设置水平半径尺寸。 范围为
[1, 32],默认值为3.- sizeY
设置垂直半径尺寸。范围为
[1, 32],默认值为3.- planes
设置需要处理的平面。默认值为
0xf,所有平面都被处理。
43.2 blend_vulkan
将两个Vulkan帧相互混合。
此blend滤镜接受两个输入流并输出一个流,第一个输入是“顶层”,第二个输入是“底层”。默认情况下,输出会在最长的输入结束时终止。
以下是接受的选项的简要描述。
- c0_mode
- c1_mode
- c2_mode
- c3_mode
- all_mode
为特定像素组件或所有像素组件(若设置为all_mode)选择混合模式。默认值是
normal.以下是分量模式的可选值:
- ‘normal’
- ‘multiply’
43.3 bwdif_vulkan
使用bwdif算法,该算法称为“Bob Weaver去隔行过滤器”,使用Vulkan在GPU上实现。
它接受以下参数:
- mode
指定采取的隔行模式。它接受以下值之一:
- 0, send_frame
每帧输出一个帧。
- 1, send_field
每个场输出一个帧。
默认值为
send_field.- parity
为输入隔行视频指定场的优先级。它接受以下值之一:
- 0, tff
假设顶场优先。
- 1, bff
假设底场优先。
- -1, auto
启用场优先级的自动检测。
默认值为
auto。 如果隔行信息未知或解码器没有导出此信息,将假设顶场优先。- deint
指定要去隔行处理的帧。接受以下值之一:
- 0, all
去隔行处理所有帧。
- 1, interlaced
仅对标记为交错的视频帧进行去交错处理。
默认值是
all.
43.4 chromaber_vulkan
应用一种模拟色差的效果。对于RGB输入效果最佳,但对YCbCr输入也提供类似的效果。
- dist_x
水平位移乘数。每个色度像素的位置将从图像中心开始乘以这个数值。默认值是
0.- dist_y
同样,这设置了垂直位移乘数。默认值是
0.
43.5 color_vulkan
创建单一颜色的Vulkan帧的视频源。可用于基准测试或叠加。
它接受以下参数:
- color
要使用的颜色。可以是一个名称,或者是一个十六进制值。默认值是
black.- size
输出帧的大小。默认值是
1920x1080.- rate
输出的帧率。默认值是
60帧每秒。- duration
视频持续时间。默认值是
-0.000001.- sar
视频信号的宽高比。默认值是
1/1.- format
输出Vulkan帧的像素格式。默认值是
yuv444p.- out_range
设置输出YCbCr采样范围。
这允许覆盖自动检测的值,并且允许强制使用一个特定的值用于输出和编码器。如果未指定,则范围取决于像素格式。可能的值有:
- ‘auto/unknown’
自动选择。
- ‘jpeg/full/pc’
设置全范围(例如在8位亮度下为0-255)。
- ‘mpeg/limited/tv’
设置“MPEG”范围(例如在8位亮度下为16-235)。
43.6 vflip_vulkan
垂直翻转图像。
43.7 hflip_vulkan
水平翻转图像。
43.8 flip_vulkan
沿垂直和水平轴翻转图像。
43.9 gblur_vulkan
对Vulkan帧应用高斯模糊滤镜。
此滤镜接受以下选项:
- sigma
设置水平方向的高斯模糊标准差(sigma)。默认值是
0.5.- sigmaV
设置垂直方向的高斯模糊标准差(sigma)。如果为负值,将与
sigma相同。 默认值是-1.- planes
设置要过滤的平面。默认情况下,所有平面都被过滤。
- size
设置水平方向的卷积核大小。默认值是
19.- sizeV
设置垂直方向的卷积核大小。默认值是
0, 这将设置为与大小.
43.10 nlmeans_vulkan
使用基于Vulkan的GPU实现的非局部均值算法去噪帧。 支持比nlmeans或nlmeans_opencl更多的像素格式,包括支持alpha通道。
此滤镜接受以下选项。
- s
设置所有分量的去噪强度。默认值是1.0。必须在[1.0, 100.0]范围内。
- p
设置所有平面的补丁大小。默认值是7。必须是[0, 99]范围内的奇数。
- r
设置搜索大小。默认值是15。必须是[0, 99]范围内的奇数。
- t
设置并行性。默认值是36。必须是[1, 168]范围内的数字。 更大的值可能加速处理,但会消耗更多的显存。 较小的值会减慢速度,减少显存使用。 仅支持具有原子浮点操作的GPU(RDNA3+,Ampere+)。
- s0
- s1
- s2
- s3
设置特定分量的去噪强度。默认值是1, 等于s。 必须是[1, 100]范围内的奇数。
- p0
- p1
- p2
- p3
设置特定分量的补丁大小。默认值是7, 等于p。 必须是[0, 99]范围内的奇数。
43.11 overlay_vulkan
将一个视频叠加到另一个视频之上。
它需要两个输入并生成一个输出。第一个输入是将第二个输入叠加上去的“主”视频。 此滤镜要求所有输入使用相同的像素格式。因此可能需要格式转换。
此滤镜接受以下选项:
- x
设置被叠加视频在主视频上的x坐标。 默认值是
0.- y
设置被叠加视频在主视频上的y坐标。 默认值是
0.
43.12 transpose_vt
在输入视频中交换行和列,并可选地翻转。 有关更深入的示例,请参阅transpose视频滤镜,主要共享相同选项。
它接受以下参数:
- dir
指定转置方向。
可以使用以下值:
- ‘cclock_flip’
逆时针旋转90度并垂直翻转。(默认)
- ‘clock’
顺时针旋转90度。
- ‘cclock’
逆时针旋转90度。
- ‘clock_flip’
顺时针旋转90度并垂直翻转。
- ‘hflip’
水平翻转输入视频。
- ‘vflip’
垂直翻转输入视频。
- passthrough
如果输入几何与指定值匹配,则不应用转置。 它可以接受以下值:
- ‘none’
始终应用转置。(默认)
- ‘portrait’
保持纵向几何(当高 >= 宽).
- ‘landscape’
保持横向几何(当宽 >= 高).
43.13 transpose_vulkan
在输入视频中交换行和列,并可选地翻转。 有关更深入的示例,请参阅transpose视频滤镜,主要共享相同选项。
它接受以下参数:
- dir
指定转置方向。
可以使用以下值:
- ‘cclock_flip’
逆时针旋转90度并垂直翻转。(默认)
- ‘clock’
顺时针旋转90度。
- ‘cclock’
逆时针旋转90度。
- ‘clock_flip’
顺时针旋转90度并垂直翻转。
- passthrough
如果输入几何与指定值匹配,则不应用转置。 它可以接受以下值:
- ‘none’
始终应用转置。(默认)
- ‘portrait’
保持纵向几何(当高 >= 宽).
- ‘landscape’
保持横向几何(当宽 >= 高度).
44 QSV 视频滤镜
以下是当前可用的 QSV 视频滤镜的描述。
要启用这些滤镜的编译,您需要配置 FFmpeg,使用--enable-libmfx或者--enable-libvpl.
要使用 QSV 滤镜,您需要正确设置 QSV 设备。有关更多信息,请阅读https://trac.ffmpeg.org/wiki/Hardware/QuickSync
44.1 hstack_qsv
水平堆叠输入视频。
这是hstack滤镜的 QSV 变体,每个输入流可以具有不同的高度,此滤镜会根据原始宽高比缩小或放大每个输入流。
它接受以下选项:
44.2 vstack_qsv
垂直堆叠输入视频。
这是vstack滤镜的 QSV 变体,每个输入流可以具有不同的宽度,此滤镜会根据原始宽高比缩小或放大每个输入流。
它接受以下选项:
44.3 xstack_qsv
将视频输入堆叠到自定义布局。
这是xstack滤镜的 QSV 变体。
它接受以下选项:
- inputs
参见xstack.
- shortest
参见xstack.
- layout
参见xstack此外,这允许用户为每个输入流提供输出尺寸。
xstack_qsv=inputs=4:layout=0_0_1920x1080|0_h0_1920x1080|w0_0_1920x1080|w0_h0_1920x1080
- grid
参见xstack.
- grid_tile_size
当grid设置时,为每个输入流设置输出尺寸。如果此选项未设置,此滤镜将默认将输出尺寸设置为第一个输入流的尺寸。有关此选项的语法,请查看(ffmpeg-utils)“视频尺寸”章节,位于 ffmpeg-utils 使用手册中.
- fill
参见xstack.
45 视频来源
以下是当前可用的视频来源的描述。
45.1 buffer
缓冲视频帧,并将其提供给滤镜链。
此来源主要用于编程用途,特别是通过定义的接口libavfilter/buffersrc.h.
它接受以下参数:
- video_size
指定缓冲视频帧的尺寸(宽度和高度)。有关此选项的语法,请查看(ffmpeg-utils)“视频尺寸”章节,位于 ffmpeg-utils 使用手册中.
- width
输入视频宽度。
- height
输入视频高度。
- pix_fmt
表示缓冲视频帧的像素格式的字符串。它可以是像素格式对应的数字,也可以是像素格式名称。
- time_base
指定缓冲帧时间戳的时间基准。
- frame_rate
设置视频流预期的帧速率。
- colorspace
表示缓冲视频帧的色彩空间的字符串。它可以是色彩空间对应的数字,也可以是色彩空间名称。
- range
表示缓冲视频帧的色彩范围的字符串。它可以是色彩范围对应的数字,也可以是色彩范围名称。
- pixel_aspect, sar
输入视频的样本(像素)纵横比。
- hw_frames_ctx
使用硬件像素格式时,这应为描述输入帧的 AVHWFramesContext 的引用。
例如:
buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1
将指示源接受尺寸为 320x240 且格式为“yuv410p”的视频帧,假设时间戳时间基准为 1/24 且像素为正方形(1:1 样本纵横比)。由于像素格式名称“yuv410p”对应数字 6(参见枚举 AVPixelFormat 定义于libavutil/pixfmt.h),因此此示例等同于:
buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1
或者,选项可以指定为平面字符串,但这种语法已被弃用:
宽度:高度:像素格式:时间基数分子:时间基数分母:像素纵横比分子:像素纵横比分母
45.2 cellauto
创建一个由简单细胞自动机生成的模式。
可以通过filename和pattern选项定义细胞自动机的初始状态。如果这些选项未指定,则随机创建初始状态。
在每个新帧中,视频中的一行会填充细胞自动机下一代的结果。当整个帧被填满时,其行为由scroll选项定义。
此来源接受以下选项:
- filename, f
从指定的文件读取初始细胞自动机状态,即起始行。文件中的每个非空白字符被视为一个活细胞,换行符终止行,文件中的其他字符将被忽略。
- pattern, p
从指定的字符串读取初始细胞自动机状态,即起始行。
字符串中的每个非空白字符被视为一个活细胞,换行符终止行,字符串中的其他字符将被忽略。
- rate, r
设置视频速率,即每秒生成的帧数。默认为 25。
- random_fill_ratio, ratio
设置初始细胞自动机行的随机填充比例。它是一个范围从 0 到 1 的浮点数值,默认值是 1/黄金比例(PHI)。
当指定了文件或模式时,此选项会被忽略。
- random_seed, seed
设置随机填充初始行的种子,必须是包含在 0 到 UINT32_MAX 的整数。如果未指定或显式设置为 -1,滤镜将尽量在最佳情况下使用良好的随机种子。
- rule
设置细胞自动机规则,它是一个范围从 0 到 255 的数字。默认值是 110。
- size, s
设置输出视频的尺寸。有关此选项的语法,请查看(ffmpeg-utils)“视频尺寸”章节,位于 ffmpeg-utils 使用手册中.
如果filename或pattern被指定,则尺寸默认设置为指定初始状态行的宽度,高度设置为宽度* 黄金比例(PHI)。
如果size已设置,该选项必须包含指定图案字符串的宽度,并且指定的图案将居中于较大的行中。
如果未指定文件名或图案字符串,则尺寸值默认为"320x518"(用于随机生成的初始状态)。
- scroll
如果设置为1,当输出中的所有行都已填满时,将向上滚动输出。如果设置为0,在底部行填满后,新生成的行将覆盖最顶行。默认为1。
- start_full, full
如果设置为1,则输出完全用生成的行填充后再输出第一帧。这是默认行为,若要禁用可将值设置为0。
- stitch
如果设置为1,将左右行边缘结合在一起。这是默认行为,若要禁用可将值设置为0。
45.2.1 示例
- 从pattern读取初始状态,指定输出尺寸为200x400。
cellauto=f=pattern:s=200x400
- 生成宽度为200单元格且填充比例为2/3的随机初始行:
cellauto=ratio=2/3:s=200x200
- 通过规则18生成由单活细胞居中于宽度为100的初始行的图案:
cellauto=p=@:s=100x400:full=0:rule=18
- 指定更复杂的初始图案:
cellauto=p='@@ @ @@':s=100x400:full=0:rule=18
45.3 coreimagesrc
使用Apple的CoreImage API在OSX上生成的视频源。
该视频源是coreimage视频滤镜的专业化版本。在应用的滤镜链开头使用 CoreImage 生成器生成内容。
coreimagesrc 视频源接受以下选项:
- list_generators
列出所有可用生成器以及它们的所有选项,以及可能的最小值和最大值以及默认值。
list_generators=true
- size, s
指定源视频的尺寸。该选项的语法请参阅(ffmpeg-utils)ffmpeg-utils手册中的"视频尺寸"部分。默认值为
320x240.- rate, r
指定源视频的帧率,即每秒生成的帧数。必须是以下格式的字符串:frame_rate_num/frame_rate_den,整数,小数,或者有效的视频帧率缩写。默认值为"25"。
- sar
设置源视频的样本纵横比。
- duration, d
设置源视频的时长。详见(ffmpeg-utils)ffmpeg-utils手册中提及的时间时长部分接受的语法。
如果未指定或表达的时长为负数,视频将假定生成无限时长。
此外,还接受coreimage视频滤镜的所有选项。可以使用完整滤镜链进一步处理生成的输入,无需CPU主机传输。详见coreimage文档和示例。
45.3.1 示例
- 使用CIQRCodeGenerator创建FFmpeg主页的二维码,命令作为Apple标准bash shell的完整且转义的输入行:
ffmpeg -f lavfi -i coreimagesrc=s=100x100:filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.png
此示例等效于coreimage的QRCode示例,而无需nullsrc视频源。
45.4 ddagrab
通过 Desktop Duplication API 捕获 Windows 桌面。
该滤镜只返回D3D11硬件帧,用于GPU上编码或处理。因此,对于任何类型的软件处理,需显式hwdownload。
它接受以下选项:
- output_idx
DXGI 输出索引以捕获。
通常对应于Windows分配给屏幕的索引减1,因此从0开始。
默认为输出0。
- draw_mouse
是否显示鼠标光标。
默认为 true。
仅影响硬件光标。如果游戏或应用程序自行渲染光标,它将始终被捕获。
- framerate
桌面的最大捕获帧率 - 两帧之间的间隔不会小于帧率的倒数。当dup_frames为 true(默认)且桌面更新频率不足时,滤镜将复制之前的帧。请注意,没有后台缓冲正在进行,因此如果滤镜的调用频率不足,则实际的帧间间隔可能会显著增加。
默认值为30 FPS。
- video_size
指定所捕获视频的尺寸。
默认为屏幕的全尺寸。
如果小于屏幕尺寸,则从底部/右侧裁剪。
- offset_x
捕获视频的水平偏移。
- offset_y
捕获视频的垂直偏移。
- output_fmt
所需的滤镜输出格式。默认值为 8 Bit BGRA。
接受以下值:
- ‘auto’
将所有支持的输出格式传递给DDA,并返回DDA决定使用的格式。
- ‘8bit’
- ‘bgra’
8位格式始终支持,DDA将在必要时转换为这些格式。
- ‘10bit’
- ‘x2bgr10’
如果请求但不支持10位格式,滤镜初始化将失败。
- dup_frames
当此选项设置为 true(默认)时,当桌面未更新时,滤镜将复制帧以保持大致恒定的目标帧率。当此选项设置为 false 时,滤镜将等待桌面更新(此时帧间间隔可能会显著变化)。
45.4.1 示例
捕获主屏幕并使用 nvenc 编码:
ffmpeg -f lavfi -i ddagrab -c:v h264_nvenc -cq 18 output.mp4
您也可以跳过 lavfi 设备并直接使用滤镜。还展示了下载帧并使用 libx264 编码的示例。在这种情况下,需要显式指定输出格式:
ffmpeg -filter_complex ddagrab=output_idx=1:framerate=60,hwdownload,format=bgra -c:v libx264 -crf 18 output.mp4
如果只想捕获桌面的一部分,可以通过指定较小的尺寸及其在屏幕中的偏移来实现:
ddagrab=video_size=800x600:offset_x=100:offset_y=100
45.5 gradients
生成几个渐变。
- size, s
设置帧尺寸。该选项的语法请参阅(ffmpeg-utils)ffmpeg-utils手册中的"视频尺寸"部分。默认值为"640x480"。
- rate, r
设置帧率,以每秒帧数表示。默认值为"25"。
- c0, c1, c2, c3, c4, c5, c6, c7
设置8种颜色。颜色的默认值是随机选择。
- x0, y0, y0, y1
设置渐变线源和目标点。如果为负或超出范围,将随机选择。
- nb_colors, n
设置同时使用颜色的数量。允许范围为2到8。默认值为2。
- seed
设置选择渐变线点的种子。
- duration, d
设置所生成视频的持续时间。详见(ffmpeg-utils)ffmpeg-utils手册中提及的时间时长部分接受的语法。
如果未指定或表达的持续时间为负数,视频将假定生成无限时间。
- speed
设置渐变旋转的速度。
- type, t
设置渐变类型。 可选值为:
- ‘linear’
- ‘radial’
- ‘circular’
- ‘spiral’
- ‘square’
默认类型为线性.
45.5.1 命令
此源支持上述某些选项作为命令.
45.6 mandelbrot
生成 Mandelbrot 集分形,并逐步缩放至start_x和start_y.
指定的点。
- end_pts
设置终端 pts 值。默认值为400。
- end_scale
设置终端缩放值。 必须是浮点值,默认值为0.3。
- inner
设置内部着色模式,即用于绘制曼德勃罗特分形内部区域的算法。
它将假定以下值之一:
- black
设置黑色模式。
- convergence
显示收敛所需的时间。
- mincol
根据迭代点距离原点最近的点设置颜色。
- period
设置周期模式。
默认值为mincol.
- bailout
设置离场值。默认值为10.0。
- maxiter
设置渲染算法执行的最大迭代次数。默认值为7189。
- outer
设置外部着色模式。 它将假定以下值之一:
- iteration_count
设置迭代计数模式。
- normalized_iteration_count
设置归一化迭代计数模式。
默认值为normalized_iteration_count.
- rate, r
设置帧率,以每秒帧数表示。默认值为"25"。
- size, s
设置帧大小。关于此选项的语法,请参阅(ffmpeg-utils)ffmpeg-utils手册中的"视频大小"部分。默认值为"640x480"。
- start_scale
设置初始缩放值。默认值为3.0。
- start_x
设置初始x位置。必须是介于-100到100之间的浮点值。默认值为-0.743643887037158704752191506114774。
- start_y
设置初始y位置。必须是介于-100到100之间的浮点值。默认值为-0.131825904205311970493132056385139。
45.7 mptestsrc
生成由MPlayer测试过滤器生成的各种测试图案。
生成的视频的大小是固定的,为512x512。 该源特别适用于测试编码功能。
此源接受以下选项:
- rate, r
指定源视频的帧率,即每秒生成的帧数。它必须是以下格式的字符串frame_rate_num/frame_rate_den,一个整数,一个浮点数或一个有效的视频帧率缩写。默认值是"25"。
- duration, d
设置源视频的持续时间。请参阅(ffmpeg-utils)ffmpeg-utils手册中的"时间持续时间"部分了解接受的语法。
如果未指定,或者表达的持续时间为负数,则假定视频将永久生成。
- test, t
-
设置要执行的测试的编号或名称。支持的测试包括:
- dc_luma
- dc_chroma
- freq_luma
- freq_chroma
- amp_luma
- amp_chroma
- cbp
- mv
- ring1
- ring2
- all
- max_frames, m
设置每个测试生成的最大帧数,默认值为30。
默认值是"all",它将循环执行所有测试。
一些示例:
mptestsrc=t=dc_luma
将生成一个"dc_luma"测试图案。
45.8 frei0r_src
提供一个frei0r源。
要启用此过滤器的编译,您需要安装frei0r头文件并使用以下命令配置FFmpeg--enable-frei0r.
此源接受以下参数:
- size
生成视频的大小。关于此选项的语法,请参阅(ffmpeg-utils)ffmpeg-utils手册中的"视频大小"部分.
- framerate
生成视频的帧率。它可以是以下形式的字符串num/den或者一个帧率缩写。
- filter_name
加载frei0r源的名称。有关frei0r以及如何设置参数的更多信息,请阅读frei0r的视频过滤文档中的部分。
- filter_params
传递给frei0r源的以"|"分隔的参数列表。
例如,生成一个frei0r partik0l源,大小为200x200,帧率为10,并覆盖在overlay过滤器的主输入上:
frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay
45.9 life
生成一个生命模式。
此源基于约翰·康威的生命游戏的推广。
源输入表示一个生命网格,每个像素表示一个单元,可以是两种状态之一:活着或死去。每个单元与其八个邻居交互,即水平、垂直或对角线相邻的单元。
每次交互网格根据采用的规则演变,规则指定了邻居活细胞的数量,使一个细胞保持活着或新生。rule选项允许指定要采用的规则。
此源接受以下选项:
- filename, f
设置文件以读取初始网格状态。在文件中,每个非空白字符都被视为一个活细胞,并用换行符分隔每行的结束。
如果未指定此选项,则初始网格会随机生成。
- rate, r
设置视频速率,即每秒生成的帧数。默认值是25。
- random_fill_ratio, ratio
设置初始随机网格的随机填充比率。它是一个介于0到1之间的浮点值,默认为1/PHI。 指定文件时会忽略此选项。
- random_seed, seed
设置填充初始随机网格的种子值,必须是介于0到UINT32_MAX之间的整数。如果未指定或明确设置为-1,过滤器将尽力使用一个良好的随机种子。
- rule
设置生命规则。
可以用类似"SNS/BNB"的代码指定规则,NS和NB是0到8范围内的数字序列,NS指定活细胞邻居数以让一个活细胞保持活着,NB指定活细胞邻居数以让一个死细胞新生(即"出生")。 "s"和"b"可以分别代替"S"和"B"。
另一种方法是通过一个18位的整数指定规则。高9位编码一个活细胞在不同邻居数状态下的下一状态,低9位指定生成新细胞的规则。每一更高位编码更高的邻居数。 例如,数字6153 =
(12<<9)+9指定了一个保持活着规则为12,一个生成规则为9,对应于"S23/B03"。默认值为"S23/B3",这是康威原始生命游戏规则,如果细胞有2或3个活邻居细胞将保持活着,如果周围有三个活细胞将生成一个新细胞。
- size, s
设置输出视频的大小。关于此选项的语法,请参见(ffmpeg-utils)ffmpeg-utils 手册中的"视频大小"部分.
如果filename已指定,大小将默认为 与输入文件相同的大小。如果size已设置,则必须包含输入文件中指定的大小,输入文件中定义的初始网格将居中在较大的结果区域。
如果未指定文件名,大小值默认为"320x240"(用于随机生成的初始网格)。
- stitch
如果设置为1,则将左右网格边缘和顶部与底部边缘缝合在一起。默认值为1。
- mold
设置细胞模具的速度。如果设置,死细胞将从death_color到mold_color逐步变化,步长为mold. mold可取值范围为0到255。
- life_color
设置活着或新生细胞的颜色。
- death_color
设置死细胞的颜色。如果mold已设置,这是用于表示死细胞的第一种颜色。
- mold_color
设置模具颜色,用于完全死去和模具化的细胞。
这三个颜色选项的语法,请参阅(ffmpeg-utils) ffmpeg-utils 手册中的"颜色"部分.
45.9.1 示例
- 读取一个网格自pattern,并将其居中于大小为300x300像素的网格上:
life=f=pattern:s=300x300
- 生成一个大小为200x200的随机网格,填充比例为2/3:
life=ratio=2/3:s=200x200
- 为演化随机生成的网格指定自定义规则:
life=rule=S14/B34
- 使用带有缓慢消亡效果(霉菌)的完整示例
ffplay:ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
45.10 perlin
生成 Perlin 噪声。
Perlin 噪声是一种具有空间局部连续性的噪声。它可以用于生成在空间和时间上具有连续性的模式,例如模拟烟雾、液体或地形。
如果通过octaves选项指定了多个倍频,那么 Perlin 噪声将以组件之和的形式生成,每个组件的频率加倍。在这种情况下,persistence选项用于指定与前一个组件相比幅度的比率。更多的倍频组件可以指定更高频率的细节(例如在生成地形中由巨石引起的小尺寸变化)。
45.10.1 选项
- size, s
指定缓冲视频帧的大小(宽度和高度)。有关此选项的语法,请查看(ffmpeg-utils) ffmpeg-utils 手册中的"视频大小"部分。 默认值是
320x240.- rate, r
指定视频流的预期帧速率,以每秒帧数表示。默认值是
25.- octaves
指定构成噪声的总组件数,每个组件的频率加倍。默认值是
1.- persistence
设置用于计算下一个倍频组件幅度相对于前一个组件幅度的比率。默认值是
1.- xscale
- yscale
定义用于乘以x、y坐标的缩放因子。这可以用于定义沿x或y轴拉伸的模式效果。默认值是
1.- tscale
定义用于乘以时间坐标的缩放因子。这可以用于更改时间变化速度。默认值是
1.- random_mode
设置用于计算初始模式的随机模式。
支持的值是:
- random
计算并使用随机种子。
- ken
使用 Ken Perlin 在原始文章中定义的预定义初始模式,这对与其他来源的输出进行比较非常有用。
- seed
使用由random_seed选项指定的值。
默认值是
random.- random_seed, seed
当random_mode设置为random_seed时,使用此值来计算初始模式。默认值是
0.
45.10.2 示例
- 生成单个组件:
perlin
- 使用具有7个组件的 Perlin 噪声,每个组件对总幅度的贡献减半:
perlin=octaves=7:persistence=0.5
- 将 Perlin 噪声与lutyuv结合使用以生成黑白效果:
perlin=octaves=3:tscale=0.3,lutyuv=y='if(lt(val\,128)\,255\,0)'
- 沿着 y 轴拉伸噪声,并将灰度级转换为仅限红色的信号:
perlin=octaves=7:tscale=0.4:yscale=0.3,lutrgb=r=val:b=0:g=0
45.11 qrencodesrc
使用 libqrencode 库生成 QR 码(参见https://fukuchi.org/works/qrencode/).
若要启用此源的编译,您需要使用以下配置选项配置 FFmpeg--enable-libqrencode.
QR 码是从提供的文本或文本模式生成的。生成的 QR 码根据指定的输出尺寸选项进行缩放并放置在视频输出中。
如果未指定任何文本,则不会生成 QR 码,而是返回一个空彩色的输出。
此源接受以下选项:
- qrcode_width, q
- padded_qrcode_width, Q
为渲染的 QR 码指定宽度的表达式,包括和不包括填充的宽度。选项qrcode_width表达式可以引用padded_qrcode_width表达式设置的值,反之亦然。 默认情况下,padded_qrcode_width设置为qrcode_width,即没有填充。
这些表达式仅在初始化源时评估一次。详情请参见qrencode 表达式部分。
请注意,此源缺少一些常数(例如x或t或 ¸n),因为它们仅在为每帧评估表达式时有意义,而不是在初始化时。
- rate, r
指定源视频的帧速率,以每秒生成的帧数表示。必须是以下格式的字符串frame_rate_num/frame_rate_den,整数,浮点数或有效的视频帧速率缩写。默认值为 "25"。
- case_sensitive, cs
指示 libqrencode 使用区分大小写的编码。这默认是启用的。可以禁用此选项以减少 QR 编码尺寸。
- level, l
指定 QR 编码的错误修正级别。较高的修正级别会增加编码尺寸,但编码对损坏的抵抗力会更强。最低级别是L.
它接受以下值:
- ‘L’
- ‘M’
- ‘Q’
- ‘H’
- expansion
选择输入文本的扩展方式。可以是
none,或normal(默认)。详情请参见qrencode 文本扩展部分。- text
- textfile
定义要渲染的文本。如果两者都未指定,则不编码 QR(只有一个空彩色帧)。
如果启用了扩展,则将文本视为文本模板,使用 qrencode 的扩展机制。详情请参见qrencode 文本扩展部分。
- background_color, bc
- foreground_color, fc
设置 QR 码和背景颜色。默认的foreground_color值是 "black",默认的background_color值是 "white"。
有关颜色选项的语法,请参见(ffmpeg-utils) ffmpeg-utils 手册中的"颜色" 部分.
45.11.1 示例
- 使用默认大小生成一个编码指定文本的 QR 码:
qrencodesrc=text=www.ffmpeg.org
- 与以下相同,但选择蓝色与粉红色的配色:
qrencodesrc=text=www.ffmpeg.org:bc=pink:fc=blue
- 生成一个宽度为200像素的 QR 码和填充,使填充后的宽度为 QR 码宽度的4/3:
qrencodesrc=text=www.ffmpeg.org:q=200:Q=4/3*q
- 生成一个填充后的宽度为200像素的 QR 码和填充,使 QR 码宽度为填充宽度的3/4:
qrencodesrc=text=www.ffmpeg.org:Q=200:q=3/4*Q
- 生成一个编码帧号的 QR 码:
qrencodesrc=text=%{n} - 生成一个编码 GMT 时间戳的 QR 码:
qrencodesrc=text=%{gmtime} - 生成一个编码浮点形式时间戳的 QR 码:
qrencodesrc=text=%{pts}
45.12 allrgb、allyuv、color、colorchart、colorspectrum、haldclutsrc、nullsrc、pal75bars、pal100bars、rgbtestsrc、smptebars、smptehdbars、testsrc、testsrc2、yuvtestsrc
的allrgb源返回大小为4096x4096的包含所有RGB颜色的帧。
源内容allyuv源返回大小为4096x4096的包含所有YUV颜色的帧。
源内容color源提供一个均匀颜色的输入。
源内容colorchart源提供一个色彩校准检查图。
源内容colorspectrum源提供一个色谱输入。
源内容haldclutsrc源提供一个身份Hald CLUT。另请参见haldclut滤镜。
源内容nullsrc源返回未经处理的视频帧。主要用于分析/调试工具,也可作为忽略输入数据的滤镜的来源。
源内容pal75bars源生成一个基于EBU PAL建议的颜色条模式,具有75%的颜色水平。
源内容pal100bars源生成一个基于EBU PAL建议的颜色条模式,具有100%的颜色水平。
源内容rgbtestsrc源生成一个RGB测试图案,用于检测RGB与BGR的问题。你应该看到从上到下的红色、绿色和蓝色条纹。
源内容smptebars源生成一个基于SMPTE工程指南EG 1-1990的颜色条模式。
源内容smptehdbars源生成一个基于SMPTE RP 219-2002的颜色条模式。
源内容testsrc源生成一个测试视频图案,展示一个色彩模式、一个滚动渐变和一个时间戳。这主要用于测试目的。
源内容testsrc2源类似于testsrc,但支持更多像素格式而不仅仅是rgb24。这允许其作为其他测试的输入而无需进行格式转换。
源内容yuvtestsrc源生成一个YUV测试图案。你应该看到从上到下的Y、Cb和Cr条纹。
源接受以下参数:
- level
指定Hald CLUT的级别,仅在
haldclutsrc源中可用。级别N生成一个N*N*NxN*N*N像素的图片,用作3D查找表的身份矩阵。每个分量编码在1/(N*N)刻度上。- color, c
指定源的颜色,仅在
color源中可用。有关此选项的语法,请查看(ffmpeg-utils)手册中ffmpeg-utils的"颜色"章节.- size, s
指定生成视频的大小。有关此选项的语法,请查看(ffmpeg-utils)手册中ffmpeg-utils的"视频大小"章节。 默认值为
320x240.此选项在
allrgb,allyuv和haldclutsrc滤镜中不可用。- rate, r
指定生成视频的帧率,即每秒生成的帧数。必须是以下格式的字符串frame_rate_num/frame_rate_den,一个整数,一个浮点数或一个有效的视频帧速率缩写。默认值为"25"。
- duration, d
设置生成视频的持续时间。请参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间章节了解接受的语法。
如果未指定,或指定的持续时间为负,视频将被假定为永久生成。
由于帧率用作时间基准,包括最后一帧在内的所有帧将具有其完整的持续时间。如果指定的持续时间不是帧持续时间的倍数,它将被向上舍入。
- sar
设置生成视频的样本纵横比。
- alpha
指定背景的透明度,仅在
testsrc2源中可用。值必须在0(完全透明)到255(完全不透明,默认值)之间。- decimals, n
设置时间戳显示的小数位数,仅在
testsrc源中可用。显示的时间戳值将对应于原始时间戳值乘以指定值的10的次方。默认值为0。
- type
设置颜色光谱的类型,仅在
colorspectrum源中可用。可以是以下选项之一:- ‘black’
- ‘white’
- ‘all’
- patch_size
设置单一颜色块的大小,仅在
colorchart源中可用。默认值为64x64.- preset
设置颜色校准图的颜色预设,仅在
colorchart源中可用。可用值为:
- ‘reference’
- ‘skintones’
默认值为
reference.
45.12.1 示例
- 生成一个持续时间为5.3秒的视频,大小为176x144,帧率为每秒10帧:
testsrc=duration=5.3:size=qcif:rate=10
- 以下图形描述将生成一个红色源,透明度为0.2,大小为"qcif",帧率为每秒10帧:
color=c=red@0.2:s=qcif:r=10
- 如果输入内容将被忽略,
nullsrc可使用。以下命令通过使用geq滤镜生成亮度平面中的噪声:nullsrc=s=256x256, geq=random(1)*255:128:128
45.12.2 命令
源color支持以下命令:
- c, color
设置创建图像的颜色。接受与相应color选项相同的语法。
45.13 openclsrc
使用OpenCL程序生成视频。
- source
OpenCL程序源文件。
- kernel
程序中的内核名称。
- size, s
要生成的帧大小。此项必须设置。
- format
用于生成帧的像素格式。此项必须设置。
- rate, r
每秒生成的帧数。默认值为'25'。
有关程序加载方式的详细信息,请参见program_opencl滤镜。
示例程序:
- 通过根据像素在输出图像中的位置设置像素值生成一个颜色梯度。(注意:这将适用于所有像素格式,但生成的输出不会相同。)
__kernel void ramp(__write_only image2d_t dst, unsigned int index) { int2 loc = (int2)(get_global_id(0), get_global_id(1)); float4 val; val.xy = val.zw = convert_float2(loc) / convert_float2(get_image_dim(dst)); write_imagef(dst, loc, val); } - 生成一个Sierpinski地毯图案,每一帧平移一个像素。
__kernel void sierpinski_carpet(__write_only image2d_t dst, unsigned int index) { int2 loc = (int2)(get_global_id(0), get_global_id(1)); float4 value = 0.0f; int x = loc.x + index; int y = loc.y + index; while (x > 0 || y > 0) { if (x % 3 == 1 && y % 3 == 1) { value = 1.0f; break; } x /= 3; y /= 3; } write_imagef(dst, loc, value); }
45.14 sierpinski
生成一个Sierpinski地毯/三角形分形,并随机平移。
该源接受以下选项:
- size, s
设置帧大小。有关此选项的语法,请查看(ffmpeg-utils)ffmpeg-utils手册中的"视频大小"章节默认值为 "640x480"。
- rate, r
设置帧率,以每秒帧数表示。默认值为 "25"。
- seed
设置用于随机平移的种子。
- jump
设置单次平移目标的最大跳跃范围。允许范围为 1 到 10000。
- type
设置分形类型,可以是默认
carpet或triangle.
45.15 zoneplate
生成一个 zoneplate 测试视频模式。
此源接受以下选项:
- size, s
设置帧大小。有关此选项的语法,请查看(ffmpeg-utils)ffmpeg-utils 手册中的 "视频大小" 部分。默认值为 "320x240"。
- rate, r
设置帧率,以每秒帧数表示。默认值为 "25"。
- duration, d
设置源视频的持续时间。请参阅ffmpeg-utils(1) 手册中的时间持续时间部分以获取接受的语法。
如果未指定,或表达的持续时间为负,则假定视频将永远生成。
- sar
设置源视频的样本长宽比。
- precision
设置用于正弦计算的查找表的精度,以位为单位。默认值为 10。允许范围为 4 到 16。
- xo
设置输出信号的水平轴偏移量。默认值为 0。
- yo
设置输出信号的垂直轴偏移量。默认值为 0。
- to
设置输出信号的时间轴偏移量。默认值为 0。
- k0
设置 0 阶,添加到信号相位的常数。默认值为 0。
- kx
设置 1 阶,相位因子乘数用于水平轴。默认值为 0。
- ky
设置 1 阶,相位因子乘数用于垂直轴。默认值为 0。
- kt
设置 1 阶,相位因子乘数用于时间轴。默认值为 0。
- kxt, kyt, kxy
设置空间和时间轴组合的相位因子乘数。默认值为 0。
- kx2
设置 2 阶,相位因子乘数用于水平轴。默认值为 0。
- ky2
设置 2 阶,相位因子乘数用于垂直轴。默认值为 0。
- kt2
设置 2 阶,相位因子乘数用于时间轴。默认值为 0。
- ku
设置添加到最终相位以生成信号的色度蓝分量的常数。默认值为 0。
- kv
设置添加到最终相位以生成信号的色度红分量的常数。默认值为 0。
45.15.1 命令
此源支持上述一些选项作为命令.
45.15.2 示例
- 生成水平彩色正弦扫描:
zoneplate=ku=512:kv=0:kt2=0:kx2=256:s=wvga:xo=-426:kt=11
- 生成垂直彩色正弦扫描:
zoneplate=ku=512:kv=0:kt2=0:ky2=156:s=wvga:yo=-240:kt=11
- 生成圆形 zone-plate:
zoneplate=ku=512:kv=100:kt2=0:ky2=256:kx2=556:s=wvga:yo=0:kt=11
46 视频输出
以下是当前可用的视频输出的描述。
46.1 buffersink
缓冲视频帧,并将它们在过滤器图的末端可用。
此输出主要用于编程用途,尤其是通过libavfilter/buffersink.h定义的接口或选项系统。
它接受一个指向 AVBufferSinkContext 结构的指针,该结构定义传入缓冲区的格式,并传递给avfilter_init_filter以进行初始化。
46.2 nullsink
空视频输出:对输入视频完全不做任何处理。它主要用作模板以及分析/调试工具。
47 多媒体过滤器
以下是当前可用的多媒体过滤器的描述。
47.1 a3dscope
将输入音频转换为 3D 范围视频输出。
该过滤器接受以下选项:
- rate, r
设置帧率,以每秒帧数表示。默认值为 "25"。
- size, s
指定输出视频的大小。有关此选项的语法,请查看(ffmpeg-utils)ffmpeg-utils 手册中的 "视频大小" 部分。 默认值为
hd720.- fov
设置摄像机的视野。默认值为 90 度。允许范围为 40 到 150。
- roll
设置摄像机的滚动角。
- pitch
设置摄像机的俯仰角。
- yaw
设置摄像机的偏航角。
- xzoom
设置摄像机在 X 轴上的缩放。
- yzoom
设置摄像机在 Y 轴上的缩放。
- zzoom
设置摄像机在 Z 轴上的缩放。
- xpos
设置摄像机在 X 轴上的位置。
- ypos
设置摄像机在 Y 轴上的位置。
- zpos
设置摄像机在 Z 轴上的位置。
- length
设置显示的音频波的长度,以帧数表示。
47.1.1 命令
过滤器支持上述一些选项作为命令.
47.2 abitscope
将输入音频转换为以显示音频位范围为视频输出。
该过滤器接受以下选项:
- rate, r
设置帧率,以每秒帧数表示。默认值为 "25"。
- size, s
指定输出视频的大小。有关此选项的语法,请查看(ffmpeg-utils)ffmpeg-utils 手册中的 "视频大小" 部分。 默认值为
1024x256.- colors
指定用空格或 '|' 分隔的颜色列表,这些颜色将用于绘制通道。未识别或缺少的颜色将被替换为白色。
- mode, m
设置输出模式。可以是
bars或trace。默认值是bars.
47.3 adrawgraph
使用输入音频元数据绘制图形。
47.4 agraphmonitor
参见graphmonitor.
47.5 ahistogram
将输入音频转换为以显示音量直方图为视频输出。
该过滤器接受以下选项:
- dmode
指定直方图的计算方式。
它接受以下值:
- ‘single’
对所有通道使用单个直方图。
- ‘separate’
对每个通道使用单独的直方图。
默认值是
single.- rate, r
设置帧率,以每秒帧数表示。默认值为 "25"。
- size, s
指定输出视频的大小。有关此选项的语法,请查看(ffmpeg-utils)ffmpeg-utils手册中的“视频尺寸”部分。 默认值是
hd720.- scale
设置显示比例。
它接受以下值:
- ‘log’
对数
- ‘sqrt’
平方根
- ‘cbrt’
立方根
- ‘lin’
线性
- ‘rlog’
反对数
默认值是
log.- ascale
设置振幅比例。
它接受以下值:
- ‘log’
对数
- ‘lin’
线性
默认值是
log.- acount
设置直方图中累积的帧数。 默认为1。如果设置为-1,将累积所有帧。
- rheight
设置窗口高度的直方图比例。
- slide
设置声谱滑动。
它接受以下值:
- ‘replace’
用新行替换旧行。
- ‘scroll’
从顶部向底部滚动。
默认值是
replace.- hmode
设置直方图模式。
它接受以下值:
- ‘abs’
使用样本的绝对值。
- ‘sign’
使用未处理的样本值。
默认值是
abs.
47.6 相位测量器
测量输入音频的相位,并作为元数据导出lavfi.aphasemeter.phase,
表示当前音频帧的平均相位值。默认情况下,视频输出也可以生成并启用。音频作为第一输出直接传递。
如果音频具有不同的通道布局,将重新编排为立体声。相位值范围是[-1, 1]其中-1表示左右通道完全反相
而1表示通道同相。
过滤器接受以下与视频输出相关的选项:
- rate, r
设置输出帧率。默认值是
25.- size, s
设置输出视频尺寸。关于此选项的语法,请参阅(ffmpeg-utils)ffmpeg-utils手册中的“视频尺寸”部分。 默认值是
800x400.- rc
- gc
- bc
指定红、绿、蓝对比度。默认值是
2,7以及1。 允许范围是[0, 255].- mpc
设置用于绘制中位相位的颜色。如果颜色为
none(这是默认值),将不会绘制中位相位值。- video
启用视频输出。默认是启用。
47.6.1 相位检测
过滤器还检测立体声流中的反相和单声序列。 当持续时间超过或达到最小设置值时,它会记录序列的开始、结束和持续时间。
过滤器接受以下用于此检测的选项:
- phasing
启用单声和反相检测。默认是禁用。
- tolerance, t
设置单声检测的相位容差,以幅度比表示。默认值为
0。 允许范围是[0, 1].- angle, a
设置反相检测的角度阈值,以度为单位。默认值是
170。 允许范围是[90, 180].- duration, d
设置通知单声或反相序列的持续时间,以秒为单位。默认值是
2.
47.6.2 示例
- 完整示例,使用
ffmpeg检测0.001相位容差的1秒单声:ffmpeg -i stereo.wav -af aphasemeter=video=0:phasing=1:duration=1:tolerance=0.001 -f null -
47.7 音频矢量示波器
将输入音频转换为视频输出,表示音频矢量示波器。
该过滤器用于测量立体声音频流通道之间的差异。 一个单声信号,由相同的左和右信号组成,会产生一条直的垂直线。 任何立体声分离都可见为偏离此线,创建利萨如图形。 如果出现平直但水平线,这表明左右通道反相。
过滤器接受以下选项:
- mode, m
设置矢量示波器模式。
可用值有:
- ‘lissajous’
旋转了45度的利萨如图形。
- ‘lissajous_xy’
与上面相同,但未旋转。
- ‘polar’
形状类似半个圆。
默认值是‘lissajous’.
- size, s
设置输出视频尺寸。关于此选项的语法,请参阅(ffmpeg-utils)ffmpeg-utils手册中的“视频尺寸”部分。 默认值是
400x400.- rate, r
设置输出帧率。默认值是
25.- rc
- gc
- bc
- ac
指定红、绿、蓝和Alpha对比度。默认值是
40,160,80以及255。 允许范围是[0, 255].- rf
- gf
- bf
- af
指定红、绿、蓝和Alpha衰减。默认值是
15,10,5以及5。 允许范围是[0, 255].- zoom
设置缩放因子。默认值是
1。允许范围是[0, 10]。 值低于1将自动调整缩放因子为最大可能值。- draw
设置矢量示波器绘图模式。
可用值有:
- ‘dot’
为每个样本绘制点。
- ‘line’
在前一个和当前样本之间绘制线。
- ‘aaline’
在前一个和当前样本之间绘制抗锯齿线。
默认值是‘dot’.
- scale
指定音频样本的振幅比例。
可用值有:
- ‘lin’
线性。
- ‘sqrt’
平方根。
- ‘cbrt’
立方根。
- ‘log’
对数。
- swap
交换左通道轴与右通道轴。
- mirror
镜像轴。
- ‘none’
无镜像。
- ‘x’
仅镜像x轴。
- ‘y’
仅镜像y轴。
- ‘xy’
镜像两个轴。
47.7.1 示例
- 完整示例使用
ffplay:ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1]; [a] avectorscope=zoom=1.3:rc=2:gc=200:bc=10:rf=1:gf=8:bf=7 [out0]'
47.7.2 命令
此滤镜支持上述所有选项作为命令,除了选项size和rate.
47.8 bench, abench
过滤图的基准测试部分。
该滤镜接受以下选项:
- action
启动或停止计时器。
可用值为:
- ‘start’
获取当前时间,将其设置为帧元数据(使用键
lavfi.bench.start_time),并将帧转发到下一个滤镜。- ‘stop’
获取当前时间并从输入帧元数据中获取
lavfi.bench.start_time元数据以确定时间差。时间差、平均值、最大值和最小值(分别为t,avg,max和min)然后打印出来。时间戳以秒为单位。
47.8.1 示例
- 基准测试selectivecolor滤镜:
bench=start,selectivecolor=reds=-.2 .12 -.49,bench=stop
47.9 concat
拼接音频和视频流,将它们一个接一个地连接起来。
该滤镜处理同步的视频和音频流片段。所有片段必须具有相同数量的每种类型的流,这也将是输出的流数量。
该滤镜接受以下选项:
- n
设置片段数量。默认是2。
- v
设置输出视频流的数量,这也是每个片段中视频流的数量。默认是1。
- a
设置输出音频流的数量,这也是每个片段中音频流的数量。默认是0。
- unsafe
激活不安全模式:不因片段格式不同而失败。
滤镜有v+a输出:首先是v视频输出,接着是a音频输出。
有nx(v+a) 输入:首先是第一个片段的输入,顺序与输出相同,然后是第二个片段的输入,依此类推。
相关流并不总是具有完全相同的持续时间,原因包括编解码器帧大小或粗糙的制作。因此,相关的同步流(例如视频及其音轨)应同时拼接。concat滤镜将使用每个片段中最长流的持续时间(除最后一个片段外),如果需要,将较短的音频流用静默填充。
为了使此滤镜正常工作,所有片段必须从时间戳0开始。
所有对应的流在所有片段中必须具有相同的参数;滤波系统将自动为视频流选择通用像素格式,为音频流选择通用样本格式、采样率和声道布局,但其他设置(例如分辨率)必须由用户显式转换。
不同的帧率是可以接受的,但会导致输出中的可变帧率;请确保配置输出文件以处理它。
47.9.1 示例
- 拼接开场、剧集和结尾,全部为双语版本(视频在流0,音频在流1和2):
ffmpeg -i opening.mkv -i episode.mkv -i ending.mkv -filter_complex \ '[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2] concat=n=3:v=1:a=2 [v] [a1] [a2]' \ -map '[v]' -map '[a1]' -map '[a2]' output.mkv
- 拼接两个部分,分别处理音频和视频,使用(a)movie源,并调整分辨率:
movie=part1.mp4, scale=512:288 [v1] ; amovie=part1.mp4 [a1] ; movie=part2.mp4, scale=512:288 [v2] ; amovie=part2.mp4 [a2] ; [v1] [v2] concat [outv] ; [a1] [a2] concat=v=0:a=1 [outa]
请注意,如果第一个文件中的音频流和视频流的持续时间不完全相同,则在拼接处会出现不同步。
47.9.2 命令
此滤镜支持以下命令:
- next
关闭当前片段并跳到下一个片段
47.10 ebur128
EBU R128 扫描器滤镜。此滤镜接受音频流并分析其响度级别。默认情况下,它以10Hz的频率记录带有瞬态响度(通过M识别)、短时响度(S)、整体响度(I)和响度范围(LRA).
识别)的消息。
该滤镜还具有视频输出(请参见video选项),实时图表以观察响度的发展。图表 enthält所提到记录的消息,因此在设置此选项时不会再打印,除非设置了详细日志记录。主图表区域包含短时响度(3秒分析),右侧的量表用于瞬态响度(400毫秒),但可以选配以显示短时响度(见量表).
绿色区域标记了目标响度上下的 +/- 1LU 范围(默认情况下为-23LUFS,除非通过target).
该滤镜接受以下选项:
- video
激活视频输出。音频流无论是否设置此选项都会保持不变。如果激活,视频流将是第一输出流。默认值为
0.- size
设置视频大小。此选项仅用于视频。有关此选项语法,请检查(ffmpeg-utils)ffmpeg-utils手册中的“视频大小”部分。默认和最低分辨率为
640x480.- meter
设置EBU刻度仪表。默认是
9。常见值为9和18,分别用于EBU刻度仪表+9和EBU刻度仪表+18。在此范围内也允许其他整数值。- metadata
设置元数据注入。如果设置为
1,音频输入将分段为100ms的输出帧,每个帧中包含元数据中的各种响度信息。所有元数据键都以lavfi.r128..作为前缀。默认值为
0.- framelog
强制帧日志记录级别。
可用值为:
- ‘quiet’
禁用日志记录
- ‘info’
信息日志记录级别
- ‘verbose’
详细日志记录级别
默认情况下,日志记录级别设置为信息。如果video或metadata选项设置为详细.
- peak
设置峰值模式。
可用模式可以叠加(该选项为
flag类型)。可能的值为:- ‘none’
禁用任何峰值模式(默认)。
- ‘sample’
启用样本峰值模式。
简单峰值模式,寻找较高样本值。它记录样本峰值的消息(通过
SPK).- ‘true’
启用真实峰值模式。
如果启用,峰值查找将在输入流的过采样版本上完成,以获得更高的峰值准确度。它记录真实峰值的消息(通过
TPK识别)和每帧真实峰值(通过FTPK识别)。此模式需要使用libswresample.
- dualmono
将单声道输入文件视为“双声道”。如果单声道文件用于在立体声音响系统上播放,它的EBU R128 测量将感知不正确。如果设置为
true此选项将补偿该效果。 多通道输入文件不受此选项影响。- panlaw
设置用于测量双单声道文件的特定声像定律。 该参数是可选的,默认值为-3.01dB。
- target
设置一个特定的目标电平(以LUFS为单位)作为可视化中的相对零点。 该参数是可选的,默认为EBU R128指定的-23LUFS。 然而,在线发布的内容可能更倾向于使用-16LUFS的电平(例如,用于播客或视频平台)。
- gauge
设置仪表显示的值。有效值为
momentary和sshortterm。默认情况下,将使用瞬时值,但在某些情况下,观察短期值可能更有用(例如现场混音)。- scale
设置响度的显示比例。有效参数为
absolute(以LUFS为单位)或relative(LU)相对于目标。这仅影响视频输出,不影响摘要或连续日志输出。- integrated
以LUFS为单位的只读导出值,用于测量的综合响度。
- range
以LU为单位的只读导出值,用于测量的响度范围。
- lra_low
以LUFS为单位的只读导出值,用于测量的LRA低值。
- lra_high
以LUFS为单位的只读导出值,用于测量的LRA高值。
- sample_peak
以dBFS为单位的只读导出值,用于测量的采样峰值。
- true_peak
以dBFS为单位的只读导出值,用于测量的真实峰值。
47.10.1 示例
- 使用的实时图表
ffplay,带有EBU刻度表 +18:ffplay -f lavfi -i "amovie=input.mp3,ebur128=video=1:meter=18 [out0][out1]"
- 使用运行分析
ffmpeg:ffmpeg -nostats -i input.mp3 -filter_complex ebur128 -f null -
47.11 interleave, ainterleave
从多个输入中按时间交错帧。
interleave适用于视频输入,ainterleave适用于音频。
这些滤镜从多个输入读取帧并将最旧的排队帧发送到输出。
输入流必须有明确定义的单调递增的帧时间戳值。
为了提交一帧到输出,这些滤镜需要至少为每个输入排队一个帧,因此,如果一个输入尚未完成并且不会接收到接入帧,它们将无法工作。
例如,考虑一个输入为select滤镜的情况,
该滤镜始终丢弃输入帧。interleave滤镜将继续从该输入读取,但直到输入发送流结束信号,它都无法向输出发送新帧。
此外,根据输入同步情况,滤镜在一个输入接收的帧数多于其他输入且队列已满的情况下将丢弃帧。
这些滤镜接受以下选项:
- nb_inputs, n
设置不同输入的数量,默认为2。
- duration
如何确定流结束。
- longest
最长输入的持续时间。(默认)
- shortest
最短输入的持续时间。
- first
第一个输入的持续时间。
47.11.1 示例
- 使用交织属于不同流的帧
ffmpeg:ffmpeg -i bambi.avi -i pr0n.mkv -filter_complex "[0:v][1:v] interleave" out.avi
- 添加闪烁模糊效果:
select='if(gt(random(0), 0.2), 1, 2)':n=2 [tmp], boxblur=2:2, [tmp] interleave
47.12 latency, alatency
测量滤镜延迟。
报告之前滤镜的滤波延迟,对于音频滤镜以音频样本数量为单位,对于视频滤镜以视频帧数量为单位。
在输入流结束时,滤镜将报告之前运行滤镜的最小和最大测量延迟。
47.13 metadata, ametadata
操作帧元数据。
此滤镜接受以下选项:
- mode
设置滤镜的操作模式。
可以是以下之一:
- ‘select’
如果同时设置
value和key,选择具有此类元数据的帧。如果仅设置key,选择元数据中具有此键的每个帧。- ‘add’
添加新的元数据
key和value。如果键已存在则不执行任何操作。- ‘modify’
修改已存在键的值。
- ‘delete’
如果
value被设置,仅删除具有此值的键。 否则,删除键。如果key未设置,则删除帧中的所有元数据值。- ‘print’
如果找到元数据,则打印键及其值。如果
key未设置,则打印帧中所有可用的元数据值。
- key
为所有模式设置所使用的键。对于除
print和delete.- value
模式外的所有模式,必须设置此键。
modify设置将使用的元数据值。add此选项对于- function
模式是强制性的。
value.比较元数据值和
- ‘same_str’
时使用的函数,可以是以下之一:
value.- ‘starts_with’
将值作为字符串处理,如果元数据值与
value选项字符串相同,返回true。- ‘less’
将值作为浮点数处理,如果元数据值小于
value.- ‘equal’
,返回true。
value将值作为浮点数处理,如果- ‘greater’
与元数据值相等,返回true。
value.- ‘expr’
将值作为浮点数处理,如果元数据值大于
expr选项表达式的计算结果为true,返回true。- ‘ends_with’
将值作为字符串处理,如果元数据值以
value选项字符串结尾,返回true。
- expr
设置表达式,用于
function设置为expr时。 表达式通过eval API进行评估,可以包含以下常量:- VALUE1, FRAMEVAL
元数据键的浮点表示形式
valuefrom metadata key.- VALUE2, USERVAL
Float representation of
value模式中指定,输出将写入指定文件。除了普通文件名,还可以指定任何可写URL。文件名“-”是标准输出的简写。如果value选项中提供的浮点表示形式。
- file
如果在
printmode, output is written to the named file. Instead of plain filename any writable url can be specified. Filename “-” is a shorthand for standard output. Iffile选项未设置,输出将以AV_LOG_INFO日志级别写入日志。- direct
在启用打印模式时,减少通过设置的URL写入输出的缓冲。.
47.13.1 示例
- 打印具有键
lavfi.signalstats.YDIF的帧的所有元数据值, 值介于0和1之间。signalstats,metadata=print:key=lavfi.signalstats.YDIF:value=0:function=expr:expr='between(VALUE1,0,1)'
- 将消音检测输出打印到文件metadata.txt.
silencedetect,ametadata=mode=print:file=metadata.txt
- 将所有元数据直接输出到文件描述符4的管道。
metadata=mode=print:file='pipe\:4'
47.14 perms, aperms
设置输出帧的读/写权限。
这些滤镜主要针对开发人员,用来测试以下滤镜图中的直接路径。
过滤器接受以下选项:
- mode
选择权限模式。
它接受以下值:
- ‘none’
什么都不做。这是默认选项。
- ‘ro’
将所有输出帧设置为只读。
- ‘rw’
将所有输出帧设置为可直接写。
- ‘toggle’
如果帧是可写的则设置为只读,如果是只读则设置为可写。
- ‘random’
随机设置每个输出帧为只读或可写。
- seed
设置的种子随机模式的种子值,必须是介于
0与UINT32_MAX之间的整数。如果未指定,或显式设置为-1,过滤器将尽最大努力尝试使用一个好的随机种子。
注意:如果在权限过滤器和后续过滤器之间自动插入了一个过滤器,那么后续过滤器可能无法按预期接收到权限。在权限过滤器之前插入一个格式或音频格式过滤器可以避免此问题。
47.15 实时播放,近实时播放
减慢过滤速度以近似匹配实时。
这些过滤器会暂停过滤一定时间,使输出速率与输入时间戳匹配。它们类似于re到ffmpeg.
它们接受以下选项:
- limit
暂停的时间限制。任何超过该时间的暂停将被视为时间戳不连续并重置计时器。默认值为2秒。
- speed
处理的速度因子。该值必须是大于零的浮点数。超过1.0的值会导致超过实时的处理速度,而较小的值会减慢处理速度。限制会相应自动调整。默认值为1.0。
无法在没有这些过滤器的情况下实现比此更快的处理速度。
47.15.1 命令
这两个过滤器支持所有上述选项作为命令.
47.16 分段,音频分段
将单个输入流拆分为多个流。
这个过滤器与concat过滤器的作用相反。
segment处理视频帧asegment处理音频样本。
此过滤器接受以下选项:
- timestamps
输出段的时间戳用’|’分隔。第一个段将从输入流的开头运行。最后一个段将运行到输入流的末尾。
- frames, samples
为了切分段的精确帧/样本计数。
在所有情况下,在每个片段前加前缀’+’将使片段相对于上一个片段。
47.16.1 示例
- 将输入音频流拆分为三个输出音频流,从输入音频流的开始开始,并存储在第一个输出音频流中,接着是在第60秒处并存储在第二个输出音频流中,最后是在输入音频流的第150秒后存储在第三个输出音频流中:
asegment=timestamps="60|150"
47.17 选择,音频选择
选择输出中要传递的帧。
此过滤器接受以下选项:
- expr, e
设置表达式,对每个输入帧进行评估。
如果表达式的结果为零,则帧被丢弃。
如果评估结果为负或NaN,帧被发送到第一个输出;否则,根据输入索引(从0开始计算)发送到相应的输出。
ceil(val)-1例如,值为表示输出的索引为
1.2,即第二个输出。ceil(1.2)-1 = 2-1 = 1, that is the second output.- outputs, n
设置输出的数量。要发送选择的帧的输出取决于评估结果。默认值为1。
表达式可包含以下常量:
- n
过滤帧的顺序编号,从0开始。
- selected_n
选中帧的顺序编号,从0开始。
- prev_selected_n
最后一个选中帧的顺序编号。如未定义则为NAN。
- TB
输入时间戳的时间基。
- pts
过滤帧的PTS(演示时间戳),以时间基单位表示。如未定义则为NAN。
- t
过滤帧的PTS,以秒为单位。如未定义则为NAN。
- prev_pts
先前过滤帧的PTS。如未定义则为NAN。
- prev_selected_pts
最后一次的先前过滤帧的PTS。如未定义则为NAN。
- prev_selected_t
最后一次选中帧的PTS,以秒为单位。如未定义则为NAN。
- start_pts
流中第一个非NAN的PTS。如果未找到则仍为NAN。
- start_t
流中第一个非NAN的PTS,以秒为单位。如果未找到则仍为NAN。
- pict_type (video only)
过滤帧的类型。它可以假定以下值之一:
- I
- P
- B
- S
- SI
- SP
- BI
- interlace_type (video only)
帧的隔行类型。它可以假定以下值之一:
- PROGRESSIVE
帧是渐进的(非隔行)。
- TOPFIRST
帧为顶部场优先。
- BOTTOMFIRST
帧为底部场优先。
- consumed_sample_n (audio only)
当前帧之前选中的样本数。
- samples_n (audio only)
当前帧中的样本数。
- sample_rate (audio only)
输入采样率。
- key
如果过滤帧是关键帧,则为1,否则为0。
- pos
过滤帧在文件中的位置,如果信息不可用(例如,对于合成视频),则为-1;不建议使用,不要使用。
- scene (video only)
表示0到1之间的值,用以指示是否出现新场景;较低的值反映当前帧引入新场景的概率很低,而较高的值则意味着当前帧更可能是一个新场景(参见以下示例)。
- concatdec_select
concat解复用器可以通过设置一个开始点和一个结束点来选择concat输入文件的一部分,但输出包可能不会完全包含在选定的区间内。使用此变量,可以跳过由concat解复用器生成且不完全包含在选定区间内的帧。
这是通过将帧的pts与lavf.concat.start_time以及lavf.concat.duration数据包元数据值进行比较实现的,这些值也存在于解码帧中。
变量concatdec_select的值为-1,若帧的pts至少为start_time且持续时间元数据丢失或帧的pts小于start_time + duration,否则为0,如果start_time元数据丢失则为NAN。
这基本意味着,如果输入帧的pts在由concat解复用器设置的区间内,则该帧被选择。
- iw (video only)
表示输入视频帧的宽度。
- ih (video only)
表示输入视频帧的高度。
- view (video only)
多视视频的视图ID。
选择表达式的默认值是"1"。
47.17.1 示例
- 选择输入中的所有帧:
select
上述示例与以下内容相同:
select=1
- 跳过所有帧:
select=0
- 仅选择I帧:
select='eq(pict_type\,I)'
- 每100帧选择一帧:
select='not(mod(n\,100))'
- 仅选择10-20时间区间内的帧:
select=between(t\,10\,20)
- 选择仅包含在10-20时间间隔内的I帧:
select=between(t\,10\,20)*eq(pict_type\,I)
- 选择最小间隔为10秒的帧:
select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
- 使用aselect选择仅包含样本数量大于100的音频帧:
aselect='gt(samples_n\,100)'
- 创建首个场景的拼图:
ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png
比较场景与介于0.3到0.5之间的值进行比较通常是合理的选择。
- 将偶数帧和奇数帧发送到不同的输出,并将其合成:
select=n=2:e='mod(n, 2)+1' [odd][even]; [odd] pad=h=2*ih [tmp]; [tmp][even] overlay=y=h
- 从使用起始点和终止点但源文件不是仅帧内的ffconcat文件中选择有用的帧。
ffmpeg -copyts -vsync 0 -segment_time_metadata 1 -i input.ffconcat -vf select=concatdec_select -af aselect=concatdec_select output.avi
47.18 sendcmd,asendcmd
向滤镜图发送命令。
这些滤镜读取要发送到滤镜图中其他滤镜的命令。
sendcmd必须插入在两个视频滤镜之间,asendcmd必须插入在两个音频滤镜之间,但除此之外,它们的工作方式相同。
命令的规格可以在滤镜参数中通过命令选项指定,或通过文件名选项指定的文件中提供。
这些滤镜接受以下选项:
- commands, c
设置要读取并发送到其他滤镜的命令。
- filename, f
设置包含待读取并发送到其他滤镜的命令的文件名。
47.18.1 命令语法
命令描述包括一系列间隔规格,包含当与该间隔相关的特定事件发生时要执行的命令列表。该事件通常为当前帧时间进入或离开指定时间间隔。
间隔通过以下语法指定:
开始[-结束] 命令;
时间间隔由开始和结束时间指定。结束是可选的,默认为最大时间。
当前帧时间被认为在指定间隔内如果其包括在区间 [开始, 结束),即时间大于或等于开始并小于结束.
命令由与该时间间隔相关的一系列一个或多个命令规格组成,命令之间用","分隔。命令规格的语法如下:
[标志] 目标 命令 参数
标志是可选的,指定与时间间隔相关的事件类型,用于启用发送指定的命令,并必须包含用"+"或"|"分隔并括在"["和"]"之间的一系列标识符标志。
以下标志被认定:
- enter
当当前帧时间戳进入指定间隔时发送命令。换句话说,当前一帧时间戳不在指定间隔内,而当前帧时间戳在指定间隔内时发送命令。
- leave
当当前帧时间戳离开指定间隔时发送命令。换句话说,当前一帧时间戳在指定间隔内,而当前帧时间戳不在指定间隔内时发送命令。
- expr
命令参数被解释为表达式,表达式结果作为参数.
通过eval API进行表达式解析,可以包含以下常量:
- POS
帧在文件中的原始位置,如果对当前帧未定义则为未定义。已废弃,不建议使用。
- PTS
输入的展示时间戳。
- N
视频或音频输入帧的计数,从0开始。
- T
当前帧的时间(以秒为单位)。
- TS
当前命令间隔的开始时间(以秒为单位)。
- TE
当前命令间隔的结束时间(以秒为单位)。
- TI
当前命令间隔的插值时间,TI = (T - TS) / (TE - TS)。
- W
视频帧宽度。
- H
视频帧高度。
如果标志未指定,则默认值为[enter]被假定。
目标指定命令的目标,通常是滤镜类的名字或具体滤镜实例名。
命令指定目标滤镜的命令名称。
参数是可选的,指定对于给定命令.
一个间隔规格与另一个间隔规格之间的空白或从#到行尾的字符序列会被忽略,可用于添加注释。
如下提供简化版的BNF命令规格语法描述:
命令标志 ::= "enter" | "leave" 命令标志列表 ::= 命令标志 [(+|"|")命令标志] 命令 ::= ["[" 命令标志列表 "]"] 目标 命令 [参数] 命令集 ::= 命令 [,命令集] 时间间隔 ::= 开始时间[-结束时间] 命令集 间隔集 ::= 单个间隔[;间隔集]
47.18.2 示例
- 在第4秒指定音频节奏的变化:
asendcmd=c='4.0 atempo tempo 1.5',atempo
- 定位到特定的滤镜实例:
asendcmd=c='4.0 atempo@my tempo 1.5',atempo@my
- 在文件中指定drawtext和hue命令的列表。
# show text in the interval 5-10 5.0-10.0 [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=hello world', [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text='; # desaturate the image in the interval 15-20 15.0-20.0 [enter] hue s 0, [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=nocolor', [leave] hue s 1, [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=color'; # apply an exponential saturation fade-out effect, starting from time 25 25 [enter] hue s exp(25-t)一个滤镜图允许读取并处理以上命令列表存储在文件中的内容test.cmd,可以通过以下命令指定:
sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue
47.19 setpts, asetpts
修改输入帧的PTS(呈现时间戳)。
setpts作用于视频帧,asetpts作用于音频帧。
此滤镜接受以下选项:
- expr
评估表达式以生成每帧的时间戳。
- strip_fps (video only)
布尔选项,用以确定是否清除原始帧率元数据。 如果设置为true,请注意,如果输出发送到恒定帧率复用器,应该显式指定合理的帧率。 默认值是
false.
表达式通过eval API进行评估,可以包含以下常量:
- FRAME_RATE, FR
帧率,仅在恒定帧速率视频中定义
- PTS
输入中的显示时间戳
- N
视频输入帧的计数或音频样本消耗的数量, 不包括当前帧,从0开始。
- NB_CONSUMED_SAMPLES
消耗的样本数量,不包括当前帧 (仅音频)
- NB_SAMPLES, S
当前帧中的样本数量 (仅音频)
- SAMPLE_RATE, SR
音频采样率。
- STARTPTS
第一帧的PTS。
- STARTT
第一帧的时间,单位为秒
- INTERLACED
说明当前帧是否为隔行扫描。
- T
当前帧的时间,单位为秒
- POS
帧在文件中的原始位置,或未定义时则为未定义;已废弃,不要使用。
- PREV_INPTS
之前的输入PTS。
- PREV_INT
之前输入的时间,单位为秒
- PREV_OUTPTS
之前的输出PTS。
- PREV_OUTT
之前输出的时间,单位为秒
- RTCTIME
壁钟 (RTC) 时间,单位为微秒。此项已废弃,请使用 time(0)。
- RTCSTART
电影开始时的壁钟 (RTC) 时间,单位为微秒。
- TB
输入时间戳的时间基准。
- T_CHANGE
应用命令后第一帧的时间或无命令时的第一帧时间。
47.19.1 示例
- 从零开始计算PTS
setpts=PTS-STARTPTS
- 应用快速移动效果:
setpts=0.5*PTS
- 应用慢动作效果:
setpts=2.0*PTS
- 设置固定的每秒25帧的速率:
setpts=N/(25*TB)
- 应用+/-100TB单位的随机跳动效果:
setpts=PTS+randomi(0, -100\,100)
- 设置固定的25fps速率并带有一些跳动:
setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))'
- 对输入PTS应用10秒的偏移量:
setpts=PTS+10/TB
- 通过计算样本生成时间戳并根据当前时间基重新调整:
setpts='(RTCTIME - RTCSTART) / (TB * 1000000)'
- 通过计算样本生成时间戳:
asetpts=N/SR/TB
47.19.2 命令
两个滤镜支持上述所有选项作为命令.
47.20 setrange
强制为输出视频帧设置颜色范围。
滤镜设定输出帧的颜色范围属性。
它不会更改输入帧,仅设置相应的属性,这会影响后续滤镜处理方式。setrange filter marks the color range property for the
output frames. It does not change the input frame, but only sets the
corresponding property, which affects how the frame is treated by
following filters.
滤镜接受以下选项:
- range
可用值为:
- ‘auto’
保持相同的颜色范围属性。
- ‘unspecified, unknown’
将颜色范围设置为未指定。
- ‘limited, tv, mpeg’
将颜色范围设置为有限。
- ‘full, pc, jpeg’
将颜色范围设置为全范围。
47.21 settb, asettb
设置用于输出帧时间戳的时间基。 它主要用于测试时间基准配置。
它接受以下参数:
- expr, tb
评估为输出时间基的表达式。
该值是一个表示有理数的算术表达式。表达式可以包含 "AVTB"(默认时间基)、"intb"(输入时间基)和 "sr"(采样率,仅音频)。默认值为 "intb"。tb is an arithmetic expression representing a rational. The expression can contain the constants "AVTB" (the default timebase), "intb" (the input timebase) and "sr" (the sample rate, audio only). Default value is "intb".
47.21.1 示例
- 将时间基设为1/25:
settb=expr=1/25
- 将时间基设为1/10:
settb=expr=0.1
- 将时间基设为1001/1000:
settb=1+0.001
- 将时间基设为2*intb:
settb=2*intb
- 设置默认时间基值:
settb=AVTB
47.22 showcqt
使用Brown-Puckette常量Q变换算法直接计算频率域系数(但其变换并非真正的常量Q,实质上Q因子实际上是可变的/受限的),将输入音频转为以音乐音符刻度的从E0到D#10的频谱视频输出。
滤镜接受以下选项:
- size, s
指定输出视频的大小。它必须为偶数。关于此选项的语法,请查看(ffmpeg-utils) "视频大小"部分在ffmpeg-utils手册中。 默认值为
1920x1080.- fps, rate, r
设置输出帧率。默认值为
25.- bar_h
设置柱状图高度。必须为偶数。默认值是
-1它会自动计算柱状图高度。- axis_h
设置轴高度。必须是偶数。默认值是
-1它会自动计算轴高度。- sono_h
设置声谱图高度。必须是偶数。默认值是
-1它会自动计算声谱图高度。- fullhd
设置全高清分辨率。此选项已废弃,请使用size, s替代。默认值是
1.- sono_v, volume
指定声谱图音量表达式。它可以包含变量:
- bar_v
变量柱状音量评估表达式
- frequency, freq, f
评估的频率
- timeclamp, tc
变量时间限制选项
和函数:
- a_weighting(f)
等响度A加权
- b_weighting(f)
等响度B加权
- c_weighting(f)
等响度C加权。
默认值是
16.- bar_v, volume2
指定柱状图音量表达式。它可以包含变量:
- sono_v
变量sono_v已计算表达式
- frequency, freq, f
评估频率
- timeclamp, tc
的值时间限制选项
和函数:
- a_weighting(f)
A加权等响度
- b_weighting(f)
B加权等响度
- c_weighting(f)
C加权等响度。
默认值是
sono_v.- sono_g, gamma
指定声谱图伽玛值。较低的伽玛值使频谱更有对比度,较高的伽玛值使频谱具有更大的范围。默认值是
3。 可接受范围是[1, 7].- bar_g, gamma2
指定柱状图伽玛值。默认值是
1。可接受范围是[1, 7].- bar_t
指定柱状图透明度级别。较低的值使柱状图更清晰。默认值是
1。可接受范围是[0, 1].- timeclamp, tc
指定变换的时间限制。在低频率下,时间域和频率域的精度存在权衡。如果时间限制较低,时间域中的事件表示更准确(例如快速低音鼓);否则频率域中的事件表示更准确(例如低音吉他)。可接受范围是
[0.002, 1]。默认值是0.17.- attack
设置攻击时间(秒)。默认值是
0(已禁用)。否则,它通过在时间域中应用非对称加窗来限制未来的采样,当需要低延迟时很有用。可接受范围是[0, 1].- basefreq
指定变换的基频。默认值是
20.01523126408007475, 即比E0低50音分的频率。可接受范围是[10, 100000].- endfreq
指定变换的终止频率。默认值是
20495.59681441799654, 即比D#10高50音分的频率。可接受范围是[10, 100000].- coeffclamp
此选项已被弃用并被忽略。
- tlength
指定时间域中的变换长度。使用此选项可在每个频率样本中控制时间域和频率域精度之间的权衡。它可以包含变量:
- frequency, freq, f
评估频率
- timeclamp, tc
的值时间限制选项。
默认值是
384*tc/(384+tc*f).- count
指定每帧视频的变换次数。默认值是
6。 可接受范围是[1, 30].- fcount
指定每个像素的变换次数。默认值是
0, 这会使其自动计算。可接受范围是[0, 10].- fontfile
指定用于绘制轴线的字体文件。如果未指定,使用嵌入字体。请注意,使用字体文件或嵌入字体进行绘图未实现自定义基频和终止频率,请改用轴文件选项。
- font
指定Fontconfig模式。这比字体文件优先级低。模式中的
:可能被替换为|以避免不必要的转义。- fontcolor
指定字体颜色表达式。这是一个应返回整数值0xRRGGBB的算术表达式。它可以包含变量:
- frequency, freq, f
评估频率
- timeclamp, tc
的值时间限制选项
和函数:
- midi(f)
频率f的MIDI号码,一些MIDI号码:E0(16), C1(24), C2(36), A4(69)
- r(x), g(x), b(x)
强度x的红、绿和蓝值。
默认值是
st(0, (midi(f)-59.5)/12); st(1, if(between(ld(0),0,1), 0.5-0.5*cos(2*PI*ld(0)), 0)); r(1-ld(1)) + b(ld(1)).- axisfile
指定用于绘制轴线的图像文件。此选项覆盖字体文件和字体颜色选项。
- axis, text
启用/禁用在轴线上绘制文本。如果设置为
0,将禁用在轴线上绘制文本,并忽略字体文件和轴文件选项。 默认值是1.- csp
设置颜色空间。接受的值是:
- ‘unspecified’
未指定(默认)
- ‘bt709’
BT.709
- ‘fcc’
FCC
- ‘bt470bg’
BT.470BG或BT.601-6 625
- ‘smpte170m’
SMPTE-170M或BT.601-6 525
- ‘smpte240m’
SMPTE-240M
- ‘bt2020ncl’
BT.2020(非恒定亮度)
- cscheme
设置频谱图颜色方案。这是以格式
left_r|left_g|left_b|right_r|right_g|right_b的浮点值列表。 默认值是1|0.5|0|0|0.5|1.
47.22.1 示例
- 播放音频,同时显示频谱:
ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt [out0]'
- 与上述相同,但帧速率为30 fps:
ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt=fps=30:count=5 [out0]'
- 以1280x720播放:
ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt=s=1280x720:count=4 [out0]'
- 禁用声谱图显示:
sono_h=0
- A1及其谐波:A1, A2, (近似)E3, A3:
ffplay -f lavfi 'aevalsrc=0.1*sin(2*PI*55*t)+0.1*sin(4*PI*55*t)+0.1*sin(6*PI*55*t)+0.1*sin(8*PI*55*t), asplit[a][out1]; [a] showcqt [out0]' - 与上述相同,但频率域中更准确:
ffplay -f lavfi 'aevalsrc=0.1*sin(2*PI*55*t)+0.1*sin(4*PI*55*t)+0.1*sin(6*PI*55*t)+0.1*sin(8*PI*55*t), asplit[a][out1]; [a] showcqt=timeclamp=0.5 [out0]' - 自定义音量:
bar_v=10:sono_v=bar_v*a_weighting(f)
- 自定义伽玛,现在频谱与振幅呈线性。
bar_g=2:sono_g=2
- 自定义tlength公式:
tc=0.33:tlength='st(0,0.17); 384*tc / (384 / ld(0) + tc*f /(1-ld(0))) + 384*tc / (tc*f / ld(0) + 384 /(1-ld(0)))'
- 自定义字体颜色和字体文件,C音符为绿色,其他音符为蓝色:
fontcolor='if(mod(floor(midi(f)+0.5),12), 0x0000FF, g(1))':fontfile=myfont.ttf
- 使用Fontconfig自定义字体:
font='Courier New,Monospace,mono|bold'
- 自定义频率范围并用图像文件自定义轴:
axisfile=myaxis.png:basefreq=40:endfreq=10000
47.23 showcwt
将输入音频转换为视频输出,用连续小波变换和Morlet小波表示频谱。
该过滤器接受以下选项:
- size, s
指定输出视频的尺寸。有关此选项的语法,请检查(ffmpeg-utils)“视频尺寸”部分中的ffmpeg-utils手册。 默认值是
640x512.- rate, r
设置输出帧速率。默认值是
25.- scale
设置使用的频率比例。允许的值是:
- linear
- log
- bark
- mel
- erbs
- sqrt
- cbrt
- qdrt
- fm
默认值是
linear.- iscale
设定使用的强度比例尺。允许的值为:
- linear
- log
- sqrt
- cbrt
- qdrt
默认值是
log.- min
设定输出中的最低频率。 默认是
20Hz。- max
设定输出中的最高频率。 默认是
20000Hz。实际的频率上限取决于输入音频的采样率,当设定值大于奈奎斯特频率时,此值将被强制调整。- imin
设定输出中的最低强度。
- imax
设定输出中的最高强度。
- logb
在将计算的幅度值映射到像素值时,设定亮度强度的对数基础。 允许范围为
0到1。 默认值是0.0001.- deviation
设定频率偏差。 低于
1的值更侧重于频率,而高于1的值更侧重于时间。 允许范围为0到10。 默认值是1.- pps
设定每秒每行的像素输出数。 允许范围为
1到1024。 默认值是64.- mode
设定输出视觉模式。允许的值为:
- magnitude
显示幅度。
- phase
仅显示相位。
- magphase
显示幅度和相位的组合。 幅度映射为亮度,相位映射为颜色。
- channel
显示每个通道幅度的独特颜色。
- stereo
显示立体声差异的独特颜色。
默认值是
magnitude.- slide
设定输出滑动方法。允许的值为:
- replace
- scroll
- frame
- direction
设定输出滑动方法的方向方式。允许的值为:
- lr
方向从左到右。
- rl
方向从右到左。
- ud
方向从上到下。
- du
方向从下到上。
- bar
设定条形图显示与显示大小的比例。默认值为0。
- rotation
设定颜色旋转,必须在[-1.0, 1.0]范围内。 默认值是
0.
47.24 showfreqs
将输入音频转换为表示音频功率谱的视频输出。 音频振幅在Y轴,频率在X轴。
滤镜接受以下选项:
- size, s
指定视频大小。如需了解此选项的语法,请查看(ffmpeg-utils)“视频大小”部分中的ffmpeg-utils手册。 默认是
1024x512.- rate, r
设定视频帧率。默认是
25.- mode
设定显示模式。 此设定决定每个频率条的表示方式。
它接受以下值:
- ‘line’
- ‘bar’
- ‘dot’
默认是
bar.- ascale
设定振幅比例。
它接受以下值:
- ‘lin’
线性比例。
- ‘sqrt’
平方根比例。
- ‘cbrt’
立方根比例。
- ‘log’
对数比例。
默认是
log.- fscale
设定频率比例。
它接受以下值:
- ‘lin’
线性比例。
- ‘log’
对数比例。
- ‘rlog’
反向对数比例。
默认是
lin.- win_size
设定窗口大小。允许范围为16到65536。
默认是
2048- win_func
设定加窗函数。
它接受以下值:
- ‘rect’
- ‘bartlett’
- ‘hanning’
- ‘hamming’
- ‘blackman’
- ‘welch’
- ‘flattop’
- ‘bharris’
- ‘bnuttall’
- ‘bhann’
- ‘sine’
- ‘nuttall’
- ‘lanczos’
- ‘gauss’
- ‘tukey’
- ‘dolph’
- ‘cauchy’
- ‘parzen’
- ‘poisson’
- ‘bohman’
- ‘kaiser’
默认是
hanning.- overlap
设定窗口重叠。在范围
[0, 1]内。默认是1, 这意味着将选择适用于所选加窗函数的最佳重叠。- averaging
设定时间平均。将此值设为0将显示当前的最大峰值。 默认值是
1, 这意味着时间平均被禁用。- colors
指定颜色的列表,用空格或‘|’分隔,将用于绘制通道频率。 无法识别或缺少的颜色将被替换为白色。
- cmode
设定频道显示模式。
它接受以下值:
- ‘combined’
- ‘separate’
默认是
combined.- minamp
设定
log振幅比例器中使用的最小振幅。- data
设定数据显示模式。
它接受以下值:
- ‘magnitude’
- ‘phase’
- ‘delay’
默认是
magnitude.- channels
设定在处理音频时使用的通道。默认情况下,所有通道都会被处理。
47.25 showspatial
将立体声输入音频转换为视频输出,表示两个通道之间的空间关系。
滤镜接受以下选项:
- size, s
指定输出的视频大小。如需了解此选项的语法,请查看(ffmpeg-utils)“视频大小”部分中的ffmpeg-utils手册。 默认值是
512x512.- win_size
设定窗口大小。允许范围为1024到65536。默认大小是4096.
- win_func
设定加窗函数。
它接受以下值:
- ‘rect’
- ‘bartlett’
- ‘hann’
- ‘hanning’
- ‘hamming’
- ‘blackman’
- ‘welch’
- ‘flattop’
- ‘bharris’
- ‘bnuttall’
- ‘bhann’
- ‘sine’
- ‘nuttall’
- ‘lanczos’
- ‘gauss’
- ‘tukey’
- ‘dolph’
- ‘cauchy’
- ‘parzen’
- ‘poisson’
- ‘bohman’
- ‘kaiser’
默认值是
hann.- rate, r
设定输出帧率。
47.26 showspectrum
将输入音频转换为视频输出,表示音频频率谱。
滤镜接受以下选项:
- size, s
指定输出的视频大小。如需了解此选项的语法,请查看(ffmpeg-utils)“视频大小”部分中的ffmpeg-utils手册。 默认值是
640x512.- slide
指定频谱如何沿窗口滑动。
它接受以下值:
- ‘replace’
样本到达右侧时重新从左侧开始
- ‘scroll’
样本从右向左滚动
- ‘fullframe’
只有当样本达到右边时才会生成帧
- ‘rscroll’
样本从左向右滚动
- ‘lreplace’
样本到达左边时重新从右边开始
默认值是
replace.- mode
指定显示模式。
可接受以下值:
- ‘combined’
所有频道显示在同一行
- ‘separate’
所有频道分别显示在不同的行
默认值是'combined’.
- color
指定显示颜色模式。
可接受以下值:
- ‘channel’
每个频道显示为单独的颜色
- ‘intensity’
每个频道使用相同的颜色方案显示
- ‘rainbow’
每个频道使用彩虹颜色方案显示
- ‘moreland’
每个频道使用莫兰德颜色方案显示
- ‘nebulae’
每个频道使用星云颜色方案显示
- ‘fire’
每个频道使用火焰颜色方案显示
- ‘fiery’
每个频道使用火热颜色方案显示
- ‘fruit’
每个频道使用果实颜色方案显示
- ‘cool’
每个频道使用冷色调颜色方案显示
- ‘magma’
每个频道使用岩浆颜色方案显示
- ‘green’
每个频道使用绿色颜色方案显示
- ‘viridis’
每个频道使用Viridis颜色方案显示
- ‘plasma’
每个频道使用Plasma颜色方案显示
- ‘cividis’
每个频道使用Cividis颜色方案显示
- ‘terrain’
每个频道使用地形颜色方案显示
默认值是'channel’.
- scale
指定用于计算强度颜色值的比例。
可接受以下值:
- ‘lin’
线性
- ‘sqrt’
平方根,默认
- ‘cbrt’
立方根
- ‘log’
对数
- ‘4thrt’
四次方根
- ‘5thrt’
五次方根
默认值是'sqrt’.
- fscale
指定频率比例。
可接受以下值:
- ‘lin’
线性
- ‘log’
对数
默认值是'lin’.
- saturation
设置显示颜色的饱和度修饰符。负值提供替代颜色方案。
0表示完全没有饱和度。 饱和度必须在[-10.0, 10.0]范围内。 默认值是1.- win_func
设置窗口函数。
可接受以下值:
- ‘rect’
- ‘bartlett’
- ‘hann’
- ‘hanning’
- ‘hamming’
- ‘blackman’
- ‘welch’
- ‘flattop’
- ‘bharris’
- ‘bnuttall’
- ‘bhann’
- ‘sine’
- ‘nuttall’
- ‘lanczos’
- ‘gauss’
- ‘tukey’
- ‘dolph’
- ‘cauchy’
- ‘parzen’
- ‘poisson’
- ‘bohman’
- ‘kaiser’
默认值是
hann.- orientation
设置时间与频率轴的方向。可以是
vertical或horizontal。默认是vertical.- overlap
设置窗口重叠比例。默认值是
0。 当值是1时,如果当前使用的窗口函数适用,重叠设置为推荐大小。- gain
设置用于计算强度颜色值的比例增益。 默认值是
1.- data
设置显示哪个数据。可以是
magnitude,默认或phase, 或展开相位:uphase.- rotation
设置颜色旋转,必须在[-1.0, 1.0]范围内。 默认值是
0.- start
设置要显示频谱图的起始频率。默认是
0.- stop
设置要显示频谱图的截止频率。默认是
0.- fps
设置帧速率的上限值。默认是
auto,不限。- legend
绘制时间和频率轴以及图例。默认情况下禁用。
- drange
设置用于计算强度颜色值的动态范围。默认值是120 dBFS。 允许范围是10到200。
- limit
设置输入音频样本音量的上限,单位为dBFS。默认值是0 dBFS。 允许范围是-100到100。
- opacity
设置使用带有alpha成分的像素格式输出时的不透明度强度。
用法与showwaves滤镜非常相似;请参阅该部分的示例。
47.26.1 示例
- 带有对数颜色缩放的大窗口:
showspectrum=s=1280x480:scale=log
- 完整示例:通过
ffplay:ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1]; [a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]'
47.27 showspectrumpic
将输入音频转换为单个视频帧,表示音频频谱。
滤镜接受以下选项:
- size, s
指定输出视频的尺寸。有关此选项的语法,请参阅(ffmpeg-utils)"Videosize"章节内容。 默认值是
4096x2048.- mode
指定显示模式。
可接受以下值:
- ‘combined’
所有频道显示在同一行
- ‘separate’
所有频道分别显示在不同的行
默认值是'combined’.
- color
指定显示颜色模式。
可接受以下值:
- ‘channel’
每个频道显示为单独的颜色
- ‘intensity’
每个频道使用相同的颜色方案显示
- ‘rainbow’
每个频道使用彩虹颜色方案显示
- ‘moreland’
每个频道使用莫兰德颜色方案显示
- ‘nebulae’
每个频道使用星云颜色方案显示
- ‘fire’
每个频道使用火焰颜色方案显示
- ‘fiery’
每个频道使用火热颜色方案显示
- ‘fruit’
每个频道使用果实颜色方案显示
- ‘cool’
每个频道使用冷色调颜色方案显示
- ‘magma’
每个频道使用岩浆颜色方案显示
- ‘green’
每个频道使用绿色颜色方案显示
- ‘viridis’
每个频道使用Viridis颜色方案显示
- ‘plasma’
每个频道使用Plasma颜色方案显示
- ‘cividis’
每个频道使用Cividis颜色方案显示
- ‘terrain’
每个频道使用地形颜色方案显示
默认值是'intensity’.
- scale
指定用于计算强度颜色值的比例。
可接受以下值:
- ‘lin’
线性
- ‘sqrt’
平方根,默认
- ‘cbrt’
立方根
- ‘log’
对数
- ‘4thrt’
四次根
- ‘5thrt’
五次根
默认值为‘log’.
- fscale
指定频率刻度。
它接受以下值:
- ‘lin’
线性
- ‘log’
对数
默认值为‘lin’.
- saturation
设置显示颜色的饱和度修饰符。负值提供替代配色方案。
0完全没有饱和度。 饱和度必须在[-10.0, 10.0]范围内。 默认值为1.- win_func
设置窗函数。
它接受以下值:
- ‘rect’
- ‘bartlett’
- ‘hann’
- ‘hanning’
- ‘hamming’
- ‘blackman’
- ‘welch’
- ‘flattop’
- ‘bharris’
- ‘bnuttall’
- ‘bhann’
- ‘sine’
- ‘nuttall’
- ‘lanczos’
- ‘gauss’
- ‘tukey’
- ‘dolph’
- ‘cauchy’
- ‘parzen’
- ‘poisson’
- ‘bohman’
- ‘kaiser’
默认值为
hann.- orientation
设置时间与频率轴的方向。可以是
vertical或者horizontal。 默认值是vertical.- gain
设置用于计算强度颜色值的比例增益。 默认值为
1.- legend
绘制时间与频率轴及图例。默认是启用。
- rotation
设置颜色旋转,必须在[-1.0, 1.0]范围内。 默认值为
0.- start
设置显示频谱图的起始频率。默认值为
0.- stop
设置显示频谱图的终止频率。默认值为
0.- drange
设置用于计算强度颜色值的动态范围。默认值为120 dBFS。 允许范围是10到200。
- limit
设置输入音频样本音量的上限,以dBFS为单位。默认值为0 dBFS。 允许范围是-100到100。
- opacity
在使用带透明分量的像素格式输出时设置不透明强度。
47.27.1 示例
- 使用1024x1024图片提取整个音轨的音频频谱图
ffmpeg:ffmpeg -i audio.flac -lavfi showspectrumpic=s=1024x1024 spectrogram.png
47.28 showvolume
将输入音频音量转换为视频输出。
过滤器接受以下选项:
- rate, r
设置视频速率。
- b
设置边框宽度,允许范围是[0, 5]。默认值为1。
- w
设置通道宽度,允许范围是[80, 8192]。默认值为400。
- h
设置通道高度,允许范围是[1, 900]。默认值为20。
- f
设置淡出效果,允许范围是[0, 1]。默认值为0.95。
- c
设置音量颜色表达式。
表达式可以使用以下变量:
- VOLUME
通道当前最大音量,单位dB。
- PEAK
当前峰值。
- CHANNEL
当前通道编号,从0开始。
- t
如果设置,则显示通道名称。默认是启用。
- v
如果设置,则显示音量值。默认是启用。
- o
设置方向,可以是水平:
h或垂直:v,默认是h.- s
设置步长,允许范围是[0, 5]。默认值为0,这意味着步长被禁用。
- p
设置背景不透明度,允许范围是[0, 1]。默认值为0。
- m
设置计量模式,可以是峰值:
p或均方根:r,默认是p.- ds
设置显示刻度,可以是线性:
lin或对数:log,默认是lin.- dm
以秒为单位。 如果设置为> 0,则显示前几秒的最大电平线。 默认情况下禁用:
0.- dmc
最大线的颜色。使用条件是
dm选项设置为> 0。 默认是:orange
47.29 showwaves
将输入音频转换为视频输出,表示样本波形。
过滤器接受以下选项:
- size, s
指定输出的视频大小。有关于此选项的语法,请查看(ffmpeg-utils)"视频大小"部分,在ffmpeg-utils手册中。 默认值是
600x240.- mode
设置显示模式。
可用的值有:
- ‘point’
为每个样本绘制一个点。
- ‘line’
为每个样本绘制一条垂直线。
- ‘p2p’
为每个样本绘制一个点,并在它们之间绘制一条线。
- ‘cline’
为每个样本绘制一条居中的垂直线。
默认值为
point.- n
设置打印在同一列上的样本数量。较大的值会降低帧率。必须是正整数。仅当值为速率未明确指定时才可以设置此选项。
- rate, r
设置(近似的)输出帧率。这是通过设置选项n实现的。默认值是"25"。
- split_channels
设置通道是否应分别绘制或重叠。默认值为0。
- colors
设置由’|’分隔的颜色,它们将用于绘制每个通道。
- scale
设置幅度刻度。
可用的值有:
- ‘lin’
线性。
- ‘log’
对数。
- ‘sqrt’
平方根。
- ‘cbrt’
立方根。
默认值是线性。
- draw
设置绘制模式。这主要用于设置高n.
可用的值有:
- ‘scale’
为每个绘制的样本设置像素值比例。
- ‘full’
直接绘制每个样本。
默认值为
scale.
47.29.1 示例
- 同时输出输入文件的音频及其对应的视频表示:
amovie=a.mp3,asplit[out0],showwaves[out1]
- 创建一个合成信号并用showwaves显示,强制帧率为每秒30帧:
aevalsrc=sin(1*2*PI*t)*sin(880*2*PI*t):cos(2*PI*200*t),asplit[out0],showwaves=r=30[out1]
47.30 showwavespic
将输入音频转换为单一视频帧,表示样本波形。
过滤器接受以下选项:
- size, s
指定输出的视频大小。有关于此选项的语法,请查看(ffmpeg-utils)“视频大小”部分位于ffmpeg-utils手册中。 默认值是
600x240.- split_channels
设置是否将声道分开绘制或叠加绘制。默认值是0。
- colors
设置使用’|’分隔的颜色,用于绘制每个声道。
- scale
设置振幅比例。
可用值是:
- ‘lin’
线性。
- ‘log’
对数。
- ‘sqrt’
平方根。
- ‘cbrt’
立方根。
默认是线性。
- draw
设置绘制模式。
可用值是:
- ‘scale’
为每个绘制样本缩放像素值。
- ‘full’
直接绘制每个样本。
默认值是
scale.- filter
设置过滤器模式。
可用值是:
- ‘average’
为每个绘制样本使用平均样本值。
- ‘peak’
为每个绘制样本使用峰值样本值。
默认值是
average.
47.30.1 示例
- 从整个音频轨道的波形中提取用于显示每个声道的分离表示,分辨率为1024x800的图片,使用
ffmpeg:ffmpeg -i audio.flac -lavfi showwavespic=split_channels=1:s=1024x800 waveform.png
47.31 sidedata, asidedata
删除帧的附加数据或基于附加数据选择帧。
此过滤器接受以下选项:
- mode
设置过滤器的操作模式。
可以是以下之一:
- ‘select’
选择具有此附加数据的每一帧。
type.- ‘delete’
删除此附加数据。
type。如果type未设置,则删除帧中的所有附加数据。
- type
设置用于所有模式的附加数据类型。必须为
select模式设置。有关帧附加数据类型的列表,请参考AVFrameSideDataType枚举 在libavutil/frame.h。例如,要选择AV_FRAME_DATA_PANSCAN附加数据,你必须指定PANSCAN.
47.32 spectrumsynth
从两个输入视频频谱中合成音频,第一个输入流表示跨时间的幅度,第二个表示跨时间的相位。 过滤器将从视频中显示的频域转换回音频输出呈现的时域。
此过滤器主要用于反向处理过的showspectrum过滤器输出,但也可以从其他频谱图合成声音。
但在这种情况下,如果没有相位数据,结果会很差,因为这样情况下需要重新创建相位数据,通常只是从随机噪声中重建。
为了获得最佳效果,请仅使用灰度输出(channel颜色模式在showspectrum过滤器)和log幅度视频的比例以及lin相位视频的比例。为第二个视频产生相位,请使用data选项。输入视频通常应使用fullframe滑动模式,因为将节省解码视频所需的资源。
过滤器接受以下选项:
- sample_rate
指定输出音频的采样率,音频生成频谱时的采样率可能不同。
- channels
设置输入视频频谱中表示的声道数。
- scale
设置生成幅度输入频谱时使用的比例。 可以是
lin或log。默认是log.- slide
设置生成输入频谱时使用的滑动。 可以是
replace,scroll,fullframe或rscroll。 默认是fullframe.- win_func
设置用于再合成的窗口函数。
- overlap
设置窗口重叠。在范围内
[0, 1]。默认是1, 这意味着将选择最佳重叠以匹配所选的窗口函数。- orientation
设置输入视频的方向。可以是
vertical或horizontal。 默认是vertical.
47.32.1 示例
- 首先从音频创建幅度和相位视频,假设音频是立体声并且采样率为44100,
然后将视频频谱重新合成回音频并使用spectrumsynth:
ffmpeg -i input.flac -lavfi showspectrum=mode=separate:scale=log:overlap=0.875:color=channel:slide=fullframe:data=magnitude -an -c:v rawvideo magnitude.nut ffmpeg -i input.flac -lavfi showspectrum=mode=separate:scale=lin:overlap=0.875:color=channel:slide=fullframe:data=phase -an -c:v rawvideo phase.nut ffmpeg -i magnitude.nut -i phase.nut -lavfi spectrumsynth=channels=2:sample_rate=44100:win_func=hann:overlap=0.875:slide=fullframe output.flac
47.33 split, asplit
将输入分割为多个相同的输出。
asplit用于音频输入,split用于视频输入。
过滤器接受一个单一参数,指定输出的数量。如果 未指定,默认是2。
47.33.1 示例
- 从同一输入创建两个单独的输出:
[in] split [out0][out1]
- 要创建3个或更多输出,需要指定输出数量,如:
[in] asplit=3 [out0][out1][out2]
- 从同一输入中创建两个单独的输出,一个裁剪和
一个填充:
[in] split [splitout1][splitout2]; [splitout1] crop=100:100:0:0 [cropout]; [splitout2] pad=200:200:100:100 [padout];
- 使用
ffmpeg:ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT
47.34 zmq, azmq
接收通过libzmq客户端发送的命令,并将其转发给 过滤器图中的过滤器。
zmq和azmq作为透传过滤器工作。zmq必须插入两个视频过滤器之间,azmq插入两个音频过滤器之间。这两个都能够向任何类型的过滤器发送消息。
要启用这些过滤器,你需要安装libzmq库和头文件,并用以下配置FFmpeg:--enable-libzmq.
关于libzmq的更多信息请参见:http://www.zeromq.org/
过滤器zmq和azmq作为libzmq服务器工作,
接收通过由以下定义的网络接口发送的消息bind_address(或缩写为"b")选项。
此选项的默认值是tcp://localhost:5555。你可能需要根据需要更改此值,但不要忘记转义任何
’:’字符(请参见过滤器图转义).
接收到的消息必须是一种形式:
目标 命令 [参数]
目标指定命令的目标,通常是过滤器类或特定过滤器实例的名称。默认 过滤器实例名称使用模式‘Parsed_<filter_name>_<index>’, 但你可以通过使用‘filter_name@id’ 语法 (参见过滤图语法).
命令指定目标过滤器的命令名称。
参数是可选的,指定给定命令.
在接收消息时,消息会被处理,相应的命令会注入到过滤图中。根据结果,过滤器会以如下格式向客户端发送回复:
错误码 错误原因 消息
消息是可选的。
47.34.1 示例
参见tools/zmqsend了解一个 zmq 客户端示例,可以用来发送由这些过滤器处理的命令。
考虑由ffplay生成的如下过滤图。
在此示例中,最后的 overlay 过滤器有一个实例名称。所有其他过滤器将使用默认实例名称。
ffplay -dumpgraph 1 -f lavfi " color=s=100x100:c=red [l]; color=s=100x100:c=blue [r]; nullsrc=s=200x100, zmq [bg]; [bg][l] overlay [bg+l]; [bg+l][r] overlay@my=x=100 "
要更改视频左侧的颜色,可以使用以下命令:
echo Parsed_color_0 c yellow | tools/zmqsend
要更改右侧颜色:
echo Parsed_color_1 c pink | tools/zmqsend
要更改右侧的位置:
echo overlay@my x 150 | tools/zmqsend
48 多媒体源
以下是当前可用多媒体源的描述。
48.1 amovie
这与movie源相同,但默认选择音频流。
48.2 avsynctest
生成一个音频/视频同步测试。
生成的流会定期显示闪光视频帧并在音频中发出蜂鸣声。 可用于检查音视频同步问题。
它接受以下选项:
- size, s
设置输出视频大小。默认值为
hd720.- framerate, fr
设置输出视频帧速率。默认值为
30.- samplerate, sr
设置输出音频采样率。默认值为
44100.- amplitude, a
设置输出音频蜂鸣声幅度。默认值为
0.7.- period, p
设置输出音频蜂鸣声间隔(秒)。默认值为
3.- delay, dl
设置输出视频闪光延迟(帧数)。默认值为
0.- cycle, c
启用视频延迟循环,默认禁用。
- duration, d
设置流输出持续时间。默认情况下时间是无限的。
- fg, bg, ag
设置前景色/背景色/附加颜色。
48.2.1 命令
此源支持上述一些选项作为命令.
48.3 movie
从一个电影容器中读取音频和/或视频流。
它接受以下参数:
- filename
要读取的资源名称(不一定是文件;也可以是通过某种协议访问的设备或流)。
- format_name, f
指定要读取的电影的格式,可以是容器名称或输入设备的名称。如果未指定,则从电影名称或通过探测来推测格式。
- seek_point, sp
指定以秒为单位的定位点。帧将从该定位点开始输出。该参数使用
av_strtod进行评估,所以数值可能附加 IS 后缀。默认值为 "0"。- streams, s
指定要读取的流。可以指定多个流,通过”+“分隔。源将有相应数量的输出,顺序一致。语法解释在(ffmpeg)"流说明符" 的 ffmpeg 手册章节中。两个特殊名称"dv"和"da"分别指定默认(最适合)视频流和音频流。默认值是 "dv",如果过滤器称为 "amovie",则为 "da"。
- stream_index, si
指定要读取的视频流的索引。如果值为 -1,将自动选择最适合的视频流。默认值为"-1"。已被弃用。如果过滤器称为"amovie",它将选择音频而非视频。
- loop
指定流顺序读取的次数。 如果值为0,则流将无限循环。 默认值是"1"。
注意,当电影被循环播放时,源时间戳不会更改,因此会生成非单调递增的时间戳。
- discontinuity
指定帧之间的时间差,如果超出该时间差,则被认为是时间戳不连续,通过调整后续时间戳将其移除。
- dec_threads
指定解码的线程数。
- format_opts
为打开的文件指定格式选项。格式选项可以作为键=值对的列表,用 ':' 分隔指定。以下示例展示如何添加 protocol_whitelist 和 protocol_blacklist 选项:
ffplay -f lavfi "movie=filename='1.sdp':format_opts='protocol_whitelist=file,rtp,udp\:protocol_blacklist=http'"
它允许在过滤图的主输入上覆盖第二个视频,如以下图中所示:
input -----------> deltapts0 --> overlay --> output
^
|
movie --> scale--> deltapts1 -------+
48.3.1 示例
- 从 in.avi AVI 文件的开头跳过 3.2 秒,将其覆盖在名为 "in" 的输入之上:
movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over]; [in] setpts=PTS-STARTPTS [main]; [main][over] overlay=16:16 [out]
- 从 video4linux2 设备读取,并将其覆盖在名为 "in" 的输入之上:
movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [over]; [in] setpts=PTS-STARTPTS [main]; [main][over] overlay=16:16 [out]
- 从 dvd.vob 读取第一个视频流和 id 为 0x81 的音频流;视频连接到名为 "video" 的垫,音频连接到名为 "audio" 的垫:
movie=dvd.vob:s=v:0+#0x81 [video] [audio]
48.3.2 命令
movie 和 amovie 都支持以下命令:
- seek
使用 "av_seek_frame" 执行定位。 语法为:seek流索引|时间戳|标识
- 流索引:如果流索引为 -1,选择一个默认流,并时间戳将根据 AV_TIME_BASE 单位自动转换为流特定的 time_base。
- 时间戳:以 AVStream.time_base 为单位的时间戳, 如果未指定流,则单位为 AV_TIME_BASE。
- 标识:选择方向和定位模式的标志位。
- get_duration
以 AV_TIME_BASE 单位获取电影时长。
49 外部库
FFmpeg 可以挂接一些外部库以增加对更多格式的支持。默认情况下不使用它们,必须通过传递适当的标志参数来显式请求使用。./configure.
49.1 开放媒体联盟 (AOM)
FFmpeg 可以使用 AOM 库进行 AV1 解码和编码。
访问http://aomedia.org/并按照安装库的说明操作。然后传递--enable-libaom给 configure 以启用该功能。
49.2 AMD AMF/VCE
FFmpeg 可以使用 AMD 高级媒体框架库 在具有视频编码引擎 (VCE) 的硬件上进行加速的 H.264 和 HEVC(仅限 Windows)编码。
要启用支持,您必须从https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git.
获取 AMF 框架头文件(版本 1.4.9+)。AMF/在系统包含路径中创建AMF/amf/public/include/的内容复制到该目录中。
然后使用--enable-amf.
amf 编码器的初始化顺序为: 1) 尝试通过 dx11 初始化(仅限 Windows) 2) 尝试通过 dx9 初始化(仅限 Windows) 3) 尝试通过 vulkan 初始化
要在Linux上使用h.264(AMD VCE)编码器,需要安装版本19.20及以上的amdgpu-pro驱动和amf-amdgpu-pro软件包(amdgpu-pro包含但不自动安装)。
该驱动可通过AMD官方驱动存档中的amdgpu-pro-install脚本安装。
49.3 AviSynth
FFmpeg可以将AviSynth脚本作为输入进行读取。要启用支持,请在安装提供的头文件后,传递--enable-avisynth到配置中以启用支持,头文件由AviSynth+提供。
AviSynth+可以通过传递-DHEADERS_ONLY:bool=on到基于CMake的正常构建系统或使用提供的GNUmakefile.
对于Windows,支持的AviSynth变种有AviSynth 2.6 RC1或更高版本用于32位构建,以及AviSynth+ r1718或更高版本用于32位和64位构建。
对于Linux、macOS和BSD,唯一支持的AviSynth变种是AviSynth+,版本从3.5开始。
在2016年,AviSynth+添加了对使用GCC构建的支持。然而,由于Windows调用约定的特殊性,32位GCC构建的AviSynth+与典型的32位FFmpeg构建不兼容。
默认情况下,FFmpeg假定与32位MSVC构建的AviSynth+兼容,这种构建配置使用最广泛且根深蒂固。用户可以通过传递-DAVSC_WIN32_GCC32到--extra-cflags配置FFmpeg时进行覆盖并启用对32位GCC构建的AviSynth+的支持。
64位FFmpeg构建不受影响,可以使用MSVC或GCC构建的AviSynth+,无需任何特殊标志。
AviSynth(+)是动态加载的。分发者可以通过构建FFmpeg并带有--enable-avisynth支持,二进制文件将与是否安装了AviSynth无关。如果用户希望使用AviSynth脚本,可以安装AviSynth(+),FFmpeg将能够找到并使用它来打开脚本。
49.4 Chromaprint
FFmpeg可以使用Chromaprint库来生成音频指纹。
传递--enable-chromaprint到配置中以启用它。查看https://acoustid.org/chromaprint.
49.5 codec2
FFmpeg可以使用codec2库进行codec2解码和编码。 目前没有原生解码器,因此必须使用libcodec2进行解码。
前往http://freedv.org/,下载“Codec 2源代码包”。
使用CMake进行构建和安装。Debian用户可以直接安装libcodec2-dev软件包。
安装libcodec2后,可以传递--enable-libcodec2到配置中以启用它。
使用codec2的最简单方法是使用.c2文件,因为它们包含解码所需的模式信息。
要编码这样的文件,请使用.c2文件扩展名并为libcodec2编码器提供-mode选项:ffmpeg -i input.wav -mode 700C output.c2。
播放非常简单,使用ffplay output.c2。
要查看支持的模式列表,请运行ffmpeg -h encoder=libcodec2。
也支持原始codec2文件。
要理解它们,需要将使用的模式指定为格式选项:ffmpeg -f codec2raw -mode 1300 -i input.raw output.wav.
49.6 dav1d
FFmpeg可以使用dav1d库进行AV1视频解码。
前往https://code.videolan.org/videolan/dav1d并按照安装库的说明操作。然后传递--enable-libdav1d到配置中以启用它。
49.7 davs2
FFmpeg可以使用davs2库进行AVS2-P2/IEEE1857.4视频解码。
前往https://github.com/pkuvcl/davs2并按照安装库的说明操作。然后传递--enable-libdavs2到配置中以启用它。
libdavs2遵循GNU公共许可证第2版或更高版本 (详情参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html)。使用它需要将FFmpeg的许可证升级为GPL。
49.8 uavs3d
FFmpeg可以使用uavs3d库进行AVS3-P2/IEEE1857.10视频解码。
前往https://github.com/uavs3/uavs3d并按照安装库的说明操作。然后传递--enable-libuavs3d到配置中以启用它。
49.9 游戏音乐仿真
FFmpeg可以使用游戏音乐仿真库读取受支持的视频游戏音乐文件格式中的音频内容。
传递--enable-libgme到配置中以启用它。查看https://bitbucket.org/mpyne/game-music-emu/overview.
49.10 Intel快速同步视频
FFmpeg可以使用Intel快速同步视频(QSV)对多种编解码器进行加速解码和编码。
要使用QSV,FFmpeg必须链接到libmfx调度器,该调度器加载实际的解码库。
调度器是开源的,可以从以下地址下载:https://github.com/lu-zero/mfx_dispatch.git。
FFmpeg需要使用--enable-libmfx选项进行配置,并且pkg-config需能够
定位调度器的.pc文件。
49.11 Kvazaar
FFmpeg可以使用Kvazaar库进行HEVC编码。
前往https://github.com/ultravideo/kvazaar并按照安装库的说明操作。然后传递--enable-libkvazaar到配置中以启用它。
49.12 LAME
FFmpeg可以使用LAME库进行MP3编码。
前往http://lame.sourceforge.net/并按照安装库的说明操作。
然后传递--enable-libmp3lame到配置中以启用它。
49.13 LCEVCdec
FFmpeg可以使用liblcevc_dec库对支持的比特流进行LCEVC增强层解码。
前往https://github.com/v-novaltd/LCEVCdec并按照安装库的说明操作。然后传递--enable-liblcevc-dec到配置中以启用它。
LCEVCdec遵循BSD-3-Clause-Clear许可证。
49.14 libilbc
iLBC是一种窄带语音编码器,由谷歌作为WebRTC项目的一部分免费提供。libilbc是一份适合打包的iLBC编码器副本。FFmpeg可以使用libilbc库进行iLBC解码和编码。
前往https://github.com/TimothyGu/libilbc并按照安装库的说明操作。然后传递--enable-libilbc到配置中以启用它。
49.15 libjxl
JPEG XL是一种图像格式,旨在完全替代传统JPEG以便延长其生命周期。请访问https://jpegxl.info/了解更多信息,并查看https://github.com/libjxl/libjxl用于库源代码。您可以传递--enable-libjxl到configure以启用libjxl包装器。
49.16 libvpx
FFmpeg可以利用libvpx库进行VP8/VP9解码和编码。
请访问http://www.webmproject.org/并按照安装库的说明操作。然后传递--enable-libvpx到configure以启用该功能。
49.17 ModPlug
FFmpeg可以利用这个起源于Modplug-XMMS的库读取MOD类音乐文件。查看https://github.com/Konstanty/libmodplug。传递--enable-libmodplug到configure以启用该功能。
49.18 OpenCORE, VisualOn 和 Fraunhofer 库
这些库源自Google Android代码,提供多种音频编解码器的编码器。
OpenCORE和VisualOn库采用Apache License 2.0许可证(参见http://www.apache.org/licenses/LICENSE-2.0了解详细信息),与LGPL版本2.1和GPL版本2不兼容。您必须通过传递--enable-version3到configure,将FFmpeg的许可证升级到LGPL版本3(或如果启用了GPL组件,则为GPL版本3),以使用该库。
Fraunhofer AAC库的许可证与GPL不兼容。因此,对于GPL构建,您必须传递--enable-nonfree到configure以使用该库。据我们所知,它与LGPL兼容。
49.18.1 OpenCORE AMR
FFmpeg可以利用OpenCORE库进行AMR-NB解码/编码和AMR-WB解码。
请访问http://sourceforge.net/projects/opencore-amr/并按照安装库的说明操作。然后传递--enable-libopencore-amrnb和/或--enable-libopencore-amrwb到configure以启用它们。
49.18.2 VisualOn AMR-WB编码库
FFmpeg可以利用VisualOn AMR-WBenc库进行AMR-WB编码。
请访问http://sourceforge.net/projects/opencore-amr/并按照安装库的说明操作。然后传递--enable-libvo-amrwbenc到configure以启用该功能。
49.18.3 Fraunhofer AAC库
FFmpeg可以利用Fraunhofer AAC库进行AAC解码和编码。
请访问http://sourceforge.net/projects/opencore-amr/并按照安装库的说明操作。然后传递--enable-libfdk-aac到configure以启用该功能。
49.18.4 LC3库
FFmpeg可以利用Google LC3库进行LC3解码和编码。
请访问https://github.com/google/liblc3/并按照安装库的说明操作。然后传递--enable-liblc3到configure以启用它。
49.19 OpenH264
FFmpeg可以利用OpenH264库进行H.264解码和编码。
请访问http://www.openh264.org/并按照安装库的说明操作。然后传递--enable-libopenh264到configure以启用该功能。
对于解码而言,该库比libavcodec内置解码器功能要受限得多;目前,该库缺乏支持解码B帧及其他主/高级别特性的功能。(目前仅支持约束基线级别和CABAC。)使用它主要用于测试以及利用思科的专利组合许可(http://www.openh264.org/BINARY_LICENSE.txt).
49.20 OpenJPEG
FFmpeg可以使用OpenJPEG库进行J2K视频解码/编码。请访问http://www.openjpeg.org/获取库并按照安装说明操作。要在FFmpeg中启用使用OpenJPEG,请传递--enable-libopenjpeg到./configure.
49.21 rav1e
FFmpeg可以通过其C语言绑定使用rav1e(Rust AV1 Encoder)进行视频编码。请访问https://github.com/xiph/rav1e/并按照说明构建C语言库。要在FFmpeg中启用使用rav1e,请传递--enable-librav1e到./configure.
49.22 SVT-AV1
FFmpeg可以利用用于AV1编码的可扩展视频技术AV1库。
请访问https://gitlab.com/AOMediaCodec/SVT-AV1/并按照安装库的说明操作。然后传递--enable-libsvtav1到configure以启用它。
49.23 TwoLAME
FFmpeg可以利用TwoLAME库进行MP2编码。
请访问http://www.twolame.org/并按照安装库的说明操作。然后传递--enable-libtwolame到configure以启用它。
49.24 VapourSynth
FFmpeg可以将VapourSynth脚本作为输入读取。要启用支持,请传递--enable-vapoursynth到configure。通过pkg-config检测到Vapoursynth。版本42及以上受支持。详情请参见http://www.vapoursynth.com/.
由于安全性问题,Vapoursynth脚本不会被自动检测到,因此必须强制指定输入格式。对于ff*CLI工具,在输入之前添加-f vapoursynth before the input -i yourscript.vpy.
49.25 x264
FFmpeg可以利用x264库进行H.264编码。
请访问http://www.videolan.org/developers/x264.html并按照安装库的说明操作。然后传递--enable-libx264到configure以启用它。
x264采用GNU公共许可证版本2或更高版本(详情参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html),若要使用它,您必须将FFmpeg的许可证升级到GPL。
49.26 x265
FFmpeg可以利用x265库进行HEVC编码。
请访问http://x265.org/developers.html并按照安装库的说明操作。然后传递--enable-libx265到configure以启用它。
x265采用GNU公共许可证版本2或更高版本(详情参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html详情参见),您必须将 FFmpeg 的许可证升级到 GPL 才能使用它。
49.27 xavs
FFmpeg 可以利用 xavs 库进行 AVS 编码。
前往http://xavs.sf.net/并按照安装库的说明进行操作。然后通过以下命令--enable-libxavs配置以启用它。
49.28 xavs2
FFmpeg 可以利用 xavs2 库进行 AVS2-P2/IEEE1857.4 视频编码。
前往https://github.com/pkuvcl/xavs2并按照安装库的说明进行操作。然后通过以下命令--enable-libxavs2配置以启用它。
libxavs2 属于 GNU 公共许可证版本 2 或更高版本(详见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html详情参见),您必须将 FFmpeg 的许可证升级到 GPL 才能使用它。
49.29 eXtra-fast Essential Video Encoder (XEVE)
FFmpeg 可以利用 XEVE 库进行 EVC 视频编码。
前往https://github.com/mpeg5/xeve并按照安装 XEVE 库的说明操作。然后通过以下命令--enable-libxeve配置以启用它。
49.30 eXtra-fast Essential Video Decoder (XEVD)
FFmpeg 可以利用 XEVD 库进行 EVC 视频解码。
前往https://github.com/mpeg5/xevd并按照安装 XEVD 库的说明操作。然后通过以下命令--enable-libxevd配置以启用它。
49.31 ZVBI
ZVBI 是一个 VBI 解码库,FFmpeg 可以利用它解码 DVB 文本页和 DVB 文本字幕。
前往http://sourceforge.net/projects/zapping/并按照安装库的说明进行操作。然后通过以下命令--enable-libzvbi配置以启用它。
50 支持的文件格式、编解码器或功能
您可以使用-formats和-codecs选项来获得详尽的列表。
50.1 文件格式
FFmpeg 通过以下libavformat库支持以下文件格式:
| 名称 | 编码 | 解码 | 说明 |
| 3dostr | X | ||
| 4xm | X | 4X 技术格式,应用于一些游戏。 | |
| 8088flex TMV | X | ||
| AAX | X | Audible 增强音频格式,用于有声读物。 | |
| AA | X | Audible 格式 2、3 和 4,用于有声读物。 | |
| ACT 语音 | X | 包含 G.729 音频 | |
| Adobe Filmstrip | X | X | |
| 音频 IFF (AIFF) | X | X | |
| American Laser Games MM | X | 游戏格式,例如 Mad Dog McCree。 | |
| 3GPP AMR | X | X | |
| Amazing Studio 压缩动画文件 | X | 用于游戏《Heart Of Darkness》的多媒体格式。 | |
| 苹果 HTTP 实时流 | X | ||
| Artworx 数据格式 | X | ||
| Interplay ACM | X | 仅音频格式,用于一些 Interplay 游戏。 | |
| ADP | X | 在 Nintendo Gamecube 上使用的音频格式。 | |
| AFC | X | 在 Nintendo Gamecube 上使用的音频格式。 | |
| ADS/SS2 | X | PS2 上使用的音频格式。 | |
| APNG | X | X | |
| ASF | X | X | 高级/主动流格式。 |
| AST | X | X | 任天堂Wii使用的音频格式。 |
| AVI | X | X | |
| AviSynth | X | ||
| AVR | X | Mac使用的音频格式。 | |
| AVS | X | Creature Shock游戏使用的多媒体格式。 | |
| Beam Software SIFF | X | Beam Software的一些游戏中使用的音频和视频格式。 | |
| Bethesda Softworks VID | X | Bethesda Softworks的一些游戏中使用。 | |
| 二进制文本 | X | ||
| Bink | X | 许多游戏使用的多媒体格式。 | |
| Bink音频 | X | 某些游戏使用的仅音频多媒体格式。 | |
| Bitmap Brothers JV | X | 用于Z和Z95游戏。 | |
| BRP | X | Argonaut Games格式。 | |
| Brute Force & Ignorance | X | 用于游戏《Flash Traffic: City of Angels》。 | |
| BFSTM | X | 根据BRSTM开发的任天堂WiiU所用音频格式。 | |
| BRSTM | X | 任天堂Wii使用的音频格式。 | |
| BW64 | X | 广播波形64位。 | |
| BWF | X | X | |
| codec2(原始) | X | X | 必须提供-mode格式选项才能正确解码。 |
| codec2 (.c2文件) | X | X | 包含版本和模式信息的头部,简化了回放。 |
| CRI ADX | X | X | 游戏机视频游戏中使用的仅音频格式。 |
| CRI AIX | X | ||
| CRI HCA | X | 游戏机视频游戏中使用的仅音频格式。 | |
| Discworld II BMV | X | ||
| Interplay C93 | X | 用于Interplay的《Cyberia》游戏。 | |
| Delphine Software International CIN | X | Delphine Software游戏使用的多媒体格式。 | |
| 数字语音标准(DSS) | X | ||
| CD+G | X | CD+G卡拉OK光盘使用的视频格式。 | |
| 幻影Cine | X | ||
| Commodore CDXL | X | Amiga CD视频格式。 | |
| 核心音频格式 | X | X | 苹果核心音频格式。 |
| CRC测试格式 | X | ||
| Creative Voice | X | X | 为Sound Blaster Pro设计。 |
| CRYO APC | X | CRYO互动娱乐的一些游戏使用的音频格式。 | |
| 数字影院音频 | X | X | |
| 豪华绘画动画 | X | ||
| DCSTR | X | ||
| DFA | X | 该格式在Chronomaster游戏中使用 | |
| DirectDraw表面 | X | ||
| DSD流文件(DSF) | X | ||
| DV视频 | X | X | |
| DXA | X | 该格式用于非Windows版本的Feeble Files游戏,也用于ScummVM使用的不同游戏过场动画的打包。 | |
| Electronic Arts cdata格式 | X | ||
| Electronic Arts多媒体格式 | X | 用于各种EA游戏;文件扩展名如WVE和UV2。 | |
| Ensoniq Paris音频文件 | X | ||
| FFM (FFserver实时馈送) | X | X | |
| Flash (SWF) | X | X | |
| Flash 9 (AVM2) | X | X | 仅解码嵌入音频。 |
| FLI/FLC/FLX动画 | X | .fli/.flc文件 | |
| Flash视频 (FLV) | X | X | Macromedia Flash视频文件 |
| framecrc测试格式 | X | ||
| FunCom ISS | X | FunCom各种游戏(如《最长的旅程》)中使用的音频格式。 | |
| G.723.1 | X | X | |
| G.726 | X | 包括左对齐和右对齐。 | |
| G.729 BIT | X | X | |
| G.729原始数据 | X | ||
| GENH | X | 各种游戏中的音频格式。 | |
| GIF动画 | X | X | |
| GXF | X | X | 通用交换格式SMPTE 360M,用于汤姆森Grass Valley播放服务器。 |
| HNM | X | 仅支持版本4,用于Cryo Interactive的一些游戏中 | |
| iCEDraw 文件 | X | ||
| ICO | X | X | 微软Windows ICO文件 |
| id Quake II CIN视频 | X | ||
| id RoQ | X | X | 用于Quake III、Jedi Knight 2及其他电脑游戏。 |
| IEC61937封装 | X | X | |
| IFF | X | 交换文件格式 | |
| IFV | X | 一些旧的CCTV DVR使用的格式。 | |
| iLBC | X | X | |
| Interplay MVE | X | 用于各种Interplay电脑游戏的格式。 | |
| Iterated系统ClearVideo | X | 仅限I-frames | |
| IV8 | X | 由IndigoVision 8000视频服务器生成的格式。 | |
| IVF (On2) | X | X | 用于libvpx的格式 |
| 互联网视频录制 | X | ||
| IRCAM | X | X | |
| LAF | X | 无限音频格式 | |
| LATM | X | X | |
| LMLM4 | X | 用于Linux Media Labs MPEG-4 PCI主板 | |
| LOAS | X | 包含LATM多路复用的AAC音频 | |
| LRC | X | X | |
| LVF | X | ||
| LXF | X | VR原生流格式,Leitch/Harris视频服务器使用。 | |
| Magic Lantern视频(MLV) | X | ||
| Matroska | X | X | |
| Matroska音频 | X | ||
| FFmpeg元数据 | X | X | 文本格式的元数据。 |
| MAXIS XA | X | 用于《模拟城市3000》;文件扩展名为.xa。 | |
| MCA | X | 用于Capcom的一些游戏;文件扩展名为.mca。 | |
| MD Studio | X | ||
| 潜龙谍影:双蛇 | X | ||
| Megalux Frame | X | 由Megalux Ultimate Paint使用 | |
| MobiClip MODS | X | ||
| MobiClip MOFLEX | X | ||
| Mobotix .mxg | X | ||
| Monkey音频 | X | ||
| Motion Pixels MVI | X | ||
| MOV/QuickTime/MP4 | X | X | 支持3GP、3GP2、PSP、iPod变体 |
| MP2 | X | X | |
| MP3 | X | X | |
| MPEG-1 系统 | X | X | 多路复用音频和视频,支持VCD格式 |
| MPEG-PS(程序流) | X | X | 也被称为VOB支持文件、SVCD和DVD格式 |
| MPEG-TS(传输流) | X | X | 也被称为DVB传输流 |
| MPEG-4 | X | X | MPEG-4是QuickTime的一种变体。 |
| MSF | X | PS3上使用的音频格式。 | |
| Mirillis FIC视频 | X | 没有光标渲染。 | |
| MIDI 样本转储标准 | X | ||
| MIME 多部分 JPEG | X | ||
| MSN TCP 网络摄像头 | X | 用于 MSN Messenger 网络摄像头流。 | |
| MTV | X | ||
| Musepack | X | ||
| Musepack SV8 | X | ||
| Material eXchange Format (MXF) | X | X | SMPTE 377M,用于 D-电影和广播行业。 |
| Material eXchange Format (MXF), D-10 映射 | X | X | SMPTE 386M, D-10/IMX 映射。 |
| NC 摄像头视频 | X | NC (AVIP NC4600) 摄像头流 | |
| NIST SPeech HEader REsources | X | ||
| 计算机化语音实验室 NSP | X | ||
| NTT TwinVQ (VQF) | X | 日本电报电话公司 TwinVQ。 | |
| Nullsoft 流媒体视频 | X | ||
| NuppelVideo | X | ||
| NUT | X | X | NUT 开放容器格式 |
| Ogg | X | X | |
| Playstation Portable PMP | X | ||
| 便携式语音格式 | X | ||
| RK 音频 (RKA) | X | ||
| TechnoTrend PVA | X | 用于 TechnoTrend DVB PCI 板卡。 | |
| QCP | X | ||
| 原始 ADTS (AAC) | X | X | |
| 原始 AC-3 | X | X | |
| 原始 AMR-NB | X | ||
| 原始 AMR-WB | X | ||
| 原始 APAC | X | ||
| 原始 APV | X | X | |
| 原始 aptX | X | X | |
| 原始 aptX HD | X | X | |
| 原始 Bonk | X | ||
| 原始中国 AVS 视频 | X | X | |
| 原始 DFPWM | X | X | |
| 原始 Dirac | X | X | |
| 原始 DNxHD | X | X | |
| 原始 DTS | X | X | |
| 原始 DTS-HD | X | ||
| 原始 E-AC-3 | X | X | |
| 原始 EVC | X | X | |
| 原始 FLAC | X | X | |
| 原始 GSM | X | ||
| 原始 H.261 | X | X | |
| 原始 H.263 | X | X | |
| 原始 H.264 | X | X | |
| 原始 HEVC | X | X | |
| 原始 Ingenient MJPEG | X | ||
| 原始 MJPEG | X | X | |
| 原始 MLP | X | ||
| 原始 MPEG | X | ||
| 原始 MPEG-1 | X | ||
| 原始 MPEG-2 | X | ||
| 原始 MPEG-4 | X | X | |
| 原始 NULL | X | ||
| 原始视频 | X | X | |
| 原始 id RoQ | X | ||
| 原始 OBU | X | X | |
| 原始 OSQ | X | ||
| 原始 SBC | X | X | |
| 原始 Shorten | X | ||
| 原始 TAK | X | ||
| 原始 TrueHD | X | X | |
| 原始 VC-1 | X | X | |
| 原始 PCM A-law | X | X | |
| 原始 PCM mu-law | X | X | |
| 原始 PCM Archimedes VIDC | X | X | |
| 原始 PCM 有符号 8 位 | X | X | |
| 原始 PCM 有符号 16 位 大端 | X | X | |
| 原始 PCM 有符号 16 位 小端 | X | X | |
| 原始 PCM 有符号 24 位 大端 | X | X | |
| 原始 PCM 有符号 24 位 小端 | X | X | |
| 原始 PCM 有符号 32 位 大端 | X | X | |
| 原始 PCM 有符号 32 位 小端 | X | X | |
| 原始 PCM 有符号 64 位 大端 | X | X | |
| 原始 PCM 有符号 64 位 小端 | X | X | |
| 原始 PCM 无符号 8 位 | X | X | |
| 原始 PCM 无符号 16 位 大端 | X | X | |
| 原始 PCM 无符号 16 位 小端 | X | X | |
| 原始 PCM 无符号 24 位 大端序 | X | X | |
| 原始 PCM 无符号 24 位 小端序 | X | X | |
| 原始 PCM 无符号 32 位 大端序 | X | X | |
| 原始 PCM 无符号 32 位 小端序 | X | X | |
| 原始 PCM 16.8 浮点 小端序 | X | ||
| 原始 PCM 24.0 浮点 小端序 | X | ||
| 原始 PCM 浮点 32 位 大端序 | X | X | |
| 原始 PCM 浮点 32 位 小端序 | X | X | |
| 原始 PCM 浮点 64 位 大端序 | X | X | |
| 原始 PCM 浮点 64 位 小端序 | X | X | |
| RDT | X | ||
| REDCODE R3D | X | RED 数码相机使用的文件格式,包含 JPEG 2000 帧和 PCM 音频。 | |
| RealMedia | X | X | |
| 重定向器 | X | ||
| RedSpark | X | ||
| Renderware 纹理字典 | X | ||
| Resolume DXV | X | X | 仅支持对 DXT1(正常质量,无 Alpha)纹理格式进行编码。 |
| RF64 | X | ||
| RL2 | X | 某些娱乐软件合作伙伴游戏使用的音视频格式。 | |
| RPL/ARMovie | X | ||
| 乐高 Mindstorms RSO | X | X | |
| RSD | X | ||
| RTMP | X | X | 通过发布流到 RTMP 服务器进行输出 |
| RTP | X | X | |
| RTSP | X | X | |
| 采样转储交换 | X | ||
| SAP | X | X | |
| SBG | X | ||
| SDNS | X | ||
| SDP | X | ||
| SER | X | ||
| 数字图片 SGA | X | ||
| 世嘉 FILM/CPK | X | X | 用于许多世嘉土星游戏机游戏中。 |
| 硅图形电影 | X | ||
| Sierra SOL | X | Sierra Online 游戏中使用的 .sol 文件。 | |
| Sierra VMD | X | 用于 Sierra CD-ROM 游戏中。 | |
| Smacker | X | 许多游戏使用的多媒体格式。 | |
| SMJPEG | X | X | 用于某些Loki游戏移植。 |
| SMPTE 337M封装 | X | ||
| Smush | X | 用于某些LucasArts游戏的多媒体格式。 | |
| Sony OpenMG (OMA) | X | X | Sony Sonic Stage和Sony Vegas使用的音频格式。 |
| Sony PlayStation STR | X | ||
| Sony Wave64 (W64) | X | X | |
| SoX原生格式 | X | X | |
| SUN AU格式 | X | X | |
| SUP原始PGS字幕 | X | X | |
| SVAG | X | Konami PS2游戏中使用的音频格式。 | |
| TDSC | X | ||
| 文本文件 | X | ||
| THP | X | 用于任天堂GameCube。 | |
| Tiertex Limited SEQ | X | Tiertex .seq文件用于游戏《Flashback》的DOS CD-ROM版本。 | |
| True Audio | X | X | |
| VAG | X | 许多Sony PS2游戏使用的音频格式。 | |
| VC-1测试比特流 | X | X | |
| Vidvox Hap | X | X | |
| Vivo | X | ||
| VPK | X | Sony PS游戏中使用的音频格式。 | |
| Marble WADY | X | ||
| WAV | X | X | |
| 波形存档格式 | X | ||
| WavPack | X | X | |
| WebM | X | X | |
| Windows电视(WTV) | X | X | |
| 《银河飞将III》电影 | X | 用于Origin的《银河飞将III》电脑游戏的多媒体格式。 | |
| Westwood Studios音频 | X | X | Westwood Studios游戏中使用的多媒体格式。 |
| Westwood Studios VQA | X | Westwood Studios游戏中使用的多媒体格式。 | |
| 宽带单比特数据格式(WSD) | X | ||
| WVE | X | ||
| Konami XMD | X | ||
| XMV | X | 微软视频容器,用于Xbox游戏。 | |
| XVAG | X | 用于PS3的音频格式。 | |
| xWMA | X | 微软音频容器,由XAudio 2使用。 | |
| 扩展二进制文本(XBIN) | X | ||
| YUV4MPEG 管道 | 支持 | 支持 | |
| Psygnosis YOP 格式 | 支持 |
X表示该列中的功能(编码/解码)是被支持的。
50.2 图像格式
FFmpeg可以读取和写入视频序列中每帧的图片。支持以下图像格式:
| 名称 | 编码 | 解码 | 备注 |
| .Y.U.V | 支持 | 支持 | 每个组件一个原始文件 |
| Alias PIX | 支持 | 支持 | Alias/Wavefront PIX 图像格式 |
| 动画 GIF | 支持 | 支持 | |
| APNG | 支持 | 支持 | 动画便携网络图形 |
| BMP | 支持 | 支持 | Microsoft BMP 图片格式 |
| BRender PIX | 支持 | Argonaut BRender 3D 引擎图像格式 | |
| CRI | 支持 | Cintel RAW 格式 | |
| DPX | 支持 | 支持 | 数字图片交换格式 |
| EXR | 支持 | OpenEXR | |
| FITS | 支持 | 支持 | 灵活图像传输系统 |
| HDR | 支持 | 支持 | Radiance HDR RGBE 图像格式 |
| IMG | 支持 | GEM 光栅图像 | |
| JPEG | 支持 | 支持 | 不支持渐进式 JPEG。 |
| JPEG 2000 | 支持 | 支持 | |
| JPEG-LS | 支持 | 支持 | |
| LJPEG | 支持 | 无损 JPEG | |
| Media 100 | 支持 | ||
| MSP | 支持 | Microsoft Paint 图像 | |
| PAM | 支持 | 支持 | PAM 是带有 alpha 支持的 PNM 扩展。 |
| PBM | 支持 | 支持 | 便携式位图图像 |
| PCD | 支持 | PhotoCD | |
| PCX | 支持 | 支持 | PC Paintbrush |
| PFM | 支持 | 支持 | 便携式数字浮点图像 |
| PGM | 支持 | 支持 | 便携式灰度图像 |
| PGMYUV | 支持 | 支持 | PGM 带有 YUV 4:2:0 的 U 和 V 组件 |
| PGX | X | PGX 文件解码器 | |
| PHM | X | X | 便携式 HalfFloatMap 图像 |
| PIC | X | Pictor/PC Paint | |
| PNG | X | X | 便携式网络图形图像 |
| PPM | X | X | 便携式像素映射图像 |
| PSD | X | Photoshop | |
| PTX | X | V.Flash PTX 格式 | |
| QOI | X | X | 相当好的图像格式 |
| SGI | X | X | SGI RGB 图像格式 |
| Sun Rasterfile | X | X | Sun RAS 图像格式 |
| TIFF | X | X | YUV、JPEG 和某些扩展尚不支持。 |
| Truevision Targa | X | X | Targa (.TGA) 图像格式 |
| VBN | X | X | Vizrt 二进制图像格式 |
| WBMP | X | X | 无线应用协议位图图像格式 |
| WebP | E | X | WebP 图像格式,通过外部库 libwebp 支持编码 |
| XBM | X | X | X 位图图像格式 |
| XFace | X | X | X-Face 图像格式 |
| XPM | X | X PixMap 图像格式 | |
| XWD | X | X | X 窗口转储图像格式 |
X表示该列(编码/解码)的功能受支持。
E表示支持通过外部库提供。
50.3 视频编解码器
| 名称 | 编码 | 解码 | 备注 |
| 4X 电影 | X | 用于某些电脑游戏。 | |
| 8088flex TMV | X | ||
| A64 多色 | X | 生成适合在 Commodore 64(多色模式)上播放的视频。 | |
| Amazing Studio PAF 视频 | X | ||
| American Laser Games MM | X | 用于像 Mad Dog McCree 这样的游戏。 | |
| Amuse Graphics 电影 | X | ||
| AMV 视频 | X | X | 用于中国的 MP3 播放器。 |
| ANSI/ASCII 艺术 | X | ||
| Apple Intermediate 编解码器 | X | ||
| 苹果 MJPEG-B | X | ||
| 苹果 Pixlet | X | ||
| 苹果 ProRes | X | X | 四字符代码:apch, apcn, apcs, apco, ap4h, ap4x |
| 苹果 QuickDraw | X | 四字符代码:qdrw | |
| APV | X | ||
| Argonaut 视频 | X | 用于某些 Argonaut 游戏。 | |
| 华硕 v1 | X | X | 四字符代码:ASV1 |
| 华硕 v2 | X | X | 四字符代码:ASV2 |
| ATI VCR1 | X | 四字符代码:VCR1 | |
| ATI VCR2 | X | 四字符代码:VCR2 | |
| Auravision Aura | X | ||
| Auravision Aura 2 | X | ||
| 欧特克动画师 Flic 视频 | X | ||
| 欧特克 RLE | X | 四字符代码:AASC | |
| AV1 | E | E | 通过外部库支持:libaom, libdav1d, librav1e 和 libsvtav1 |
| Avid 1:1 10-bit RGB 打包 | X | X | 四字符代码:AVrp |
| AVS (音视频标准) 视频 | X | Creature Shock 游戏中使用的视频编码。 | |
| AVS2-P2/IEEE1857.4 | E | E | 通过外部库支持:libxavs2 和 libdavs2 |
| AVS3-P2/IEEE1857.10 | E | 通过外部库支持:libuavs3d | |
| AYUV | X | X | 微软未压缩打包 4:4:4:4 |
| 光束软件 VB | X | ||
| 贝塞斯达 VID 视频 | X | 用于贝塞斯达软件的一些游戏。 | |
| Bink 视频 | X | ||
| BitJazz SheerVideo | X | ||
| Bitmap Brothers JV 视频 | X | ||
| y41p Brooktree 未压缩 4:1:1 12-bit | X | X | |
| Brooktree ProSumer 视频 | X | 四字符代码:BT20 | |
| 蛮力与无知 | X | 在游戏 Flash Traffic: City of Angels 中使用。 | |
| C93 视频 | X | Cyberia 游戏中使用的编解码器。 | |
| CamStudio | X | 四字符代码:CSCD | |
| CD+G | X | CD+G 卡拉 OK 光盘的视频编解码器 | |
| CDXL | X | Amiga CD 视频编解码器 | |
| 中国 AVS 视频 | E | X | AVS1-P2,基准配置,通过外部库 libxavs 编码 |
| Delphine 软件国际 CIN 视频 | X | 用于Delphine Software International游戏的编解码器。 | |
| Discworld II BMV视频 | 未知 | ||
| CineForm高清 | 未知 | 未知 | |
| Canopus HQ | 未知 | ||
| Canopus HQA | 未知 | ||
| Canopus HQX | 未知 | ||
| Canopus无损编解码器 | 未知 | ||
| CDToons | 未知 | 用于Broderbund游戏的编解码器。 | |
| Cinepak | 未知 | ||
| Cirrus Logic AccuPak | 未知 | 未知 | fourcc: CLJR |
| CPiA视频格式 | 未知 | ||
| Creative YUV (CYUV) | 未知 | ||
| DFA | 未知 | 用于Chronomaster游戏的编解码器。 | |
| Dirac | 支持 | 未知 | 通过原生vc2(Dirac Pro)编码器支持 |
| Deluxe Paint动画 | 未知 | ||
| DNxHD | 未知 | 未知 | 又名SMPTE VC3 |
| Duck TrueMotion 1.0 | 未知 | fourcc: DUCK | |
| Duck TrueMotion 2.0 | 未知 | fourcc: TM20 | |
| Duck TrueMotion 2.0 RT | 未知 | fourcc: TR20 | |
| DV(数字视频) | 未知 | 未知 | |
| Dxtory捕获格式 | 未知 | ||
| Feeble Files/ScummVM DXA | 未知 | 最初用于Feeble Files游戏的编解码器。 | |
| Electronic Arts CMV视频 | 未知 | 用于NHL 95游戏。 | |
| Electronic Arts Madcow视频 | 未知 | ||
| Electronic Arts TGV视频 | 未知 | ||
| Electronic Arts TGQ视频 | 未知 | ||
| Electronic Arts TQI视频 | 未知 | ||
| Escape 124 | 未知 | ||
| Escape 130 | 未知 | ||
| EVC / MPEG-5 第1部分 | 支持 | 支持 | 通过外部库libxeve和libxevd支持编码和解码 |
| FFmpeg视频编解码器#1 | 未知 | 未知 | 无损编解码器(fourcc: FFV1) |
| Flash屏幕视频v1 | 未知 | 未知 | fourcc: FSV1 |
| Flash屏幕视频v2 | 未知 | 未知 | |
| Flash视频(FLV) | 未知 | 未知 | Flash中使用的Sorenson H.263 |
| FM屏幕捕获编解码器 | 未知 | ||
| Forward无压缩 | 未知 | ||
| Fraps | 未知 | ||
| Go2Meeting | 未知 | fourcc: G2M2, G2M3 | |
| Go2Webinar | X | fourcc: G2M4 | |
| Gremlin 数字视频 | X | ||
| H.261 | X | X | |
| H.263 / H.263-1996 | X | X | |
| H.263+ / H.263-1998 / H.263 第二版 | X | X | |
| H.264 / AVC / MPEG-4 AVC / MPEG-4 第十部分 | E | X | 通过外部库 libx264 和 OpenH264 支持编码 |
| HEVC | X | X | 通过外部库 libx265 和 libkvazaar 支持编码 |
| HNM 第四版 | X | ||
| HuffYUV | X | X | |
| HuffYUV FFmpeg 变种 | X | X | |
| IBM Ultimotion | X | fourcc: ULTI | |
| id Cinematic 视频 | X | 用于 Quake II。 | |
| id RoQ 视频 | X | X | 用于 Quake III、Jedi Knight 2 等电脑游戏。 |
| IFF ILBM | X | IFF 交替位图 | |
| IFF ByteRun1 | X | IFF 游程编码位图 | |
| Infinity IMM4 | X | ||
| Intel H.263 | X | ||
| Intel Indeo 2 | X | ||
| Intel Indeo 3 | X | ||
| Intel Indeo 4 | X | ||
| Intel Indeo 5 | X | ||
| Interplay C93 | X | 用于 Interplay 的游戏 Cyberia。 | |
| Interplay MVE 视频 | X | 用于 Interplay 的 .MVE 文件。 | |
| J2K | X | X | |
| Karl Morton 的视频编码器 | X | 用于 Worms 游戏的编码器。 | |
| Kega 游戏视频 (KGV1) | X | Kega 模拟器屏幕捕获编码器。 | |
| Lagarith | X | ||
| LCEVC / MPEG-5 LCEVC / MPEG-5 第二部分 | E | 通过外部库 liblcevc-dec 支持解码 | |
| LCL (无损编码库) MSZH | X | ||
| LCL (无损编码库) ZLIB | E | E | |
| LEAD MCMP | X | ||
| LOCO | X | ||
| LucasArts SANM/Smush | X | 用于 LucasArts 游戏 / SMUSH 动画。 | |
| 无损 MJPEG | X | X | |
| MagicYUV 视频 | X | X | |
| Mandsoft 屏幕捕获编码器 | X | ||
| Microsoft ATC 屏幕 | X | 也被称为微软屏幕3。 | |
| 微软Expression Encoder屏幕 | X | 也被称为微软钛屏幕2。 | |
| 微软RLE | X | X | |
| 微软屏幕1 | X | 也被称为Windows Media Video V7屏幕。 | |
| 微软屏幕2 | X | 也被称为Windows Media Video V9屏幕。 | |
| 微软视频1 | X | ||
| 模仿 | X | 用于MSN Messenger摄像头视频流。 | |
| Miro VideoXL | X | fourcc:VIXL | |
| MJPEG(运动JPEG) | X | X | |
| Mobotix MxPEG视频 | X | ||
| 运动像素视频 | X | ||
| MPEG-1视频 | X | X | |
| MPEG-2视频 | X | X | |
| MPEG-4部分2 | X | X | 可以选择使用libxvidcore进行编码。 |
| MPEG-4第2部分微软变种版本1 | X | ||
| MPEG-4第2部分微软变种版本2 | X | X | |
| MPEG-4第2部分微软变种版本3 | X | X | |
| Newtek SpeedHQ | X | X | |
| 任天堂Gamecube THP视频 | X | ||
| NotchLC | X | ||
| NuppelVideo/RTjpeg | X | 在NuppelVideo文件中使用的视频编码。 | |
| On2 VP3 | X | 仍属实验阶段 | |
| On2 VP4 | X | fourcc:VP40 | |
| On2 VP5 | X | fourcc:VP50 | |
| On2 VP6 | X | fourcc:VP60, VP61, VP62 | |
| On2 VP7 | X | fourcc:VP70, VP71 | |
| VP8 | E | X | fourcc:VP80,通过外部库libvpx支持编码 |
| VP9 | E | X | 通过外部库libvpx支持编码 |
| Pinnacle TARGA CineWave YUV16 | X | fourcc: Y216 | |
| Q-team QPEG | X | fourcc:QPEG, Q1.0, Q1.1 | |
| QuickTime 8BPS视频 | X | ||
| QuickTime动画(RLE)视频 | X | X | fourcc:'rle ' |
| QuickTime图形(SMC) | X | X | fourcc:'smc ' |
| QuickTime视频(RPZA) | X | X | fourcc:rpza |
| R10K AJA Kona 10位RGB编解码器 | X | X | |
| R210 Quicktime未压缩RGB 10位 | X | X | |
| 原始视频 | X | X | |
| RealVideo 1.0 | X | X | |
| RealVideo 2.0 | X | X | |
| RealVideo 3.0 | X | 仍然远非理想 | |
| RealVideo 4.0 | X | ||
| RealVideo 6.0 | X | ||
| Renderware TXD(纹理字典) | X | Renderware引擎使用的纹理字典。 | |
| RivaTuner视频 | X | fourcc: 'RTV1' | |
| RL2视频 | X | 用于Entertainment Software Partners的一些游戏中 | |
| ScreenPressor | X | ||
| Screenpresso | X | ||
| Screen Recorder Gold编解码器 | X | ||
| Sierra VMD视频 | X | 用于Sierra VMD文件。 | |
| Silicon Graphics运动视频压缩器1(MVC1) | X | ||
| Silicon Graphics运动视频压缩器2(MVC2) | X | ||
| Silicon Graphics RLE 8位视频 | X | ||
| Smacker视频 | X | Smacker使用的视频编码。 | |
| SMPTE VC-1 | X | ||
| Snow | X | X | 实验性小波编解码器(fourcc: SNOW) |
| 索尼PlayStation MDEC(运动解码器) | X | ||
| Sorenson矢量量化器1 | X | X | fourcc: SVQ1 |
| Sorenson矢量量化器3 | X | fourcc: SVQ3 | |
| Sunplus JPEG(SP5X) | X | fourcc: SP5X | |
| TechSmith屏幕捕获编解码器 | X | fourcc: TSCC | |
| TechSmith屏幕捕获编解码器2 | X | fourcc: TSC2 | |
| Theora | E | X | 通过外部库libtheora支持编码 |
| Tiertex Limited SEQ视频 | X | DOS CD-ROM FlashBack游戏中使用的编解码器。 | |
| Ut视频 | X | X | |
| v210 QuickTime未压缩4:2:2 10位 | X | X | |
| v308 QuickTime未压缩4:4:4 | X | X | |
| v408 QuickTime未压缩4:4:4:4 | X | X | |
| v410 QuickTime未压缩4:4:4 10位 | X | X | |
| VBLE无损编解码器 | X | ||
| vMix视频 | X | fourcc: 'VMX1' | |
| VMware屏幕编解码器 / VMware视频 | X | VMware捕获视频时使用的编解码器。 | |
| Westwood Studios VQA(矢量量化动画)视频 | X | ||
| Windows Media图片 | X | ||
| Windows Media Video 7 | X | X | |
| Windows Media Video 8 | X | X | |
| Windows Media Video 9 | X | 未完全工作 | |
| Wing Commander III / Xan | X | 用于Wing Commander III的.MVE文件。 | |
| Wing Commander IV / Xan | X | 用于Wing Commander IV。 | |
| Winnov WNV1 | X | ||
| WMV7 | X | X | |
| YAMAHA SMAF | X | X | |
| Psygnosis YOP 视频 | X | ||
| yuv4 | X | X | libquicktime未压缩的4:2:0打包格式 |
| ZeroCodec无损视频 | X | ||
| ZLIB | X | X | 部分属于LCL,编码器为实验性 |
| Zip Motion Blocks 视频 | X | X | 编码器仅在PAL8下工作。 |
X表示该列中的功能(编码/解码)受支持。
E表示通过外部库提供支持。
50.4 音频编解码器
| 名称 | 编码 | 解码 | 备注 |
| 8SVX 指数 | X | ||
| 8SVX 斐波那契 | X | ||
| AAC | EX | X | 支持通过内部编码器和外部库libfdk-aac进行编码 |
| AAC+ | E | IX | 支持通过外部库libfdk-aac进行编码 |
| AC-3 | IX | IX | |
| ACELP.KELVIN | X | ||
| ADPCM 4X Movie | X | ||
| ADPCM Yamaha AICA | X | ||
| ADPCM AmuseGraphics Movie | X | ||
| ADPCM Argonaut Games | X | X | |
| ADPCM CDROM XA | X | ||
| ADPCM Creative Technology | X | 16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2 | |
| ADPCM Electronic Arts | X | 用于各种EA标题。 | |
| ADPCM Electronic Arts Maxis CDROM XS | X | 用于模拟城市3000。 | |
| ADPCM Electronic Arts R1 | X | ||
| ADPCM Electronic Arts R2 | X | ||
| ADPCM Electronic Arts R3 | X | ||
| ADPCM Electronic Arts XAS | X | ||
| ADPCM G.722 | X | X | |
| ADPCM G.726 | X | X | |
| ADPCM IMA Acorn Replay | X | ||
| ADPCM IMA AMV | X | X | 用于AMV文件 |
| ADPCM IMA Cunning Developments | X | ||
| ADPCM IMA Electronic Arts EACS | X | ||
| ADPCM IMA Electronic Arts SEAD | X | ||
| ADPCM IMA Funcom | X | ||
| ADPCM IMA High Voltage Software ALP | X | X | |
| ADPCM IMA Mobiclip MOFLEX | X | ||
| ADPCM IMA QuickTime | X | X | |
| ADPCM IMA Simon & Schuster Interactive | X | X | |
| ADPCM IMA Ubisoft APM | X | X | |
| ADPCM IMA Loki SDL MJPEG | X | ||
| ADPCM IMA WAV | X | X | |
| ADPCM IMA Westwood | X | ||
| ADPCM ISS IMA | X | 用于FunCom游戏。 | |
| ADPCM IMA Dialogic | X | ||
| ADPCM IMA Duck DK3 | X | 用于一些世嘉土星游戏机游戏。 | |
| ADPCM IMA Duck DK4 | X | 用于一些世嘉土星游戏机游戏。 | |
| ADPCM IMA Radical | X | ||
| ADPCM IMA Xbox | X | ||
| ADPCM Microsoft | X | X | |
| ADPCM MS IMA | X | X | |
| ADPCM 任天堂Gamecube AFC | X | ||
| ADPCM 任天堂Gamecube DTK | X | ||
| ADPCM 任天堂THP | X | ||
| ADPCM Playstation | X | ||
| ADPCM QT IMA | X | X | |
| ADPCM SEGA CRI ADX | X | X | 用于世嘉Dreamcast游戏。 |
| ADPCM Shockwave Flash | X | X | |
| ADPCM Sound Blaster Pro 2位 | X | ||
| ADPCM Sound Blaster Pro 2.6位 | X | ||
| ADPCM Sound Blaster Pro 4位 | X | ||
| ADPCM VIMA | X | 用于LucasArts SMUSH动画。 | |
| ADPCM Konami XMD | X | ||
| ADPCM Westwood Studios IMA | X | X | 用于Westwood Studios游戏,例如《命令与征服》。 |
| ADPCM Yamaha | X | X | |
| ADPCM Zork | X | ||
| AMR-NB | E | X | 通过外部库libopencore-amrnb支持编码 |
| AMR-WB | E | X | 通过外部库 libvo-amrwbenc 支持编码 |
| Amazing Studio PAF 音频 | X | ||
| Apple 无损音频 | X | X | QuickTime 四字符代码 ’alac’ |
| aptX | X | X | 用于 Bluetooth A2DP |
| aptX HD | X | X | 用于 Bluetooth A2DP |
| ATRAC1 | X | ||
| ATRAC3 | X | ||
| ATRAC3+ | X | ||
| ATRAC9 | X | ||
| Bink 音频 | X | 用于许多游戏中的 Bink 和 Smacker 文件。 | |
| Bonk 音频 | X | ||
| CELT | E | 通过外部库 libcelt 支持解码 | |
| codec2 | E | E | 通过外部库 libcodec2 支持编码/解码 |
| CRI HCA | X | ||
| Delphine Software International CIN 音频 | X | 用于 Delphine Software International 游戏中的编解码器。 | |
| DFPWM | X | X | |
| 数字语音标准 - 标准播放模式 (DSS SP) | X | ||
| Discworld II BMV 音频 | X | ||
| COOK | X | 支持所有版本(不包括 5.1)。 | |
| DCA (DTS Coherent Acoustics) | X | X | 支持扩展: XCh, XXCH, X96, XBR, XLL, LBR(部分支持) |
| Dolby E | X | ||
| DPCM 立方根-Delta-Exact | X | 用于少数游戏。 | |
| DPCM Gremlin | X | ||
| DPCM id RoQ | X | X | 用于 Quake III, Jedi Knight 2 和其他计算机游戏。 |
| DPCM Marble WADY | X | ||
| DPCM Interplay | X | 用于各种 Interplay 计算机游戏。 | |
| DPCM 平方根-Delta-Exact | X | 用于各种游戏。 | |
| DPCM Sierra Online | X | 用于 Sierra Online 游戏音频文件。 | |
| DPCM Sol | X | ||
| DPCM Xan | X | 用于 Origin 的 Wing Commander IV AVI 文件。 | |
| DPCM Xilam DERF | X | ||
| DSD (直接流数字),最低有效位优先 | X | ||
| DSD (直接流数字),最高有效位优先 | X | ||
| DSD (直接流数字),最低有效位优先,平面 | X | ||
| DSD (直接流数字),最高有效位优先,平面 | X | ||
| DSP Group TrueSpeech | X | ||
| DST (直接流传输) | X | ||
| DV 音频 | X | ||
| 增强型 AC-3 | X | X | |
| EVRC (增强型变量比特率编码器) | X | ||
| FLAC (免费无损音频编码) | X | IX | |
| FTR 语音 | X | ||
| G.723.1 | X | X | |
| G.729 | X | ||
| GSM | E | X | 通过外部库 libgsm 支持编码 |
| GSM 微软变体 | E | X | 通过外部库 libgsm 支持编码 |
| IAC (Indeo 音频编码器) | X | ||
| iLBC (互联网低比特率编解码器) | E | EX | 通过外部库 libilbc 支持编码和解码 |
| IMC (英特尔音乐编码器) | X | ||
| Interplay ACM | X | ||
| LC3 | E | E | 通过外部库 liblc3 支持 |
| MACE (Macintosh 音频压缩/扩展) 6:1 | X | ||
| Marian 的 A-pac 音频 | X | ||
| MI-SC4 (Micronas SC-4 音频) | X | ||
| MLP (Meridian 无损打包) | X | X | 用于 DVD 音频光盘。 |
| 猴子音频 | X | ||
| MP1 (MPEG 音频第 1 层) | IX | ||
| MP2 (MPEG 音频第 2 层) | IX | IX | 通过外部库 TwoLAME 也支持编码 |
| MP3 (MPEG 音频第 3 层) | E | IX | 通过外部库 LAME 支持编码,支持 ADU MP3 和 MP3onMP4 |
| MPEG-4 音频无损编码 (ALS) | X | ||
| MobiClip 快速音频 | X | ||
| Musepack SV7 | X | ||
| Musepack SV8 | X | ||
| Nellymoser Asao | X | X | |
| On2 AVC (用于视频的音频编解码) | X | ||
| Opus | E | X | 通过外部库 libopus 支持编码 |
| OSQ (原声音质) | X | ||
| PCM A-law | X | X | |
| PCM mu-law | X | X | |
| PCM Archimedes VIDC | X | X | |
| PCM 有符号 8 位 平面 | X | X | |
| PCM 有符号 16 位 大端平面 | X | X | |
| PCM 有符号 16 位 小端平面 | X | X | |
| PCM 有符号 24 位 小端平面 | X | X | |
| PCM 有符号 32 位 小端平面 | X | X | |
| PCM 32位浮点大端 | X | X | |
| PCM 32位浮点小端 | X | X | |
| PCM 64位浮点大端 | X | X | |
| PCM 64位浮点小端 | X | X | |
| PCM D-Cinema音频有符号24位 | X | X | |
| PCM有符号8位 | X | X | |
| PCM有符号16位大端 | X | X | |
| PCM有符号16位小端 | X | X | |
| PCM有符号24位大端 | X | X | |
| PCM有符号24位小端 | X | X | |
| PCM有符号32位大端 | X | X | |
| PCM有符号32位小端 | X | X | |
| PCM有符号16/20/24位大端用于MPEG-TS | X | ||
| PCM无符号8位 | X | X | |
| PCM无符号16位大端 | X | X | |
| PCM无符号16位小端 | X | X | |
| PCM无符号24位大端 | X | X | |
| PCM无符号24位小端 | X | X | |
| PCM无符号32位大端 | X | X | |
| PCM无符号32位小端 | X | X | |
| PCM SGA | X | ||
| QCELP / PureVoice | X | ||
| QDesign音乐编解码器1 | X | ||
| QDesign音乐编解码器2 | X | 仍然存在一些失真。 | |
| RealAudio 1.0 (14.4K) | X | X | Real 14400比特率编解码器 |
| RealAudio 2.0 (28.8K) | X | Real 28800比特率编解码器 | |
| RealAudio 3.0 (dnet) | IX | X | Real低比特率AC-3编解码器 |
| RealAudio无损 | X | ||
| RealAudio SIPR / ACELP.NET | X | ||
| RK音频 (RKA) | X | ||
| SBC (低复杂度子带编解码器) | X | X | 用于蓝牙A2DP |
| Shorten | X | ||
| Sierra VMD音频 | X | 用于Sierra VMD文件。 | |
| Smacker音频 | X | ||
| SMPTE 302M AES3音频 | X | X | |
| 索尼克 | X | X | 实验编解码器 |
| 索尼克无损 | X | X | 实验编解码器 |
| Speex | E | EX | 通过外部库libspeex支持 |
| TAK (Tom的无损音频压缩器) | X | ||
| True Audio (TTA) | X | X | |
| TrueHD | X | X | 用于HD-DVD和蓝光光盘。 |
| TwinVQ (VQF风味) | X | ||
| VIMA | X | 用于LucasArts SMUSH动画。 | |
| ViewQuest VQC | X | ||
| Vorbis | E | X | 存在一个原生但非常原始的编码器。 |
| Voxware MetaSound | X | ||
| 波形存档器 | X | ||
| WavPack | X | X | |
| Westwood音频 (SND1) | X | ||
| Windows Media音频 1 | X | X | |
| Windows Media音频 2 | X | X | |
| Windows Media无损音频 | X | ||
| Windows Media专业音频 | X | ||
| Windows Media语音音频 | X | ||
| Xbox Media音频 1 | X | ||
| Xbox Media音频 2 | X |
X表示该列中的功能(编码/解码)受支持。
E表示支持通过外部库提供。
I表示也可用整数版本(确保在无硬件浮点支持的系统上具有高性能)。
50.5 字幕格式
| 名称 | 复用 | 解复用 | 编码 | 解码 |
| 3GPP定时文本 | X | X | ||
| AQTitle | X | X | ||
| DVB | X | X | X | X |
| DVB字幕文本 | X | E | ||
| DVD | X | X | X | X |
| JACOsub | X | X | X | |
| MicroDVD | X | X | X | |
| MPL2 | X | X | ||
| MPsub (MPlayer) | X | X | ||
| PGS | X | |||
| PJS (凤凰) | X | X | ||
| RealText | X | X | ||
| SAMI | X | X | ||
| Spruce 格式 (STL) | X | X | ||
| SSA/ASS | X | X | X | X |
| SubRip (SRT 字幕) | X | X | X | X |
| SubViewer v1 | X | X | ||
| SubViewer | X | X | ||
| TED Talks 字幕 | X | X | ||
| TTML | X | X | ||
| VobSub (IDX+SUB) | X | X | ||
| VPlayer | X | X | ||
| WebVTT | X | X | X | X |
| XSUB | X | X |
X表示该功能受到支持。
E表示通过外部库提供支持。
50.6 网络协议
| 名称 | 支持 |
| AMQP | E |
| 文件 | X |
| FTP | X |
| Gopher | X |
| Gophers | X |
| HLS | X |
| HTTP | X |
| HTTPS | X |
| Icecast | X |
| MMSH | X |
| MMST | X |
| 管道 | X |
| Pro-MPEG FEC | X |
| RTMP | X |
| RTMPE | X |
| RTMPS | X |
| RTMPT | X |
| RTMPTE | X |
| RTMPTS | X |
| RTP | X |
| SAMBA | E |
| SCTP | X |
| SFTP | E |
| TCP | X |
| TLS | X |
| UDP | X |
| ZMQ | E |
X表示协议是支持的。
E表示支持是通过外部库提供的。
50.7 输入/输出设备
| 名称 | 输入 | 输出 |
| ALSA | X | X |
| BKTR | X | |
| caca | X | |
| DV1394 | X | |
| Lavfi 虚拟设备 | X | |
| Linux 帧缓冲 | X | X |
| JACK | X | |
| LIBCDIO | X | |
| LIBDC1394 | X | |
| OpenAL | X | |
| OpenGL | X | |
| OSS | X | X |
| PulseAudio | X | X |
| SDL | X | |
| Video4Linux2 | X | X |
| VfW 捕获 | X | |
| X11 捕获 | X | |
| Win32 捕获 | X |
X表示支持输入/输出。
50.8 时间码
| 编解码器/格式 | 读取 | 写入 |
| AVI | X | X |
| DV | X | X |
| GXF | X | X |
| MOV | X | X |
| MPEG1/2 | X | X |
| MXF | X | X |
51 参见
ffmpeg ffplay, ffprobe, ffmpeg-utils, ffmpeg-scaler, ffmpeg-resampler, ffmpeg-codecs, ffmpeg-bitstream-filters, ffmpeg-formats, ffmpeg-devices, ffmpeg-protocols, ffmpeg-filters
52 作者
FFmpeg 开发者。
关于作者的详细信息,请参阅项目的 Git 历史
(https://git.ffmpeg.org/ffmpeg),例如,在 FFmpeg 源代码目录中键入命令git log或浏览在线存储库,网址为https://git.ffmpeg.org/ffmpeg.
具体组件的维护人员在文件中列出MAINTAINERS位于源代码树中。
本文档生成于May 24, 2025使用makeinfo.
主机服务由以下提供telepoint.bg