网站翻译由林建有提供支持
目录
- 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 设置时间戳
- 18.30 显示信息
- 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 拼接
- 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 图片2, 图片2管道
- 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 空值
- 21.65 NUT
- 21.66 OGG
- 21.67 RCWT
- 21.68 分段, 流分段, 细分段
- 21.69 平滑流
- 21.70 流哈希
- 21.71 TEE
- 21.72 WebM块
- 21.73 WebM DASH清单
- 22 元数据
- 23 协议选项
- 24 协议
- 24.1 AMQP
- 24.2 异步
- 24.3 蓝光
- 24.4 缓存
- 24.5 合并
- 24.6 合并文件
- 24.7 加密
- 24.8 数据
- 24.9 文件描述符
- 24.10 文件
- 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 管道
- 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 梯形
- 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 多输入滤镜的选项(帧同步)
- 36 音频滤镜
- 36.1 aap
- 36.2 acompressor
- 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 FFT 降噪
- 36.24 FFT 滤波
- 36.25 FIR 滤波
- 36.26 格式转换
- 36.27 频率位移
- 36.28 FWTD 降噪
- 36.29 噪声门
- 36.30 IIR 滤波
- 36.31 限幅处理
- 36.32 全通滤波
- 36.33 循环
- 36.34 混合
- 36.35 音频混音
- 36.36 音量乘法
- 36.37 非线性均衡
- 36.38 NLMDN 降噪
- 36.39 NLMF 和 NLMS
- 36.40 消除信号
- 36.41 填补
- 36.42 移相器
- 36.43 相位偏移
- 36.44 PSNR 计算
- 36.45 心理感知剪辑
- 36.46 脉冲效果
- 36.47 重新采样
- 36.48 反转
- 36.49 RLS 滤波
- 36.50 RNNDN 降噪
- 36.51 ADSR 包络
- 36.52 设置样本数
- 36.53 设置速率
- 36.54 显示信息
- 36.55 SISDR 评估
- 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 默认双耳
- 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 双向场间插值
- 39.20 字幕重打包
- 39.21 锐化滤镜
- 39.22 色度保持
- 39.23 色度键控
- 39.24 色度降噪
- 39.25 色度移动
- 39.26 CIE图示
- 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 帧速率显示
- 39.97 帧打包
- 39.98 帧率
- 39.99 帧步进
- 39.100 冻结检测
- 39.101 冻结帧
- 39.102 frei0r 插件
- 39.103 fspp 滤镜
- 39.104 文件同步
- 39.105 高斯模糊
- 39.106 通用方程
- 39.107 伽马调节
- 39.108 图形监控
- 39.109 灰度世界
- 39.110 灰边检测
- 39.111 引导滤波
- 39.112 哈尔德 CLUT
- 39.113 水平翻转
- 39.114 直方图均衡化
- 39.115 直方图
- 39.116 hqdn3d 滤镜
- 39.117 硬件下载
- 39.118 硬件映射
- 39.119 硬件上传
- 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 场景检测
- 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 Libvmaf 滤镜
- 39.143 CUDA Libvmaf滤镜
- 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 动态对隔行视频去隔行处理
- 39.159 中值滤波
- 39.160 平面合并
- 39.161 运动估计
- 39.162 中间均衡器
- 39.163 插帧
- 39.164 混合
- 39.165 单色
- 39.166 形态学操作
- 39.167 有符号最小块移除算法
- 39.168 帧差绝对值和
- 39.169 乘法
- 39.170 否定
- 39.171 非局部均值去噪
- 39.172 神经网络插帧
- 39.173 无格式
- 39.174 噪声
- 39.175 归一化
- 39.176 空操作
- 39.177 光学字符识别
- 39.178 计算机视觉
- 39.179 示波器
- 39.180 覆盖
- 39.181 自适应去噪
- 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 移除标志
- 39.206 重复字段
- 39.207 反转
- 39.208 RGB位移
- 39.209 罗伯茨
- 39.210 旋转
- 39.211 SAB
- 39.212 缩放
- 39.213 缩放_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 SIT指标
- 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 超级2xSAI
- 39.241 矩形切换
- 39.242 交换UV
- 39.243 混合模式
- 39.244 电影模式
- 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 消除预乘
- 39.259 去锐化
- 39.260 直到
- 39.261 uspp
- 39.262 v360
- 39.263 vaguedenoiser
- 39.264 varblur
- 39.265 矢量示波器
- 39.266 vidstabdetect
- 39.267 vidstabtransform
- 39.268 垂直翻转
- 39.269 vfrdet
- 39.270 亮度增强
- 39.271 vif
- 39.272 vignette
- 39.273 vmafmotion
- 39.274 vpp_amf
- 39.275 垂直堆叠
- 39.276 w3fdif
- 39.277 波形
- 39.278 编织、双编织
- 39.279 xbr
- 39.280 xcorrelate
- 39.281 淡入淡出
- 39.282 xmedian
- 39.283 xpsnr
- 39.284 xstack
- 39.285 yadif
- 39.286 yaepblur
- 39.287 放缩平移
- 39.288 zscale
- 40 CUDA 视频滤镜
- 41 OpenCL 视频滤镜
- 41.1 avgblur_opencl
- 41.2 boxblur_opencl
- 41.3 colorkey_opencl
- 41.4 convolution_opencl
- 41.5 erosion_opencl
- 41.6 deshake_opencl
- 41.7 dilation_opencl
- 41.8 nlmeans_opencl
- 41.9 overlay_opencl
- 41.10 pad_opencl
- 41.11 prewitt_opencl
- 41.12 program_opencl
- 41.13 remap_opencl
- 41.14 roberts_opencl
- 41.15 sobel_opencl
- 41.16 tonemap_opencl
- 41.17 unsharp_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 设置声表, 设置声表 a
- 47.22 显示连续小波变换
- 47.23 显示连续小波变换时频图
- 47.24 显示频率
- 47.25 显示空间图
- 47.26 显示频谱图
- 47.27 显示频谱图片
- 47.28 显示音量
- 47.29 显示波形
- 47.30 显示波形图片
- 47.31 边数据, 边数据 a
- 47.32 频谱合成器
- 47.33 分割, 分割 a
- 47.34 ZeroMQ, ZeroMQ a
- 48 多媒体源
- 49 外部库
- 49.1 开放媒体联盟 (AOM)
- 49.2 AMD 音频与视频加速架构/视频编码引擎
- 49.3 AviSynth
- 49.4 Chromaprint
- 49.5 codec2
- 49.6 dav1d
- 49.7 DAVS2
- 49.8 UAVS3D
- 49.9 游戏音乐模拟
- 49.10 英特尔快速视频同步
- 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 超快基本视频编码器 (XEVE)
- 49.30 超快基本视频解码器 (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’s packets
without decoding, filtering, or encoding them. As an example, consider an input
file called 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
(第2行)以低质量编码它; - (第3行)使用3线程解码此编码流;
- (第4行)将解码的视频与原始输入视频并排放置;
- (第5行)组合的视频进行无损编码,然后写入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
当使用
映射选项时,只有用户映射的流会包含在该输出文件中,有一个不能包含的复杂滤镜图的输出流排序的例外。
If there are any complex filtergraph output streams with unlabeled pads, they will be added to the first output file. This will lead to a fatal error if the stream type is not supported by the output format. In the absence of the map option, the inclusion of these streams leads to the automatic stream selection of their types being skipped. If map options are present, these filtergraph streams are included in addition to the mapped streams.
复杂滤镜图的输出流必须映射一次且仅一次。
4.1.4 流处理
流处理独立于流选择,但字幕有一个例外。流处理是通过特定-codec
文件线内的output选项设置的。尤其是,编解码器选项在流选择之后由ffmpeg应用,因此不会影响流选择。如果对某一流类型未设置任何选项,ffmpeg将选择由输出文件格式注册的默认编码器。-codec
字幕存在一个例外。如果为输出文件指定了字幕编码器,将包括找到的第一个字幕流,无论是文本还是图像。即使用户手动设置编码器时,流选择过程也不能检查编码后的流是否能够写入的输出文件中。如果不能,则ffmpeg将中止并输出文件无法被处理。
An exception exists for subtitles. If a subtitle encoder is specified for an output file, the first subtitle stream found of any type, text or image, will be included. ffmpeg does not validate if the specified encoder can convert the selected stream or if the converted stream is acceptable within the output format. This applies generally as well: when the user sets an encoder manually, the stream selection process cannot check if the encoded stream can be muxed into the output file. If it cannot, ffmpeg will abort and all output files will fail to be processed.
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是接受字幕流的Matroska文件,但仅会选择一个视频和音频流。C.mkv的字幕流基于图像,而Matroska复用器的默认字幕编码器则基于文本,所以预期的字幕转码操作失败,因此不会选择该流。然而,在out2.mkv中,命令中指定了字幕编码器,因此字幕流被选择添加到视频流中。-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
选项。
aresample过滤器被发送到第一个未使用的音频流,即来自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 [参数]
显示帮助。可以指定一个可选参数来打印特定项目的帮助。如果未指定参数,则仅显示基本(非高级)工具选项。
参数的可能值参数有:
- 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
默认情况下,程序会记录到标准错误流。如果终端支持颜色,则使用颜色标记错误和警告。通过设置环境变量
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 计数 (global)
覆盖 CPU 计数的检测。此选项用于测试。除非您明白自己在做什么,否则不要使用它。
ffmpeg -cpucount 2
- -max_alloc 字节
设置使用 ffmpeg 的分配函数分配堆内块的最大大小限制。使用极度谨慎的方式。不要在不了解全部后果的情况下使用。 默认值为 INT_MAX。
5.3 AVOptions
这些选项由 libavformat、libavdevice 和 libavcodec 库直接提供。要查看可用 AVOptions 的列表,请使用-help选项。它们分为两类:
- generic
这些选项可用于任意容器、编解码器或设备。通用选项列在容器/设备的 AVFormatContext选项下以及编解码器的 AVCodecContext 选项下。
- private
这些选项是特定于给定的容器、设备或编解码器的。私有选项列在相应的容器/设备/编解码器下。
例如,要对 MP3 文件写入 ID3v2.3 标头而不是默认 ID3v2.4,使用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,使用了输出流的绝对索引。
注意:-nooption语法不能用于布尔 AVOptions,请使用-option 0/-option 1.
注意:通过在选项名称前加上 v/a/s 标记来指定按流的 AVOptions 的旧的未文档化方式现已过时,将很快被移除。
5.4 主要选项
- -f 格式 (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启用时(默认情况下),此段在跳转点和位置之间的额外部分将被解码并丢弃。在进行流复制或当-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
从第一个音频流中移除所有处置标志的方法:
ffmpeg -i in.mkv -c copy -disposition:a:0 0 out.mkv
并非所有复用器都支持嵌入缩略图,支持的也只支持少数格式,如 JPEG 或 PNG。
- -program [title=标题:][program_num=节目编号:]st=流[:st=流...] (output)
-
以指定的标题, 节目编号创建一个节目并添加指定的流。
- -stream_group [map=输入文件 ID=流组][type=类型:]st=流[:st=流][:stg=流组][:id=流组ID...] (output)
-
创建指定类型的流组类型和流组ID,或者通过映射一个输入组,添加指定的流和/或之前定义的(s) and/or previously defined 流组到其中。
类型可以是以下之一:
- iamf_audio_element
将属于同一个IAMF音频元素的流进行分组
对于这个组类型类型,以下选项可用
- audio_element_type
音频元素类型。支持以下值:
- channel
可扩展信道音频表示
- scene
全方向音频表示
- 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
全向音频模式。如果audio_element_type设置为信道,则此项无效。
支持以下值:
- mono
每个全向音频信道作为组中单独的单声流进行编码
- default_w
默认权重值
- iamf_mix_presentation
将属于同一个IAMF音频元素和同一个IAMF混音演示引用的所有流进行分组
对于这个组类型,以下选项可用
- submix
混音演示中的一个子混音。 此选项必须用‘,’分隔。可以定义多个用‘,’分隔的条目, 且至少需要设置一个。
它包含以下以“:”分隔的键=值选项
- parameter_id
帧中参数块可能引用的标识符,用于对混合音频信号进行后处理以生成用于回放的音频信号
- parameter_rate
帧中参数块中参数ID字段的采样率持续时间参数ID以
- default_mix_gain
默认混合增益值,当没有共享同一参数ID的参数块存在时应用参数ID在给定的帧中
- element
引用此混音演示中用于生成最终输出音频信号的音频元素。 此选项必须用‘|’分隔。可以定义多个用‘|’分隔的条目, 且至少需要设置一个。
它包含以下以“:”分隔的键=值选项:
- stg
The 音频元素的流组ID此子混音所引用的
- parameter_id
帧中参数块可能引用的标识符,用于对引用并渲染的音频元素进行处理,然后 与其他处理过的音频元素相加
- parameter_rate
帧中参数块中参数ID字段的采样率持续时间参数ID以
- default_mix_gain
默认混合增益值,当没有共享同一参数ID的参数块存在时应用参数ID在给定的帧中
- annotations
描述子混音元素的键=值字符串,其中“键”是符合BCP-47的字符串, 指定“值”字符串的语言。“键”必须与混音的注释
- headphones_rendering_mode
指示在耳机播放时,基于信道的输入音频元素是渲染到立体扬声器还是通过双耳渲染器空间化。 如果引用的音频元素的audio_element_type设置为信道,则此选项无效。
支持以下值:
- 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
reference available in some filters. Any frames buffered at time of reinitialization are lost. The properties where a change triggers reinitialization are, for video, frame resolution or pixel format; for audio, sample format, sample rate, channel count or channel layout.- -drop_changed[:流选择符] 整数 (input,per-stream)
此布尔选项决定在中间出现参数不同的帧时是否丢弃该帧,而不是重新初始化滤镜图,因为那会导致丢失滤镜状态。通常用于避免实时流输入中已损坏但仍可解码的分组。默认值为false。
- -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 网址 (global)
发送程序友好的进度信息到网址.
进度信息会定期写入以及编码过程结束时写入。内容由“键=值”组成。键仅包含字母数字字符。每个进度信息序列的最后一个键总是“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)
设置帧率(Hz值、分数或缩写)。
作为输入选项,忽略文件中存储的任何时间戳,而是假设恒定帧率生成时间戳帧率。这与某些输入格式(如image2或v4l2)使用的输入选项并不相同(在FFmpeg的较早版本中它们是相同的)。如果不确定使用-framerate而不是输入选项-framerate。-r.
作为输出选项:
- video encoding
在编码之前复制或删除帧以实现恒定的输出帧率帧率。.
- video streamcopy
指示复用器帧率是流的帧率。在此情况下不会丢失或复制数据。如果帧率不匹配数据包时间戳确定的实际流帧率,这可能会生成无效文件。另请参见
setts
比特流过滤器。
- -fpsmax[:流说明符] 帧率 (output,per-stream)
设置最大帧率(Hz值、分数或缩写)。
当输出帧率为自动设置且高于该值时,限制输出帧率。在批量处理或输入帧率被错误检测为非常高时很有用。不能与
-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,例如以下是Windows和Unix的示例:
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
的别名,请参见-filter 选项。.- -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手册以获取缩放选项列表。
- -rc_override[:流选择器] 覆盖 (output,per-stream)
为特定区间设置速率控制覆盖,格式为"int,int,int"列表,用斜线分隔。前两个值是开始和结束帧号,最后一个是正值时表示使用的量化器,负值时表示质量因子。
- -vstats
将视频编码统计数据导出到vstats_HHMMSS.log。参见vstats文件格式部分以查看格式描述。
- -vstats_file 文件
将视频编码统计数据导出到文件。参见vstats文件格式部分以查看格式描述。
- -vstats_version 文件
指定使用的vstats格式版本。默认为
2
。参见vstats文件格式部分以查看格式描述。- -vtag fourcc/tag (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
[delta]"之一,则它被扩展为文件中所有章节开始时间点的时间,加上delta,以秒为单位表达。 此选项可确保在输出文件中的章节标记或任何指定位置存在一个查找点。例如,要在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)
从第13秒开始,每次比上一个强制关键帧晚5秒插入一个关键帧:
-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 类型[=名称][:设备[,key=value...]]
初始化一个类型为type名称为name的新硬件设备,使用指定的设备参数。 如未指定名称,则将获得形式为"type%d"的默认名称。
The meaning of 设备以下参数取决于设备类型:
- 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
设备是一个X11显示名称。 如果未指定,它将尝试打开默认X11显示($DISPLAY).
- qsv
设备选择‘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’作为默认子设备类型,当--enable-libmfx
在配置时指定。在Linux上,用户只能将‘vaapi’作为子设备类型。
示例:
- -init_hw_device qsv:hw,child_device=/dev/dri/renderD129
使用‘MFX_IMPL_HARDWARE’创建一个QSV设备,位于DRM渲染节点/dev/dri/renderD129.
- -init_hw_device qsv:hw,child_device=1
使用‘MFX_IMPL_HARDWARE’创建一个QSV设备,位于DirectX适配器1。
- -init_hw_device qsv:hw,child_device_type=d3d11va
选择子设备类型为‘d3d11va’并使用‘MFX_IMPL_HARDWARE’.
- -init_hw_device qsv:hw,child_device_type=dxva2
选择子设备类型为‘dxva2’并使用‘MFX_IMPL_HARDWARE’.
- -init_hw_device qsv:hw,child_device=1,child_device_type=d3d11va
使用‘MFX_IMPL_HARDWARE’创建一个QSV设备,位于DirectX适配器1,子设备类型为‘d3d11va’.
- -init_hw_device vaapi=va:/dev/dri/renderD129 -init_hw_device qsv=hw1@va
在va上创建一个名为‘/dev/dri/renderD129’的VAAPI设备,然后从设备‘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
选择支持cl_khr_fp16扩展的第二个平台上的GPU设备。
- vulkan
如果设备是整数,它会通过系统依赖设备列表中的索引选择设备。如果设备是其他字符串,它会选择名称中包含该字符串作为子字符串的第一个设备。
以下选项被识别:
- debug
如果设置为1,则启用安装的验证层。
- linear_images
如果设置为1,则由硬件上下文分配的图像将是线性的并且可以本地映射。
- 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
列出此版本支持的所有硬件设备类型。
- -filter_hw_device 名称
将名为的硬件设备传递给任何滤镜图表中的所有滤镜。 这可以用于设置要上传到的设备滤镜,或要映射到的设备
hwupload
滤镜。其他滤镜可能也会 在需要硬件设备时使用此参数。请注意,通常只有当输入不是硬件帧时才需要这样做—— 当输入是硬件帧时,滤镜会根据收到的帧上下文推导它们所需的设备。hwmap
filter. 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 11 视频加速)硬件加速。
- 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
列出此版本启用的所有硬件加速组件。 实际运行时可用性取决于硬件和已安装的合适驱动程序。
- -fix_sub_duration_heartbeat[:流指定符]
设置一个特定的输出视频流作为心跳流, 用以根据接收到的随机访问包分割并推动当前进行中的字幕。
这降低了尚未接收到结束包或后续字幕的字幕的延迟。 但会出现字幕事件重复的可能性,以涵盖完整的持续时间。因此, 在字幕事件输出时的延时不重要的情况下, 不应使用此选项。
需要-fix_sub_duration为相关的输入字幕流设置。 这需要输入字幕流直接映射到包含心跳流的相同输出。
5.7 音频选项
- -aframes 编号 (output)
设置要输出的音频帧数。这是
-frames:a
的过时别名,建议使用后者。- -ar[:流指定符] 频率 (input/output,per-stream)
设置音频采样频率。输出流默认设置为对应输入流的频率。 对于输入流,此选项仅对音频捕获设备和原始解复用器有意义, 并映射到对应的解复用器选项。
- -aq 质量 (output)
设置音频质量(编解码器特定,可变比特率)。这是 -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 四字符代码/标记 (output)
强制音频标记/四字符代码。这是
-tag:a
.- -ch_layout[:的别名。] 布局 (input/output,per-stream)
是
-channel_layout
.- -channel_layout[:的别名。] 设置音频通道布局。输出流的默认布局为输入通道布局。 输入流会覆盖其通道布局。并非所有解码器都会遵守覆盖的通道布局。 此选项还用于设置音频抓取设备和原始解复用器的通道布局, 并映射到对应的解复用器选项。 (input/output,per-stream)
Set the audio channel layout. For output streams it is set by default to the input channel layout. For input streams it overrides the channel layout of the input. Not all decoders respect the overridden channel layout. This option also sets the channel layout for audio grabbing devices and raw demuxers and is mapped to the corresponding demuxer option.
- -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
选项单独禁用流。作为输出选项,禁用字幕记录,即不自动选择或映射任何字幕流。 为实现完全手动控制,请参见
-map
选项。
5.10 高级字幕选项
- -fix_sub_duration
修复字幕持续时间。等待同一字幕流中的下一个包到来, 调整第一个包的持续时间以避免重叠。 对于某些字幕编解码器(尤其是 DVB 字幕)这是必要的, 因为原始包中的持续时间只是粗略估计, 真正的结束是通过一个空字幕帧标记的。 如果在需要时未使用此选项,可能会导致持续时间被夸大或因 时间戳非单调性导致复用失败。
请注意,此选项会延迟所有数据的输出,直到解码下一个 字幕包为止:它可能大大增加内存消耗和延迟。
- -canvas_size 大小
设置用于渲染字幕的画布大小。
5.11 高级选项
- -map [-]输入文件标识[:流标识符][:视图标识符][:?] | [链接标签] (output)
-
在输出文件中创建一个或多个流。此选项有两种形式用于指定数据源:第一种形式从某个输入文件中选择一个或多个流(用
-i
指定),第二种形式从复杂的筛选图中获取输出(用-filter_complex
).在第一种形式下,每个来自索引为输入文件标识的输入文件的流都会创建一个输出流。如果指定了流标识符,则仅使用符合此标识符的流(参见流标识符部分的流标识符语法)。
在流标识符之前添加一个
-
字符表示创建一个“负”映射。它会禁用已经创建映射中匹配的流。可以在流标识符之后添加一个可选的视图标识符,用于指定多视点视频中需要使用的视图。视图标识符可以有以下格式之一:
- 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 运行持续时间秒后退出。
- -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/framerate,对于音频 - 使用 1/samplerate。
- demux
使用来自解复用器的时间基。
- filter
使用来自过滤器图的时间基。
- a positive number
使用提供的数字作为时间基。
此字段可以以两个整数的比率提供(例如 1:24, 1:48000),也可以用十进制数提供(例如 0.04166, 2.0833e-5)。
默认值为0。
- -bitexact (input/output)
启用(解)复用器和(解)编码器的 bitexact 模式。
- -shortest (output)
在最短输出流结束时完成编码。
请注意,此选项可能需要缓冲帧数据,以增加额外的延迟。此延迟的最大量可以通过
-shortest_buf_duration
选项进行控制。- -shortest_buf_duration 持续时间 (output)
The
-shortest
选项可能需要缓冲大量数据,当其中至少有一个流是"稀疏"时(即帧之间间隔较大——字幕通常如此)。此选项控制缓冲帧的最大持续时间,以秒为单位。 较大的值可能允许
-shortest
选项产生更精确的结果,但会增加内存使用和延迟。默认值为10秒。
- -dts_delta_threshold 阈值
时间戳不连续性 delta 阈值,以秒的小数表示。
此选项启用的时间戳不连续性校正仅适用于接受时间戳不连续的输入格式(其
AVFMT_TS_DISCONT
标志已启用),例如 MPEG-TS 和 HLS,并在使用-copyts
选项时会自动禁用(除非检测到环绕)。如果检测到时间戳不连续性,其绝对值大于阈值,ffmpeg 将通过减少/增加当前 DTS 和 PTS 值来移除不连续性。
默认值为10。
- -dts_error_threshold 阈值
时间戳错误 delta 阈值,以秒的小数表示。
此选项启用的时间戳校正仅适用于不接受时间戳不连续的输入格式(其
AVFMT_TS_DISCONT
标志未启用)。如果检测到时间戳不连续性,其绝对值大于阈值,ffmpeg 将丢弃 PTS/DTS 时间戳值。
默认值为
3600*30
(30小时),此值是任意选择的,并且相当保守。- -muxdelay 秒 (output)
设置解复用-解码的最大延迟。
- -muxpreload 秒 (output)
设置初始解复用-解码延迟。
- -streamid 输出流索引:新值 (output)
为输出流分配一个新的流 ID 值。此选项应在适用的输出文件名前指定。如果存在多个输出文件的情况,可以将流 ID 重新分配为不同的值。
例如,为了设置输出 mpegts 文件中流 0 的 PID 为 33,流 1 的 PID 为 36:
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]
指的是第一个输入文件中的第一个视频流,该流链接到叠加过滤器的第一个(主要)输入。同样,第二个输入中的第一个视频流链接到叠加的第二个(叠加)输入。假设每个输入文件中只有一个视频流,我们可以省略输入标签,因此上述内容等效于
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也可以使用)
使用 lavfi 源生成5秒纯红色视频:
color
源:ffmpeg -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
Timebase for 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
option controls the format version of the generated
file.
对于版本1
格式是:
frame= 帧 q= 帧质量 PSNR= 峰值信噪比 f_size= 帧大小 s_size= 流大小kB time= 时间戳 br= 比特率kbits/s avg_br= 平均比特率kbits/s
对于版本2
格式是:
out= 输出文件索引 st= 输出流索引 frame= 帧编号 q= 帧质量f PSNR= 峰值信噪比 f_size= 帧大小 s_size= 流大小kB time= 时间戳 br= 比特率kbits/s avg_br= 平均比特率kbits/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转换为22050Hz采样率的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 kbits的a.mp2和128 kbits的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编码的,你需要通过以下命令启用LAME支持
--enable-libmp3lame
来配置。 映射对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)。例如,通过匹配glob模式的文件名创建视频
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表示最多2位数字的分钟数,SS表示最多2位数字的秒数。米在最后表示十进制值秒.
or
[-]秒+[.米...][s|ms|us]
秒表示秒数,可包含可选的小数部分米。 可选的文字后缀‘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 使用了一种特殊的语法。
各个通道通过标识符来识别,具体如以下表格所示:
- ‘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)
计算x/y.
- 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
, 欧拉常数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都为0或其中任意一个小于0,则行为未定义。
- gt(x, y)
若x大于y,返回1,否则返回0。
- gte(x, y)
若x大于或等于y,返回1,否则返回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)
若x为+/-INFINITY,返回1.0,否则返回0.0。
- isnan(x)
若x为NAN,返回1.0,否则返回0.0。
- ld(idx)
加载索引为idx的内部变量的值,该值先前由st(idx, expr)存储。函数返回加载的值。
- lerp(x, y, z)
返回在x和y之间按比例z.
- log(x)
计算x.
- lt(x, y)
如果x小于y,返回1,否则返回0。
- lte(x, y)
如果x小于或等于y,返回1,否则返回0。
- max(x, y)
返回x和y.
- min(x, y)
之间的最小值。x和y.
- 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
and print a few random values:st(0,42); print(random(0)); print(random(0)); print(random(0))
- randomi(idx, min, max)
返回一个介于min和max. idx的间隔内的伪随机值,idx是将用于保存种子/状态的内部变量的索引,可以用之前存储的
st(idx)
.要初始化种子,需要将种子值作为64位无符号整数存储到索引为idx.
- root(expr, max)
找到一个输入值使得由表达式expr表示的函数在参数ld(0)的值为0的区间0..max.
中的值。expr中的表达式必须表示一个连续函数,否则结果是不确定的。
ld(0)用于表示函数的输入值,这意味着给定的表达式将会多次以不同输入值进行评估,表达式可以通过
ld(0)
访问这些输入值。当表达式评估结果为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)
阶导数在0处的值。当级数不收敛时,结果是不确定的。
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计算的值,如果cond一直为假。
以下常量可用:
- PI
单位圆的面积,约为 3.14
- E
exp(1)(欧拉数),约为 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’
使用固定量化比例。
- ‘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)
设置音频采样率(单位:赫兹)。
- ac 整数 (decoding/encoding,audio)
设置音频通道数。
- cutoff 整数 (encoding,audio)
设置截止带宽。(仅支持特定编码器,请参阅其相应的文档部分。)
- frame_size 整数 (encoding,audio)
设置音频帧大小。
除最后一个提交的帧外,每个帧必须包含确切的帧大小,每个通道采样数。 当编解码器设置了 CODEC_CAP_VARIABLE_FRAME_SIZE 时可以为 0,此时帧大小没有限制。 某些解码器会设置帧大小表明固定的帧大小。
- frame_number 整数
设置帧编号。
- delay 整数
- qcomp 浮点数 (encoding,video)
设置视频量化比例压缩(VBR)。它在速率控制方程中用作常量。 推荐范围为默认 rc_eq:0.0-1.0。
- qblur 浮点数 (encoding,video)
设置视频量化比例模糊(VBR)。
- qmin 整数 (encoding,video)
设置最小视频量化比例(VBR)。必须介于 -1 和 69 之间,默认值为 2。
- qmax 整数 (encoding,video)
设置最大视频量化比例(VBR)。必须介于 -1 和 1024 之间,默认值为 31。
- qdiff 整数 (encoding,video)
设置量化比例的最大差异(VBR)。
- 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/version 自动检测)
- ‘qpel_chroma2’
- ‘direct_blocksize’
直接 qpel 块大小问题(根据 fourcc/version 自动检测)
- ‘edge’
边缘填充问题(根据 fourcc/version 自动检测)
- ‘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)
设置采样宽高比。别名为宽高比.
- 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’
绝对哈达玛变换差值之和
- ‘dct’
绝对 DCT 变换差值之和
- ‘psnr’
量化误差平方和(避免,质量较低)
- ‘bit’
块所需的比特数量
- ‘rd’
率失真最优,慢速
- ‘zero’
0
- ‘vsad’
绝对垂直差值之和
- ‘vsse’
平方垂直差值之和
- ‘nsse’
保留噪声的平方误差之和
- ‘w53’
5/3 小波,仅用于雪花算法
- ‘w97’
9/7 小波,仅用于雪花算法
- ‘dctmax’
- ‘chroma’
- subcmp 整数 (encoding,video)
设置子像素运动估计比较函数。
可能的值:
- ‘sad’
绝对差值之和,快(默认)
- ‘sse’
平方误差之和
- ‘satd’
绝对哈达玛变换差值之和
- ‘dct’
绝对 DCT 变换差值之和
- ‘psnr’
量化误差平方和(避免,质量较低)
- ‘bit’
块所需的位数
- ‘rd’
率失真最优,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差值总和
- ‘vsse’
平方垂直差值总和
- ‘nsse’
噪声保留的平方差值总和
- ‘w53’
5/3小波,仅用于snow
- ‘w97’
9/7小波,仅用于snow
- ‘dctmax’
- ‘chroma’
- mbcmp 整数 (encoding,video)
设置宏块比较函数。
可能的值:
- ‘sad’
绝对差值总和,快速(默认)
- ‘sse’
平方误差总和
- ‘satd’
绝对阿达玛变换差值总和
- ‘dct’
绝对DCT变换差值总和
- ‘psnr’
平方量化误差总和(避免,质量低)
- ‘bit’
块所需的位数
- ‘rd’
率失真最优,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差值总和
- ‘vsse’
平方垂直差值总和
- ‘nsse’
噪声保留的平方差值总和
- ‘w53’
5/3小波,仅用于snow
- ‘w97’
9/7小波,仅用于snow
- ‘dctmax’
- ‘chroma’
- ildctcmp 整数 (encoding,video)
设置交错DCT比较函数。
可能的值:
- ‘sad’
绝对差值总和,快速(默认)
- ‘sse’
平方误差总和
- ‘satd’
绝对阿达玛变换差值总和
- ‘dct’
绝对DCT变换差值总和
- ‘psnr’
平方量化误差总和(避免,质量低)
- ‘bit’
块所需的位数
- ‘rd’
率失真最优,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差值总和
- ‘vsse’
平方垂直差值总和
- ‘nsse’
噪声保留的平方差值总和
- ‘w53’
5/3小波,仅用于snow
- ‘w97’
9/7小波,仅用于snow
- ‘dctmax’
- ‘chroma’
- dia_size 整数 (encoding,video)
设置运动估计的菱形类型和大小。
- ‘(1024, INT_MAX)’
完全运动估计(最慢)
- ‘(768, 1024]’
不对称多六边形运动估计
- ‘(512, 768]’
六边形运动估计
- ‘(256, 512]’
线状菱形运动估计
- ‘[2,256]’
变量菱形运动估计
- ‘(-1, 2)’
小型菱形运动估计
- ‘-1’
有趣的菱形运动估计
- ‘(INT_MIN, -1)’
Sab菱形运动估计
- last_pred 整数 (encoding,video)
设置来自前一帧的运动预测器数量。
- precmp 整数 (encoding,video)
设置预运动估计比较函数。
可能的值:
- ‘sad’
绝对差值总和,快速(默认)
- ‘sse’
平方误差总和
- ‘satd’
绝对阿达玛变换差值总和
- ‘dct’
绝对DCT变换差值总和
- ‘psnr’
平方量化误差总和(避免,质量低)
- ‘bit’
块所需的位数
- ‘rd’
率失真最优,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差值总和
- ‘vsse’
平方垂直差值总和
- ‘nsse’
噪声保留的平方差值总和
- ‘w53’
5/3小波,仅用于snow
- ‘w97’
9/7小波,仅用于snow
- ‘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_precision。
- 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跳过帧逆离散余弦变换/去量化,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’
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 非常规亮度(NCL)
- ‘bt2020c’
- ‘bt2020_cl’
BT.2020 常规亮度(CL)
- ‘smpte2085’
SMPTE 2085
- ‘chroma-derived-nc’
基于色度的非常规亮度(NCL)
- ‘chroma-derived-c’
基于色度的常规亮度(CL)
- ‘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’标志,该选项跳过色度信息而非Alpha。默认值是0。flags option which skips chroma information instead of alpha. Default is 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=解码器
.
关于FFmpeg工具的-decoders
选项将显示启用的解码器列表。
11 视频解码器
以下是一些当前可用视频解码器的描述。
11.1 av1
AOMedia 视频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动态变化的情况。
默认情况下,仅解码基础层。
注意,如果您正在使用ffmpeg
CLI工具,则应使用其文档中描述的视图说明符,而不是此处记录的选项。
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 top_field_first
指定输入视频的默认假设场类型。
- -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 解码器
英特尔快速同步视频(QuickSync Video)解码器系列(VC1、MPEG-2、H.264、HEVC、 JPEG/MJPEG、VP8、VP9、AV1、VVC)。
11.8.1 通用选项
所有 QSV 解码器都支持以下选项。
- async_depth
内部并行深度,值越高延迟越高。
- gpu_copy
视频和系统内存之间的 GPU 加速拷贝
- ‘default’
- ‘on’
- ‘off’
11.8.2 HEVC 选项
hevc_qsv 的额外选项。
- load_plugin
在内部会话中加载的用户插件
- ‘none’
- ‘hevc_sw’
- ‘hevc_hw’
- load_plugins
以 :- 分隔的要在内部会话中加载的十六进制插件 UID 列表
11.9 v210
未压缩的 4:2:2 10 位解码器。
11.9.1 选项
- custom_stride
设置 v210 数据的字节行尺寸。默认值为 0(自动检测)。您可以使用特殊值 -1 表示无跨距的 v210,如在 BOXX 文件中所见。
12 音频解码器
以下是一些当前可用音频解码器的描述。
12.1 ac3
AC-3 音频解码器。
此解码器实现了 ATSC A/52:2010 和 ETSI TS 102 366 的一部分,还包括未公开文档的 RealAudio 3(又称 dnet)。
12.1.1 AC-3 解码器选项
- -drc_scale value
动态范围缩放因子。适用于来自 AC-3 流的动态范围值的因子。 此因子是指数应用的。默认值为 1。 有三个重要的缩放因子范围:
- drc_scale == 0
禁用动态范围压缩。生成全范围音频。
- 0 < drc_scale <= 1
启用动态范围压缩。应用流动态范围压缩值的一部分。 音频再现介于全范围和完全压缩之间。
- drc_scale > 1
启用动态范围压缩。不对称地应用 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 和 Microsoft 变体。
12.6 libilbc
libilbc 解码器包装器。
libilbc 允许 libavcodec 解码互联网低比特率编解码器(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 布尔值
告知解码器包装器跳过包含半高度ruby文本的文本块。
默认启用。
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 字幕类型
指定已解码字幕的格式。
- ‘bitmap’
图形图像。
- ‘ass’
ASS格式化文本。
- ‘text’
简单的无格式文本输出。
默认值为ass与libaribb24解码器一致。 某些现有播放器(例如,mpv)需要ASS格式的ARIB字幕。
- -caption_encoding 编码方案
指定输入字幕文本的编码方案。
- ‘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 字体名称[,字体名称2,...]
指定要用于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 布尔值
指定是否忽略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 图像大小
指定用于渲染字幕的画布分辨率;通常应为输入视频帧大小。 这仅在
-subtitle_type
设置为位图.libaribcaption解码器假定输入帧大小用于位图渲染,如下所示:
- 配置文件A:1440 x 1080,SAR(PAR)为4:3
- 配置文件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
option. You can list all
available encoders using the configure option --list-encoders
.
您可以使用以下配置选项禁用所有编码器--disable-encoders
并选择性启用/禁用单个编码器
通过选项--enable-encoder=编码器
/
--disable-encoder=编码器
.
选项-encoders
ff*工具将显示启用编码器的列表。
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’
恒定量化器方法。
使用一种较便宜的twoloop算法版本,尽量少进行调整。在低比特率(低于64kbps)下效果较差,但在较高比特率下效果更好且速度更快。
- aac_ms
设置中间/侧边编码模式。默认值为“auto”,将自动为受益于此种编码的频段使用M/S。可以通过值“enable”强制使用,主要用于调试,或者通过“disable”禁用。
- aac_is
设置强度立体声编码工具的使用。默认情况下,它启用,并且如果对于类似的立体声频段有益,将自动切换IS。可以设置为“disable”禁用以进行调试。
- aac_pns
使用感知噪声替代工具在解码过程中用不可察觉的白噪声代替低熵高频段。默认情况下,它启用,但可以通过“disable”禁用以进行调试。
- aac_tns
启用使用跨越高频段的多抽头FIR滤波器,在编码过程中隐藏量化噪声并在解码时还原。除了减少高频不愉快的伪影之外,它还减少高频段的熵,使中低频段使用更多位。默认情况下启用,但可以通过选项设置“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编码器使用浮点数学实现,而ac3_fixed编码器则仅使用定点整数数学实现。这并不意味着一个总是更快,它只是适合某些特定系统。
encoder only uses fixed-point integer math. This does not mean that one is
always faster, just that one or the other may be better suited to a
particular system. The 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 音量
中心混音音量:解码器在下混合到立体声时应对中心声道应用的增益量。这个字段只有在存在中心声道时才会被写入位流。值以比例因子表示,有三种有效值:
- 0.707
应用 -3dB 增益
- 0.595
应用 -4.5dB 增益(默认)
- 0.500
应用 -6dB 增益
- -surround_mixlev 音量
环绕混音音量:解码器在下混合到立体声时应对环绕声道应用的增益量。这个字段只有在存在一个或多个环绕声道时才会被写入位流。值以比例因子表示,有三种有效值:
- 0.707
应用 -3dB 增益
- 0.500
应用 -6dB 增益(默认)
- 0.000
静音环绕声道
15.2.1.3 音频制作信息
音频制作信息是描述混音环境的可选信息。要么不写入,要么两个字段都写入位流。
- -mixing_level 数值
混音级别:指定制作环境中主混音时的峰值声压级(SPL)。有效值为 80 到 111,或 -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 中指定的替代比特流语法的一部分。它分为两个部分。如果某个组中的任何一个参数被指定,则该组中的所有值都会被写入到位流中。对于那些被写入但未指定的选项,将使用默认值。如果写入了混音级别,解码器将使用这些值而不是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)。使用此选项并不意味着说明编码器实际会进行Dolby Surround EX处理。
- 0
- notindicated
未指示(默认)
- 1
- on
关闭Dolby Surround EX
- 2
- off
开启Dolby Surround EX
- -dheadphone_mode 模式
Dolby Headphone模式。表示流是否使用了Dolby Headphone编码(多声道矩阵转换为2.0用于耳机)。使用此选项不说明编码器实际会进行Dolby Headphone处理。
- 0
- notindicated
未指示(默认)
- 1
- on
关闭Dolby Headphone
- 2
- off
开启Dolby Headphone
- -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。如果自动被使用,起始频带将由编码器根据比特率、采样率和声道布局确定。如果禁用通道耦合,则此选项无效。
- -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
用于Cholesky分解在LPC分析中的传递次数
- 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
选择稻参数是否精确或近似计算。如果设置为1,则精确选择,这会稍微降低速度并稍微提高压缩。
- multi_dim_quant
多维量化。如果设置为1,则在第一阶段后应用第二阶段LPC算法以精调系数。这非常慢,但稍微提高了压缩。
15.4 opus
Opus编码器。
这是针对Opus格式的原生FFmpeg编码器。目前处于开发状态,仅实现了编解码器的CELT部分。其质量通常较差,最好的情况是与libopus编码器相同。
15.4.1 选项
- b
以比特/秒为单位设置比特率。如果未指定,它会根据声道数量和布局做出合理的猜测。
- opus_delay
设置最大延迟(以毫秒为单位)。低于20ms的延迟会迅速降低质量。
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(可变比特率)编码,通过vbr或flags +qscale选项启用,处于实验阶段,仅在某些参数组合下工作。
编码7.1音频的支持仅在libfdk-aac 0.1.3或更高版本中可用。
有关更多信息,请参见fdk-aac项目:http://sourceforge.net/p/opencore-amr/fdk-aac/.
15.5.1 选项
以下选项映射到共享的FFmpeg编解码器选项。
- b
以比特/秒为单位设置比特率。如果未显式指定比特率,它会根据所选配置文件自动设置为合适的值。
如果启用了VBR模式,该选项将被忽略。
- ar
设置音频采样率(以Hz为单位)。
- channels
设置音频声道数量。
- flags +qscale
启用固定质量、VBR(可变比特率)模式。注意,当vbr值为正时,VBR会被隐式启用。
- cutoff
设置截止频率。如果未指定或者显式设置为零,它将使用库自动计算的值。默认值为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启用ELDv2(适用于ELD立体声信号的LD-MPS扩展);如果设置为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
将音频文件转换为使用高效AAC配置文件的CBR 64k kbps 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.5ms和5ms。
- 高分辨率模式,48 KHz 和 96 KHz采样率。
有关更多信息,请参阅liblc3项目:https://github.com/google/liblc3.
15.6.1 选项
以下选项映射到共享FFmpeg编解码器选项。
- b 比特率
以比特/秒为单位设置比特率。这将决定为选定帧持续时间编码的帧的固定大小。
- ar 频率
设定音频采样率(单位为Hz)。
- channels
设置音频频道的数量。
- frame_duration
以毫秒为单位设置音频帧的持续时间。默认值为10ms。允许的帧持续时间为2.5ms、5ms、7.5ms和10ms。LC3(蓝牙LE音频)允许7.5ms和10ms;而LC3plus允许2.5ms、5ms和10ms。
10ms帧持续时间在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)
启用编码器在逐帧基础上使用左右立体声或中间/侧面立体声。默认值为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。较小帧大小实现较低延迟,但比特率相同时质量会更低。大于20ms的大小仅在相当低的比特率时有意义。默认值为20ms。
- packet_loss (expect-loss)
设置预期包丢失百分比。默认值为0。
- fec (n/a)
启用带内前向错误修正。packet_loss必须为非零以利用此功能 - FEC‘辅助数据’的频率与预期的包丢失成比例。默认情况下禁用。
- application (N.A.)
设置预期的应用类型。有效选项如下:
- ‘voip’
偏向提高语音清晰度。
- ‘audio’
偏向对输入的忠实性(默认值)。
- ‘lowdelay’
通过禁用语音优化模式,仅限制为最低延迟模式。
- cutoff (N.A.)
以Hz为单位设置截止带宽。参数必须是以下之一:4000、6000、8000、12000或20000,对应于窄带、中等带宽、宽带、超宽带和全频段。默认值为0(禁用截止)。请注意,libopus会强制对比特率<15 kbps的情况下采用宽带截止,除非使用CELT-only(application设置为‘lowdelay’)模式。
- mapping_family (mapping_family)
设置编码器使用的通道映射系列。默认值-1对单声道和立体声输入使用映射系列0,对其他情况使用映射系列1。默认也会禁用libopus中的环绕屏蔽和LFE(低频效果)带宽优化,并要求输入包含8个或更少的通道。
其他值包括0(用于单声道和立体声)、1(用于具有屏蔽和LFE带宽优化的环绕声)和255(用于具有未指定通道布局的独立流)。
- apply_phase_inv (N.A.) (requires libopus >= 1.2)
如果设置为0,将禁用用于强度立体声的相位反转,提高单声道下混的质量,但会略微降低正常立体声的质量。默认值是1(启用相位反转)。
15.10 libshine
Shine 定点MP3编码器包装。
Shine 是一个定点MP3编码器。在没有FPU的平台(例如armel CPU以及一些手机和平板电脑)上表现更好。然而,由于其更多地针对性能而非质量,因此在质量上不如 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选项以千比特/秒为单位表示。
15.11 libtwolame
TwoLAME MP2编码器包装。
需要在配置期间存在libtwolame头文件和库。你需要显式地通过以下命令配置构建--enable-libtwolame
.
15.11.1 选项
libtwolame包装支持以下选项。twolame
选项的等价形式遵循FFmpeg的标准,括号内列出。
- b (-b)
设置CBR的比特率(以比特/秒为单位)。
twolame
b选项以千比特/秒为单位表示。默认值为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选项以千比特/秒为单位表示。- q (-q)
设置VBR的恒定质量设置。值应为范围在-1.0到10.0之间的浮点数。值越高,质量越好。默认值为‘3.0’.
此选项仅在使用
ffmpeg
命令行工具时有效。 对于库接口用户,请使用global_quality.- cutoff (--advanced-encode-option lowpass_frequency=N)
设置截止带宽(以Hz为单位)。值为0将禁用截止。
oggenc
相关选项以千赫兹为单位表示。默认值为‘0’(禁用截止)。- minrate (-m)
设置最小比特率(以比特/秒为单位)。
oggenc
-m选项以千比特/秒为单位表示。- maxrate (-M)
设置最大比特率(以比特/秒为单位)。
oggenc
-M选项以千比特/秒为单位表示。此选项仅对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
扩展了第5种颜色(colram)。
16.2 Cinepak
Cinepak又名CVID编码器。 兼容Windows 3.1和老版MacOS。
16.2.1 选项
- g 整数
关键帧间隔。 至少每
-g
帧插入一个关键帧,有时更早。- q:v 整数
质量因子。值越低质量越好。较高的值则会产生较低的比特率。 以下列表为不同
-q:v
值在编码akiyo_cif.y4m时的比特率。-g 100
:-q:v 1
1918 kb/s-q:v 2
1735 kb/s-q:v 4
1500 kb/s-q:v 10
1041 kb/s-q:v 20
826 kb/s-q:v 40
553 kb/s-q:v 100
394 kb/s-q:v 200
312 kb/s-q:v 400
266 kb/s-q:v 1000
237 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’
使用8bit默认值
- ‘greater8bit’
使用>8bit默认值
- 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
为512块以下设置一个变化阈值,低于该值的块将被编码器跳过。以任意单位定义为非负整数,默认值为零(不跳过任何块)。
- 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)
启用帧并行解码能力功能。默认值为真。
- 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)
为块预测启用全局运动的使用。默认值为真。
- enable-intrabc (boolean)
为帧内块预测启用块拷贝模式。此模式对屏幕内容有用。默认值为真。
- enable-rect-partitions (boolean) (Requires libaom >= v2.0.0)
启用矩形分区。默认值为真。
- enable-1to4-partitions (boolean) (Requires libaom >= v2.0.0)
启用1:4/4:1分区。默认值为真。
- enable-ab-partitions (boolean) (Requires libaom >= v2.0.0)
启用AB形状分区。默认值为真。
- enable-angle-delta (boolean) (Requires libaom >= v2.0.0)
启用角度变化帧内预测。默认值为真。
- enable-cfl-intra (boolean) (Requires libaom >= v2.0.0)
启用从亮度预测色度的帧内预测。默认值为真。
- enable-filter-intra (boolean) (Requires libaom >= v2.0.0)
启用滤波帧内预测器。默认值为真。
- enable-intra-edge-filter (boolean) (Requires libaom >= v2.0.0)
启用帧内边缘滤波器。默认值为真。
- enable-smooth-intra (boolean) (Requires libaom >= v2.0.0)
启用光滑帧内预测模式。默认值为真。
- enable-paeth-intra (boolean) (Requires libaom >= v2.0.0)
在帧内预测中启用paeth预测器。默认值为真。
- enable-palette (boolean) (Requires libaom >= v2.0.0)
启用调色板预测模式。默认值为真。
- 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。默认值为真。
- enable-tx64 (boolean) (Requires libaom >= v2.0.0)
启用64点变换。默认值为真。
- reduced-tx-type-set (boolean) (Requires libaom >= v2.0.0)
使用精简的变换类型集。默认值为假。
- use-intra-dct-only (boolean) (Requires libaom >= v2.0.0)
仅对INTRA模式使用DCT。默认值为假。
- use-inter-dct-only (boolean) (Requires libaom >= v2.0.0)
仅对INTER模式使用DCT。默认值为假。
- use-intra-default-tx-only (boolean) (Requires libaom >= v2.0.0)
仅对INTRA模式使用默认变换。默认值为假。
- enable-ref-frame-mvs (boolean) (Requires libaom >= v2.0.0)
启用时间MV预测。默认值为真。
- enable-reduced-reference-set (boolean) (Requires libaom >= v2.0.0)
使用精简的单一和复合参考集。默认值为假。
- enable-obmc (boolean) (Requires libaom >= v2.0.0)
启用obmc。默认值为真。
- enable-dual-filter (boolean) (Requires libaom >= v2.0.0)
启用双滤波器。默认值为真。
- enable-diff-wtd-comp (boolean) (Requires libaom >= v2.0.0)
启用差异加权复合。默认值为真。
- enable-dist-wtd-comp (boolean) (Requires libaom >= v2.0.0)
启用距离加权复合。默认值为真。
- enable-onesided-comp (boolean) (Requires libaom >= v2.0.0)
启用单边复合。默认值为真。
- enable-interinter-wedge (boolean) (Requires libaom >= v2.0.0)
启用内部楔形复合。默认值为真。
- enable-interintra-wedge (boolean) (Requires libaom >= v2.0.0)
启用内部帧内楔形复合。默认值为真。
- enable-masked-comp (boolean) (Requires libaom >= v2.0.0)
启用蒙版复合。默认值为真。
- enable-interintra-comp (boolean) (Requires libaom >= v2.0.0)
启用内部帧内复合。默认值为真。
- enable-smooth-interintra (boolean) (Requires libaom >= v2.0.0)
启用平滑内部帧内模式。默认值为真。
- 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 距离。这是一个质量设置:较低距离产生较高质量,distance=1.0 大致可与 libjpeg 的 Quality 90 相媲美(针对摄影内容)。设置 distance=0.0 可实现真正的无损编码。有效值范围介于 0.0 到 15.0,合理值很少超过 5.0。设置 distance=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
为 CBR(恒定比特率)模式设置视频比特率(以 bit/s 为单位)。如果启用了 VBR(可变比特率)模式,则此选项将被忽略。
- flags
用于启用恒定质量模式(VBR)编码,通过qscale标记,并启用
pass1
和pass2
模式。- g
设置 GOP 大小。
- global_quality
以 lambda 单位的整数形式设置全局质量。
仅在通过启用 VBR 模式时相关
flags +qscale
。该值通过除以FF_QP2LAMBDA
转换为 QP 单位,范围裁剪在 [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)
设置比特率(以位/秒为单位)。请注意,FFmpeg 的b选项以位/秒表示,而
vpxenc
的target-bitrate则以千比特/秒表示。- g (kf-max-dist)
- keyint_min (kf-min-dist)
- qmin (min-q)
最小(最佳质量)量化器。
- qmax (max-q)
最大(最差质量)量化器。 可以逐帧更改。
- bufsize (buf-sz, buf-optimal-sz)
设置码率控制缓冲区大小(以位为单位)。请注意,
vpxenc
的选项是以毫秒为单位指定的,libvpx 包装器将此值转换如下:buf-sz = bufsize * 1000 / bitrate
,buf-optimal-sz = bufsize * 1000 / bitrate * 5 / 6
.- rc_init_occupancy (buf-initial-sz)
设置在解码开始之前应加载到 rc 缓冲区中的比特数。 请注意,
vpxenc
的选项是以毫秒为单位指定的,libvpx 包装器将此值转换如下:rc_init_occupancy * 1000 / bitrate
.- undershoot-pct
设置数据流下限(最小)占目标比特率的百分比。
- overshoot-pct
设置数据流上限(最大)占目标比特率的百分比。
- skip_threshold (drop-frame)
- qcomp (bias-pct)
- maxrate (maxsection-pct)
设置 GOP 最大比特率(以位/秒为单位)。请注意,
vpxenc
的选项是以目标比特率百分比指定的,libvpx 包装器将此值转换如下:(maxrate * 100 / bitrate)
.- minrate (minsection-pct)
设置 GOP 最小比特率(以位/秒为单位)。请注意,
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' 更糟糕的质量输出。
- ‘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)
指定。 例如,设置tile-columns选项为 3 可以请求 8 个编码片列。- tile-rows
设置要使用的编码分片行数。请注意,此值按
log2(tile_rows)
指定。 例如,设置tile-rows选项为 2 可以请求 4 个编码片行。- frame-parallel
启用帧并行解码功能。
- aq-mode
设置自适应量化模式(0:关闭(默认),1:方差,2:复杂度,3:循环刷新,4:equator360)。
- 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
to fine-control referencing schemes and frame buffer management.
使用以 ':' 分隔的键=值对列表。 例如: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
设置等级 ID。
- tier
设置 VVC 层。
- qp
设置恒定量化参数。
- subopt 布尔值
设置主观(感知驱动的)优化。默认值为 1(开启)。
- bitdepth8 布尔值
设置 8 位编码模式,而不是使用 10 位。默认值为 0(关闭)。
- period
设置(内部)刷新周期(以秒为单位)。
- 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)、无损模式、心理优化以保留细节(自适应量化、心理 RD、心理网格)。
许多 libx264 编码选项已映射到 FFmpeg 的全局编解码器选项,而独特的编码选项通过私有选项提供。此外,x264opts和x264-params私有选项允许传递接受 libx264 接受的 key=value 元组的列表。x264_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)
以比特/s设置比特率。注意 FFmpeg 的b选项以比特/s表示,而
x264
的bitrate以千比特/s表示。- 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
值,如果该值为正则会被忽略,否则会被使用。此值可以使用
AVCodecContext
API 设置(例如直接设置AVCodecContext
值),并映射为一个整数值对应的级别(例如值 31 映射到 H.264 level IDC "3.1",如x264_levels
表中定义)。当该值为负数时将被忽略。或者可以作为一个私有选项进行设置,覆盖在
AVCodecContext
中设置的值,此时必须指定为级别 IDC 标识符(例如 "3.1"),如 H.264 附录 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
设置为1时启用对B帧的加权预测。设置为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 选项
使用由“键=值”选项组成的冒号分隔列表覆盖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
例如,使用
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(关闭)。
提供了用于常见用途的编码ffpresets,因此可以与通用预设系统一起使用(例如传递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
以了解选项列表。例如,使用-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选项,通过":"分隔。
例如,使用-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私人选项允许传递一个键=值对的列表,如libxeveparse_xeve_params
函数接受的。
xeve项目网站位于https://github.com/mpeg5/xeve.
16.21.1 选项
以下选项由libxeve封装支持。列出了xeve对应的选项或值以便轻松迁移。
为了减少文档重复,仅记录私人选项以及需要特别注意的一些其他选项。对于未记录的通用选项文档,请参阅编解码器选项章节.
为了获得关于libxeve选项更准确和广泛的文档,请执行以下命令:xeve_app --help
或查阅libxeve文档。
- b (bitrate)
设置目标视频比特率(以位/s为单位)。注意FFmpeg的b选项以bits/s表示,而xeve的比特率以kilobits/s表示。
- bf (bframes)
设置最大B帧数(1,3,7,15)。
- g (keyint)
设置GOP大小(I图周期)。
- preset (preset)
设置xeve预设。选择编码器预设值以确定编码速度[快、中、慢、极慢]
- tune (tune)
设置编码器调节参数[PSNR、零延迟]
- profile (profile)
设置编码器配置文件[0:基线;1:主]
- crf (crf)
设置恒定质量模式的质量。恒定率因子<10..49>[默认值:32]
- qp (qp)
设置恒定量化率控制方法参数。量化参数qp<0..51>[默认值:32]
- threads (threads)
强制使用特定数量的线程
16.22 libxvid
Xvid MPEG-4部分2编码器包装器。
此编码器在配置期间需要存在libxvidcore的头文件和库。您需要在配置构建时显式启用此设置。--enable-libxvid --enable-gpl
.
本地mpeg4
编码器支持MPEG-4部分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
微软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’
SNR 可伸缩
- ‘main’
- ‘simple’
- level
选择编码使用的mpeg2级别:
- ‘high’
- ‘high1440’
- ‘main’
- ‘low’
- seq_disp_ext 整数
指定编码器是否应将sequence_display_extension写入输出。
- -1
- auto
自动决定写入与否(默认值)通过检查要写入的数据是否与默认或未指定值不同。
- 0
- never
从不写入。
- 1
- always
总是写入。
- video_format 整数
指定sequence display extension中写入的视频格式,用于指示视频画面的来源。默认值为‘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 方法
设置预测方法(none, sub, up, avg, paeth, mixed),默认值为paeth。
16.27 ProRes
苹果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会声明该流是由苹果编码器产生的。
- alpha_bits 整数
指定 alpha 组件的位数。 可能的值为0, 8和16。 使用0来禁用 alpha 平面的编码。
16.27.2 速度考量
在默认操作模式下,编码器必须满足帧大小的约束(即,不生成大于要求的帧),同时尽可能提升输出画质。 包含大量细节的帧更难压缩,编码器需要花费更多时间为每个切片寻找合适的量化值。
设置更高的bits_per_mb限制将提高编码速度。
为了获得最快的编码速度,请设置qscale参数(推荐值为 4),并且不要设置大小约束。
16.28 QSV 编码器
Intel QuickSync Video 编码器系列(MPEG-2、H.264、HEVC、JPEG/MJPEG、VP9、AV1)
16.28.1 码率控制方法
码率控制方法选择如下:
- 当指定global_quality时,使用基于质量的模式。
具体来说,这意味着以下之一:
- - CQP- 恒定量化标度,当设置qscale编解码器标志时(-qscaleffmpeg 选项)。
- - LA_ICQ- 带有前瞻性的智能恒定质量,当同时设置look_ahead选项时。
- - ICQ– 否则为智能恒定质量模式。对于 ICQ 模式,全局质量范围是 1 到 51,1 表示最佳质量。
- 否则,当使用b选项指定所需的平均码率时,使用基于码率的模式。
- - LA- 带有前瞻性的 VBR,当指定了look_ahead选项时。
- - VCM- 视频会议模式,当设置了vcm选项时。
- - CBR- 恒定码率,当设置了maxrate并且等于平均码率时。
- - VBR- 可变码率,当设置了maxrate但高于平均码率时。
- - AVBR- 平均可变码率模式,当未指定maxrate,且avbr_accuracy和avbr_convergence都设置为非零时。此模式在 Windows 上支持 H264 和 HEVC。
- 否则,默认的码率控制方法CQP将被使用。
请注意,根据您的系统,编码器可能会选择与您指定的模式不同的模式。 将详细级别设置为详细或更高以查看 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编解码器的低延迟速率控制配置。
- 帧率
更改此值以重置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帧编码帧大小。如果此值设置为大于零,则对于I帧,将忽略由max_frame_size设置的值。
- 最大帧大小(P帧)
以字节为单位的最大P帧编码帧大小。如果此值设置为大于零,则对于P帧,将忽略由max_frame_size设置的值。
- 最大切片大小
以字节为单位的最大编码切片大小。
- 比特率限制
切换比特率限制。 将比特率调整为QSV编码器强加的范围内。关闭此标志可能会违反HRD一致性。请注意,指定比QSV编码器范围更低的比特率可能会显著影响质量。如果启用,此选项将对非CQP模式生效:如果比特率不在QSV编码器范围内,它将被调整到范围内。
- 宏块级别比特率控制
设置此标志启用宏块级别的比特率控制,这通常会提高主观视觉质量。启用此标志可能会对性能和客观视觉质量指标产生负面影响。
- 低延迟速率控制
设置此标志打开或关闭qsv插件中的LowDelayBRC特性,该功能提供更准确的比特率控制以最小化逐帧比特流大小的差异。值:-1-默认,0-关闭,1-打开。
- 自适应I帧
此标志控制QSV编码器插入I帧的功能。打开此标志以允许将帧类型从P帧和B帧更改为I帧。
- 自适应B帧
此标志控制将帧类型从B帧更改为P帧。
- P帧策略
启用P-金字塔:0-默认,1-简单,2-金字塔(bf需要设置为0)。
- B帧策略
此选项控制B帧作为参考帧的使用。
- 去块效应索引
此选项禁用去块效应。其值范围为0~2。
- CAVLC
如果设置,则使用CAVLC;如果未设置,则使用CABAC进行编码。
- 视频会议模式
视频会议模式,请参见速率控制方法。
- IDR间隔
IDR帧之间的间隔(以I帧为单位)。
- 画面时序SEI消息
插入带有pic_struct_syntax元素的画面时序SEI消息。
- 单一SEI NAL单元
将所有SEI消息放入一个NAL单元中。
- 最大解码帧缓冲区
在DPB中缓冲的最大帧数。
- 前瞻
使用带前瞻的可变比特率算法。
- 前瞻深度
以帧数为单位的前瞻深度。
- 前瞻降采样
用于前瞻分析的降采样因子。
- ‘unknown’
- ‘auto’
- ‘off’
- ‘2x’
- ‘4x’
- 帧内刷新类型
指定帧内刷新类型。帧内刷新的主要目标是提高错误恢复能力,而不会因I帧而对编码比特流大小产生显著影响。SDK编码器通过在刷新周期内每帧部分区域使用帧内MB编码来实现。无表示不刷新。垂直表示按MB列垂直刷新。水平表示按MB行水平刷新。切片表示按切片进行水平刷新且无重叠。在切片的情况下,忽略int_ref_cycle_size。要启用帧内刷新,B帧应设置为0。
- 帧内刷新周期大小
指定刷新周期内图像的数量,从2开始。0和1是无效值。
- 帧内刷新QP差值
指定插入帧内MB的QP差异。此值是处于[-51, 51]范围内的有符号值,如果亮度样本的目标编码位深为8,则范围为[-63, 63],如果是10位深或12位深,则分别为[-75, 75]。
- 帧内刷新周期距离
帧内刷新周期开始之间的帧数距离。
- 配置文件
- ‘unknown’
- ‘baseline’
- ‘main’
- ‘high’
- A53关闭字幕
使用A53关闭字幕(如果可用)。
- 访问单元分隔符
插入访问单元分隔符NAL。
- 多帧模式
多帧模式。
- ‘off’
- ‘auto’
- 重复PPS
对每个帧重复pps。
- 最大I帧视频量化比例。
I帧的最大视频量化比例。
- 最小I帧视频量化比例。
I帧的最小视频量化比例。
- 最大P帧视频量化比例。
P帧的最大视频量化比例。
- 最小P帧视频量化比例。
P帧的最小视频量化比例。
- 最大B帧视频量化比例。
B帧的最大视频量化比例。
- 最小B帧视频量化比例。
B帧的最小视频量化比例。
- 场景
为编码会话提供场景的提示。
- ‘unknown’
- ‘displayremoting’
- ‘videoconference’
- ‘archive’
- ‘livestreaming’
- ‘cameracapture’
- ‘videosurveillance’
- ‘gamestreaming’
- ‘remotegaming’
- AVBR精度
AVBR码率控制的精度(以十分之一百分点为单位)。
- AVBR收敛速率
AVBR码率控制的收敛速率(以帧数的百分之一单位表示)。
参数avbr_accuracy和avbr_convergence是用于平均可变比特率控制(AVBR)算法的。 该算法专注于整体编码质量,同时满足指定的 码率target_bitrate,在精度范围内avbr_accuracy, 经过一个avbr_Convergence周期后生效。此方法不遵循HRD,瞬时比特率不受到限制或填充。
- skip_frame
使用每帧元数据"qsv_skip_frame"在编码时跳过帧。此选项定义该元数据的用途。
- ‘no_skip’
帧跳过已禁用。
- ‘insert_dummy’
编码器将插入一个所有宏块均编码为跳过的帧到码流中。
- ‘insert_nothing’
类似于insert_dummy,但编码器不会在位流中插入任何内容。跳过的帧仍然用于码率控制。例如,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帧的最大编码帧大小(以字节为单位)。如果设置的值大于0,那么I帧将忽略max_frame_size设置的值。
- max_frame_size_p
P帧的最大编码帧大小(以字节为单位)。如果设置的值大于0,那么P帧将忽略max_frame_size设置的值。
- max_slice_size
最大编码切片大小(以字节为单位)。
- mbbrc
启用此标志会启动宏块级别的码率控制,一般能提升主观视觉质量。但启用此标志会对性能和客观视觉质量指标产生负面影响。
- low_delay_brc
启用或禁用QSV插件中的低延迟码率控制功能,提供更精确的码率控制以最小化每帧比特流大小的变化。值:-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
启用此选项以允许变换跳过。在不早于ICL的平台上支持。
- int_ref_type
指定帧内刷新类型。帧内刷新的主要目标是提高抗误差能力, 同时不会因为I帧对编码比特流大小产生重大影响。 SDK编码器通过在每帧的刷新周期内使用帧内宏块进行编码实现这一目标。none表示无刷新。vertical表示 垂直刷新,根据宏块列。horizontal表示水平刷新, 根据宏块行。片段表示通过片段进行水平刷新且无重叠。在以下情况下片段时,in_ref_cycle_size会被忽略。要启用帧内刷新,B帧应该设置为0。
- 帧内刷新循环大小
指定刷新循环内的图片数量,从2开始。0和1是无效值。
- 帧内刷新QP差值
指定插入的帧内宏块的QP差值。此为在范围 [-51, 51] 的带符号值,如果目标编码亮度样本的位深为8,范围为 [-63, 63] 对于10位深或 [-75, 75] 对于12位深。
- 帧内刷新循环距离
帧内刷新循环起始点之间的距离(以帧为单位)。
- 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’
类似于插入占位帧,但编码器不向比特流中插入任何内容。跳过的帧仍被用于brc。例如,gop仍包括跳过的帧,跳过帧之后的帧大小会更大。
- ‘brc_only’
跳帧元数据表示在当前帧之前漏过的帧数。
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帧作为参考。
- 扩展比特率控制
扩展的比特率控制。
- 前视深度
前视深度以帧数为单位,仅在启用extbrc选项时可用。
- 低延迟比特率控制
设置此标志开启或关闭QSV插件中的低延迟比特率控制功能,该功能提供更准确的比特率控制以最小化逐帧比特流尺寸的变化。值:-1默认值,0关闭,1开启。
- 最大帧尺寸
为每帧设置允许的最大尺寸(以字节为单位)。如果帧大小超过限制,编码器将调整QP值以控制帧大小。在CQP速率控制模式中无效。
- I帧的最大帧尺寸
I帧的最大编码帧大小(以字节为单位)。如果此值设置为大于零,则对I帧会忽略max_frame_size设置的值。
- P帧的最大帧尺寸
P帧的最大编码帧大小(以字节为单位)。如果此值设置为大于零,则对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*_flags。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
包括标准霍夫曼表(默认开启)。关闭此功能会节省 每个输出帧中的几百字节,但可能会失去对某些JPEG解码器的兼容性, 这些解码器无法完全处理MJPEG。
- 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(默认)。 较低的值减少压缩和质量。能力较低的解码器可能无法 处理值超过wavelet_depth3。
- 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构建时,所有支持的比特流过滤器默认都会启用。您可以通过configure选项列出所有可用的过滤器。--list-bsfs
.
您可以使用configure选项禁用所有比特流过滤器。--disable-bsfs
,并通过选项选择性启用任何比特流过滤器。--enable-bsf=BSF
,或者可以使用选项禁用特定的比特流过滤器。--disable-bsf=BSF
.
选项-bsfs
ff*工具将显示您的构建中包含的所有支持的比特流过滤器列表。
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(如果当前没有TD)。
- ‘remove’
从每个TU的开头移除TD(如果当前有TD)。
- color_primaries
- transfer_characteristics
- matrix_coefficients
设置流中的颜色描述字段(参见AV1第6.4.2节)。
- color_range
设置流中的颜色范围(参见AV1第6.4.2节;注意,对于使用BT.709原色、sRGB传输特性以及identity (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比特流中的杜比视界元数据,可选择启用元数据压缩。
- strip
如果启用,从流中删除所有杜比视界元数据(配置记录+RPU数据块)。
- compression
启用的压缩级别。
- ‘none’
无元数据压缩。
- ‘limited’
有限元数据压缩方案。应该与大多数设备兼容。这是默认值。
- ‘extended’
扩展元数据压缩。设备不需要支持此功能。请注意,目前此级别在libavcodec中表现与‘limited’相同。
18.6 dump_extra
将额外数据添加到过滤后的包的开头,除非这些包的开头已经准确包含了要添加的额外数据。
- freq
附加参数指定应过滤哪些包。它接受以下值:
- ‘k’
- ‘keyframe’
将额外数据添加到所有关键包。
- ‘e’
- ‘all’
将额外数据添加到所有包。
如果没有指定,则假定为‘k’.
例如以下ffmpeg
命令强制H.264包中的全局头(因此禁用每个包的单独头),但通过将存储在额外数据中的头添加到关键包进行更正:libx264
encoder, but corrects them by adding
the header stored in extradata to the key packets:
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单元类型(nal_unit_type)对应(参见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流中移除所有AUDs、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
从H.264流中移除所有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’
默认值为pass。
- 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中的zero 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’
默认行为是通过。
插入模式需与
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
).
例如,要将包含H.264流的MP4文件重新复用为mpegts格式,使用ffmpeg
,可以使用以下命令:
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参数中设置tick率(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值(例如,‘153’表示5.1级别),或者特殊名称‘auto’,表示过滤器应尝试从输入流属性中猜测级别。
18.16 hevc_mp4toannexb
将HEVC/H.265比特流从长度前缀模式转换为起始码前缀模式(如ITU-T H.265规范的附录B中定义)。
一些流式传输格式要求这一步骤,通常是MPEG-2传输流格式(复用器mpegts
).
例如,要将包含HEVC流的MP4文件重新复用为mpegts格式,使用ffmpeg
,可以使用以下命令:
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段。引用自http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml:
Avery Lee在2001年rec.video.desktop新闻组中写道:"MJPEG,或者至少是具有MJPG fourcc码的AVIs中的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,仅仅是为了解决损坏的视频窗口子系统的临时方案。它们占用更多空间,可能会导致轻微的音视频同步问题,需要更多的CPU功率来解码(除非播放器有一些解码后图片队列来补偿这种2,0,2,0每包帧的方式),而将它们复制到标准容器如mp4或mpeg-ps/ts中会造成问题,因为MPEG-4解码器可能无法解码它们,因为它们不是有效的MPEG-4。
例如,使用ffmpeg
修复包含MPEG-4流的AVI文件中的DivX样式打包B帧,可以使用以下命令:
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 秒丢弃 1 秒的音频,并向其余部分添加一些随机噪声。
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.
您可以使用frame_rate选项生成 NTSC 帧速率下著名的 1602-1601-1602-1601-1602 的 48kHz 音频模式。
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 trace_headers
记录包含编码流头部中所有语法元素的日志输出(所有位于单个编码块级别之上的内容)。这对于调试低级流问题可能非常有用。
支持 AV1、H.264、H.265、(M)JPEG、MPEG-2 和 VP9,但具体支持的编解码器取决于构建版本,可能只支持其中的一个子集。
18.33 truehd_core
从 TrueHD 流中提取核心内容,移除 ATMOS 数据。
18.34 vp9_metadata
修改嵌入到 VP9 流中的元数据。
- color_space
在帧头中设置色彩空间值。请注意,任何设置为 RGB 的帧都会被隐式设置为 PC 范围,并且 RGB 与配置文件 0 和 2 不兼容。
- ‘unknown’
- ‘bt601’
- ‘bt709’
- ‘smpte170’
- ‘smpte240’
- ‘bt2020’
- ‘rgb’
- color_range
在帧头中设置色彩范围值。请注意,色彩空间强制修改的任何值将优先于此值。
- ‘tv’
- ‘pc’
18.35 vp9_superframe
将 VP9 的不可见(备用参考)帧重新合并到 VP9 超帧中。此选项可修复分离/分段的 VP9 流,其中备用参考帧从其可见对应物中分离出来的情况。
18.36 vp9_superframe_split
将 VP9 超帧拆分为单帧。
18.37 vp9_raw_reorder
对于排序可能错误但时间戳正确的 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’
生成缺失的 PTS(如果 DTS 存在)。
- ‘igndts’
如果也设置了 PTS,则忽略 DTS。在设置了 PTS 的情况下,DTS 值设置为 NOPTS。当
nofillin
标志被设置时,此选项会被忽略。- ‘ignidx’
忽略索引。
- ‘nobuffer’
减少在初始输入流分析期间因缓冲而引入的延迟。
- ‘nofillin’
不要填充可以精确计算的字段中缺失的值。
- ‘noparse’
禁用 AVParsers,这需要
+nofillin
同时设置。- ‘sortdts’
尝试通过 DTS 交错输出数据包。目前仅适用于带有索引的 AVI 格式。
输出文件的可能值:
- ‘autobsf’
根据输出格式的要求自动应用比特流过滤器。默认启用。
- ‘bitexact’
仅写入与平台、生成和时间无关的数据。这确保文件和数据校验和具有可重复性,并且在不同平台之间保持一致。其主要用途是回归测试。
- ‘flush_packets’
立即写入数据包。
- ‘shortest’
在最短的流末端停止复用。可能需要增加 max_interleave_delta 以避免在 EOF 之前清空较长的流。
- seek2any 整数 (input)
如果设置为 1,允许在解复用器级别支持时查找非关键帧。默认值为 0。
- analyzeduration 整数 (input)
指定要分析输入的微秒数。较高的值可以更准确地检测信息,但会增加延迟。默认值为 5,000,000 微秒(5 秒)。
- cryptokey 十六进制字符串 (input)
设置解密密钥。
- indexmem 整数 (input)
设置时间戳索引使用的最大内存(每流)。
- rtbufsize 整数 (input)
设置缓冲实时帧使用的最大内存。
- fdebug 标志 (input/output)
打印特定调试信息。
可能的值:
- ‘ts’
- max_delay 整数 (input/output)
设置复用或解复用延迟的最大值(微秒)。
- fpsprobesize 整数 (input)
设置探测 FPS 使用的帧数。
- 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)。旨在让用户获得更好的持续时间探测效果,或者间接地提升,例如使用concat解复用器的操作。 典型用例是高码率的CBR的MPEG-TS,具有高视频缓冲和清洁结束,以及类似的音频与视频PTS值:在这种情况下,最后视频包和音频包之间的物理间隔较大,因此需要读取许多字节以获得视频流持续时间。 另一个用例是默认探测行为仅获取到视频流的单个帧,但非最后帧,因为帧重排导致持续时间不准确。 设置此选项对小文件也会有性能影响,因为探测大小是固定的。默认行为是通用权衡,通常是适应性的,但探测大小不会为了获得流持续时间而不惜一切代价扩展。 必须是大于等于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 Format 2, 3, 和4解复用器。
此解复用器用于解复用Audible Format 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。
目前唯一的转换是向MP4格式的H.264流添加h264_mp4toannexb比特流过滤器。这在分辨率变化时尤其必要。
- segment_time_metadata
如果设置为1,每个数据包将包含lavf.concat.start_time和lavf.concat.duration数据包元数据值,它们分别是合并输出中的相关文件段的开始时间和持续时间,以微秒表示。仅当基于合并文件已知持续时间时才设置持续时间元数据。 默认值为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
属性作为<Representation>
的元数据键,分别命名为"id"和"variant_bitrate"。
20.6.1 选项
此解复用器接受以下选项:
- cenc_decryption_key
16字节的密钥,以十六进制形式,用于解密使用ISO通用加密(CENC/AES-128 CTR,ISO/IEC 23001-7)加密的文件。
20.7 dvdvideo
DVD视频解复用器,由libdvdnav和libdvdread驱动。
可以直接将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视频不是传统意义上的直接可访问线性容器格式。相反,它允许复杂和编程的播放精心复用的MPEG-PS流,这些流存储在无头的VOB文件中。 对于最终用户,这些流被简单地称为"标题",但实际的逻辑播放顺序由一个或多个"PGC"(程序组链)在标题中定义。 PGC由多个"PG"(程序)组成,即实际的视频片段(对于典型的视频功能,按顺序排列)。PGC结构,以及流布局和元数据,存储在需要解析的IFO文件中。 PGC可以简单地理解为播放列表。
实际的DVD播放器通过菜单和其内部虚拟机依赖用户GUI交互来驱动解复用的方向。一般来说,用户要么通过菜单导航,要么自动被重定向到选择的PGC。在此过程中以及后续的播放中,DVD播放器的内部虚拟机还维护一个状态,并执行指令,可能会导致在播放期间跳到不同的扇区。 这就是为什么需要libdvdnav,因为光盘上的MPEG-PS块(VOB)的线性读取不足以在许多情况下产生正确的序列。
还有许多其他的DVD结构(一个长话题)在这里将不作详细讨论。 特别是NAV数据包,由此解复用器处理以建立准确的时间,同时不会作为流输出。要了解高层次信息,可参考:https://code.videolan.org/videolan/libdvdnav/-/blob/master/doc/dvd_structures
20.7.2 选项
此解复用器接受以下选项:
- title int
要播放的标题编号。如果pgc和pg未设置,则必须设置。 不适用于菜单。 默认值为0(自动),目前仅选择第一个可用标题(标题1)并通知用户有关影响。
- chapter_start int
开始的章节或PTT(标题的一部分)编号。不适用于菜单。 默认值为1。
- chapter_end int
结束的章节或PTT(标题的一部分)编号。不适用于菜单。 默认值为0,这是一种特殊值,表示在最后一个可能章节结束。
- angle int
视频角度编号,指的是额外的 视频流,这些流由VOB中交织的替换帧组成。 不适用于菜单。 默认值为1。
- region int
用于播放的区域代码。一些光盘可能使用此代码在不同的区域默认播放特定角度。 此选项不会影响作为输入的真实DVD驱动器的区域代码。不适用于菜单。 默认值为0,"世界"。
- menu bool
解复用菜单资源而不是导航标题。需要菜单的确切坐标(menu_lu, menu_vts, pgc, pg)。 默认值为false。
- menu_lu int
要解复用的菜单语言。在DVD中,菜单按照语言分组。 默认值为1,第一个语言单元。
- menu_vts int
菜单所在的VTS,如果是VMG菜单(根级),则为0。 默认值为1,第一个VTS的菜单。
- pgc int
用于开始播放的入口PGC,与pg联合使用。 设置的替代项title。 目前不支持章节标记。 对于菜单,需要明确设置。 默认值为0,自动从title.
- pg 值解析。
intpgc用于开始播放的入口PG,与title。 目前不支持章节标记。 默认值为1,PGC的第一个PG。
- preindex bool
启用此选项以获得准确的章节(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 开始的 PG 1 中分离语言 1 的菜单:
ffmpeg -f dvdvideo -menu 1 -menu_lu 1 -menu_vts 1 -pgc 1 -pg 1 -i <path to DVD> ...
20.8 ea
Electronic Arts 多媒体格式分离器。
这个格式被各种 Electronic Arts 游戏使用。
20.8.1 选项
- merge_alpha 布尔值
-
通常 VP6 的 alpha 通道(如果存在)会作为第二个视频流返回, 设置此选项后,分离器会返回一个包含普通视频和 alpha 通道的单一视频流。
20.9 imf
互操作母版格式分离器。
此分离器将 IMF Composition 中找到的音频和视频流呈现为流, 按照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
为媒体分段的分离器设置选项,使用 key=value 对列表分隔
:
.- seg_max_retry
在出错的情况下重新加载分段的最大次数, 适用于不希望在网络错误时跳过分段的情形。 默认值为 0。
20.13 image2
图像文件分离器。
此分离器从指定的图像文件列表中读取。 格式和含义由模式类型.
模式可以包含用于自动确定文件中图像格式的后缀。
序列中的所有文件图像必须具有相同的大小、像素格式和格式。
此分离器接受以下选项:
- framerate
为视频流设置帧率。默认值为 25。
- loop
如果设置为 1,则循环输入。默认值为 0。
- pattern_type
选择用于解释提供的文件名的模式类型。
模式类型接受以下值之一。
- none
禁用模式匹配,因此视频将仅包含指定的图像。 如果您不想从多个图像创建序列且文件名可能包含特殊模式字符, 则应使用此选项。
- sequence
选择序列模式类型,用于通过顺序编号表示文件序列。
序列模式可能包含字符串 " %d " 或 "%0Nd", 它指定了使用模式匹配的文件名中代表顺序编号的字符位置。形式 "%d0Nd" 时,文件名中表示编号的字符串会以零填充,N 表示零填充表示编号的总位数。字符 '%' 可通过字符串 "%%" 在模式中指定。N is the total number of 0-padded digits representing the number. The literal character ’%’ can be specified in the pattern with the string "%%".
如果序列模式包含 "%d" 或 "%0Nd",则由模式指定的文件列表的第一个文件名必须包含一个数字,该数字在起始编号和起始编号范围+-1 范围内,并且所有后续编号必须是连续的。-1, and all the following numbers must be sequential.
例如,模式 "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 通配符模式类型。
这种模式被解释为
glob()
模式。如果 libavformat 是以支持 glob 编译的,这才可以选择。- glob_sequence (deprecated, will be removed)
选择混合的 glob 通配符/序列模式。
如果您使用的 libavformat 版本是以支持 glob 编译的,并且提供的模式中至少包含一个 glob 元字符:
%*?[]{}
且元字符前有未转义的 "%",则模式被解释为glob()
模式,否则解释为序列模式。所有的通配符特殊字符
%*?[]{}
必须以 "%" 为前缀。要转义百分号 "%" 本身,请使用 "%%"。例如,模式
foo-%*.jpeg
将匹配所有以 "foo-" 开头并以 ".jpeg" 结尾的文件名,以及foo-%?%?%?.jpeg
将匹配所有以 "foo-" 开头,后跟三字符序列并以 ".jpeg" 结尾的文件名。这一模式类型已被弃用,建议使用glob和序列.
默认值为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" 通配符模式的图像,即所有以 ".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
它将导出一个 2 通道 16 位 44.1 kHz 的音频流。
可选地,可以导出一个pal8
16 色的视频流,带或不带打印的元数据。
它接受以下选项:
- noise_reduction
应用一个简单的低通滤波器。值可以是 1(开)或 0(关)。默认值为 0。
- reverb_depth
设置混响量。范围 0-100。默认值为 0。
- reverb_delay
设置延迟(单位:毫秒),限制范围为 40-250 毫秒。默认值为 0。
- bass_amount
应用低音增强(XBass 或 megabass)。范围是 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 Part 12,ISO/IEC 15444-12 或 JPEG 2000 Part 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
如果可用,将使用box。use_mfra_for
设置为pts或dts。- export_all
导出未识别的box作为udta中的元数据条目。box类型的前四个字符将作为键。默认值为false。
- export_xmp
导出整个内容XMP_box以及uuidbox为一个字符串,键为
xmp
。注意,如果export_all
已设置且该选项未设置,XMP_box的内容仍然会被导出,但使用键为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 box中写入的非常大的采样增量可能是有意的,但通常是错误或在作为有符号32位整数处理时用于存储DTS校正的负值。此选项允许用户设置一个上限,超过该限的增量将被钳制为1。负数在转换为int32时大于限制的值将用于调整后续DTS。
单位为轨时间比例。范围是0到UINT_MAX。默认值为
UINT_MAX - 48000*10
,此设置允许48 kHz音频流的DTS校正长达10秒,同时容纳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
将teletext包的PTS和DTS值覆盖为使用其所在且未被丢弃的第一个节目的PCR计算的时间戳。默认值为1,如果希望保留teletext包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,每帧表示为multipart/x-mixed-replace流的一部分。
- strict_mime_boundary
默认实现对多部分MIME边界检测应用宽松标准,以防止现有大量未生成正确MIME MJPEG流的终端发生回归。将此选项设置为1将导致对边界值进行更严格的检查。
20.20 rawvideo
原始视频解复用器。
此解复用器允许读取原始视频数据。由于没有指定假设视频参数的头文件,用户必须指定这些参数以正确解码数据。
此解复用器接受以下选项:
- framerate
设置输入视频帧速率。默认值为25。
- pixel_format
设置输入视频像素格式。默认值为
yuv420p
.- video_size
设置输入视频大小。此值必须显式指定。
例如,读取一个rawvideo文件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 示例
- 使用内置解码器将CC渲染为ASS格式:
ffmpeg -i CC.rcwt.bin CC.ass
请注意,如果您的输出似乎为空,可能需要手动设置解码器的data_field选项以选择所需的CC子流。
- 将RCWT备份转换为Scenarist(SCC)格式:
ffmpeg -i CC.rcwt.bin -c:s copy CC.scc
请注意,SCC格式不支持RCWT中可以存储的所有可能的CC扩展(例如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参考相对时间戳将从读取脚本时的当前时间获取,并根据该参考冻结脚本布局。这意味着如果脚本直接播放,实际时间将与绝对时间戳匹配(取决于声音控制器的时钟精度),但如果用户以某种方式暂停播放或寻道,则所有时间将相应地偏移。
20.23 tedcaptions
用于TED演讲.
的JSON字幕不提供字幕链接,但可以从页面中推测。FFmpeg源代码树中的文件tools/bookmarklets.html包含一个书签工具以显示它们。
此解复用器接受以下选项:
- 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*命令行工具,添加-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构建时,所有支持的复用器默认都是启用的。您可以使用configure选项列出所有可用的复用器--list-muxers
.
您可以使用configure选项禁用所有复用器--disable-muxers
并通过选项--enable-muxer=MUXER
/
--disable-muxer=MUXER
.
选项-muxers
使用 ff* 工具将显示已启用的混流器列表。使用-formats
来查看已启用的解复用器和混流器的综合列表。
以下是一些当前可用的混流器的描述。
21.1 原始混流器
本节涉及原始混流器。它们接受与指定编解码器匹配的单一流。它们不存储时间戳或元数据。识别的扩展名与混流器名称相同,除非另有指示。
它包括以下混流器。媒体类型以及用于自动从输出扩展名中选择混流器的最终扩展名也显示在这里。
- ‘ac3 audio’
杜比数字,也称为 AC-3。
- ‘adx audio’
CRI Middleware ADX 音频。
当输出文件可寻址并且总样本数可以存储在 32 位中时,此混流器将在第一个包开始附近写入总样本数。
- ‘aptx audio’
aptX(用于蓝牙的音频处理技术)
- ‘aptx_hd audio (aptxdh)’
aptX HD(用于蓝牙的音频处理技术)音频
- ‘avs2 video (avs, avs2)’
AVS2-P2(第二代音视频标准-部分2)/ IEEE 1857.4 视频
- ‘avs3 video (avs3)’
AVS3-P2(第三代音视频标准-部分2)/ IEEE 1857.10 视频
- ‘cavsvideo video (cavs)’
中国 AVS(第一代音视频标准)
- ‘codec2raw audio’
Codec 2 音频。
没有注册的扩展名,因此必须提供格式名称,例如在 ffmpeg CLI 工具中
-f codec2raw
.- ‘data any’
通用数据混流器。
此混流器接受任何类型的单一编码流。输入流必须使用
-map
选项选择ffmpeg
命令行工具。没有注册的扩展名,因此必须提供格式名称,例如在
ffmpeg
命令行工具中-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 一致声学(DCA)音频
- ‘eac3 audio’
杜比数字增强版,也称为增强 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 大端(“左对齐”)音频。
没有注册的扩展名,因此必须提供格式名称,例如在
ffmpeg
命令行工具中-f g726
.- ‘g726le audio’
ITU-T G.726 小端(“右对齐”)音频。
没有注册的扩展名,因此必须提供格式名称,例如在
ffmpeg
命令行工具中-f g726le
.- ‘gsm audio’
全球移动通信系统音频
- ‘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 视频。如果是长度前缀模式,比特流将转换为 Annex B 语法。
- ‘hevc video (hevc, h265, 265)’
ITU-T H.265 / MPEG-H 第 2 部分 HEVC 视频。如果是长度前缀模式,比特流将转换为 Annex B 语法。
- ‘m4v video’
MPEG-4 第 2 部分视频
- ‘mjpeg video (mjpg, mjpeg)’
Motion JPEG 视频
- ‘mlp audio’
Meridian 无损打包,也称为打包 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 低开销开放比特流单元混流器。
Temporal delimiter OBU 将插入到流的所有时间单元中。
- ‘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
由于 rawvideo 混流器不存储有关大小和格式的信息,解流文件时必须提供这些信息:
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 第14部分格式和 ISO 基本媒体文件格式 (ISOBMFF)。这些格式基于 ISO 基本媒体文件格式 (ISOBMFF) 共享一个通用结构。
MOV 格式最初是为 Apple QuickTime 使用而开发的。后来成为 MPEG-4 第1部分(后来的第14部分)格式的基础,也被称为 ISO/IEC 14496-1。后来该格式被概括为 ISOBMFF,也称为 MPEG-4 第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’
Microsoft IIS (Internet Information Services) 平滑流媒体音频/视频 (ISMV 或 ISMA) 格式。此格式基于 MPEG-4 第14部分格式,但具有一些不兼容的变体,用于 Microsoft IIS 服务器的媒体文件流传输。
- ‘mov’
QuickTime播放器格式,由
.mov
扩展标识- ‘mp4’
MP4 或 MPEG-4 第14部分格式
- ‘psp’
PlayStation Portable MP4/MPEG-4 第14部分格式变体。此格式基于 MPEG-4 第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 持续时间
生成持续时间为duration微秒的分片。
- frag_interleave 数字
在分片内交错样本(连续样本的最大数量,较低值交错更紧密,但开销更高)。默认值为
0
。- frag_size 大小
生成分片包含最多size字节的负载数据
- iods_audio_profile 配置文件
为音频配置文件原子指定 iods 编号(从 -1 到 255),默认值为
-1
- iods_video_profile 配置文件
为视频配置文件原子指定 iods 编号(从 -1 到 255),默认值为
-1
- ism_lookahead 条目数
为 ISM 文件指定 Lookahead 条目数(从 0 到 255),默认值为
0
- min_frag_duration 时长
不要创建比duration微秒短的分片
- moov_size 字节
在文件开头保留 moov 元素的空间,而不是将 moov 元素放在结尾处。如果保留空间不足,复用将失败。
- mov_gamma 伽马值
为 gama 元素指定伽马值(作为十进制数,从0到10),默认值为
0.0
,必须与+ movflags
- movflags 标志
设置各种复用开关。以下标志可用:
- ‘cmaf’
写入 CMAF(通用媒体应用格式)兼容的分片 MP4 输出
- ‘dash’
写入 DASH(动态自适应 HTTP 流媒体)兼容的分片 MP4 输出
- ‘default_base_moof’
与 ‘omit_tfhd_offset’ 标志类似,此标志通过使用新的 default-base-is-moof 标志避免了在 tfhd 原子中写入绝对的 base_data_offset 字段。此标志是自 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’(Smooth Streaming)文件时隐式设置此选项。
- ‘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使用模式0进行RTP
- ‘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)写入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音频流,最多为双声道,采样率为44100Hz。
由于AEA支持存储曲目标题,此复用器还会将流的元数据标题写入容器。
21.9 aiff
音频交互文件格式复用器。
21.9.1 选项
- write_id3v2 布尔值
启用时写ID3v2标签,设置为1时默认启用。默认值为0(禁用)。
- id3v2_version 布尔值
选择要写入的ID3v2版本。目前仅支持版本3和4(即ID3v2.3和ID3v2.4)。默认版本为4。
21.10 alp
High Voltage Software的Lego Racers游戏音频复用器。
它接受一个ADPCM_IMA_ALP流,最多为双声道,采样率不超过44100Hz。
扩展版本:tun
, pcm
21.10.1 选项
- type 类型
设置文件类型。
类型接受以下值:
- ‘tun’
将文件类型设置为音乐。必须具有22050Hz的采样率。
- ‘pcm’
将文件类型设置为音效。
- ‘auto’
根据输出文件扩展名设置文件类型。
.pcm
结果为 typepcm
否则typetun
被设置。(默认)
21.11 amr
3GPP AMR(自适应多速率)音频复用器。
它接受一个包含AMR NB流的音频流。
21.12 amv
AMV(Actions Media Video)格式复用器。
21.13 apm
Ubisoft Rayman 2 APM音频复用器。
它接受单一的ADPCM IMA APM音频流。
21.14 apng
动画PNG(便携式网络图形)复用器。
它接受单一APNG视频流。
21.14.1 选项
- final_delay 延迟
强制在每次重复的最后一帧后设定以秒为单位的延迟时间。默认值是
0.0
.- plays 重复次数
指定内容播放的次数,
0
导致无限循环,1
没有循环
21.14.2 示例
- 使用
ffmpeg
生成具有两次重复并在第一次重复后延迟半秒的APNG输出:ffmpeg -i INPUT -final_delay 0.5 -plays 2 out.apng
21.15 argo_asf
Argonaut Games ASF音频复用器。
它接受单一ADPCM音频流。
21.15.1 选项
- version_major 版本
覆盖文件主版本号,指定为整数,默认值是
2
- version_minor 版本
覆盖文件次版本号,指定为整数,默认值是
1
- name 名称
将文件名嵌入文件中,如果未指定则使用输出文件名。名称截断为8个字符。
21.16 argo_cvg
Argonaut Games 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 Audio(WMA)和Windows Media Video(WMV)也使用此复用器。
21.17.1 选项
- packet_size 大小
设置复用器数据包大小,以字节为单位。通过调整此设置,可以减少数据碎片或复用器开销,这取决于您的源。默认值是
3200
,最小值是100
,最大值是64Ki
.
21.18 ass
ASS/SSA(SubStation Alpha)字幕复用器。
它接受单一ASS字幕流。
21.18.1 选项
- ignore_readorder 布尔值
立即写入对话事件,即使它们是乱序的,默认值为
false
,否则事件会被缓存直到找到预期的时间事件。
21.19 ast
AST(音频流)复用器。
此格式用于在某些Nintendo 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是由微软开发的专有格式,后来通过Open DML规范正式定义。
由于播放器实现之间的差异,可能需要设置某些选项以确保生成的输出能够被目标播放器正确播放。
21.21.1 选项
- flipped_raw_rgb 布尔值
如果设置为
true
,为原始RGB位图存储正高度,这表示位图是自底向上的存储。注意,此选项不会翻转位图,必须在之前手动完成,例如通过使用‘vflip’ 过滤器。默认值是false
,表示位图是自顶向下存储。- reserve_index_space 大小
为文件头内每个流的OpenDML主索引保留指定数量的字节。默认情况下,如果第一个主索引中没有剩余空间,额外的主索引会嵌入到数据包中,并作为一个索引链链接。这种索引结构可能在某些使用场景中引发问题,例如严格依赖OpenDML索引规范的第三方软件或文件搜索较慢的情况。在文件头中保留足够的索引空间可以避免这些问题。
所需索引空间取决于输出文件大小,大约每GB需要16字节。当此选项被省略或设置为零时,会猜测必要的索引空间。
默认值是
0
.- write_channel_mask 布尔值
将通道布局掩码写入音频流标头。
此选项默认启用。禁用通道掩码在特定情况下可能有用,例如将多个音频流合并为一个,以兼容仅支持AVI中单音频流的软件(参见(ffmpeg-filters)ffmpeg过滤器手册中的“amerge”部分).
21.22 avif
AV1(开放媒体联盟视频编码1)图像格式复用器。
此复用器存储使用AV1编码的图像。
它接受一个或两个视频流。如果提供两个视频流,第二个必须包含一个存储alpha通道的单独平面。
如果提供多个图像,生成的输出会被视为动态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(核心音频格式)复用器。
它接受一个音频流。
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是一个填充到8位的十六进制数字,包含所有解码的输入帧的CRC。
另请参见framecrc复用器。
21.28.1 示例
- 使用
ffmpeg
计算输入的CRC,并将其存储在文件中out.crc:ffmpeg -i INPUT -f crc out.crc
- 使用
ffmpeg
通过以下命令将CRC打印到标准输出:ffmpeg -i INPUT -f crc -
- 您可以通过指定音频和视频编解码器及格式来选择每帧的输出格式。例如,要计算音频转换为PCM无符号8位,视频转换为MPEG-2后的输入的CRC,请使用以下命令:
ffmpeg
by specifying the audio and video codec and format. For example, to compute the CRC of the input audio converted to PCM unsigned 8-bit and the input video converted to MPEG-2 video, use the command: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选项。这是一个实验性功能。
注意:这不是苹果的 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 文件名
用于清单的DASH模板化名称
baseURL
元素。隐含设置了single_file选项为true。在模板中,$ext$
将替换为特定于片段格式的文件扩展名。- streaming 布尔值
启用或禁用输出的分块流模式。在分块流模式下,每帧将成为一个
moof
片段,形成一个分块。默认情况下禁用。- 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
返回ISO格式UTC时间戳的页面URL,例如
https://time.akamai.com/?iso
- window_size 大小
设置清单中保留的最大片段数,丢弃最旧的。这对实时流很有用。
如果该值为
0
,则在清单中保留所有片段。默认值是0
.- write_prft 写入_prft
为支持的流写入Producer Reference Time元素。这也使得在底层复用器中写入_prft盒子仅在utc_url选项启用时适用。默认为自动,在这种情况下,复用器将尝试仅在需要的模式下启用它。
21.29.2 示例
生成一个从输入源实时读取的DASH输出,使用ffmpeg
.
从输入文件生成两个多媒体流,它们都包含一个通过libx264编码的视频流和一个通过libfdk_aac编码的音频流。第一个多媒体流包含比特率为800k的视频和默认比特率的音频;第二个流则将视频缩放到320x170像素,使用300k比特率,并将音频重采样为22005 Hz。
该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声道的音频流,该流需重新采样为96000 Hz并用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-formats)的元数据章节了解有关格式的信息。
21.32.1 示例
使用ffmpeg
将输入文件的元数据提取到metadata.ffmeta文件中,格式为ffmetadata:
ffmpeg -i INPUT -f ffmetadata metadata.ffmeta
21.33 fifo
FIFO(先进先出)复用器。
‘fifo’伪复用器允许通过使用先进先出的队列将编码和复用分开,并在单独的线程中运行实际复用器。
这在与组合使用时特别有用,并可用于将数据发送到多个具有不同可靠性/写入速度/延迟的目标。 muxer and can be used to send data to several destinations with different reliability/writing speed/latency.
目标复用器可以从输出名称中选择,也可以通过fifo_format选项指定。
‘fifo’复用器在队列填满或输出失败(例如无法将数据包写入输出)时的行为是可配置的:
- 可以使用基于实时或流处理时间的可配置延迟透明地重新启动输出。
- 在临时失败期间,编码可以被阻塞,或者在FIFO队列填满时透明地丢弃数据包后继续。
API用户应了解回调函数interrupt_callback
, io_open
和io_close
在AVFormatContext
中使用时必须是线程安全的。
21.33.1 选项
- 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
Sega 电影 (.cpk) 复用器。
这种格式在几款 Sega 游戏中用作内部格式。
有关 Sega 电影文件格式的更多信息,请访问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格式有一个非常大的时间基准:两帧之间的延迟因此不能小于一百分之一秒。
21.42.1 选项
- loop 布尔值
设置输出循环的次数。使用
-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由Grass Valley Group开发,然后由SMPTE标准化为SMPTE 360M,并在SMPTE RDD 14-2007中扩展以包括高分辨率视频。
它最多接受一个视频流的编解码器为‘mjpeg’,或‘mpeg1video’,或‘mpeg2video’,或‘dvvideo’,分辨率为‘512x480’或‘608x576’,以及几个音频流,速率为48000Hz, 编解码器为‘pcm16_le’.
21.44 哈希
哈希测试格式。
该复用器为所有输入音频和视频帧计算并打印一个加密哈希。这可以用于相等性检查,而无需进行完整的二进制比较。
默认情况下,音频帧会被转换为有符号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媒体清单文件)清单,一个.abst (Adobe引导文件),以及在指定为输出的目录中的片段文件。
这些文件需要通过HTTPS被HDS播放器访问,以便能够对生成的流进行回放。
21.45.1 选项
- extra_window_size 整数
在从磁盘移除之前,清单之外保留的片段数量
- min_frag_duration 微秒
最小片段持续时间(以微秒为单位),默认值为1秒 (
10000000
)- remove_at_exit 布尔值
完成后删除所有片段设置为
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 布尔值
明确设置客户端是否可以(1)或不可(0)缓存媒体片段。
- hls_base_url 基本URL
附加基本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 选项列表
使用以“:”分隔的 key=value 参数列表设置输出格式选项。包含
:
特殊字符的值必须转义。- 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
初始化向量示例:
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被附加到播放列表中的密钥文件名。
- hls_enc_iv 初始化向量 (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并在段完成后才重命名为文件名。
一个提供段服务的网络服务器可以被配置为拒绝对 *.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
将所有的 mpegts 片段文件上传到 HTTP 服务器,使用 HTTP PUT 方法,并使用相同的方法每
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' 是可选属性。
使用此选项配置的闭合字幕组通过在var_stream_map字符串中提供相同的 'ccgroup' 名称映射到不同的变体流。
例如:
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
标签带有TYPE=CLOSED-CAPTIONS
到主播放列表,针对 INSTREAM-ID 'CC1' 和 'CC2'。此外,将添加CLOSED-CAPTIONS
属性,组名为 'cc' 用于两个输出变体流。如果var_stream_map未设置,则cc_stream_map中的第一个可用 ccgroup 映射到输出变体流。
例如:
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
标签带有TYPE=CLOSED-CAPTIONS
到主播放列表,组名为 'cc',语言为 'en'(英文),INSTREAM-ID 为 'CC1'。此外,CLOSED-CAPTIONS
还将添加属性,组名为 'cc' 用于输出变体流。- master_pl_name 名称
创建具有指定名称的 HLS 主播放列表。
例如:
ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 http://example.com/live/out.m3u8
创建一个名为master.m3u8的 HLS 主播放列表,该播放列表在http://example.com/live/.
- 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 布尔值
在打开、写入和删除期间忽略 IO 错误。对于具有网络输出的长期运行非常有用。
- headers 标题
设置自定义 HTTP 标头,可以覆盖内置默认标头。仅适用于 HTTP 输出。
21.47 IAMF
沉浸式音频模型和格式 (IAMF) 多路复用器。
IAMF 用于在各种设备上提供沉浸式音频内容,用于流媒体和离线应用。这些应用包括互联网音频流、多播/广播服务、文件下载、游戏、通信、虚拟现实和增强现实等。在这些应用中,音频可以在各种设备上播放,例如耳机、手机、平板电脑、电视、声条、家庭影院系统和大屏幕。
此格式由开放媒体联盟推广和设计。
有关此格式的更多信息,请参见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()
函数文档以了解语法。生成图像文件时,使用日期时间格式例如
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年代开发,源于多种不同的早期声音文件格式和系统,包括由加州大学圣地亚哥分校 CARL 的 Gareth Loy 博士开发的 csound 系统,巴黎 IRCAM 的 Rob Gross 和 Dan Timis 开发的 IRCAM 声音文件系统,以及伯克利快速文件系统。
该格式最初作为伯克利 / IRCAM / CARL 声音文件系统的一部分开发,该系统是一套旨在为音频应用实现文件系统的程序,运行于伯克利 UNIX 系统。它在学术音乐研究中心特别流行,并多次被用于早期计算机生成作曲的创作中。
此多路复用器接受包含 PCM 数据的单个音频流。
21.52 IVF
On2 IVF 多路复用器。
IVF 文件格式由 On2 Technologies(前身为 Duck Corporation)开发,用于存储其内部开发的编解码器。
此多路复用器接受单个‘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
蓝牙 SIG 低复杂度通信编解码器音频(LC3)或 ETSI TS 103 634 低复杂度通信编解码器加(LC3plus)。
此复用器接受单个‘lc3’音频流。
21.56 LRC
LRC 歌词文件格式复用器。
LRC(LyRiCs 的缩写)是一种计算机文件格式,能够将歌词与音频文件(例如 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’
视频不是立体的
- ‘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 大小
默认情况下,此复用器会在文件末尾写入用于寻址的索引(在 Matroska 中称为线索),因为它无法预先知道需要在文件开头保留多少空间用于索引。然而,对于某些使用场景——例如流式传输,虽然可以寻址但速度很慢——将索引放置在文件开头是有用的。
如果此选项设置为非零值,复用器将保留大小字节的空间在文件头中,然后尝试在复用结束时将线索写入其中。如果保留的空间不够,则不会写入线索,文件将被最终化并且写入尾部将返回错误。大多数使用场景的安全大小应该大约为每小时视频 50KB。
注意,只有在输出是可寻址的情况下才会写入线索,如果不是,则此选项将无效。
- cues_to_front 布尔值
如果设置,复用器将在必要时通过移动主要数据将索引写入文件开头。这可以与 reserve_index_space 结合使用,在这种情况下,只有在最初保留空间不足时数据才会被移动。
如果输出不可寻址,则忽略该选项。
- cluster_size_limit 大小
每个聚簇最多存储提供的字节数。
如果未指定,则会自动设置为合理的硬编码固定值。
- cluster_time_limit 持续时间
每个聚簇最多存储提供的毫秒数。
如果未指定,则会自动设置为合理的硬编码固定值。
- dash 布尔值
创建符合 WebM DASH 规范的 WebM 文件。默认设置为
false
.- dash_track_number 索引
DASH流的轨道编号。默认设置为
1
.- live 布尔值
假定为直播流写入文件。默认设置为
false
.- allow_raw_vfw 布尔值
允许原始VFW模式。默认设置为
false
.- flipped_raw_rgb 布尔值
如果设置为
true
,则为原始RGB位图存储正高度,这表示位图是自底向上的存储。注意,此选项不会翻转位图,这必须在前手动完成,例如使用‘vflip’滤镜。默认是false
,表示位图自顶向下存储。- write_crc32 布尔值
在每个1级元素中写入一个CRC32元素。默认设置为
true
。此选项对WebM无效。- default_mode 模式
控制输出轨道的 FlagDefault 的设置方式。这会影响播放器默认播放的轨道。默认模式是‘passthrough’.
- ‘infer’
每个带有默认布置的轨道将设置 FlagDefault。另外,对于每种类型的轨道 (音频、视频或字幕),如果不存在带有默认布置的该类型轨道,则该类型的第一个轨道(如果存在)将被标记为默认。这确保了即使输入来源于缺乏默认轨道概念的容器,默认标志也能以合理方式设置。
- ‘infer_no_subs’
此模式与推断相同,但如果没有字幕轨道带有默认布置,则不会标记默认字幕轨道。
- ‘passthrough’
在此模式下,只有在对应流的布置中设置了 AV_DISPOSITION_DEFAULT 标志时,FlagDefault 才会被设置。
21.58 MD5
MD5 测试格式。
这是一个哈希复用器的变体。不像那个复用器,它默认为使用 MD5 哈希函数。
21.58.1 示例
- 计算输入转换成原始音频和视频的 MD5 哈希,并将其存储在文件中out.md5:
ffmpeg -i INPUT -f md5 out.md5
- 将 MD5 哈希打印到标准输出:
ffmpeg -i INPUT -f md5 -
21.59 MicroDVD
MicroDVD 字幕格式复用器。
此复用器接受单个‘microdvd’字幕流。
21.60 MMF
合成音乐移动应用程序格式(SMAF)格式复用器。
SMAF 是一种音乐数据格式,由雅马哈公司为便携式电子设备(如手机和个人数字助理)制定。
此复用器接受单个‘adpcm_yamaha音频流。
21.61 mp3
MP3复用器生成一个包含以下可选功能的原始MP3流:
- 文件开始处的ID3v2元数据头(默认启用)。支持版本2.3和2.4,
id3v2_version
private选项用于控制使用哪个版本(3或4)。设置id3v2_version
为0可完全禁用ID3v2头。复用器支持向ID3v2头写入附加图片(APIC帧)。图片以单个包的视频流形式提供给复用器。可以存在任意数量这样的流,每个流对应一个APIC帧流。流的元数据标签title和comment分别映射到APIC的description和picture type。请参阅http://id3.org/id3v2.4.0-frames以了解允许的图片类型。
请注意,APIC帧必须在文件的开头写入,因此复用器将在获取所有图片之前会缓冲音频帧。因此建议尽快提供图片以避免过度缓冲。
- ID3v2头后面的Xing/LAME帧(如果存在)。默认启用,但仅在输出可寻址的情况下写入。可以使用
write_xing
private选项来禁用它。此帧包含可能对解码器有用的各种信息,例如音频时长或编码器延迟。 - 文件末尾的传统ID3v1标签(默认禁用)。可以通过
write_id3v1
private选项启用,但由于其功能非常有限,不推荐使用。
示例:
写入包含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间隔将自动确定:对于CBR流使用20毫秒,对于VBR流使用小于100毫秒的帧时长的最大公倍数。- 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(含)。 此选项允许更新流结构,以便标准消费者可以检测到更改。为此,请重新打开输出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_index
0可以用于禁用所有增长的数据表,允许以有限内存多路复用无尽的流,并且没有这些缺点。- 时间戳 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将有效地在大多数情况下使用每页1包形式,这具有额外的容器开销成本,但搜索粒度较小。
- -serial_offset 值
设置流序列号的起始值。 将其设置为不同且足够大的值可确保生成的ogg文件可以安全连接。
21.67 rcwt
RCWT(带时间的原始字幕)是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-TS段。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 大小
更新列表文件以包含最多size个片段。如果设置为0,列表文件将包含所有片段。默认值为0。
- segment_list_entry_prefix 前缀
在每个条目前添加prefix。对生成绝对路径很有用。默认情况下不应用任何前缀。
- segment_list_type 类型
选择列表格式。
以下值被识别:
- ‘flat’
为创建的片段生成一个平坦列表,每行一个片段。
- ‘csv, ext’
为创建的片段生成一个列表,每行一个片段,每行匹配以下格式(逗号分隔的值):
片段文件名,片段开始时间,片段结束时间
segment_filename是复用器根据提供的模式生成的输出文件名。如有需要将应用CSV转义(根据RFC4180)。
segment_start_time和segment_end_time分别指定片段开始和结束时间,单位为秒。
具有后缀
".csv"
或".ext"
的列表文件将自动选择此格式。‘ext’已被弃用,推荐使用‘csv’.
- ‘ffconcat’
为创建的片段生成一个ffconcat文件。生成的文件可以使用FFmpegconcat解复用器读取。
具有后缀
".ffcat"
或".ffconcat"
的列表文件将自动选择此格式。- ‘m3u8’
生成符合http://tools.ietf.org/id/draft-pantos-http-live-streaming.
版本3的扩展M3U8文件。
".m3u8"
的列表文件将自动选择此格式。
如果未指定类型,将从列表文件的后缀中猜测类型。
- segment_time 时间
将片段持续时间设置为time,该值必须是一个持续时间规范。默认值为"2"。另见segment_times选项。
请注意,划分可能并不准确,除非您在给定时间强制参考流关键帧。请参见以下的介绍性说明和示例。
- min_seg_duration 时间
将最小片段持续时间设置为time,该值必须是一个持续时间规范。这可以防止复用器将片段结束时间低于该值。仅在使用
segment_time
时有效。默认值为"0"。- segment_atclocktime 1|0
如果设置为"1",则从00:00时起按常规时钟时间间隔拆分。使用time中指定的值设置拆分间隔的长度。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"。
当指定delta时,如果关键帧的PTS满足以下关系,将从该关键帧开始新片段:
PTS >= start_time - time_delta
此选项在分割总是基于GOP边界的视频内容时非常有用,例如在分隔时间点之前找到一个关键帧的情况下。
尤其可以与ffmpeg选项结合使用。force_key_frames。由于四舍五入问题,由force_key_frames指定的关键帧时间可能不会精确设置,从而导致关键帧时间可能仅在指定时间之前。对于恒定帧率的视频,值为1/(2*frame_rate) 应该可以解决指定时间和force_key_frames.
- segment_times 指定的时间之间最差的时间不匹配问题。
指定一个分段点的列表。times包含一个以逗号分隔的持续时间规范的列表,按升序排列。另见segment_time选项。
- segment_frames 帧
指定一个拆分视频帧编号的列表。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
- 使用
ffmpeg
force_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 smoothstreaming
Smooth Streaming复用器生成一组文件(清单、块),适合使用常规Web服务器进行服务。
- window_size
指定清单中保留的片段数量。默认值为0(保留所有)。
- extra_window_size
指定从磁盘中移除前在清单之外保留的片段数量。默认值为5。
- lookahead_count
指定预览片段的数量。默认值为2。
- min_frag_duration
指定最小片段持续时间(以微秒为单位)。默认值为5000000。
- remove_at_exit
指定在完成后是否移除所有片段。默认值为0(不移除)。
21.70 streamhash
每流哈希测试格式。
此复用器为所有输入帧计算并打印加密哈希值,按流划分。 这可以用于平等检查,无需进行完整二进制比较。
默认情况下,音频帧被转换为带符号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_options选项以用于单个从属复用器。 参见fifo.
- select
选择应该映射到从属输出的流, 由流说明符指定。如果未指定,则默认映射所有流。 如果输出格式不接受所有映射的流,这将导致输出操作失败。
可以使用多个流说明符,用逗号(",")分隔。
,
例如:a:0,v
- onfail
指定输出失败时的行为。可以设置为
abort
(默认值) 或ignore
.abort
在此从属输出失败的情况下将导致整个进程失败。ignore
将忽略此输出上的失败,因此其他输出将继续不受影响。
21.71.2 示例
- 编码内容,同时将其存档到一个WebM文件并通过UDP将其作为MPEG-TS流传输。
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
将返回ISO格式的UTC时间戳的页面的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=章节部分开头可能有一个可选的时间基,用于起始/结束值。它必须是/numden的格式,其中numden是整数。如果时间基不存在,则假定开始/结束时间为纳秒。
接下来章节部分必须包含章节开始和结束时间,其格式为‘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文件,然后将其编辑后的元数据文件重编码到输出文件中。
用ffmpeg提取ffmetadata文件的过程如下:
ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
从FFMETADATAFILE文件重新插入编辑后的元数据信息的过程如下:
ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT
23 协议选项
libavformat库提供了一些通用的全局选项,可以在所有协议上设置。此外,每个协议还可以支持所谓的私人选项,这些是对此组件特有的。
选项可以通过在FFmpeg工具中指定 -选项 值或通过显式地设置值来实现,使用AVFormatContext
options 或使用libavutil/opt.hAPI进行编程使用。
支持的选项列表如下:
- protocol_whitelist 列表 (input)
设置允许协议的","分隔列表。"ALL" 匹配所有协议。以 "-" 开头的协议将被禁用。 默认情况下允许所有协议,但某些协议用于嵌套协议时受到每个协议子集的限制。
24个协议
协议是FFmpeg中配置的元素,用于访问需要特定协议的资源。
在配置FFmpeg构建时,默认会启用所有支持的协议。您可以使用配置选项"–list-protocols"来列出所有可用的协议。
您可以使用配置选项"–disable-protocols"禁用所有协议,并通过选项"–enable-protocol="选择性启用某个协议。协议,或者您可以使用选项 "–disable-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"相当于广播操作(即数据被转发到fanout交换机上的所有队列,与routing_key无关);"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,每个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 文件描述符
如果未指定fd,默认情况下写入操作将使用stdout文件描述符,读取操作将使用stdin文件描述符。与管道协议不同,如果文件描述符对应于常规文件,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方案名称后指定“+proto”来声明,其中proto可以是“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,则使用分块传输编码进行发布,默认值为1。
- http_proxy
设置代理,通过代理隧道,例如:http://example.com:1234
- headers
设置自定义HTTP头,可以覆盖内置默认头。值必须是编码头的字符串。
- content_type
为POST消息或监听模式设置特定的内容类型。
- user_agent
覆盖User-Agent头。如果未指定,协议将使用提供libavformat构建描述的字符串("Lavf/<version>")。
- referer
设置Referer头。在HTTP请求中包含'Referer:URL'头。
- multiple_requests
如果设置为1,则使用持久连接,默认值为0。
- post_data
设置自定义HTTP POST数据。
- mime_type
导出MIME类型。
- http_version
导出HTTP响应版本号。通常为"1.0"或"1.1"。
- cookies
设置将在未来请求中发送的Cookie。每个Cookie的格式与Set-Cookie HTTP响应字段的值相同。 多个Cookie可以用换行符分隔。
- 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身份验证类型。没有为Digest提供选项,因为这种方法需要从服务器先获取nonce参数,不能像Basic一样直接使用。
- none
自动选择HTTP身份验证类型。这是默认值。
- basic
-
选择HTTP基本身份验证。
基本身份验证发送一个Base64编码的字符串,该字符串包含客户端的用户名和密码。 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方法不匹配,客户端将收到一个错误请求响应。 当未设置时,目前不会检查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选项允许指定这些cookies。至少,每个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/<version>”的字符串。
- password
设置Icecast挂载点密码。
- content_type
设置流内容类型。如果与audio/mpeg不同,必须进行设置。
- legacy_icecast
此选项支持Icecast版本小于2.4.0的版本,这些版本不支持HTTP PUT方法,但支持SOURCE方法。
- tls
与Icecast建立TLS(HTTPS)连接。
icecast://[用户名[:密码]@]服务器:端口/挂载点
24.17 ipfs
星际文件系统(IPFS)协议支持。可以通过所谓的网关访问存储在IPFS网络上的文件。这些是http(s)端点。此协议将IPFS的本地协议(ipfs://和ipns://)封装为发送到这样的网关(endpoint)。用户可以(也应该)托管自己的节点,这意味着该协议将使用本地网关来访问IPFS网络上的文件。
该协议接受以下选项:
- gateway
定义要使用的网关。如果未设置,协议会首先尝试通过查找
$IPFS_GATEWAY
,$IPFS_PATH
和$HOME/.ipfs/
按顺序定位本地网关。
可以通过两种方式使用此协议。使用IPFS:
ffplay ipfs://<hash>
或使用IPNS协议(IPNS是可变的IPFS):
ffplay ipns://<hash>
24.18 mmst
MMS(微软媒体服务器)协议的TCP版本。
24.19 mmsh
MMS(微软媒体服务器)协议的HTTP版本。
必需的语法为:
mmsh://服务器[:端口][/应用程序][/播放路径]
24.20 md5
MD5输出协议。
计算要写入数据的MD5哈希值,并在关闭时将其写入指定输出或stdout(如果未指定)。可以用于测试混流器而无需实际写入文件。
以下是一些示例。
# 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表示stdin,1表示stdout,2表示stderr)。如果数字未指定,则默认使用stdout文件描述符进行写入,stdin用于读取。
例如,使用以下方式从stdin读取ffmpeg
:
cat test.wav | ffmpeg -i pipe:0 # ...this is the same as... cat test.wav | ffmpeg -i pipe:
使用以下方式写入stdoutffmpeg
:
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
设置I/O操作的最大块大小(以字节为单位)。默认值为
INT_MAX
,这意味着不限制请求的块大小。将此值设得较低,可以提高用户终止请求的反应时间,这在数据传输速度较慢的情况下非常有价值。- fd
设置文件描述符。
请注意,一些格式(通常是MOV)要求输出协议是可查找的,因此它们无法与管道输出协议配合使用。
24.22 prompeg
Pro-MPEG实践码#3发布2 FEC协议。
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)
- d=行
行数(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:"为前缀。您也可以通过
rtmp_playpath
选项覆盖从URI解析的值。- 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或1,分别表示FALSE或TRUE。同样,对于对象,数据必须是0或1,分别表示结束和开始一个对象。子对象中的数据项可以命名,通过在类型前加上'N'并在值之前指定名称(例如NB:myFlag:1
)。此选项可以多次使用以构造任意AMF序列。- rtmp_enhanced_codecs
指定客户端在增强RTMP流中支持的编解码器列表。此选项应设置为一个以逗号分隔的fourcc值列表,例如
hvc1,av01,vp09
表示多个编解码器,或hvc1
表示仅一个编解码器。指定的列表将在Connect Command Message的"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)、RTMP上的SSL/TLS(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
在UDP套接字上执行
connect()
(如果设置为1)或不执行(如果设置为0)。- 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将流发送到支持该功能的服务器(目前包括Darwin Streaming Server和Mischa Spiegelmock的RTSP服务器).
RTSP URL 的必要语法为:
rtsp://主机名[:端口]/路径
可以通过ffmpeg
/ffplay
命令行设定选项,或者通过代码中的AVOption
s 或在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 传输,则优先尝试用于 RTP 传输的 TCP。
- ‘satip_raw’
导出原始 MPEG-TS 流而不是解复用。此标志仅写出原始流,保留原始的 PAT/PMT/PIDs。
默认值为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
和分别为视频和音频动态切换。-ast
。观看流时可以按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
并在
ffmpeg -re -i 中观看,使用 IPv6: -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=毫秒
连接超时;当RTT > 1500毫秒(2次握手交换)时,SRT无法连接,默认连接超时为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时间,以及重发丢失的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字符的字符串,可以在连接前设置到套接字上。监听方可以从通过 srt_accept 返回的套接字中检索到此流 ID,该套接字通过具有设置的流 ID 的套接字连接。SRT 不对此字符串的内容进行任何特殊解释。 此选项在 Rendezvous 连接中没有意义;结果可能只是某一方覆盖另一方的值,这取决于运气确定哪一方会胜。
- srt_streamid=字符串
' 的别名streamid避免与 ffmpeg 命令行选项冲突。
- smoother=live|file
用于该套接字的传输的 Smoother 类型,其负责传输和拥塞控制。连接双方的 Smoother 类型必须完全相同,否则连接将被拒绝。
- messageapi=1|0
设置时,此套接字使用消息 API,否则使用缓冲区 API。注意,在 live 模式下(参见transtype), 仅可用消息 API。在文件模式下,可以选择使用以下两种模式之一:
流 API(默认,当此选项为 false 时)。在此模式下,可以通过一次发送指令发送任意多的数据,甚至可以使用从文件直接读取的专用函数。内部设施将处理速度和拥塞控制。在接收时,也可以接收任意多的数据,未提取的数据将等待下一次调用。流模式下数据部分之间没有边界。
消息 API。在此模式下,单次发送指令传递确切一条有边界的数据(消息)。与实时模式不同,此消息可能跨多个 UDP 数据包,而唯一的大小限制是它必须整体适合发送缓冲区。接收器必须使用足够大的缓冲区来接收消息,否则消息不会被放弃。未完成的消息(未接收所有数据包或存在数据包丢失)将不会被放弃。
- transtype=live|file
为套接字设置传输类型,特别是,设置此选项为特定的传输类型设置多个其他参数的默认值。
live:将选项设置为实时传输模式。在此模式下,只应通过一次发送指令发送那么多恰好适合一个 UDP 包的数据,并受到最初定义值的限制,例如payload_size(此模式下默认值为 1316)。此模式下没有速度控制,只有带宽控制(如配置),以防止超过带宽,不包括重发和控制包的开销传输。
文件:将选项设置为非实时传输模式。请参见messageapi了解详细说明。
- linger=秒
套接字在关闭时等待未发送数据的秒数。默认值为 -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://主机名:端口[?选项]
选项包含 & 分隔的形式为的选项列表键=值.
支持的选项列表如下。
- listen=2|1|0
监听传入连接。0 表示禁用监听,1 表示启用单客户端模式监听,2 表示启用多客户端模式监听。默认值为 0。
- local_addr=地址
用于 TCP 套接字连接的网络接口的本地 IP 地址。
- local_port=端口
用于 TCP 套接字连接的本地端口。
- 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=server.crt&key=server.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
通过UDP以mpegts格式流式传输,使用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://文件路径
以下参数可以通过命令行选项设置AVOption
(或在代码中通过
- 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.
例如,要从卡号为 0 的 ALSA 设备捕获数据,可以运行以下命令:ffmpeg
from an ALSA device with
card id 0, you may run the command:
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 的可用性在配置期间自动检测。
此设备允许从 Android 设备上的所有相机捕获数据,这些相机集成到 Camera2 NDK API 中。
这些相机会在内部枚举,可以使用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 上,您需要运行 IDL 文件通过widl
.
DeckLink 对其支持的格式非常挑剔。可以使用raw_format设置输入的视频格式。
帧率和视频尺寸必须通过-list_formats 1
确定您的设备。
音频样本速率始终为 48 kHz,通道数可以是 2、8 或 16。请注意,所有音频通道捆绑在一个音轨中。
26.4.1 选项
- 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路’冗余中维护N个不同硬件设备的输入同步非常有用。在使用此选项之前,不同硬件设备的系统时间应通过NTP或PTP等协议进行同步。请注意,此方法并非万无一失。在某些边界情况下,由于操作系统中的线程调度抖动,输入同步可能无法发生。同步可能错误1帧或者在更少见的情况下出现timestamp_align秒的错误。默认为‘0’.
- wait_for_tc (bool)
丢弃帧,直到接收到带时间码的帧。有时,串行时间码不会与第一帧一起接收。如果这种情况发生,存储的流时间码将不准确。如果设置此选项为true,输入帧将在接收到带时间码的帧之前丢弃。选项timecode_format必须指定。默认为false.
- enable_klv(bool)
如果设置为true,从VANC中提取KLV数据并输出KLV数据包。基于MID和PSC字段合并KLV VANC数据包,并聚合为一个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) 输入帧速率、尺寸、交织等之间切换。更改这些值可以启用不同的扫描速率/帧速率并避免底部出现绿色条纹、扫描线闪烁等问题。此外,对于某些设备,更改这些属性也可能会影响未来调用(设置新的默认值),直到系统重启后。
- 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,在捕获开始之前,弹出一个显示对话框供终端用户手动修改电视音频(如单声道 vs 立体声,语言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"
- 打开视频设备相机和音频设备麦克风:
$ 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
抓取名为“计算器”的窗口内容
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内核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 客户端,可以使用jack_connect
和jack_disconnect
程序,或者通过图形界面操作,
例如使用qjackctl
.
要列出 JACK 客户端及其属性,可以调用命令jack_lsp
.
以下是一个示例,显示如何使用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 或平面(plane)关联的 KMS 扫描输出帧缓冲区,作为可以传递给其他硬件功能的 DRM 对象。
需要 DRM master 或 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
- 以 60fps 从 CRTC ID 42 捕获,将结果映射到 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
- 如前一个示例,但使用文件名指定图表描述,并省略 "out0" 标签:
ffplay -f lavfi color=c=pink
- 创建三个不同的视频测试滤波源并播放它们:
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 的 Audio-CD 输入设备。
要在配置期间启用此输入设备,您需要在系统上安装 libcdio。它需要配置选项--enable-libcdio
.
此设备允许播放和抓取 Audio-CD。
例如,要使用ffmpeg
复制整个 Audio-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’.
有关可用恢复模式的更多信息,请参考 paranoia 项目文档。
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 头文件和库,并需要用以下选项配置 FFmpeg:--enable-openal
.
OpenAL 头文件和库应该由您的 OpenAL 实现提供,或作为附加下载(SDK)。根据您的安装,您可能需要通过以下选项指定额外的标志:--extra-cflags
和--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
Open Sound System输入设备。
提供给输入设备的文件名是表示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通过使用--enable-libv4l2
配置选项构建了v4l-utils支持,则可以与-use_libv4l2
输入设备选项一起使用。
要抓取设备的名称是一个文件设备节点,通常当设备(例如USB摄像头)插入系统时,Linux系统会自动创建这样的节点,其名称类似于/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(Windows视频)捕获输入设备。
作为输入传递的文件名是捕获驱动程序编号,范围为0到9。可以使用"list"作为文件名来打印驱动程序列表。 任何其他的文件名将被解释为设备编号0。
26.19.1 选项
- video_size
设置视频帧尺寸。
- framerate
设置捕捉帧率。默认值为
ntsc
, 对应的帧率为30000/1001
.
26.20 x11grab
X11视频输入设备。
为在配置期间启用此输入设备,您的系统需要安装libxcb。 在配置期间会自动检测到它。
该设备允许捕获X11显示区域。
作为输入传递的文件名的语法为:
[主机名]:显示编号.屏幕编号[+x偏移,y偏移]
主机名:显示编号.屏幕编号指定要捕获的
X11屏幕的显示名称。主机名可以忽略,默认为"localhost"。
环境变量DISPLAY
包含默认的显示名称。
x偏移和y偏移指定捕获区域相对于X11屏幕左上角的偏移。 默认值为0。
请查阅X11文档(如man X
)以获得更多详细信息。
使用xdpyinfo
程序获取有关
X11显示属性的基本信息(例如,可以grep "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
或像素数像素.当值为"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的x11grab)。
例如:
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_offset和y_offset参数。 默认值均为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
option of ffmpeg to list the available output devices.- 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已将duplex属性替换为profile属性。 对于DeckLink Duo 2和DeckLink Quad 2,共享属性在任何使用相同连接器的2个子设备之间共享。 对于DeckLink 8K Pro,共享属性在所有4个子设备之间共享。因此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
设置在使用的输出上的genlock定时像素偏移。 默认为‘unset’.
- link
设置在使用的输出上的SDI视频链路配置。必须为 ‘unset’, ‘single’链路SDI,‘dual’链路SDI或‘quad’链路SDI。 默认为‘unset’.
- sqd
为四联SDI输出启用Square Division Quad Split模式。 必须为‘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.
有关更详细的信息,请读取以下文件Documentation/fb/framebuffer.txt,它包含在Linux源码树中。
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字节,而是等待缓冲区 足够空闲以一次性请求更多字节。不推荐设置此选项, 此时默认会初始化为服务器认为合适的值。
27.7.2 示例
在默认服务器上的默认设备上播放文件:
ffmpeg -i INPUT -f pulse "stream name"
27.8 sndio
sndio 音频输出设备。
27.9 v4l2
Video4Linux2 输出设备。
27.10 xv
XV(XVideo)输出设备。
此输出设备允许在 X Window 系统窗口中显示视频流。
27.10.1 选项
- display_name
指定硬件显示名称,该名称决定了使用的显示和通信域。
显示名称或 DISPLAY 环境变量可以是格式为主机名[:编号[.屏幕编号]].
主机名指定显示器物理连接的主机的名称。编号指定 该主机上的显示服务器编号。屏幕编号指定 服务器上使用的屏幕。
如果未指定,其默认值为 DISPLAY 环境变量的值。
例如,
dual-headed:0.1
将指定机器“dual-headed”上的显示器 0 的屏幕 1。有关显示名称格式的更详细信息,请参阅 X11 规范。
- window_id
当设置为非零值时,设备不会创建新窗口, 而是使用带有提供的window_id的现有窗口。 默认情况下,此选项设置为 0,设备会创建自己的窗口。
- window_size
设置创建窗口的大小,可以是形式为宽度x高度或视频尺寸缩写的字符串。如果未 指定,默认值是输入视频的尺寸。 当window_id已设置时被忽略。
- window_x
- window_y
设置创建窗口的 X 和 Y 偏移量,两者默认都为 0。 窗口管理器可能会忽略这些值。 当window_id已设置时被忽略。
- window_title
设置窗口标题,如果未指定,则默认为输出设备指定的文件名。 当window_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 工具中设置选项,选项=值用于 aresample 滤镜,
通过显式设置值为SwrContext
选项或使用libavutil/opt.hAPI
进行编程使用。
- 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
设置输入/输出通道布局。
- 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`失败时优先速度而不是质量,可以禁用它。
- exact_rational
仅适用于swr,启用时尝试基于输入和输出采样率使用精确的相位计数。如果超过
1 << phase_shift
, 相位计数将回落到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,选择零通带滚降(切比雪夫)及对'非理性'比率的高精度近似。默认值为0。
- async
仅适用于swr,使用简单的单参数音频同步到时间戳,使用拉伸、压缩、填充和修剪。设置为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’
选择Dolby
- ‘dplii’
选择Dolby Pro Logic II
默认值为
none
.- filter_type
仅适用于swr,选择重采样过滤器类型。这仅影响重采样操作。
它接受以下值:
- ‘cubic’
选择三次方
- ‘blackman_nuttall’
选择布莱克曼努特尔窗滤波器
- ‘kaiser’
选择凯撒窗滤波器
- kaiser_beta
仅适用于swr,设置凯撒窗滤波器的Beta值。必须为区间[2,16]内的双精度浮点值,默认值为9。
- output_sample_bits
仅适用于swr,设置用于抖动的输出样本位数。必须为区间[0,64]内的整数,默认值为0,表示未使用。
放大器选项
视频放大器支持以下命名选项。
可以通过在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
设置输入具有透明度但输出没有透明度时使用的透明混合。默认值为‘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 filter, which crops away the lower half part of the video, and then vertically flipped. The overlay filter takes in input the first unchanged output of the split filter (which was labelled as [主]),并将其下半部分叠加了裁剪,垂直翻转过滤链生成的输出。crop,vflip filterchain.
一些过滤器接收输入的参数列表:这些参数在过滤器名称和等号之后指定,用冒号分隔开。
有所谓的源过滤器,它没有音频/视频输入,还有所谓的接收过滤器,它没有音频/视频输出。
31 graph2dot
FFmpeg中的graph2dot程序tools目录包括了一个程序用于解析过滤图描述并生成相应以dot语言编写的文本表示。
请输入以下命令:
graph2dot -h
查看如何使用graph2dot.
然后您可以将dot描述传递给dot程序(graphviz工具包中的程序),并获得过滤图的图形化表示。
例如以下命令序列:
echo 图形描述 | \ tools/graph2dot -o graph.tmp && \ dot -Tpng graph.tmp -o graph.png && \ display graph.png
可用于创建并显示代表过滤图的图像,该图由图形描述字符串描述。请注意,这个字符串必须是完整的自包含图,输入和输出必须明确定义。例如如果您的命令行形式为:
ffmpeg -i infile -vf scale=640:360 outfile
您的图形描述字符串需要为以下形式:
nullsrc,scale=640:360,nullsink
您可能还需要设置空src的参数并添加一个格式过滤器以模拟一个特定的输入文件。
32 过滤图描述
过滤图是连接过滤器的有向图。它可以包含循环,并且在过滤器对之间可以有多个链接。每个链接在一侧有一个连接其输入的输入端口,以及另一侧连接其输出的输出端口。
过滤图中的每个过滤器都是注册在应用程序中的过滤器类的一个实例,它定义了过滤器的特性以及输入和输出端口的数量。
没有输入端口的过滤器称为“源”,而没有输出端口的过滤器称为“接收”。
32.1 过滤图语法
过滤图有一个文本表示形式,这被以下选项识别:-filter/-vf/-af和-filter_complex在ffmpeg
中-vf/-af和ffplay
中,以及以下定义的函数avfilter_graph_parse_ptr()
在libavfilter/avfilter.h.
中定义。
过滤图由过滤链序列组成。过滤链的序列表示为以“;”分隔的过滤链描述列表。
过滤器由以下格式的字符串表示:输入链接_1]...[输入链接_N]过滤器名称@id=参数[输出链接_1]...[输出链接_M]
过滤器名称是过滤器类的名称,描述的过滤器是该类的一个实例,并且需要是程序中注册的过滤器类的名称,可以选择性地跟随一个“@id”。过滤器类的名称可以选择性地后跟一个字符串“=参数".
参数是一个字符串,包含用于初始化过滤器实例的参数。它可以有以下两种形式:
- 以‘:’分隔的键=值对列表。
- 以‘:’分隔的值列表。在这种情况下,键被假设为按声明顺序的选项名称。例如,过滤器声明三个选项顺序为
fade
filter declares three options in this order – type, start_frame和nb_frames。然后参数列表在:0:30表示值在被分配给选项type, 0到start_frame和30到nb_frames. - 以冒号 ':' 分隔的混合直接值和长键=值对。直接值必须在键=值对之前,并遵循前一个点的约束顺序。以下键=值对可以按照任何首选顺序设置。
如果选项值本身是一个项目列表(例如,format
filter
接受一个像素格式的列表),列表中的项通常用‘|’.
列表的参数可以使用字符‘'’作为开始和结束标记,字符‘\’用于转义列表中引用的文本;否则,当遇到下一个特殊字符(属于集合‘[]=;,’)时字符串将被认为已终止。
一个特别的语法在ffmpeg
CLI 工具中实现,允许从文件中加载选项值。这是通过在选项名称前加上斜杠 '/'来完成的,然后提供的值被解释为实际值加载的路径。例如
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
中,分割过滤器实例有两个输出垫,覆盖过滤器实例有两个输入垫。 分割的第一个输出垫标注为 "L1",第一个输入垫标注为 "L2",而分割的第二个输出垫链接到覆盖的第二个输入垫,二者未被标注。
在过滤器描述中,如果第一个过滤器的输入标签未指定,则假设为 "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=flags;] 过滤链 [;过滤器图]
32.2 过滤器图转义的注意事项
过滤器图描述的组成涉及几个级别的转义。参见(ffmpeg-utils)的 "引用和转义" 部分,了解 ffmpeg-utils(1) 手册中相关的转义过程。获取更多关于所用转义过程的信息。
第一级转义影响每个过滤器选项值的内容,选项值可能包含特殊字符:
用于分隔值,或其中一个转义字符\'
.
第二级转义影响整个过滤器描述,其中可能包含转义字符\'
或者过滤器图描述使用的特殊字符[],;
。
最后,当您在 shell 起始命令行中指定一个过滤器图时,您需要为 shell 中的特殊字符执行第三级转义。
例如,考虑以下字符串嵌入到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 中直接包含过滤器或选项规范。
例如,对于绘制文字过滤器,您可能更喜欢使用textfile选项替代text来指定要渲染的文本。
33 时间线编辑
某些过滤器支持通用enable选项。对于支持时间线编辑的过滤器,此选项可以设置为一个表达式,该表达式在传递帧到过滤器之前被计算。如果计算结果为非零,则启用过滤器,否则该帧将不变地传递到过滤图中的下一个过滤器。
表达式接受以下值:
- ‘t’
时间戳以秒为单位表示,当输入时间戳未知时为 NAN
- ‘n’
输入帧的顺序号,从 0 开始
- ‘pos’
输入帧在文件中的位置,当未知时为 NAN;已弃用,请勿使用
- ‘w’
- ‘h’
如果是视频,则为输入帧的宽度和高度
除此之外,这些过滤器支持enable命令,可用于重新定义表达式。
与任何其他过滤选项一样,enable选项遵循相同的规则。
例如,要启用模糊过滤器(smartblur)在 10 秒到 3 分钟期间,以及一个curves过滤器从 3 秒开始:
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
通过第一个输入。
- d
通过第二个输入。
- o
通过期望值、第二个输入与误差信号估算值之间的差异。
- n
通过输入值、第一个输入与误差信号估算值之间的差异。
- 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。
默认值为4阶.
- 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
减少音频位分辨率。
此过滤器是一种功能增强的位压缩器。位压缩器用于可听地减少音频信号的采样位数。 这不会改变深度位,而只是产生效果。降低位深度的材料听起来更刺耳和“数字化”。 此过滤器甚至可以将连续值四舍五入而不是离散位深度。 此外,它具有一个直流偏移,从而导致信号的下半部分和上半部分被不同地压缩。 反别名设置能够产生“更柔和”的压缩声音。
此过滤器的另一个功能是对数模式。 此设置将位之间的线性距离切换为对数距离。 其结果是更“自然”的压缩器,例如,不会对低信号进行门限操作。 人耳具有对数感知,因此这种压缩方式更加愉悦。 对数压缩还能够实现抗混叠。
过滤器接受以下选项:
- 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
设置添加噪声的级别(以dB为单位)。默认值为
-351
。 允许范围为-451到-90。- type
设置添加的噪声类型。
- dc
添加直流信号。
- ac
添加交流信号。
- square
添加方波信号。
- pulse
添加脉冲信号。
默认值为
dc
.
36.13.1 命令
该过滤器支持上述所有选项作为命令.
36.14 导数、积分
计算音频流的导数/积分。
依次应用两个过滤器将产生原始音频。
36.15 动态范围控制
对输入音频流应用频谱动态范围控制过滤器。
接受选项的描述如下。
- transfer
设置转换表达式。
表达式可以包含以下常量:
- ch
当前通道编号
- sn
当前样本编号
- nb_channels
通道数
- t
以秒为单位的时间戳
- sr
采样率
- p
当前频率功率值(以dB为单位)
- f
当前频率(以Hz为单位)
默认值为
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
设置用于触发均衡的检测过滤器的检测频率(以Hz为单位)。 默认值为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
选择哥伦比亚。
- emi
选择EMI。
- bsi
选择BSI(78转)。
- riaa
选择RIAA。
- cd
选择光盘(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
选择sine cardinal函数
- isinc
选择反sine cardinal函数
- 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
仅通过噪声。
默认值为output(输出).
- 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
) 的频率范围数的虚部值
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
应用任意的有限冲激响应过滤器。
此过滤器设计用于应用长达60秒的FIR过滤器。
它可以用作数字分频过滤器、房间均衡、交谈消除、波场合成、音效化、环绕音效和空问化的组件。
此过滤器将用第一个以上的流作为FIR系数。 如果非第一流只包含一个频道,它将用于第一流中的所有输入频道;否则非第一流中的频道数量必须与第一流中的频道数量相同。
它接受以下参数:
- dry
设置干信号增益。这设置输入增益。
- wet
设置湿信号增益。这设置最终的输出增益。
- length
设置冲激响应过滤器长度。默认值是1,意味着整个IR被处理。
- gtype
This option is deprecated, and does nothing.
- irnorm
Set norm to be applied to IR coefficients before filtering. Allowed range is from -1 to 2. IR coefficients are normalized with calculated vector norm set by this option. For negative values, no norm is calculated, and IR coefficients are not modified at all. Default is 1.
- irlink
For multichannel IR if this option is set to true, all IR channels will be normalized with maximal measured gain of all IR channels coefficients as set by
irnorm
option. When disabled, all IR coefficients in each IR channel will be normalized independently. Default is true.- irgain
Set gain to be applied to IR coefficients before filtering. Allowed range is 0 to 1. This gain is applied after any gain applied with irnorm option.
- 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 示例
- 为48kHz采样率设置一个在约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阶归一化巴特沃斯低通滤波器:
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时,也会刷新前瞻缓冲区内的有效音频数据。
根据所选设置,建议将输入2倍或4倍上采样 通过aresample滤波后应用此过滤器。
36.32 全通滤波器(allpass)
应用一个具有中心频率(单位:Hz)frequency和带宽width的两极全通滤波器。 全通滤波器通过改变音频的频率与相位关系 而不改变其频率与幅度关系。
过滤器接受以下选项:
- frequency, f
设置频率,单位为Hz。
- width_type, t
设置带宽指定方法。
- h
赫兹
- q
品质因数
- o
倍频程
- s
斜率
- k
千赫兹
- width, w
以width_type单位指定滤波器的带宽。
- 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_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’
巴特沃斯,这是默认值。
- ‘1’
切比雪夫1型。
- ‘2’
切比雪夫2型。
- curves
激活此选项时,anequalizer的频率响应将在视频流中显示。
- size
设置视频流大小。仅在激活曲线选项时有用。
- mgain
设置将显示的最大增益。仅在激活曲线选项时有用。将其设置为合理值可以显示从紧邻的频带导出的增益,这些频带太靠近彼此且两者都激活时会产生更高的增益。
- fscale
设置用于在视频输出中绘制频率响应的频率比例。可以是线性或对数。默认值为对数。
- colors
设置将在视频流中显示的每个通道曲线的颜色。这是一组由空格或’|'分隔的颜色名称。未识别或缺失的颜色将替换为白色。
36.37.1 示例
- 减少200Hz的中心频率和100Hz的带宽的增益10倍
对于使用切比雪夫1型滤波器的前两个通道:
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
使用第二个音频流对第一个音频流应用标准化最小均方(Squares|Fourth)算法。
这种自适应滤波器用于模拟一个期望的滤波器,通过找到相关的滤波器系数,以产生错误信号(目标信号,即第二个输入音频流与实际信号,即第一个输入音频流之差)的最小均方。
以下是所接受选项的描述。
- 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亦无pad_dur或whole_dur选项,过滤器将无限期地向输入流的末尾添加静音。
请注意,对于 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
设置调制速度(以赫兹为单位)。默认值为 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
测量音频峰值信噪比。
此过滤器接受两个音频流作为输入,并输出第一个音频流的音频。在任一输入结束时,结果以每个通道的分贝为单位。
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 时,两个曲线再次匹配。介于此范围内的设置无缝地移动相移,在所有阶段之间进行切换,并带有正弦和三角波形,产生一些“穿越”声音。偏移接近 1 时(从 0.5 开始),信号从左扬声器切换到右扬声器的速度更快。
该过滤器接受以下选项:
- level_in
设置输入增益。默认值为 1。范围为 [0.015625 - 64]。
- level_out
设置输出增益。默认值为 1。范围为 [0.015625 - 64]。
- mode
设置 LFO 将使用的波形形状。可以是以下之一:正弦波(sine)、三角波(triangle)、方波(square)、锯齿波向上(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 aresample
使用libswresample库将输入音频重采样为指定的参数。如果未指定参数,则滤镜会在其输入和输出之间自动转换。
此滤镜还可以拉伸/压缩音频数据以匹配时间戳,或者注入静音/裁剪音频使其匹配时间戳,或者两者结合,或者不执行任何操作。
滤镜接受以下语法 [采样率:]重采样器选项,其中采样率表示采样率,重采样器选项是一个键=值对的列表,用":"分隔。有关支持选项的完整列表,请参阅(ffmpeg-resampler)"重采样器选项"部分中的ffmpeg-resampler(1)手册。
36.47.1 示例
- 将输入音频重采样为44100Hz:
aresample=44100
- 将样本拉伸/压缩到给定的时间戳,每秒最多补偿1000个样本:
aresample=async=1000
36.48 areverse
反转音频剪辑。
警告:此滤镜需要内存来缓冲整个剪辑,因此建议进行裁剪。
36.48.1 示例
- 获取剪辑的前5秒,并反转它。
atrim=end=5,areverse
36.49 arls
使用第二音频流对第一音频流应用递归最小二乘算法。
此自适应滤镜用于通过递归寻找滤镜系数来模拟所需的滤镜,这些滤镜系数与产生最小加权线性最小平方误差信号(目标,第2输入音频流和实际信号,第1输入音频流之间的差)的代价函数相关。
以下是可接受选项的描述。
- order
设置滤镜阶数。
- lambda
设置遗忘因子。
- delta
设置初始化内部协方差矩阵的系数。
- out_mode
设置滤镜输出样本。它接受以下值:
- i
传递第1输入。
- d
传递第2输入。
- o
传递目标(第2输入)与误差信号估计之间的差。
- n
传递输入(第1输入)与误差信号估计之间的差。
- e
传递误差信号估计样本。
默认值是o.
- precision
设置处理样本时使用的精度。
- auto
根据其他滤镜自动选择内部样本格式。
- float
始终使用单精度浮点样本格式。
- double
始终使用双精度浮点样本格式。
36.50 arnndn
使用递归神经网络减少语音中的噪声。
此滤镜接受以下选项:
- model, m
设置要加载的训练模型文件。此选项始终是必需的。
- mix
设置过滤样本混合到最终输出中的比例。 允许范围为-1到1。默认值为1。 负值为特殊值,它们设置保留过滤噪声的比例 在最终滤波输出中。将此选项设置为-1,可听到从输入信号中移除的实际噪声。
36.50.1 命令
此滤镜支持上述所有选项作为命令.
36.51 asdr
测量音频信号与失真比。
此滤镜将两个音频流作为输入,输出第一个音频流。 结果以每通道分贝在任意输入结束时显示。
36.52 asetnsamples
设置每个输出音频帧的样本数。
最后一个输出包可能包含不同数量的样本,因为滤镜将在输入音频信号结束时刷新剩余的所有样本。
滤镜接受以下选项:
- nb_out_samples, n
设置每个输出音频帧的帧数。此数字被视为样本数per each channel。 默认值是1024。
- pad, p
如果设置为1,滤镜将用零填充最后的音频帧,使得最后的帧包含与前一帧相同的样本数。默认值是1。
例如,将每帧样本数设置为1234,并为最后一帧禁用填充,使用:
asetnsamples=n=1234:p=0
36.53 asetrate
设置采样率而不改变PCM数据。 这将导致速度和音高的变化。
滤镜接受以下选项:
- sample_rate, r
设置输出采样率。默认值为44100 Hz。
36.54 ashowinfo
显示一行包含每个输入音频帧的各种信息。 不会修改输入音频。
显示的行包含一系列形式为键:值.
的键值对。
- n
输入帧的(顺序)编号,从0开始。
- pts
输入帧的显示时间戳,单位为时间基;时间基 取决于滤镜的输入端,通常是1/采样率.
- pts_time
输入帧显示时间戳,以秒为单位。
- fmt
采样格式。
- chlayout
声道布局。
- rate
音频帧的采样率。
- nb_samples
帧中的样本数(每通道)。
- checksum
音频数据的Adler-32校验和(以十六进制打印)。对于平面音频,数据被视为所有平面连接在一起。
- plane_checksums
每个数据平面的Adler-32校验和列表。
36.55 asisdr
测量音频的缩放不变信号与失真比。
此滤镜将两个音频流作为输入,输出第一个音频流。 结果以每通道分贝在任意输入结束时显示。
36.56 asoftclip
应用音频软削波。
软削波是一种失真效果,其中信号的振幅沿平滑曲线饱和,而不是硬削波的突然形状。
此滤镜接受以下选项:
- type
设置软削波的类型。
它接受以下值:
- hard
- tanh
- atan
- cubic
- exp
- alg
- quintic
- sin
- erf
- threshold
设置开始削波的阈值。默认值是0dB或1。
- output
设置应用于输出的增益。默认值是0dB或1。
- param
设置控制S型函数的附加参数。
- oversample
设置过采样因子。
36.56.1 命令
此滤镜支持以上所有选项作为命令.
36.57 aspectralstats
显示音频通道的频域统计信息。 统计数据被计算并存储为每个音频通道和每个音频帧的元数据。
它接受以下选项:
- 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 asr
自动语音识别
此滤镜使用PocketSphinx进行语音识别。要启用此滤镜的编译,您需要配置FFmpeg并添加--enable-pocketsphinx
.
它接受以下选项:
- rate
设置输入音频的采样率。默认值是
16000
。 这需要与语音模型匹配,否则结果会很差。- hmm
设置包含声学模型文件的字典。
- dict
设置发音字典。
- lm
设置语言模型文件。
- lmctl
设置语言模型集。
- lmname
设置要使用的语言模型。
- logfn
设置日志消息的输出。
此滤镜将识别的语音导出为帧元数据lavfi.asr.text
.
36.59 astats
显示音频通道的时域统计信息。 每个音频通道的统计数据被计算并显示, 如果适用,还会给出整体数值。
它接受以下选项:
- length
用于峰值和谷值RMS测量的短时间窗口长度(以秒为单位)。 默认值是
0.05
(50毫秒)。允许范围是[0 - 10]
.- metadata
-
设置元数据注入。所有的元数据键都以
lavfi.astats.X
为前缀, 其中X
是从1开始的通道号或者字符串Overall
。默认是禁用。每个通道的可用键是:位深 峰度因子 直流偏移 动态范围 熵 平滑因子 最大差异 最大电平 平均差异 最小差异 最小电平 噪声底 噪声底计数 无穷数个数 非数字个数 非正规数个数 峰值计数 绝对峰值计数 峰值电平 均方根差异 均方根峰值 均方根谷值 零交叉数 零交叉率
整体的可用键是:
Overall
: 位深 直流偏移 熵 平滑因子 最大差异 最大电平 平均差异 最小差异 最小电平 噪声底 噪声底计数 无穷数个数 非数字个数 非正规数个数 样本总数 峰值计数 绝对峰值计数 峰值电平 均方根差异 均方根电平 均方根峰值 均方根谷值例如,完整键格式为
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
峰值与均方根级别的标准比率(注意:不是以分贝表示)
- 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) 差
- RMS_level
以分贝全尺度 (dBFS) 表示的标准均方根 (RMS) 级别
- RMS_peak
- RMS_trough
在短时间窗口内测量的 RMS 级别的峰值和谷值,单位为分贝全尺度 (dBFS)
- Zero crossings
波形与零轴平面交叉点的数量
- Zero crossings rate
零交叉速率和音频样本数量
36.60 asubboost
增强低音频率。
过滤器接受以下选项:
- 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 asubcut
切除低音频率。
此过滤器允许设置自定义的、更陡的滚降率比高通过滤器,并因此能够在停止带中更多地衰减频率内容。
过滤器接受以下选项:
- cutoff
设置截止频率,以赫兹为单位。允许范围是2到200。默认值为20。
- order
设置过滤器阶数。可用值是3到20。默认值为10。
- level
设置输入增益值。允许范围是0到1。默认值为1。
36.61.1 命令
此过滤器支持上述所有选项作为命令.
36.62 asupercut
切除高频率。
过滤器接受以下选项:
- cutoff
设置截止频率,以赫兹为单位。允许范围是20000到192000。默认值为20000。
- order
设置过滤器阶数。可用值是3到20。默认值为10。
- level
设置输入增益值。允许范围是0到1。默认值为1。
36.62.1 命令
此过滤器支持上述所有选项作为命令.
36.63 asuperpass
应用高阶巴特沃斯带通滤波器。
过滤器接受以下选项:
- centerf
设置中心频率,以赫兹为单位。允许范围是2到999999。默认值为1000。
- order
设置过滤器阶数。可用值是4到20。默认值为4。
- qfactor
设置品质因数。允许范围是0.01到100。默认值为1。
- level
设置输入增益值。允许范围是0到2。默认值为1。
36.63.1 命令
此过滤器支持上述所有选项作为命令.
36.64 asuperstop
应用高阶巴特沃斯带阻滤波器。
过滤器接受以下选项:
- centerf
设置中心频率,以赫兹为单位。允许范围是2到999999。默认值为1000。
- order
设置过滤器阶数。可用值是4到20。默认值为4。
- qfactor
设置品质因数。允许范围是0.01到100。默认值为1。
- level
设置输入增益值。允许范围是0到2。默认值为1。
36.64.1 命令
此过滤器支持上述所有选项作为命令.
36.65 atempo
调整音频的速度。
过滤器仅接受一个参数,即音频速度。如果未指定,则过滤器将假定速度为标准的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以时间持续时间的格式表示;参见(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 带通
应用具有中心频率频率和(3dB 点)带宽的两极巴特沃斯带通滤波器。csg选项选择恒定裙带增益(峰值增益 = Q),而不是默认的恒定 0dB 峰值增益。 滤波器滚降率为每倍频程 6dB(每十倍频 20dB)。
过滤器接受以下选项:
- frequency, f
设置过滤器的中心频率。默认为
3000
.- csg
如果设置为 1,则恒定裙带增益。默认为 0。
- width_type, t
设置指定过滤器带宽的方法。
- h
赫兹
- 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, w
更改带宽。 命令的语法是:"宽带"
- mix, m
更改混合比例。 命令的语法是:"混合"
36.70 带拒绝
应用具有中心频率频率和(3dB 点)带宽宽带的两极巴特沃斯带拒绝滤波器。 滤波器滚降率为每倍频程 6dB(每十倍频 20dB)。
过滤器接受以下选项:
- frequency, f
设置滤波器的中心频率。默认值是
3000
.- width_type, t
设置用于指定滤波器带宽的方法。
- h
赫兹
- q
品质因数
- o
倍频程
- s
坡度
- k
千赫
- width, w
以宽度单位指定滤波器的带宽。
- 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.70.1 命令
此滤波器支持以下命令:
- frequency, f
更改带拒频率。 命令语法是:"频率"
- width_type, t
更改带拒宽度类型。 命令语法是:"宽度类型"
- width, w
更改带拒宽度。 命令语法是:"宽度"
- mix, m
更改带拒混合。 命令语法是:"混合"
36.71 低音,低架构
使用一个两极架滤波器提升或削减音频的低频 类似于标准Hi-Fi音调控制的响应。这也被称为架式均衡(EQ)。
滤波器接受以下选项:
- gain, g
在0赫兹处给予增益。其有效范围约为-20 (用于大削减)到+20(用于大提升)。 使用正增益时要注意削波。
- frequency, f
设置滤波器的中心频率,因此可以用于扩展或缩小需提升或削减的频宽。 默认值是
100
赫兹。- width_type, t
设置用于指定滤波器带宽的方法。
- h
赫兹
- 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.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
归一化二阶滤波器系数,默认情况下禁用。 启用它会将直流量的幅度响应归一化到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
截止频率(单位:Hz)。
- feed
馈通电平(单位:Hz)。
36.74 通道映射
将输入通道重新映射到新的位置。
它接受以下参数:
- map
将输入通道映射到输出通道。参数是一个用‘|’分隔的映射列表,每个映射的形式为
输入通道-输出通道
或输入通道
的形式。输入通道可以是输入通道的名称(例如FL表示前左)或其在输入通道布局中的索引。输出通道是输出通道的名称或其在输出通道布局中的索引。如果输出通道未给出,则它隐式为一个索引,从零开始,每个映射递增1。混合不同类型的映射是不允许的,将导致解析错误。- channel_layout
输出流的通道布局。如果未指定,则过滤器将根据输出通道名称或映射数量进行猜测。猜测的布局不一定包含与映射顺序一致的通道。
如果没有映射,过滤器将隐式地将输入通道映射到输出通道,保留索引。
36.74.1 示例
- 例如,假设有一个5.1+下混的输入MOV文件,
ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
将从输入的下混通道创建一个标记为立体声的输出WAV文件。
- 修正一个以AAC本地通道顺序不正确编码的5.1 WAV文件
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
仅通过高音。
默认值为原始.
36.83 对话增强
增强立体声音频中的对话。
此过滤器接受立体声输入并生成环绕声(3.0声道)输出。 新生成的前方中心通道会增强原本存在于两个立体声声道中的语音对话。 此过滤器输出的前方左声道和右声道与立体声输入中提供的相同。
此过滤器接受以下选项:
- original
设置保持在前方中心通道输出中的原始中心因子。 允许范围为0到1。默认值为1。
- enhance
设置在前方中心通道输出中增强语音对话的因子。 允许范围为0到3。默认值为1。
- voice
设置语音检测因子。 允许范围为2到32。默认值为2。
36.83.1 命令
此过滤器支持上述所有选项作为命令.
36.84 动态范围计量
检测音频动态范围。
动态范围值(DR)为14及以上的音频通常具有很强的动态性。动态范围值在8到13之间的音频是过渡数据。 任何小于8的动态范围被认为动态性差并被高度压缩。
此过滤器接受以下选项:
- length
设置用于将音频分割为相等长度段的窗口长度(以秒为单位)。默认值为3秒。
36.85 动态音频正常化
动态音频正常化器。
此滤波器对输入音频应用一定增益,以使其峰值幅度达到目标水平(例如0 dBFS)。 然而,与更“简单”的正常化算法不同,动态音频正常化器会动态重新调整输入音频的增益因子。 这样,可以对音频的“静音”部分添加额外增益,同时避免“响亮”部分的失真或剪辑。 换句话说:动态音频正常化器会“平滑”静音和响亮部分的音量,将每个部分的音量都提高到相同的目标水平。 但是请注意,动态音频正常化器实现这一目标时不会应用“动态范围压缩”。它将保留每个音频部分的动态范围。
- framelen, f
设置帧长度(以毫秒为单位)。范围为10到8000毫秒。默认值为500毫秒。 动态音频正常化器以小块处理输入音频,被称为帧。这是必须的, 因为一个峰值幅动对单个样本值来说没有意义。相反,我们需要为连续序列的样本值确定峰值幅度。 动态音频正常化器使用默认的帧长度为500毫秒,这已被发现能带来大多数文件的良好效果。 该帧长度的确切设置,会根据个别输入文件的采样率自动确定。
- gausssize, g
设置高斯滤波器窗口大小。范围为3至301,必须为奇数。默认值为31。 动态音频正常化器的一个最重要的参数是
window size
高斯平滑滤波器的窗口大小。滤波器的窗口大小以帧为单位,围绕当前帧的中心进行设置。 为了简单起见,这必须是一个奇数。因此,默认值为31,包含当前帧,以及前15帧和后续15帧。 使用更大的窗口产生更强的平滑效果,从而更少增益变化,即较慢的增益调节。 相反,使用较小的窗口产生更弱的平滑效果,从而更大的增益变化,即较快的增益调节。 换句话说,您增加这个值,动态音频正常化器将更像一个“传统”正常化器。 相反,您降低此值,动态音频正常化器将更像一个动态范围压缩器。- peak, p
设置目标峰值。这指定为归一化音频输入的最大允许幅度水平。 此过滤器将尽可能接近目标峰值幅度,但同时也确保归一化信号从未超过峰值幅度。 帧的最大局部增益因子直接被目标峰值幅度规定。默认值为0.95,总体预留了5%的头间隙。 不建议超过此值。
- maxgain, m
设置最大增益因子。范围为1.0到100.0。默认值为10.0。 动态音频正常化器会根据每个输入帧确定可能的最大(局部)增益因子。 该增益因子不会导致剪辑或失真。局部最大增益因子由帧的最高幅度样本决定。 然而动态音频正常化器会通过一个预定的(全局)最大增益因子进一步限制局部最大增益因子。 这是为了避免“静音”或接近静音情况中的过大增益因子。 默认情况下,最大增益因子为10.0。
- targetrms, r
设置目标RMS值。范围为0.0至1.0。默认值为0.0 - 禁用。 默认情况下,动态音频正常化器执行“峰值”正常化。 这意味着每帧的最大局部增益因子仅由帧的最高幅度样本定义。 通过调整所有帧到固定RMS值,可以建立一致的感知响度。
- coupling, n
启用信道耦合。默认情况下已启用。 默认情况下,动态音频正常化器对所有信道应用相同的增益因子。 如果录音中不同频道的音量不均匀,可以禁用信道耦合。 此时,各信道的增益因子将独立计算,仅基于各信道的最高幅度样本。
- correctdc, c
启用直流偏差校正。默认情况下禁用。 音频信号应围绕零点居中。当均值显著偏离0.0时,被称为直流偏差。 动态音频正常化器提供可选的直流偏差校正。
- altboundary, b
启用备用边界模式。默认情况下禁用。 动态音频正常化器将问题处理边界帧位置的邻近问题假设处理为1.0增益因子, 实现平滑的淡入淡出效果。
- compress, s
设置压缩因子。范围为0.0到30.0。默认值为0.0。 动态音频正常化器不会应用“传统”压缩。 输入帧将会按指定门限剪略幅度超限样本,同时确保局部幅度保留1.0范围。
- threshold, t
设置目标阈值。指定输入音频的最低允许幅度,该值将归一化。 默认值为0。
- channels, h
指定要过滤的信道,默认情况下过滤所有可用信道。
- overlap, o
指定帧的重叠。如果设置为0(默认)则不重叠。使用>0并<1值会使增益调整更平滑。
- curve, v
指定峰值计算表达式,用于计算帧应用的增益。帧的最大输出增益仍受到其他选项限制。
表达式可包含以下常量:
- ch
当前信道编号
- sn
当前样本编号
- nb_channels
信道数
- t
时间戳(秒)
- sr
采样率
- p
当前帧峰值
36.85.1 命令
此过滤器支持上述所有选项作为命令.
36.86 耳蜡处理
让音频在耳机上听起来更舒服。
此过滤器添加‘提示’到44.1kHz立体声(即音频CD格式)音频中, 使得在耳机上播放时,立体声图像从头部内部转移到头部前方。
移植自SoX。
36.87 均衡器
应用双极点峰值均衡(EQ)滤波器。通过此过滤器,可提高或降低指定频率及其周围的信号电平, 而所有其他频率保持不变。
为了产生复杂的均衡曲线,可以多次调用此过滤器,每次使用不同的中心频率。
此过滤器接受以下选项:
- frequency, f
设置过滤器的中心频率(单位Hz)。
- width_type, t
设置过滤器的带宽指定方法。
- h
Hz
- q
Q因子
- 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均衡。
过滤器接受以下选项:
- gain
设置增益曲线公式(单位:分贝)。公式可以包含以下变量:
- f
评估的频率
- sr
采样率
- ch
声道编号,当禁用多声道评估时为0
- chid
声道ID,参见libavutil/channel_layout.h,当禁用多声道评估时设置为第一个声道ID
- chs
声道数量
- chlayout
声道布局,参见libavutil/channel_layout.h
以及功能:
- gain_interpolate(f)
在频率f上基于gain_entry插值获取增益
- 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项连续的1阶导数纳特窗
- mnuttall3
最小化3项不连续纳特窗
- nuttall
4项连续的1阶导数纳特窗
- bnuttall
最小化4项不连续的纳特窗(布莱克曼-纳特窗)
- bharris
布莱克曼-哈里斯窗
- tukey
特基窗
- fixed
如果启用,使用固定数量的音频样本。这提高了使用较大延迟进行过滤时的速度。 默认禁用。
- multi
启用增益的多声道评估。默认禁用。
- zero_phase
通过减去时间戳启用零相位模式以补偿延迟。 默认禁用。
- scale
设置用于增益的比例。可接受的值有:
- linlin
线性频率,线性增益
- linlog
线性频率,对数增益(单位:分贝)(默认)
- loglin
对数频率(使用八度音阶形式,其中20 Hz为0),线性增益
- loglog
对数频率,对数增益
- dumpfile
设置适合gnuplot使用的转储文件。
- dumpscale
设置转储文件的比例。可接受的值与比例选项相同。 默认值是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
设置每秒的扫频次数(单位:赫兹)。范围为0.1到10。 默认值是0.5。
- shape
设置扫频的波形,可以是三角波或正弦波。 默认值是正弦波.
- phase
设置多通道的扫描波百分比偏移。范围从0到100。 默认值是25。
- interp
设置延迟线插值,线性或二次。 默认是线性.
36.91 哈斯
将哈斯效应应用于音频。
请注意,这主要适合应用在单声道信号上。 对单声道信号应用此滤镜会产生一些方向性并 扩展其立体声图像。
该滤镜接受以下选项:
- 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)数据。具有嵌入HDCD代码的16位PCM流将被扩展为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
即使PE未被信号标记,也始终扩展高于-3dBFS的峰值。
- analyze_mode
用单一音调替换音频并调整幅度以标记解码过程的某些特定方面。 可以将输出文件与原始文件一起加载到音频编辑器中以辅助分析。
analyze_mode=pe:force_pe=true
可用于查看所有高于PE级别的样本。模式是:
- ‘0, off’
禁用
- ‘1, lle’
每个样本的增益调整级别
- ‘2, pe’
发生峰值扩展的样本
- ‘3, cdt’
代码检测计时器活动的样本
- ‘4, tgm’
目标增益在通道之间不匹配的样本
36.93 耳机
应用头相关传递函数(HRTFs)以创建虚拟扬声器, 在用户周围进行双耳监听。 HRIR通过额外的流提供, 每个通道需要一个立体声输入流。
该滤镜接受以下选项:
- map
设置用于卷积的输入流映射。 参数是一个用'|'分隔的通道名称列表, 顺序是按它们作为滤镜的额外流提供的。 这也指定了输入流的数量。 输入流数量不得少于第一个流的通道数加1。
- gain
设置应用于音频的增益。值以dB表示。默认是0。
- type
设置处理类型。可以是时间或频率. 时间是在时间域处理音频,这很慢。频率是在频率域处理音频,这很快。 默认是频率.
- lfe
设置自定义增益用于LFE通道。值以dB表示。默认是0。
- size
设置将一次处理的帧大小(样本数)。 默认值是1024。允许范围是从1024到96000。
- hrir
设置HRIR流的格式。 默认值是立体声。替代值是多通道。 如果值被设置为立体声,则额外流的数量应大于或等于第一个输入流中的通道数。 此外,每个额外流应具有立体声通道数。 如果值被设置为多通道,则额外流的数量应恰好为1。 此外,额外流的输入通道数量应等于或大于第一个输入流通道数量的两倍。
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
赫兹
- q
品质因数
- o
倍频程
- s
斜率
- k
千赫兹
- width, w
以width_type单位指定滤波器的带宽。 仅适用于双极滤波器。 默认是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.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是输入流的从0开始的索引。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
(CAPS)库的C* Audio Plugin Suite
减少立体声效果: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响度标准化。包括动态和线性标准化模式。
支持单次通过(直播流、文件)和双次通过(文件)模式。
该算法可以设置目标综合响度、响度范围和最大真峰值。在动态模式中,为了准确检测真峰值,音频流将被升采样到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
必须全部被指定。目标响度范围不应低于源响度范围,综合响度的变化不应导致真峰值超出目标真峰值。如果这些条件中有任何未满足,则标准化模式将回退到动态。 选项为true
或false
。默认值为true
.- dual_mono
将单声道输入文件视为“双声道”。如果单声道文件在立体声音响系统上播放,其EBU R128测量值将在感知上不正确。 如果设置为
true
,此选项将对此效果进行补偿。 多声道输入文件不受此选项影响。 选项为true或false。默认值为false。- print_format
设置统计信息的打印格式。选项为summary、json或none。 默认值为none。
36.98 lowpass
应用一个3dB点频率的低通滤波器。 滤波器可以是单极或双极(默认)。 滤波器的滚降为每极每倍频程6dB(每极每十倍频程20dB)。
滤波器接受以下选项:
- frequency, f
以Hz设置频率。默认值为500。
- poles, p
设置极数。默认值为2。
- width_type, t
设置指定滤波器带宽的方法。
- h
Hz
- q
Q因子
- o
倍频
- s
斜率
- k
kHz
- width, w
以width_type单位指定滤波器带宽。 仅适用于双极滤波器。 默认值为0.707q,提供Butterworth响应。
- 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
此选项语法为: attack,decay,[attack,decay..] 软膝点 分频频率 [延迟 [初始音量 [增益]]] | attack,decay ... 各项的解释请参考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 通道重新映射示例
通道重新映射仅在以下情况下有效:
- 增益系数为零或一,
- 每个输出通道只有一个输入,
如果所有这些条件都满足,过滤器会通知用户(“检测到纯通道映射”),并使用优化的无损方法进行重新映射。
例如,如果您有一个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表示如果级别高于阈值4分贝,则减少后仅高于2分贝。 默认值为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
,其主要更为平滑。- level_sc
设置旁链增益。 默认值为1,范围在0.015625到64之间。
- mix
在输出中使用压缩信号的程度。 默认值为1,范围在0到1之间。
36.105.1 命令
此过滤器支持上述所有选项作为命令.
36.105.2 示例
- 完整的 ffmpeg 示例,使用2个音频输入,第一个输入将根据第二个输入的信号被压缩,随后合并压缩后的信号和第二个输入:
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
元数据键会在第一个时间戳等于或超出检测持续
时间的帧上设置,并包含静音开始的第一个帧的时间戳。
The lavfi.silence_duration
或lavfi.silence_duration.X
和lavfi.silence_end
或lavfi.silence_end.X
元数据键将在静音后的第一帧上设置。如果mono被启用,并且每个通道被分别评估,则会使用.X
后缀的键,并且X
对应通道编号。
该过滤器接受以下选项:
- noise, n
设置噪声容忍值。可以以dB为单位指定(如果在指定值后附加“dB”)或以幅度比指定。 默认值是-60dB,或0.001。
- duration, d
设置通知所需的静音持续时间(默认是2秒)。参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分了解接受的语法。
- mono, m
单独处理每个通道,而不是组合处理。默认情况下禁用。
36.107.1 示例
- 检测具有-50dB噪声容忍值的5秒静音:
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
此值用于指示是否应从音频开始修剪静音。值为0表示不应从开始修剪静音。 指定非零值时,它会修剪音频直到检测到非静音。通常,当从音频开头修剪静音时,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
设置应用于音频的增益。值以分贝表示。默认值为0。
- rotation
设置虚拟扬声器的旋转角度(单位:度)。默认值为0。
- elevation
设置虚拟扬声器的仰角(单位:度)。默认值为0。
- radius
设置扬声器与听者之间的距离(单位:米),使用近场HRTFs。默认值为1。
- type
设置处理类型。可以为time或freq. time在时间域处理音频,速度较慢。freq在频率域处理音频,速度较快。 默认值为freq.
- speakers
设置虚拟扬声器的自定义位置。该选项语法为: <CH> <AZIM> <ELEV>[|<CH> <AZIM> <ELEV>|...]。 每个虚拟扬声器由简短的频道名称、方位角和仰角(单位:度)描述。 每个虚拟扬声器描述由‘|’分隔。 例如,覆盖前左和前右频道的自定义位置使用: ’speakers=FL 45 15|FR 345 15’。 对于无法识别的频道名称的描述将被忽略。
- lfegain
设置LFE通道的自定义增益。值以分贝表示。默认值为0。
- framesize
设置自定义帧大小,以样本数量表示。默认值为1024。 允许范围为1024到96000。仅在选项‘type’ 设置为freq.
- normalize
所有IR在导入SOFA文件时是否应该归一化。 默认启用。
- interpolate
如果确切位置不匹配,是否应将最近的IR与邻近的IR进行插值。 默认禁用。
- minphase
加载SOFA文件时是否对所有IR进行最小相位处理。 默认禁用。
- anglestep
设置邻近搜索角度步长。 仅在选项interpolate启用时使用。
- radstep
设置邻近搜索半径步长。 仅在选项interpolate启用时使用。
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选项的解读。 启用时,任意半周期样本的局部峰值小于或等于threshold选项的值时将被扩展;否则将被压缩。
- 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
启用软剪裁。导致模拟失真而不是尖锐的数字0分贝剪裁。 默认情况下禁用。
- 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_in/balance_out选项的平衡模式。
可以是以下之一:
- ‘balance’
经典平衡模式。一次衰减一个声道。 增益最高可达1。
- ‘amplitude’
与上述经典模式类似,但增益最高可达2。
- ‘power’
等功率分布,范围从-6dB到+6dB。
36.111.1 命令
此过滤器支持所有以上选项作为命令.
36.111.2 示例
- 应用像卡拉OK效果:
stereotools=mlev=0.015625
- 将M/S信号转换为L/R:
"stereotools=mode=ms>lr"
36.112 立体声扩宽
此过滤器通过抑制两声道共有的信号并延迟左信号至右声道和 vice versa,增强立体声效果,从而扩宽立体声效果。
该过滤器接受以下选项:
- delay
左信号延迟到右声道和 vice versa 的时间(以毫秒为单位)。默认值为20毫秒。
- feedback
延迟信号到右声道和 vice versa 的增益量。提供的效果是左信号延迟到右输出,和 vice versa,产生扩宽效果。默认值为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.
参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的声道布局部分以获取所需的语法。
- chl_in
设置输入声道布局。默认值是立体声.
参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的声道布局部分以获取所需的语法。
- 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
设置滤波器的中心频率,因此可以用来扩展或减少要提升或削减的频率范围。 默认值是
3000
Hz。- width_type, t
设置指定滤波器带宽的方法。
- h
Hz
- q
品质因数
- o
倍频程
- s
斜率
- k
kHz
- 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
设置滤波器的中心频率,因此可以用来扩展或减少要提升或削减的频率范围。 默认值是
3000
Hz。- width_type, t
设置指定滤波器带宽的方法。
- h
Hz
- q
品质因数
- o
倍频程
- s
斜率
- k
kHz
- 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, w
更改高音宽度。 命令语法为:"宽度"
- gain, g
更改高音增益。 命令语法为:"增益"
- mix, m
更改高音混合。 命令语法为:"混合"
36.117 颤音
正弦幅度调制。
滤镜接受以下选项:
- f
调制频率以赫兹为单位。次谐波范围内的调制频率 (20 Hz或更低)将产生颤音效果。 此滤镜也可用于作为环形调制器,通过指定 高于20 Hz的调制频率。 范围为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 虚拟低音
应用音频虚拟低音滤镜。
此滤镜接受立体声输入并生成带LFE(2.1)通道输出的立体声。 新生成的LFE通道从立体声通道中增强了虚拟低音。 此滤镜输出的前左和前右通道保持与立体声输入中的一致。
滤镜接受以下选项:
- 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增益的预放大增益,以分贝为单位。
默认值为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’时,仅采样率和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分贝,即10^-2.7。
- 最大的样本为-4分贝,更准确地说,在-4分贝和-5分贝之间。
- 有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
传入音频缓冲区的采样格式。 可以是采样格式名称或其对应的来自枚举 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
将指示来源接受以44100Hz的采样率,分离的16位有符号立体声。 由于名称为“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滤镜)的来源。
此来源接受以下选项:
- 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
生成奇数阶希尔伯特变换 FIR 系数。
生成的流可用于afir过滤器以将信号的相位偏移 90 度。
这在许多矩阵编码方案和分析信号生成中使用。这一过程通常表示为乘以 i (或 j),即虚数单位。
该过滤器接受以下选项:
- sample_rate, s
设置采样率,默认值为 44100。
- taps, t
设置 FIR 滤波器的长度,默认值为 22051。
- nb_samples, n
设置每帧的样本数。
- win_func, w
设置生成 FIR 系数时使用的窗口函数。
37.10 sinc
生成 sinc 凯撒窗低通、高通、带通或带阻 FIR 系数。
生成的流可用于afir过滤器以过滤音频信号。
该过滤器接受以下选项:
- sample_rate, r
设置采样率,默认值为 44100。
- nb_samples, n
设置每帧的样本数。默认值为 1024。
- hp
设置高通截止频率。默认值为 0。
- lp
设置低通截止频率。默认值为 0。 如果高通频率低于低通频率且低通频率大于 0,则过滤器将创建带通滤波器系数, 否则会创建带阻滤波器系数。
- phase
设置滤波器相位响应。默认值为 50,允许范围为 0 到 100。
- beta
设置凯撒窗参数 beta。
- att
设置停止带衰减值。默认值为 120dB,允许范围为 40 到 180 dB。
- 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,1602
NTSC 图案: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中,量化参数(QP)从-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(高级字幕)文件。
此滤镜除了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
设置滤镜用于平均的算法变体。默认值为
p
并行。 也可设置为s
串行。并行可能比串行更快,但反之永远不成立。 并行将在检测到第一个大于阈值的变化时提前中止,而串行会继续处理帧的其它部分,如果它们等于或低于阈值。
- 0s
- 1s
- 2s
为第一平面、第二平面或第三平面设置sigma值。默认值为32767。 有效范围为0到32767。 此选项控制每个像素在定义的半径内的权重。 默认值表示每个像素具有相同权重。 设置此选项为0 effectively禁用过滤。
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
设置高斯函数的标准差以计算空间权重。 允许范围为0到512。默认值为0.1。
- sigmaR
设置高斯函数的标准差以计算范围权重。 允许范围为0到1。默认值为0.1。
- planes
设置要过滤的平面。默认仅过滤第一个平面。
39.10.1 命令
此滤镜支持上述所有选项作为命令.
39.11 位平面噪声
显示并测量位平面噪声。
该滤镜可接受以下选项:
- bitplane
设置要分析的平面。默认值为
1
.- filter
从
bitplane
设置的值中过滤出噪声像素。 默认禁用。
39.12 黑检测
检测几乎完全黑的视频间隔。可以用于检测章节转换、广告或无效录制。
该滤镜将其检测分析输出到日志和帧元数据。
如果找到至少指定最小持续时间的黑色片段,
将在日志级别info
中打印开始和结束时间戳以及持续时间的行。
此外,每帧会以日志级别debug
打印一行,显示该帧检测到的黑色量。
该滤镜还在黑色片段的第一个帧添加元数据键lavfi.black_start
,并在黑色片段结束后的第一个帧添加元数据键lavfi.black_end
。
值为帧的时间戳。无论指定的最小持续时间是多少,都会添加此元数据。
该滤镜可接受以下选项:
- black_min_duration, d
设置检测到的最小黑色持续时间(以秒为单位)。必须为非负浮点数。
默认值为2.0。
- picture_black_ratio_th, pic_th
设置将图像视为“黑色”的阈值。 表示比率的最小值:
nb_black_pixels / nb_pixels
使得图像被认为是黑色的像素比率。 默认值为0.98。
- pixel_black_th, pix_th
设置将像素视为“黑色”的阈值。
该阈值表示将像素视为“黑色”的最大像素亮度值。 提供的值根据以下公式进行缩放:
absolute_threshold = luma_minimum_value + pixel_black_th * luma_range_size
luma_range_size和luma_minimum_value取决于输入视频格式,范围为YUV全范围格式的[0-255]和 YUV非全范围格式的[16-235]。
默认值为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
为特定的像素分量或所有像素分量设置混合模式, 对于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
为特定的像素分量或所有像素分量设置混合不透明度, 对于all_opacity。仅在与像素分量混合模式结合使用时有效。
- c0_expr
- c1_expr
- c2_expr
- c3_expr
- all_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 块检测
确定帧的块效应而不改变输入帧。
基于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 模糊检测
确定帧的模糊程度而不改变输入帧。
基于Marziliano, Pina等人的研究:“一种无参考感知模糊度量”。 支持基于块的简化处理。
滤镜接受以下选项:
- low
- high
设置由Canny阈值算法使用的低阈值和高阈值。
高阈值选择“强”边缘像素,随后通过8连通性与低阈值选择的“弱”边缘像素相连接。
低和高阈值必须选择在范围 [0,1]内,且低应小于或等于高.
的值。 默认值为低为
20/255
,默认值为高为50/255
.- radius
定义在每个边缘像素周围搜索局部最大值的半径。
- block_pct
仅对最显著的块(以百分比表示)确定模糊度。
- block_width
为宽度为block_width的块确定模糊度。如果设置为小于1的值,无论block_height.
- block_height
的值如何,将整个图像作为一个块处理。为高度为的块确定模糊度。如果设置为小于1的值,无论block_width.
- planes
的值如何,将整个图像作为一个块处理。
设置要过滤的平面。默认仅为第一个平面。
- 为80%最显著的32x32块确定模糊度:
blurdetect=block_width=32:block_height=32:block_pct=80
39.17 bm3d
使用块匹配3D算法对帧进行去噪。
滤镜接受以下选项。
- sigma
设置去噪强度。默认值为1。 允许范围为0到999.9。 去噪算法对sigma非常敏感,因此需根据源调整。
- block
设置局部补丁大小。这会设置2D的尺寸。
- 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
如果启用,过滤器将使用第二个流进行块匹配。 默认情况下,对
basic
值为estim选项时禁用, 如果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
对输入视频应用箱型模糊算法。
它接受以下参数:
- 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 将禁用该效果。
39.18.1 例子
- 应用盒状模糊滤镜,设置亮度、色度和 alpha 半径
为 2:
boxblur=luma_radius=2:luma_power=1 boxblur=2:1
- 将亮度半径设置为 2,alpha 和色度半径设置为 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
设置要滤镜的平面。默认值为滤镜所有 平面,除 alpha 平面外。
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 分量之间的最大允许差异设置更细的控制。 默认值为 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 + alpha*ra
过滤器接受以下选项:
- rr
- rg
- rb
- ra
调整输入红、绿、蓝和 alpha 通道对输出红色通道的贡献。 默认值是
1
用于rr,以及0
用于rg, rb和ra.- gr
- gg
- gb
- ga
调整输入红、绿、蓝和 alpha 通道对输出绿色通道的贡献。 默认值是
1
用于gg,以及0
用于gr, gb和ga.- br
- bg
- bb
- ba
调整输入红、绿、蓝和 alpha 通道对输出蓝色通道的贡献。 默认值是
1
用于bb,以及0
用于br, bg和ba.- ar
- ag
- ab
- aa
调整输入红、绿、蓝和 alpha 通道对输出 alpha 通道的贡献。 默认值是
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 颜色空间颜色键控。 此过滤器对 8 位 RGB 格式的帧操作,通过将每个像素的 alpha 分量在关键颜色的相似半径内设置为 0。超出相似半径的像素 alpha 值取决于混合选项的值。
过滤器接受以下选项:
- color
设置 alpha 将被设置为 0(完全透明)的颜色。 参见(ffmpeg-utils)“颜色”部分,位于 ffmpeg-utils 手册中。 默认值是
black
.- similarity
设置与关键颜色的半径,半径内的其他颜色也具有完全透明。 计算的距离与关键颜色的 RGB 值和像素颜色之间 3D 空间的单位分数距离相关。范围是 0.01 到 1.0。0.01 在非常小的半径内与确切的关键颜色匹配,而 1.0 匹配所有内容。 默认值是
0.01
.- blend
设置超出相似半径的像素 alpha 值的计算方式。 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’
BT.2020用于10位内容
- ‘bt2020-12’
BT.2020用于12位内容
- 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’
identity白点适应(即无白点适应)
- iall
一次覆盖所有输入属性。接受的值与all.
- ispace
覆盖输入颜色空间。接受的值与space.
- iprimaries
覆盖输入颜色基准。接受的值与primaries.
- itrc
覆盖输入传递特性。接受的值与trc.
- irange
覆盖输入颜色范围。接受的值与range.
此滤镜将传递特性、色彩空间和颜色基准转换为指定的用户值。如果未指定输出值,则根据“all”属性设置为默认值。如果该属性也未指定,滤镜将记录错误。输出颜色范围和格式默认为与输入颜色范围和格式相同。输入的传递特性、色彩空间、颜色基准和颜色范围应设置在输入数据上。如果这些属性中的任何一个丢失,滤镜将记录错误并且不会执行转换。
例如,要将输入转换为SMPTE-240M,可以使用以下命令:
colorspace=smpte240m
39.39 色温
调整视频中的色温以模拟环境色温的变化。
滤镜接受以下选项:
- temperature
设置温度(单位:开尔文)。允许范围为1000到40000。 默认值为6500K。
- 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 卷积实现
在频域中使用第二个流作为脉冲对视频流应用2D卷积。
滤镜接受以下选项:
- planes
设置要处理的平面。
- impulse
设置要处理的脉冲视频帧,可以是第一个或所有。 默认值为全部.
Theconvolve
过滤器也支持帧同步选项。
39.42 复制
将输入视频源不变地复制到输出。这主要用于测试目的。
39.43 coreimage
使用苹果的CoreImage API在OSX上进行GPU视频滤镜处理。
硬件加速基于OpenGL上下文。通常,这意味着由视频硬件处理。然而,存在基于软件的OpenGL实现,这意味着不能保证硬件处理。这取决于相关的OSX。
苹果提供了许多滤镜和图像生成器,具有多种多样的选项。滤镜必须通过其名称及选项进行引用。
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到HOST的传输,从而实现快速处理复杂的滤镜链。 当前,仅支持没有输入(生成器)或恰好一个输入(滤镜)图像和一个输出图像的滤镜。此外,过渡滤镜尚未如预期般可用。
某些滤镜生成带额外填充的输出图像,这取决于相关滤镜内核。填充会自动移除,以确保滤镜输出的大小与输入图像相同。
对于图像生成器,输出图像的大小由滤镜链的前一个输出图像或整个滤镜链的输入图像决定。生成器不使用该图像的像素信息来生成其输出。然而,生成的输出将与该图像混合,从而部分或完全覆盖输出图像。
可以使用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主页的二维码,给出完整且转义的命令行,用于苹果的标准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 crop
裁剪输入视频至给定尺寸。
它接受以下参数:
- 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。
参数out_w, out_h, x, y是包含以下常量的表达式:
- x
- y
x和y的计算值。它们会对每个新帧进行评估。. They are evaluated for each new frame.
- 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是2vsub是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)
- 根据y的值设置x:
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 DCT去噪
使用 2D DCT(频域过滤)对帧去噪。
此过滤器不适用于实时操作。
该过滤器接受以下选项:
- sigma, s
设置噪声 sigma 常量。
这个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轴块大小。更大的块可以更好地抑制噪声,但对小动作的检测效果较差。必须是2的幂数。默认是
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的整数。常用值为:
- ‘4’
如果原始帧是从24fps电影隔行扫描到30fps(电影到NTSC)。
- ‘5’
如果原始帧是从25fps电影隔行扫描到30fps(PAL到NTSC)。
- ‘20’
如果两者的混合。
默认值是‘4’.
39.61 去Logo
通过简单的周围像素插值来抑制电视台的Logo。只需设置一个覆盖Logo的矩形,观看其消失 (有时会出现更难看的东西 - 这取决于具体情况)。
可接受以下参数:
- x
- y
指定Logo左上角的坐标。必须指定。
- w
- h
指定要清除的Logo的宽度和高度。必须指定。
- 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的C语言库(见https://www.tensorflow.org/install/lang_c)并用以下命令配置FFmpeg:
--enable-libtensorflow
- model
设置指定网络架构及其参数的模型文件的路径。 请注意,不同的后端使用不同的文件格式。TensorFlow仅能够加载其格式的文件。
要获得完整功能(如异步执行),请使用DNN处理滤镜。
39.63 去抖动
尝试修正水平和/或垂直方向的小幅移动。 此滤镜有助于移除因手持相机、撞到三脚架、乘坐交通工具等造成的相机抖动。
滤镜接受以下选项:
- x
- y
- w
- h
指定一个矩形区域,以限制运动矢量的搜索范围。 如果需要,可以将运动矢量的搜索限制在帧的矩形区域内,该区域由其左上角坐标、宽度 和高度定义。这些参数的意义与绘制框滤镜相同,可用于可视化边框的位置。
当帧内对象的同时移动可能被运动矢量搜索误以为相机运动时,这非常有用。
如果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 的名称(通常为 'background'), 第二行为标签 ID 1 的名称等等。 如果未提供标签文件,标签 ID 将视为名称。
- backend_configs
设置传递到后端的配置。若想采用异步执行,请设置 async(默认设置)。如果后端不支持异步,则回滚到同步执行。
39.70 dnn处理
使用深度神经网络进行图像处理。它与另一个滤镜配合使用,将帧的像素格式转换为 dnn 网络所需的格式。
此滤镜接受以下选项:
- dnn_backend
指定使用哪个 DNN 后端来加载和执行模型。此选项接受以下值:
- ‘tensorflow’
TensorFlow 后端。启用此后端需要安装 TensorFlow 的 C 库(参见https://www.tensorflow.org/install/lang_c)并使用以下配置 FFmpeg。
--enable-libtensorflow
- ‘openvino’
OpenVINO 后端。启用此后端需要构建并安装 OpenVINO 的 C 库(参见https://github.com/openvinotoolkit/openvino/blob/master/build-instruction.md)并使用以下配置 FFmpeg。
--enable-libopenvino
(如果头文件和库未安装到系统路径中,可能需要使用 –extra-cflags=-I... –extra-ldflags=-L...)- ‘torch’
Libtorch 后端。启用此后端需要构建并安装 Libtroch 的 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
适用于输入具有alpha通道的情况。值为
1
时,绘制的框像素将覆盖视频的颜色和alpha像素。 默认值为0
,即将框与输入合成,同时保留视频的alpha通道。
以下是x, y, w和h和t参数的表达式中 g包含的常量:
- 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中的检测边界框数据,可以将框源设置为side_data_detection_bboxes。
如果box_source被设置,x, y, 宽度和高度将被忽略, 但仍使用检测边界框side data中的框数据。所以如果您不确定框源,请不要使用此参数。
- 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
- 绘制一个透明度为50%的白色3x3网格:
drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5
39.73.2 命令
此滤镜支持与选项相同的命令。 命令接受与对应选项相同的语法。
如果指定的表达式无效,它将保持当前值。
39.74 绘制文本
使用 libfreetype 库在视频顶部绘制文本字符串或从指定文件中绘制文本。
要启用此滤镜的编译,您需要使用以下配置 FFmpeg:--enable-libfreetype
和--enable-libharfbuzz
。
要启用默认字体回退以及font选项,您需要用以下配置 FFmpeg:--enable-libfontconfig
。
要启用text_shaping选项,您需要使用以下配置 FFmpeg:--enable-libfribidi
.
39.74.1 语法
它接受以下参数:
- box
用于使用背景色围绕文本绘制框。 值必须为 1(启用)或 0(禁用)。 默认值为box为 0。
- boxborderw
设置围绕框绘制边框的宽度,使用boxcolor。 该值必须使用以下格式之一指定:
-
boxborderw=10
设置所有边框宽度为 10 -
boxborderw=10|20
设置顶部和底部边框宽度为 10,左右边框宽度为 20 -
boxborderw=10|20|30
设置顶部边框宽度为 10,底部边框宽度为 30,左右边框宽度为 20 -
boxborderw=10|20|30|40
设置顶部宽度为 10,右侧宽度为 20,底部宽度为 30,左侧宽度为 40
默认值为boxborderw是"0"。
-
- boxcolor
用于绘制文本框的颜色。有关此选项的语法,请查看ffmpeg-utils 手册中的"颜色"部分.
默认值为框颜色是 "白色"。
- line_spacing
设置以像素为单位的行间距。默认值为行间距是 0。
- text_align
设置文本相对于框边界的垂直和水平对齐方式。 该值是一个标志的组合,其中一个用于垂直对齐(T=顶端,M=中间,B=底端),另一个用于水平对齐(L=左对齐,C=居中对齐,R=右对齐)。 请注意,制表符仅在左对齐时受支持。
- y_align
指定y值的参考位置。可能的值有:
-
text
第一个文本行最高字形的顶部放置在y -
baseline
第一个文本行的基线放置在y -
font
第一个文本行的基线放置在y加上字体度量中定义的上升量(以像素为单位)。
默认值为y_align- 为了向后兼容是"text"。
-
- borderw
设置围绕文本绘制的边框的宽度,使用边框颜色。 默认值为边框宽度是 0。
- bordercolor
设置用于绘制文本边框的颜色。有关此选项的语法,请参阅(ffmpeg-utils)"颜色"部分,位于ffmpeg-utils手册中.
默认值为边框颜色是 "黑色"。
- expansion
选择文本如何扩展。可以是
none
,strftime
(已废弃) 或normal
(默认)。详见文本扩展部分以了解详细信息。- basetime
设置计时的开始时间。值以微秒为单位。仅在已废弃的
strftime
扩展模式下应用。如需在常规扩展模式下模拟,请使用pts
函数,提供以秒为单位的开始时间作为第二个参数。- fix_bounds
如果为真,检查并修正文本坐标以避免裁剪。
- fontcolor
用于绘制字体的颜色。有关此选项的语法,请参阅(ffmpeg-utils)"颜色"部分,位于ffmpeg-utils手册中.
默认值为字体颜色是 "黑色"。
- fontcolor_expr
字符串与文本的扩展方式相同,以获得动态字体颜色值。默认情况下,此选项为空并未处理。当此选项设置时,会覆盖字体颜色选项。
- font
用于绘制文本的字体家族。默认是 Sans。
- fontfile
用于绘制文本的字体文件。路径必须包含在内。 如果禁用 fontconfig 支持,此参数是强制性的。
- alpha
以应用 alpha 混合方式绘制文本。值可以是 0.0 和 1.0 之间的数字。 表达式还接受相同的变量x, y。 默认值是 1。 详见字体颜色表达式.
- fontsize
用于绘制文本的字体大小。 默认值为字体大小是 16。
- text_shaping
如果设置为 1,在绘制文本前尝试对其进行整形(例如,反转从右到左文本的顺序并联结阿拉伯字符)。 否则,只是按给定的方式直接绘制文本。 默认值为 1(如果支持)。
- ft_load_flags
用于加载字体的标志。
标志与 libfreetype 支持的相应标志相对应,并且是以下值的组合:
- 默认
- 无缩放
- 无提示
- 渲染
- 无位图
- 垂直布局
- 强制自动提示
- 裁剪位图
- 严格
- 忽略全局预进宽
- 无递归
- 忽略变换
- 单色
- 线性设计
- 无自动提示
默认值是"默认"。
欲了解更多信息,请查阅 FT_LOAD_* libfreetype 标志的文档。
- shadowcolor
用于绘制文本阴影的颜色。有关此选项的语法,请参阅(ffmpeg-utils)"颜色"部分,位于 ffmpeg-utils 手册中.
默认值为阴影颜色是 "黑色"。
- boxw
设置围绕文本绘制的框的宽度。 默认值为框宽是根据文本宽度自动计算的。
- boxh
设置围绕文本绘制的框的高度。 默认值为框高是根据文本高度自动计算的。
- shadowx
- shadowy
文本阴影相对于文本位置的 x 和 y 偏移量。它们可以是正值或负值。 默认值均为 "0"。
- start_number
n/frame_num 变量的起始帧号。默认值为 "0"。
- tabsize
用于渲染制表符的空格数大小。 默认值为 4。
- timecode
设置初始时间码表示,格式为 "hh:mm:ss[:;.]ff"。 可以与 text 参数一起使用或单独使用。时间码速率选项必须指定。
- timecode_rate, rate, r
设置时间码帧速率(仅限时间码)。值将四舍五入为最接近的整数。最小值是 "1"。 时间码支持 30 和 60 帧速率的丢帧时间码。
- tc24hmax
如果设置为 1,时间码选项的输出将在 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
输入显示宽高比,与(w / h) * sar
- hsub
- vsub
水平和垂直色度子抽样值。例如,对于像素格式"yuv422p",hsub是2,vsub是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
,则过滤器会识别strftime
C函数所接受的序列,并根据提供的文本进行扩展。请查看strftime
的文档。此功能已被替代为使用normal
扩展,以及gmtime
或localtime
扩展函数。
如果expansion设置为none
,文本将以原样打印。
如果expansion设置为normal
(这是默认设置),则使用以下扩展机制。
反斜杠字符‘\’,后面跟随任何字符,总是扩展为第二个字符。
类似于%{...}
的序列会被扩展。大括号之间的文本是一个函数名,可能后跟参数,以‘:’分隔。如果参数包含特殊字符或分隔符(‘:’或‘}’),它们需要进行转义。
注意,它们可能需要在过滤器参数字符串中的值、过滤器图描述中的过滤器参数,甚至shell中进行最多四层转义。使用带有text选项的文本文件可以避免这些问题。textfile以下函数可用:
The following functions are available:
expr, e
表达式求值结果。
它必须带有一个参数,用于指定需要求值的表达式,该表达式接受与x和和值。注意,并非所有常量都应该使用,例如在评估表达式时,文本大小是未知的,因此常量text_w和text_h将具有未定义的值。
expr_int_format, eif
评估表达式的值并以格式化整数输出。
第一个参数是要评估的表达式,与expr函数一样。 第二个参数指定输出格式。允许的值是‘x’, ‘X’, ‘d’和‘u’。它们的处理方式与
printf
函数完全相同。 第三个参数是可选的,用于设置输出占用的位置数。 它可以用于从左侧添加零填充。gmtime
表达滤镜运行时间的UTC时间。 它可以接受一个参数:一个
strftime
C函数格式字符串。 格式字符串扩展支持变量%[1-6]N,它以可选指定的位数打印秒的分数。localtime
表达滤镜运行时间的本地时区时间。 它可以接受一个参数:一个
strftime
C函数格式字符串。 格式字符串扩展支持变量%[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
,则可以提供第三个参数:一个strftime
C函数格式字符串。 默认情况下,YYYY-MM-DD HH:MM:SS格式将被使用。
39.74.3 命令
该滤镜支持通过命令改变参数:
- reinit
更改现有滤镜参数。
参数的语法与调用滤镜时相同,例如
fontsize=56:fontcolor=green:text='Hello World'
完整的滤镜调用将是这样的:
sendcmd=c='56.0 drawtext reinit fontsize=56\:fontcolor=green\:text=Hello\\ World'
如果整个参数不能被解析或应用为有效值,那么滤镜将继续使用其现有参数。
以下选项也支持作为命令:
- x
- y
- 透明度
- 字体大小
- 字体颜色
- 框颜色
- 边框颜色
- 阴影颜色
- 框
- 框宽度
- 框高度
- 框边框宽度
- 行间距
- 文本对齐
- 阴影x轴
- 阴影y轴
- 边框宽度
39.74.4 示例
- 使用FreeSerif字体绘制“测试文本”,使用默认值作为可选参数。
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
- 使用FreeSerif字体,大小为24,在x=100和y=50的位置(从屏幕左上角计算)绘制‘测试文本’,文本为黄色,周围有一个红色的框。文本和框的透明度均为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"
- 每三秒显示一秒的文本:
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'
- 绘制“测试文本”并根据视频高度设置字体大小。
drawtext="text='Test Text': fontsize=h/30: x=(w-text_w)/2: y=(h-text_h*2)"
- 打印实时编码的日期(参见
strftime
C函数的文档):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
在量化计算中包括 alpha 值。可以创建调色盘化的输出图像 (例如 PNG8),实现多次 alpha 平滑混合。
39.77 熵
测量视频帧颜色通道直方图的灰度熵。
它接受以下参数:
- mode
可以是normal或diff。默认是normal.
diff模式测量直方图的增量值的熵,即相邻直方图值的绝对差。
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
指定使用的插值方式。默认是四点插值。接受以下值之一:
- 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,仅对存在于输入中的透明通道应用渐变。 默认值为0。
- start_time, st
确保渐变效果的开始帧的时间戳(以秒为单位)。如果同时指定了开始帧和开始时间,则渐变将在两者中较晚的一个开始。 默认值为0。
- duration, d
渐变效果的持续时间(以秒为单位)。在渐入效果结束时,输出视频与输入视频具有相同强度;在渐出转换结束时,输出视频将填充为选定的color。 如果同时指定了持续时间和帧数,则使用持续时间。默认值为0(默认使用帧数)。
- 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帧的视频渐入透明度:
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 示例
- 仅模糊视频帧左上矩形部分,大小为100x100,使用gblur滤镜。
[in][blurin]feedback=x=0:y=0:w=100:h=100[out][blurout];[blurout]gblur=8[blurin]
- 在视频帧左上部分绘制一个黑色框,大小为100x100,使用drawbox滤镜。
[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
:
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
基于它。尽管语义和使用非常接近,其行为和选项名称可能有所不同。
The decimate滤镜目前仅适用于固定帧率输入。
如果您的输入具有混合电影转码(30fps)和渐进内容,例如较低帧率24fps,请使用以下
滤镜链以生成必要的固定帧率流:dejudder,fps=30000/1001,fieldmatch,decimate
.
该滤镜接受以下选项:
- order
指定输入流的假定场序。可用值是:
- ‘auto’
自动检测场序(使用FFmpeg的内部场序值)。
- ‘bff’
假定底部场优先。
- ‘tff’
假定顶部场优先。
请注意,有时建议不要相信流通告的场序。
默认值为auto.
- mode
设置匹配模式或策略。pc模式是最安全的,因为它不会因重复帧而在可能的情况下造成卡顿,但如果有错误的编辑或混合场,则可能会输出梳状帧,而实际上可能存在好的匹配。另一方面,pcn_ub模式在创建卡顿方面风险最大,但几乎总能找到一个好的帧。如果是其他值,它们都介于上述两者之间。pc和pcn_ub在造成卡顿和重复帧的风险以及在糟糕编辑、孤立场、混合场等情况下找到好匹配之间。
有关 p/c/n/u/b 的更多详细信息,请参阅p/c/n/u/b 的含义章节。
可用值为:
- ‘pc’
2 路匹配 (p/c)
- ‘pc_n’
2 路匹配,仍然梳状则尝试第 3 次匹配 (p/c + n)
- ‘pc_u’
2 路匹配,仍然梳状则按相同顺序尝试第 3 次匹配 (p/c + u)
- ‘pc_n_ub’
2 路匹配,仍然梳状则尝试第 3 次匹配,仍然梳状则尝试第 4/5 次匹配 (p/c + n + u/b)
- ‘pcn’
3 路匹配 (p/c/n)
- ‘pcn_ub’
3 路匹配,最初的 3 次匹配都检测到梳状,则尝试第 4/5 次匹配 (p/c/n + u/b)
括号中表示为该模式要使用的匹配方式(假定order=tff(以及field开启自动或顶).
速度方面pc模式是速度最快的,pcn_ub是最慢的。
默认值为pc_n.
- ppsrc
将主输入流标记为预处理输入,并启用辅助输入流作为干净来源以选择场。有关详细信息,请参见滤镜介绍。它与 VFM/TFM 中的clip2功能相似。
默认值为
0
(禁用)。- field
设置匹配的场。建议将其设置为与order相同的值,除非使用该设置时出现匹配失败。在某些情况下,更改用于匹配的场可以对匹配性能产生重大影响。可用值为:
- ‘auto’
自动(与order).
- ‘bottom’
从底部场匹配。
- ‘top’
从顶部场匹配。
默认值为自动.
- 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不为无,
fieldmatch
时,将会根据匹配的梳状得分来决定最终的匹配结果。可用值为:- ‘none’
不根据梳状得分进行最终匹配。
- ‘sc’
仅在检测到场景变换时使用梳状得分。
- ‘full’
始终使用梳状得分。
默认值为sc.
- combdbg
强制
fieldmatch
计算某些匹配的梳状指标并打印它们。此设置在 TFM/VFM 中被称为micout。可用值为:- ‘none’
不强制计算。
- ‘pcn’
强制 p/c/n 计算。
- ‘pcnub’
强制 p/c/n/u/b 计算。
默认值为无.
- cthresh
这是用于梳状帧检测的区域梳状阈值。这基本上控制梳状帧检测中梳状效果的“强度”或“可见性”。较大的值意味着必须更明显的梳状效果,较小的值意味着不那么明显或强烈的梳状效果仍然可以被检测。有效范围为
-1
(每个像素都会被检测为梳状) 到255
(所有像素都不会被检测为梳状)。这基本上是像素的差值设置。好的范围是[8, 12]
.默认值为
9
.- chroma
设置是否在梳状帧决策中考虑色度。仅当源存在色度问题(如彩虹效应等)并导致使用色度启用时的梳状帧检测出现问题时禁用此功能。实际上,使用chroma=0通常更可靠,除非源仅存在色度梳状的情况。
默认值为
0
.- blockx
- blocky
分别设置用于梳状帧检测的窗口在 x 轴和 y 轴上的大小。这与combpel像素要求在检测为梳状后,设置为梳状帧的区域大小有关。有关更多信息,请参阅combpel参数描述。可能的值为从 4 到 512 的任何 2 的整数次幂。
默认值为
16
.- combpel
在帧的任何blocky乘以blockx大小块内检测到梳状像素的数量,以决定该帧是否为梳状帧。虽然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
这些数字对应于相关字段的渐进帧。这里,第一个和第二个帧是渐进帧,第三个和第四个帧是混合帧,依此类推。
当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
作为字段匹配的结果,我们可以看到一些帧被重复了。要执行完整的逆拉伸操作,您需要在此操作后使用一种抽取滤镜。例如,参见抽取滤镜。
采用从顶部字段匹配的相同操作(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,底部: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素材(通常是底部场优先)时非常有用。
例如:
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
为固定或淡化模式中的像素设置颜色。默认是black.
39.92.1 命令
此滤镜支持与选项相同的命令。命令接受与对应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.93 find_rect
在输入视频中找到一个矩形对象。
要搜索的对象必须指定为使用object选项定义的灰度图像(gray8)。
对于每个可能的匹配,都将计算一个分数。如果分数达到指定的阈值,则会认为找到了对象。
如果输入视频包含多个对象实例,滤镜将只找到其中的一个。
当对象被找到时,在匹配的帧中会设置以下元数据条目:
- 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
mipmaps数量,默认为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
所需的输出帧率。它接受包含以下常量的表达式:
- ‘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 帧打包
将两个不同的视频流打包成一个立体视频,在支持的编解码器上设置适当的元数据。这两视图需要具有相同的尺寸和帧率,当较短的视频结束时处理将停止。请注意,您可以方便地调整视图属性使用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 帧率调整
通过从源帧插入新的视频输出帧来改变帧率。
此过滤器设计为无法正确处理交错视频。如果您希望更改交错视频的帧率,则需要在使用此过滤器之前进行去交错,并在使用此过滤器之后重新交错。
以下是接受选项的描述。
- fps
指定输出每秒的帧数。此选项也可以单独指定为一个值。默认值为
50
.- interp_start
指定一个范围的开始,在该范围内输出帧将通过两帧的线性插值创建。范围为[
0
-255
],默认值为15
.- interp_end
指定一个范围的结束,在该范围内输出帧将通过两帧的线性插值创建。范围为[
0
-255
],默认值为240
.- scene
指定检测场景变化的级别,范围是0到100,用于表示一个新场景的可能性;较低的值表示当前帧引入新场景的可能性较低,而较高的值表示当前帧更有可能是一个新场景。默认值为
8.2
.- flags
指定影响过滤器过程的标志。
可用的值对于标志是:
- scene_change_detect, scd
使用选项scene的值启用场景变化检测。此标志默认启用。
39.99 帧步长
选择每N帧中的一帧。
此过滤器接受以下选项:
- step
选择每
step
帧后的帧。允许的值是大于0的正整数。默认值是1
.
39.100 冻结检测
检测已冻结的视频。
此过滤器在检测到输入视频在指定时长内内容没有显著变化时记录一条消息并设置帧元数据。视频冻结检测计算视频帧所有分量的平均绝对差并与噪声基础值进行比较。
打印的时间和持续时间以秒为单位表示。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(含)之间的浮点数)或如(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
- 应用透视效果,指定图像的左上角和右上角位置:
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滤镜重新创建帧率转换的输出帧,记录到地图文件中使用ffmpeg选项-stats_mux_pre
,并对相应的帧进行进一步处理,例如质量比较。
地图文件的每行必须包含三个项目:每个输入帧的输入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 高斯模糊
应用高斯模糊滤镜。
滤镜接受以下选项:
- sigma
设置水平西格玛,高斯模糊的标准偏差。默认值为
0.5
.- steps
设置高斯近似的步数。默认值为
1
.- planes
设置过滤的平面。默认情况下过滤所有平面。
- sigmaV
设置垂直西格玛,如果为负值,则与
sigma
相同。默认值为-1
.
39.105.1 命令
此滤镜支持与选项相同的命令。 命令接受与对应选项相同的语法。
如果指定的表达式无效,则保持当前值。
39.106 geq
对每个像素应用通用公式。
滤镜接受以下选项:
- lum_expr, lum
设置亮度表达式。
- cb_expr, cb
设置蓝色色度表达式。
- cr_expr, cr
设置红色色度表达式。
- alpha_expr, a
设置Alpha表达式。
- red_expr, r
设置红色表达式。
- green_expr, g
设置绿色表达式。
- blue_expr, b
设置蓝色表达式。
根据指定选项选择颜色空间。如果指定了某个lum_expr, cb_expr选项,或cr_expr选项,滤镜将自动选择YCbCr颜色空间。如果指定了某个red_expr, green_expr选项,或blue_expr如果指定了选项,它将选择一个RGB颜色空间。
如果没有定义其中一个色度表达式,则会回退到另一个表达式。如果未指定任何alpha表达式,它将评估为不透明值。如果未指定任何色度表达式,它们将评估为亮度表达式。
表达式可以使用以下变量和函数:
- N
过滤后的帧的序列号,从
0
.- X
- Y
当前样本的坐标。
- W
- H
图像的宽度和高度。
- SW
- SH
宽度和高度根据当前过滤的平面进行缩放。它是对应的亮度平面像素数量与当前平面像素数量之间的比率。例如,对于 YUV4:2:0 的值是
1,1
用于亮度平面,以及0.5,0.5
用于色度平面。- T
当前帧的时间,以秒为单位表达。
- p(x, y)
返回当前平面位置 (x,,) 的像素值。
- lum(x, y)
返回亮度平面位置 (x,,) 的像素值。
- cb(x, y)
返回蓝差色度平面位置 (x,,) 的像素值。如果没有这样的平面,返回0。
- cr(x, y)
返回红差色度平面位置 (x,,) 的像素值。如果没有这样的平面,返回0。
- r(x, y)
- g(x, y)
- b(x, y)
返回位置 (x,,) 的红/绿/蓝分量的像素值。如果没有这样的分量,返回0。
- alpha(x, y)
返回alpha平面位置 (x,,) 的像素值。如果没有这样的平面,返回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)'
- 创建一个与输入大小相同的径向渐变(另见vignette滤镜):
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
设置视频输出大小。默认是hd720.
- 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’
显示过滤链接使用的视频尺寸或 audio 使用的音频通道数。
- ‘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
用于计算Minkowski距离的参数。必须在 [0,20] 范围内选择,默认值为 1。设置为 0 时将得到最大值而非计算 Minkowski 距离。
- sigma
要对场景应用的高斯模糊标准偏差。必须在 [0,1024.0] 范围内选择,默认值为 1。sigma* break_off_sigma(3) ) 不能等于 0,若difford大于 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
- 使用引导滤镜进行去雾、结构传递过滤、细节增强。
有关生成引导图像,请参阅论文《Guided Image Filtering》。
参见:http://kaiminghe.com/publications/pami12guidedfilter.pdf.
ffmpeg -i in.png -i guidance.png -filter_complex guided=guidance=on out.png
39.112 haldclut
将 Hald CLUT 应用于视频流。
第一个输入是要处理的视频流,第二个是 Hald CLUT。 Hald CLUT 输入可以是简单的图片或完整的视频流。
该滤镜接受以下参数:
- clut
设置将从第二个输入流处理哪些 CLUT 视频帧, 可以是第一个或者全部。默认是全部.
- 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
xLevel*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 水平翻转
将输入视频水平翻转。
例如,使用以下命令水平翻转输入视频:ffmpeg
:
ffmpeg -i in.avi -vf "hflip" out.avi
39.114 直方图均衡
此滤镜在帧基础上应用全局颜色直方图均衡。
可用于校正像素强度范围被压缩的视频。 滤镜将重新分布像素强度,使其在强度范围内均衡分布。 它可以被视为一个“自动调整对比度滤镜”。此滤镜仅对校正退化 或拍摄质量较差的源视频有用。
过滤器接受以下选项:
- 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*亮度空间/4.0.
- luma_tmp
一个浮点数,用于指定亮度时间强度。默认值为6.0*亮度空间/4.0.
- chroma_tmp
一个浮点数,用于指定色度时间强度。默认值为亮度时间*色度空间/亮度空间.
39.116.1 命令
此过滤器支持与选项相同的命令。命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保持当前值。
39.117 hwdownload
将硬件帧下载到系统内存。
输入必须为硬件帧,输出必须为非硬件格式。并非所有格式都能在输出中支持——可能需要在图表中紧挨着插入一个额外的format过滤器,以获得支持的输出格式。
39.118 hwmap
将硬件帧映射到系统内存或另一个设备。
该过滤器具有多种不同的操作模式;具体使用哪种模式取决于输入和输出格式:
- 硬件帧输入,普通帧输出
将输入帧映射到系统内存并传递给输出。如果以后需要原始硬件帧(例如,在其顶部叠加其他内容后),则hwmap过滤器可以再次在下一模式中检索它。
- 普通帧输入,硬件帧输出
如果输入实际上是软件映射的硬件帧,则取消映射它——也就是返回原始硬件帧。
否则,必须提供一个设备。在该设备上为输出创建新的硬件表面,然后将其映射回输入的软件格式,并将这些帧传递给先前的过滤器。然后,这将像hwupload过滤器一样工作,但当输入已经处于兼容格式时可能避免额外的拷贝。
- 硬件帧输入和输出
必须为输出提供一个设备,可以直接或使用derive_device选项。输入和输出设备必须是不同类型且兼容的——其确切含义取决于系统,但通常它意味着它们必须引用同一底层硬件环境(例如,相同的显卡)。
如果输入帧最初是在输出设备上创建的,则取消映射以检索原始帧。
否则,将帧映射到输出设备——在输出上创建与输入帧对应的新硬件帧。
接受以下额外参数:
- mode
设置帧映射模式。一些组合是:
- 读取
映射的帧应该是可读的。
- 写入
映射的帧应该是可写的。
- 覆盖
映射将始终覆盖整个帧。
这可能在某些情况下提高性能,因为帧的原始内容无需加载。
- 直接
映射不能涉及任何拷贝。
在某些情况下,直接映射不可能或将具有意外属性时,创建映射到帧副本的间接映射。设置此标志确保映射是直接的,如果不可能,将会失败。
默认值为读取+写入如果未指定。
- derive_device 类型
与初始化时所提供的设备不同,从输入帧所在的设备中派生一个新的设备,其类型为类型。在硬件到硬件映射中,反向映射——在接收方创建帧并将它们映射回源。这可能对于某些情况下必须进行某个方向的映射,但设备只支持相反方向的映射是必要的。
- reverse
In a hardware to hardware mapping, map in reverse - create frames in the sink and map them back to the source. This may be necessary in some cases where a mapping in one direction is required but only the opposite direction is supported by the devices being used.
此选项危险——如果之前的过滤器对其输出有任何附加约束,可能会以未定义的方式破坏它。不要在未完全了解使用其含义的情况下使用它。
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
水平堆叠输入视频。
所有流必须具有相同的像素格式和相同的高度。
该滤镜接受以下选项:
- 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"
- 应用从0开始的3秒钟饱和淡入效果:
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。
该hysteresis
滤镜还支持帧同步选项。
39.128 ICC检测
从嵌入式ICC配置文件(如果存在)中检测颜色空间,并相应地更新视频帧的标签。
此滤镜接受以下选项:
- force
如果为真,帧的现有颜色空间标签将始终被来自ICC配置文件中检测到的值覆盖。否则,只有在标签为空时才会赋值。
unknown
默认启用。
39.129 ICC生成
生成ICC配置文件并附加到帧。
此滤镜接受以下选项:
- color_primaries
- color_trc
配置生成的ICC配置文件所对应的颜色空间。默认值为
auto
从输入帧的元数据推导值,适当时默认为BT.709/sRGB。见setparams滤镜以获取可能值的列表,但请注意
unknown
对于此滤镜不是有效值。- force
如果为真,即使覆盖现有ICC配置文件,仍会生成一个新的ICC配置文件。默认是禁用的。
39.130 身份分数
获取两个输入视频之间的身份分数。
此滤镜需要两个输入视频。
这两个输入视频必须具有相同的分辨率和像素格式,才能正常工作。此外,假定两个输入均具有相同数量的帧,并且逐帧进行比较。
获得的每个组件的平均值、最小值和最大身份分数通过日志系统打印输出。
滤镜将计算得到的每帧的身份得分存储在帧元数据中。
此滤镜还支持帧同步选项。
在以下示例中,输入文件main.mpg正在处理,与参考文件进行比较ref.mpg.
ffmpeg -i main.mpg -i ref.mpg -lavfi identity -f null -
39.131 idet
检测视频的隔行扫描类型。
此滤镜尝试检测输入帧是否为隔行扫描、渐进扫描、上场优先或下场优先。它还将尝试检测在相邻帧之间重复的字段(这通常是电气转换的特征)。
单帧检测仅考虑相邻帧进行分类。多帧检测则结合前几帧的分类记录。
滤镜将记录以下元数据值:
- single.current_frame
使用单帧检测发现的当前帧类型之一:“tff”(上场优先)、“bff”(下场优先)、“渐进扫描”或“未确定”。
- single.tff
使用单帧检测累计检测到的上场优先的帧数量。
- multiple.tff
使用多帧检测累计检测到的上场优先的帧数量。
- single.bff
使用单帧检测累计检测到的下场优先的帧数量。
- multiple.current_frame
使用多帧检测发现的当前帧类型之一:“tff”(上场优先)、“bff”(下场优先)、“渐进扫描”或“未确定”。
- 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时,idet将使用指定数量的帧来确定隔行扫描标志的准确性,它不会统计未确定的帧。如果发现标志准确,则不再进行任何进一步计算,会继续使用;如果标志不准确,则直接清除,继续正常处理。这使得插入idet滤镜成为一种低计算复杂度方法来清理隔行扫描标志。
39.131.1 示例
详细检查视频前360帧的场序:
ffmpeg -i INPUT -filter:v idet,metadata=mode=print -frames:v 360 -an -f null -
idet滤镜将为每帧添加分析元数据,然后将其丢弃。最后,滤镜还会打印一份带有统计数据的最终报告。
39.132 il
隔行拆解或重组字段。
此滤镜允许处理隔行扫描图像场而不进行去隔行处理。隔行拆解将输入帧分成两个场(即所谓的半图片)。奇数行移动到输出图像的上半部分,偶数行移动到下半部分。您可以独立处理(滤波)它们,然后将其重新组合。
滤镜接受以下选项:
- luma_mode, l
- chroma_mode, c
- alpha_mode, a
以下是亮度模式, 色度模式和透明度模式的可选值:
- ‘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 interlace, interlace_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 kerndeint
通过应用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 lenscorrection
校正径向镜头畸变
此过滤器可用于校正由使用广角镜头引起的径向畸变,从而重新校正图像。要找到合适的参数, 可以使用例如 opencv 提供的工具或简单的试错法。要使用 opencv,请使用其源代码中的校准样本(位于 samples/cpp 下),从结果矩阵中提取 k1 和 k2 系数。
注意,实际上在开源工具 Krita 和 KDE 项目下的 Digikam 中可以找到相同的过滤器。
相比于vignette过滤器(也可用于补偿镜头错误),此过滤器校正图像的畸变,而vignette校正亮度分布,因此在某些情况下,可能需要将两个过滤器一起使用,但需要注意顺序,即是否应该在镜头校正之前或之后应用渐晕。
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
.
生成校正的公式是:
源距离 = 目标距离 * (1 + k1 系数 * (目标距离 / 参考距离)^2 + k2 系数 * (目标距离 / 参考距离)^4)
其中参考距离是图像对角线的一半,而源距离和目标距离分别是源图像和目标图像中的焦点距离。
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
变量一起使用,允许将多个输入放置/混合到输出帧中。这实际上启用了类似于水平堆叠, 覆盖等功能。- w
- h
设置输出视频尺寸表达式。默认值为
iw
和ih
.允许使用与缩放过滤器相同的表达式。
- 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
与相同的缩放过滤器选项效果相同。
- normalize_sar
如果启用,输出帧将始终具有 1:1 的像素宽高比。这将根据需要引入额外的填充或裁剪。如果禁用(默认值),任何宽高比的不匹配(包括例如非正交视频源的那些)都将传递到输出像素宽高比。
- pad_crop_ratio
指定输入宽高比与输出宽高比不匹配时填充和裁剪之间的比例(范围在
0.0
和1.0
之间),并且normalize_sar生效。默认值0.0
始终用黑边填充内容,而值为1.0
始终裁剪内容的一部分。可以使用中间值,将导致两种方法的混合。- fillcolor
设置用于填充未覆盖输出图像的输出区域的颜色,例如由于normalize_sar选项的结果。有关此选项的一般语法,请参阅 ffmpeg-utils 手册中的"颜色"部分。默认值为
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
导致输出帧与输入帧格式相同,不进行更改。对于任何其他值,将进行转换。查看设置参数过滤器,了解可能值的列表。
- apply_filmgrain
如果源帧中存在胶片颗粒(例如 AV1 或 H.274),则将应用并从输出中剥离。默认启用。
- apply_dolbyvision
如果源帧中存在杜比视界 RPU 元数据,则将应用并从输出中剥离。默认启用。请注意,杜比视界将始终输出 BT.2020+PQ,这将覆盖通常的输入帧元数据。这些也将被用作
auto
的值,用于相应的帧输出选项。
除了为缩放过滤器记录的表达式常量外,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’
简单的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+动态元数据的贝塞尔曲线进行色调映射。使用的OOTF会根据目标和实际显示峰值亮度的比例进行调整。
- ‘st2094-10’
从SMPTE ST 2094-10 附录B.2的EETF,考虑输入信号的平均亮度及其最大/最小值。可配置对比度参数影响线性输出段的斜率,默认值为
1.0
说明没有任何对比度的增加/减少。请注意,这目前尚未包含附录 B.3中定义的主观增益/偏移/伽马控件。- ‘bt.2390’
来自 ITU-R 报告 BT.2390 的 EETF,具有线性段的赫米特样条滚降。拐点偏移是可配置的。注意,此参数默认值为
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’
由John 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大小,以对数底数2取值范围在
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
强制禁用FBO,导致几乎丧失所有功能,但提供了可能的最大速度。
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/VFR输入插值为平滑的恒定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的系统上基于CPU运行此滤镜(并禁用最昂贵的选项):
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
设置要使用的帧采样间隔。
该滤镜还支持framesync选项。
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
上限。默认为输入允许的最高值。
- 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)
对输入视频应用一维查找表。
该滤镜接受以下选项:
- file
设置一维查找表文件名。
当前支持的格式:
- ‘cube’
Iridas
- ‘csp’
cineSpace
- interp
选择插值模式。
可用值为:
- ‘nearest’
从最近定义点获取值。
- ‘linear’
使用线性插值计算值。
- ‘cosine’
使用余弦插值计算值。
- ‘cubic’
使用三次插值计算值。
- ‘spline’
使用样条插值计算值。
39.147.1 命令
此滤镜支持上述所有选项作为命令.
39.148 三维查找表 (lut3d)
对输入视频应用三维查找表。
该滤镜接受以下选项:
- file
设置三维查找表文件名。
当前支持的格式:
- ‘3dl’
AfterEffects
- ‘cube’
Iridas
- ‘dat’
DaVinci
- ‘m3d’
Pandora
- ‘csp’
cineSpace
- interp
选择插值模式。
可用值为:
- ‘nearest’
从最近定义点获取值。
- ‘trilinear’
使用定义立方体的 8 个点进行插值。
- ‘tetrahedral’
使用四面体进行插值。
- ‘pyramid’
使用棱锥进行插值。
- ‘prism’
使用棱柱进行插值。
39.148.1 命令
此滤镜支持interp
选项作为命令.
39.149 明度键
将某些明度值转为透明。
设置用于透明化的明度值。 默认值为
- threshold
Set the luma which will be used as base for transparency. Default value is
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*选项相关的确切分量取决于输入格式。
该查找表滤镜需要输入中有 YUV 或 RGB 像素格式,lutrgb需要输入中有 RGB 像素格式,并且lutyuv需要 YUV。
表达式可以包含以下常量和函数:
- w
- h
输入的宽度和高度。
- val
像素分量的输入值。
- clipval
输入值,裁剪到最小值-最大值范围。
- maxval
像素分量的最大值。
- minval
像素分量的最小值。
- negval
像素分量值的负值,裁剪到最小值-最大值范围;等同于表达式 "maxval-clipval+minval"。
- clip(val)
计算出的值val,裁剪到最小值-最大值范围。
- gammaval(gamma)
像素分量值的计算出的伽马校正值,裁剪到最小值-最大值范围。等同于表达式 "pow((clipval-minval)/(maxval-minval)\,gamma)*(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
设置第一个像素分量表达式
- c1
设置第二个像素分量表达式
- c2
设置第三个像素分量表达式
- c3
设置第四个像素分量表达式,对应于透明度分量
- d
设置输出位深度,仅适用于
lut2
滤镜。默认值为 0, 意味着位深度自动从第一个输入格式中选取。
该lut2
滤镜也支持framesync选项。
每项都指定了用于计算对应像素分量值查找表的表达式。
与每个c*选项对应的具体分量取决于输入的格式。
表达式可以包含以下常量:
- 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
设置帧的最大平均像素值。如果所有像素分量的总和高于此平均值,输出帧将完全填充为由填充选项设置的值。通常在与
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 minterpolate
使用运动插值将视频转换为指定的帧率。
此滤镜接受以下选项:
- 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
指定缩放比例,如果设置,它将与每个权重乘以像素值的总和相乘,以得出最终目标像素值。默认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
设置第二输入流中的结构视频帧将从中处理,可以是first或全部。默认值是全部.
该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。必须为 1 到 99 之间的奇数。
- pc
与p相同,但用于色度平面。
默认值是0并表示自动。
- r
设置搜索大小。默认值为 15。必须为 1 到 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 光学字符识别
光学字符识别
此滤波器使用 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
.
它接受以下参数:struct_el|nb_iterations.
struct_el表示一个结构元素,语法为:colsxrows+anchor_xxanchor_y/shape
cols和rows代表结构元素的列数和行数,anchor_x和anchor_y表示锚点,shape表示结构元素的形状。shape必须是“rect”、“cross”、“ellipse”或“custom”。
如果shape的值为“custom”,则它必须接着一个形式为"=filename“的字符串。文件名称filename假定表示一个二进制图像,每个可打印字符对应一个亮像素。当使用一个定制shape时,cols和rows将被忽略,而使用读取文件的实际列数和行数。
struct_el的默认值为“3x3+0x0/rect”。 is "3x3+0x0/rect".
nb_iterations指定对图像应用变换的次数,默认值为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
.
它接受以下参数:struct_el:nb_iterations,语法和语义与膨胀滤镜相同。
39.178.3 平滑
对输入视频进行平滑处理。
过滤器接受以下参数:type|param1|param2|param3|param4.
type是要应用的平滑滤镜类型,必须是以下值之一:“blur”、“blur_no_scale”、“median”、“gaussian”或“bilateral”。默认值为“gaussian”。
关于param1, param2, param3和param4的含义取决于平滑类型。param1和param2接受正整数值或0。param3和param4接受浮点值。
param1的默认值为3。其他参数的默认值为0。 is 3. The default value for the other parameters is 0.
这些参数对应于分配给libopencv函数的参数。cvSmooth
.
39.179 示波器
2D 视频示波器。
有助于测量空间脉冲、阶跃响应、色度延迟等。
它接受以下参数:
- 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
设置叠加视频的alpha格式,可以为直或预乘。默认值为直.
这些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
工具插入2个不同的透明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]
- 原始视频和经过滤镜处理后的视频(此处为deshake滤镜)并排播放,使用
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] "
- 通过对某个部分应用delogo过滤器屏蔽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 降噪
应用过完备小波降噪器。
此滤波器接受以下选项:
- depth
设置深度。
较大的深度值将对较低频率的分量进行降噪, 但会减慢过滤速度。
必须是范围为 8-16 的整数,默认值为
8
.- luma_strength, ls
设置亮度强度。
必须是范围为 0-1000 的双精度值,默认值为
1.0
.- chroma_strength, cs
设置色度强度。
必须是范围为 0-1000 的双精度值,默认值为
1.0
.
39.182 填充
对输入图像添加填充,并将原始输入放置在 提供的x, y坐标处。
它接受以下参数:
- width, w
- height, h
指定加上填充后的输出图像尺寸表达式。如果宽度或高度的值为 0, 将使用对应的输入尺寸作为输出尺寸。
该宽度表达式可以引用高度表达式中设置的值,反之亦然。
默认值为宽度和高度为 0。
- x
- y
指定相对于输出图像的顶部/左侧边框的位置, 输入图像放置在填充区域中的偏移量。
该x表达式可以引用y表达式中设置的值,反之亦然。
默认值为x和y为 0。
如果x或y计算为负数, 它们将被更改,以使输入图像居中于填充区域上。
- color
指定填充区域的颜色。有关此选项的语法,请查看(ffmpeg-utils)“颜色”部分 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表达式指定偏移量,或者如果尚未指定,则为 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拜耳抖动(确定性)
- ‘heckbert’
由Paul Heckbert在1982年定义的抖动(简单误差扩散)。注意:这种抖动有时被认为是“错误的”,作为参考包含在内。
- ‘floyd_steinberg’
Floyd和Steingberg抖动(误差扩散)
- ‘sierra2’
Frankie Sierra v2抖动(误差扩散)
- ‘sierra2_4a’
Frankie Sierra v2精简版(误差扩散)
- ‘sierra3’
Frankie Sierra v3抖动(误差扩散)
- ‘burkes’
Burkes抖动(误差扩散)
- ‘atkinson’
Bill Atkinson在Apple计算机开发的Atkinson抖动(误差扩散)
- ‘none’
禁用抖动。
默认值是sierra2_4a.
- bayer_scale
当选择了bayer抖动时,此选项定义纹理的尺度(交叉影的可见度)。取值较低意味着纹理更加明显,减少了色彩带状,取值较高意味着纹理较少明显,但伴随着更多色彩带状。
此选项必须是范围为[0,5]的整数值。默认值为2.
- diff_mode
如果设置,定义处理的区域
- ‘rectangle’
只有变化的矩形区域会被重新处理。这类似于GIF裁剪/偏移压缩机制。此选项在图像仅部分发生变化的情况下有助于提高速度,并且在限制误差扩散范围为包含运动场景的矩形时具有用处(如果场景变化不大,会产生更多确定输出,减少运动噪声并提升GIF压缩效果)。dither to the rectangle that bounds the moving scene (it leads to more deterministic output if the scene doesn’t change much, and as a result less moving noise and better GIF compression).
默认值是none.
- new
为每一输出帧提供新的调色板。
- alpha_threshold
设置透明性的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
对输入视频流应用阿尔法预乘效果,使用第二流的第一平面作为阿尔法。
两个流必须具有相同的尺寸和相同的像素格式。
该滤镜接受以下选项:
- planes
设置将被处理的平面,未处理的平面将被复制。 默认值为 0xf,即所有平面都将被处理。
- inplace
处理时不需要第二输入,而是使用输入流的阿尔法平面。
39.193 prewitt
对输入视频流应用Prewitt算子。
该滤镜接受以下选项:
- planes
设置将被处理的平面,未处理的平面将被复制。 默认值为 0xf,即所有平面都将被处理。
- scale
设置与过滤结果相乘的值。
- delta
设置将添加到滤波结果上的值。
39.193.1 命令
此滤镜支持上述所有选项并作为命令.
39.194 pseudocolor
使用伪色给视频帧着色。
此滤镜接受以下选项:
- c0
设置像素第一分量表达式
- c1
设置像素第二分量表达式
- c2
设置像素第三分量表达式
- c3
设置像素第四分量表达式,对应于阿尔法分量
- index, i
设置用于改变颜色的基础分量
- preset, p
选择一个内置的LUT。默认设置为无。
可用的LUTs:
- ‘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 过滤器,使用fps=24000/1001
如果输入帧率为 29.97fps,fps=24
对于 30fps 和(罕见的)25fps 交错输入。
过滤器接受以下选项:
- 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/),并将其叠加在当前帧上。
要启用此过滤器的编译,需要配置 FFmpeg。--enable-libqrencode
.
二维码是根据提供的文本或文本模式生成的。生成的二维码根据指定选项缩放并叠加在视频输出上。
如果未指定文本,则不会叠加二维码。
此过滤器接受以下选项:
- qrcode_width, q
- padded_qrcode_width, Q
指定渲染二维码的宽度的表达式,无填充和有填充的。该qrcode_width表达式可以引用padded_qrcode_width表达式设置的值,反之亦然。默认情况下,padded_qrcode_width设置为qrcode_width,意味着没有填充。
这些表达式针对每个新帧进行评估。
参见qrencode 表达式部分以了解详细信息。
- x
- y
指定用于定位填充二维码左上角的表达式。该x表达式可以引用y表达式设置的值,反之亦然。
默认情况下x和是设置为0,意味着二维码 放置在输入的左上角。
这些表达式对于每个新帧都会进行评估。
参见qrencode 表达式部分了解详细信息。
- case_sensitive, cs
指示 libqrencode 使用区分大小写的编码。默认情况下启用。可以禁用以减少二维码编码的尺寸。
- level, l
指定二维码编码的错误纠正级别。纠正级别越高,编码尺寸会增加,但二维码对损坏更加鲁棒。 较低的级别是L.
它接受以下值:
- ‘L’
- ‘M’
- ‘Q’
- ‘H’
- expansion
选择输入文本的展开方式。可以是
none
或normal
(默认)。参见qrencode 文本展开下方了解详细信息。- text
- textfile
定义要渲染的文本。如果未指定,则不会编码二维码 (仅显示一个空的有颜色的框架)。
如果启用展开,则将文本视为文本模板,使用 qrencode的展开机制进行处理。参见qrencode 文本展开下方了解详细信息。
- background_color, bc
- foreground_color, fc
设置二维码和背景颜色。默认值为前景色是 "black",默认值为背景色是 "white"。
要了解颜色选项的语法,请检查(ffmpeg-utils)“颜色” 部分在 ffmpeg-utils 手册中.
39.198.1 qrencode 表达式
选项设置的表达式包含以下常量和函数。
- 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 qrencode 文本展开
如果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
,可以提供第三个参数:strftime
C 函数格式字符串。默认情况下,YYYY-MM-DD HH:MM:SS格式将被使用。expr, e
评估表达式的值并以双精度输出。
它必须接受一个指定要评估表达式的参数,接受在qrencode_expressions.
expr_formatted, ef
评估表达式的值并以格式化字符串输出。
第一个参数是所评估的表达式,与上一个功能一样表达式函数。 第二个参数指定输出格式。允许的值为 “x’, ‘X’, ‘d” 和 “u”。 它们的处理方式与
printf
函数中的处理方式完全相同。 第三个参数是可选的,设置输出占据的位置数。 它可用于从左侧添加零的填充。gmtime
过滤器运行的时间,以 UTC 表示。 它可以接受一个参数:一个
strftime
C 函数格式字符串。 格式字符串扩展为支持变量%[1-6]N其打印秒的小数部分,可选地指定数字的位数。localtime
过滤器运行的时间,以本地时区表示。 它可以接受一个参数:一个
strftime
C 函数格式字符串。 格式字符串扩展为支持变量%[1-6]N其打印秒的小数部分,可选地指定数字的位数。metadata
帧元数据。需要一个或两个参数。
第一个参数是必需的,指定元数据键。
第二个参数是可选的,指定一个默认值,在未找到或为空的元数据键时使用。
可以通过检查以 TAG 开头的条目来识别可用元数据, 这些条目包含在运行时每个帧部分打印的内容中。
ffprobe -show_frames
.在通向 qrencode 滤镜的滤镜中生成的字符串元数据也可用。
rand(min, max)
返回一个介于最小值和最大值
39.198.3 示例
- 生成一个编码指定文本的二维码,使用默认大小,将其覆盖在输入视频的左上角,默认大小:
qrencode=text=www.ffmpeg.org
- 与上类似,但选择蓝色背景粉色前景:
qrencode=text=www.ffmpeg.org:bc=pink@0.5:fc=blue
- 将二维码放置在输入视频的右下角:
qrencode=text=www.ffmpeg.org:x=W-Q:y=H-Q
- 生成一个宽度为 200 像素,且填充后宽度为二维码宽度的 4/3 的二维码:
qrencode=text=www.ffmpeg.org:q=200:Q=4/3*q
- 生成一个填充宽度为 200 像素,且二维码宽度为填充后宽度的 3/4 的二维码:
qrencode=text=www.ffmpeg.org:Q=200:q=3/4*Q
- 使二维码占输入视频宽度的一部分:
qrencode=text=www.ffmpeg.org:q=W/5
- 生成一个编码帧编号的二维码:
qrencode=text=%{n}
- 生成一个编码 GMT 时间戳的二维码:
qrencode=text=%{gmtime}
- 生成一个编码为浮点数表示的时间戳的二维码:
qrencode=text=%{pts}
39.199 quirc
使用 libquirc 库识别并解码二维码(见https://github.com/dlbeer/quirc/),并将识别出的二维码位置和有效载荷作为元数据打印。
要启用此过滤器的编译,需要用以下配置 FFmpeg--enable-libquirc
.
对于输入视频中发现的每个二维码,添加一些带有前缀的元数据条目lavfi.quirc.N,其中N是与二维码相关联的索引,从 0 开始。
以下是每个元数据值的描述:
- lavfi.quirc.count
找到的二维码的数量,如果没有找到,则不设置。
- lavfi.quirc.N.corner.M.x
- lavfi.quirc.N.coreer.M.y
包含二维码的方形边框的四个角的 x/y 位置, 其中M是角的索引,从 0 开始。
- lavfi.quirc.N.payload
二维码的有效载荷
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
使用第 2 个:Xmap 和第 3 个: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 去噪
去噪滤镜是一种用于渐进式视频的空间去噪器。
- 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 移除标志
通过使用图像文件确定哪些像素构成标志,抑制电视台标志。通过用邻近像素填充这些像素来工作。
该滤镜接受以下选项:
- filename, f
设置过滤器位图文件,可以是libavformat支持的任何图像格式。图像文件的宽度和高度必须与正在处理的视频流匹配。
提供的位图图像中值为零的像素不被视为标志的一部分,非零像素被认为是标志的一部分。如果你使用白色(255)作为标志,黑色(0)作为其余部分,将是安全的。制作过滤器位图时,建议截取可见标志的黑框的屏幕截图,然后使用一次或两次阈值过滤器和腐蚀滤镜。
如果需要,可以手动修复小斑点。请记住,如果标志像素未覆盖,过滤器质量将大大降低。将太多的像素标为标志的一部分不会造成太大伤害,但会增加覆盖图像所需的模糊量,并比必要的破坏更多信息,而额外的像素会在标志较大时减慢速度。
39.206 字段重复
此滤镜使用视频ES头的重复字段标志,并根据其值硬性重复字段。
39.207 反转
反转一个视频剪辑。
警告:此滤镜需要内存来缓冲整个剪辑,因此建议修整。
39.207.1 示例
- 取一个剪辑的前5秒,并将其反转。
trim=end=5,reverse
39.208 RGB位移
水平和/或垂直移动R/G/B/A像素。
该滤镜接受以下选项:
- rh
设置红色水平移动量。
- rv
设置红色垂直移动量。
- gh
设置绿色水平移动量。
- gv
设置绿色垂直移动量。
- bh
设置蓝色水平移动量。
- bv
设置蓝色垂直移动量。
- ah
设置Alpha通道水平移动量。
- av
设置Alpha通道垂直移动量。
- edge
设置边缘模式,可以是涂抹,默认值,或扭曲.
39.208.1 命令
此滤镜支持上述所有选项作为命令.
39.209 罗伯茨
将罗伯茨交叉算子应用于输入视频流。
该滤镜接受以下选项:
- planes
设置将被处理的平面,未处理的平面将被复制。 默认值为0xf,所有平面都将被处理。
- scale
设置与过滤结果相乘的值。
- delta
设置将添加到过滤结果的值。
39.209.1 命令
此滤镜支持上述所有选项作为命令.
39.210 旋转
以以弧度表达的任意角度旋转视频。
该滤镜接受以下选项:
以下是可选参数的说明。
- angle, a
设置用于顺时针旋转输入视频的角度表达式,以弧度数表示。负值将导致逆时针旋转。默认值为"0"。
此表达式为每帧评估。
- out_w, ow
设置输出宽度表达式,默认值为"iw"。 此表达式仅在配置期间评估一次。
- out_h, oh
设置输出高度表达式,默认值为"ih"。 此表达式仅在配置期间评估一次。
- bilinear
如果设置为1,则启用双线性插值,值为0则禁用。 默认值为1。
- fillcolor, c
设置用于填充旋转后图像未覆盖的输出区域的颜色。对于此选项的一般语法,请查看(ffmpeg-utils)"颜色"部分在ffmpeg-utils手册中。 如果选择特殊值"none",则不会打印背景(例如,当背景从未显示时非常有用)。
默认值为"黑色"。
角度和输出大小的表达式可以包含以下常量和函数:
- 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
- 以 PI/3 角度开始应用周期为 T 的恒定旋转:
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 比例
使用 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)法规代码 CFR 第 47(2003)第 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。
请注意,这与指定-1w或h不同,您仍需为此选项指定输出分辨率以使其发挥作用。
- 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
)或启用force_original_aspect_ratio
请求比例缩放,则会考虑输入DAR并将输出缩放为生成方形像素。默认值是false。
选项的值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。
- n
输入帧的(连续)编号,从0开始。仅在
eval=frame
.- 可用。
t
eval=frame
.- 可用。
pos
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
对每一帧设置带有MAFD的元数据键值。
lavfi.scd.score
对每一帧设置带有场景变化得分的元数据键值以检测场景变化。
lavfi.scd.time
对当前过滤帧的时间设置元数据键值,用于通过检测场景变化threshold.
过滤器接受以下选项:
- threshold, t
以最大变化百分比设置场景变化检测阈值。 合适的值在
[8.0, 14.0]
范围内。范围threshold是[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
接受一个基于帧的视频输入,并将每帧分为其组成字段,
生成一个新的半高剪辑,具有两倍的帧率和帧数。
此过滤器使用帧中的字段优先信息决定在输出中每对字段中的哪个字段先呈现。
如果判断错误,请使用setfield过滤器放在separatefields
过滤器之前。
39.219 setdar, setsar
该setdar
过滤器为过滤器输出视频设置显示纵横比(Display Aspect Ratio)。
通过更改指定的样本(即像素)纵横比来完成,根据以下公式:
DAR = 水平分辨率 / 垂直分辨率 * SAR
请记住,setdar
过滤器不会修改视频帧的像素尺寸。此外,该过滤器设置的显示纵横比可能会被过滤器链中后续的过滤器更改,例如缩放或应用另一个"setdar"或"setsar"过滤器。
该setsar
过滤器为过滤器输出视频设置样本(即像素)纵横比。
请记住,由于此过滤器的应用,输出显示纵横比将根据上述公式发生变化。
请记住,该过滤器设置的样本纵横比setsar
过滤器可能会在过滤器链中的后续过滤器中改变,例如应用了另一种“setsar”或“setdar”过滤器。
它接受以下参数:
- r, ratio, dar (
setdar
only), sar (setsar
only) 设置过滤器使用的宽高比。
参数可以是浮点数字符串或一个表达式。如果未指定参数,则默认值为“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)"Color"章节中的ffmpeg-utils手册。 如果选择特殊值“none”,则不会打印背景(例如,当背景从不显示时,这很有用)。
默认值为“black”。
- interp
设置插值类型。可以是
bilinear
或nearest
。默认值为bilinear
.
39.222.1 命令
此过滤器支持上述所有选项作为命令.
39.223 showinfo
为每个输入视频帧显示包含各种信息的行。输入视频不被修改。
此过滤器支持以下选项:
- checksum
计算每个平面的校验和。默认启用。
- udu_sei_as_ascii
尽可能将用户未注册的SEI数据打印为ascii字符,否则以十六进制格式显示。
显示的行包含一系列形式的键值对key:value.
输出中显示以下值:
- n
输入帧的(连续)编号,从0开始。
- pts
输入帧的展示时间戳,以时间基单位表示。时间基单位取决于过滤器输入端口。
- pts_time
输入帧的展示时间戳,以秒数表示。
- fmt
像素格式名称。
- sar
输入帧的样本宽高比,以以下形式表达num/den.
- 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
- 交换每十个输入帧中的第十帧和第一帧:
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
设置Alpha通道半径。选项值必须是在[0.1,5.0]范围内的浮点数,表示用于模糊图像的高斯滤波器的方差(越大越慢)。默认值为luma_radius.
- alpha_strength, as
设置Alpha通道强度。选项值必须是在[-1.0,1.0]范围内的浮点数,用于配置模糊处理。[0.0,1.0]范围内的值将模糊图像,而[-1.0,0.0]范围内的值将锐化图像。默认值为luma_strength.
- alpha_threshold, at
设置用作系数的Alpha通道阈值,以确定像素是否应该被模糊。选项值必须是在[-30,30]范围内的整数。值为0将过滤整个图像,值在[0,30]范围内将过滤平坦区域,值在[-30,0]范围内将过滤边缘。默认值为luma_threshold.
如果未明确设置色度或Alpha选项,相应的亮度值将被使用。
39.232 sobel
对输入视频流应用Sobel算子。
滤波器接受以下选项:
- planes
设置将被处理的平面,未处理的平面将被复制。默认值是0xf,所有平面都会被处理。
- scale
设置乘以滤波结果的值。
- delta
设置添加到滤波结果的值。
39.232.1 命令
此滤波器支持上述所有选项作为命令.
39.233 spp
应用一种简单的后处理滤波器,它以多个(或在qualitylevel6
所有)偏移量对图像进行压缩和解压缩,并对结果取平均。
滤波器接受以下选项:
- quality
设置质量。此选项定义用于平均的级别数量。接受范围是0-6的整数。设置为
0
时,滤波器将无效。值为6
表示最高质量。每增加该值1,速度将降低大约2倍。默认值为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
与上述相同,但以dB表示。
此滤镜还支持framesync选项。
39.236.1 示例
- 例如:
movie=ref_movie.mpg, setpts=PTS-STARTPTS [main]; [main][ref] ssim="stats_file=stats.log" [out]
在此示例中,正在处理的输入文件与参考文件进行比较。 每帧的 SSIM 值存储在ref_movie.mpgstats_filestats.log.
- 中。
ffmpeg -i main.mpg -i ref.mpg -lavfi "ssim;[0:v][1:v]psnr" -f null -
- 另一个同时使用 PSNR 和 SSIM 的示例:
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 -
使用不同容器的示例:
在不同的立体图像格式之间进行转换。
此滤镜接受以下选项:
- 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 示例
- 将输入视频从并排平行格式转换为黄色/蓝色 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
指定原始视频的尺寸,即为 ASS 文件所创作的视频。有关此选项的语法,请参阅(ffmpeg-utils)“视频尺寸”部分,在 ffmpeg-utils 手册中。 由于 ASS 的宽高比计算存在缺陷,当宽高比发生变化时,这一点是必要的以正确缩放字体。
- fontsdir
设置包含可供滤镜使用字体的目录路径。此处字体将被添加到字体提供程序所使用的字体之外。
- alpha
处理 alpha 通道,默认 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
等于宽 / 高
- sar
输入的样本宽高比。
- dar
输入的显示宽高比,等于(宽 / 高) * 样本宽高比
- n
输入帧的编号,从 0 开始。
- t
以秒为单位的时间戳。如果输入时间戳未知,则为 NAN。
- pos
输入帧在文件中的位置,未知则为 NAN;已弃用,请勿使用
39.241.1 命令
此滤镜支持以上所有选项作为命令.
39.242 swapuv
交换 U 和 V 平面。
39.243 tblend
混合连续的视频帧。
参见混合
39.244 telecine
对视频应用电视电影化工艺。
此滤镜接受以下选项:
- first_field
- ‘top, t’
顶部字段优先
- ‘bottom, b’
底部字段优先 默认值是
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 图块
将多个连续帧拼接在一起。
The 拆分滤镜可以反向操作。
滤镜接受以下选项:
- layout
以
COLUMNSxROWS
形式设置网格大小。 范围为 UINT_MAX 单元格。 默认值是6x5
.- nb_frames
设置给定区域中要渲染的最大帧数。 必须小于或等于wxh。 默认值是
0
,表示区域将完全被使用。- margin
设置像素的外边框边距。 范围是 0 到 1024。 默认值为
0
.- padding
设置内边框厚度(即帧之间的像素数)。 对于更高级的边距选项(例如为边缘设置不同的值), 请参考 pad 视频滤镜。 范围是 0 到 1024。 默认值是
0
.- color
指定未使用区域的颜色。 有关此选项的语法,请查看(ffmpeg-utils)"颜色"一节在 ffmpeg-utils 手册中。 默认值color是 "black"。
- overlap
设置在将多个连续帧拼接在一起时重叠的帧数。 该值必须介于
0
和nb_frames - 1之间。 默认值是0
.- init_padding
设置在显示第一个输出帧之前最初为空的帧数。 这控制了第一次获取输出帧的时间。 该值必须介于
0
和nb_frames - 1之间。 默认值是0
.
39.248.1 示例
- 为所有关键帧(-skip_frame nokey)生成 8x8 PNG 图块:
ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
The -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
指定影响过滤过程的标志。
可用的值为标志是:
- 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
设置过滤σ值。默认值为
0.5
。这控制了过滤的强度。 将此选项设置为0实际上不会产生任何效果。- planes
设置要处理的平面。默认值为
15
,即所有可用平面。
39.253 tmix
混合连续的视频帧。
以下是接受的选项描述。
- frames
要混合的连续帧数量。如果未指定,默认为3。
- weights
指定每个输入视频帧的权重。 每个权重用空格分隔。如果权重数量少于帧数, 未设置的权重将使用最后指定的权重。frames last specified weight will be used for all remaining unset weights.
- 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
设置要使用的色调映射算法。
可能的值为:
- 无
不应用任何色调映射,只去饱和过亮像素。
- 裁剪
硬裁剪任何超出范围的值。用于在范围内值保持色彩精度同时,失真范围外的值。
- 线性
将整个参考色域拉伸为显示的线性倍数。
- 伽马
调整音调曲线之间的对数关系。
- Reinhard
通过简单曲线保持整体图像亮度,使用非线性对比度,这会导致细节平滑和颜色精度下降。
- Hable
更好地保留暗区和亮区的信息reinhard代价是稍微使一切变暗。当细节保留比颜色和亮度准确性更重要时使用它。
- mobius
平滑映射超出范围的值,同时尽可能保留范围内材料的对比度和颜色。当颜色准确性比细节保留更重要时使用它。
默认值为无。
- param
调节色调映射算法。
这将影响以下算法:
- none
忽略。
- linear
指定拉伸时使用的比例因子。 默认值为1.0。
- gamma
指定函数的指数。 默认值为1.8。
- clip
指定在线性系数中加入的额外倍乘系数,之后再裁剪。 默认值为1.0。
- reinhard
指定显示峰值处的局部对比度系数。 默认值为0.5,这意味着在范围内的值会比裁剪时亮度约低一半。
- hable
忽略。
- mobius
指定从线性过渡到莫比乌斯变换的切换点。此点以下的所有值都被保证为1:1映射。值越高,结果越准确,但代价是损失亮的细节。 默认值为0.3,由于初始斜率陡峭,这样仍能较为准确地保留范围内的颜色。
- desat
对超过此亮度水平的高光应用去饱和处理。参数越高,保存的颜色信息越多。此设置有助于防止超高光中不自然的过曝颜色问题,使用平滑方式转为白色。这使图像更具自然感,但以减少超出范围颜色的信息为代价。
默认值为2.0,相对保守,仅应用于天空或直接阳光表面。设置为0.0将禁用此选项。
此选项仅在输入帧具有支持的颜色标记时有效。
- peak
用此值覆盖信号/标称值/参考峰值。当显示元数据中的嵌入峰值信息不可靠或从低范围映射到高范围时此功能很有用。
39.255 tpad
临时填充视频帧。
此滤镜接受以下选项:
- start
指定输入视频流前的延迟帧数。默认值为0。
- stop
指定输入视频流后的填充帧数。 设置为-1以无限期填充。默认值为0。
- start_mode
设置添加到流开头的帧类型。 可以是add或clone。 使用add添加纯色帧。 使用clone则添加与第一帧相同的克隆帧。 默认值为add.
- stop_mode
设置添加到流末尾的帧类型。 可以是add或clone。 使用add添加纯色帧。 使用clone则添加与最后帧相同的克隆帧。 默认值为add.
- start_duration, stop_duration
指定开始/停止延迟的持续时间。请参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的 Time duration 部分以了解接受的语法。 这些选项覆盖start和stop。默认值为0。
- color
指定填充区域的颜色。有关此选项的语法,请参阅(ffmpeg-utils)ffmpeg-utils 手册中的 "Color" 部分.
默认值为color“black”。
39.256 transpose
将输入视频的行与列互换并可选择翻转。
它接受以下参数:
- 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 trim
裁剪输入,使输出仅包含输入的一部分连续片段。
它接受以下参数:
- start
指定要保留部分的开始时间,即具有时间戳start的帧将是输出中的第一帧。
- end
指定要丢弃的第一帧的时间,即紧随时间戳end的帧将是输出中的最后一帧。
- start_pts
这与start相同,只是此选项以时间基单位而不是秒设置开始时间戳。
- end_pts
这与end相同,只是此选项以时间基单位而不是秒设置结束时间戳。
- duration
输出的最大持续时间(以秒为单位)。
- start_frame
应传递到输出的第一帧的编号。
- end_frame
应丢弃的第一帧的编号。
start, end,和duration是以时间持续时间的形式表示的;请参阅(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分了解接受的语法。
请注意,前两组开始/结束选项和duration选项查看帧时间戳,而_frame变量仅简单地计算通过过滤器的帧数。此外,请注意,此过滤器不会修改时间戳。如果希望输出的时间戳从零开始,请在修剪过滤器后插入一个setpts过滤器。
如果设置了多个开始或结束选项,此过滤器会尝试贪婪地保留所有符合至少一个指定限制的帧。为了仅保留同时符合所有限制的部分,可以链式展开多个修剪过滤器。
默认设置保留所有输入数据。因此,可以仅设置例如结束值来保留指定时间之前的所有内容。
示例:
- 丢弃除输入的第二分钟之外的所有内容:
ffmpeg -i INPUT -vf trim=60:120
- 仅保留第一秒:
ffmpeg -i INPUT -vf trim=duration=1
39.258 去预乘
使用第二流的第一个平面作为 alpha 通道对输入视频流应用 alpha 去预乘效果。
两个流必须具有相同的尺寸和像素格式。
过滤器接受以下选项:
- planes
设置将被处理的平面,未处理的平面将被复制。默认值为 0xf,将处理所有平面。
如果格式有 1 或 2 个组件,则亮度是位 0。 如果格式有 3 或 4 个组件: 对于 RGB 格式,位 0 是绿色,位 1 是蓝色,位 2 是红色; 对于 YUV 格式,位 0 是亮度,位 1 是色度-U,位 2 是色度-V。 如果存在,alpha 通道始终是最后一位。
- inplace
不需要第 2 个输入进行处理,而是使用输入流中的 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)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
表明更高的质量。每增加一级别,该值的速度大约会降低 2 倍。默认值是3
.- qp
强制常量量化参数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。
- codec
使用指定的编解码器代替 snow。
39.262 360 视频
在各种格式之间转换 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’
Pannini投影。
格式特定选项:
- h_fov
设置输出Pannini参数。
- ih_fov
设置输入Pannini参数。
- ‘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’
Lagrange9插值法。
- ‘cube’
- ‘cubic’
双三次插值法。
- ‘lanc’
- ‘lanczos’
Lanczos插值法。
- ‘sp16’
- ‘spline16’
Spline16插值法。
- ‘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
- 提取Equi-Angular Cubemap的背面视图:
ffmpeg -i input.mkv -vf v360=eac:flat:yaw=180 output.mkv
- 将以并排立体格式呈现的Equi-Angular Cubemap转换为矩形投影顶部-底部立体格式:
v360=eac:equirect:in_stereo=sbs:in_trans=1:ih_flip=1:out_stereo=tb
39.262.2 命令
此滤镜支持上述选项的子集作为命令.
39.263 vaguedenoiser
应用基于小波的去噪器。
它将视频输入中的每一帧转换到小波域,使用 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 varblur
使用第二个视频流设置模糊半径应用变量模糊滤镜。 第二个流必须具有相同的尺寸。
此滤镜接受以下选项:
- min_r
设置允许的最小半径。允许范围从 0 到 254。默认值为 0。
- max_r
设置允许的最大半径。允许范围从 1 到 255。默认值为 8。
- planes
设置要处理哪些平面。默认情况下使用所有平面。
此varblur
滤镜还支持framesync选项。
39.264.1 命令
此滤镜支持上述所有选项作为命令.
39.265 vectorscope
在二维图形中显示2个颜色分量值(称为向量示波器)。
此滤镜接受以下选项:
- mode, m
设置向量示波器模式。
它接受以下值:
- ‘gray’
- ‘tint’
灰度值在图形上显示,亮度越高表示在图上的某个位置有更多像素具有相同颜色分量值。这是默认模式。
- ‘color’
灰度值在图形上显示。不存在于视频帧中的周围像素值以设置的两种颜色分量的渐变形式绘制,第三种颜色分量固定。
x
andy
. The 3rd color component is static.- ‘color2’
视频帧中实际的颜色分量值显示在图形上。
- ‘color3’
类似于color2,但相同值的高频率
x
在图上的频率增加另一个颜色分量的值,默认情况下是亮度值。y
on graph increases value of another color component, which is luminance by default values ofx
andy
.- ‘color4’
视频帧中实际的颜色显示在图形上。如果两个不同颜色映射到同一位置,则选择图形中不存在颜色分量值更高的颜色。
- ‘color5’
灰度值在图形上显示。类似于
color
但选取第三种颜色分量的径向渐变。
- x
设置将在 X 轴上表示的颜色分量。默认值为
1
.- y
设置将在 Y 轴上表示的颜色分量。默认值为
2
.- intensity, i
设置颜色强度,用于模式:gray、color、color3和color5,以增加代表图中位置频率的颜色分量亮度。
- 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’
默认值为 auto。
- tint0, t0
- tint1, t1
设置灰度/色调向量示波器模式的颜色色调。默认情况下两个选项为零。 这意味着没有色调,输出将保持灰色。
39.266 vidstabdetect
分析视频的稳定性/去抖动。执行第1阶段,共2阶段,请参见vidstabtransform以进行第2阶段。
此滤镜生成一个包含相邻帧之间相对平移和旋转转换信息的文件,随后由vidstabtransform滤镜使用。
要启用此滤镜的编译,您需要配置 FFmpeg,如下所示:--enable-libvidstab
.
此滤镜接受以下选项:
- result
设置用于写入转换信息的文件路径。 默认值为transforms.trf.
- shakiness
设置视频的抖动程度以及摄像机的移动速度。它接受一个范围为1到10的整数,值为1表示小抖动,值为10表示强抖动。默认值为5。
- accuracy
设置检测过程的精度。它必须是一个范围为1到15的值。值为1表示低精度,值为15表示高精度。默认值为15。
- stepsize
设置搜索过程的步长。最小区域以一个像素分辨率扫描。默认值为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 vidstabtransform
视频稳定性/去抖动:阶段2,共2阶段, 请参见vidstabdetect以获取第1阶段。
读取每帧的转换信息文件并应用/补偿这些信息。结合vidstabdetect滤镜,这可以用于去抖动视频。另见http://public.hronopik.de/vid.stab这也很重要。 使用锐化滤镜,请参阅下文。
要启用此滤镜的编译,您需要使用以下配置选项配置FFmpeg--enable-libvidstab
.
39.267.1 选项
- input
设置用于读取变换的文件路径。默认值是transforms.trf.
- smoothing
设置用于对相机运动进行低通滤波的帧数(值*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)帧的数量和具有固定增量时间戳帧的数量。 如果存在具有可变增量的帧,将显示遇到的最小、最大和平均增量。
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 表达式
该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
- ‘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’
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描述的过程,并根据BBC研发部门Jim Easterbrook编写的去隔行算法实现,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,将显示所有3种(如果有)的颜色分量。
- 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 编织与双编织
The weave
字段基视频输入,并将每两个连续字段连接成单个帧,生成一个新双高度剪辑,帧率减半,帧数减半。
The 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
过滤器还支持framesync选项。
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: 用于高分辨率视频质量评估的加权感知峰值信噪比的低复杂度扩展," 在 Proc. IEEE Int. Conf. Acoustics, Speech, Sig. Process. (ICASSP), virt./online, May 2020.www.ecodis.de/xpsnr.htm
- C. R. Helmrich, S. Bosse, H. Schwarz, D. Marpe, 和 T. Wiegand, "研究扩展的感知加权峰值信噪比(XPSNR)对不同分辨率和 比特深度的视频压缩的影响," ITU Journal: ICT Discoveries, vol. 3, no. 1, pp. 65 - 72, May 2020.http://handle.itu.int/11.1002/pub/8153d78b-en
当使用例如此FFmpeg过滤器获取XPSNR评估结果并发布时, 强烈建议引用上述论文作为文档的来源。 该过滤器需要两段输入视频。第一输入被认为是(通常未失真的)参考 源,并保持不变地传递到输出,而第二输入是(失真的)测试信号。 除了比特深度之外,这两个视频输入必须具有相同的像素格式。 此外,为了获得最佳性能,建议将两段输入视频都以YCbCr颜色格式进行比较。
上述所获得的整体XPSNR值通过日志系统打印输出。 对于多色平面的输入,我们建议报告最小XPSNR平均值。
接受以下参数,其行为类似于psnr过滤器的参数:
- stats_file, f
如果指定,过滤器将使用指定文件保存每帧和每个颜色平面的XPSNR值。 当文件名等于"-"时,这些数据会发送到标准输出。
该过滤器还支持framesync选项。
39.283.1 示例
- 对两个1080p HD视频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 UHD视频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
如果设置为有效颜色,所有未使用的像素将以该颜色填充。 默认情况下,fill设置为none,因此被禁用。
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, Digital image enhancement and noise filtering by use of local statistics, 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 缩放比例
使用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手册.
- 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”,对于lanczos是滤波器抽头的数目。
- 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[=名称][:设备[,键=值...]]
初始化一个类型为cuda的新的硬件设备,名为name,使用给定的设备参数。
- -filter_hw_device 名称
将名为name的硬件设备传递给任何滤镜图中的所有滤镜。
有关详细信息请参见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色彩空间颜色/色度键滤镜。
此过滤器像普通的色键滤镜一样工作,但作用于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加速的色彩空间滤镜实现。
与软件色彩空间滤镜相比,它在功能上并不完整, 目前仅支持在jpeg/full和mpeg/limited范围之间进行颜色范围转换。
该过滤器接受以下选项:
- 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 缩放_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 缩略图_cuda
使用CUDA从连续帧序列中选择最具代表性的一帧。
该过滤器接受以下选项:
- n
设置要分析的帧批量大小;在一组n帧中,过滤器将从其中挑选一帧,然后处理下一批n帧直到结束。默认值为
100
.
由于过滤器会追踪整个帧序列,更大的n值会导致更高的内存使用,因此不推荐使用高值。
40.1.7.1 示例
- 从每n=150帧批次中提取缩略图,每批选择一帧。选中的帧然后用缩放_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 去隔行_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 缩放_npp
使用NVIDIA性能原语(libnpp)对CUDA视频帧进行缩放和/或像素格式转换。设置输出宽度和高度的方式与缩放过滤器相同。
接受以下附加选项:
- format
输出CUDA帧的像素格式。如果设置为字符串"same"(默认),则保持输入格式。注意,硬件帧的自动格式协商和转换尚未支持。
- interp_algo
用于调整大小的插值算法之一。以下值之一:
- nn
最邻近。
- linear
- cubic
- cubic2p_bspline
两参数双三次(B=1,C=0)。
- cubic2p_catmullrom
2参数三次样条 (B=0, C=1/2)
- cubic2p_b05c03
2参数三次样条 (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
指定何时评估width和height表达式。它接受以下值:
- ‘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
.- 时可用
输入帧的显示时间戳,以秒为单位表示。 仅在使用
eval=frame
.- 时可用
帧在输入流中的位置(字节偏移量),如果此信息不可用或无意义(例如,在生成的视频中),则为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
.- 时可用
主输入帧的显示时间戳,以秒为单位表示。 仅在使用
eval=frame
.- 时可用
帧在主输入流中的位置(字节偏移量),如果此信息不可用或无意义(例如,在生成的视频中),则为NaN。 仅在使用
eval=frame
.
时可用
- 40.2.2.1 示例
'scale2ref_npp[b][a];[a][b]overlay_cuda'
- 在叠加之前,将字幕流(b)缩放到与主视频(a)的尺寸一致。
[logo-in][video-in]scale2ref_npp=w=oh*mdar:h=ih/10[logo-out][video-out]
将 logo 缩放到视频高度的1/10,同时保留其显示宽高比。
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
将 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
的值 对于 luma 和 alpha 平面,以及min(cw,ch)/2
的值 对于 chroma 平面。默认值为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
指定对相应平面应用 boxblur 滤镜的次数。
默认值为luma_power2。如果未指定,chroma_power和alpha_power默认与luma_power.
相应的值相同。
41.2.1 示例
应用 boxblur 滤镜,将输出的每个像素设置为 box 半径luma_radius, chroma_radius, alpha_radius分别用于每个平面。滤镜将luma_power, chroma_power, alpha_power次应用到相应的平面。对于图像边缘的像素,半径不会超出图像边界,因此不会在计算中使用超出范围的坐标。
- 应用 boxblur 滤镜,将 luma、chroma 和 alpha 半径设置为 2,将 luma、chroma 和 alpha 功率设置为 3。滤镜将在每个图像平面以半径 2 运行 3 次。
-i INPUT -vf "hwupload, boxblur_opencl=luma_radius=2:luma_power=3, hwdownload" OUTPUT -i INPUT -vf "hwupload, boxblur_opencl=2:3, hwdownload" OUTPUT
- 应用 boxblur 滤镜,将 luma 半径设置为 2,luma 功率设置为 1,chroma 半径设置为 4,chroma 功率设置为 5,alpha 半径设置为 3,alpha 功率设置为 7。
对于亮度平面,将运行一次2x2的框半径。
对于色度平面,将以4x4的框半径运行5次。
对于透明度平面,将以3x3的框半径运行7次。
-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
,即使用所有八个像素。定位在
x
:1 2 3
的局部3x3坐标区域的标志。
6 7 8
41.5.1 示例
- 使用threshold0设置为30,threshold1设置为40,threshold2设置为50,coordinates设置为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
,即使用所有八个像素。定位在
x
:1 2 3
的局部3x3坐标区域的标志。
6 7 8
41.7.1 示例
- 使用threshold0设置为30,threshold1设置为40,threshold2设置为50,coordinates设置为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
指定一个表达式,用于决定添加边距后的输出图像大小。如果width或height的值为0,则对应的输入尺寸将用于输出。
这个width表达式可以引用由height表达式设置的值,反之亦然。
默认的width和height值为0。
- x
- y
指定偏移量,以相对于输出图像的上/左边界,将输入图像放置在填充区域内。
这个x表达式可以引用由y表达式设置的值,反之亦然。
默认的x和y值为0。
如果x或y计算结果为负数,它们会被修改,以使输入图像居中于填充区域内。
- color
指定填充区域的颜色。有关此选项的语法,请查看(ffmpeg-utils)"Color" 部分在 ffmpeg-utils 手册中的描述。.
- aspect
可以填充到一个宽高比,而不是一个分辨率。
这个width, height, x和y选项的值是包含以下常量的表达式:
- in_w
- in_h
输入视频的宽度和高度。
- iw
- ih
这些与in_w和in_h.
- out_w
- out_h
表达式所指定的输出宽度和高度(填充区域的大小)。width and height expressions.
- ow
- oh
同样适用于out_w和out_h.
- x
- y
由x和y表达式指定的x和y偏移量,或如果尚未指定则为NAN。
- 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 示例
- 使用缩放设置为2,增量设置为10应用Prewitt算子。
-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
过滤器也支持framesync选项。
程序源文件必须包含具有给定名称的内核函数,该内核函数将为输出的每个平面运行一次。每次对平面的运行将作为一个单独的二维全局 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
使用第2个:X映射和第3个:Y映射输入视频流重新映射像素。
目标位置 (X, Y) 的像素将从源位置 (x, y) 提取,其中 x = Xmap(X, Y),y = Ymap(X, Y)。如果映射值超出范围,目标像素将使用零值。
X映射和Y映射输入视频流必须具有相同的维度。输出视频流将具有X映射/Y映射视频流的维度。 X映射和Y映射输入视频流采用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交叉算子,设置缩放值为2,增量值为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算子,设置缩放值为2,增量值为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
相对于第一个视频设置过渡的开始时间。
程序源文件必须包含一个具有指定名称的内核函数,该函数将针对输出的每个平面运行一次。每次对一个平面的运行都以一个单独的2D全局NDRange(每个生成的像素对应一个工作项)进行入队。因此,每个工作项的全局ID偏移就是目标图像中像素的坐标。
内核函数需要接受以下参数:
- 目标图像,__write_only image2d_t.
这个图像将成为输出;内核应写入其所有部分。
- 第一个源图像,__read_only image2d_t。
第二个源图像,__read_only image2d_t.
这些是每个输入上最新的图像。内核可以从它们中读取以生成输出,但它们不能被写入。
- 过渡进度,float。此值始终介于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’作为‘w’,‘overlay_ih*w/overlay_iw’作为‘h’。
表达式可以包含以下参数:
- 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)的位置。
输入的颜色通道的内存布局相同,但覆盖层有额外的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
设置输出内容亮度水平信息。它接受2个用空格分隔的值,第一个输入是最大亮度水平,第二个输入是最大平均亮度水平。
它对于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
时,绘制的盒子的像素将覆盖视频的颜色和alpha像素。默认值是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的新硬件设备,名为名称,使用提供的设备参数和选项键=值。支持以下选项:
- debug
如果设置为1,则开启验证层。
- linear_images
分配线性图像。不适用于解码。
- disable_multiplane
禁用多平面图像。不适用于解码。
- -filter_hw_device 名称
将名为名称的硬件设备传递给任何滤镜图中的所有滤镜。
有关更详细的信息,请参见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
filter takes two input streams and outputs one
stream, the first input is the "top" layer and second input is
"bottom" layer. By default, the output terminates when the longest input terminates.
以下是接受的选项的说明。
- 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
设置水平西格玛,高斯模糊的标准偏差。默认值为
0.5
.- sigmaV
设置垂直西格玛,如果为负值将与
sigma
相同。 默认值为-1
.- planes
设置要过滤的平面。默认情况下所有平面都被过滤。
- size
设置水平轴上的内核大小。默认值为
19
.- sizeV
设置垂直轴上的内核大小。默认值为
0
, 对应于与大小.
43.10 nlmeans_vulkan
使用非局部平均算法对帧去噪,在GPU上通过Vulkan实现。 支持更多的像素格式nlmeans或nlmeans_opencl,包括对Alpha通道的支持。
滤镜接受以下选项。
- s
设置所有分量的去噪强度。默认值为1.0。必须在范围[1.0, 100.0]内。
- p
设置所有平面的块大小。默认值为7。必须为范围[0, 99]内的奇数。
- r
设置研究大小。默认值为15。必须为范围[0, 99]内的奇数。
- t
设置并行度。默认值为36。必须是范围[1, 168]内的数字。 更大的值可能加快处理速度,但会占用更多VRAM。 较小的值会减慢速度,但减少VRAM使用。 仅在支持原子浮点操作的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(在libavutil/pixfmt.h中检查枚举 AVPixelFormat 定义),此例子等同于:
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已设置,则它必须包含指定模式字符串的宽度,并且指定的模式将居中于更大的行。
如果未指定文件名或模式字符串,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
使用苹果OSX上的CoreImage API通过GPU生成的视频源。
此视频源是的一个专门版本coreimage视频滤镜。 在应用的滤镜链开头使用core image生成器来生成内容。
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(1)手册中的接受语法。
如果未指定,或表达的持续时间为负,则视频应该永远生成。
此外,所有的选项都可用coreimage视频滤镜。 可以使用完整的滤镜链对生成的输入进行进一步处理,而无需CPU主机传输。详情请参阅coreimage文档和示例。
45.3.1 示例
- 使用CIQRCodeGenerator为FFmpeg主页创建二维码,以下是为苹果标准bash shell提供的完整且转义的命令行:
ffmpeg -f lavfi -i coreimagesrc=s=100x100:filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.png
此示例等同于中的QRCode示例coreimage不需要使用nullsrc视频源。
45.4 ddagrab
通过桌面复制API捕获Windows桌面。
过滤器专门返回D3D11硬件帧,用于GPU上的编码或处理。因此,对于任何种类的软件处理,都需要显式的hwdownload。
它接受以下选项:
- output_idx
捕获的DXGI输出索引。
通常对应于Windows赋予屏幕的索引减一,因此从0开始。
默认值为输出0。
- draw_mouse
是否绘制鼠标光标。
默认值为true。
只影响硬件光标。如果游戏或应用程序渲染它自己的光标,它将始终被捕获。
- framerate
桌面捕获的最大帧率——连续帧之间的间隔不会小于帧率的倒数。当dup_frames为真(默认值)且桌面更新不够频繁时,滤镜将复制先前的帧。请注意没有进行背景缓存,因此如果滤镜没有被足够频繁地轮询,则实际帧间间隔可能会显著增大。
默认值为30 FPS。
- video_size
指定捕获视频的大小。
默认值为屏幕的全尺寸。
如果比屏幕尺寸小,则从底部/右侧裁剪。
- offset_x
捕获视频的水平偏移量。
- offset_y
捕获视频的垂直偏移量。
- output_fmt
所需的滤镜输出格式。 默认值为8位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(1)手册中的接受语法。
如果未指定或表达的持续时间为负,则视频将被认为是永远生成的。
- 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(1)手册中的时间持续时间部分以获取可接受的语法。
如果未指定或表达的持续时间为负,则视频将被无限生成。
- 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位用于编码活细胞在每个邻居活细胞数量下的下一个状态, 低位用于指定新细胞“诞生”的规则。更高的位编码更多的邻居活细胞。 例如,数字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
设置衰变颜色,适用于绝对死亡和衰变的细胞。
关于这3个颜色选项的语法,详见(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的默认值是"黑色",background_color的默认值是"白色"。
有关颜色选项语法的详细信息,请参见(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*N
xN*N*N
像素的图片,作为3D查找表的身份矩阵。每个组件采用1/(N*N)
尺度编码。- color, c
指定源的颜色,仅适用于
color
源。有关此选项的语法,请查看(ffmpeg-utils)手册中的“颜色”部分.- size, s
指定源视频的大小。有关此选项的语法,请查看(ffmpeg-utils)手册中的“视频大小”部分。 默认值为
320x240
.此选项在
allrgb
,allyuv
和haldclutsrc
滤镜中不可用。- rate, r
指定生成视频的帧率,即每秒生成的帧数。必须是以下格式的字符串frame_rate_num/frame_rate_den,整数,浮点数或有效视频帧率缩写形式。默认值为"25"。
- duration, d
设置生成视频的持续时间。请参阅(ffmpeg-utils)ffmpeg-utils(1)手册中的“持续时间”部分以获取接受的语法。
如果未指定,或表达的持续时间为负值,则视频将被视为永久生成。
由于帧率用作时间基准,包括最后一帧在内的所有帧都将具有其完整的持续时间。如果指定的持续时间不是帧持续时间的倍数,则将向上舍入。
- sar
设置生成视频的采样像素宽高比。
- alpha
指定背景的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 命令
The 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); }
- 生成一个谢尔宾斯基地毯图案,每帧平移一个像素。
__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
生成一个谢尔宾斯基地毯/三角形分形,并随机四处平移。
此源接受以下选项:
- 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)ffmpeg-utils(1)手册中的时间持续时间部分了解可接受的语法。
如果未指定,或者表达的持续时间为负值,视频将默认生成无限时长。
- sar
设置源视频的样本纵横比。
- precision
设置用于正弦计算的查找表的精度(以位为单位)。默认值为10。允许范围为4到16。
- xo
设置输出信号的水平轴偏移量。默认值为0。
- yo
设置输出信号的垂直轴偏移量。默认值为0。
- to
设置输出信号的时间轴偏移量。默认值为0。
- k0
设置零阶常数,添加到信号相位。默认值为0。
- kx
设置一阶横轴相位因子倍增器。默认值为0。
- ky
设置一阶纵轴相位因子倍增器。默认值为0。
- kt
设置一阶时间轴相位因子倍增器。默认值为0。
- kxt, kyt, kxy
设置空间轴和时间轴组合的相位因子倍增器。默认值为0。
- kx2
设置二阶水平轴相位因子倍增器。默认值为0。
- ky2
设置二阶垂直轴相位因子倍增器。默认值为0。
- kt2
设置二阶时间轴相位因子倍增器。默认值为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
- 生成圆形zoneplate:
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
检测 1 秒的单声道,容差为 0.001: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 计时测试,计时基准测试
过滤器图的一部分基准测试。
筛选器接受以下选项:
- action
开始或停止计时器。
可用值为:
- ‘start’
获取当前时间,设置为帧元数据(使用键
lavfi.bench.start_time
),并将帧转发到下一个过滤器。- ‘stop’
获取当前时间并从
lavfi.bench.start_time
输入帧元数据中获取元数据以获得时间差。时间差、平均值、最大值和最小值(分别为t
,avg
,max
和min
)随后打印出来。时间戳以秒为单位表示。
47.8.1 示例
- 基准测试选择性颜色过滤器:
bench=start,selectivecolor=reds=-.2 .12 -.49,bench=stop
47.9 拼接
将音频和视频流连接起来,一个接一个地拼接。
该过滤器适用于经过同步的音频和视频流片段。所有片段必须具有相同数量的每种类型的流,这也将是输出的流数量。
筛选器接受以下选项:
- n
设置片段数。默认值为2。
- v
设置输出视频流的数量,也即每个片段中的视频流数量。默认值为1。
- a
设置输出音频流的数量,也即每个片段中的音频流数量。默认值为0。
- unsafe
激活不安全模式:如果片段格式不同,不失败。
筛选器有v+a输出:首先是v视频输出,然后是a音频输出。
有nx(v+a) 输入:首先是第一个片段的输入,按输出顺序排列,然后是第二个片段的输入,依此类推。
相关流的持续时间并不总是完全相同,原因包括编解码器的帧大小或不精确的编辑。因此,相关的同步流(例如视频及其音轨)应同时拼接。拼接过滤器将使用每个片段中最长流的持续时间(除最后一个外),并在必要时用静音填补较短的音频流。
为了使此过滤器正常工作,所有片段必须从时间戳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
- 拼接两个部分,分别处理音频和视频,使用(amovie)来源,并调整分辨率:
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
).
过滤器只能分析样本格式为双精度浮点型的流。输入流将被转换为此规范(如果需要)。用户可能需要在此过滤器之后插入aformat和/或aresample过滤器以获得原始参数。
此过滤器还具有视频输出(请参见video选项)以及实时图表,用于观察响度变化。图形包含上述记录的消息,因此在设置此选项时不会再打印,除非设置了详细的日志记录。主要图形区域包含短时响度(3秒的分析),右侧的量表用于显示瞬时响度(400毫秒),但可以选择配置为显示短时响度(请参见gauge).
绿色区域标记了一个目标响度范围(默认值为-23LUFS,可通过target).
更多关于响度推荐 EBU R128 的信息见http://tech.ebu.ch/loudness.
过滤器接受以下选项:
- 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’
详细日志记录级别
默认情况下,日志记录级别设置为info。如果video或metadata选项已设置,它将切换到verbose.
- 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
受测LRA低值的只读导出值(单位:LUFS)。
- lra_high
受测LRA高值的只读导出值(单位:LUFS)。
- 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
适用于音频。
这些滤镜从多个输入读取帧,并将排队最久的帧发送到输出。
输入流必须有明确的、单调递增的帧时间戳值。
为了向输出提交一帧,这些滤镜需要为每个输入排队至少一帧,所以它们无法在某个输入尚未结束并且不会接收输入帧的情况下工作。
例如,考虑一个输入是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 延迟, 音频延迟
测量滤镜延迟。
报告先前滤镜的滤镜延迟,音频滤镜以音频样本延迟数计算,视频滤镜以视频帧延迟数计算。
在输入流结束时,滤镜将报告前一个运行滤镜中测得的最小和最大延迟。
47.13 元数据, 音频元数据
操作帧的元数据。
此滤镜接受以下选项:
- 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
值被解释为字符串,当元数据值以- ‘less’
选项字符串开头时返回真。
value
.- ‘equal’
值被解释为浮点数,当元数据值小于
value
时返回真。- ‘greater’
值被解释为浮点数,当
value
.- ‘expr’
与元数据值相等时返回真。
expr
值被解释为浮点数,当选项- ‘ends_with’
表达式计算为真时返回真。
value
值被解释为字符串,当元数据值以
- expr
选项字符串结尾时返回真。
function
设置在expr
设置为- VALUE1, FRAMEVAL
时使用的表达式。 此表达式通过eval API求值,并可包含以下常量:
value
元数据键的浮点表示值- VALUE2, USERVAL
用户通过
value
选项提供的value
的浮点表示值。
- file
如果在
print
模式中指定,则输出会写入指定的文件中。除了普通的文件名,还可以指定任何可写的URL。文件名“-”是标准输出的简写。如果file
选项未设置,输出会以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 权限, 音频权限
设置输出帧的读/写权限。
这些滤镜主要面向开发者,用于测试过滤器图中的直接路径。
筛选器接受以下选项:
- mode
选择权限模式。
它接受以下值:
- ‘none’
什么都不做。这是默认设置。
- ‘ro’
将所有输出帧设置为只读。
- ‘rw’
将所有输出帧设置为可直接写入。
- ‘toggle’
如果帧是可写的则设置为只读,若是只读则设置为可写。
- ‘random’
随机设置每个输出帧为只读或可写。
- seed
为随机模式设置种子,必须是一个介于
0
和UINT32_MAX
之间的整数。如果未指定或明确设置为-1
,则筛选器将尽力尝试使用一个良好的随机种子。
注意:在权限筛选器和后续筛选器之间插入自动筛选器时,后续筛选器可能无法按预期接收到权限。在权限/权限筛选器之前插入格式或音频格式筛选器可以避免此问题。
47.15 实时,实时音频
减缓过滤以大致匹配实时。
这些筛选器将暂停过滤一段可变时间,以使输出速率与输入时间戳匹配。它们类似于re选项到ffmpeg
.
它们接受以下选项:
- limit
暂停的时间限制。任何超过该时间的暂停将被视为时间戳不连续并重置计时器。默认值为2秒。
- speed
处理的速度因子。值必须是大于零的浮点数。值大于1.0将导致比实时处理更快的速度,而值小于1.0则会减慢处理速度。限制会自动相应调整。默认值是1.0。
无法通过这些筛选器实现比可能的处理速度更快的速度。
47.15.1 命令
两个筛选器都支持上述所有选项作为命令.
47.16 分段,音频分段
将单个输入流拆分为多个流。
此筛选器执行与连接筛选器相反的操作。
segment
作用于视频帧,asegment
作用于音频样本。
此筛选器接受以下选项:
- timestamps
由”|”分隔的输出分段时间戳。第一个段将从输入流的开头开始。最后一个段将运行至输入流的末尾。
- frames, samples
分割段的确切帧/样本计数。
在所有情况下,每个段前加上’+’将使其相对于前一段进行设置。
47.16.1 示例
- 将输入音频流拆分为三个输出音频流,第一个存储在起始输入音频流处,第二个存储在第60秒处,最后一个存储在输入音频流第150秒处:
asegment=timestamps="60|150"
47.17 选择,音频选择
选择要传递到输出的帧。
此筛选器接受以下选项:
- expr, e
设置表达式,对每个输入帧进行评估。
如果表达式求值为零,则该帧会被丢弃。
如果评估结果为负数或NaN,则帧被发送到第一个输出;否则它被发送到索引为
ceil(val)-1
的输出,假设输入索引从0开始。例如值
1.2
对应于索引为ceil(1.2)-1 = 2-1 = 1
的输出,即第二个输出。- 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
连接解复用器可以通过设置起点和终点选择连接输入文件的一部分,但输出包可能不完全包含在所选间隔内。通过使用此变量,可以跳过连接解复用器生成的未完全包含在所选间隔中的帧。
这是通过将帧PTS与lavf.concat.start_time和lavf.concat.duration包元数据值进行比较而实现的,这些值也存在于解码帧中。
变量concatdec_select为-1,如果帧PTS至少为start_time 并且持续时间元数据丢失或者帧PTS小于 start_time + duration;否则为0。如果start_time元数据丢失,则为NaN。
这基本上意味着,如果输入帧的PTS处于连接解复用器设置的间隔内,则该帧会被选中。
- iw (video only)
表示输入视频帧的宽度。
- ih (video only)
表示输入视频帧的高度。
- view (video only)
多视图视频的视图ID。
选择表达式的默认值为"1"。
47.17.1 示例
- 选择输入中的所有帧:
select
上面的示例与以下内容相同:
select=1
- 跳过所有帧:
select=0
- 仅选择关键帧:
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选项,或通过文件中指定的filename选项的方式来提供命令的具体说明。
这些滤镜接受以下选项:
- 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]
。
目标指定命令的目标,通常是滤镜类的名称或某个具体滤镜实例的名称。
命令指定目标滤镜的命令名称。
参数是可选的,指定给定命令.
的可选参数列表。#
until the end of line,
are ignored and can be used to annotate comments.
以下是命令说明语法的简化 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)
- 应用±100 TB单位的随机抖动效果:
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
过滤器标记输出帧的颜色范围属性。
它不改变输入帧,仅设置相应属性,
影响后续滤镜如何处理该帧。
此滤镜接受以下选项:
- 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手册的"视频大小"部分。 默认值为
1920x1080
.- fps, rate, r
设置输出帧率。默认值为
25
.- bar_h
设置条形图高度。必须为偶数。默认值为
-1
它会自动计算条形图高度。- axis_h
设置轴高度。必须为偶数。默认值为
-1
它会自动计算轴高度。- sono_h
设置声谱图高度。必须为偶数。默认值为
-1
它会自动计算声谱图高度。- fullhd
设置全高清分辨率。此选项已弃用,使用大小, s代替。默认值为
1
.- sono_v, volume
指定声谱图音量表达式。它可以包含变量:
- bar_v
的条形_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
指定用于 freetype 绘制坐标轴的字体文件。如果未指定,则使用嵌入字体。请注意,使用字体文件或嵌入字体绘图未实现自定义basefreq和endfreq,请使用axisfile选项代替。
- font
指定 fontconfig 模式。这优先级低于fontfile。模式中的
:
可能会被替换为|
以避免不必要的转义。- 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
指定用于绘制坐标轴的图片文件。此选项会覆盖fontfile和fontcolor选项。
- axis, text
启用/禁用在坐标轴上绘制文本。如果设置为
0
,则禁用坐标轴绘图,并忽略fontfile和axisfile选项。 默认值是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
设置输出中将使用的最低频率。 默认为
20
Hz。- max
设置输出中将使用的最高频率。 默认为
20000
Hz。实际频率上限取决于输入音频的采样率,并且当设置值超过奈奎斯特频率时会对该值强制执行。- 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’
每个通道使用维里迪斯配色方案显示
- ‘plasma’
每个通道使用等离子配色方案显示
- ‘cividis’
每个通道使用西维迪斯配色方案显示
- ‘terrain’
每个通道使用地形配色方案显示
默认值为‘channel’.
- scale
指定用于计算强度颜色值的比例。
接受以下值:
- ‘lin’
线性
- ‘sqrt’
平方根,默认
- ‘cbrt’
立方根
- ‘log’
对数
- ‘4thrt’
4次根
- ‘5thrt’
5次根
默认值为‘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)"视频尺寸"部分的ffmpeg-utils手册。 默认值为
4096x2048
.- mode
指定显示模式。
接受以下值:
- ‘combined’
所有通道显示在同一行
- ‘separate’
所有通道显示在单独的行
默认值为‘combined’.
- color
指定显示颜色模式。
接受以下值:
- ‘channel’
每个通道用不同的颜色显示
- ‘intensity’
每个通道使用相同的配色方案显示
- ‘rainbow’
每个通道使用彩虹配色方案显示
- ‘moreland’
每个通道使用莫兰配色方案显示
- ‘nebulae’
每个通道使用星云配色方案显示
- ‘fire’
每个通道使用火焰配色方案显示
- ‘fiery’
每个通道使用炽热配色方案显示
- ‘fruit’
每个通道使用水果配色方案显示
- ‘cool’
每个通道使用冷色配色方案显示
- ‘magma’
每个通道使用岩浆配色方案显示
- ‘green’
每个通道使用绿色配色方案显示
- ‘viridis’
每个通道使用维里迪斯配色方案显示
- ‘plasma’
每个通道使用等离子配色方案显示
- ‘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
设置使用带有alpha分量的像素格式输出时的不透明度强度。
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未明确指定时设置。
- 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,然后将视频频谱重新合成为音频:
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];
- 使用创建输入音频的5份副本
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
。
在此示例中,最后一个叠加过滤器有一个实例名。所有其他过滤器将有默认实例名。
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 音乐
这与视频源相同,只是它默认选择音频流。
48.2 音视频同步测试
生成音视频同步测试。
生成的流会定期显示闪烁的视频帧并发出音频哔声。 可用于检查音视频同步问题。
它接受以下选项:
- 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 视频
从电影容器读取音频和/或视频流。
它接受以下参数:
- filename
要读取的资源名称(不一定是文件;它也可以是通过某些协议访问的设备或流)。
- format_name, f
指定读取电影所假定的格式,可以是容器或输入设备的名称。如果未指定,格式将根据视频名称或通过探测来猜测。
- seek_point, sp
指定以秒为单位的查找点。帧将从此查找点开始输出。该参数用
av_strtod
计算,因此数值可能带一个 SI 后缀。默认值为 "0"。- streams, s
指定要读取的流。可以指定多个流,用 "+" 分隔。源将按相同顺序具有这么多输出。语法在(ffmpeg) "流说明符" 部分中进行了解释。两个特殊名称 "dv" 和 "da" 分别指定默认(最适合的)视频和音频流。默认是 "dv",如果过滤器被调用为 "音乐",则为 "da"。
- stream_index, si
指定要读取的视频流的索引。如果值为 -1,将自动选择最适合的视频流。默认值为 "-1"。已弃用。如果过滤器被称为 "音乐",则会选择音频而不是视频。
- loop
指定按顺序将流读取多少次。如果值为 0,流将无限循环。 默认值为 "1"。
请注意,当电影循环时,源时间戳不会改变,因此它会生成非单调增加的时间戳。
- discontinuity
指定帧之间的时间差,如果大于该值,则时间点会被视为时间戳不连续,由调整后续时间戳来修复。
- dec_threads
指定用于解码的线程数。
- format_opts
为打开的文件指定格式选项。格式选项可以指定为键=值对,用“:”分隔。以下示例展示了如何添加协议白名单和协议黑名单选项:
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 示例
- 跳过 AVI 文件 in.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 命令
电影和音乐支持以下命令:
- 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
到配置以启用它。
49.2 AMD AMF/VCE
FFmpeg 可以使用 AMD 高级媒体框架(AMF)库,利用硬件上的视频编码引擎 (VCE) 加速 H.264 和 HEVC(仅限 Windows)编码。
要启用支持,您必须从https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git.
获取 AMF 框架头文件(版本 1.4.9+)。AMF/
在系统包含路径中创建一个AMF/amf/public/include/
目录,并将内容复制到该目录中。
然后用--enable-amf
.
配置 FFmpeg。初始化 amf 编码器的顺序如下: 1)尝试通过 dx11 初始化(仅限 Windows) 2)尝试通过 dx9 初始化(仅限 Windows) 3)尝试通过 vulkan 初始化
在Linux上使用h.264(AMD VCE)编码器需要安装amdgru-pro版本19.20+和amf-amdgpu-pro包(amdgru-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假定与使用MSVC构建的32位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 source archive"。使用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 Game Music Emu
FFmpeg可以使用Game Music Emu库读取受支持的视频游戏音乐文件格式中的音频。传递--enable-libgme
到配置中以启用它。请参阅https://bitbucket.org/mpyne/game-music-emu/overview.
49.10 Intel QuickSync Video
FFmpeg可以使用Intel QuickSync Video (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是一种窄带语音编解码器,Google已将其作为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
到配置中以启用 libjxl 封装器。
49.16 libvpx
FFmpeg 可以使用 libvpx 库进行 VP8/VP9 的解码和编码。
访问http://www.webmproject.org/并按照安装库的说明进行操作。然后传递--enable-libvpx
到配置中以启用它。
49.17 ModPlug
FFmpeg 可以使用来自 Modplug-XMMS 的这个库读取 MOD 类型的音乐文件。参见https://github.com/Konstanty/libmodplug。传递--enable-libmodplug
到配置中以启用它。
49.18 OpenCORE、VisualOn 和 Fraunhofer 库
基于 Google Android 源码,OpenCore、VisualOn 和 Fraunhofer 库提供了许多音频编解码器的编码器。
OpenCORE 和 VisualOn 库使用 Apache License 2.0 许可(参见http://www.apache.org/licenses/LICENSE-2.0了解详情),与 LGPL 版本 2.1 和 GPL 版本 2 不兼容。你必须通过传递--enable-version3
到配置中升级 FFmpeg 的许可证至 LGPL 版本 3(如果启用了 GPL 组件,则需升级至 GPL 版本 3)才能使用它。
Fraunhofer AAC 库的许可与 GPL 不兼容。因此,对于 GPL 构建,必须传递--enable-nonfree
到配置中才能使用它。据我们所知,它与 LGPL 是兼容的。
49.18.1 OpenCORE AMR
FFmpeg 可以使用 OpenCORE 库进行 AMR-NB 的解码/编码和 AMR-WB 的解码。
访问http://sourceforge.net/projects/opencore-amr/并按照安装库的说明进行操作。然后传递--enable-libopencore-amrnb
和/或--enable-libopencore-amrwb
到配置中以启用它们。
49.18.2 VisualOn AMR-WB 编码库
FFmpeg 可以使用 VisualOn AMR-WBenc 库进行 AMR-WB 编码。
访问http://sourceforge.net/projects/opencore-amr/并按照安装库的说明进行操作。然后传递--enable-libvo-amrwbenc
到配置中以启用它。
49.18.3 Fraunhofer AAC 库
FFmpeg 可以使用 Fraunhofer AAC 库进行 AAC 的解码和编码。
访问http://sourceforge.net/projects/opencore-amr/并按照安装库的说明进行操作。然后传递--enable-libfdk-aac
到配置中以启用它。
49.18.4 LC3 库
FFmpeg 可以使用 Google LC3 库进行 LC3 的解码与编码。
访问https://github.com/google/liblc3/并按照安装库的说明进行操作。然后传递--enable-liblc3
到配置中以启用它。
49.19 OpenH264
FFmpeg 可以使用 OpenH264 库进行 H.264 的解码和编码。
访问http://www.openh264.org/并按照安装库的说明进行操作。然后传递--enable-libopenh264
到配置中以启用它。
对于解码,此库比 libavcodec 内置解码器限制更多;目前该库缺乏对解码 B 帧和其他 main/high profile 特性的支持。(目前仅支持约束基线型和 CABAC。)使用它主要用于测试以及利用 Cisco 的专利许可协议(参见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 编码器)进行视频编码。
访问https://github.com/xiph/rav1e/并按照说明构建 C 库。要启用在 FFmpeg 中使用 rav1e,请传递--enable-librav1e
到./configure.
49.22 SVT-AV1
FFmpeg 可以使用 Scalable Video Technology for AV1 库进行 AV1 编码。
访问https://gitlab.com/AOMediaCodec/SVT-AV1/并按照安装库的说明进行操作。然后传递--enable-libsvtav1
到配置中以启用它。
49.23 TwoLAME
FFmpeg 可以使用 TwoLAME 库进行 MP2 编码。
访问http://www.twolame.org/并按照安装库的说明进行操作。然后传递--enable-libtwolame
到配置中以启用它。
49.24 VapourSynth
FFmpeg 可以读取 VapourSynth 脚本作为输入。要启用支持,请传递--enable-vapoursynth
到配置中。Vapoursynth 通过pkg-config
检测。支持版本 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
到配置中以启用它。
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
到配置中以启用它。
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 高速基础视频编码器 (XEVE)
FFmpeg 可以使用 XEVE 库进行 EVC 视频编码。
访问https://github.com/mpeg5/xeve并按照安装 XEVE 库的说明操作。然后传递--enable-libxeve
到配置以启用它。
49.30 高速基础视频解码器 (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 Technologies 格式,用于某些游戏。 | |
8088flex TMV | X | ||
AAX | X | 用于有声书的 Audible 增强音频格式。 | |
AA | X | Audible 格式 2、3 和 4,用于有声书。 | |
ACT 语音 | X | 包含 G.729 音频 | |
Adobe Filmstrip | X | X | |
音频 IFF (AIFF) | X | X | |
美国激光游戏 MM | X | 多媒体格式,用于诸如 Mad Dog McCree 的游戏。 | |
3GPP AMR | X | X | |
Amazing Studio 压缩动画文件 | X | 多媒体格式,用于《心灵黑暗》游戏。 | |
Apple HTTP 实时流 | X | ||
Artworx 数据格式 | X | ||
Interplay ACM | X | 音频格式,仅用于某些 Interplay 游戏。 | |
ADP | X | 任天堂 Gamecube 上使用的音频格式。 | |
AFC | X | 任天堂 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 | 在任天堂 WiiU 上使用的音频格式(基于 BRSTM)。 | |
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 光盘使用的视频格式。 | |
Phantom Cine | X | ||
Commodore CDXL | X | Amiga CD 视频格式。 | |
核心音频格式 | X | X | Apple 核心音频格式。 |
CRC 测试格式 | X | ||
Creative Voice | X | X | 为 Sound Blaster Pro 创建。 |
CRYO APC | X | CRYO Interactive Entertainment 游戏中使用的音频格式。 | |
D-Cinema 音频 | X | X | |
Deluxe Paint 动画 | X | ||
DCSTR | X | ||
DFA | X | 此格式用于 Chronomaster 游戏 | |
DirectDraw 表面 | X | ||
DSD 流文件 (DSF) | X | ||
DV 视频 | X | X | |
DXA | X | 此格式用于 Feeble Files 游戏的非 Windows 版本以及重新打包用于 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 在 The Longest Journey 等游戏中使用的音频格式。 | |
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,由 Thomson Grass Valley 播放服务器使用。 |
HNM | X | 仅支持版本 4,用于 Cryo Interactive 制作的一些游戏。 | |
iCEDraw 文件 | X | ||
ICO | X | X | Microsoft 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 Systems ClearVideo | X | 仅限I帧 | |
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’s Audio | 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 | ||
材料交换格式 (MXF) | X | X | SMPTE 377M,供D-Cinema、广播行业使用。 |
材料交换格式 (MXF),D-10 映射 | X | X | SMPTE 386M,D-10/IMX 映射。 |
NC摄像头视频源 | X | NC (AVIP NC4600) 摄像头流 | |
NIST语音头资源 | 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 | ||
Sega FILM/CPK | X | X | 用于许多Sega Saturn游戏机游戏。 |
Silicon Graphics电影格式 | X | ||
Sierra SOL | X | .sol文件用于Sierra在线游戏。 | |
Sierra VMD | X | 用于Sierra CD-ROM游戏。 | |
Smacker | X | 多媒体格式,用于许多游戏。 | |
SMJPEG | X | X | 用于某些Loki游戏移植版本。 |
SMPTE 337M封装 | X | ||
Smush | X | 用于一些LucasArts游戏的多媒体格式。 | |
索尼OpenMG (OMA) | X | X | 用于Sony Sonic Stage和Sony Vegas的软件中的音频格式。 |
索尼PlayStation STR | X | ||
索尼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 | 用于许多索尼PS2游戏的音频格式。 | |
VC-1测试位流 | X | X | |
Vidvox Hap | X | X | |
Vivo | X | ||
VPK | X | 用于索尼PS游戏的音频格式。 | |
Marble WADY | X | ||
WAV | X | X | |
波形存档器 | X | ||
WavPack | X | X | |
WebM | X | X | |
Windows Televison (WTV) | X | X | |
《Wing Commander III》电影 | X | 用于Origin制作的《Wing Commander 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 管道 | X | X | |
Psygnosis YOP | X |
X
表示该列中的功能(编码/解码)是支持的。
50.2 图像格式
FFmpeg 可以针对视频序列的每一帧读取和写入图像。支持以下图像格式:
名称 | 编码 | 解码 | 备注 |
.Y.U.V | X | X | 每个分量一个原始文件 |
Alias PIX | X | X | Alias/Wavefront PIX 图像格式 |
动画 GIF | X | X | |
APNG | X | X | 动画便携网络图形 |
BMP | X | X | Microsoft BMP 图像 |
BRender PIX | X | Argonaut BRender 3D 引擎图像格式。 | |
CRI | X | Cintel RAW | |
DPX | X | X | 数字图片交换格式 |
EXR | X | OpenEXR | |
FITS | X | X | 灵活的图像传输系统 |
HDR | X | X | Radiance HDR RGBE 图像格式 |
IMG | X | GEM 光栅图像 | |
JPEG | X | X | 不支持渐进 JPEG。 |
JPEG 2000 | X | X | |
JPEG-LS | X | X | |
LJPEG | X | 无损 JPEG | |
Media 100 | X | ||
MSP | X | Microsoft Paint 图像 | |
PAM | X | X | PAM 是带有 alpha 支持的 PNM 扩展。 |
PBM | X | X | 便携位图图像 |
PCD | X | 光盘照片 | |
PCX | X | X | PC Paintbrush |
PFM | X | X | 可移植浮点图像 |
PGM | X | X | 便携灰度图像 |
PGMYUV | X | X | PGM,带有 YUV 4:2:0 格式的 U 和 V 分量 |
PGX | X | PGX文件解码器 | |
PHM | X | X | 便携式半浮点映射图像 |
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 Window Dump图像格式 |
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中间编解码器 | X | ||
Apple MJPEG-B | X | ||
Apple Pixlet | X | ||
Apple ProRes | X | X | fourcc: apch,apcn,apcs,apco,ap4h,ap4x |
Apple QuickDraw | X | fourcc: qdrw | |
APV | X | ||
Argonaut视频 | X | 用于一些Argonaut游戏。 | |
华硕v1 | X | X | fourcc: ASV1 |
华硕v2 | X | X | fourcc: ASV2 |
ATI VCR1 | X | fourcc: VCR1 | |
ATI VCR2 | X | fourcc: VCR2 | |
Auravision Aura | X | ||
Auravision Aura 2 | X | ||
Autodesk Animator Flic视频 | X | ||
Autodesk RLE | X | fourcc: AASC | |
AV1 | E | E | 通过外部库libaom、libdav1d、librav1e和libsvtav1支持 |
Avid 1:1 10-bit RGB Packer | X | X | fourcc: 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 |
Beam Software VB | X | ||
Bethesda VID视频 | X | 用于Bethesda Softworks的一些游戏。 | |
Bink视频 | X | ||
BitJazz SheerVideo | X | ||
Bitmap Brothers JV视频 | X | ||
y41p Brooktree未压缩4:1:1 12-bit | X | X | |
Brooktree ProSumer视频 | X | fourcc: BT20 | |
蛮力与无知 | X | 用于游戏《Flash Traffic: City of Angels》。 | |
C93视频 | X | 用于游戏《Cyberia》的编解码器。 | |
CamStudio | X | fourcc: CSCD | |
CD+G | X | 用于CD+G卡拉OK光盘的视频编解码器 | |
CDXL | X | Amiga CD视频编解码器 | |
中国AVS视频 | E | X | AVS1-P2,JiZhun配置,支持通过外部库libxavs编码 |
Delphine Software International CIN视频 | X | 用于Delphine Software International游戏的编解码器。 | |
Discworld II BMV视频 | X | ||
CineForm高清 | X | X | |
Canopus HQ | X | ||
Canopus HQA | X | ||
Canopus HQX | X | ||
Canopus无损编解码器 | X | ||
CD卡通 | X | 用于各种Broderbund游戏的编解码器。 | |
Cinepak | X | ||
Cirrus Logic AccuPak | X | X | fourcc: CLJR |
CPiA视频格式 | X | ||
Creative YUV (CYUV) | X | ||
DFA | X | 用于Chronomaster游戏的编解码器。 | |
Dirac | E | X | 通过本地vc2 (Dirac Pro)编码器支持 |
Deluxe Paint动画 | X | ||
DNxHD | X | X | 又名SMPTE VC3 |
Duck TrueMotion 1.0 | X | fourcc: DUCK | |
Duck TrueMotion 2.0 | X | fourcc: TM20 | |
Duck TrueMotion 2.0 RT | X | fourcc: TR20 | |
DV(数字视频) | X | X | |
Dxtory捕获格式 | X | ||
Feeble Files/ScummVM DXA | X | 最初用于Feeble Files游戏的编解码器。 | |
Electronic Arts CMV视频 | X | 用于NHL 95游戏。 | |
Electronic Arts Madcow视频 | X | ||
Electronic Arts TGV视频 | X | ||
Electronic Arts TGQ视频 | X | ||
Electronic Arts TQI视频 | X | ||
Escape 124 | X | ||
Escape 130 | X | ||
EVC / MPEG-5第1部分 | E | E | 通过外部库libxeve和libxevd支持的编码和解码 |
FFmpeg视频编解码器#1 | X | X | 无损编解码器(fourcc: FFV1) |
Flash屏幕视频v1 | X | X | fourcc: FSV1 |
Flash屏幕视频v2 | X | X | |
Flash视频(FLV) | X | X | Flash中使用的Sorenson H.263 |
FM屏幕捕获编解码器 | X | ||
Forward未压缩 | X | ||
Fraps | X | ||
Go2Meeting | X | fourcc: G2M2, G2M3 | |
Go2Webinar | X | 四字符代码: 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 第10部分 | E | X | 通过外部库 libx264 和 OpenH264 支持编码 |
HEVC | X | X | 通过外部库 libx265 和 libkvazaar 支持编码 |
HNM 第4版 | X | ||
HuffYUV | X | X | |
HuffYUV FFmpeg 变体 | X | X | |
IBM Ultimotion | X | 四字符代码: 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 第2部分 | 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 | 也被称为Microsoft Screen 3。 | |
Microsoft Expression Encoder屏幕 | X | 也被称为Microsoft Titanium Screen 2。 | |
Microsoft RLE | X | X | |
Microsoft Screen 1 | X | 也被称为Windows Media Video V7 Screen。 | |
Microsoft Screen 2 | X | 也被称为Windows Media Video V9 Screen。 | |
Microsoft Video 1 | X | ||
Mimic | X | 用于MSN Messenger Webcam流。 | |
Miro VideoXL | X | fourcc: VIXL | |
MJPEG(运动JPEG) | X | X | |
Mobotix MxPEG视频 | X | ||
Motion Pixels视频 | X | ||
MPEG-1视频 | X | X | |
MPEG-2视频 | X | X | |
MPEG-4第2部分 | X | X | libxvidcore可以替代用于编码。 |
MPEG-4第2部分Microsoft变体版本1 | X | ||
MPEG-4第2部分Microsoft变体版本2 | X | X | |
MPEG-4第2部分Microsoft变体版本3 | X | X | |
Newtek SpeedHQ | X | X | |
Nintendo 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 | fourccs: 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 文件。 | |
硅图运动视频压缩器 1 (MVC1) | X | ||
硅图运动视频压缩器 2 (MVC2) | X | ||
硅图 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 视频 7 | X | X | |
Windows Media 视频 8 | X | X | |
Windows Media 视频 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 电影 | X | ||
ADPCM Yamaha AICA | X | ||
ADPCM AmuseGraphics 电影 | X | ||
ADPCM Argonaut Games | X | X | |
ADPCM CDROM XA | X | ||
ADPCM Creative 技术 | X | 16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2 | |
ADPCM Electronic Arts | X | 用于多款 EA 游戏。 | |
ADPCM Electronic Arts Maxis CDROM XS | X | 用于 Sim City 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 | 用于一些Sega Saturn主机游戏。 | |
ADPCM IMA Duck DK4 | X | 用于一些Sega Saturn主机游戏。 | |
ADPCM IMA Radical | X | ||
ADPCM IMA Xbox | X | ||
ADPCM Microsoft | X | X | |
ADPCM MS IMA | X | X | |
ADPCM Nintendo Gamecube AFC | X | ||
ADPCM Nintendo Gamecube DTK | X | ||
ADPCM Nintendo THP | X | ||
ADPCM Playstation | X | ||
ADPCM QT IMA | X | X | |
ADPCM SEGA CRI ADX | X | X | 用于Sega Dreamcast游戏。 |
ADPCM Shockwave Flash | X | X | |
ADPCM Sound Blaster Pro 2-bit | X | ||
ADPCM Sound Blaster Pro 2.6-bit | X | ||
ADPCM Sound Blaster Pro 4-bit | 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 | 用于蓝牙A2DP |
aptX HD | X | X | 用于蓝牙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一致声学) | X | X | 支持的扩展: XCh, XXCH, X96, XBR, XLL, LBR (部分支持) |
杜比E | X | ||
DPCM立方根-精准增量 | X | 用于少数游戏。 | |
DPCM Gremlin | X | ||
DPCM RoQ | X | X | 用于Quake III, Jedi Knight 2及其他电脑游戏。 |
DPCM Marble WADY | X | ||
DPCM Interplay | X | 用于各种Interplay电脑游戏。 | |
DPCM平方根-精准增量 | 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(标准无损打包) | X | X | 用于 DVD-Audio 光盘。 |
Monkey's Audio | 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(汤姆的无损音频压缩器) | 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 | ||
Waveform Archiver | X | ||
WavPack | X | X | |
Westwood Audio (SND1) | X | ||
Windows Media Audio 1 | X | X | |
Windows Media Audio 2 | X | X | |
Windows Media Audio Lossless | X | ||
Windows Media Audio Pro | X | ||
Windows Media Audio Voice | X | ||
Xbox Media Audio 1 | X | ||
Xbox Media Audio 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讲座字幕 | 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),例如,通过键入命令git log
在 FFmpeg 源代码目录中,或浏览在线存储库https://git.ffmpeg.org/ffmpeg.
特定组件的维护者列在文件中MAINTAINERS在源代码树中。
此文档生成于May 24, 2025使用makeinfo.
网站翻译由林建有提供支持