目录
- 1 概要
- 2 说明
- 3 详细说明
- 4 码流选择
- 5 个选项
- 6 示例
- 7 语法
- 8 表达评估
- 9 种编解码器选项
- 10 个解码器
- 11 个视频解码器
- 12 个音频解码器
- 13个字幕解码器
- 14 个编码器
- 15 个音频编码器
- 16 个视频编码器
- 16.1 a64_multi、a64_multi5
- 16.2 电影包
- 16.3 动图
- 16.4 哈普
- 16.5 jpeg2000
- 16.6 库1e
- 16.7 libaom-av1
- 16.8 libsvtav1
- 16.9 libjxl
- 16.10 libkvazaar
- 16.11 libopenh264
- 16.12 libtheora
- 16.13 libvpx
- 16.14 libwebp
- 16.15 libx264, libx264rgb
- 16.16 libx265
- 16.17 libxavs2
- 16.18 libxvid
- 16.19 MediaFoundation
- 16.20 Microsoft RLE
- 16.21 mpeg2
- 16.22 png
- 16.23 ProRes
- 16.24 QSV Encoders
- 16.25 snow
- 16.26 VAAPI encoders
- 16.27 vbn
- 16.28 vc2
- 17 Subtitles Encoders
- 18 Bitstream Filters
- 18.1 aac_adtstoasc
- 18.2 av1_metadata
- 18.3 chomp
- 18.4 dca_core
- 18.5 dump_extra
- 18.6 dv_error_marker
- 18.7 eac3_core
- 18.8 extract_extradata
- 18.9 filter_units
- 18.10 hapqa_extract
- 18.11 h264_metadata
- 18.12 h264_mp4toannexb
- 18.13 h264_redundant_pps
- 18.14 hevc_metadata
- 18.15 hevc_mp4toannexb
- 18.16 imxdump
- 18.17 mjpeg2jpeg
- 18.18 mjpegadump
- 18.19 mov2textsub
- 18.20 mp3decomp
- 18.21 mpeg2_metadata
- 18.22 mpeg4_unpack_bframes
- 18.23 noise
- 18.24 null
- 18.25 pcm_rechunk
- 18.26 pgs_frame_merge
- 18.27 prores_metadata
- 18.28 remove_extra
- 18.29 setts
- 18.30 text2movsub
- 18.31 trace_headers
- 18.32 truehd_core
- 18.33 vp9_metadata
- 18.34 vp9_superframe
- 18.35 vp9_superframe_split
- 18.36 vp9_raw_reorder
- 19 Format Options
- 20 Demuxers
- 21 Muxers
- 21.1 a64
- 21.2 adts
- 21.3 aiff
- 21.4 alp
- 21.5 asf
- 21.6 avi
- 21.7 chromaprint
- 21.8 crc
- 21.9 dash
- 21.10 fifo
- 21.11 flv
- 21.12 framecrc
- 21.13 framehash
- 21.14 framemd5
- 21.15 gif
- 21.16 hash
- 21.17 hls
- 21.18 ico
- 21.19 image2
- 21.20 matroska
- 21.21 md5
- 21.22 mov, mp4, ismv
- 21.23 mp3
- 21.24 mpegts
- 21.25 mxf, mxf_d10, mxf_opatom
- 21.26 null
- 21.27 nut
- 21.28 ogg
- 21.29 raw muxers
- 21.29.1 ac3
- 21.29.2 adx
- 21.29.3 aptx
- 21.29.4 aptx_hd
- 21.29.5 avs2
- 21.29.6 cavsvideo
- 21.29.7 codec2raw
- 21.29.8 data
- 21.29.9 dirac
- 21.29.10 dnxhd
- 21.29.11 dts
- 21.29.12 eac3
- 21.29.13 evc
- 21.29.14 g722
- 21.29.15 g723_1
- 21.29.16 g726
- 21.29.17 g726le
- 21.29.18 gsm
- 21.29.19 h261
- 21.29.20 h263
- 21.29.21 h264
- 21.29.22 hevc
- 21.29.23 m4v
- 21.29.24 mjpeg
- 21.29.25 mlp
- 21.29.26 mp2
- 21.29.27 mpeg1video
- 21.29.28 mpeg2视频
- 21.29.29 奥布
- 21.29.30 原始视频
- 31 年 29 月 21 日
- 21.29.32 真高清
- 21.29.33 VC1
- 21.30 段、stream_segment、ssegment
- 21.31 流畅流媒体
- 21.32 流哈希
- 21.33 球座
- 21.34 webm_块
- 21.35 webm_dash_manifest
- 22 元数据
- 23 协议选项
- 24 协议
- 24.1 amqp
- 24.2 异步
- 24.3 蓝光
- 24.4 缓存
- 24.5 串联
- 24.6 连接
- 24.7 加密货币
- 24.8 数据
- 24.9 FD
- 24.10 文件
- 24.11 FTP
- 24.12 地鼠
- 24.13 地鼠
- 24.14 小时
- 24.15 http
- 24.16 冰铸
- 24.17 ipfs
- 24.18 毫米
- 24.19 毫米什
- 24.20 md5
- 24.21 管道
- 24.22 前奏
- 24.23 斯特
- 24.24 rtmp
- 24.25 rtmpe
- 24.26 rtmps
- 24.27 rtmpt
- 24.28 rtmpte
- 24.29 rtmpts
- 24.30 libsmb客户端
- 24.31 libssh
- 24.32 librtmp rtmp、rtmpe、rtmps、rtmpt、rtmpte
- 24.33 转
- 24.34 转播
- 24.35 闷棍
- 24.36 SCP
- 24.37 时间
- 24.38 srtp
- 24.39 子文件
- 24.40 发球台
- 24.41 TCP
- 24.42 TL
- 24.43 UDP
- 24.44 UNIX
- 24.45 兹米克
- 25 设备选项
- 26 个输入设备
- 27 输出设备
- 28 个重采样器选项
- 29 定标器选项
- 30 过滤简介
- 31 图形2点
- 32 过滤图描述
- 33 时间轴编辑
- 34 使用命令在运行时更改选项
- 35 个具有多个输入的滤波器选项(帧同步)
- 36 音频滤波器
- 36.1 压缩机
- 36.2 对比
- 36.3 复制
- 36.4 淡入淡出
- 36.5 跨界
- 36.6破碎机
- 36.7 急性
- 36.8 阿德点击
- 36.9 剪辑
- 36.10 去关联
- 36.11 延迟
- 36.12 腺瘤
- 36.13 导数,积分
- 36.14 广告中心
- 36.15 动态均衡器
- 36.16 动态平滑
- 36.17 回声
- 36.18 强调
- 36.19 评估
- 36.20 激励器
- 36.21 褪色
- 36.22 AFFTDN
- 36.23 亲和力
- 36.24 确定
- 36.25 格式
- 36.26 频率偏移
- 36.27 AFWTDN
- 36.28 玛瑙
- 36.29 空气
- 36.30 限制器
- 36.31 全通
- 36.32 循环
- 36.33 合并
- 36.34 混合
- 36.35 乘法
- 36.36 均衡器
- 36.37 anlmdn
- 36.38 anlmf, anlms
- 36.39 无效
- 36.40 帕德
- 36.41 相位器
- 36.42 相移
- 36.43 峰值信噪比
- 36.44 apsy剪辑
- 36.45 脉动器
- 36.46 是样本
- 36.47 逆向
- 36.48 阿尔斯
- 36.49 arnndn
- 36.50 阿斯达
- 36.51 集合样本
- 36.52 设定率
- 36.53 秀信息
- 36.54 阿西德
- 36.55 软剪辑
- 36.56 方面统计
- 36.57 阿斯瑞
- 36.58 astats
- 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 BS2B
- 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耳机
- 36.93高通
- 36.94 加入
- 36.95 拉德斯帕
- 36.96 响度范数
- 36.97 低通
- 36.98 lv2
- 36.99 mcompand
- 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 音量检测
- 37 音频源
- 38 个音频接收器
- 39 视频滤镜
- 39.1 添加地址
- 39.2 阿尔法提取物
- 39.3 字母合并
- 39.4 放大
- 39.5 屁股
- 39.6 阿塔诺斯
- 39.7 平均模糊
- 39.8 背景键
- 39.9 盒子
- 39.10 双边
- 39.11双边_cuda
- 39.12 位平面噪声
- 39.13 黑色检测
- 39.14黑框
- 39.15 混合
- 39.16 块检测
- 39.17 模糊检测
- 39.18 BM3D
- 39.19 盒子模糊
- 39.20 黑白
- 39.21 bwdif_cuda
- 39.22 ccrepack
- 39.23 CAS
- 39.24 铬保持
- 39.25 色键
- 39.26 色度键_cuda
- 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 色彩空间_cuda
- 39.43色温
- 39.44 卷积
- 39.45 卷积
- 39.46 副本
- 39.47 核心图像
- 39.48 校正
- 39.49 覆盖矩形
- 39.50 作物
- 39.51 作物检测
- 39.52提示
- 39.53曲线
- 39.54 数据示波器
- 39.55 模糊
- 39.56 dctdnoiz
- 39.57 解带
- 39.58 解块
- 39.59 消灭
- 39.60 反卷积
- 39.61 德点
- 39.62 放气
- 39.63 去闪烁
- 39.64 消除抖动
- 39.65 德标志
- 39.66 排水
- 39.67 防抖
- 39.68 消除溢出
- 39.69 迪替西尼
- 39.70 膨胀
- 39.71 置换
- 39.72 dnn_分类
- 39.73 dnn_检测
- 39.74 dnn_处理
- 39.75抽屉箱
- 39.76 绘图
- 39.77 拉网格
- 39.78 绘制文本
- 39.79 边缘检测
- 39.80 埃尔布格
- 39.81 熵
- 39.82 像素
- 39.83当量
- 39.84 侵蚀
- 39.85 埃斯特迪夫
- 39.86 曝光
- 39.87 提取平面
- 39.88 淡出
- 39.89 反馈
- 39.90 fftdnoiz
- 39.91 过滤
- 39.92场
- 39.93 字段提示
- 39.94 现场比赛
- 39.95 场序
- 39.96 先进先出, 先进先出
- 39.97 填充边框
- 39.98 查找矩形
- 39.99 洪水填埋
- 39.100格式
- 39.101 帧/秒
- 39.102 框架包
- 39.103帧率
- 39.104 帧步长
- 39.105 冻结检测
- 39.106 冻结帧
- 39.107 弗雷0r
- 39.108 fspp
- 39.109 模糊
- 39.110 geq
- 39.111 格拉德芬
- 39.112图形监视器
- 39.113灰色世界
- 39.114 灰边
- 39.115 引导
- 39.116 停顿
- 39.117 翻转
- 39.118 历史
- 39.119 直方图
- 39.120 hqdn3d
- 39.121 硬件下载
- 39.122 硬件映射
- 39.123 hw上传
- 39.124 hwupload_cuda
- 39.125 hqx
- 39.126 堆栈
- 39.127 高速保持
- 39.128 HSV密钥
- 39.129 色相
- 39.130 色调饱和度
- 39.131 迟滞
- 39.132 icc检测
- 39.133 iccgen
- 39.134身份
- 39.135 IDE
- 39.136伊尔
- 39.137 充气
- 39.138 交错
- 39.139 克恩登特
- 39.140 樱桃酒
- 39.141 拉格芬
- 39.142 镜头校正
- 39.143 镜趣
- 39.144 libplacebo
- 39.145 libvmaf
- 39.146 libvmaf_cuda
- 39.147 限制差异
- 39.148 限制器
- 39.149循环
- 39.150 lut1d
- 39.151 lut3d
- 39.152 卢马克
- 39.153 卢特, 卢特格布, 卢特尤夫
- 39.154 lut2, tlut2
- 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 mp抽取
- 39.171 毫秒
- 39.172 乘法
- 39.173 否定
- 39.174 nl均值
- 39.175 尼迪
- 39.176 无格式
- 39.177 噪音
- 39.178 标准化
- 39.179 空
- 39.180 OCR
- 39.181 开路电压
- 39.182 示波器
- 39.183 覆盖
- 39.184 覆盖_cuda
- 39.185 低噪声
- 39.186 垫
- 39.187 调色板生成
- 39.188 调色板使用
- 39.189 视角
- 39.190相
- 39.191 光敏性
- 39.192 像素测试
- 39.193 像素化
- 39.194 像素示波器
- 39.195页
- 39.196页7
- 39.197 预乘
- 39.198 普威特
- 39.199 伪彩色
- 39.200 峰值信噪比
- 39.201 上拉
- 39.202 qp
- 39.203 随机
- 39.204 读迪亚608
- 39.205 读取
- 39.206 重新映射
- 39.207 去除谷物
- 39.208 删除标志
- 39.209 重复字段
- 39.210 反向
- 39.211 RGB移位
- 39.212 罗伯茨
- 39.213 旋转
- 39.214 萨布
- 39.215 规模
- 39.216 缩放_cuda
- 39.217 规模_npp
- 39.218 比例尺2参考
- 39.219 比例2ref_npp
- 39.220 缩放_vt
- 39.221 沙尔
- 39.222 滚动
- 39.223 sdet
- 39.224 选择性颜色
- 39.225 单独字段
- 第39.226章
- 39.227 设置字段
- 39.228 设置参数
- 39.229 锐化_npp
- 39.230 剪切
- 39.231 显示信息
- 39.232 显示调色板
- 39.233 随机帧
- 39.234 随机播放像素
- 39.235 洗牌平面
- 39.236 信号统计
- 39.237 签名
- 39.238 地点
- 39.239 智能模糊
- 39.240 索贝尔
- 39.241 种
- 39.242 SR
- 39.243 西卡姆
- 39.244 立体3d
- 39.245 流选择,astream选择
- 39.246 字幕
- 39.247 超级2xsai
- 39.248 交换矩形
- 39.249 交换UV
- 39.250 吨混合物
- 39.251 电视电影
- 39.252 这个方图
- 39.253阈值
- 39.254 缩略图
- 39.255 瓦
- 39.256 交错
- 39.257 t 中位数
- 39.258t中均衡器
- 39.259 混合
- 39.260 色调图
- 39.261 tpad
- 39.262 转置
- 39.263 转置_npp
- 39.264 修剪
- 39.265 反预乘
- 39.266 不清晰
- 39.267 直到
- 39.268 USPP
- 39.269 v360
- 39.270 模糊降噪器
- 39.271 变量模糊
- 39.272 矢量示波器
- 39.273 vidstab检测
- 39.274 vidstab变换
- 39.275 虚拟翻转
- 39.276 弗雷特
- 39.277 活力
- 39.278 振动频率
- 39.279 小插图
- 39.280 虚拟运动
- 39.281 虚拟堆栈
- 39.282 w3fdif
- 39.283波形
- 39.284 编织,双层编织
- 39.285 xbr
- 39.286 x关联
- 39.287 淡入淡出
- 39.288 x 中位数
- 39.289 堆栈
- 39.290 亚迪夫
- 39.291 亚迪夫cuda
- 39.292 耶普模糊
- 39.293 缩放平移
- 39.294 z 尺度
- 40 个 OpenCL 视频过滤器
- 40.1 avgblur_opencl
- 40.2 boxblur_opencl
- 40.3 colorkey_opencl
- 40.4 卷积_opencl
- 40.5 侵蚀_opencl
- 40.6 deshake_opencl
- 40.7 膨胀_opencl
- 40.8 nlmeans_opencl
- 40.9 覆盖_opencl
- 40.10 pad_opencl
- 40.11 prewitt_opencl
- 40.12 程序_opencl
- 40.13 重新映射_opencl
- 40.14 罗伯茨_opencl
- 40.15 索贝尔_opencl
- 40.16tonemap_opencl
- 40.17 unsharp_opencl
- 40.18 xfade_opencl
- 41 VAAPI 视频滤镜
- 42 Vulkan 视频滤镜
- 43 QSV 视频滤波器
- 44 个视频源
- 45 个视频接收器
- 46 多媒体过滤器
- 46.1 a3dscope
- 46.2 升技示波器
- 46.3 绘图
- 46.4 图形监视器
- 46.5 直方图
- 46.6 相位计
- 46.7 矢量示波器
- 46.8 长凳, 长凳
- 46.9 连续
- 46.10 ebur128
- 46.11 交错,交错
- 46.12 延迟,等待时间
- 46.13 元数据,元数据
- 46.14 烫发,烫发
- 46.15 实时,实时
- 46.16 段,段
- 46.17 选择,选择
- 46.18 发送命令,发送命令
- 46.19 设定点,设定点
- 46.20 设置范围
- 46.21 设置b,设置b
- 46.22 显示cqt
- 46.23 显示cwt
- 46.24 演出频率
- 46.25 展示空间
- 46.26 显示频谱
- 46.27 显示频谱图片
- 46.28 放映量
- 46.29 表演波
- 46.30 秀波图片
- 46.31 辅助数据, 辅助数据
- 46.32 频谱合成器
- 46.33 分裂,分裂
- 46.34 zmq, azmq
- 47 多媒体源
- 48 外部库
- 48.1 开放媒体联盟(AOM)
- 48.2 AMD AMF/VCE
- 48.3 AviSynth
- 48.4 色谱打印
- 48.5 编解码器2
- 48.6 达夫1d
- 48.7 达夫2
- 48.8 无人机3d
- 48.9 游戏音乐鸸鹋
- 48.10 英特尔快速同步视频
- 48.11 克瓦扎尔
- 48.12 蹩脚
- 48.13 liblibc
- 48.14 libjxl
- 48.15 libvpx
- 48.16 模组插头
- 48.17 OpenCORE、VisualOn 和 Fraunhofer 库
- 48.18 OpenH264
- 48.19 打开JPEG
- 48.20 拉夫1e
- 48.21 SVT-AV1
- 48.22 两个LAME
- 48.23 蒸汽合成器
- 48.24×264
- 48.25×265
- 48.26 哈维
- 48.27 xavs2
- 48.28 零电压
- 49 支持的文件格式、编解码器或功能
- 50 另请参阅
- 51 位作者
1 概要
ffmpeg [全局选项] {[输入文件选项] -i输入网址} ... {[输出文件选项]输出地址} ...
2 说明
ffmpeg
是一个通用媒体转换器。它可以读取各种输入 - 包括实时抓取/记录设备 - 过滤并将其转码为多种输出格式。
ffmpeg
从选项指定的任意数量的输入“文件”(可以是常规文件、管道、网络流、抓取设备等)读取,并写入
-i
任意数量的输出“文件”,这些文件由选项指定一个简单的输出 url。在命令行上找到的任何不能解释为选项的内容都被视为输出 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
可以用下图描述:
_______ ______________ | | | | | input | demuxer | encoded data | decoder | file | ---------> | packets | -----+ |_______| |______________| | v _________ | | | decoded | | frames | |_________| ________ ______________ | | | | | | | output | <-------- | encoded data | <----+ | file | muxer | packets | encoder |________| |______________|
ffmpeg
调用 libavformat 库(包含解复用器)来读取输入文件并从中获取包含编码数据的数据包。当有多个输入文件时,ffmpeg
尝试通过跟踪任何活动输入流上的最低时间戳来保持它们同步。
然后,编码的数据包被传递到解码器(除非为流选择了流复制,请参阅进一步的描述)。解码器生成未压缩的帧(原始视频/PCM 音频/...),可以通过过滤进一步处理(参见下一节)。过滤后,帧被传递到编码器,编码器对它们进行编码并输出编码后的数据包。最后,这些数据被传递到复用器,复用器将编码后的数据包写入输出文件。
3.1 Filtering
在编码之前,ffmpeg
可以使用 libavfilter 库中的过滤器处理原始音频和视频帧。几个链接的过滤器形成一个过滤器图。ffmpeg
区分两种类型的过滤图:简单和复杂。
3.1.1 简单的过滤图
简单过滤图是指只有一个输入和输出且类型相同的过滤图。在上图中,它们可以通过简单地在解码和编码之间插入一个附加步骤来表示:
_________ ______________ | | | | | decoded | | encoded data | | frames |\ _ | packets | |_________| \ /||______________| \ __________ / simple _\|| | / encoder filtergraph | filtered |/ | frames | |__________|
简单的过滤器图配置有每个流-筛选选项(与-vf和-af分别为视频和音频的别名)。一个简单的视频过滤图可以如下所示:
_______ _____________ _______ ________ | | | | | | | | | input | ---> | deinterlace | ---> | scale | ---> | output | |_______| |_____________| |_______| |________|
请注意,某些过滤器会更改框架属性,但不会更改框架内容。例如,
fps
上例中的过滤器更改帧数,但不触及帧内容。另一个例子是setpts
过滤器,它只设置时间戳,否则不改变地传递帧。
3.1.2 复杂的过滤图
复杂的过滤器图不能简单地描述为应用于一个流的线性处理链。例如,当图具有多个输入和/或输出时,或者当输出流类型与输入不同时,就会出现这种情况。它们可以用下图表示:
_________ | | | input 0 |\ __________ |_________| \ | | \ _________ /| output 0 | \ | | / |__________| _________ \| complex | / | | | |/ | input 1 |---->| filter |\ |_________| | | \ __________ /| graph | \ | | / | | \| output 1 | _________ / |_________| |__________| | | / | input 2 |/ |_________|
复杂的过滤图配置为-filter_complex选项。请注意,此选项是全局的,因为复杂的过滤器图本质上不能与单个流或文件明确关联。
这-拉夫菲选项相当于-filter_complex。
复杂过滤器图的一个简单示例是overlay
过滤器,它具有两个视频输入和一个视频输出,其中一个视频叠加在另一个视频之上。它的音频对应部分是amix
滤波器。
3.2 Stream copy
流复制是通过copy
向
-编解码器选项。它ffmpeg
省略了指定流的解码和编码步骤,因此它只进行解复用和复用。它对于更改容器格式或修改容器级元数据非常有用。在这种情况下,上图将简化为:
_______ ______________ ________ | | | | | | | input | demuxer | encoded data | muxer | output | | file | ---------> | packets | -------> | file | |_______| |______________| |________|
由于没有解码或编码,因此速度非常快并且没有质量损失。然而,由于多种因素,它在某些情况下可能不起作用。应用过滤器显然也是不可能的,因为过滤器适用于未压缩的数据。
4 码流选择
ffmpeg
提供-map
手动控制每个输出文件中的流选择的选项。用户可以跳过-map
并让 ffmpeg 执行自动流选择,如下所述。这些-vn / -an / -sn / -dn
选项可用于分别跳过视频、音频、字幕和数据流的包含,无论是手动映射还是自动选择,除了作为复杂过滤图输出的那些流。
4.1 Description
接下来的小节描述了流选择中涉及的各种规则。接下来的示例展示了如何在实践中应用这些规则。
虽然我们已尽一切努力准确反映程序的行为,但 FFmpeg 仍在不断开发中,自撰写本文以来,代码可能已发生更改。
4.1.1 自动码流选择
在特定输出文件没有任何映射选项的情况下,ffmpeg 检查输出格式以检查其中可以包含哪种类型的流,即。视频、音频和/或字幕。对于每种可接受的流类型,ffmpeg 将从所有输入中选择一个可用的流。
它将根据以下标准选择该流:
- 对于视频,它是具有最高分辨率的流,
- 对于音频,它是具有最多通道的流,
- 对于字幕,这是找到的第一个字幕流,但有一个警告。输出格式的默认字幕编码器可以是基于文本的,也可以是基于图像的,并且只会选择相同类型的字幕流。
在相同类型的多个流速率相等的情况下,选择具有最低索引的流。
数据或附件流不会自动选择,只能使用 来包含-map
。
4.1.2 手动选择码流
使用时-map
,仅用户映射的流包含在该输出文件中,但下面描述的过滤器图输出可能存在例外。
4.1.3 复杂的过滤图
如果存在任何带有未标记 pad 的复杂 filtergraph 输出流,它们将被添加到第一个输出文件中。如果输出格式不支持流类型,这将导致致命错误。在没有地图选项的情况下,包含这些流会导致跳过其类型的自动流选择。如果存在映射选项,除了映射的流之外,还包括这些过滤器图流。
带有标记的 pad 的复杂过滤图输出流必须映射一次且恰好一次。
4.1.4 流处理
流处理与流选择无关,但下述字幕除外。流处理是通过-codec
针对特定输出文件中的流的选项来设置的。特别是,编解码器选项由 ffmpeg 在流选择过程之后应用,因此不会影响后者。如果没有-codec
为流类型指定选项,ffmpeg 将选择输出文件复用器注册的默认编码器。
字幕存在例外情况。如果为输出文件指定了字幕编码器,则将包含找到的任何类型(文本或图像)的第一个字幕流。ffmpeg 不会验证指定的编码器是否可以转换选定的流,或者转换后的流是否在输出格式中可接受。这通常也适用:当用户手动设置编码器时,流选择过程无法检查编码流是否可以复用到输出文件中。如果不能,ffmpeg 将中止并且所有输出文件将无法处理。
4.2 Examples
以下示例说明了 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 会自动为这两个文件选择流。
输出1.mkv是一个 Matroska 容器文件,接受视频、音频和字幕流,因此 ffmpeg 将尝试选择每种类型之一。
对于视频,它将stream 0
选择B.mp4,在所有输入视频流中具有最高分辨率。
对于音频,它将stream 3
选择B.mp4,因为它拥有最多的通道。
对于字幕,它将stream 2
选择B.mp4,这是其中的第一个字幕流阿维病毒和B.mp4。
输出2.wav仅接受音频流,因此仅stream 3
来自B.mp4被选中。
为了输出3.mov,由于-map
设置了选项,因此不会发生自动流选择。该-map 1:a
选项将从第二个输入选择所有音频流
B.mp4。此输出文件中不会包含其他流。
对于前两个输出,所有包含的流都将被转码。选择的编码器将是每个输出格式注册的默认编码器,它可能与所选输入流的编解码器不匹配。
对于第三个输出,音频流的编解码器选项已设置为copy
,因此不会发生或可能发生解码-过滤-编码操作。所选流的数据包应从输入文件传送并在输出文件中复用。
示例:自动字幕选择
ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv
虽然输出1.mkv是一个接受字幕流的 Matroska 容器文件,仅应选择视频和音频流。字幕流为mkv是基于图像的,而 Matroska 复用器的默认字幕编码器是基于文本的,因此字幕的转码操作预计会失败,因此不会选择流。然而,在
输出2.mkv,在命令中指定了字幕编码器,因此除了视频流之外,还选择了字幕流。的存在-an
会禁用音频流选择输出2.mkv。
示例:未标记的过滤图输出
ffmpeg -i A.avi -i C.mkv -i B.mp4 -filter_complex "overlay" out1.mp4 out2.srt
此处使用该选项设置过滤器图-filter_complex
,并由单个视频过滤器组成。该overlay
过滤器恰好需要两个视频输入,但没有指定,因此使用前两个可用的视频流,即阿维病毒和
mkv。过滤器的输出板没有标签,因此被发送到第一个输出文件
输出1.mp4。因此,会跳过视频流的自动选择,这会在B.mp4。具有大多数通道的音频流,即。stream 3
在B.mp4,自动选择。然而,没有选择字幕流,因为 MP4 格式没有注册默认字幕编码器,并且用户没有指定字幕编码器。
第二个输出文件,输出2.srt,仅接受基于文本的字幕流。因此,即使第一个可用的字幕流属于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被发送到色调过滤器,其输出使用分割过滤器被克隆一次,并且两个输出都被标记。然后将每个副本映射到第一个和第三个输出文件。
覆盖过滤器需要两个视频输入,使用前两个未使用的视频流。这些是来自的流阿维病毒和mkv。覆盖输出未标记,因此它被发送到第一个输出文件输出1.mp4,无论该-map
选项是否存在。
aresample 过滤器发送第一个未使用的音频流,即阿维病毒。由于此过滤器输出也未标记,因此它也映射到第一个输出文件。的存在-an
仅抑制音频流的自动或手动流选择,而不抑制从过滤器发送的输出。这两个映射流都应排在映射流之前输出1.mp4。
映射到的视频、音频和字幕流out2.mkv
完全由自动流选择决定。
输出3.mkv由色调过滤器的克隆视频输出和来自的第一个音频流组成B.mp4。
5 个选项
如果没有另外指定,所有数字选项都接受表示数字的字符串作为输入,该字符串后可能跟有 SI 单位前缀之一,例如:“K”、“M”或“G”。
如果将“i”附加到 SI 单位前缀,则完整的前缀将被解释为二进制倍数的单位前缀,它基于 1024 的幂而不是 1000 的幂。将“B”附加到 SI 单位前缀将乘以值除以 8。这允许使用例如:“KB”、“MiB”、“G”和“B”作为数字后缀。
不带参数的选项是布尔选项,并将相应的值设置为true。可以通过在选项名称前加上“no”前缀将它们设置为 false。例如,使用“-nofoo”会将名称为“foo”的布尔选项设置为 false。
5.1 Stream specifiers
某些选项适用于每个流,例如比特率或编解码器。流说明符用于精确指定给定选项所属的流。
流说明符是一个字符串,通常附加到选项名称并用冒号分隔。例如-codec:a:1 ac3
包含
a:1
流说明符,它与第二个音频流匹配。因此,它将为第二个音频流选择 ac3 编解码器。
流说明符可以匹配多个流,以便该选项应用于所有流。例如,流说明符-b:a 128k
匹配所有音频流。
空流说明符匹配所有流。例如,-codec copy
或者-codec: copy
将复制所有流而不重新编码。
流说明符的可能形式是:
- stream_index
将流与该索引进行匹配。例如
-threads:1 4
,将第二个流的线程计数设置为 4。如果使用 stream_index作为附加流说明符(见下文),则它从匹配的流中选择流编号stream_index 。流编号基于 libavformat 检测到的流顺序,除非还指定了节目 ID。在这种情况下,它基于程序中流的顺序。- stream_type[:additional_stream_specifier]
Stream_type是以下之一:'v' 或 'V' 表示视频,'a' 表示音频,'s' 表示字幕,'d' 表示数据,'t' 表示附件。“v”匹配所有视频流,“V”仅匹配不附加图片、视频缩略图或封面艺术的视频流。如果使用 additional_stream_specifier ,则它匹配既具有此类型又匹配additional_stream_specifier的流。否则,它匹配指定类型的所有流。
- p:program_id[:additional_stream_specifier]
匹配程序中 ID 为program_id的流。如果 使用additional_stream_specifier,则它匹配既属于程序一部分又匹配additional_stream_specifier的流。
- #stream_id or i:stream_id
通过流 ID(例如 MPEG-TS 容器中的 PID)来匹配流。
- m:key[:value]
将流与具有指定值的元数据标签键相匹配。如果 未给出值,则将包含给定标记的流与任何值进行匹配。
- u
将流与可用配置相匹配,必须定义编解码器,并且必须提供视频尺寸或音频采样率等基本信息。
请注意,在 中
ffmpeg
,按元数据匹配仅适用于输入文件。
5.2 Generic options
这些选项在 ff* 工具之间共享。
- -L
显示许可证。
- -h, -?, -help, --help [arg]
显示帮助。可以指定可选参数来打印有关特定项目的帮助。如果未指定参数,则仅显示基本(非高级)工具选项。
arg的可能值为:
- long
除了基本工具选项之外,还打印高级工具选项。
- full
打印完整的选项列表,包括编码器、解码器、解复用器、复用器、过滤器等的共享和私有选项。
- decoder=decoder_name
打印有关名为解码器名称的解码器的详细信息。使用 -解码器获取所有解码器列表的选项。
- encoder=encoder_name
打印有关名为encoder_name的编码器的详细信息。使用 -编码器获取所有编码器列表的选项。
- demuxer=demuxer_name
打印有关名为demuxer_name的解复用器的详细信息。使用 -格式获取所有解复用器和复用器列表的选项。
- muxer=muxer_name
打印有关名为muxer_name的复用器的详细信息。使用 -格式获取所有复用器和解复用器列表的选项。
- filter=filter_name
打印有关名为filter_name的过滤器的详细信息。使用 -过滤器获取所有过滤器列表的选项。
- bsf=bitstream_filter_name
打印有关名为bitstream_filter_name的比特流过滤器的详细信息。使用-bsfs获取所有比特流过滤器列表的选项。
- protocol=protocol_name
打印有关名为protocol_name的协议的详细信息。使用- 协议获取所有协议列表的选项。
- -version
显示版本。
- -buildconf
显示构建配置,每行一个选项。
- -formats
显示可用格式(包括设备)。
- -demuxers
显示可用的多路分配器。
- -muxers
显示可用的复用器。
- -devices
显示可用设备。
- -codecs
显示 libavcodec 已知的所有编解码器。
请注意,本文档中使用术语“编解码器”作为更正确的媒体比特流格式的快捷方式。
- -decoders
显示可用的解码器。
- -encoders
显示所有可用的编码器。
- -bsfs
显示可用的比特流过滤器。
- -protocols
显示可用的协议。
- -filters
显示可用的 libavfilter 过滤器。
- -pix_fmts
显示可用的像素格式。
- -sample_fmts
显示可用的示例格式。
- -layouts
显示频道名称和标准频道布局。
- -dispositions
显示流配置。
- -colors
显示识别的颜色名称。
- -sources device[,opt1=val1[,opt2=val2]...]
显示输入设备的自动检测源。某些设备可能提供无法自动检测的与系统相关的源名称。不能假定返回的列表始终是完整的。
ffmpeg -sources pulse,server=192.168.0.4
- -sinks device[,opt1=val1[,opt2=val2]...]
显示输出设备自动检测到的接收器。某些设备可能提供无法自动检测的与系统相关的接收器名称。不能假定返回的列表始终是完整的。
ffmpeg -sinks pulse,server=192.168.0.4
- -loglevel [flags+]loglevel | -v [flags+]loglevel
设置库使用的日志记录级别和标志。
可选的标志前缀可以包含以下值:
- ‘repeat’
指示重复的日志输出不应压缩到第一行,并且“Last message returned n times”行将被省略。
- ‘level’
指示日志输出应向
[level]
每个消息行添加前缀。这可以用作日志着色的替代方法,例如将日志转储到文件时。
标志也可以单独使用,通过添加 '+'/'-' 前缀来设置/重置单个标志,而不影响其他标志或更改loglevel。当设置flags和loglevel时,最后一个flags值和loglevel之前之间需要有一个“+”分隔符。
loglevel是包含以下值之一的字符串或数字:
- ‘quiet, -8’
不显示任何内容;安静。
- ‘panic, 0’
仅显示可能导致进程崩溃的致命错误,例如断言失败。目前这还没有用于任何用途。
- ‘fatal, 8’
只显示致命错误。这些都是错误,之后该过程绝对无法继续。
- ‘error, 16’
显示所有错误,包括可以恢复的错误。
- ‘warning, 24’
显示所有警告和错误。将显示与可能不正确或意外事件相关的任何消息。
- ‘info, 32’
在处理过程中显示信息性消息。这是对警告和错误的补充。这是默认值。
- ‘verbose, 40’
与 相同
info
,但更详细。- ‘debug, 48’
显示一切,包括调试信息。
- ‘trace, 56’
例如,要启用重复日志输出,请添加
level
前缀,并将 loglevel设置为verbose
:ffmpeg -loglevel repeat+level+verbose -i input output
另一个启用重复日志输出而不影响
level
前缀标志或日志级别当前状态的示例:ffmpeg [...] -loglevel +repeat
默认情况下,程序记录到 stderr。如果终端支持着色,则使用颜色来标记错误和警告。可以通过设置环境变量禁用日志着色
AV_LOG_FORCE_NOCOLOR
,也可以强制设置环境变量AV_LOG_FORCE_COLOR
。- -report
将完整的命令行和日志输出转储到当前目录中指定的文件中 。该文件对于错误报告很有用。这也暗示着。
program-YYYYMMDD-HHMMSS.log
-loglevel debug
将环境变量设置
FFREPORT
为任意值都具有相同的效果。如果值是“:”分隔的 key=value 序列,这些选项将影响报告;如果选项值包含特殊字符或选项分隔符“:”,则必须对其进行转义(请参阅 ffmpeg-utils 手册中的“引用和转义”部分)。可以识别以下选项:
- file
设置报告使用的文件名;
%p
扩展为程序名称、%t
扩展为时间戳、%%
扩展为纯文本%
- level
使用数值设置日志详细级别(请参阅
-loglevel
)。
例如,要将报告输出到名为ffreport.log 使用日志级别
32
(日志级别的别名info
):FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output
解析环境变量的错误不是致命的,并且不会出现在报告中。
- -hide_banner
禁止打印横幅。
所有 FFmpeg 工具通常都会显示版权声明、构建选项和库版本。该选项可用于禁止打印该信息。
- -cpuflags flags (global)
允许设置和清除 cpu 标志。该选项用于测试。除非您知道自己在做什么,否则不要使用它。
ffmpeg -cpuflags -sse+mmx ... ffmpeg -cpuflags mmx ... ffmpeg -cpuflags 0 ...
此选项可能的标志是:
- ‘x86’
- ‘mmx’
- ‘mmxext’
- ‘sse’
- ‘sse2’
- ‘sse2slow’
- ‘sse3’
- ‘sse3slow’
- ‘ssse3’
- ‘atom’
- ‘sse4.1’
- ‘sse4.2’
- ‘avx’
- ‘avx2’
- ‘xop’
- ‘fma3’
- ‘fma4’
- ‘3dnow’
- ‘3dnowext’
- ‘bmi1’
- ‘bmi2’
- ‘cmov’
- ‘ARM’
- ‘armv5te’
- ‘armv6’
- ‘armv6t2’
- ‘vfp’
- ‘vfpv3’
- ‘neon’
- ‘setend’
- ‘AArch64’
- ‘armv8’
- ‘vfp’
- ‘neon’
- ‘PowerPC’
- ‘altivec’
- ‘Specific Processors’
- ‘pentium2’
- ‘pentium3’
- ‘pentium4’
- ‘k6’
- ‘k62’
- ‘athlon’
- ‘athlonxp’
- ‘k8’
- -cpucount count (global)
覆盖 CPU 计数检测。该选项用于测试。除非您知道自己在做什么,否则不要使用它。
ffmpeg -cpucount 2
- -max_alloc bytes
设置 ffmpeg 的 malloc 函数系列在堆上分配块的最大大小限制。使用此选项时请格外小心。如果您不了解这样做的全部后果,请不要使用。默认值为 INT_MAX。
5.3 AVOptions
这些选项由 libavformat、libavdevice 和 libavcodec 库直接提供。要查看可用 AVOptions 的列表,请使用 -帮助选项。它们分为两类:
- generic
可以为任何容器、编解码器或设备设置这些选项。容器/设备的 AVFormatContext 选项和编解码器的 AVCodecContext 选项下列出了通用选项。
- private
这些选项特定于给定的容器、设备或编解码器。私有选项列在其相应的容器/设备/编解码器下。
例如,要将 ID3v2.3 标头而不是默认的 ID3v2.4 写入 MP3 文件,请使用id3v2_版本MP3 混合器的私有选项:
ffmpeg -i input.flac -id3v2_version 3 out.mp3
所有编解码器 AVOption 都是针对每个流的,因此应将流说明符附加到它们:
ffmpeg -i multichannel.mxf -map 0:v:0 -map 0:a:0 -map 0:a:0 -c:a:0 ac3 -b:a:0 640k -ac:a:1 2 -c:a:1 aac -b:2 128k out.mp4
在上面的示例中,多通道音频流被映射两次以输出。第一个实例使用编解码器 ac3 和比特率 640k 进行编码。第二个实例被缩混为 2 个通道并使用编解码器 aac 进行编码。使用输出流的绝对索引为其指定 128k 的比特率。
注:-无选项语法不能用于布尔 AVOptions,请使用-选项0/-选项1。
注意:通过在选项名称前添加 v/a/s 来指定每个流 AVOptions 的旧的未记录方法现已过时,并将很快被删除。
5.4 Main options
- -f fmt (input/output)
强制输入或输出文件格式。通常会自动检测输入文件的格式,并根据输出文件的文件扩展名猜测格式,因此在大多数情况下不需要此选项。
- -i url (input)
输入文件网址
- -y (global)
无需询问即可覆盖输出文件。
- -n (global)
不要覆盖输出文件,如果指定的输出文件已存在,则立即退出。
- -stream_loop number (input)
设置输入流应循环的次数。Loop 0表示无循环,loop-1表示无限循环。
- -recast_media (global)
允许强制使用与解复用器检测或指定的媒体类型不同的媒体类型的解码器。对于解码混合为数据流的媒体数据很有用。
- -c[:stream_specifier] codec (input/output,per-stream)
- -codec[:stream_specifier] codec (input/output,per-stream)
为一个或多个流选择编码器(当在输出文件之前使用时)或解码器(当在输入文件之前使用时)。codec是解码器/编码器的名称或特殊值
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 duration (input/output)
当用作输入选项时(在 之前
-i
),限制从输入文件读取数据的 持续时间。当用作输出选项时(在输出 url 之前),在其持续时间达到持续时间后停止写入输出。
持续时间必须是持续时间规范,请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils)持续时间部分。
-to 和 -t 是互斥的,并且 -t 具有优先权。
- -to position (input/output)
停止在位置处写入输出或读取输入。 位置必须是持续时间规范,请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils)持续时间部分。
-to 和 -t 是互斥的,并且 -t 具有优先权。
- -fs limit_size (output)
设置文件大小限制,以字节为单位。超过限制后,不会再写入任何字节块。输出文件的大小略大于请求的文件大小。
- -ss position (input/output)
当用作输入选项时(在 之前
-i
),在此输入文件中查找 位置。请注意,在大多数格式中不可能精确查找,因此ffmpeg
将查找位置之前最近的查找点。转码时和-accurate_seek启用(默认),搜索点和位置之间的额外段将被解码并丢弃。当进行流复制时或者当-noaccurate_seek使用后,将被保存。当用作输出选项时(在输出 url 之前),解码但丢弃输入,直到时间戳到达位置。
位置必须是持续时间规范,请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils)持续时间部分。
- -sseof position (input)
-
与选项类似
-ss
,但相对于“文件结尾”。也就是说,负值位于文件的较早位置,0 位于 EOF 处。 - -isync input_index (input)
将输入指定为同步源。
这将获取目标输入和参考输入的开始时间之间的差异,并将目标文件的时间戳偏移该差异。两个输入的源时间戳应源自同一时钟源以获得预期结果。如果
copyts
设置了则start_at_zero
也必须设置。如果任一输入没有开始时间戳,则不进行同步调整。可接受的值是那些引用有效 ffmpeg 输入索引的值。如果同步引用是目标索引本身或-1,则不对目标时间戳进行调整。同步参考本身可能不会与任何其他输入同步。
默认值为-1。
- -itsoffset offset (input)
设置输入时间偏移。
偏移量必须是持续时间规范,请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils)持续时间部分。
该偏移量将添加到输入文件的时间戳中。指定正偏移量意味着相应的流将延迟offset中指定的持续时间。
- -itsscale scale (input,per-stream)
重新调整输入时间戳。比例应该是浮点数。
- -timestamp date (output)
设置容器中的记录时间戳。
date必须是日期规范,请参阅(ffmpeg-utils)ffmpeg-utils(1) 手册中的日期部分。
- -metadata[:metadata_specifier] key=value (output,per-metadata)
设置元数据键/值对。
可以给出可选的metadata_specifier来设置流、章节或节目的元数据。有关详细信息,请参阅
-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] value (output,per-stream)
设置流的处置。
默认情况下,配置是从输入流复制的,除非此选项适用的输出流由复杂的过滤器图提供 - 在这种情况下,默认情况下未设置配置。
value是由“+”或“-”分隔的项目序列。第一项也可以以“+”或“-”为前缀,在这种情况下,此选项会修改默认值。否则(第一项没有前缀)此选项将覆盖默认值。'+' 前缀添加给定的配置,'-' 删除它。也可以通过将其设置为 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
并非所有复用器都支持嵌入缩略图,即使支持,也仅支持少数格式,例如 JPEG 或 PNG。
- -program [title=title:][program_num=program_num:]st=stream[:st=stream...] (output)
-
创建具有指定title、program_num 的节目并向其中 添加指定的 流。
- -target type (output)
指定目标文件类型(
vcd
、svcd
、dvd
、dv
、dv50
)。type可以以pal-
,ntsc-
或 为前缀film-
以使用相应的标准。所有格式选项(比特率、编解码器、缓冲区大小)都会自动设置。您只需输入:ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
不过,您可以指定其他选项,只要您知道它们不与标准冲突即可,如下所示:
ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg
每个目标设置的参数如下。
光盘
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 film: -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 film: -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 film: -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 film: -f dv -s 720x480 -pix_fmt yuv411p -r 24000/1001 -ar 48000 -ac 2
除了像素格式集适用于所有三个标准 之外,目标
dv50
与目标相同。dv
yuv422p
上述参数的任何用户设置值都将覆盖目标预设值。在这种情况下,输出可能不符合目标标准。
- -dn (input/output)
作为输入选项,阻止文件的所有数据流被过滤或自动选择或映射到任何输出。请参阅
-discard
单独禁用流的选项。作为输出选项,禁用数据记录,即自动选择或映射任何数据流。如需完全手动控制,请参阅
-map
选项。- -dframes number (output)
设置要输出的数据帧的数量。这是 的过时别名
-frames:d
,您应该使用它。- -frames[:stream_specifier] framecount (output,per-stream)
在帧数帧之后停止写入流。
- -q[:stream_specifier] q (output,per-stream)
- -qscale[:stream_specifier] q (output,per-stream)
使用固定质量等级 (VBR)。q / qscale的含义取决于编解码器。如果在没有stream_specifier的情况下使用qscale,那么它仅适用于视频流,这是为了保持与以前的行为的兼容性,并且为2个不同的编解码器(音频和视频)指定相同的编解码器特定值通常不是没有stream_specifier时的预期目的用来。
- -filter[:stream_specifier] filtergraph (output,per-stream)
创建filtergraph指定的filtergraph并使用它来过滤流。
filtergraph是对应用于流的filtergraph 的描述,并且必须具有与流相同类型的单个输入和单个输出。在过滤器图中,输入与 label 关联
in
,输出与 label 关联out
。有关 filtergraph 语法的更多信息,请参阅 ffmpeg-filters 手册。如果您想创建具有多个输入和/或输出的过滤器图, 请参阅-filter_complex 选项。
- -filter_script[:stream_specifier] filename (output,per-stream)
该选项类似于-筛选,唯一的区别是它的参数是要从中读取过滤器图描述的文件的名称。
- -reinit_filter[:stream_specifier] integer (input,per-stream)
此布尔选项确定当输入帧参数在流中更改时是否重新初始化此流所馈送到的过滤器图。默认情况下启用此选项,因为大多数视频和所有音频过滤器无法处理输入帧属性中的偏差。重新初始化后,现有的过滤器状态将丢失,例如
n
某些过滤器中可用的帧计数参考。重新初始化时缓冲的所有帧都会丢失。更改触发重新初始化的属性是视频、帧分辨率或像素格式;对于音频、样本格式、采样率、通道数或通道布局。- -filter_threads nb_threads (global)
定义使用多少个线程来处理过滤器管道。每个管道都会生成一个线程池,其中有这么多线程可用于并行处理。默认值是可用 CPU 的数量。
- -pre[:stream_specifier] preset_name (output,per-stream)
指定匹配流的预设。
- -stats (global)
打印编码进度/统计信息。默认情况下它是打开的,要显式禁用它,您需要指定
-nostats
。- -stats_period time (global)
设置更新编码进度/统计信息的周期。默认值为 0.5 秒。
- -progress url (global)
将程序友好的进度信息发送到url。
进度信息会在编码过程结束时定期写入。它由“ key = value ”行组成。键 仅由字母数字字符组成。进度信息序列的最后一个键始终是“进度”。
更新周期使用 来设置
-stats_period
。- -stdin
启用标准输入交互。除非使用标准输入作为输入,否则默认打开。要显式禁用交互,您需要指定
-nostdin
.禁用标准输入上的交互很有用,例如,如果 ffmpeg 位于后台进程组中。可以实现大致相同的结果,
ffmpeg ... < /dev/null
但它需要一个外壳。- -debug_ts (global)
打印时间戳信息。默认情况下它是关闭的。此选项主要用于测试和调试目的,并且输出格式可能从一个版本更改为另一个版本,因此不应由可移植脚本使用。
另请参见选项
-fdebug ts
。- -attach filename (output)
将附件添加到输出文件。这受到一些格式的支持,例如用于渲染字幕的字体的 Matroska。附件作为特定类型的流实现,因此此选项将向文件添加新流。然后可以以通常的方式在此流上使用每个流选项。使用此选项创建的附件流将在所有其他流(即使用自动映射创建的附件流)之后创建
-map
。请注意,对于 Matroska,您还必须设置 mimetype 元数据标记:
ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv
(假设附件流将是输出文件中的第三个)。
- -dump_attachment[:stream_specifier] filename (input,per-stream)
将匹配的附件流提取到名为filename的文件中。如果 文件名为
filename
空,则将使用元数据标记 的值。例如,将第一个附件提取到名为“out.ttf”的文件中:
ffmpeg -dump_attachment:t:0 out.ttf -i INPUT
要将所有附件提取到由标签确定的文件
filename
:ffmpeg -dump_attachment:t "" -i INPUT
技术说明 - 附件作为编解码器额外数据实现,因此该选项实际上可用于从任何流中提取额外数据,而不仅仅是附件。
5.5 Video Options
- -vframes number (output)
设置要输出的视频帧数。这是 的过时别名
-frames:v
,您应该使用它。- -r[:stream_specifier] fps (input/output,per-stream)
设置帧速率(Hz 值、分数或缩写)。
As an input option, ignore any timestamps stored in the file and instead generate timestamps assuming constant frame rate fps. This is not the same as the -framerate option used for some input formats like image2 or v4l2 (it used to be the same in older versions of FFmpeg). If in doubt use -framerate instead of the input option -r.
As an output option:
- video encoding
Duplicate or drop frames right before encoding them to achieve constant output frame rate fps.
- video streamcopy
Indicate to the muxer that fps is the stream frame rate. No data is dropped or duplicated in this case. This may produce invalid files if fps does not match the actual stream frame rate as determined by packet timestamps. See also the
setts
bitstream filter.
- -fpsmax[:stream_specifier] fps (output,per-stream)
Set maximum frame rate (Hz value, fraction or abbreviation).
Clamps output frame rate when output framerate is auto-set and is higher than this value. Useful in batch processing or when input framerate is wrongly detected as very high. It cannot be set together with
-r
. It is ignored during streamcopy.- -s[:stream_specifier] size (input/output,per-stream)
Set frame size.
As an input option, this is a shortcut for the video_size private option, recognized by some demuxers for which the frame size is either not stored in the file or is configurable – e.g. raw video or video grabbers.
As an output option, this inserts the
scale
video filter to the end of the corresponding filtergraph. Please use thescale
filter directly to insert it at the beginning or some other place.The format is ‘wxh’ (default - same as source).
- -aspect[:stream_specifier] aspect (output,per-stream)
Set the video display aspect ratio specified by aspect.
aspect can be a floating point number string, or a string of the form num:den, where num and den are the numerator and denominator of the aspect ratio. For example "4:3", "16:9", "1.3333", and "1.7777" are valid argument values.
If used together with -vcodec copy, it will affect the aspect ratio stored at container level, but not the aspect ratio stored in encoded frames, if it exists.
- -display_rotation[:stream_specifier] rotation (input,per-stream)
Set video rotation metadata.
rotation is a decimal number specifying the amount in degree by which the video should be rotated counter-clockwise before being displayed.
This option overrides the rotation/display transform metadata stored in the file, if any. When the video is being transcoded (rather than copied) and
-autorotate
is enabled, the video will be rotated at the filtering stage. Otherwise, the metadata will be written into the output file if the muxer supports it.If the
-display_hflip
and/or-display_vflip
options are given, they are applied after the rotation specified by this option.- -display_hflip[:stream_specifier] (input,per-stream)
Set whether on display the image should be horizontally flipped.
请参阅该
-display_rotation
选项了解更多详细信息。- -display_vflip[:stream_specifier] (input,per-stream)
设置显示时图像是否垂直翻转。
请参阅该
-display_rotation
选项了解更多详细信息。- -vn (input/output)
作为输入选项,阻止文件的所有视频流被过滤或自动选择或映射到任何输出。请参阅
-discard
单独禁用流的选项。作为输出选项,禁用视频录制,即自动选择或映射任何视频流。如需完全手动控制,请参阅
-map
选项。- -vcodec codec (output)
设置视频编解码器。这是 的别名
-codec:v
。- -pass[:stream_specifier] n (output,per-stream)
选择通行证编号(1 或 2)。它用于进行两遍视频编码。视频的统计信息在第一遍中记录到日志文件中(另请参见选项 -passlogfile),在第二遍中,该日志文件用于以准确请求的比特率生成视频。在第 1 遍中,您可以停用音频并将输出设置为 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[:stream_specifier] prefix (output,per-stream)
将两遍日志文件名前缀设置为prefix,默认文件名前缀为“ffmpeg2pass”。完整的文件名将是 前缀-N.log,其中 N 是特定于输出流的数字
- -vf filtergraph (output)
创建filtergraph指定的filtergraph并使用它来过滤流。
这是 的别名
-filter:v
,请参阅-filter 选项。- -autorotate
根据文件元数据自动旋转视频。默认启用,使用-不自动旋转禁用它。
- -autoscale
根据第一帧的分辨率自动缩放视频。默认启用,使用-无自动缩放禁用它。当自动缩放被禁用时,过滤器图的所有输出帧可能不具有相同的分辨率,并且对于某些编码器/复用器来说可能不够。因此,除非您确实知道自己在做什么,否则不建议禁用它。禁用自动缩放的风险由您自行承担。
5.6 Advanced Video options
- -pix_fmt[:stream_specifier] format (input/output,per-stream)
设置像素格式。用于
-pix_fmts
显示所有支持的像素格式。如果无法选择所选的像素格式,ffmpeg将打印警告并选择编码器支持的最佳像素格式。如果pix_fmt以 a 为前缀+
,则如果无法选择请求的像素格式,ffmpeg 将退出并显示错误,并且将禁用 filtergraph 内的自动转换。如果pix_fmt是 single+
,则 ffmpeg 选择与输入(或图形输出)相同的像素格式,并禁用自动转换。- -sws_flags flags (input/output)
设置 libswscale 库的默认标志。
scale
这些标志由自动插入的过滤器和简单过滤器图表中的过滤器 使用,如果没有在过滤器图表定义中覆盖的话。有关缩放器选项列表, 请参阅(ffmpeg-scaler)ffmpeg-scaler 手册。
- -rc_override[:stream_specifier] override (output,per-stream)
特定间隔的速率控制覆盖,格式为“int,int,int”列表,以斜杠分隔。第两个值是开始帧号和结束帧号,最后一个值是要使用的量化器(如果为正)或品质因数(如果为负)。
- -psnr
计算压缩帧的 PSNR。此选项已弃用,请使用 . 将 PSNR 标志传递给编码器
-flags +psnr
。- -vstats
将视频编码统计数据转储到vstats_HHMMSS.log。有关格式说明, 请参阅 vstats 文件格式部分。
- -vstats_file file
将视频编码统计信息转储到文件。有关格式说明, 请参阅 vstats 文件格式部分。
- -vstats_version file
指定要使用哪个版本的 vstats 格式。默认为
2
. 有关格式说明, 请参阅 vstats 文件格式部分。- -vtag fourcc/tag (output)
强制视频标签/fourcc。这是 的别名
-tag:v
。- -vbsf bitstream_filter
已弃用 请参阅 -bsf
- -force_key_frames[:stream_specifier] time[,time...] (output,per-stream)
- -force_key_frames[:stream_specifier] expr:expr (output,per-stream)
- -force_key_frames[:stream_specifier] source (output,per-stream)
-
force_key_frames可以采用以下形式的参数:
- time[,time...]
如果参数由时间戳组成,ffmpeg 将根据编码器时基将指定时间舍入到最接近的输出时间戳,并强制在时间戳等于或大于计算时间戳的第一帧处使用关键帧。请注意,如果编码器时基太粗,则可能会在时间戳低于指定时间的帧上强制使用关键帧。默认编码器时基是输出帧速率的倒数,但可以通过其他方式设置
-enc_time_base
。如果其中一个时间为“
chapters
[ delta ]”,则将其扩展为文件中所有章节的开始时间,移位 delta,表示为以秒为单位的时间。此选项可用于确保查找点出现在输出文件中的章节标记或任何其他指定位置。例如,要在 5 分钟处插入关键帧,加上每章开始前 0.1 秒的关键帧:
-force_key_frames 0:05:00,chapters-0.1
- expr:expr
如果参数以 为前缀
expr:
,则字符串expr 会像表达式一样被解释,并针对每个帧进行计算。如果评估不为零,则强制使用关键帧。expr中的表达式可以包含以下常量:
- n
当前处理的帧数,从0开始
- n_forced
强制帧数
- prev_forced_n
前一个强制帧的编号,即
NAN
尚未强制关键帧时- prev_forced_t
上一个强制帧的时间,即
NAN
尚未强制关键帧时- t
当前处理帧的时间
例如,要强制每 5 秒出现一次关键帧,您可以指定:
-force_key_frames expr:gte(t,n_forced*5)
要在最后一个强制关键帧的时间后 5 秒强制关键帧,从第 13 秒开始:
-force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))
- source
如果参数为
source
,并且当前正在编码的帧在其源中被标记为关键帧,则 ffmpeg 将强制使用关键帧。如果必须删除此特定源帧,请强制下一个可用帧成为关键帧。
请注意,强制使用太多关键帧对于某些编码器的前瞻算法非常有害:使用固定 GOP 选项或类似选项会更有效。
- -copyinkf[:stream_specifier] (output,per-stream)
进行流复制时,还复制开头找到的非关键帧。
- -init_hw_device type[=name][:device[,key=value...]]
使用给定的设备参数初始化类型为name的新硬件设备。如果未指定名称,它将收到“ type %d”形式的默认名称。
设备和以下参数的含义取决于设备类型:
- cuda
device是 CUDA 设备的编号。
可以识别以下选项:
- primary_ctx
如果设置为 1,则使用主设备上下文而不是创建新设备上下文。
例子:
- -init_hw_device cuda:1
选择系统上的第二个设备。
- -init_hw_device cuda:0,primary_ctx=1
选择第一个设备并使用主设备上下文。
- dxva2
device是 Direct3D 9 显示适配器的编号。
- d3d11va
device是 Direct3D 11 显示适配器的编号。
- vaapi
device是 X11 显示名称、DRM 渲染节点或 DirectX 适配器索引。如果未指定,它将尝试打开默认的 X11 显示 ( $DISPLAY ),然后打开第一个 DRM 渲染节点 ( /dev/dri/renderD128 ),或 Windows 上的默认 DirectX 适配器。
- vdpau
device是 X11 显示名称。如果未指定,它将尝试打开默认的 X11 显示 ( $DISPLAY )。
- qsv
设备在 ' 中选择一个值MFX_IMPL_*'。允许的值为:
- auto
- sw
- hw
- auto_any
- hw_any
- hw2
- hw3
- hw4
如果没有指定,'自动_任意' 用来。(请注意,通过创建适合平台的子设备('dxva2' 或者 'd3d11va' 或者 '瓦皮'),然后从中派生出 QSV 设备。)
或者, '子设备类型' 有助于选择适合平台的子设备类型。在 Windows 上d3d11va' 用作默认子设备类型。
例子:
- -init_hw_device qsv:hw,child_device_type=d3d11va
选择类型为 ' 的 GPU 子设备d3d11va' 并使用 ' 创建 QSV 设备MFX_IMPL_硬件'。
- -init_hw_device qsv:hw,child_device_type=dxva2
选择类型为 ' 的 GPU 子设备dxva2' 并使用 ' 创建 QSV 设备MFX_IMPL_硬件'。
- opencl
device选择平台和设备作为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
如果device是整数,则它通过系统相关设备列表中的索引来选择设备。如果设备是任何其他字符串,它将选择名称包含该字符串作为子字符串的第一个设备。
可以识别以下选项:
- debug
如果设置为 1,则启用验证层(如果已安装)。
- linear_images
如果设置为 1,由 hwcontext 分配的图像将是线性的且可本地映射。
- instance_extensions
要启用的附加实例扩展的加号分隔列表。
- device_extensions
要启用的附加设备扩展的加号分隔列表。
例子:
- -init_hw_device vulkan:1
选择系统上的第二个设备。
- -init_hw_device vulkan:RADV
选择名称包含字符串RADV的第一个设备。
- -init_hw_device vulkan:0,instance_extensions=VK_KHR_wayland_surface+VK_KHR_xcb_surface
选择第一个设备并启用 Wayland 和 XCB 实例扩展。
- -init_hw_device type[=name]@source
初始化类型为name的新硬件设备,从名称为source的现有设备派生它。
- -init_hw_device list
列出此 ffmpeg 版本中支持的所有硬件设备类型。
- -filter_hw_device name
将名为name的硬件设备传递给任何过滤器图中的所有过滤器。这可用于设置要使用过滤器上传到的设备
hwupload
,或要使用过滤器映射到的设备hwmap
。其他过滤器在需要硬件设备时也可以使用此参数。请注意,这通常仅当输入尚未在硬件帧中时才需要 - 当输入已在硬件帧中时,过滤器将从它们接收为输入的帧的上下文中导出它们所需的设备。这是全局设置,因此所有过滤器都将接收相同的设备。
- -hwaccel[:stream_specifier] hwaccel (input,per-stream)
使用硬件加速来解码匹配的流。hwaccel的允许值为:
- none
不使用任何硬件加速(默认)。
- auto
自动选择硬件加速方式。
- vdpau
使用 VDPAU(适用于 Unix 的视频解码和演示 API)硬件加速。
- dxva2
使用DXVA2(DirectX视频加速)硬件加速。
- d3d11va
使用D3D11VA(DirectX视频加速)硬件加速。
- vaapi
使用VAAPI(视频加速API)硬件加速。
- qsv
使用 Intel QuickSync 视频加速进行视频转码。
与大多数其他值不同,此选项不启用加速解码(每当选择 qsv 解码器时自动使用),而是加速转码,而不将帧复制到系统内存中。
为了使其正常工作,解码器和编码器都必须支持 QSV 加速,并且不得使用任何滤波器。
如果所选的 hwaccel 不可用或所选解码器不支持,则此选项无效。
请注意,大多数加速方法都是用于播放,并且不会比现代 CPU 上的软件解码更快。此外,
ffmpeg
通常需要将解码后的帧从 GPU 内存复制到系统内存中,从而导致进一步的性能损失。因此,该选项主要用于测试。- -hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)
选择用于硬件加速的设备。
此选项仅在以下情况下才有意义-hwaccel还指定了选项。它可以引用使用创建的现有设备-init_硬件设备 按名称,或者它可以创建一个新设备,就像'-init_硬件设备' type : hwaccel_device 之前被调用。
- -hwaccels
列出此 ffmpeg 版本中启用的所有硬件加速组件。实际运行时可用性取决于硬件及其所安装的合适驱动程序。
- -fix_sub_duration_heartbeat[:stream_specifier]
将特定的输出视频流设置为心跳流,在收到随机访问数据包时根据该心跳流分割并推送当前正在进行的字幕。
这降低了尚未接收到结束数据包或后续字幕的字幕的延迟。缺点是,这很可能导致字幕事件重复以覆盖整个持续时间,因此在处理字幕事件传递到输出时的延迟不相关的用例时,不应使用此选项。
需要-fix_sub_duration为相关输入字幕流设置,以使其产生任何效果,以及输入字幕流必须直接映射到心跳流所在的同一输出。
5.7 Audio Options
- -aframes number (output)
设置要输出的音频帧数。这是 的过时别名
-frames:a
,您应该使用它。- -ar[:stream_specifier] freq (input/output,per-stream)
设置音频采样频率。对于输出流,它默认设置为相应输入流的频率。对于输入流,此选项仅对音频抓取设备和原始解复用器有意义,并映射到相应的解复用器选项。
- -aq q (output)
设置音频质量(特定于编解码器、VBR)。这是 -q:a 的别名。
- -ac[:stream_specifier] channels (input/output,per-stream)
设置音频通道数。对于输出流,它默认设置为输入音频通道的数量。对于输入流,此选项仅对音频抓取设备和原始解复用器有意义,并映射到相应的解复用器选项。
- -an (input/output)
作为输入选项,阻止文件的所有音频流被过滤或自动选择或映射到任何输出。请参阅
-discard
单独禁用流的选项。作为输出选项,禁用音频录制,即自动选择或映射任何音频流。如需完全手动控制,请参阅
-map
选项。- -acodec codec (input/output)
设置音频编解码器。这是 的别名
-codec:a
。- -sample_fmt[:stream_specifier] sample_fmt (output,per-stream)
设置音频样本格式。用于
-sample_fmts
获取支持的示例格式的列表。- -af filtergraph (output)
创建filtergraph指定的filtergraph并使用它来过滤流。
这是 的别名
-filter:a
,请参阅-filter 选项。
5.8 Advanced Audio options
- -atag fourcc/tag (output)
强制音频标签/fourcc。这是 的别名
-tag:a
。- -absf bitstream_filter
已弃用,请参阅 -bsf
- -guess_layout_max channels (input,per-stream)
如果某些输入通道布局未知,则仅尝试猜测它是否最多对应于指定数量的通道。例如,2 指示
ffmpeg
将 1 个通道识别为单声道,将 2 个通道识别为立体声,但不将 6 个通道识别为 5.1。默认设置是始终尝试猜测。使用 0 禁用所有猜测。
5.9 Subtitle options
- -scodec codec (input/output)
设置字幕编解码器。这是 的别名
-codec:s
。- -sn (input/output)
作为输入选项,阻止文件的所有字幕流被过滤或自动选择或映射到任何输出。请参阅
-discard
单独禁用流的选项。作为输出选项,禁用字幕录制,即自动选择或映射任何字幕流。如需完全手动控制,请参阅
-map
选项。- -sbsf bitstream_filter
已弃用,请参阅 -bsf
5.10 Advanced Subtitle options
- -fix_sub_duration
修复字幕持续时间。对于每个字幕,等待同一流中的下一个数据包并调整第一个数据包的持续时间以避免重叠。这对于某些字幕编解码器(尤其是 DVB 字幕)来说是必要的,因为原始数据包中的持续时间只是粗略估计,并且结尾实际上由空字幕帧标记。必要时未能使用此选项可能会导致持续时间过长或由于非单调时间戳而导致多路复用失败。
请注意,此选项将延迟所有数据的输出,直到解码下一个字幕包:它可能会大量增加内存消耗和延迟。
- -canvas_size size
设置用于渲染字幕的画布的大小。
5.11 Advanced options
- -map [-]input_file_id[:stream_specifier][?] | [linklabel] (output)
-
在输出文件中创建一个或多个流。此选项有两种形式用于指定数据源:第一种从某些输入文件中选择一个或多个流(用 指定),第二种从某些复杂的过滤器图(用或 指定)
-i
中获取输出。-filter_complex
-filter_complex_script
在第一种形式中,为来自输入文件的每个流创建一个输出流,索引为input_file_id。如果给出了stream_specifier,则仅使用那些与说明符匹配的流( 有关stream_specifier语法,请参阅流说明符部分)。
流标识符之前的字符
-
创建“负”映射。它禁用已创建的映射中的匹配流。流索引后面的尾随
?
将允许映射是可选的:如果映射不匹配任何流,则映射将被忽略而不是失败。请注意,如果使用无效的输入文件索引,映射仍然会失败;例如,如果地图引用了不存在的输入。另一种[linklabel]形式将映射复杂过滤器图表的输出(请参阅-filter_complex选项)到输出文件。 linklabel必须对应于图中定义的输出链接标签。
可以多次指定此选项,每次都会向输出文件添加更多流。任何给定的输入流还可以被映射任意多次作为不同输出流的源,例如以便使用不同的编码选项和/或过滤器。流在输出中的创建顺序与
-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
将映射第二个输入流输入到(单个)输出流输出.wav。
- create multiple streams
从输入文件中选择索引为 2 的流mov(由标识符0:2指定),以及来自输入的索引为 6 的流b.mov (由标识符1:6指定),并将它们复制到输出文件 输出.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_channel [input_file_id.stream_specifier.channel_id|-1][?][:output_file_id.stream_specifier]
此选项已弃用并将被删除。可用 盘式过滤器代替。在某些情况下,使用channelsplit、channelmap或amerge过滤器的某种组合可能更容易 。
将音频通道从给定输入映射到输出。如果 output_file_id。如果不设置stream_specifier,则音频通道将映射到所有音频流上。
使用“-1”代替 input_file_id。流说明符。channel_id将映射静音通道。
尾随
?
将允许map_channel是可选的:如果map_channel没有匹配任何通道,则map_channel将被忽略而不是失败。例如,假设INPUT是立体声音频文件,您可以使用以下命令切换两个音频通道:
ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT
如果您想将第一个通道静音并保留第二个通道:
ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT
“-map_channel”选项的顺序指定输出流中通道的顺序。输出通道布局是根据映射的通道数量猜测的(如果有一个“-map_channel”则为单声道,如果有两个则为立体声,等等)。如果输入和输出通道布局不匹配(例如两个“-map_channel”选项和“-ac 6”),则将“-ac”与“-map_channel”组合使用可以更新通道增益级别。
您还可以将输入的每个通道提取到特定的输出;以下命令将INPUT音频流的两个通道(文件 0、流 0)提取到相应的OUTPUT_CH0和OUTPUT_CH1输出:
ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1
以下示例将立体声输入的通道拆分为两个单独的流,并将它们放入同一输出文件中:
ffmpeg -i stereo.wav -map 0:0 -map 0:0 -map_channel 0.0.0:0.0 -map_channel 0.0.1:0.1 -y out.ogg
请注意,当前每个输出流只能包含来自单个输入流的通道;例如,您不能使用“-map_channel”来选择不同流中包含的多个输入音频通道(来自相同或不同的文件)并将它们合并到单个输出流中。因此,例如,当前不可能将两个单独的单声道流转换为单个立体声流。然而,将立体声流分成两个单通道单声道流是可能的。
如果您需要此功能,可能的解决方法是使用合并 过滤器。例如,如果您需要合并媒体(此处输入.mkv)将 2 个单声道音频流转换为一个立体声通道音频流(并保留视频流),您可以使用以下命令:
ffmpeg -i input.mkv -filter_complex "[0:1] [0:2] amerge" -c:a pcm_s16le -c:v copy output.mkv
要从第一个输入映射前两个音频通道,并使用尾随
?
,如果第一个输入是单声道而不是立体声,则忽略音频通道映射:ffmpeg -i INPUT -map_channel 0.0.0 -map_channel 0.0.1? OUTPUT
- -map_metadata[:metadata_spec_out] infile[:metadata_spec_in] (output,per-metadata)
从infile设置下一个输出文件的元数据信息。请注意,这些是文件索引(从零开始),而不是文件名。可选的metadata_spec_in/out参数指定要复制的元数据。元数据说明符可以具有以下形式:
- g
全局元数据,即适用于整个文件的元数据
- s[:stream_spec]
每个流的元数据。Stream_spec是一个流说明符,如流说明符一章中所述。在输入元数据说明符中,复制第一个匹配的流。在输出元数据说明符中,所有匹配的流都被复制到。
- c:chapter_index
每章元数据。Chapter_index是从零开始的章节索引。
- p:program_index
每个程序的元数据。program_index是从零开始的程序索引。
如果省略元数据说明符,则默认为全局。
默认情况下,全局元数据从第一个输入文件复制,每个流和每个章节的元数据与流/章节一起复制。通过创建相关类型的任何映射来禁用这些默认映射。负文件索引可用于创建仅禁用自动复制的虚拟映射。
例如,将元数据从输入文件的第一个流复制到输出文件的全局元数据:
ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3
要执行相反的操作,即将全局元数据复制到所有音频流:
ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv
请注意,在此示例中,simple
0
也适用,因为默认情况下假定全局元数据。- -map_chapters input_file_index (output)
将索引为input_file_index的输入文件中的章节复制到下一个输出文件。如果未指定章节映射,则从包含至少一个章节的第一个输入文件复制章节。使用负文件索引来禁用任何章节复制。
- -benchmark (global)
在编码末尾显示基准测试信息。显示实际的系统和用户使用时间以及最大内存消耗。并非所有系统都支持最大内存消耗,如果不支持,通常会显示为 0。
- -benchmark_all (global)
在编码期间显示基准测试信息。显示各个步骤(音频/视频编码/解码)中使用的实际时间、系统时间和用户时间。
- -timelimit duration (global)
在 ffmpeg在 CPU 用户时间中 运行持续时间秒后退出。
- -dump (global)
将每个输入数据包转储到 stderr。
- -hex (global)
转储数据包时,也转储有效负载。
- -readrate speed (input)
限制输入读取速度。
它的值是一个浮点正数,表示一秒挂钟时间内应摄取的媒体最大持续时间(以秒为单位)。默认值为零,表示对摄取速度没有强加限制。值
1
代表实时速度,相当于-re
。主要用于模拟捕获设备或实时输入流(例如从文件读取时)。当输入是实际捕获设备或实时流时,不应使用较低的值,因为这可能会导致数据包丢失。
当输出数据包的流速度很重要时(例如实时流媒体),它非常有用。
- -re (input)
以本机帧速率读取输入。这相当于设置
-readrate 1
。- -readrate_initial_burst seconds
设置初始读取突发时间(以秒为单位),之后-re/-读取速率 将被强制执行。
- -vsync parameter (global)
- -fps_mode[:stream_specifier] parameter (output,per-stream)
设置视频同步方法/帧率模式。vsync 应用于所有输出视频流,但可以通过设置 fps_mode 覆盖流。vsync 已弃用,并将在将来删除。
出于兼容性原因,垂直同步的某些值可以指定为数字(在下表的括号中显示)。
- passthrough (0)
每个帧及其时间戳从解复用器传递到复用器。
- cfr (1)
帧将被复制和丢弃,以准确实现所请求的恒定帧速率。
- vfr (2)
帧会连同其时间戳一起通过或丢弃,以防止 2 个帧具有相同的时间戳。
- drop
作为直通,但会破坏所有时间戳,使复用器根据帧速率生成新的时间戳。
- auto (-1)
根据复用器功能在 CFR 和 VFR 之间进行选择。这是默认方法。
请注意,在此之后,复用器可能会进一步修改时间戳。例如,如果格式选项避免负面的ts 已启用。
使用 -map 您可以选择应从哪个流中获取时间戳。您可以保持视频或音频不变,并将剩余的流同步到未更改的流。
- -frame_drop_threshold parameter
丢帧阈值,指定视频帧在丢帧之前可以落后多少。在帧速率单位中,1.0 是一帧。默认值为-1.1。一种可能的用例是在时间戳有噪声的情况下避免帧丢失,或者在时间戳精确的情况下提高帧丢失精度。
- -apad parameters (output,per-stream)
填充输出音频流。这与申请相同
-af apad
。Argument 是一串过滤器参数,组成与过滤器相同apad
。-shortest
必须为此输出设置才能使选项生效。- -copyts
不处理输入时间戳,但保留它们的值而不尝试清理它们。特别是,不要删除初始开始时间偏移值。
请注意,根据垂直同步选项或特定复用器处理(例如,如果格式选项避免负面的ts 启用)即使选择此选项,输出时间戳也可能与输入时间戳不匹配。
- -start_at_zero
当与复制品,移动输入时间戳,使它们从零开始。
这意味着使用eg
-ss 50
将使输出时间戳从50 秒开始,无论输入文件从哪个时间戳开始。- -copytb mode
指定流复制时如何设置编码器时基。 mode是一个整数数值,可以采用以下值之一:
- 1
使用多路分配器时基。
时基从相应的输入多路分配器复制到输出编码器。有时需要这样做,以避免在复制具有可变帧速率的视频流时出现非单调增加的时间戳。
- 0
使用解码器时基。
时基从相应的输入解码器复制到输出编码器。
- -1
尝试自动做出选择,以生成合理的输出。
默认值为-1。
- -enc_time_base[:stream_specifier] timebase (output,per-stream)
设置编码器时基。时基可以采用以下值之一:
- 0
根据媒体类型分配默认值。
对于视频 - 使用 1/帧速率,对于音频 - 使用 1/采样率。
- 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 duration (output)
-shortest
当至少一个流是“稀疏”时(即帧之间具有较大间隙 - 这通常是字幕的情况),该选项可能需要缓冲潜在的大量数据 。此选项控制缓冲帧的最大持续时间(以秒为单位)。较大的值可能允许
-shortest
选项产生更准确的结果,但会增加内存使用和延迟。默认值为 10 秒。
- -dts_delta_threshold threshold
时间戳不连续增量阈值,以十进制秒数表示。
此选项启用的时间戳不连续性校正仅适用于接受时间戳不连续性(启用该标志
AV_FMT_DISCONT
)的输入格式,例如 MPEG-TS 和 HLS,并且在使用该选项时自动禁用-copy_ts
(除非检测到回绕)。如果检测到绝对值大于阈值的时间戳不连续性,ffmpeg 将通过将当前 DTS 和 PTS 减少/增加相应的 delta 值来消除不连续性。
默认值为 10。
- -dts_error_threshold threshold
时间戳错误增量阈值,以十进制秒数表示。
此选项启用的时间戳校正仅适用于不接受时间戳不连续性的输入格式(
AV_FMT_DISCONT
未启用该标志)。如果检测到绝对值大于阈值的时间戳不连续性,ffmpeg将丢弃PTS/DTS时间戳值。
默认值是
3600*30
(30小时),这是任意选择的并且相当保守。- -muxdelay seconds (output)
设置最大解复用解码延迟。
- -muxpreload seconds (output)
设置初始解复用解码延迟。
- -streamid output-stream-index:new-value (output)
将新的stream-id值分配给输出流。应在其适用的输出文件名之前指定此选项。对于存在多个输出文件的情况,可以将streamid重新分配为不同的值。
例如,要将输出 mpegts 文件的流 0 PID 设置为 33,将流 1 PID 设置为 36:
ffmpeg -i inurl -streamid 0:33 -streamid 1:36 out.ts
- -bsf[:stream_specifier] bitstream_filters (output,per-stream)
将比特流过滤器应用于匹配的流。
bitstream_filters是比特流过滤器规范的逗号分隔列表。指定的比特流过滤器按照写入的顺序应用于编码数据包。每个比特流过滤器规范的形式为
filter[=optname0=optval0:optname1=optval1:...]
任何要成为选项值一部分的 ',=:' 字符都需要使用反斜杠进行转义。
使用该
-bsfs
选项获取比特流过滤器列表。ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264
ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt
- -tag[:stream_specifier] codec_tag (input/output,per-stream)
强制使用 tag/fourcc 来匹配流。
- -timecode hh:mm:ssSEPff
指定写入的时间码。SEP为“:”(非丢包时间码)和“;” (或“.”)表示丢弃。
ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg
- -filter_complex filtergraph (global)
定义一个复杂的滤波器图,即具有任意数量的输入和/或输出的滤波器图。对于简单图(具有相同类型的一个输入和一个输出的图),请参阅-筛选选项。filtergraph是filtergraph的描述,如ffmpeg-filters手册的“Filtergraph语法”部分所述。
输入链接标签必须使用
[file_index:stream_specifier]
语法引用输入流(即与-地图 用途)。如果stream_specifier匹配多个流,则将使用第一个流。未标记的输入将连接到匹配类型的第一个未使用的输入流。输出链接标签引用为-地图。未标记的输出将添加到第一个输出文件中。
请注意,使用此选项可以仅使用 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 nb_threads (global)
定义使用多少个线程来处理filter_complex图。与filter_threads类似,但仅用于
-filter_complex
图表。默认值是可用 CPU 的数量。- -lavfi filtergraph (global)
定义一个复杂的滤波器图,即具有任意数量的输入和/或输出的滤波器图。相当于-filter_complex。
- -filter_complex_script filename (global)
该选项类似于-filter_complex,唯一的区别是它的参数是要从中读取复杂过滤器图描述的文件的名称。
- -accurate_seek (input)
此选项启用或禁用在输入文件中的精确搜索 -SS选项。默认启用,因此转码时查找准确。使用-noaccurate_seek禁用它,这可能很有用,例如在复制某些流并对其他流进行转码时。
- -seek_timestamp (input)
此选项启用或禁用在输入文件中按时间戳进行查找 -SS选项。默认情况下它是禁用的。如果启用,则参数-SS option is considered an actual timestamp, and is not offset by the start time of the file. This matters only for files which do not start from timestamp 0, such as transport streams.
- -thread_queue_size size (input/output)
For input, this option sets the maximum number of queued packets when reading from the file or device. With low latency / high rate live streams, packets may be discarded if they are not read in a timely manner; setting this value can force ffmpeg to use a separate input thread and read packets as soon as they arrive. By default ffmpeg only does this if multiple inputs are specified.
For output, this option specified the maximum number of packets that may be queued to each muxing thread.
- -sdp_file file (global)
Print sdp information for an output stream to file. This allows dumping sdp information when at least one output isn’t an rtp stream. (Requires at least one of the output formats to be rtp).
- -discard (input)
Allows discarding specific streams or frames from streams. Any input stream can be fully discarded, using value
all
whereas selective discarding of frames from a stream occurs at the demuxer and is not supported by all demuxers.- none
Discard no frame.
- default
Default, which discards no frames.
- noref
Discard all non-reference frames.
- bidir
Discard all bidirectional frames.
- nokey
Discard all frames excepts keyframes.
- all
Discard all frames.
- -abort_on flags (global)
Stop and abort on various conditions. The following flags are available:
- empty_output
No packets were passed to the muxer, the output is empty.
- empty_output_stream
No packets were passed to the muxer in some of the output streams.
- -max_error_rate (global)
Set fraction of decoding frame failures across all inputs which when crossed ffmpeg will return exit code 69. Crossing this threshold does not terminate processing. Range is a floating-point number between 0 to 1. Default is 2/3.
- -xerror (global)
Stop and exit on error
- -max_muxing_queue_size packets (output,per-stream)
When transcoding audio and/or video streams, ffmpeg will not begin writing into the output until it has one packet for each such stream. While waiting for that to happen, packets for other streams are buffered. This option sets the size of this buffer, in packets, for the matching output stream.
The default value of this option should be high enough for most uses, so only touch this option if you are sure that you need it.
- -muxing_queue_data_threshold bytes (output,per-stream)
This is a minimum threshold until which the muxing queue size is not taken into account. Defaults to 50 megabytes per stream, and is based on the overall size of packets passed to the muxer.
- -auto_conversion_filters (global)
Enable automatically inserting format conversion filters in all filter graphs, including those defined by -vf, -af, -filter_complex and -lavfi. If filter format negotiation requires a conversion, the initialization of the filters will fail. Conversions can still be performed by inserting the relevant conversion filter (scale, aresample) in the graph. On by default, to explicitly disable it you need to specify
-noauto_conversion_filters
.- -bits_per_raw_sample[:stream_specifier] value (output,per-stream)
将给定输出流中每个原始样本的位数声明为 value。请注意,此选项设置提供给编码器/复用器的信息,它不会更改流以符合此值。设置与流属性不匹配的值可能会导致编码失败或输出文件无效。
- -stats_enc_pre[:stream_specifier] path (output,per-stream)
- -stats_enc_post[:stream_specifier] path (output,per-stream)
- -stats_mux_pre[:stream_specifier] path (output,per-stream)
将有关匹配流的每帧编码信息写入path给定的文件中。
-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[:stream_specifier] format_spec (output,per-stream)
- -stats_enc_post_fmt[:stream_specifier] format_spec (output,per-stream)
- -stats_mux_pre_fmt[:stream_specifier] format_spec (output,per-stream)
指定用以下命令写入的行的格式-stats_enc_pre/ -stats_enc_post/-stats_mux_pre。
format_spec是一个字符串,可能包含{fmt}形式的指令 。format_spec是反斜杠转义的 — 使用 \{、\} 和 \\ 分别将文字 {、} 或 \ 写入输出中。
fmt给出的指令可能是以下之一:
- fidx
输出文件的索引。
- sidx
文件中输出流的索引。
- n
帧数。预编码:到目前为止发送到编码器的帧数。编码后:到目前为止从编码器接收到的数据包数量。复用器:到目前为止,提交给该流复用器的数据包数量。
- ni
输入帧号。与该输出帧或数据包相对应的输入帧(即由解码器输出)的索引。-1(如果不可用)。
- tb
时基,其中该帧/数据包的时间戳被表示为有理数num/den。请注意,编码器和复用器可能使用不同的时基。
- tbi
ptsi的时基,作为有理数num/den。当ptsi可用时可用 ,否则为0/1。
- pts
帧或数据包的表示时间戳(整数)。应乘以时基来计算演示时间。
- ptsi
输入帧的呈现时间戳(参见ni),作为整数。应乘以tbi来计算演示时间。当不可用时,打印为 (2^63 - 1 = 9223372036854775807)。
- t
帧或数据包的呈现时间,以十进制数表示。等于 pts乘以tb。
- ti
输入帧的呈现时间(参见ni),以十进制数表示。等于ptsi乘以tbi。不可用时打印为 inf。
- dts (packet)
将数据包的时间戳解码为整数。应乘以时基来计算演示时间。
- dt (packet)
帧或数据包的解码时间,以十进制数表示。等于 dts乘以tb。
- sn (frame,audio)
到目前为止发送到编码器的音频样本数。
- samp (frame,audio)
帧中的音频样本数。
- size (packet)
编码数据包的大小(以字节为单位)。
- br (packet)
当前比特率(以每秒位数为单位)。仅后编码。
- abr (packet)
到目前为止整个流的平均比特率,以每秒位数为单位,如果此时无法确定,则为 -1。仅后编码。
用数据包标记的指令只能与 -stats_enc_post_fmt和-stats_mux_pre_fmt。
带有框架标记的指令只能与 -stats_enc_pre_fmt。
用音频标记的指令只能与音频流一起使用。
默认格式字符串为:
- pre-encoding
{fidx} {sidx} {n} {t}
- post-encoding
{fidx} {sidx} {n} {t}
将来,可能会将新项目添加到默认格式字符串的末尾。依赖格式保持完全相同的用户应手动指定。
请注意,写入同一文件的不同流的统计数据可能具有不同的格式。
5.12 Preset files
预设文件包含一系列选项=值对,每行一个,指定一系列选项,这在命令行上指定是很困难的。以井号(“#”)字符开头的行将被忽略并用于提供注释。检查预设FFmpeg 源代码树中的目录作为示例。
预设文件有两种类型:ffpreset 和avpreset 文件。
5.12.1 ffpreset 文件
vpre
ffpreset 文件用、apre
、
spre
和选项指定fpre
。该fpre
选项采用预设的文件名而不是预设名称作为输入,并且可用于任何类型的编解码器。对于vpre
、apre
、 和
spre
选项,预设文件中指定的选项将应用于当前选择的与预设选项类型相同的编解码器。
传递给vpre
、apre
和spre
preset 选项的参数根据以下规则标识要使用的预设文件:
首先 ffmpeg在目录中搜索名为arg .ffpreset的文件$FFMPEG_DATADIR(如果设置),以及$HOME/.ffmpeg,并在配置时定义的 datadir 中(通常前缀/共享/ffmpeg)或在一个ff预设按照 win32 上的可执行文件的顺序放置文件夹。例如,如果参数是libvpx-1080p
,它将搜索文件libvpx-1080p.ffpreset。
如果没有找到这样的文件,那么 ffmpeg 将在上述目录中搜索名为
codec_name - arg .ffpreset 的文件,其中codec_name是将应用预设文件选项的编解码器的名称。例如,如果您选择视频编解码器并-vcodec libvpx
使用-vpre 1080p
,那么它将搜索该文件libvpx-1080p.ffpreset。
5.12.2 av预设文件
avpreset 文件是用该pre
选项指定的。它们的工作方式与 ffpreset 文件类似,但它们只允许编码器特定的选项。因此,
不能使用指定编码器的
选项=值对。
当指定该pre
选项时,ffmpeg将在目录中查找后缀为.avpreset的文件$AVCONV_DATADIR(如果设置),以及
$HOME/.avconv,并在配置时定义的 datadir 中(通常
前缀/共享/ffmpeg), 以该顺序。
首先,ffmpeg在上述目录中搜索名为codec_name - arg .avpreset 的文件,其中codec_name是将应用预设文件选项的编解码器的名称。例如,如果您选择视频编解码器并-vcodec libvpx
使用-pre 1080p
,那么它将搜索该文件libvpx-1080p.avpreset。
如果没有找到这样的文件,那么 ffmpeg 将在同一目录中 搜索名为arg .avpreset的文件 。
5.13 vstats file format
和选项可以生成包含有关所生成-vstats
视频-vstats_file
输出的统计信息的文件。
该-vstats_version
选项控制生成文件的格式版本。
版本1
格式为:
frame= FRAME q= FRAME_QUALITY PSNR= PSNR f_size= FRAME_SIZE s_size= STREAM_SIZEkB time= TIMESTAMP br= BITRATEkbits/s avg_br= AVERAGE_BITRATEkbits/s
版本2
格式为:
out= OUT_FILE_INDEX st= OUT_FILE_STREAM_INDEX frame= FRAME_NUMBER q= FRAME_QUALITYf PSNR= PSNR f_size= FRAME_SIZE s_size= STREAM_SIZEkB time= TIMESTAMP br= BITRATEkbits/s avg_br= AVERAGE_BITRATEkbits/s
每个key对应的value说明如下:
- avg_br
平均比特率以 Kbits/s 表示
- br
比特率以 Kbits/s 表示
- frame
编码帧数
- out
输出文件索引
- PSNR
峰值信噪比
- q
框架质量
- f_size
编码数据包大小以字节数表示
- s_size
流大小以 KiB 表示
- st
输出文件流索引
- time
数据包的时间
- type
图片类型
另请参阅-stats_enc 选项以了解显示编码统计信息的替代方法。
6 示例
6.1 Video and Audio grabbing
如果指定输入格式和设备,那么 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
请注意,在使用任何电视观看器(例如 Gerd Knorr 的xawtv)启动 ffmpeg 之前,您必须激活正确的视频源和频道。您还必须使用标准混音器正确设置音频录制级别。
6.2 X11 grabbing
使用 ffmpeg 抓取 X11 显示
ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg
0.0.0 是 X11 服务器的 display.screen 编号,与 DISPLAY 环境变量相同。
ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg
0.0.0 是 X11 服务器的 display.screen 编号,与 DISPLAY 环境变量相同。10 是抓取的 x 偏移量,20 是 y 偏移量。
6.3 Video and Audio file format conversion
任何支持的文件格式和协议都可以作为 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 文件分辨率的两倍。它们是原始文件,没有标题。它们可以由所有合适的视频解码器生成。您必须使用指定图像的大小-s如果 ffmpeg 无法猜测它,则选项。
- 您可以从原始 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
以 22050 Hz 采样率将 a.wav 转换为 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 编码的,因此您需要通过传递
--enable-libmp3lame
配置来启用 LAME 支持。该映射对于 DVD 转码以获得所需的音频语言特别有用。注意:要查看支持的输入格式,请使用
ffmpeg -demuxers
。 - 您可以从视频中提取图像,或从许多图像创建视频:
从视频中提取图像:
ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
这将从视频中每秒提取一个视频帧,并将其输出到名为foo-001.jpeg,foo-002.jpeg等。图像将重新缩放以适应新的宽x高值。
如果只想提取有限数量的帧,可以将上述命令与
-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 的通配符模式(通配符)。例如,要从与 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 Quoting and escaping
除非明确指定,FFmpeg 采用以下引用和转义机制。应用以下规则:
- ''' 和 '\' 是特殊字符(分别用于引用和转义)。除了它们之外,可能还有其他特殊字符,具体取决于使用转义和引用的特定语法。
- 特殊字符通过在其前面添加 ' 进行转义\'。
- ' 之间包含的所有字符”' 按字面意思包含在已解析的字符串中。引号字符 ''' 本身不能被引用,因此您可能需要关闭引用并转义它。
- 除非转义或引用,否则前导和尾随空格将从解析的字符串中删除。
请注意,在使用命令行或脚本时,您可能需要添加第二级转义,这取决于所采用的 shell 语言的语法。
函数av_get_token
定义在
libavutil/avstring.h可用于根据上面定义的规则解析引用或转义的标记。
工具工具/ffescapeFFmpeg 源代码树中的内容可用于自动引用或转义脚本中的字符串。
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 Date
可接受的语法是:
[(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z] now
如果该值为“now”,则需要当前时间。
除非附加 Z,否则时间为本地时间,在这种情况下,它被解释为 UTC。如果未指定年月日部分,则采用当前年月日。
7.3 Time duration
有两种可接受的语法来表示持续时间。
[-][HH:]MM:SS[.m...]
HH表示小时数,MM表示分钟数,最多 2 位数字,SS表示秒数,最多 2 位数字。末尾的 m 表示 SS的十进制值。
或者
[-]S+[.m...][s|ms|us]
S表示秒数,带有可选的小数部分 m。可选的文字后缀 's','多发性硬化症' 或者 '我们' 表示将该值分别解释为秒、毫秒或微秒。
在这两个表达式中,可选的 '-' 表示负持续时间。
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 Video size
指定源视频的大小,它可以是width x height形式的字符串 ,或者是大小缩写的名称。
可以识别以下缩写:
- ‘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 Video rate
指定视频的帧速率,表示为每秒生成的帧数。它必须是格式为 frame_rate_num / frame_rate_den的字符串、整数、浮点数或有效的视频帧速率缩写。
可以识别以下缩写:
- ‘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 Ratio
比率可以表示为表达式,或采用 分子:分母 的形式。
请注意,具有无限 (1/0) 或负值的比率被视为有效,因此如果要排除这些值,则应检查返回的值。
未定义的值可以使用“0:0”字符串来表示。
7.7 Color
它可以是如下定义的颜色名称(不区分大小写的匹配)或序列
[0x|#]RRGGBB[AA]
,可能后跟 @ 和表示 alpha 分量的字符串。
alpha分量可以是由“0x”后跟一个十六进制数或0.0到1.0之间的十进制数组成的字符串,表示不透明度值('0x00' 或者 '0.0' 表示完全透明,'0xff' 或者 '1.0' 完全不透明)。如果未指定 alpha 分量,则 '0xff' 假设。
字符串 '随机的' 将产生随机颜色。
可以识别以下颜色名称:
- ‘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’
0xDCDCCDC
- ‘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 Channel Layout
通道布局指定多通道音频流中通道的空间布置。为了指定通道布局,FFmpeg 使用特殊语法。
各个频道由 ID 标识,如下表所示:
- ‘FL’
左前
- ‘FR’
右前方
- ‘FC’
前中心
- ‘LFE’
低频
- ‘BL’
左后侧
- ‘BR’
右后
- ‘FLC’
前偏左
- ‘FRC’
前偏右
- ‘BC’
后中心
- ‘SL’
左侧
- ‘SR’
右侧
- ‘TC’
顶部中心
- ‘TFL’
左前上方
- ‘TFC’
顶部前中心
- ‘TFR’
右前上方
- ‘TBL’
左上后侧
- ‘TBC’
上后中心
- ‘TBR’
右上后侧
- ‘DL’
向左缩混
- ‘DR’
右缩混
- ‘WL’
左宽
- ‘WR’
右宽
- ‘SDL’
环绕直接左
- ‘SDR’
直接右环绕
- ‘LFE2’
低频2
标准通道布局组合可以使用以下标识符来指定:
- ‘mono’
FC
- ‘stereo’
FL+FR
- ‘2.1’
FL+FR+LFE
- ‘3.0’
FL+FR+FC
- ‘3.0(back)’
FL+FR+BC
- ‘4.0’
FL+FR+FC+BC
- ‘quad’
FL+FR+BL+BR
- ‘quad(side)’
FL+FR+SL+SR
- ‘3.1’
FL+FR+FC+LFE
- ‘5.0’
FL+FR+FC+BL+BR
- ‘5.0(side)’
FL+FR+FC+SL+SR
- ‘4.1’
FL+FR+FC+LFE+BC
- ‘5.1’
FL+FR+FC+LFE+BL+BR
- ‘5.1(side)’
FL+FR+FC+LFE+SL+SR
- ‘6.0’
FL+FR+FC+BC+SL+SR
- ‘6.0(front)’
FL+FR+FLC+FRC+SL+SR
- ‘3.1.2’
FL+FR+FC+LFE+TFL+TFR
- ‘hexagonal’
FL+FR+FC+BL+BR+BC
- ‘6.1’
FL+FR+FC+LFE+BC+SL+SR
- ‘6.1’
FL+FR+FC+LFE+BL+BR+BC
- ‘6.1(front)’
FL+FR+LFE+FLC+FRC+SL+SR
- ‘7.0’
FL+FR+FC+BL+BR+SL+SR
- ‘7.0(front)’
FL+FR+FC+FLC+FRC+SL+SR
- ‘7.1’
FL+FR+FC+LFE+BL+BR+SL+SR
- ‘7.1(wide)’
FL+FR+FC+LFE+BL+BR+FLC+FRC
- ‘7.1(wide-side)’
FL+FR+FC+LFE+FLC+FRC+SL+SR
- ‘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
- ‘hexadecagonal’
FL+FR+FC+BL+BR+BC+SL+SR+WL+WR+TBL+TBR+TBC+TFC+TFL+TFR
- ‘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','低频效果”等),每个选项都可以在“@”之后包含自定义名称(例如“FL@左','FR@右','FC@中心','LFE@低频', ETC。)
标准通道布局可以通过以下方式指定:
- 单个频道的名称(例如'FL','FR','FC','低频效果', ETC。)
- 标准通道布局的名称(例如“单核细胞增多症','立体声','4.0','四边形','5.0', ETC。)
- 多个通道,以十进制表示,后跟“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的值。
可以使用以下二元运算符:+
, -
,
*
, /
, ^
。
可以使用以下一元运算符:+
, -
.
可以使用以下功能:
- abs(x)
计算x的绝对值。
- acos(x)
计算x的反余弦。
- asin(x)
计算x的反正弦。
- atan(x)
计算x的反正切。
- atan2(x, y)
计算y / x的反正切主值。
- between(x, min, max)
如果x大于或等于min且小于或等于max,则返回 1,否则返回 0。
- bitand(x, y)
- bitor(x, y)
对x和y进行按位和/或运算。
在执行按位运算之前, x和y的计算结果将转换为整数。
请注意,转换为整数和转换回浮点数都可能会丢失精度。请注意大数字(通常为 2^53 及更大)的意外结果。
- ceil(expr)
将表达式expr的值向上舍入为最接近的整数。例如,“ceil(1.5)”为“2.0”。
- clip(x, min, max)
返回介于min和max之间的x值。
- cos(x)
计算x的余弦。
- cosh(x)
计算x的双曲余弦。
- eq(x, y)
如果x和y相等, 则返回 1 ,否则返回 0。
- exp(x)
计算x的指数(以
e
欧拉数为底)。- floor(expr)
将表达式expr的值向下舍入到最接近的整数。例如,“下限(-1.5)”为“-2.0”。
- gauss(x)
计算x的高斯函数,对应于
exp(-x*x/2) / sqrt(2*PI)
。- gcd(x, y)
返回x和y的最大公约数。如果x和 y都为 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(var)
使用数字var加载内部变量的值 ,该值之前使用 st( var , 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)
使用 loglevel l打印表达式t的值。如果 未指定l,则使用默认日志级别。返回打印的表达式的值。
打印 t 和日志级别 l
- random(x)
返回 0.0 到 1.0 之间的伪随机值。x是用于保存种子/状态的内部变量的索引。
- root(expr, max)
查找一个输入值,其参数ld(0)的expr表示的函数在区间 0.. max中为 0 。
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(var, expr)
将表达式expr的值存储在内部变量中。var指定存储值的变量号,范围是 0 到 9。函数返回内部变量中存储的值。请注意,变量当前不在表达式之间共享。
- tan(x)
计算x的正切。
- tanh(x)
计算x的双曲正切。
- taylor(expr, x)
- taylor(expr, x, id)
给定一个表示函数在 0 处的阶导数的 表达式,计算x处的泰勒级数。
ld(id)
当级数不收敛时,结果是不确定的。
ld(id)用于表示expr中的导数阶,这意味着给定的表达式将使用表达式可以访问的各种输入值进行多次计算
ld(id)
。如果未指定 id ,则假定为 0。请注意,当您在 y 处求导数而不是 0 时,
taylor(expr, x-y)
可以使用。- time(0)
返回当前(挂钟)时间(以秒为单位)。
- trunc(expr)
将表达式expr的值朝零舍入到最接近的整数。例如,“trunc(-1.5)”为“-1.0”。
- while(cond, expr)
当表达式cond非零时计算表达式expr ,并返回最后一次expr计算的值,如果cond始终为 false,则返回 NAN。
以下常量可用:
- PI
单位圆盘面积,约为 3.14
- E
exp(1)(欧拉数),大约 2.718
- PHI
黄金比例 (1+sqrt(5))/2,约为 1.618
假设如果表达式具有非零值,则该表达式被视为“真”,请注意:
*
工作原理类似于 AND
+
工作原理类似于或
例如构造:
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.h用于编程使用的 API。
支持的选项列表如下:
- b integer (encoding,audio,video)
设置比特率(以位/秒为单位)。默认值为 200K。
- ab integer (encoding,audio)
设置音频比特率(以位/秒为单位)。默认值为 128K。
- bt integer (encoding,video)
设置视频比特率容差(以位/秒为单位)。在 1-pass 模式下,比特率容差指定码率控制愿意偏离目标平均比特率值的程度。这与最小/最大比特率无关。过度降低耐受性会对质量产生不利影响。
- flags flags (decoding/encoding,audio,video,subtitles)
设置通用标志。
可能的值:
- ‘mv4’
按宏块使用四个运动矢量 (mpeg4)。
- ‘qpel’
使用 1/4 像素运动补偿。
- ‘loop’
使用环路滤波器。
- ‘qscale’
使用固定的 qscale。
- ‘pass1’
在第一遍模式下使用内部 2pass 速率控制。
- ‘pass2’
在第二遍模式下使用内部 2pass 速率控制。
- ‘gray’
仅解码/编码灰度。
- ‘psnr’
在编码期间设置 error[?] 变量。
- ‘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 rational number
设置编解码器时基。
它是表示帧时间戳的基本时间单位(以秒为单位)。对于固定 fps 内容,时基应为
1 / frame_rate
1,时间戳增量应相同为 1。- g integer (encoding,video)
设置图片组 (GOP) 大小。默认值为 12。
- ar integer (decoding/encoding,audio)
设置音频采样率(以 Hz 为单位)。
- ac integer (decoding/encoding,audio)
设置音频通道数。
- cutoff integer (encoding,audio)
设置截止带宽。(仅受选定编码器支持,请参阅其各自的文档部分。)
- frame_size integer (encoding,audio)
设置音频帧大小。
除最后一个帧外,每个提交的帧都必须包含每个通道的frame_size 个样本。当编解码器设置了 CODEC_CAP_VARIABLE_FRAME_SIZE 时,可能为 0,在这种情况下,帧大小不受限制。它由一些解码器设置以指示恒定的帧大小。
- frame_number integer
设置帧数。
- delay integer
- qcomp float (encoding,video)
设置视频量化器比例压缩 (VBR)。它用作速率控制方程中的常数。默认 rc_eq 的推荐范围:0.0-1.0。
- qblur float (encoding,video)
设置视频量化器比例模糊 (VBR)。
- qmin integer (encoding,video)
设置最小视频量化比例 (VBR)。必须包含在 -1 到 69 之间,默认值为 2。
- qmax integer (encoding,video)
设置最大视频量化器比例 (VBR)。必须包含在 -1 到 1024 之间,默认值为 31。
- qdiff integer (encoding,video)
设置量化器比例 (VBR) 之间的最大差异。
- bf integer (encoding,video)
设置非 B 帧之间的 B 帧的最大数量。
必须是 -1 到 16 之间的整数。0 表示禁用 B 帧。如果使用值-1,它将根据编码器选择自动值。
默认值为 0。
- b_qfactor float (encoding,video)
设置 P 帧和 B 帧之间的 qp 因子。
- codec_tag integer
- bug flags (decoding,video)
解决方法无法自动检测编码器错误。
可能的值:
- ‘autodetect’
- ‘xvid_ilace’
Xvid 交错错误(如果 fourcc==XVIX 则自动检测)
- ‘ump4’
(如果 fourcc==UMP4 则自动检测)
- ‘no_padding’
填充错误(自动检测)
- ‘amv’
- ‘qpel_chroma’
- ‘std_qpel’
旧标准 qpel(根据 fourcc/版本自动检测)
- ‘qpel_chroma2’
- ‘direct_blocksize’
direct-qpel-blocksize 错误(每个 fourcc/版本自动检测)
- ‘edge’
边缘填充错误(每个 fourcc/版本自动检测)
- ‘hpel_chroma’
- ‘dc_clip’
- ‘ms’
解决微软损坏的解码器中的各种错误。
- ‘trunc’
截断帧
- strict integer (decoding/encoding,audio,video)
指定如何严格遵守标准。
可能的值:
- ‘very’
严格遵守较旧的更严格版本的规范或参考软件
- ‘strict’
严格遵守规范中的所有内容,无论后果如何
- ‘normal’
- ‘unofficial’
允许非官方扩展
- ‘experimental’
允许非标准化的实验性事物、实验性(未完成/正在进行中/未经过充分测试)解码器和编码器。注意:实验性解码器可能会带来安全风险,请勿使用它来解码不受信任的输入。
- b_qoffset float (encoding,video)
设置 P 帧和 B 帧之间的 QP 偏移。
- err_detect flags (decoding,audio,video)
设置错误检测标志。
可能的值:
- ‘crccheck’
验证嵌入的 CRC
- ‘bitstream’
检测比特流规范偏差
- ‘buffer’
检测不正确的比特流长度
- ‘explode’
检测到小错误时中止解码
- ‘ignore_err’
忽略解码错误,并继续解码。如果您想分析视频的内容并因此希望无论如何都可以解码所有内容,这非常有用。如果出现错误,此选项将不会产生令人赏心悦目的视频。
- ‘careful’
考虑那些违反规范并且在野外未被视为错误的事情
- ‘compliant’
将所有不符合规范的情况视为错误
- ‘aggressive’
考虑一个理智的编码器不应该做的事情作为错误
- has_b_frames integer
- block_align integer
- rc_override_count integer
- maxrate integer (encoding,audio,video)
设置最大比特率容差(以位/秒为单位)。需要设置 bufsize。
- minrate integer (encoding,audio,video)
设置最小比特率容限(以位/秒为单位)。在设置 CBR 编码时最有用。否则就没什么用了。
- bufsize integer (encoding,audio,video)
设置速率控制缓冲区大小(以位为单位)。
- i_qfactor float (encoding,video)
设置 P 帧和 I 帧之间的 QP 因子。
- i_qoffset float (encoding,video)
设置 P 帧和 I 帧之间的 QP 偏移。
- dct integer (encoding,video)
设置DCT算法。
可能的值:
- ‘auto’
自动选择一个好的(默认)
- ‘fastint’
快速整数
- ‘int’
精确整数
- ‘mmx’
- ‘altivec’
- ‘faan’
浮点 AAN DCT
- lumi_mask float (encoding,video)
明亮区域的压缩强度比中等区域的压缩强度要大。
- tcplx_mask float (encoding,video)
设置时间复杂度掩码。
- scplx_mask float (encoding,video)
设置空间复杂性掩蔽。
- p_mask float (encoding,video)
设置帧间屏蔽。
- dark_mask float (encoding,video)
比中等区域更强烈地压缩黑暗区域。
- idct integer (decoding/encoding,video)
选择 IDCT 实施。
可能的值:
- ‘auto’
- ‘int’
- ‘simple’
- ‘simplemmx’
- ‘simpleauto’
自动选择与简单IDCT兼容的IDCT
- ‘arm’
- ‘altivec’
- ‘sh4’
- ‘simplearm’
- ‘simplearmv5te’
- ‘simplearmv6’
- ‘simpleneon’
- ‘xvid’
- ‘faani’
浮点 AAN IDCT
- slice_count integer
- ec flags (decoding,video)
设置错误隐藏策略。
可能的值:
- ‘guess_mvs’
迭代运动矢量 (MV) 搜索(慢速)
- ‘deblock’
对损坏的 MB 使用强解块滤波器
- ‘favor_inter’
倾向于从前一帧而不是当前帧进行预测
- bits_per_coded_sample integer
- aspect rational number (encoding,video)
设置样本纵横比。
- sar rational number (encoding,video)
设置样本纵横比。方面的别名。
- debug flags (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 integer (encoding,video)
设置完整的像素比较功能。
可能的值:
- ‘sad’
绝对差值之和,快速(默认)
- ‘sse’
误差平方和
- ‘satd’
绝对 Hadamard 变换差值之和
- ‘dct’
DCT 变换绝对差值之和
- ‘psnr’
量化误差平方和(避免,低质量)
- ‘bit’
块所需的位数
- ‘rd’
率失真最佳,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差之和
- ‘vsse’
垂直差平方和
- ‘nsse’
噪声保留平方差和
- ‘w53’
5/3 小波,仅在雪中使用
- ‘w97’
9/7 小波,仅在雪中使用
- ‘dctmax’
- ‘chroma’
- subcmp integer (encoding,video)
设置子像素比较功能。
可能的值:
- ‘sad’
绝对差值之和,快速(默认)
- ‘sse’
误差平方和
- ‘satd’
绝对 Hadamard 变换差值之和
- ‘dct’
DCT 变换绝对差值之和
- ‘psnr’
量化误差平方和(避免,低质量)
- ‘bit’
块所需的位数
- ‘rd’
率失真最佳,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差之和
- ‘vsse’
垂直差平方和
- ‘nsse’
噪声保留平方差和
- ‘w53’
5/3 小波,仅在雪中使用
- ‘w97’
9/7 小波,仅在雪中使用
- ‘dctmax’
- ‘chroma’
- mbcmp integer (encoding,video)
设置宏块比较功能。
可能的值:
- ‘sad’
绝对差值之和,快速(默认)
- ‘sse’
误差平方和
- ‘satd’
绝对 Hadamard 变换差值之和
- ‘dct’
DCT 变换绝对差值之和
- ‘psnr’
量化误差平方和(避免,低质量)
- ‘bit’
块所需的位数
- ‘rd’
率失真最佳,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差之和
- ‘vsse’
垂直差平方和
- ‘nsse’
噪声保留平方差和
- ‘w53’
5/3 小波,仅在雪中使用
- ‘w97’
9/7 小波,仅在雪中使用
- ‘dctmax’
- ‘chroma’
- ildctcmp integer (encoding,video)
设置隔行DCT比较功能。
可能的值:
- ‘sad’
绝对差值之和,快速(默认)
- ‘sse’
误差平方和
- ‘satd’
绝对 Hadamard 变换差值之和
- ‘dct’
DCT 变换绝对差值之和
- ‘psnr’
量化误差平方和(避免,低质量)
- ‘bit’
块所需的位数
- ‘rd’
率失真最佳,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差之和
- ‘vsse’
垂直差平方和
- ‘nsse’
噪声保留平方差和
- ‘w53’
5/3 小波,仅在雪中使用
- ‘w97’
9/7 小波,仅在雪中使用
- ‘dctmax’
- ‘chroma’
- dia_size integer (encoding,video)
设置运动估计的菱形类型和大小。
- ‘(1024, INT_MAX)’
全运动估计(最慢)
- ‘(768, 1024]’
嗯运动估计
- ‘(512, 768]’
六角运动估计
- ‘(256, 512]’
l2s 菱形运动估计
- ‘[2,256]’
var 菱形运动估计
- ‘(-1, 2)’
小菱形运动估计
- ‘-1’
有趣的钻石运动估计
- ‘(INT_MIN, -1)’
sab钻石运动估计
- last_pred integer (encoding,video)
设置前一帧的运动预测变量的数量。
- precmp integer (encoding,video)
设置预运动估计比较功能。
可能的值:
- ‘sad’
绝对差值之和,快速(默认)
- ‘sse’
误差平方和
- ‘satd’
绝对 Hadamard 变换差值之和
- ‘dct’
DCT 变换绝对差值之和
- ‘psnr’
量化误差平方和(避免,低质量)
- ‘bit’
块所需的位数
- ‘rd’
率失真最佳,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差之和
- ‘vsse’
垂直差平方和
- ‘nsse’
噪声保留平方差和
- ‘w53’
5/3 小波,仅在雪中使用
- ‘w97’
9/7 小波,仅在雪中使用
- ‘dctmax’
- ‘chroma’
- pre_dia_size integer (encoding,video)
设置运动估计预通道的菱形类型和大小。
- subq integer (encoding,video)
设置亚像素运动估计质量。
- me_range integer (encoding,video)
设置限制运动矢量范围(DivX 播放器为 1023)。
- global_quality integer (encoding,audio,video)
- slice_flags integer
- mbd integer (encoding,video)
设置宏块决策算法(高质量模式)。
可能的值:
- ‘simple’
使用 mbcmp(默认)
- ‘bits’
使用最少的位
- ‘rd’
使用最佳率失真
- rc_init_occupancy integer (encoding,video)
设置解码开始前应加载到 rc 缓冲区的位数。
- flags2 flags (decoding/encoding,audio,video,subtitles)
-
可能的值:
- ‘fast’
允许不符合规范的加速技巧。
- ‘noout’
跳过比特流编码。
- ‘ignorecrop’
忽略来自 sps 的裁剪信息。
- ‘local_header’
将全局标题放置在每个关键帧上,而不是放在额外数据中。
- ‘chunks’
帧数据可能被分成多个块。
- ‘showall’
显示第一个关键帧之前的所有帧。
- ‘export_mvs’
将运动矢量导出到帧侧数据(请参阅 参考资料
AV_FRAME_DATA_MOTION_VECTORS
)以了解支持它的编解码器。也可以看看文档/示例/export_mvs.c。- ‘skip_manual’
不要跳过样本并将跳过信息导出为帧侧数据。
- ‘ass_ro_flush_noop’
不要在刷新时重置 ASS ReadOrder 字段。
- ‘icc_profiles’
从比色标签生成/解析嵌入的 ICC 配置文件。
- export_side_data flags (decoding/encoding,audio,video,subtitles)
-
可能的值:
- ‘mvs’
将运动矢量导出到帧侧数据(请参阅 参考资料
AV_FRAME_DATA_MOTION_VECTORS
)以了解支持它的编解码器。也可以看看文档/示例/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 解码器。
- threads integer (decoding/encoding,video)
设置要使用的线程数,以防所选编解码器实现支持多线程。
可能的值:
- ‘auto, 0’
自动选择要设置的线程数
默认值为 '汽车'。
- dc integer (encoding,video)
设置intra_dc_ precision。
- nssew integer (encoding,video)
设置 nsse 权重。
- skip_top integer (decoding,video)
设置顶部跳过的宏块行数。
- skip_bottom integer (decoding,video)
设置底部跳过的宏块行数。
- profile integer (encoding,audio,video)
-
设置编码器编解码器配置文件。默认值为 '未知'。编码器特定配置文件记录在相关编码器文档中。
- level integer (encoding,audio,video)
-
设置编码器电平。此级别取决于特定的编解码器,并且可能对应于配置文件级别。它默认设置为 '未知'。
可能的值:
- ‘unknown’
- lowres integer (decoding,audio,video)
以 1= 1/2、2=1/4、3=1/8 分辨率进行解码。
- mblmin integer (encoding,video)
设置最小宏块拉格朗日因子 (VBR)。
- mblmax integer (encoding,video)
设置最大宏块拉格朗日因子 (VBR)。
- skip_loop_filter integer (decoding,video)
- skip_idct integer (decoding,video)
- skip_frame integer (decoding,video)
-
根据选项值选择的帧类型进行解码器丢弃处理。
跳过循环过滤器跳过帧循环过滤,跳过IDCT 跳帧 IDCT/反量化,跳帧跳过解码。
可能的值:
- ‘none’
不丢弃任何框架。
- ‘default’
丢弃无用的帧,例如 0 大小的帧。
- ‘noref’
丢弃所有非参考帧。
- ‘bidir’
丢弃所有双向帧。
- ‘nokey’
丢弃除关键帧之外的所有帧。
- ‘nointra’
丢弃除 I 帧之外的所有帧。
- ‘all’
丢弃所有帧。
默认值为 '默认'。
- bidir_refine integer (encoding,video)
细化双向宏块中使用的两个运动矢量。
- keyint_min integer (encoding,video)
设置 IDR 帧之间的最小间隔。
- refs integer (encoding,video)
设置参考帧以考虑运动补偿。
- trellis integer (encoding,audio,video)
设置率失真最佳量化。
- mv0_threshold integer (encoding,video)
- compression_level integer (encoding,audio,video)
- bits_per_raw_sample integer
- channel_layout integer (decoding/encoding,audio)
-
可能的值:
- request_channel_layout integer (decoding,audio)
-
可能的值:
- rc_max_vbv_use float (encoding,video)
- rc_min_vbv_use float (encoding,video)
- color_primaries integer (decoding/encoding,video)
可能的值:
- ‘bt709’
BT.709
- ‘bt470m’
BT.470M
- ‘bt470bg’
BT.470 BG
- ‘smpte170m’
SMPTE 170M
- ‘smpte240m’
SMPTE 240M
- ‘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 integer (decoding/encoding,video)
可能的值:
- ‘bt709’
BT.709
- ‘gamma22’
BT.470M
- ‘gamma28’
BT.470 BG
- ‘smpte170m’
SMPTE 170M
- ‘smpte240m’
SMPTE 240M
- ‘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 integer (decoding/encoding,video)
可能的值:
- ‘rgb’
RGB
- ‘bt709’
BT.709
- ‘fcc’
美国联邦通信委员会
- ‘bt470bg’
BT.470 BG
- ‘smpte170m’
SMPTE 170M
- ‘smpte240m’
SMPTE 240M
- ‘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’
心电图
- color_range integer (decoding/encoding,video)
如果用作输入参数,它会向解码器提示输入的 color_range。可能的值:
- ‘tv’
- ‘mpeg’
- ‘limited’
MPEG (219*2^(n-8))
- ‘pc’
- ‘jpeg’
- ‘full’
JPEG (2^n-1)
- chroma_sample_location integer (decoding/encoding,video)
可能的值:
- ‘left’
- ‘center’
- ‘topleft’
- ‘top’
- ‘bottomleft’
- ‘bottom’
- log_level_offset integer
设置日志级别偏移量。
- slices integer (encoding,video)
并行编码中使用的切片数量。
- thread_type flags (decoding/encoding,video)
选择要使用的多线程方法。
用于 '框架' 将增加每个线程一帧的解码延迟,因此无法提供未来帧的客户端不应使用它。
可能的值:
- ‘slice’
一次解码一帧的多个部分。
仅当使用切片对视频进行编码时,使用切片的多线程才有效。
- ‘frame’
一次解码多于一帧。
默认值为 '切片+帧'。
- audio_service_type integer (encoding,audio)
设置音频服务类型。
可能的值:
- ‘ma’
主要音频服务
- ‘ef’
效果
- ‘vi’
视障人士
- ‘hi’
听力障碍
- ‘di’
对话
- ‘co’
评论
- ‘em’
紧急情况
- ‘vo’
画外音
- ‘ka’
卡拉OK
- request_sample_fmt sample_fmt (decoding,audio)
设置音频解码器应该首选的样本格式。默认值为
none
。- pkt_timebase rational number
- sub_charenc encoding (decoding,subtitles)
设置输入字幕的字符编码。
- field_order field_order (video)
设置/覆盖视频的场序。可能的值:
- ‘progressive’
渐进式视频
- ‘tt’
隔行扫描视频,顶场编码并首先显示
- ‘bb’
隔行扫描视频,底场编码并先显示
- ‘tb’
隔行视频,顶部编码优先,底部优先显示
- ‘bt’
隔行扫描视频,底部编码优先,顶部优先显示
- skip_alpha bool (decoding,video)
设置为 1 以禁用处理 Alpha(透明度)。这就像'灰色的' 中的标志旗帜跳过色度信息而不是 alpha 的选项。默认值为 0。
- codec_whitelist list (input)
“,”分隔允许的解码器列表。默认情况下,所有内容都是允许的。
- dump_separator string (input)
分隔符用于分隔命令行上打印的有关流参数的字段。例如,要使用换行符和缩进分隔字段:
ffprobe -dump_separator " " -i ~/videos/matrixbench_mpeg2.mpg
- max_pixels integer (decoding/encoding,video)
每个图像的最大像素数。该值可用于避免由于大图像导致的内存不足故障。
- apply_cropping bool (decoding,video)
如果裁剪参数是左侧和顶部参数所需对齐的倍数,则启用裁剪。如果不符合对齐方式,将进行部分裁剪以保持对齐。默认值为 1(启用)。注意:所需的对齐取决于是否
AV_CODEC_FLAG_UNALIGNED
设置和CPU。AV_CODEC_FLAG_UNALIGNED
无法从命令行更改。此外,硬件解码器不会应用左/上裁剪。
10 个解码器
解码器是 FFmpeg 中的配置元素,允许解码多媒体流。
当您配置 FFmpeg 构建时,默认情况下会启用所有支持的本机解码器。需要外部库的解码器必须通过相应的选项手动启用--enable-lib
。您可以使用配置选项列出所有可用的解码器--list-decoders
。
您可以使用配置选项禁用所有解码器
,并使用选项/
--disable-decoders
选择性地启用/禁用单个解码器。
--enable-decoder=DECODER
--disable-decoder=DECODER
ff* 工具的选项-decoders
将显示启用的解码器列表。
11 个视频解码器
下面是一些当前可用的视频解码器的描述。
11.1 av1
AOMedia 视频 1 (AV1) 解码器。
11.1.1 选项
- operating_point
选择可扩展 AV1 比特流的操作点 (0 - 31)。默认值为 0。
11.2 rawvideo
原始视频解码器。
该解码器对原始视频流进行解码。
11.2.1 选项
- top top_field_first
指定输入视频的假定字段类型。
- -1
视频被假定为渐进式(默认)
- 0
假设底场优先
- 1
假设顶场优先
11.3 libdav1d
dav1d AV1 解码器。
libdav1d 允许 libavcodec 解码 AOMedia Video 1 (AV1) 编解码器。需要在配置过程中存在 libdav1d 标头和库。您需要使用 显式配置构建--enable-libdav1d
。
11.3.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.4 libdavs2
AVS2-P2/IEEE1857.4 视频解码器包装器。
该解码器允许 libavcodec 使用 davs2 库解码 AVS2 流。
11.5 libuavs3d
AVS3-P2/IEEE1857.10视频解码器。
libuavs3d 允许 libavcodec 解码 AVS3 流。需要在配置过程中存在 libuavs3d 标头和库。您需要使用 显式配置构建--enable-libuavs3d
。
11.5.1 选项
libuavs3d 包装器支持以下选项。
- frame_threads
设置解码期间要使用的帧线程数量。默认值为 0(自动检测)。
11.6 QSV Decoders
英特尔 QuickSync 视频解码器系列(VC1、MPEG-2、H.264、HEVC、JPEG/MJPEG、VP8、VP9、AV1)。
11.6.1 常用选项
所有 qsv 解码器都支持以下选项。
- async_depth
内部并行化深度,值越高,延迟越高。
- gpu_copy
视频和系统内存之间的 GPU 加速复制
- ‘default’
- ‘on’
- ‘off’
11.6.2 HEVC 选项
hevc_qsv 的额外选项。
- load_plugin
用于在内部会话中加载的用户插件
- ‘none’
- ‘hevc_sw’
- ‘hevc_hw’
- load_plugins
:-要在内部会话中加载的十六进制插件 UID 的单独列表
11.7 v210
未压缩的 4:2:2 10 位解码器。
11.7.1 选项
- custom_stride
设置 v210 数据的行大小(以字节为单位)。默认值为 0(自动检测)。您可以对无步幅 v210 使用特殊的 -1 值,如 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。有 3 个值得注意的比例因子范围:
- drc_scale == 0
刚果民主共和国禁用。产生全频音频。
- 0 < drc_scale <= 1
已启用 DRC。应用流 DRC 值的一小部分。音频再现介于全范围和全压缩之间。
- drc_scale > 1
已启用 DRC。不对称地应用 drc_scale。响亮的声音被完全压缩。柔和的声音得到增强。
12.2 flac
FLAC 音频解码器。
该解码器旨在实现 Xiph 的完整 FLAC 规范。
12.2.1 FLAC 解码器选项
- -use_buggy_lpc
lavc FLAC 编码器用于生成具有高 lpc 值(如默认值)的有问题的流。此选项使得可以通过使用 lavc 旧的有缺陷的 lpc 逻辑进行解码来正确解码此类流。
12.3 ffwavesynth
内波合成器。
该解码器根据预定义的序列生成波形图案。它的使用纯粹是内部的,它接受的数据格式没有公开记录。
12.4 libcelt
libcelt 解码器包装器。
libcelt 允许 libavcodec 解码 Xiph CELT 超低延迟音频编解码器。需要在配置过程中存在 libcelt 标头和库。您需要使用 显式配置构建--enable-libcelt
。
12.5 libgsm
libgsm 解码器包装器。
libgsm 允许 libavcodec 解码 GSM 全速率音频编解码器。需要在配置过程中存在 libgsm 标头和库。您需要使用 显式配置构建--enable-libgsm
。
该解码器支持普通 GSM 和 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
。
存在 AMR-NB 的 FFmpeg 本机解码器,因此用户无需此库即可解码 AMR-NB。
12.8 libopencore-amrwb
libopencore-amrwb 解码器包装器。
libopencore-amrwb 允许 libavcodec 解码自适应多速率宽带音频编解码器。使用它需要在配置过程中存在 libopencore-amrwb 标头和库。您需要使用 显式配置构建--enable-libopencore-amrwb
。
存在 AMR-WB 的 FFmpeg 本机解码器,因此用户无需此库即可解码 AMR-WB。
12.9 libopus
libopus 解码器包装器。
libopus 允许 libavcodec 解码 Opus 交互式音频编解码器。需要在配置过程中存在 libopus 标头和库。您需要使用 显式配置构建
--enable-libopus
。
Opus 存在 FFmpeg 本机解码器,因此用户无需此库即可解码 Opus。
13个字幕解码器
13.1 libaribb24
ARIB STD-B24 字幕解码器。
实施 ARIB STD-B24 标准的配置文件 A 和 C。
13.1.1 libaribb24 解码器选项
- -aribb24-base-path path
设置 libaribb24 库的基本路径。这用于读取配置文件(用于自定义 unicode 转换),以及将非文本符号转储为该位置下的图像。
默认情况下取消设置。
- -aribb24-skip-ruby-text boolean
告诉解码器包装器跳过包含半高 ruby 文本的文本块。
默认启用。
13.2 libaribcaption
另一个使用外部libaribcaption 库的 ARIB STD-B24 字幕解码器。
实现日本 ARIB STD-B24 标准、巴西 ABNT NBR 15606-1 和菲律宾版本 ISDB-T 的配置文件 A 和 C。
需要在配置过程中存在 libaribcaption 标头和库 ( https://github.com/xqq/libaribcaption )。您需要使用 显式配置构建--enable-libaribcaption
。如果同时启用libaribb24和libaribcaption ,则libaribcaption
解码器优先。
13.2.1 libaribcaption 解码器选项
- -sub_type subtitle_type
指定解码字幕的格式。
- ‘bitmap’
图形图像。
- ‘ass’
ASS 格式的文本。
- ‘text’
基于简单文本的输出,无需格式化。
默认为ass ,与libaribb24解码器相同。一些现有的播放器(例如mpv)希望 ARIB 字幕采用 ASS 格式。
- -caption_encoding encoding_scheme
指定输入字幕文本的编码方案。
- ‘auto’
自动检测文本编码(默认)。
- ‘jis’
ARIB STD B24 中定义的 8 位字符 JIS 编码。这种编码在日本用于 ISDB 字幕。
- ‘utf8’
ARIB STD B24 中定义的 UTF-8 编码。此编码在菲律宾用于 ISDB-T 字幕。
- ‘latin’
ABNT NBR 15606-1 中定义的拉丁字符编码。此编码在南美洲用于 SBTVD / ISDB-Tb 字幕。
- -font font_name[,font_name2,...]
指定用于位图 或ass类型字幕渲染的字体系列名称的逗号分隔列表。屁股类型字幕仅使用第一个字体名称。
如果未指定,则使用内部定义的默认字体系列。
- -ass_single_rect boolean
ARIB STD-B24 规定某些字幕可以一次显示在不同的位置(多矩形字幕)。由于某些播放器(例如,旧的mpv)无法处理单个 AVSubtitle 中的多个 ASS 矩形,或者具有相同开始时间戳的不确定持续时间的多个 ASS 矩形,因此此选项可以更改行为,以便所有文本都显示在单个 AVSubtitle 中ASS 矩形。
默认为false。
如果您的播放器无法正确处理具有多个 ASS 矩形的 AVSubtitles,请将此选项设置为true或定义
ASS_SINGLE_RECT=1
以更改编译时的默认行为。- -force_outline_text boolean
指定是否始终为所有字符呈现轮廓文本,而不管字符样式的指示如何。
默认为false。
- -outline_width number (0.0 - 3.0)
指定轮廓文本的宽度,以点(相对)为单位。
默认值为1.5。
- -ignore_background boolean
指定是否忽略背景颜色渲染。
默认为false。
- -ignore_ruby boolean
指定是否忽略类拼音(注音假名)字符的渲染。
默认为false。
- -replace_drcs boolean
指定是否将替换的 DRCS 字符呈现为 Unicode 字符。
默认值为true。
- -replace_msz_ascii boolean
指定是否用半角字母数字替换 MSZ(中号;半角)全角字母数字。
默认值为true。
- -replace_msz_japanese boolean
指定是否将某些 MSZ(中号;半角)全角日语特殊字符替换为半角字符。
默认值为true。
- -replace_msz_glyph boolean
指定是否用半角字形替换 MSZ(中号;半角)字符(如果字体支持)。此选项适用于具有 Adobe-Japan1 兼容字体的 FreeType 或 DirectWrite 渲染器。例如,IBM Plex Sans JP、Morisawa BIZ UDGothic、Morisawa BIZ UDMincho、Yu Gothic、Yu Mincho 和 Meiryo。
默认值为true。
- -canvas_size image_size
指定渲染字幕的画布的分辨率;通常,这应该是输入视频的帧大小。
-subtitle_type
这仅在设置为bitmap时适用。libaribcaption 解码器假定位图渲染的输入帧大小如下:
- PROFILE_A:1440 x 1080,SAR (PAR) 4:3
- PROFILE_C:320 x 180,SAR (PAR) 1:1
如果输入视频的实际帧大小与上述假设不匹配,则渲染的字幕可能会失真。为了使字幕不失真,请添加
-canvas_size
选项来指定实际输入视频大小。请注意,
-canvas_size
对于不同尺寸但相同宽高比的视频,不需要该选项。-canvas_size
在这种情况下,如果未指定选项,字幕将拉伸或缩小到实际视频大小。如果-canvas_size
选项指定了不同的大小,则标题将根据计算的 SAR 拉伸或收缩为指定的大小。
13.2.2 libaribcaption解码器使用示例
通过工具显示带有ARIB字幕的MPEG-TS文件ffplay
:
ffplay -sub_type bitmap MPEG.TS
通过工具显示输入帧大小为1920x1080的MPEG-TS文件ffplay
:
ffplay -sub_type bitmap -canvas_size 1920x1080 MPEG.TS
在转码视频中嵌入 ARIB 字幕:
ffmpeg -sub_type bitmap -i src.m2t -filter_complex "[0:v][0:s]overlay" -vcodec h264 dest.mp4
13.3 dvbsub
13.3.1 选项
- compute_clut
- -2
如果流中没有匹配的 CLUT,则计算一次 clut。
- -1
如果流中没有匹配的 CLUT,则计算 clut。
- 0
从不计算 CLUT
- 1
始终计算 CLUT 并覆盖流中提供的 CLUT。
- dvb_substream
选择 dvb 子流,如果默认值为 -1,则选择所有子流。
13.4 dvdsub
该编解码器对 DVD 中使用的位图字幕进行解码;在 VobSub 文件对和某些 Matroska 文件中也可以找到相同的字幕。
13.4.1 选项
- palette
指定位图使用的全局调色板。当存储在VobSub中时,调色板通常在索引文件中指定;在 Matroska 中,调色板以与 VobSub 中相同的格式存储在编解码器额外数据中。在 DVD 中,调色板存储在 IFO 文件中,因此在从转储的 VOB 文件中读取时不可用。
该选项的格式是一个字符串,包含 16 个 24 位十六进制数字(不带 0x 前缀),以逗号分隔,例如
0d00ee, ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1, 7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b
。- ifo_palette
指定从中获取全局调色板的 IFO 文件。(实验性)
- forced_subs_only
仅解码标记为强制的字幕条目。有些影片在同一曲目中具有强制字幕和非强制字幕。将此标志设置为
1
只会保留强制字幕。默认值为0
。
13.5 libzvbi-teletext
Libzvbi 允许 libavcodec 解码 DVB 图文电视页面和 DVB 图文电视字幕。需要在配置过程中存在 libzvbi 标头和库。您需要使用 显式配置构建
--enable-libzvbi
。
13.5.1 选项
- txt_page
要解码的图文电视页码列表。与指定列表不匹配的页面将被删除。您可以使用特殊
*
字符串来匹配所有页面,或subtitle
匹配所有字幕页面。默认值为*。- txt_default_region
设置用于解码的默认字符集,值介于 0 和 87 之间(请参阅 ETS 300 706,第 15 节,表 32)。默认值为 -1,不会覆盖 libzvbi 默认值。对于某些无法发出正确字符集信号的旧版 1.0 传输,需要此选项。
- txt_chop_top
丢弃顶部图文电视行。默认值为 1。
- txt_format
指定解码字幕的格式。
- bitmap
默认格式,您应该将其用于图文电视页面,因为某些图形和颜色无法用简单文本甚至 ASS 来表达。
- text
基于简单文本的输出,无需格式化。
- ass
格式化的 ASS 输出、字幕页面和图文电视页面以不同的样式返回,字幕页面被精简为文本,但努力保持文本对齐和格式。
- txt_left
生成位图的 X 偏移量,默认为 0。
- txt_top
生成位图的 Y 偏移量,默认为 0。
- txt_chop_spaces
删除前导和尾随空格并从生成的文本中删除空行。此选项对于基于图文电视的字幕很有用,其中行的开头或结尾处可能存在空格,或者由于双倍大小的图文电视字符,字幕行之间可能存在空行。默认值为 1。
- txt_duration
设置解码的图文电视页面或字幕的显示持续时间(以毫秒为单位)。默认值为-1,表示无穷大或直到下一个字幕事件到来。
- txt_transparent
强制生成的图文电视位图的背景透明。默认值为 0,表示背景不透明。
- txt_opacity
设置图文电视背景的不透明度 (0-255)。如果 txt_透明未设置,它仅影响开始框和结束框之间的字符,通常是字幕。默认值为 0,如果 txt_透明已设置,否则为 255。
14 个编码器
编码器是 FFmpeg 中的配置元素,允许对多媒体流进行编码。
当您配置 FFmpeg 构建时,默认情况下会启用所有支持的本机编码器。需要外部库的编码器必须通过相应的选项手动启用--enable-lib
。您可以使用配置选项列出所有可用的编码器--list-encoders
。
您可以使用配置选项禁用所有编码器
,并使用选项/
--disable-encoders
选择性地启用/禁用单个编码器。
--enable-encoder=ENCODER
--disable-encoder=ENCODER
ff* 工具的选项-encoders
将显示启用的编码器列表。
15 个音频编码器
下面是一些当前可用的音频编码器的描述。
15.1 aac
高级音频编码 (AAC) 编码器。
该编码器是默认的 AAC 编码器,本地实现到 FFmpeg 中。
15.1.1 选项
- b
设置比特率(以位/秒为单位)。设置此项会自动激活恒定比特率 (CBR) 模式。如果未指定此选项,则将其设置为 128kbps。
- q
设置可变比特率 (VBR) 模式的质量。
ffmpeg
该选项仅在使用命令行工具时有效。对于库界面用户,请使用 全局质量。- cutoff
设置截止频率。如果未指定,将允许编码器动态调整截止以提高低比特率的清晰度。
- aac_coder
设置AAC编码器的编码方式。可能的值:
- ‘twoloop’
两种循环搜索(TLS)方法。这是默认方法。
该方法首先根据频带阈值设置量化器,然后尝试通过从所有量化器中添加或减去特定值并稍微调整一些单独的量化器来找到最佳组合。将根据是否调整自身aac_is,aac_ms和aac_pns 已启用。
- ‘anmr’
基于平均噪声掩模比 (ANMR) 网格的解决方案。
这是一个实验性编码器,目前产生的质量较低,更不稳定,并且比默认的双循环编码器慢,但具有潜力。目前不支持aac_is或者aac_pns选项。目前不推荐。
- ‘fast’
恒定量化器方法。
使用更便宜的双循环算法版本,不会尝试进行许多巧妙的调整。低比特率(低于 64kbps)时情况更糟,但较高比特率时更好、更快。
- aac_ms
设置中/侧编码模式。默认值“auto”将自动使用 M/S 和频段,这将受益于此类编码。可以使用“enable”值对所有频段强制启用,这主要用于调试或使用“disable”禁用。
- aac_is
设置强度立体声编码工具的使用。默认情况下,它是启用的,如果有好处的话,它会自动切换相似的立体声频段对的 IS。可以通过将值设置为“disable”来禁用调试。
- aac_pns
在解码过程中使用感知噪声替代,用难以察觉的白噪声替换低熵高频段。默认情况下,它是启用的,但可以使用“disable”将其禁用以进行调试。
- aac_tns
允许使用跨越高频带的多抽头 FIR 滤波器,以隐藏编码过程中的量化噪声,并由解码器恢复。除了减少高频段中令人不快的伪影之外,这还减少了高频段的熵,并允许中低频段使用更多的比特。默认情况下它是启用的,但可以通过将选项设置为“禁用”来禁用调试。
- aac_ltp
允许使用长期预测扩展,通过在整个帧的频带中扩展恒定的谐波峰值,可以提高带宽极低情况下的编码效率,例如语音或钢琴独奏音乐的编码。此选项由 profile:a aac_low 隐含,与 aac_pred 不兼容。结合使用-ar降低采样率。
- aac_pred
允许使用更传统的预测方式,其中传输的频谱系数由当前系数减去先前“预测”系数的差值代替。从理论上讲,有时在实践中,这可以提高中低比特率音频的质量。此选项隐含 aac_main 配置文件,并且与 aac_ltp 不兼容。
- profile
设置编码配置文件,可能的值:
- ‘aac_low’
默认的 AAC“低复杂性”配置文件。是最兼容的并且产生良好的质量。
- ‘mpeg2_aac_low’
相当于
-profile:a aac_low -aac_pns 0
。PNS 是随 MPEG4 规范一起引入的。- ‘aac_ltp’
长期预测配置文件由以下各项启用并将启用aac_ltp 选项。在 MPEG4 中引入。
- ‘aac_main’
主要类型预测配置文件,由启用并将启用aac_pred 选项。在 MPEG2 中引入。
如果未指定此选项,则将其设置为 'aac_low'。
15.2 ac3 and ac3_fixed
AC-3 音频编码器。
这些编码器实现了 ATSC A/52:2010 和 ETSI TS 102 366 的一部分,以及未记录的 RealAudio 3(又名 dnet)。
ac3编码器使用浮点数学,而ac3_fixed
编码器仅使用定点整数数学。这并不意味着其中一种总是更快,只是其中一种可能更适合特定系统。ac3_fixed编码器不是任何输出格式的默认编解码器,因此必须使用该选项显式指定它
-acodec ac3_fixed
才能使用它。
15.2.1 AC-3 元数据
AC-3 元数据选项用于设置描述音频的参数,但在大多数情况下不会影响音频编码本身。有些选项确实会直接影响或影响结果比特流的解码和播放,而其他选项仅用于提供信息。一些选项会将位添加到输出流中,否则这些位可用于音频数据,从而影响输出的质量。这些将在下面的选项列表中相应地用注释表示。
这些参数在几个公开的文档中有详细描述。
15.2.1.1 元数据控制选项
- -per_frame_metadata boolean
允许每帧元数据。指定编码器是否应检查每个帧的元数据更改。
- 0
初始化时设置的元数据值将用于流中的每个帧。(默认)
- 1
在对每个帧进行编码之前可以更改元数据值。
15.2.1.2 缩混级别
- -center_mixlev level
中心混合级别。缩混为立体声时解码器应应用于中央通道的增益量。仅当存在中央通道时,该字段才会写入比特流。该值被指定为比例因子。有 3 个有效值:
- 0.707
应用-3dB增益
- 0.595
应用 -4.5dB 增益(默认)
- 0.500
应用-6dB增益
- -surround_mixlev level
环绕声混音级别。缩混为立体声时解码器应应用于环绕声道的增益量。仅当存在一个或多个环绕声道时,该字段才会写入比特流。该值被指定为比例因子。有 3 个有效值:
- 0.707
应用-3dB增益
- 0.500
应用 -6dB 增益(默认)
- 0.000
静音环绕声道
15.2.1.3 音频制作信息
音频制作信息是描述混合环境的可选信息。这些字段要么不写入,要么全部写入比特流。
- -mixing_level number
混合级别。指定制作环境中混音掌握时的峰值声压级 (SPL)。有效值为 80 到 111,或 -1 表示未知或未指示。默认值为 -1,但如果音频制作信息写入比特流,则无法使用该值。因此,如果该
room_type
选项不是默认值,则该mixing_level
选项不能为-1。- -room_type type
房型。描述在工作室或配音阶段的最终混音过程中使用的均衡。一个大房间是一个配音舞台,具有行业标准的X曲线均衡;小房间有平坦的均衡。
mixing_level
如果选项和room_type
选项都具有默认值, 则该字段不会写入比特流。- 0
- notindicated
未指定(默认)
- 1
- large
大房间
- 2
- small
小房间
15.2.1.4 其他元数据选项
- -copyright boolean
版权指示器。指定该音频是否存在版权。
- 0
- off
不存在版权(默认)
- 1
- on
版权存在
- -dialnorm value
对话正常化。指示节目的平均对话电平低于数字 100% 满量程 (0 dBFS) 的程度。该参数确定音频再现期间的电平移动,将对话的平均音量设置为预设电平。目标是匹配节目源之间的音量级别。-31dB 的值将导致在音频再现期间相对于源音量没有音量级别变化。有效值为 -31 到 -1 范围内的整数,默认值为 -31。
- -dsur_mode mode
杜比环绕模式。指定立体声信号是否使用 Dolby Surround (Pro Logic)。仅当音频流是立体声时,该字段才会写入比特流。使用此选项并不意味着编码器将实际应用杜比环绕声处理。
- 0
- notindicated
未指定(默认)
- 1
- off
非杜比环绕编码
- 2
- on
杜比环绕编码
- -original boolean
原始比特流指示器。指定此音频是否来自原始来源而不是副本。
- 0
- off
非原始来源
- 1
- on
原始来源(默认)
15.2.2 扩展比特流信息
扩展比特流选项是 A/52:2010 标准附件 D 中指定的备用比特流语法的一部分。它分为 2 部分。如果指定了一组中的任何一个参数,则该组中的所有值都将写入比特流。默认值用于已写入但未指定的值。如果写入了混合级别,并且解码器支持备用比特流语法,则
解码器将使用这些值而不是center_mixlev
和选项中指定的值。surround_mixlev
15.2.2.1 扩展比特流信息 - 第 1 部分
- -dmix_mode mode
首选立体声缩混模式。允许用户选择 Lt/Rt(杜比环绕声)或 Lo/Ro(正常立体声)作为首选立体声缩混模式。
- 0
- notindicated
未指定(默认)
- 1
- ltrt
Lt/Rt 缩混首选
- 2
- loro
Lo/Ro 缩混首选
- -ltrt_cmixlev level
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 level
Lt/Rt 环绕声混音电平。在 Lt/Rt 模式下混音为立体声时,解码器应应用于环绕声道的增益量。
- 0.841
应用-1.5dB增益
- 0.707
应用-3.0dB增益
- 0.595
应用-4.5dB增益
- 0.500
应用 -6.0dB 增益(默认)
- 0.000
静音环绕声道
- -loro_cmixlev level
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 level
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 mode
杜比环绕 EX 模式。指示流是否使用 Dolby Surround EX(7.1 矩阵化为 5.1)。使用此选项并不意味着编码器将实际应用 Dolby Surround EX 处理。
- 0
- notindicated
未指定(默认)
- 1
- on
杜比环绕 EX 关闭
- 2
- off
杜比环绕 EX 开启
- -dheadphone_mode mode
杜比耳机模式。指示流是否使用 Dolby Headphone 编码(多声道矩阵化为 2.0 以与耳机一起使用)。使用此选项并不意味着编码器将实际应用杜比耳机处理。
- 0
- notindicated
未指定(默认)
- 1
- on
杜比耳机关闭
- 2
- off
杜比耳机开启
- -ad_conv_type type
A/D 转换器类型。指示音频是否经过HDCD A/D转换。
- 0
- standard
标准A/D转换器(默认)
- 1
- hdcd
HDCD A/D 转换器
15.2.3 其他 AC-3 编码选项
- -stereo_rematrixing boolean
立体声重新矩阵。启用/禁用立体声输入的重新矩阵。这是一项可选的 AC-3 功能,可通过选择性地将左/右通道编码为中/侧来提高质量。默认情况下启用此选项,强烈建议将其保留为启用状态,除非用于测试目的。
- cutoff frequency
设置低通截止频率。如果未指定,编码器将选择由各种其他编码参数确定的默认值。
15.2.4 仅浮点 AC-3 编码选项
这些选项仅对浮点编码器有效,对于定点编码器不存在,因为相应的功能未在定点中实现。
- -channel_coupling boolean
启用/禁用通道耦合的使用,这是一项可选的 AC-3 功能,可通过将多个通道的高频信息组合到单个通道中来提高质量。每通道高频信息在频域和时域上的发送精度都较低。这允许更多的比特用于较低的频率,同时保留足够的信息来重建高频。默认情况下,浮点编码器启用此选项,并且通常应保留启用状态,除非用于测试目的或提高编码速度。
- -1
- auto
由编码器选择(默认)
- 0
- off
禁用通道耦合
- 1
- on
启用通道耦合
- -cpl_start_band number
耦合起始带。设置通道耦合起始频带,范围为 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
LPC 分析期间用于 Cholesky 分解的遍数
- min_partition_order
最小划分顺序
- max_partition_order
最大分区顺序
- prediction_order_method
- ‘estimation’
- ‘2level’
- ‘4level’
- ‘8level’
- ‘search’
暴力搜索
- ‘log’
- ch_mode
通道模式
- ‘auto’
为每一帧自动选择模式
- ‘indep’
通道独立编码
- ‘left_side’
- ‘right_side’
- ‘mid_side’
- exact_rice_parameters
选择是精确计算还是近似计算大米参数。如果设置为 1,那么它们将被准确选择,这会稍微减慢代码速度并稍微提高压缩率。
- multi_dim_quant
多维量化。如果设置为 1,则在第一阶段之后应用第二阶段 LPC 算法来微调系数。这非常慢并且稍微改善了压缩。
15.4 opus
Opus 编码器。
这是 Opus 格式的原生 FFmpeg 编码器。目前它正在开发中,仅实现编解码器的 CELT 部分。它的质量通常较差,最多相当于 libopus 编码器。
15.4.1 选项
- b
设置比特率(以位/秒为单位)。如果未指定,它会使用通道数量和布局来进行良好的猜测。
- opus_delay
设置最大延迟(以毫秒为单位)。低于 20 毫秒的延迟将很快降低质量。
15.5 libfdk_aac
libfdk-aac AAC(高级音频编码)编码器包装器。
libfdk-aac 库基于 Android 项目中的 Fraunhofer FDK AAC 代码。
需要在配置过程中存在 libfdk-aac 标头和库。您需要使用 显式配置构建
--enable-libfdk-aac
。该库也不兼容 GPL,因此如果允许使用 GPL,则应使用
--enable-gpl --enable-nonfree --enable-libfdk-aac
.
该编码器支持 AAC-HE 配置文件。
VBR 编码,通过启用虚拟现实或者标志+qscaleoptions 是实验性的,仅适用于某些参数组合。
仅 libfdk-aac 0.1.3 或更高版本支持编码 7.1 音频。
有关更多信息,请参阅http://sourceforge.net/p/opencore-amr/fdk-aac/上的 fdk-aac 项目 。
15.5.1 选项
以下选项映射到共享 FFmpeg 编解码器选项。
- b
设置比特率(以位/秒为单位)。如果未明确指定比特率,则会根据所选配置文件自动将其设置为合适的值。
如果启用了 VBR 模式,则该选项将被忽略。
- ar
设置音频采样率(以 Hz 为单位)。
- channels
设置音频通道数。
- flags +qscale
启用固定质量、VBR(可变比特率)模式。请注意,当虚拟现实值为正。
- cutoff
设置截止频率。如果未指定(或显式设置为 0),它将使用库自动计算的值。默认值为 0。
- profile
设置音频配置文件。
可以识别以下配置文件:
- ‘aac_low’
低复杂度 AAC (LC)
- ‘aac_he’
高效加气混凝土 (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’
显式分层信号
默认值为 '默认'。
- 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 libmp3lame
LAME(Lame Ain't an MP3 Encoder)MP3 编码器包装。
需要在配置过程中存在 libmp3lame 标头和库。您需要使用 显式配置构建
--enable-libmp3lame
。
请参阅libshine了解定点 MP3 编码器,尽管质量较低。
15.6.1 选项
libmp3lame 包装器支持以下选项。lame
括号中列出了等效的选项
。
- b (-b)
设置 CBR 或 ABR 的比特率,以位/秒表示。LAME
bitrate
以千比特/秒表示。- q (-V)
设置 VBR 的恒定质量设置。
ffmpeg
该选项仅在使用命令行工具时有效。对于库界面用户,请使用全局质量。- compression_level (-q)
设置算法质量。有效参数是 0-9 范围内的整数,0 表示质量最高但最慢,9 表示最快但质量最差。
- cutoff (--lowpass)
设置低通截止频率。如果未指定,编码器会动态调整截止。
- reservoir
设置为 1 时启用位存储库的使用。默认值为 1。LAME 默认启用此功能,但可以通过使用来覆盖 ——诺雷斯选项。
- joint_stereo (-m j)
使编码器能够使用(逐帧)L/R 立体声或中/侧立体声。默认值为 1。
- abr (--abr)
设置为 1 时启用编码器使用 ABR。
lame
--abr设置目标比特率,虽然这个选项只是告诉FFmpeg使用ABR仍然依赖乙设置比特率。- copyright (-c)
设置为 1 时设置 MPEG 音频版权标志。默认值为 0(禁用)。
- original (-o)
设置为 1 时设置 MPEG 音频原始标志。默认值为 1(启用)。
15.7 libopencore-amrnb
OpenCORE 自适应多速率窄带编码器。
需要在配置过程中存在 libopencore-amrnb 标头和库。您需要使用 显式配置构建
--enable-libopencore-amrnb --enable-version3
。
这是一个单声道编码器。官方仅支持 8000Hz 采样率,但您可以通过设置覆盖它严格的到 '非官方' 或更低。
15.7.1 选项
- b
设置比特率(以每秒位数为单位)。仅支持以下比特率,否则 libavcodec 将四舍五入到最接近的有效比特率。
- 4750
- 5150
- 5900
- 6700
- 7400
- 7950
- 10200
- 12200
- dtx
设置为 1 时允许间断传输(生成舒适噪音)。默认值为 0(禁用)。
15.8 libopus
libopus Opus 交互式音频编解码器编码器包装器。
需要在配置过程中存在 libopus 标头和库。您需要使用 显式配置构建
--enable-libopus
。
15.8.1 选项映射
大多数 libopus 选项都是根据opusenc
opus-tools 中的实用程序建模的。以下是选项映射表,描述了 libopus 包装器支持的选项以及opusenc
括号中的等效选项。
- b (bitrate)
设置比特率(以位/秒为单位)。FFmpeg 的乙选项以位/秒表示,而
opusenc
s比特率以千比特/秒为单位。- vbr (vbr, hard-cbr, and cvbr)
设置变码模式。FFmpeg虚拟现实选项具有以下有效参数,
opusenc
括号中包含等效选项:- ‘off (hard-cbr)’
使用恒定比特率编码。
- ‘on (vbr)’
使用可变比特率编码(默认)。
- ‘constrained (cvbr)’
使用受约束的可变比特率编码。
- compression_level (comp)
设置编码算法的复杂度。有效选项是 0-10 范围内的整数。0 提供最快的编码但质量较低,而 10 提供最高的质量但最慢的编码。默认值为 10。
- frame_duration (framesize)
设置最大帧大小或帧的持续时间(以毫秒为单位)。该参数必须准确如下:2.5、5、10、20、40、60。较小的帧大小可实现较低的延迟,但在给定比特率下质量较差。大于 20 毫秒的大小仅在相当低的比特率下才有意义。默认值为 20 毫秒。
- packet_loss (expect-loss)
设置预期丢包百分比。默认值为 0。
- fec (n/a)
启用带内前向纠错。数据包丢失必须非零才能利用 - FEC“辅助数据”的频率与预期的数据包丢失成正比。默认为禁用。
- application (N.A.)
设置预期的应用程序类型。下面列出了有效选项:
- ‘voip’
有利于提高语音清晰度。
- ‘audio’
支持忠实于输入(默认)。
- ‘lowdelay’
通过禁用语音优化模式,仅限制最低延迟模式。
- cutoff (N.A.)
设置截止带宽(以 Hz 为单位)。该参数必须是以下之一:4000、6000、8000、12000或20000,分别对应窄带、中带、宽带、超宽带和全带。默认值为 0(禁用截止)。请注意,libopus 强制对比特率 < 15 kbps 进行宽带截止,除非仅限 CELT(应用设置 '低延迟') 模式被使用。
- 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.9 libshine
Shine 定点 MP3 编码器包装。
Shine 是一个定点 MP3 编码器。它在没有 FPU 的平台(例如,armel CPU 以及某些手机和平板电脑)上具有更好的性能。然而,由于它更注重性能而不是质量,因此它在质量方面无法与 LAME 和其他生产级编码器相提并论。此外,根据该项目的主页,该编码器可能不存在错误,因为代码是很久以前编写的,并且该项目已经死亡至少 5 年了。
该编码器仅支持立体声和单声道输入。这也是仅限 CBR 的。
原始项目(最后更新于 2007 年初)位于 http://sourceforge.net/projects/libshine-fxp/。我们仅支持https://github.com/savonet/shine上的 Savonet/Liquidsoap 项目更新的分支。
需要在配置过程中存在 libshine 标头和库。您需要使用 显式配置构建
--enable-libshine
。
另请参见libmp3lame。
15.9.1 选项
libshine 包装器支持以下选项。shineenc
括号中列出了等效的选项
。
- b (-b)
设置 CBR 的比特率,以位/秒表示。
shineenc
-b选项以千位/秒表示。
15.10 libtwolame
TwoLAME MP2 编码器包装。
需要在配置过程中存在 libtwolame 标头和库。您需要使用 显式配置构建
--enable-libtwolame
。
15.10.1 选项
libtwolame 包装器支持以下选项。-
twolame
等效选项遵循 FFmpeg 选项并位于括号内。
- b (-b)
设置 CBR 的比特率,以位/秒表示。
twolame
乙 选项以千位/秒表示。默认值为 128k。- q (-V)
设置实验性 VBR 支持的质量。最大值范围是-50到50,有用范围是-10到10。值越高,质量越好。
ffmpeg
该选项仅在使用命令行工具时有效 。对于库界面用户,请使用全局质量。- mode (--mode)
设置生成的音频的模式。可能的值:
- ‘auto’
根据输入自动选择模式。这是默认设置。
- ‘stereo’
立体声
- ‘joint_stereo’
联合立体声
- ‘dual_channel’
双通道
- ‘mono’
单核细胞增多症
- psymodel (--psyc-mode)
设置用于编码的心理声学模型。参数必须是 -1 到 4 之间的整数(包含 -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.11 libvo-amrwbenc
VisualOn 自适应多速率宽带编码器。
需要在配置期间存在 libvo-amrwbenc 标头和库。您需要使用 显式配置构建
--enable-libvo-amrwbenc --enable-version3
。
这是一个单声道编码器。官方仅支持 16000Hz 采样率,但您可以通过设置覆盖它严格的到 '非官方' 或更低。
15.11.1 选项
- b
设置比特率(以位/秒为单位)。仅支持以下比特率,否则 libavcodec 将四舍五入到最接近的有效比特率。
- ‘6600’
- ‘8850’
- ‘12650’
- ‘14250’
- ‘15850’
- ‘18250’
- ‘19850’
- ‘23050’
- ‘23850’
- dtx
设置为 1 时允许间断传输(生成舒适噪音)。默认值为 0(禁用)。
15.12 libvorbis
libvorbis 编码器包装器。
需要在配置期间存在 libvorbisenc 标头和库。您需要使用 显式配置构建
--enable-libvorbis
。
15.12.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
该选项仅在使用命令行工具时有效。对于库界面用户,请使用全局质量。- cutoff (--advanced-encode-option lowpass_frequency=N)
设置截止带宽(以 Hz 为单位),值为 0 禁用截止。
oggenc
的相关选项以kHz表示。默认值为 '0'(截止已禁用)。- minrate (-m)
设置以位/秒表示的最小比特率。
oggenc
-m以千比特/秒表示。- maxrate (-M)
设置以位/秒表示的最大比特率。
oggenc
-M以千比特/秒表示。这仅对 ABR 模式有效。- iblock (--advanced-encode-option impulse_noisetune=N)
设置脉冲块的本底噪声偏置。该值为 -15.0 到 0.0 之间的浮点数。负偏差指示编码器特别注意编码音频中瞬态的清晰度。更好的瞬态响应的代价是更高的比特率。
15.13 mjpeg
运动 JPEG 编码器。
15.13.1 选项
- huffman
设置霍夫曼编码策略。可能的值:
- ‘default’
使用默认的霍夫曼表。这是默认策略。
- ‘optimal’
计算并使用最佳霍夫曼表。
15.14 wavpack
WavPack 无损音频编码器。
15.14.1 选项
命令行实用程序的等效选项wavpack
列在括号中。
15.14.1.1 共享选项
以下共享选项对此编码器有效。此处仅记录有关此特定编码器的特殊说明。有关选项的一般含义,请参阅编解码器选项一章。
- frame_size (--blocksize)
对于该编码器,该选项的范围在 128 到 131072 之间。默认值是根据采样率和通道数自动决定的。
完整的违约计算公式请参见 libavcodec/wavpackenc.c。
- compression_level (-f, -h, -hh, and -x)
15.14.1.2 私有选项
- joint_stereo (-j)
设置是否启用联合立体声。有效值为:
- ‘on (1)’
强制中/侧音频编码。
- ‘off (0)’
强制左/右音频编码。
- ‘auto’
让编码器自动决定。
- optimize_mono
设置是否启用单声道优化。此选项仅对非单声道流有效。可用值:
- ‘on’
已启用
- ‘off’
残疾人
16 个视频编码器
下面是一些当前可用的视频编码器的描述。
16.1 a64_multi, a64_multi5
A64 / Commodore 64 多色字符集编码器。a64_multi5
扩展为第五种颜色(colram)。
16.2 Cinepak
Cinepak 又名 CVID 编码器。与 Windows 3.1 和老式 MacOS 兼容。
16.2.1 选项
- g integer
关键帧间隔。至少每
-g
帧插入一个关键帧,有时甚至更快。- q:v integer
品质因数。越低越好。比特率越高,比特率越低。下表列出了使用不同值对 akiyo_cif.y4m 进行编码时的比特
-q:v
率-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 integer
最大额外的码本重新计算次数,越多越好但越慢。
- skip_empty_cb boolean
避免浪费字节,忽略老式 MacOS 解码器。
- max_strips integer
- min_strips integer
要使用的最小和最大条数。更大的范围有时可以提高质量。更多条带通常质量更好,但成本更高。较少的条带往往会产生更多的关键帧。复古兼容是 1..3。
- strip_number_adaptivity integer
帧之间允许改变多少条带数。越高越好但越慢。
16.3 GIF
GIF 图像/动画编码器。
16.3.1 选项
- gifflags integer
设置用于 GIF 编码的标志。
- offsetting
启用图片偏移。
默认启用。
- transdiff
启用帧之间的透明度检测。
默认启用。
- gifimage integer
启用每帧编码一个完整的 GIF 图像,而不是动画 GIF。
默认值为0。
- global_palette integer
如果可行,将调色板写入全局 GIF 标头。
如果禁用,即使提供了全局调色板,每个帧也将始终写入一个调色板。
默认值为1。
16.4 Hap
Vidvox Hap 视频编码器。
16.4.1 选项
- format integer
指定要编码的 Hap 格式。
- hap
- hap_alpha
- hap_q
默认值为哈普。
- chunks integer
指定将帧分割成的块数,介于 1 和 64 之间。这允许对大帧进行多线程解码,但可能会牺牲数据速率。编码器可以修改该值以均匀地划分帧。
默认值为1。
- compressor integer
指定要使用的第二级压缩机。如果设置为没有任何, 块将限制为 1,因为分块的未压缩帧没有任何好处。
- none
- snappy
默认值为活泼的。
16.5 jpeg2000
原生 jpeg 2000 编码器默认是有损的,该-q:v
选项可用于设置编码质量。可以使用 来选择无损编码-pred 1
。
16.5.1 选项
- format integer
可以设置为
j2k
或jp2
(默认值),从而可以存储非 RGB pix_fmts。- tile_width integer
设置图块宽度。范围为 1 到 1073741824。默认值为 256。
- tile_height integer
设置图块高度。范围为 1 到 1073741824。默认值为 256。
- pred integer
允许设置离散小波变换 (DWT) 类型
- dwt97int (Lossy)
- dwt53 (Lossless)
默认为
dwt97int
- sop boolean
启用此选项可在每个数据包的开头添加 SOP 标记。默认禁用。
- eph boolean
启用此选项可在每个数据包标头的末尾添加 EPH 标记。默认禁用。
- prog integer
设置编码器要使用的进展顺序。可能的值为:
- lrcp
- rlcp
- rpcl
- pcrl
- cprl
设置
lrcp
为默认。- layer_rates string
默认情况下,当不使用此选项时,将使用质量指标进行压缩。此选项允许使用压缩比进行压缩。可以指定每个级别的压缩比。层的压缩比
l
决定了第一层中包含的总文件大小的比例l
。用法示例:
ffmpeg -i input.bmp -c:v jpeg2000 -layer_rates "100,10,1" output.j2k
这会将图像压缩为包含 3 层,其中第一层中包含的数据将被压缩 1000 倍,前两层中包含的数据将被压缩 100 倍,并且在使用所有 3 层时应包含所有数据。
16.6 librav1e
rav1e AV1 编码器包装器。
需要在配置过程中存在 rav1e 标头和库。您需要使用 显式配置构建--enable-librav1e
。
16.6.1 选项
- qmax
设置使用比特率模式时要使用的最大量化器。
- qmin
设置使用比特率模式时要使用的最小量化器。
- qp
使用量化器模式以给定量化器 (0-255) 进行编码。
- speed
选择要编码的速度预设 (0-10)。
- tiles
选择要编码的图块数量。
- tile-rows
选择要编码的图块行数。
- tile-columns
选择要编码的图块列数。
- rav1e-params
使用以“:”分隔的键=值对列表设置 rav1e 选项。请参阅
rav1e --help
参考资料 中的选项列表。例如,指定 librav1e 编码选项-rav1e-参数:
ffmpeg -i input -c:v librav1e -b:v 500K -rav1e-params speed=5:low_latency=true output.mp4
16.7 libaom-av1
libaom AV1 编码器包装器。
需要在配置过程中存在 libaom 标头和库。您需要使用 显式配置构建
--enable-libaom
。
16.7.1 选项
该包装器支持以下标准 libavcodec 选项:
- b
设置比特率目标(以位/秒为单位)。默认情况下,这将使用可变比特率模式。如果最大速率和最低利率也设置为相同的值,那么它将使用恒定比特率模式,否则如果crf也已设置,那么它将使用约束质量模式。
- g keyint_min
设置关键帧位置。GOP大小设置关键帧之间的最大距离;如果为零,则输出流将仅是内部的。除非最小距离与 GOP 大小相同,否则将忽略最小距离,在这种情况下关键帧将始终以固定间隔出现。默认情况下未设置,因此如果没有此选项,库可以完全自由选择关键帧的放置位置。
- qmin qmax
设置最小/最大量化值。有效范围为 0 到 63(警告:这与 AV1 实际使用的量化器值不匹配 - 除以四以将实际量化器值映射到此范围)。默认为最小/最大(无限制)。
- minrate maxrate bufsize rc_init_occupancy
设置速率控制缓冲参数。如果未设置则不使用 - 默认为不受约束的可变比特率。
- threads
设置编码时使用的线程数。这可能需要 瓷砖或者行MT选项还可以设置为实际完全使用指定数量的线程。默认为主机支持的硬件线程数。
- profile
设置编码配置文件。默认使用与输入的位深度和色度二次采样相匹配的配置文件。
包装器还有一些特定的选项:
- cpu-used
设置质量/编码速度权衡。有效范围为 0 到 8,数字越大表示速度越快但质量越低。默认值为 1,速度较慢但质量较高。
- auto-alt-ref
启用备用参考系的使用。默认为库的内部默认值。
- arnr-max-frames (frames)
设置 altref 降噪最大帧数。默认值为-1。
- arnr-strength (strength)
设置 altref 降噪滤波器强度。范围为 -1 到 6。默认值为 -1。
- aq-mode (aq-mode)
设置自适应量化模式。可能的值:
- ‘none (0)’
残疾人。
- ‘variance (1)’
基于方差。
- ‘complexity (2)’
基于复杂性。
- ‘cyclic (3)’
循环刷新。
- tune (tune)
设置编码器调谐所用的失真度指标。默认为
psnr
.- ‘psnr (0)’
- ‘ssim (1)’
- lag-in-frames
设置编码器在任一时间出于前瞻目的可以保持飞行的最大帧数。默认为库的内部默认值。
- error-resilience
启用错误恢复功能:
- default
提高针对整个帧丢失的恢复能力。
默认情况下不启用。
- crf
设置恒定质量(无比特率目标)和约束质量(具有最大比特率目标)模式的质量/大小权衡。有效范围为 0 到 63,数字越大表示质量越低且输出大小越小。仅在设置时使用;默认情况下仅使用比特率目标。
- static-thresh
设置块的更改阈值,低于该阈值的块将被编码器跳过。以任意单位定义为非负整数,默认为零(不跳过任何块)。
- drop-threshold
设置接近速率控制界限时丢弃帧的阈值。定义为目标缓冲区的百分比 - 当速率控制缓冲区低于此百分比时,帧将被丢弃,直到重新填充到阈值以上。默认为零(不丢弃任何帧)。
- denoise-noise-level (level)
颗粒合成时要去除的噪声量。如果此选项未设置或设置为 0,则会禁用颗粒合成。
- denoise-block-size (pixels)
用于颗粒合成去噪的块大小。如果未设置,AV1 编解码器将使用默认值 32。
- undershoot-pct (pct)
设置目标比特率的数据率下冲(最小)百分比。范围为 -1 到 100。默认值为 -1。
- overshoot-pct (pct)
设置目标比特率的数据率超调(最大)百分比。范围是 -1 到 1000。默认值为 -1。
- minsection-pct (pct)
GOP 比特率与目标比特率的最小变化百分比。如果未设置 minsection-pct,libaomenc 包装器将按如下方式计算它:
(minrate * 100 / bitrate)
。范围为 -1 到 100。默认值为 -1(未设置)。- maxsection-pct (pct)
GOP 比特率与目标比特率的最大变化百分比。如果未设置 maxsection-pct,libaomenc 包装器将按如下方式计算它:
(maxrate * 100 / bitrate)
。范围为 -1 到 5000。默认值为 -1(未设置)。- frame-parallel (boolean)
启用帧并行解码功能。默认为 true。
- tiles
设置用于对输入视频进行编码的图块数量,如列 x 行。数字越大,编码和解码的并行性就越高,但可能会降低编码效率。默认为输入视频大小所需的最小图块数量(对于 4K 及以下尺寸,此为 1x1(即单个图块))。
- tile-columns tile-rows
将图块数量设置为图块行数和列数的 log2。提供与 libvpx/VP9 的兼容性。
- row-mt (Requires libaom >= 1.0.0-759-g90a15f4f2)
启用基于行的多线程。默认禁用。
- enable-cdef (boolean)
启用约束方向增强过滤器。libaom-av1 编码器默认启用 CDEF。
- enable-restoration (boolean)
启用循环恢复过滤器。libaom-av1 的默认值为 true。
- enable-global-motion (boolean)
启用全局运动进行块预测。默认为 true。
- enable-intrabc (boolean)
启用块复制模式以进行块内预测。此模式对于屏幕内容很有用。默认为 true。
- enable-rect-partitions (boolean) (Requires libaom >= v2.0.0)
启用矩形分区。默认为 true。
- enable-1to4-partitions (boolean) (Requires libaom >= v2.0.0)
启用 1:4/4:1 分区。默认为 true。
- enable-ab-partitions (boolean) (Requires libaom >= v2.0.0)
启用 AB 形状分区。默认为 true。
- enable-angle-delta (boolean) (Requires libaom >= v2.0.0)
启用角度增量帧内预测。默认为 true。
- enable-cfl-intra (boolean) (Requires libaom >= v2.0.0)
启用从亮度帧内预测预测色度。默认为 true。
- enable-filter-intra (boolean) (Requires libaom >= v2.0.0)
启用过滤器帧内预测器。默认为 true。
- enable-intra-edge-filter (boolean) (Requires libaom >= v2.0.0)
启用内部边缘过滤器。默认为 true。
- enable-smooth-intra (boolean) (Requires libaom >= v2.0.0)
启用平滑帧内预测模式。默认为 true。
- enable-paeth-intra (boolean) (Requires libaom >= v2.0.0)
在帧内预测中启用路径预测器。默认为 true。
- enable-palette (boolean) (Requires libaom >= v2.0.0)
启用调色板预测模式。默认为 true。
- enable-flip-idtx (boolean) (Requires libaom >= v2.0.0)
启用扩展变换类型,包括 FLIPADST_DCT、DCT_FLIPADST、FLIPADST_FLIPADST、ADST_FLIPADST、FLIPADST_ADST、IDTX、V_DCT、H_DCT、V_ADST、H_ADST、V_FLIPADST、H_FLIPADST。默认为 true。
- enable-tx64 (boolean) (Requires libaom >= v2.0.0)
启用 64 点变换。默认为 true。
- reduced-tx-type-set (boolean) (Requires libaom >= v2.0.0)
使用减少的变换类型集。默认为 false。
- use-intra-dct-only (boolean) (Requires libaom >= v2.0.0)
仅对 INTRA 模式使用 DCT。默认为 false。
- use-inter-dct-only (boolean) (Requires libaom >= v2.0.0)
仅对 INTER 模式使用 DCT。默认为 false。
- use-intra-default-tx-only (boolean) (Requires libaom >= v2.0.0)
仅对 INTRA 模式使用默认变换。默认为 false。
- enable-ref-frame-mvs (boolean) (Requires libaom >= v2.0.0)
启用时间 mv 预测。默认为 true。
- enable-reduced-reference-set (boolean) (Requires libaom >= v2.0.0)
使用减少的单一和复合参考集。默认为 false。
- enable-obmc (boolean) (Requires libaom >= v2.0.0)
启用 obmc。默认为 true。
- enable-dual-filter (boolean) (Requires libaom >= v2.0.0)
启用双过滤器。默认为 true。
- enable-diff-wtd-comp (boolean) (Requires libaom >= v2.0.0)
启用差异加权复合。默认为 true。
- enable-dist-wtd-comp (boolean) (Requires libaom >= v2.0.0)
启用距离加权复合。默认为 true。
- enable-onesided-comp (boolean) (Requires libaom >= v2.0.0)
启用一侧复合。默认为 true。
- enable-interinter-wedge (boolean) (Requires libaom >= v2.0.0)
启用间楔复合。默认为 true。
- enable-interintra-wedge (boolean) (Requires libaom >= v2.0.0)
启用内部楔形复合。默认为 true。
- enable-masked-comp (boolean) (Requires libaom >= v2.0.0)
启用蒙版复合。默认为 true。
- enable-interintra-comp (boolean) (Requires libaom >= v2.0.0)
启用内部复合。默认为 true。
- enable-smooth-interintra (boolean) (Requires libaom >= v2.0.0)
启用平滑帧内模式。默认为 true。
- aom-params
使用以“:”分隔的键=值对列表设置 libaom 选项。有关受支持选项的列表,请参阅
aomenc --help
“AV1 特定选项”部分。例如,指定 libaom 编码选项-aom-参数:
ffmpeg -i input -c:v libaom-av1 -b:v 500K -aom-params tune=psnr:enable-tpl-model=1 output.mp4
16.8 libsvtav1
SVT-AV1 编码器包装。
需要在配置期间存在 SVT-AV1 标头和库。您需要使用 显式配置构建--enable-libsvtav1
。
16.8.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.9 libjxl
libjxl JPEG XL 编码器包装器。
需要在配置过程中存在 libjxl 标头和库。您需要使用 显式配置构建
--enable-libjxl
。
16.9.1 选项
libjxl 包装器支持以下选项:
- distance
设置目标 Butteraugli 距离。这是一个质量设置:距离越短,质量越高,距离=1.0 大致相当于摄影内容的 libjpeg 质量 90。设置 distance=0.0 会产生真正的无损编码。有效值范围在 0.0 到 15.0 之间,正常值很少超过 5.0。设置 distance=0.1 通常可以使大多数输入保持透明。默认值为 1.0。
- effort
设置使用的编码工作。较高的工作量值会产生更一致的质量,并且通常会产生更好的质量/bpp 曲线,但代价是需要更多的 CPU 时间。有效值范围为 1 到 9,默认值为 7。
- modular
强制编码器使用模块化模式而不是自动选择。默认情况下使用 VarDCT 进行有损编码,使用 Modular 进行无损编码。VarDCT 在有损编码方面通常优于 Modular,但不支持无损编码。
16.10 libkvazaar
Kvazaar H.265/HEVC 编码器。
需要在配置过程中存在 libkvazaar 标头和库。您需要显式配置构建 --启用libkvazaar。
16.10.1 选项
- b
设置目标视频比特率(以位/秒为单位)并启用速率控制。
- kvazaar-params
将 kvazaar 参数设置为以逗号 (,) 分隔的名称=值对列表。有关选项列表,请参阅 kvazaar 文档。
16.11 libopenh264
Cisco libopenh264 H.264/MPEG-4 AVC 编码器包装器。
该编码器需要在配置期间存在 libopenh264 标头和库。您需要使用 显式配置构建--enable-libopenh264
。使用 检测该库
pkg-config
。
有关该库的更多信息,请参阅 http://www.openh264.org。
16.11.1 选项
以下 FFmpeg 全局选项会影响 libopenh264 编码器的配置。
- b
设置比特率(每秒的位数)。
- g
设置 GOP 大小。
- maxrate
设置最大比特率(每秒的位数)。
- flags +global_header
在比特流中设置全局标头。
- slices
设置并行编码中使用的切片数量。默认值为 0。仅在以下情况下使用切片模式被设定为 '固定的'。
- loopfilter
启用环路滤波器,如果设置为 1(自动启用)。要禁用,请将值设置为 0。
- profile
设置个人资料限制。如果设置为 ' 的值主要的' 启用 CABAC(将
SEncParamExt.iEntropyCodingModeFlag
标志设置为 1)。- max_nal_size
设置最大 NAL 大小(以字节为单位)。
- allow_skip_frames
如果设置为 1,则允许跳帧达到目标比特率。
16.12 libtheora
libtheora Theora 编码器包装器。
需要在配置过程中存在 libtheora 标头和库。您需要使用 显式配置构建
--enable-libtheora
。
有关 libtheora 项目的更多信息,请参阅 http://www.theora.org/。
16.12.1 选项
以下全局选项映射到内部 libtheora 选项,这些选项影响编码流的质量和比特率。
- b
设置 CBR(恒定比特率)模式的视频比特率(以位/秒为单位)。如果启用了 VBR(可变比特率)模式,则忽略此选项。
- flags
用于通过以下方式启用恒定质量模式 (VBR) 编码 质量尺度标志,并启用
pass1
和pass2
模式。- g
设置 GOP 大小。
- global_quality
将全局质量设置为 lambda 单位的整数。
仅当使用 启用 VBR 模式时相关
flags +qscale
。该值通过除以 来转换为 QP 单位FF_QP2LAMBDA
,剪裁在 [0 - 10] 范围内,然后乘以 6.3 以获得本机 libtheora 范围 [0-63] 内的值。较高的值对应于较高的质量。- q
设置为非负值时启用 VBR 模式,并将恒定质量值设置为 QP 单位的双浮点值。
该值被剪裁在 [0-10] 范围内,然后乘以 6.3 以获得本机 libtheora 范围 [0-63] 内的值。
ffmpeg
该选项仅在使用命令行工具时有效。对于库界面用户,请使用全局质量。
16.12.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.13 libvpx
通过 libvpx 支持 VP8/VP9 格式。
需要在配置过程中存在 libvpx 标头和库。您需要使用 显式配置构建--enable-libvpx
。
16.13.1 选项
libvpx 包装器支持以下选项。括号中列出了等效选项
vpxenc
或值,以便于迁移。
为了减少文档的重复,这里仅记录私有选项和其他一些需要特别注意的选项。有关未记录的通用选项的文档,请参阅 “编解码器选项”一章。
要获取有关 libvpx 选项的更多文档,请调用命令
ffmpeg -h encoder=libvpx
,ffmpeg -h encoder=libvpx-vp9
或
vpxenc --help
。更多信息请参阅 libvpx API 文档。
- b (target-bitrate)
设置比特率(以位/秒为单位)。请注意 FFmpeg 的乙选项以位/秒表示,而
vpxenc
s目标比特率单位为千比特/秒。- g (kf-max-dist)
- keyint_min (kf-min-dist)
- qmin (min-q)
最小(最佳质量)量化器。
- qmax (max-q)
最大(最差质量)量化器。可以每帧更改。
- bufsize (buf-sz, buf-optimal-sz)
设置速率控制缓冲区大小(以位为单位)。Note
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’
使用高质量的截止日期。与使用时,这是速度和质量之间的良好权衡CPU使用选项。
- ‘realtime’
使用实时质量截止日期。
- speed, cpu-used (cpu-used)
设置质量/速度比调节器。较高的值会加快编码速度,但会牺牲质量。
- nr (noise-sensitivity)
- static-thresh
设置块的更改阈值,低于该阈值的块将被编码器跳过。
- slices (token-parts)
请注意 FFmpeg 的切片选项给出分区的总数,而
vpxenc
's令牌部分给出为log2(partitions)
.- max-intra-rate
将最大 I 帧比特率设置为目标比特率的百分比。值 0 表示无限制。
- force_key_frames
VPX_EFLAG_FORCE_KF
- Alternate reference frame related
- auto-alt-ref
启用备用参考系的使用(仅限 2 遍)。大于 1 的值启用多层交替参考帧(仅限 VP9)。
- arnr-maxframes
设置 altref 降噪最大帧数。
- arnr-type
设置altref降噪滤波器类型:向后、向前、居中。
- arnr-strength
设置 altref 降噪滤波器强度。
- rc-lookahead, lag-in-frames (lag-in-frames)
设置帧数以预测帧类型和速率控制。
- min-gf-interval
设置最小黄金/备用参考帧间隔(仅限 VP9)。
- error-resilient
启用错误弹性功能。
- sharpness integer
以降低 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层帧之间存在依赖性。
- VP9-specific options
- lossless
启用无损模式。
- tile-columns
设置要使用的图块列数。请注意,这给出为
log2(tile_columns)
。例如,通过设置来请求 8 个平铺列平铺列选项3。- tile-rows
设置要使用的图块行数。请注意,这给出为
log2(tile_rows)
。例如,通过设置来请求 4 个平铺行平铺行 选项2。- 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 boolean
启用基于行的多线程。
- tune-content
设置内容类型:默认 (0)、屏幕 (1)、电影 (2)。
- corpus-complexity
Corpus VBR 模式是标准 VBR 的一种变体,其中复杂性分布中点被传入,而不是针对特定剪辑或块进行计算。
有效范围为 [0, 10000]。0(默认)使用标准 VBR。
- enable-tpl boolean
启用时间依赖模型。
- ref-frame-config
使用每帧元数据,将结构成员设置
vpx_svc_ref_frame_config_t
为vpx/vp8cx.h
精细控制引用方案和帧缓冲区管理。
使用 : 分隔的键=值对列表。例如,av_dict_set(&av_frame->metadata, "ref-frame-config", \ "rfc_update_buffer_slot=7:rfc_lst_fb_idx=0:rfc_gld_fb_idx=1:rfc_alt_fb_idx=2:rfc_reference_last=0:rfc_reference_golden=0:rfc_reference_alt_ref=0");
- rfc_update_buffer_slot
指示要更新的缓冲区槽号
- rfc_update_last
指示是否更新LAST帧
- rfc_update_golden
是否更新GOLDEN帧
- rfc_update_alt_ref
指示是否更新ALT_REF帧
- rfc_lst_fb_idx
最后帧缓冲区索引
- rfc_gld_fb_idx
黄金帧缓冲区索引
- 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.14 libwebp
libwebp WebP 图像编码器包装器
libwebp 是 Google 的 WebP 图像官方编码器。它可以以有损或无损模式进行编码。有损图像本质上是 VP8 帧的包装。无损图像是 Google 开发的独立编解码器。
16.14.1 像素格式
Currently, libwebp only supports YUV420 for lossy and RGB for lossless due to limitations of the format and libwebp. Alpha is supported for either mode. Because of API limitations, if RGB is passed in when encoding lossy or YUV is passed in for encoding lossless, the pixel format will automatically be converted using functions from libwebp. This is not ideal and is done only for convenience.
16.14.2 Options
- -lossless boolean
Enables/Disables use of lossless mode. Default is 0.
- -compression_level integer
For lossy, this is a quality/speed tradeoff. Higher values give better quality for a given size at the cost of increased encoding time. For lossless, this is a size/speed tradeoff. Higher values give smaller size at the cost of increased encoding time. More specifically, it controls the number of extra algorithms and compression tools used, and varies the combination of these tools. This maps to the method option in libwebp. The valid range is 0 to 6. Default is 4.
- -quality float
For lossy encoding, this controls image quality. For lossless encoding, this controls the effort and time spent in compression. Range is 0 to 100. Default is 75.
- -preset type
Configuration preset. This does some automatic settings based on the general type of the image.
- none
Do not use a preset.
- default
Use the encoder default.
- picture
Digital picture, like portrait, inner shot
- photo
Outdoor photograph, with natural lighting
- drawing
Hand or line drawing, with high-contrast details
- icon
Small-sized colorful images
- text
Text-like
16.15 libx264, libx264rgb
x264 H.264/MPEG-4 AVC encoder wrapper.
This encoder requires the presence of the libx264 headers and library
during configuration. You need to explicitly configure the build with
--enable-libx264
.
libx264 supports an impressive number of features, including 8x8 and 4x4 adaptive spatial transform, adaptive B-frame placement, CAVLC/CABAC entropy coding, interlacing (MBAFF), lossless mode, psy optimizations for detail retention (adaptive quantization, psy-RD, psy-trellis).
Many libx264 encoder options are mapped to FFmpeg global codec
options, while unique encoder options are provided through private
options. Additionally the x264opts and x264-params
private options allows one to pass a list of key=value tuples as accepted
by the libx264 x264_param_parse
function.
The x264 project website is at http://www.videolan.org/developers/x264.html.
The libx264rgb encoder is the same as libx264, except it accepts packed RGB pixel formats as input instead of YUV.
16.15.1 Supported Pixel Formats
x264 supports 8- to 10-bit color spaces. The exact bit depth is controlled at x264’s configure time.
16.15.2 Options
The following options are supported by the libx264 wrapper. The
x264
-equivalent options or values are listed in parentheses
for easy migration.
为了减少文档的重复,这里仅记录私有选项和其他一些需要特别注意的选项。有关未记录的通用选项的文档,请参阅 “编解码器选项”一章。
要获取有关 libx264 选项的更准确和更广泛的文档,请调用该命令x264 --fullhelp
或查阅 libx264 文档。
- b (bitrate)
设置比特率(以位/秒为单位)。请注意 FFmpeg 的乙选项以位/秒表示,而
x264
s比特率单位为千比特/秒。- bf (bframes)
- g (keyint)
- 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 级别 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 的菱形搜索(最快)。'出口处' 是 ' 的别名直径'。
- ‘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
它产生与s相同的效果 --无卡巴克选项。
- cmp
设置全像素运动估计比较算法。可能的值:
- ‘chroma’
在运动估计中启用色度。
- ‘sad’
忽略运动估计中的色度。
x264
它产生与s相同的效果 --无色度我选项。
- threads (threads)
编码线程数。
- thread_type
设置多线程技术。可能的值:
- ‘slice’
基于切片的多线程。
x264
它产生与s相同的效果 --切片线程选项。- ‘frame’
基于帧的多线程。
- flags
设置编码标志。它可用于禁用封闭 GOP 并通过将其设置为 来启用开放 GOP
-cgop
。结果类似于 的x264
行为--open-gop选项。- rc_init_occupancy (vbv-init)
- preset (preset)
设置编码预设。
- tune (tune)
设置编码参数的调整。
- profile (profile)
设置个人资料限制。
- fastfirstpass
编码第一遍时启用快速设置,设置为1时。设置为0时,与 的效果
x264
相同 --慢速优先选项。- 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
x264
设置为1时使用心理视觉优化。设置为0时与 的效果相同--无精神选项。- psy-rd (psy-rd)
设置心理视觉优化的强度,采用 psy-rd : psy-trellis格式。
- rc-lookahead (rc-lookahead)
设置帧数以预测帧类型和速率控制。
- weightb
设置为1时启用B帧的加权预测。设置为0时,与 的效果
x264
相同--无权重b选项。- 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=1force-cfr=1”的简写。
- b-bias (b-bias)
设置对 B 帧使用频率的影响。
- b-pyramid (b-pyramid)
设置保留某些 B 帧作为参考的方法。可能的值:
- ‘none (none)’
残疾人。
- ‘strict (strict)’
严格的等级金字塔。
- ‘normal (normal)’
非严格(不兼容蓝光)。
- mixed-refs
启用每个分区使用一个引用,而不是设置为 1 时每个宏块使用一个引用。设置为 0 时,与 的效果
x264
相同--无混合参考选项。- 8x8dct
设置为 1 时启用自适应空间变换(高调 8x8 变换)。设置为 0 时与 的效果
x264
相同--no-8x8dct选项。- fast-pskip
设置为 1 时,启用 P 帧的早期 SKIP 检测。设置为 0 时,与 的效果
x264
相同 --无快速 pskip选项。- aud (aud)
设置为 1 时启用访问单元分隔符。
- mbtree
设置为 1 时启用使用宏块树速率控制。设置为 0 时与 的效果
x264
相同 --无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 负载大小(附注) 被指定,即被使用。
- stats (stats)
设置多通道统计数据的文件名。
- nal-hrd (nal-hrd)
设置信号 HRD 信息(需要vbv 缓冲区大小要设置)。可能的值:
- ‘none (none)’
禁用 HRD 信息信号。
- ‘vbr (vbr)’
可变比特率。
- ‘cbr (cbr)’
恒定比特率(MP4 容器中不允许)。
- x264opts (N.A.)
设置任何 x264 选项,请参阅
x264 --fullhelp
参考资料 的列表。参数是由“:”分隔的键=值对的列表。在使用“:”作为分隔符本身的过滤器和psy-rd选项中,请改用“,”。他们很久以前也接受它,但由于某种原因,这没有记录下来。
例如,使用以下命令指定 libx264 编码选项
ffmpeg
:ffmpeg -i foo.mpg -c:v libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv
- a53cc boolean
将隐藏式字幕(必须是 ATSC 兼容格式)导入到输出中。只有 mpeg2 和 h264 解码器提供这些。默认值为 1(打开)。
- udu_sei boolean
将未注册 SEI 的用户数据(如果可用)导入到输出中。默认值为 0(关闭)。
- mb_info boolean
通过 AVFrameSideData 设置 mb_info 数据,仅在从 API 使用时有用。默认值为 0(关闭)。
- x264-params (N.A.)
使用 :-分隔的 key=value 参数列表覆盖 x264 配置。
该选项的功能与x264选项,但为了与 Libav 分支兼容而重复。
例如,使用以下命令指定 libx264 编码选项
ffmpeg
:ffmpeg -i INPUT -c:v libx264 -x264-params 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 OUTPUT
提供了常见用途的编码 ffpresets,以便它们可以与通用预设系统一起使用(例如,传递前选项)。
16.16 libx265
x265 H.265/HEVC 编码器包装器。
该编码器需要在配置期间存在 libx265 标头和库。您需要显式配置构建 --启用-libx265。
16.16.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 boolean
将未注册 SEI 的用户数据(如果可用)导入到输出中。默认值为 0(关闭)。
- x265-params
使用以“:”分隔的键=值对列表设置 x265 选项。请参阅
x265 --help
参考资料 中的选项列表。例如,指定 libx265 编码选项-x265-参数:
ffmpeg -i input -c:v libx265 -x265-params crf=26:psy-rd=1 output.mp4
16.17 libxavs2
xavs2 AVS2-P2/IEEE1857.4 编码器包装器。
该编码器需要在配置期间存在 libxavs2 标头和库。您需要显式配置构建 --启用-libxavs2。
使用以下标准 libavcodec 选项:
- 乙/比特率
- G/组大小
- 男朋友/最大b帧数
编码器还有自己的特定选项:
16.17.1 选项
- lcu_row_threads
设置行的并行线程数从 1 到 8(默认 5)。
- initial_qp
将 xavs2 量化参数设置为 1 到 63(默认 34)。这用于设置第一帧的初始 qp。
- qp
将 xavs2 量化参数设置为 1 到 63(默认 34)。用于设置恒定 QP 模式下的 qp 值。
- max_qp
将速率控制的最大 qp 设置为从 1 到 63(默认为 55)。
- min_qp
将速率控制的最小 qp 设置为 1 到 63(默认 20)。
- speed_level
将速度级别设置为 0 到 9(默认 0)。越高越好但越慢。
- log_level
将日志级别设置为 -1 到 3(默认 0)。-1:无,0:错误,1:警告,2:信息,3:调试。
- xavs2-params
使用以“:”分隔的 键=值对列表设置 xavs2 选项。
例如,指定 libxavs2 编码选项-xavs2-参数:
ffmpeg -i input -c:v libxavs2 -xavs2-params RdoqLevel=0 output.avs2
16.18 libxvid
Xvid MPEG-4 第 2 部分编码器包装器。
该编码器需要在配置期间存在 libxvidcore 标头和库。您需要使用 显式配置构建
--enable-libxvid --enable-gpl
。
本机mpeg4
编码器支持 MPEG-4 Part 2 格式,因此用户无需此库即可编码为该格式。
16.18.1 选项
libxvid 包装器支持以下选项。以下一些选项已列出但未记录,并且对应于共享编解码器选项。请参阅“编解码器选项”一章以获取其文档。未列出的其他共享选项对 libxvid 编码器没有影响。
- b
- g
- qmin
- qmax
- mpeg_quant
- threads
- bf
- b_qfactor
- b_qoffset
- flags
设置特定的编码标志。可能的值:
- ‘mv4’
按宏块使用四个运动矢量。
- ‘aic’
启用高质量 AC 预测。
- ‘gray’
仅编码灰度。
- ‘gmc’
启用全局运动补偿 (GMC)。
- ‘qpel’
启用四分之一像素运动补偿。
- ‘cgop’
启用封闭式 GOP。
- ‘global_header’
将全局标题放置在额外数据中,而不是每个关键帧中。
- trellis
- me_quality
设置运动估计质量级别。按速度降序和质量升序排列的可能值:
- ‘0’
不使用运动估计(默认)。
- ‘1, 2’
启用 16x16 块的高级菱形区域搜索和 16x16 块的半像素细化。
- ‘3, 4’
启用上述所有功能,加上 8x8 块的高级菱形区域搜索和 8x8 块的半像素细化,还可以在 P 帧和 B 帧的色度平面上进行运动估计。
- ‘5, 6’
启用上述所有功能,以及扩展的 16x16 和 8x8 块搜索。
- mbd
设置宏块决策算法。按质量递增顺序排列的可能值:
- ‘simple’
使用宏块比较函数算法(默认)。
- ‘bits’
为 16x16 块启用基于率失真的半像素和四分之一像素细化。
- ‘rd’
启用上述所有功能,加上 8x8 块的基于率失真的半像素和四分之一像素细化,以及使用方形图案的基于率失真的搜索。
- lumi_aq
设置为 1 时启用亮度遮蔽自适应量化。默认值为 0(禁用)。
- variance_aq
设置为 1 时启用方差自适应量化。默认值为 0(禁用)。
当与亮度_aq,所得质量不会优于单独指定的两个质量中的任何一个。换句话说,产生的质量将是两种效果中最差的一种。
- ssim
设置结构相似度(SSIM)显示方法。可能的值:
- ‘off’
禁用显示 SSIM 信息。
- ‘avg’
编码结束时将平均 SSIM 输出到标准输出。显示平均 SSIM 的格式为:
Average SSIM: %f
对于不熟悉 C 的用户,%f 表示浮点数或小数(例如 0.939232)。
- ‘frame’
将编码期间的每帧 SSIM 数据和编码结束时的平均 SSIM 数据输出到 stdout。每帧信息的格式为:
SSIM: avg: %1.3f min: %1.3f max: %1.3f
对于不熟悉 C 的用户,%1.3f 表示一个浮点数,在点后四舍五入到 3 位数字(例如 0.932)。
- ssim_acc
设置 SSIM 精度。有效选项是 0-4 范围内的整数,其中 0 给出最准确的结果,4 计算最快。
16.19 MediaFoundation
这为 MediaFoundation 框架中的编码器(音频和视频)提供了包装器。它可以访问软件和硬件编码器。视频编码器可以采用 nv12 或 yuv420p 形式输入(有些编码器支持两者,有些编码器仅支持其中之一 - 实际上,nv12 是更安全的选择,尤其是在硬件编码器中)。
16.20 Microsoft RLE
Microsoft RLE 又名 MSRLE 编码器。仅支持 8 位调色板模式。与Windows 3.1和Windows 95兼容。
16.20.1 选项
- g integer
关键帧间隔。至少每
-g
帧插入一个关键帧,有时甚至更快。
16.21 mpeg2
MPEG-2 视频编码器。
16.21.1 选项
- profile
选择要编码的 mpeg2 配置文件:
- ‘422’
- ‘high’
- ‘ss’
空间可扩展
- ‘snr’
信噪比可扩展
- ‘main’
- ‘simple’
- level
选择要编码的 mpeg2 级别:
- ‘high’
- ‘high1440’
- ‘main’
- ‘low’
- seq_disp_ext integer
指定编码器是否应将sequence_display_extension写入输出。
- -1
- auto
通过检查要写入的数据是否与默认值或未指定的值不同来自动决定是否写入(这是默认值)。
- 0
- never
永远不要写它。
- 1
- always
总是写它。
- video_format integer
指定写入序列显示扩展的 video_format ,指示视频图片的来源。默认为 '未指定', 可 '成分','朋友','NTSC','塞卡姆' 或者 '苹果'。为了获得最大的兼容性,请使用 '成分'。
- a53cc boolean
将隐藏式字幕(必须是 ATSC 兼容格式)导入到输出中。默认值为 1(打开)。
16.22 png
PNG 图像编码器。
16.22.1 私有选项
- dpi integer
设置像素的物理密度,以每英寸点数为单位,默认未设置
- dpm integer
设置像素的物理密度,以每米点数为单位,默认未设置
16.23 ProRes
Apple ProRes 编码器。
FFmpeg 包含 2 个 ProRes 编码器,即 prores-aw 和 prores-ks 编码器。可以通过选项选择所使用的编码器-vcodec
。
16.23.1 prores-ks 的私有选项
- profile integer
选择要编码的 ProRes 配置文件
- ‘proxy’
- ‘lt’
- ‘standard’
- ‘hq’
- ‘4444’
- ‘4444xq’
- quant_mat integer
选择量化矩阵。
- ‘auto’
- ‘default’
- ‘proxy’
- ‘lt’
- ‘standard’
- ‘hq’
如果设置为auto,将选择与配置文件匹配的矩阵。如果未设置,将选择 提供最高质量的矩阵(默认) 。
- bits_per_mb integer
为编码一个宏块分配多少位。不同的配置文件每个宏块使用 200 到 2400 位,最大值为 8000。
- mbs_per_slice integer
每个切片中宏块的数量(1-8);默认值 (8) 几乎适用于所有情况。
- vendor string
覆盖 4 字节供应商 ID。像apl0这样的自定义供应商 ID会声称该流是由 Apple 编码器生成的。
- alpha_bits integer
指定 alpha 分量的位数。可能的值为0、8和16。使用0禁用 alpha 平面编码。
16.23.2 速度考虑因素
在默认操作模式下,编码器必须遵守帧约束(即不生成尺寸大于请求的帧),同时仍然使输出图像尽可能好。包含大量小细节的帧更难压缩,编码器将花费更多时间为每个切片搜索合适的量化器。
设置更高每MB位数限制会提高速度。
为了获得最快的编码速度,请设置质量尺度参数(4为推荐值)并且不设置大小限制。
16.24 QSV Encoders
英特尔 QuickSync 视频编码器系列(MPEG-2、H.264、HEVC、JPEG/MJPEG、VP9、AV1)
16.24.1 码率控制方法
码率控制方法选择如下:
- 什么时候全局质量指定后,将使用基于质量的模式。具体来说,这意味着
- - CQP - 恒定量化器比例,当质量尺度编解码器标志也被设置(-qscaleffmpeg 选项)。
- - LA_ICQ - 具有前瞻性的智能恒定质量,当 展望选项也已设置。
- - ICQ – 智能恒定质量否则。对于 ICQ 模式,全局质量范围为 1 到 51,其中 1 为最佳质量。
- 否则,使用基于比特率的模式。对于所有这些,您应该至少指定所需的平均比特率乙选项。
- - LA - 带前瞻的 VBR,当展望选项已指定。
- - VCM - 视频会议模式,当氯乙烯选项已设置。
- - CBR - 恒定比特率,当最大速率被指定并等于平均比特率。
- - VBR - 可变比特率,当最大速率已指定,但高于平均比特率。
- - AVBR - 平均VBR模式,当最大速率未指定,两者 avbr_准确度和avbr_收敛被设置为非零。此模式适用于 Windows 上的 H264 和 HEVC。
请注意,根据您的系统,编码器可能会选择与您指定的模式不同的模式。将详细级别设置为详细或更高,以查看 QSV 运行时使用的实际设置。
16.24.2 全局选项->MSDK 选项
其他 libavcodec 全局选项映射到 MSDK 选项,如下所示:
- g/gop_size->图像大小
- bf/最大b帧数+1 ->GopRefDist
- rc_init_ocpancy/rc_initial_buffer_ocpancy-> 初始延迟(KB)
- 切片->切片数量
- 参考文献->参考帧数
- b_strategy/b_frame_strategy->B参考类型
- cgop/CLOSED_GOP编解码器标志 ->选区选择标志
- 对于CQP模式,i_qfactor/i_qoffset和 b_qfactor/b_qoffset分别设置QPP和QPI以及QPP和QPB之间的差值。
- 设置编码员值vlc的选项将使 H.264 编码器使用 CAVLC 而不是 CABAC。
16.24.3 常用选项
所有 qsv 编码器都使用以下选项。
- async_depth
指定应用程序显式同步结果之前执行的异步操作数。如果为零,则未指定该值。
- preset
此选项列出了从非常快(最佳速度)到非常慢(最佳质量)的一系列选择。
- ‘veryfast’
- ‘faster’
- ‘fast’
- ‘medium’
- ‘slow’
- ‘slower’
- ‘veryslow’
- forced_idr
强制 I 帧作为 IDR 帧。
- low_power
对于编码器,将此标志设置为 ON 以降低功耗和 GPU 使用率。
16.24.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
- min_qp_i
- max_qp_p
- min_qp_p
- max_qp_b
- min_qp_b
h264_qsv 支持。更改这些值以重置 qsv 编解码器的最大/最小 qp 配置。
- low_delay_brc
在 h264_qsv、hevc_qsv 和 av1_qsv 中受支持。更改此值可重置 qsv 编解码器的 low_delay_brc 配置。
- framerate
更改此值可重置 qsv 编解码器的帧速率配置。
- bit_rate
- rc_buffer_size
- rc_initial_buffer_occupancy
- rc_max_rate
更改这些值可重置 qsv 编解码器的比特率控制配置。
- pic_timing_sei
h264_qsv 和 hevc_qsv 支持。更改此值可重置 qsv 编解码器的 pic_timing_sei 配置。
16.24.5 H264 选项
这些选项由 h264_qsv 使用
- extbrc
扩展比特率控制。
- recovery_point_sei
设置此标志以在每个内部刷新周期开始时插入恢复点 SEI 消息。
- rdo
启用速率失真优化。
- max_frame_size
最大编码帧大小(以字节为单位)。
- max_frame_size_i
I 帧的最大编码帧大小(以字节为单位)。如果该值设置为大于零,则对于 I 帧, max_frame_size 设置的值将被忽略。
- max_frame_size_p
P 帧的最大编码帧大小(以字节为单位)。如果该值设置为大于零,则对于 P 帧, max_frame_size 设置的值将被忽略。
- max_slice_size
最大编码切片大小(以字节为单位)。
- bitrate_limit
切换比特率限制。将比特率修改为 QSV 编码器规定的范围内。关闭此标志可能会导致违反 HRD 一致性。请注意,指定低于 QSV 编码器范围的比特率可能会显着影响质量。如果此选项在非 CQP 模式下生效:如果比特率不在 QSV 编码器规定的范围内,则会将其更改为在该范围内。
- mbbrc
设置此标志可以启用宏块级比特率控制,通常可以提高主观视觉质量。启用此标志可能会对性能和客观视觉质量指标产生负面影响。
- low_delay_brc
设置此标志可打开或关闭 qsv 插件中的 LowDelayBRC 功能,该功能提供更准确的比特率控制,以最大限度地减少逐帧比特流大小的差异。值:-1-默认 0-关闭 1-开启
- adaptive_i
该标志控制 QSV 编码器插入 I 帧。打开此标志以允许将帧类型从 P 和 B 更改为 I。
- adaptive_b
该标志控制帧类型从 B 到 P 的更改。
- p_strategy
启用P金字塔:0-默认1-简单2-金字塔(bf需要设置为0)。
- b_strategy
此选项控制 B 帧作为参考的使用。
- dblk_idc
此选项禁用解块。其取值范围为0~2。
- cavlc
如果设置,则使用 CAVLC;如果未设置,则使用 CABAC 进行编码。
- vcm
视频会议模式,请参见码率控制方法。
- idr_interval
IDR 帧之间的距离(以 I 帧为单位)。
- pic_timing_sei
使用 pic_struct_syntax 元素插入图片时序 SEI。
- single_sei_nal_unit
将所有SEI消息放入一个NALU中。
- max_dec_frame_buffering
DPB 中缓冲的最大帧数。
- look_ahead
使用带有前瞻功能的 VBR 算法。
- look_ahead_depth
数字框架中的前瞻性深度。
- look_ahead_downsampling
为前瞻分析而保存的帧的缩小因子。
- ‘unknown’
- ‘auto’
- ‘off’
- ‘2x’
- ‘4x’
- int_ref_type
指定帧内刷新类型。帧内刷新的主要目标是提高错误恢复能力,而不会对 I 帧引起的编码比特流大小产生重大影响。SDK 编码器通过使用帧内 MB 在刷新周期中对每帧的一部分进行编码来实现此目的。none表示不刷新。Vertical表示垂直刷新,以 MB 为单位。Horizontal表示水平刷新,以 MB 行为单位。slice表示按切片水平刷新,不重叠。对于slice, in_ref_cycle_size 被忽略。要启用帧内刷新,B 帧应设置为 0。
- int_ref_cycle_size
指定从2开始的刷新周期内的图片数。0和1是无效值。
- int_ref_qp_delta
指定插入的帧内 MB 的 QP 差异。如果亮度样本的目标编码位深度为 8,则此范围为 [-51, 51] 范围内的有符号值,并且此范围为 [-63, 63](对于 10 位深度)或 [-75, 75](对于 12 位深度)分别。
- int_ref_cycle_dist
帧内刷新周期开始之间的距离(以帧为单位)。
- profile
- ‘unknown’
- ‘baseline’
- ‘main’
- ‘high’
- a53cc
使用 A53 隐藏式字幕(如果有)。
- aud
插入访问单元分隔符 NAL。
- mfmode
多帧模式。
- ‘off’
- ‘auto’
- repeat_pps
对每一帧重复 pps。
- max_qp_i
I 帧的最大视频量化器比例。
- min_qp_i
I 帧的最小视频量化器比例。
- max_qp_p
P 帧的最大视频量化器比例。
- min_qp_p
P 帧的最小视频量化器比例。
- max_qp_b
B 帧的最大视频量化器比例。
- min_qp_b
B 帧的最小视频量化器比例。
- scenario
向编码器提供有关编码会话场景的提示。
- ‘unknown’
- ‘displayremoting’
- ‘videoconference’
- ‘archive’
- ‘livestreaming’
- ‘cameracapture’
- ‘videosurveillance’
- ‘gamestreaming’
- ‘remotegaming’
- avbr_accuracy
AVBR 速率控制的精度(单位为百分之十分之一)。
- avbr_convergence
AVBR速率控制的收敛(以100帧为单位)
参数avbr_accuracy和avbr_convergence用于平均可变比特率控制 (AVBR) 算法。该算法侧重于整体编码质量,同时在avbr_Convergence周期后满足精度范围avbr_accuracy内指定的比特率target_bitrate。此方法不遵循 HRD,并且即时比特率不会受到限制或填充。
- skip_frame
使用每帧元数据“qsv_skip_frame”在编码时跳过帧。此选项定义此元数据的用途。
- ‘no_skip’
跳帧被禁用。
- ‘insert_dummy’
编码器插入比特流帧,其中所有宏块都被编码为跳过。
- ‘insert_nothing’
与 insert_dummy 类似,但编码器不向比特流中插入任何内容。跳帧仍然在brc中使用。例如,gop仍然包含跳帧,并且跳帧之后的帧尺寸会更大。
- ‘brc_only’
Skip_frame元数据指示当前帧之前丢失的帧的数量。
16.24.6 HEVC 选项
这些选项由 hevc_qsv 使用
- extbrc
扩展比特率控制。
- recovery_point_sei
设置此标志以在每个内部刷新周期开始时插入恢复点 SEI 消息。
- rdo
启用速率失真优化。
- max_frame_size
最大编码帧大小(以字节为单位)。
- max_frame_size_i
I 帧的最大编码帧大小(以字节为单位)。如果该值设置为大于零,则对于 I 帧, max_frame_size 设置的值将被忽略。
- max_frame_size_p
P 帧的最大编码帧大小(以字节为单位)。如果该值设置为大于零,则对于 P 帧, max_frame_size 设置的值将被忽略。
- max_slice_size
最大编码切片大小(以字节为单位)。
- mbbrc
设置此标志可以启用宏块级比特率控制,通常可以提高主观视觉质量。启用此标志可能会对性能和客观视觉质量指标产生负面影响。
- low_delay_brc
设置此标志可打开或关闭 qsv 插件中的 LowDelayBRC 功能,该功能提供更准确的比特率控制,以最大限度地减少逐帧比特流大小的差异。值:-1-默认 0-关闭 1-开启
- adaptive_i
该标志控制 QSV 编码器插入 I 帧。打开此标志以允许将帧类型从 P 和 B 更改为 I。
- adaptive_b
该标志控制帧类型从 B 到 P 的更改。
- p_strategy
启用P金字塔:0-默认1-简单2-金字塔(bf需要设置为0)。
- b_strategy
此选项控制 B 帧作为参考的使用。
- dblk_idc
此选项禁用解块。其取值范围为0~2。
- idr_interval
IDR 帧之间的距离(以 I 帧为单位)。
- ‘begin_only’
仅在流的开头输出 IDR 帧。
- load_plugin
要在内部会话中加载的用户插件。
- ‘none’
- ‘hevc_sw’
- ‘hevc_hw’
- load_plugins
:-要在内部会话中加载的十六进制插件 UID 的单独列表。
- look_ahead_depth
数帧中的前瞻深度,在启用 extbrc 选项时可用。
- profile
设置编码配置文件(scc 需要 libmfx >= 1.32)。
- ‘unknown’
- ‘main’
- ‘main10’
- ‘mainsp’
- ‘rext’
- ‘scc’
- tier
设置编码层(只有级别 >= 4 才能支持高层)。该选项仅在指定 level 选项时生效。
- ‘main’
- ‘high’
- gpb
1:GPB(广义P/B框架)
0:常规P帧。
- tile_cols
平铺编码的列数。
- tile_rows
平铺编码的行数。
- aud
插入访问单元分隔符 NAL。
- pic_timing_sei
使用 pic_struct_syntax 元素插入图片时序 SEI。
- transform_skip
打开此选项以启用 Transformskip。它在等于或更新于 ICL 的平台上受支持。
- int_ref_type
指定帧内刷新类型。帧内刷新的主要目标是提高错误恢复能力,而不会对 I 帧引起的编码比特流大小产生重大影响。SDK 编码器通过使用帧内 MB 在刷新周期中对每帧的一部分进行编码来实现此目的。none表示不刷新。Vertical表示垂直刷新,以 MB 为单位。Horizontal表示水平刷新,以 MB 行为单位。slice表示按切片水平刷新,不重叠。对于slice, in_ref_cycle_size 被忽略。要启用帧内刷新,B 帧应设置为 0。
- int_ref_cycle_size
指定从2开始的刷新周期内的图片数。0和1是无效值。
- int_ref_qp_delta
指定插入的帧内 MB 的 QP 差异。如果亮度样本的目标编码位深度为 8,则此范围为 [-51, 51] 范围内的有符号值,并且此范围为 [-63, 63](对于 10 位深度)或 [-75, 75](对于 12 位深度)分别。
- int_ref_cycle_dist
帧内刷新周期开始之间的距离(以帧为单位)。
- max_qp_i
I 帧的最大视频量化器比例。
- min_qp_i
I 帧的最小视频量化器比例。
- max_qp_p
P 帧的最大视频量化器比例。
- min_qp_p
P 帧的最小视频量化器比例。
- max_qp_b
B 帧的最大视频量化器比例。
- min_qp_b
B 帧的最小视频量化器比例。
- scenario
向编码器提供有关编码会话场景的提示。
- ‘unknown’
- ‘displayremoting’
- ‘videoconference’
- ‘archive’
- ‘livestreaming’
- ‘cameracapture’
- ‘videosurveillance’
- ‘gamestreaming’
- ‘remotegaming’
- avbr_accuracy
AVBR 速率控制的精度(单位为百分之十分之一)。
- avbr_convergence
AVBR速率控制的收敛(以100帧为单位)
参数avbr_accuracy和avbr_convergence用于平均可变比特率控制 (AVBR) 算法。该算法侧重于整体编码质量,同时在avbr_Convergence周期后满足精度范围avbr_accuracy内指定的比特率target_bitrate。此方法不遵循 HRD,并且即时比特率不会受到限制或填充。
- skip_frame
使用每帧元数据“qsv_skip_frame”在编码时跳过帧。此选项定义此元数据的用途。
- ‘no_skip’
跳帧被禁用。
- ‘insert_dummy’
编码器插入比特流帧,其中所有宏块都被编码为跳过。
- ‘insert_nothing’
与 insert_dummy 类似,但编码器不向比特流中插入任何内容。跳帧仍然在brc中使用。例如,gop仍然包含跳帧,并且跳帧之后的帧尺寸会更大。
- ‘brc_only’
Skip_frame元数据指示当前帧之前丢失的帧的数量。
16.24.7 MPEG2 选项
这些选项由 mpeg2_qsv 使用
- profile
- ‘unknown’
- ‘simple’
- ‘main’
- ‘high’
16.24.8 VP9 选项
这些选项由 vp9_qsv 使用
- profile
- ‘unknown’
- ‘profile0’
- ‘profile1’
- ‘profile2’
- ‘profile3’
- tile_cols
平铺编码的列数(需要 libmfx >= 1.29)。
- tile_rows
平铺编码的行数(需要 libmfx >= 1.29)。
16.24.9 AV1 选项
这些选项由 av1_qsv 使用(需要 libvpl)。
- profile
- ‘unknown’
- ‘main’
- tile_cols
平铺编码的列数。
- tile_rows
平铺编码的行数。
- adaptive_i
该标志控制 QSV 编码器插入 I 帧。打开此标志以允许将帧类型从 P 和 B 更改为 I。
- adaptive_b
该标志控制帧类型从 B 到 P 的更改。
- b_strategy
此选项控制 B 帧作为参考的使用。
- extbrc
扩展比特率控制。
- look_ahead_depth
数帧中的前瞻深度,在启用 extbrc 选项时可用。
- low_delay_brc
设置此标志可打开或关闭 qsv 插件中的 LowDelayBRC 功能,该功能提供更准确的比特率控制,以最大限度地减少逐帧比特流大小的差异。值:-1-默认 0-关闭 1-开启
- max_frame_size
设置每个帧允许的最大大小(以字节为单位)。如果帧大小超过限制,编码器将调整 QP 值来控制帧大小。在CQP码率控制模式下无效。
16.25 snow
16.25.1 选项
- iterative_dia_size
用于迭代运动估计的直径大小
16.26 VAAPI encoders
可通过 VAAPI 访问的硬件编码器的包装器。
这些编码器仅接受 VAAPI 硬件表面中的输入。如果您在软件框架中有输入,请使用上传过滤器将它们上传到 GPU。
使用以下标准 libavcodec 选项:
- G/组大小
- 男朋友/最大b帧数
- 轮廓
如果未设置,这将根据输入帧的格式和驱动程序支持的配置文件自动确定。
- 等级
- 乙/比特率
- 最大速率/最大速率
- 缓冲区大小/rc_buffer_size
- rc_init_占用/rc_initial_buffer_占用
- 压缩级别
速度/质量权衡:值越高,速度越快/质量越差。
- q/全局质量
尺寸/质量权衡:值越高,质量越小/质量越差。
- 最小q值
- 最大q值
- i_q因子/i_量化因子
- i_qoffset/i_quant_偏移量
- b_q因子/b_量化因子
- b_qoffset/b_quant_offset
- 切片
所有编码器都支持以下选项:
- low_power
某些驱动程序/平台为某些编解码器提供第二个编码器,旨在使用比默认编码器更少的功率;设置此选项将尝试使用该编码器。请注意,它可能支持减少的功能集,因此某些其他选项在此模式下可能不可用。
- idr_interval
设置开放 GOP 模式下完全刷新 (IDR) 帧之间的正常帧内帧数。帧内帧仍然是 IRAP,但不包括全局标头,并且可能具有不可解码的前导图片。
- b_depth
设置 B 帧参考深度。当设置为 1(默认值)时,所有 B 帧将仅引用 P 或 I 帧。当设置为更大的值时,将出现多层 B 帧,每层中的帧仅引用更高层中的帧。
- async_depth
最大处理并行度。增加此值可提高单通道性能。如果驱动程序未实现 vaSyncBuffer 函数,则此选项不起作用。如果使用大量async_depth,请确保分配足够的hw_frames。
- max_frame_size
设置每个帧允许的最大大小(以字节为单位)。如果帧大小超过限制,编码器将调整 QP 值来控制帧大小。在CQP码率控制模式下无效。
- rc_mode
设置要使用的速率控制模式。给定的驱动程序可能仅支持模式的子集。
可能的模式:
- auto
根据驱动程序支持和其他选项自动选择模式。这是默认设置。
- CQP
质量稳定。
- CBR
恒定比特率。
- VBR
可变比特率。
- ICQ
智能恒品质。
- QVBR
质量定义的可变比特率。
- AVBR
平均可变比特率。
每个编码器还有其自己的特定选项:
- av1_vaapi
轮廓设置seq_profile的值。 层设置seq_tier的值。 等级设置seq_level_idx的值。
- tiles
设置用于对输入视频进行编码的图块数量,如列 x 行。(默认为自动,这意味着使用最小的平铺列/行数)。
- tile_groups
设置图块组数。所有图块将尽可能均匀地分布到每个图块组中。(默认值为 1)。
- h264_vaapi
轮廓设置profile_idc和constraint_set*_flag的值。 等级设置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
轮廓和等级分别设置general_profile_idc和general_level_idc的值 。
- aud
在流中包含访问单元分隔符(默认情况下不包含)。
- tier
设置General_tier_flag。如果未明确指定,这可能会影响为流选择的级别。
- sei
设置要包含的 SEI 消息类型。以下值的某种组合:
- ‘hdr’
如果输入帧有 HDR 元数据(mastering_display_colour_volume和content_light_level 消息),则包括 HDR 元数据。
- tiles
设置用于对输入视频进行编码的图块数量,如列 x 行。数字越大,编码和解码的并行性就越高,但可能会降低编码效率。
- mjpeg_vaapi
仅支持基线 DCT 编码。编码器始终使用标准量化和霍夫曼表 -全局质量缩放标准量化表(范围 1-100)。
对于 YUV,支持 4:2:0、4:2:2 和 4:4:4 子采样模式。还支持 RGB,并将创建 RGB JPEG。
- jfif
在每个帧中包含 JFIF 标头(默认情况下不包含)。
- huffman
包括标准哈夫曼表(默认情况下打开)。关闭此功能将在每个输出帧中节省几百个字节,但可能会失去与某些不能完全处理 MJPEG 的 JPEG 解码器的兼容性。
- mpeg2_vaapi
轮廓和等级设置profile_and_level_inspiration的值。
- vp8_vaapi
不支持 B 帧。
全局质量设置用于非关键帧的 q_idx (范围 0-127)。
- loop_filter_level
- loop_filter_sharpness
手动设置环路滤波器参数。
- vp9_vaapi
全局质量设置用于 P 帧的 q_idx (范围 0-255)。
- loop_filter_level
- loop_filter_sharpness
手动设置环路滤波器参数。
支持 B 帧,但输出流始终按编码顺序而不是显示顺序。如果启用 B 帧,则可能需要使用vp9_raw_重新排序 比特流过滤器修改输出流以按正确的顺序显示帧。
只生产普通框架 -vp9_超帧可能需要比特流过滤器来产生可用于所有解码器的流。
16.27 vbn
Vizrt 二进制图像编码器。
广播供应商 Vizrt 使用此格式进行快速纹理流。不支持该格式的高级功能,例如纹理数据的 LZW 压缩或 mipmap 的生成。
16.27.1 选项
- format string
设置 VBN 文件使用的纹理压缩。可以是dxt1、 dxt5或raw。默认为dxt5。
16.28 vc2
SMPTE VC-2(以前称为 BBC Dirac Pro)。该编解码器主要针对专业广播,但由于它支持 8 位(有限范围或全范围)、10 或 12 位的 yuv420、yuv422 和 yuv444,因此它适用于需要低开销和低压缩的其他任务(例如屏幕录制) )。
16.28.1 选项
- b
设置目标视频比特率。通常约为未压缩视频比特率的 1:6(例如,对于 1920x1080 50fps yuv422p10,约为 400Mbps)。较高的值(接近未压缩的比特率)会打开无损压缩模式。
- field_order
当隔行扫描输入设置(例如,tt - 顶场优先)时启用场编码。应增加隔行扫描内容的压缩,因为它会分割字段并分别对每个字段进行编码。
- wavelet_depth
设置要应用的小波变换总量,介于 1 和 5 之间(默认)。较低的值会降低压缩率和质量。能力较差的解码器可能无法处理以下值小波深度超过3.
- wavelet_type
设置变换类型。目前仅实现了5_3 (LeGall) 和9_7 (Deslauriers-Dubuc),其中 9_7 具有更好的压缩效果,因此是默认值。
- slice_width
- slice_height
设置每个切片的切片大小。值越大,压缩效果越好。为了与其他更有限的解码器兼容使用切片宽度32 和切片高度共 8 个。
- tolerance
设置速率控制系统的下冲容差(以百分比为单位)。这是为了防止运行昂贵的搜索。
- qm
设置默认情况下或在以下情况下使用的量化矩阵预设小波深度 设置为 5
- -默认 使用规范中的默认量化矩阵,并使用第五级的值进行扩展。这在保留细节和忽略伪像之间提供了良好的平衡。
- - flat 使用完全归零的量化矩阵。这会增加 PSNR,但可能会降低感知。用于虚假基准测试。
- -颜色 减少细节,但尝试以极低的比特率保留颜色。
17 字幕编码器
17.1 dvdsub
此编解码器对 DVD 中使用的位图字幕格式进行编码。通常它们存储在 VOBSUB 文件对 (*.idx + *.sub) 中,也可以在 Matroska 文件中使用。
17.1.1 选项
- palette
指定位图使用的全局调色板。
该选项的格式是一个字符串,包含 16 个 24 位十六进制数字(不带 0x 前缀),以逗号分隔,例如
0d00ee, ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1, 7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b
。- even_rows_fix
当设置为 1 时,启用一种解决方法,使所有字幕中的像素行数均匀。这解决了一些玩家在数字为奇数时切断底行的问题。如果需要,解决方法只是添加一个完全透明的行。开销很低,通常每个字幕平均一个字节。
默认情况下,此解决方法处于禁用状态。
18 个比特流过滤器
当您配置 FFmpeg 构建时,默认情况下会启用所有支持的比特流过滤器。您可以使用配置选项列出所有可用的选项--list-bsfs
。
您可以使用configure 选项禁用所有比特流过滤器
--disable-bsfs
,并使用该选项有选择地启用任何比特流过滤器--enable-bsf=BSF
,或者您可以使用该选项禁用特定的比特流过滤器--disable-bsf=BSF
。
ff* 工具的选项-bsfs
将显示构建中包含的所有受支持的比特流过滤器的列表。
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 标头。
例如,将 AAC 流从原始 ADTS AAC 或 MPEG-TS 容器复制到 MP4A-LATM、FLV 文件或 MOV/MP4 文件以及相关格式(例如 3GP 或 M4A)时,需要此过滤器。请注意,它会自动插入 MP4A-LATM 和 MOV/MP4 及相关格式。
18.2 av1_metadata
修改嵌入 AV1 流中的元数据。
- td
在流的所有时间单元中插入或删除时间定界符 OBU。
- ‘insert’
在每个尚未有 TU 的开头插入 TD。
- ‘remove’
从每个有 TU 的开头删除 TD。
- color_primaries
- transfer_characteristics
- matrix_coefficients
设置流中的颜色描述字段(请参阅 AV1 第 6.4.2 节)。
- color_range
设置流中的颜色范围(请参阅 AV1 第 6.4.2 节;请注意,不能为使用 BT.709 原色、sRGB 传输特性和单位 (RGB) 矩阵系数的流设置此项)。
- ‘tv’
范围有限。
- ‘pc’
全系列。
- chroma_sample_position
设置流中的色度样本位置(请参阅 AV1 第 6.4.2 节)。只能为 4:2:0 流设置此项。
- ‘vertical’
左侧位置(与 MPEG-2 和 H.264 中的默认位置匹配)。
- ‘colocated’
左上角位置。
- tick_rate
在序列标头的计时信息中 设置刻度率 ( time_scale / num_units_in_display_tick )。
- num_ticks_per_picture
设置每张图片中的刻度数,以指示流具有固定的帧速率。忽略如果滴答率也没有设置。
- delete_padding
删除填充 OBU。
18.3 chomp
删除数据包末尾的零填充。
18.4 dca_core
从 DCA/DTS 流中提取核心,丢弃 DTS-HD 等扩展。
18.5 dump_extra
将额外数据添加到已过滤数据包的开头,除非所述数据包已经完全以要添加的额外数据开始。
- freq
附加参数指定应过滤哪些数据包。它接受以下值:
- ‘k’
- ‘keyframe’
将额外数据添加到所有关键数据包中
- ‘e’
- ‘all’
向所有数据包添加额外数据
如果未指定,则假定 'k'。
例如,以下ffmpeg
命令在编码器生成的 H.264 数据包中强制使用全局标头(从而禁用各个数据包标头)libx264
,但通过将存储在 extradata 中的标头添加到关键数据包来纠正它们:
ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
18.6 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 页或 http://web.archive.org/web/20060927044735/http://www.smpte.org/smpte_store/standards/pdf/s314m.pdf的第 5.5 节
18.7 eac3_core
从 E-AC-3 流中提取核心,丢弃额外的通道。
18.8 extract_extradata
提取带内额外数据。
某些编解码器允许长期标头(例如 MPEG-2 序列标头或 H.264/HEVC (VPS/)SPS/PPS)“带内”传输(即作为包含编码的比特流的一部分)。帧)或“带外”(例如在容器级别)。后一种形式在 FFmpeg 术语中称为“额外数据”。
该比特流过滤器检测带内标头并使它们可用作额外数据。
- remove
启用此选项后,长期标头将在提取后从比特流中删除。
18.9 filter_units
从流中删除类型属于或不属于给定集合的单元。
- pass_types
删除所有其他内容时要通过的单位类型或单位类型范围的列表。这被指定为以“|”分隔的单位类型值列表或带有“-”的值范围。
- remove_types
相同通行证类型,除了给定集合中的单位被删除并且所有其他单位都通过。
此转换不会改变额外数据,但请注意,如果流包含内联参数集,则删除它们后输出可能无法使用。
例如,要从 H.264 流中删除所有非 VCL NAL 单元:
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=pass_types=1-5' OUTPUT
要从 H.265 流中删除所有 AUD、SEI 和填充符:
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=35|38-40' OUTPUT
18.10 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.11 h264_metadata
修改 H.264 流中嵌入的元数据。
- aud
在流的所有访问单元中插入或删除 AUD NAL 单元。
- ‘pass’
- ‘insert’
- ‘remove’
默认为通过。
- sample_aspect_ratio
在 VUI 参数中设置流的样本宽高比。参见 H.264 表 E-1。
- overscan_appropriate_flag
设置流是否适合使用过扫描显示(参见 H.264 第 E.2.1 节)。
- video_format
- video_full_range_flag
设置流中的视频格式(请参阅 H.264 第 E.2.1 节和表 E-2)。
- colour_primaries
- transfer_characteristics
- matrix_coefficients
设置流中的颜色描述(请参阅 H.264 第 E.2.1 节和表 E-3、E-4 和 E-5)。
- chroma_sample_loc_type
设置流中的色度样本位置(请参阅 H.264 第 E.2.1 节和图 E-1)。
- tick_rate
在 VUI 参数中设置刻度率 (time_scale / num_units_in_tick)。这是流中可表示的最小时间单位,并且在许多情况下表示流的场速率(帧速率的两倍)。
- fixed_frame_rate_flag
设置流是否具有固定帧速率 - 通常这表示帧速率恰好是节拍速率的一半,但确切含义取决于隔行扫描和图像结构(请参阅 H.264 第 E.2.1 节和表 E-6)。
- zero_new_constraint_set_flags
SPS中的constraint_set4_flag和constraint_set5_flag为零。这些位在 H.264 规范的早期版本中保留,因此某些硬件解码器要求这些位为零。将其归零的结果仍然是有效的比特流。
- crop_left
- crop_right
- crop_top
- crop_bottom
在 SPS 中设置帧裁剪偏移。如果流已被裁剪,这些值将替换当前值。
这些字段以像素为单位设置。请注意,如果对色度进行二次采样或对流进行隔行扫描,则某些大小可能无法表示(请参阅 H.264 第 7.4.2.1.1 节)。
- sei_user_data
插入字符串作为 SEI 未注册用户数据。参数必须采用UUID+string形式,其中 UUID 是可能用连字符分隔的十六进制数字,并且字符串可以是任何内容。
例如, '086f3693-b7b3-4f2c-9653-21492feee5b8+你好' 将插入与给定 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'), 或特殊名称 '汽车' 指示过滤器应尝试从输入流属性中猜测级别。
18.12 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
mpegts
请注意,此过滤器是针对 MPEG-TS(复用器)和原始 H.264(复用器h264
)输出格式
自动插入的
。
18.13 h264_redundant_pps
这对某些蓝光流应用了特定的修复,这些蓝光流包含冗余 PPS,修改流的不相关参数,从而混淆需要正确额外数据的其他转换。
18.14 hevc_metadata
修改 HEVC 流中嵌入的元数据。
- aud
在流的所有访问单元中插入或删除 AUD NAL 单元。
- ‘insert’
- ‘remove’
- sample_aspect_ratio
在 VUI 参数中设置流中的样本宽高比。
- video_format
- video_full_range_flag
设置流中的视频格式(请参阅 H.265 第 E.3.1 节和表 E.2)。
- colour_primaries
- transfer_characteristics
- matrix_coefficients
设置流中的颜色描述(请参阅 H.265 第 E.3.1 节和表 E.3、E.4 和 E.5)。
- chroma_sample_loc_type
设置流中的色度样本位置(参见 H.265 第 E.3.1 节和图 E.1)。
- tick_rate
在 VPS 和 VUI 参数 (time_scale / num_units_in_tick) 中设置滴答率。结合num_ticks_poc_diff_one,这可以在流中设置恒定的帧速率。请注意,当流位于容器中时,它可能会被容器参数覆盖。
- num_ticks_poc_diff_one
在VPS和VUI中设置poc_proportional_to_timing_flag并使用该值设置num_ticks_poc_diff_one_minus1(参见H.265第7.4.3.1节和E.3.1节)。忽略如果滴答率也没有设置。
- crop_left
- crop_right
- crop_top
- crop_bottom
在 SPS 中设置一致性窗口裁剪偏移。如果流已被裁剪,这些值将替换当前值。
这些字段以像素为单位设置。请注意,如果对色度进行二次采样,某些尺寸可能无法表示(H.265 第 7.4.3.2.1 节)。
- level
设置 VPS 和 SPS 中的级别。参见 H.265 A.4 节以及表 A.6 和 A.7。
参数必须是级别的名称(例如,'5.1'), general_level_idc值(例如,'153' 对于级别 5.1),或特殊名称 '汽车' 指示过滤器应尝试从输入流属性中猜测级别。
18.15 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.16 imxdump
修改比特流以适合 MOV 并可由 Final Cut Pro 解码器使用。此过滤器仅适用于 mpeg2video 编解码器,并且 Final Cut Pro 7 和更高版本可能不需要适当的 -标签:v。
例如,要将 30 MB/秒 NTSC IMX 重新复用为 MOV:
ffmpeg -i input.mxf -c copy -bsf:v imxdump -tag:v mx3n output.mov
18.17 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 的 AVI 中的 MJPEG,是带有固定的 - 并且*省略* - 霍夫曼表的受限 JPEG。JPEG 必须是 YCbCr 色彩空间,它必须是 4:2:2,并且必须使用基本的霍夫曼编码,而不是算术编码或渐进编码......您确实可以提取 MJPEG 帧并使用常规 JPEG 解码器对其进行解码,但您必须在前面添加DHT 段给它们,否则解码器将不知道如何解压缩数据。OpenDML 规范中给出了所需的确切表。”
该比特流过滤器修补从 MJPEG 流(携带 AVI1 标头 ID 且缺少 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.18 mjpegadump
将 MJPEG A 标头添加到比特流中,以启用 Quicktime 解码。
18.19 mov2textsub
从 MOV 字幕中提取可表示的文本文件,从每个字幕包中剥离元数据标头。
另请参见text2movsub过滤器。
18.20 mp3decomp
解压缩非标准压缩的 MP3 音频标头。
18.21 mpeg2_metadata
修改嵌入在 MPEG-2 流中的元数据。
- display_aspect_ratio
设置流中的显示宽高比。
支持以下固定值:
- 4/3
- 16/9
- 221/100
任何其他值都将导致发出方形像素信号(请参阅 H.262 第 6.3.3 节和表 6-3)。
- frame_rate
设置流中的帧速率。这是由已知值表与小乘数和除数相结合构建的 - 如果提供的值不能精确表示,则将使用最接近的可表示值(参见 H.262 第 6.3.3 节和表 6-4)。
- video_format
设置码流中的视频格式(参见 H.262 第 6.3.6 节和表 6-6)。
- colour_primaries
- transfer_characteristics
- matrix_coefficients
设置流中的颜色描述(参见 H.262 第 6.3.6 节和表 6-7、6-8 和 6-9)。
18.22 mpeg4_unpack_bframes
解压 DivX 风格的 B 帧。
DivX 风格的打包 B 帧不是有效的 MPEG-4,只是针对损坏的 Video for Windows 子系统的一种解决方法。它们使用更多的空间,可能会导致轻微的 AV 同步问题,需要更多的 CPU 能力来解码(除非播放器有一些解码的图像队列来补偿每数据包风格的 2,0,2,0 帧),并且如果复制到标准中会造成麻烦像 mp4 或 mpeg-ps/ts 这样的容器,因为 MPEG-4 解码器可能无法解码它们,因为它们不是有效的 MPEG-4。
例如,要使用 修复包含具有 DivX 样式打包 B 帧的 MPEG-4 流的 AVI 文件ffmpeg
,您可以使用以下命令:
ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi
18.23 noise
损坏包装内的物品或只是将其掉落而不会损坏容器。可用于模糊测试或测试错误恢复/隐藏。
参数:
- amount
接受一个表达式,其对每个数据包的评估确定该数据包中字节的修改频率。低于 0 的值将导致频率变化。默认值为 0,表示不进行任何修改。但是,如果未指定 amount 或 drop,则 amount 将设置为-1。请参阅下文了解可接受的变量。
- drop
接受按数据包计算的表达式,其值确定该数据包是否被丢弃。评估为正值会导致数据包被丢弃。对负值的评估会导致其被丢弃的可能性不同,大致与该值的大小成反比。默认值为 0,这不会导致任何掉落。请参阅下文了解可接受的变量。
- dropamount
接受一个非负整数,这会分配一个可变的被丢弃的机会,大致与该值成反比。默认值为 0,这不会导致任何掉落。保留此选项是为了向后兼容,相当于将 drop 设置为具有相同幅度的负值,即
dropamount=4
与 相同drop=-4
。如果还指定了 drop,则忽略。
和amount
都drop
接受包含以下变量的表达式:
- ‘n’
数据包的索引,从零开始。
- ‘tb’
数据包时间戳的时基。
- ‘pts’
数据包呈现时间戳。
- ‘dts’
数据包解码时间戳。
- ‘nopts’
表示 AV_NOPTS_VALUE 的常量。
- ‘startpts’
流中看到的第一个非 AV_NOPTS_VALUE PTS。
- ‘startdts’
流中看到的第一个非 AV_NOPTS_VALUE DTS。
- ‘duration’
- ‘d’
数据包持续时间,以时基单位表示。
- ‘pos’
输入中的数据包位置;当未知或未设置时可能为 -1。
- ‘size’
数据包大小,以字节为单位。
- ‘key’
数据包是否被标记为关键帧。
- ‘state’
伪随机整数,主要源自数据包有效负载的内容。
18.23.1 示例
对每个字节应用修改,但不要丢弃任何数据包。
ffmpeg -i INPUT -c copy -bsf noise=1 output.mkv
在时间戳 30 秒后丢弃未标记为关键帧的每个视频数据包,但不修改任何剩余数据包。
ffmpeg -i INPUT -c copy -bsf:v noise=drop='gt(t\,30)*not(key)' output.mkv
每 10 秒删除一秒音频,并向其余音频添加一些随机噪音。
ffmpeg -i INPUT -c copy -bsf:a noise=amount=-1:drop='between(mod(t\,10)\,9\,10)' output.mkv
18.24 null
该比特流过滤器将数据包原封不动地通过。
18.25 pcm_rechunk
将 PCM 音频重新打包为每个数据包固定数量的样本或每秒固定的数据包速率。这类似于(ffmpeg-filters)asetnsamples 音频过滤器,但适用于音频数据包而不是音频帧。
- nb_out_samples, n
设置每个输出音频数据包的样本数。该数字旨在表示每个通道的样本数。默认值为 1024。
- pad, p
如果设置为 1,过滤器将用静音填充最后一个音频数据包,以便它将包含相同数量的样本(或大致相同数量的样本,请参阅帧率) 和前面的一样。默认值为 1。
- frame_rate, r
此选项使过滤器每秒输出固定数量的数据包,而不是每个数据包输出固定数量的样本。如果音频采样率不能被帧速率整除,则样本数量将不是恒定的,而是会略有变化,以便每个数据包开始时尽可能接近帧边界。使用此选项优先于nb_out_样本。
您可以使用以下命令生成众所周知的 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 字幕的容器(muxer 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’
英国电信 601、英国电信 709、英国电信 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 常量。
18.30 text2movsub
将文本字幕转换为带有元数据标头的 MOV 字幕(由mov_text
编解码器使用)。
另请参见mov2textsub过滤器。
18.31 trace_headers
日志跟踪输出包含编码流标头中的所有语法元素(高于各个编码块级别的所有内容)。这对于调试低级流问题非常有用。
支持 AV1、H.264、H.265、(M)JPEG、MPEG-2 和 VP9,但根据构建情况,可能仅提供其中的一个子集。
18.32 truehd_core
从 TrueHD 流中提取核心,丢弃 ATMOS 数据。
18.33 vp9_metadata
修改嵌入在 VP9 流中的元数据。
- color_space
在帧标题中设置颜色空间值。请注意,任何设置为 RGB 的帧都将隐式设置为 PC 范围,并且 RGB 与配置文件 0 和 2 不兼容。
- ‘unknown’
- ‘bt601’
- ‘bt709’
- ‘smpte170’
- ‘smpte240’
- ‘bt2020’
- ‘rgb’
- color_range
在帧标题中设置颜色范围值。请注意,颜色空间施加的任何值都将优先于该值。
- ‘tv’
- ‘pc’
18.34 vp9_superframe
将 VP9 不可见(alt-ref)帧合并回 VP9 超帧。这修复了分割/分段 VP9 流的合并,其中 alt-ref 帧与其可见对应帧分开。
18.35 vp9_superframe_split
将 VP9 超帧拆分为单个帧。
18.36 vp9_raw_reorder
给定具有正确时间戳但可能无序的 VP9 流,请插入额外的 show-existing-frame 数据包以纠正顺序。
19 格式选项
libavformat 库提供了一些通用的全局选项,可以在所有复用器和解复用器上进行设置。此外,每个复用器或解复用器可以支持所谓的私有选项,这些选项特定于该组件。
可以通过在 FFmpeg 工具中
指定 -选项 值AVFormatContext
来设置选项,或者通过在选项中显式设置值或使用libavutil/opt.h用于编程使用的 API。
支持的选项列表如下:
- avioflags flags (input/output)
可能的值:
- ‘direct’
减少缓冲。
- probesize integer (input)
设置探测大小(以字节为单位),即要分析以获取流信息的数据大小。较高的值将能够检测更多信息(以防信息分散到流中),但会增加延迟。必须是不小于32的整数,默认为5000000。
- max_probe_packets integer (input)
设置探测编解码器时缓冲数据包的最大数量。默认值为 2500 个数据包。
- packetsize integer (output)
设置数据包大小。
- fflags flags
设置格式标志。有些是针对有限数量的格式实现的。
输入文件的可能值:
- ‘discardcorrupt’
丢弃损坏的数据包。
- ‘fastseek’
对某些格式启用快速但不准确的搜索。
- ‘genpts’
如果存在 DTS,则生成缺失的 PTS。
- ‘igndts’
如果设置了 PTS,则忽略 DTS。nofillin 凝固后呈惰性。
- ‘ignidx’
忽略索引。
- ‘nobuffer’
减少初始输入流分析期间缓冲带来的延迟。
- ‘nofillin’
不要填写数据包字段中可以精确计算的缺失值。
- ‘noparse’
禁用 AVParsers,这
+nofillin
也是需要的。- ‘sortdts’
尝试通过 DTS 交错输出数据包。目前,仅适用于带有索引的 AVI。
输出文件的可能值:
- ‘autobsf’
根据输出格式的要求自动应用比特流过滤器。默认启用。
- ‘bitexact’
仅写入与平台、构建和时间无关的数据。这可确保文件和数据校验和在平台之间可重复且匹配。它的主要用途是回归测试。
- ‘flush_packets’
立即写出数据包。
- ‘shortest’
在最短流的末尾停止复用。可能需要增加 max_interleave_delta 以避免在 EOF 之前刷新较长的流。
- seek2any integer (input)
如果设置为 1,则允许在支持时在分路器级别上查找非关键帧。默认值为 0。
- analyzeduration integer (input)
指定分析多少微秒来探测输入。较高的值将能够检测到更准确的信息,但会增加延迟。默认为 5,000,000 微秒 = 5 秒。
- cryptokey hexadecimal string (input)
设置解密密钥。
- indexmem integer (input)
设置用于时间戳索引的最大内存(每个流)。
- rtbufsize integer (input)
设置用于缓冲实时帧的最大内存。
- fdebug flags (input/output)
打印具体的调试信息。
可能的值:
- ‘ts’
- max_delay integer (input/output)
设置最大复用或解复用延迟(以微秒为单位)。
- fpsprobesize integer (input)
设置用于探测 fps 的帧数。
- audio_preload integer (output)
设置音频数据包应提前交错的微秒数。
- chunk_duration integer (output)
为每个块设置微秒。
- chunk_size integer (output)
设置每个块的大小(以字节为单位)。
- err_detect, f_err_detect flags (input)
设置错误检测标志。
f_err_detect
已弃用,只能通过该ffmpeg
工具使用。可能的值:
- ‘crccheck’
验证嵌入的 CRC。
- ‘bitstream’
检测比特流规范偏差。
- ‘buffer’
检测不正确的比特流长度。
- ‘explode’
检测到小错误时中止解码。
- ‘careful’
考虑那些违反规范并且在野外未被视为错误的事情。
- ‘compliant’
将所有不符合规范的情况视为错误。
- ‘aggressive’
考虑一个理智的编码器不应该将其视为错误的事情。
- max_interleave_delta integer (output)
设置交错的最大缓冲持续时间。持续时间以微秒表示,默认为 10000000(10 秒)。
为了确保所有流正确交错,libavformat 将等待,直到每个流至少有一个数据包,然后才将任何数据包实际写入输出文件。当某些流“稀疏”时(即连续数据包之间存在较大间隙),这可能会导致过度缓冲。
该字段指定多路复用队列中第一个数据包和最后一个数据包的时间戳之间的最大差异,高于该值的 libavformat 将输出一个数据包,无论它是否已将所有流的数据包排队。
如果设置为 0,libavformat 将继续缓冲数据包,直到每个流都有一个数据包,无论缓冲数据包之间的最大时间戳差异如何。
- use_wallclock_as_timestamps integer (input)
如果设置为 1,则使用挂钟作为时间戳。默认值为 0。
- avoid_negative_ts integer (output)
-
可能的值:
- ‘make_non_negative’
移动时间戳以使它们非负。另请注意,这仅影响前导负时间戳,而不影响非单调负时间戳。
- ‘make_zero’
移动时间戳,使第一个时间戳为 0。
- ‘auto (default)’
在目标格式需要时启用转换。
- ‘disabled’
禁用时间戳移位。
启用移位后,所有输出时间戳都会移位相同的量。与没有移动的情况相比,音频、视频和字幕的不同步和相对时间戳差异得以保留。
- skip_initial_bytes integer (input)
如果设置为 1,则设置在读取标头和帧之前要跳过的字节数。默认值为 0。
- correct_ts_overflow integer (input)
如果设置为 1,则更正单个时间戳溢出。默认值为 1。
- flush_packets integer (output)
每个数据包后刷新底层 I/O 流。默认为-1(自动),这意味着底层协议将决定,1 启用它,并具有减少延迟的效果,0 禁用它,并且在某些情况下可能会增加 IO 吞吐量。
- output_ts_offset offset (output)
设置输出时间偏移。
偏移量必须是持续时间规范,请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils)持续时间部分。
该偏移量由复用器添加到输出时间戳中。
指定正偏移意味着相应的流将延迟offset中指定的持续时间。默认值为
0
(意味着不应用偏移)。- format_whitelist list (input)
“,”分隔允许的多路分配器列表。默认情况下,所有内容都是允许的。
- dump_separator string (input)
分隔符用于分隔命令行上打印的有关流参数的字段。例如,要使用换行符和缩进分隔字段:
ffprobe -dump_separator " " -i ~/videos/matrixbench_mpeg2.mpg
- max_streams integer (input)
指定最大流数。这可用于拒绝由于大量流而需要太多资源的文件。
- skip_estimate_duration_from_pts bool (input)
使用 PTS 计算时跳过输入持续时间的估计。目前适用于MPEG-PS 和MPEG-TS。
- strict, f_strict integer (input/output)
指定如何严格遵守标准。
f_strict
已弃用,只能通过该ffmpeg
工具使用。可能的值:
- ‘very’
严格遵守较旧的更严格版本的规范或参考软件
- ‘strict’
严格遵守规范中的所有内容,无论后果如何
- ‘normal’
- ‘unofficial’
允许非官方扩展
- ‘experimental’
允许非标准化的实验性事物、实验性(未完成/正在进行中/未经过充分测试)解码器和编码器。注意:实验性解码器可能会带来安全风险,请勿使用它来解码不受信任的输入。
19.1 Format stream specifiers
格式流说明符允许选择一个或多个与特定属性匹配的流。
流说明符的确切语义是由
avformat_match_stream_specifier()
在
libavformat/avformat.h标头并记录在
ffmpeg(1) 手册的 (ffmpeg)Stream 说明符部分中。
20 个解复用器
解复用器是 FFmpeg 中的配置元素,可以从特定类型的文件中读取多媒体流。
当您配置 FFmpeg 构建时,默认情况下会启用所有支持的解复用器。您可以使用配置选项列出所有可用的选项--list-demuxers
。
您可以使用configure 选项禁用所有解复用器
--disable-demuxers
,并使用该选项有选择地启用单个解复用器,或者使用该选项禁用它。
--enable-demuxer=DEMUXER
--disable-demuxer=DEMUXER
ff* 工具的选项-demuxers
将显示已启用的解复用器列表。用于-formats
查看已启用的解复用器和复用器的组合列表。
下面是一些当前可用的解复用器的描述。
20.1 aa
音频格式 2、3 和 4 解复用器。
该解复用器用于解复用 Audible Format 2、3 和 4 (.aa) 文件。
20.2 aac
原始音频数据传输流 AAC 解复用器。
该解复用器用于解复用包含单个 AAC 流以及其中的任何 ID3v1/2 或 APE 标签的 ADTS 输入。
20.3 apng
动画便携式网络图形解复用器。
This demuxer is used to demux APNG files. All headers, but the PNG signature, up to (but not including) the first fcTL chunk are transmitted as extradata. Frames are then split as being all the chunks between two fcTL ones, or between the last fcTL and IEND chunks.
- -ignore_loop bool
Ignore the loop variable in the file if set. Default is enabled.
- -max_fps int
Maximum framerate in frames per second. Default of 0 imposes no limit.
- -default_fps int
Default framerate in frames per second when none is specified in the file (0 meaning as fast as possible). Default is 15.
20.4 asf
Advanced Systems Format demuxer.
This demuxer is used to demux ASF files and MMS network streams.
- -no_resync_search bool
Do not try to resynchronize by looking for a certain optional start code.
20.5 concat
Virtual concatenation script demuxer.
This demuxer reads a list of files and other directives from a text file and demuxes them one after the other, as if all their packets had been muxed together.
The timestamps in the files are adjusted so that the first file starts at 0 and each next file starts where the previous one finishes. Note that it is done globally and may cause gaps if all streams do not have exactly the same length.
All files must have the same streams (same codecs, same time base, etc.).
The duration of each file is used to adjust the timestamps of the next file:
if the duration is incorrect (because it was computed using the bit-rate or
because the file is truncated, for example), it can cause artifacts. The
duration
directive can be used to override the duration stored in
each file.
20.5.1 Syntax
The script is a text file in extended-ASCII, with one directive per line. Empty lines, leading spaces and lines starting with ’#’ are ignored. The following directive is recognized:
file path
Path to a file to read; special characters and spaces must be escaped with backslash or single quotes.
All subsequent file-related directives apply to that file.
ffconcat version 1.0
Identify the script type and version.
To make FFmpeg recognize the format automatically, this directive must appear exactly as is (no extra space or byte-order-mark) on the very first line of the script.
duration dur
Duration of the file. This information can be specified from the file; specifying it here may be more efficient or help if the information from the file is not available or accurate.
If the duration is set for all files, then it is possible to seek in the whole concatenated video.
inpoint timestamp
In point of the file. When the demuxer opens the file it instantly seeks to the specified timestamp. Seeking is done so that all streams can be presented successfully at In point.
This directive works best with intra frame codecs, because for non-intra frame ones you will usually get extra packets before the actual In point and the decoded content will most likely contain frames before In point too.
对于每个文件,文件入点之前的数据包的时间戳将小于计算的文件开始时间戳(第一个文件的情况下为负),并且文件的持续时间(如果指令未指定)将
duration
根据在他们指定的入点上。由于指定入点之前存在潜在数据包,因此两个串联文件之间的数据包时间戳可能会重叠。
outpoint timestamp
文件的出点。当解复用器在任何流中达到指定的解码时间戳时,它会将其作为文件结束条件进行处理,并跳过所有流中的当前数据包和所有剩余数据包。
出点是排他的,这意味着解复用器不会输出解码时间戳大于或等于出点的数据包。
该指令最适合所有流紧密交错的帧内编解码器和格式。对于非帧内编解码器,您通常会在出点之后获得带有呈现时间戳的附加数据包,因此解码内容很可能也包含出点之后的帧。如果您的流不是紧密交错的,您可能无法在出点之前从所有流中获取所有数据包,并且您可能只能解码出点之前的最早的流。
文件的持续时间(如果指令未指定
duration
)将根据其指定的出点而减少。file_packet_metadata key=value
文件数据包的元数据。将为每个文件包设置指定的元数据。您可以多次指定此指令以添加多个元数据条目。该指令已弃用,请
file_packet_meta
改用。file_packet_meta key value
文件数据包的元数据。将为每个文件包设置指定的元数据。您可以多次指定此指令以添加多个元数据条目。
option key value
访问、打开和探测文件的选项。可以多次出现。
stream
在虚拟文件中引入流。所有后续与流相关的指令都适用于最后引入的流。必须设置一些流属性才能识别子文件中的匹配流。如果脚本中未定义流,则复制第一个文件中的流。
exact_stream_id id
设置流的id。如果给出该指令,则将使用子文件中具有相应 id 的字符串。这对于 MPEG-PS (VOB) 文件特别有用,因为其中流的顺序不可靠。
stream_meta key value
流的元数据。可以多次出现。
stream_codec value
流的编解码器。
stream_extradata hex_string
字符串的额外数据,以十六进制编码。
chapter id start end
添加一章。id是唯一标识符,可能很小且连续。
20.5.2 选项
该分路器接受以下选项:
- safe
如果设置为 1,则拒绝不安全的文件路径和指令。如果文件路径不包含协议规范并且是相对的,并且所有组件仅包含可移植字符集中的字符(字母、数字、句点、下划线和连字符)并且组件开头没有句点,则该文件路径被认为是安全的。
如果设置为 0,则接受任何文件名。
默认值为 1。
- auto_convert
如果设置为 1,则尝试对数据包数据执行自动转换以使流可连接。默认值为 1。
目前,唯一的转换是将 h264_mp4toannexb 比特流过滤器添加到 MP4 格式的 H.264 流中。如果分辨率发生变化,这一点尤其必要。
- segment_time_metadata
如果设置为 1,则每个数据包将包含lavf.concat.start_time和 lavf.concat.duration数据包元数据值,它们是串联输出中各个文件段的 start_time 和持续时间(以微秒为单位)。仅当根据 concat 文件已知持续时间元数据时,才会设置持续时间元数据。默认值为 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 解复用器上的动态自适应流。
该分路器显示清单中找到的所有 AVStream。通过在 AVStreams 上设置丢弃标志,调用者可以决定实际接收哪些流。每个流分别镜像名为“id”和“variant_bitrate”的元数据键的id
和bandwidth
属性
<Representation>
。
20.6.1 选项
该分路器接受以下选项:
- cenc_decryption_key
16 字节密钥(十六进制),用于解密使用 ISO 通用加密(CENC/AES-128 CTR;ISO/IEC 23001-7)加密的文件。
20.7 ea
Electronic Arts 多媒体格式解复用器。
各种 Electronic Arts 游戏均使用此格式。
20.7.1 选项
- merge_alpha bool
-
通常,VP6 Alpha 通道(如果存在)作为辅助视频流返回,通过设置此选项,您可以使解复用器返回除普通视频之外还包含 Alpha 通道的单个视频流。
20.8 imf
可互操作的主格式解复用器。
该解复用器呈现 IMF 组合中的音频和视频流,如SMPTE ST 2067-2中所指定。
ffmpeg [-assetmaps <path of ASSETMAP1>,<path of ASSETMAP2>,...] -i <path of CPL> ...
如果-assetmaps
未指定,解复用器会查找名为的文件
资产映射.xml与 CPL 位于同一目录中。
20.9 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 bool
根据 onMetaData 数组内容分配流。
- -flv_ignore_prevtag bool
忽略前一个标签值的大小。
- -flv_full_metadata bool
输出onMetadata的所有上下文。
20.10 gif
动画 GIF 解复用器。
它接受以下选项:
- min_delay
设置帧之间的最小有效延迟(以百分之几秒为单位)。范围是 0 到 6000。默认值为 2。
- max_gif_delay
设置帧之间的最大有效延迟(以百分之一秒为单位)。范围是 0 到 65535。默认值是 65535(近十一分钟),这是规范允许的最大值。
- default_delay
设置帧之间的默认延迟(以百分之一秒为单位)。范围是 0 到 6000。默认值为 10。
- ignore_loop
GIF 文件可以包含循环一定次数(或无限次)的信息。如果忽略循环设置为1,则来自输入的循环设置将被忽略并且不会发生循环。如果设置为0,则会发生循环,并根据GIF循环次数。默认值为 1。
例如,使用覆盖过滤器,将无限循环的 GIF 放置在另一个视频上:
ffmpeg -i input.mp4 -ignore_loop 0 -i input.gif -filter_complex overlay=shortest=1 out.mkv
请注意,在上面的示例中,覆盖过滤器的最短选项用于以最短输入文件的长度结束输出视频,在本例中为输入.mp4因为本例中的 GIF 无限循环。
20.11 hls
HLS 解复用器
Apple HTTP 直播流解复用器。
该解复用器呈现来自所有变体流的所有 AVStream。id字段被设置为比特率变体索引号。通过在 AVStreams 上设置丢弃标志(通过在 ffplay 中按“a”或“v”),调用者可以决定实际接收哪个变体流。流所属变体的总比特率可在名为“variant_bitrate”的元数据键中找到。
它接受以下选项:
- live_start_index
开始直播流的分段索引(负值从末尾开始)。
- prefer_x_start
如果它在播放列表中,则更喜欢使用 #EXT-X-START 而不是 live_start_index。
- allowed_extensions
',' 分隔的允许 hls 访问的文件扩展名列表。
- max_reload
尝试重新加载不足列表的最大次数。默认值为 1000。
- m3u8_hold_counters
m3u8刷新无新段时加载的最大次数。默认值为 1000。
- http_persistent
使用持久 HTTP 连接。仅适用于 HTTP 流。默认启用。
- http_multiple
使用多个 HTTP 连接来下载 HTTP 段。默认情况下为 HTTP/1.1 服务器启用。
- http_seekable
使用 HTTP 部分请求来下载 HTTP 段。0 = 禁用,1 = 启用,-1 = 自动,默认为自动。
- seg_format_options
使用以 分隔的键=值对列表设置媒体片段分路器的选项
:
。- seg_max_retry
发生错误时重新加载段的最大次数,当不需要在网络错误时跳过段时很有用。默认值为 0。
20.12 image2
图像文件解复用器。
该解复用器从由模式指定的图像文件列表中读取。模式的语法和含义由选项pattern_type指定。
该模式可以包含用于自动确定文件中包含的图像的格式的后缀。
序列中所有文件的每个图像的大小、像素格式和格式必须相同。
该分路器接受以下选项:
- framerate
设置视频流的帧速率。默认为 25。
- loop
如果设置为 1,则循环输入。默认值为 0。
- pattern_type
选择用于解释提供的文件名的模式类型。
pattern_type接受以下值之一。
- none
禁用模式匹配,因此视频将仅包含指定的图像。如果您不想从多个图像创建序列并且您的文件名可能包含特殊模式字符,则应该使用此选项。
- sequence
选择序列模式类型,用于指定按序号索引的文件序列。
序列模式可以包含字符串“%d”或“%0 N d”,它指定表示模式匹配的每个文件名中的序号的字符的位置。如果使用“%d0 N d”形式,则每个文件名中表示数字的字符串都用 0 填充,N是表示该数字的 0 填充数字的总数。可以使用字符串“%%”在模式中指定文字字符“%”。
如果序列模式包含“%d”或“%0 N d”,则该模式指定的文件列表的第一个文件名必须包含start_number和 start_number + start_number_range -1 之间的数字,并且所有后续数字都必须为顺序的。
例如,模式“img-%03d.bmp”将匹配以下形式的文件名序列img-001.bmp,img-002.bmp, ..., img-010.bmp, ETC。; 模式“i%%m%%g-%d.jpg”将匹配以下形式的文件名序列我%m%g-1.jpg, 我%m%g-2.jpg, ...,我%m%g-10.jpg, ETC。
请注意,该模式不一定包含“%d”或“%0 N d”,例如转换单个图像文件 img.jpeg你可以使用命令:
ffmpeg -i img.jpeg img.png
- glob
选择全局通配符模式类型。
模式被解释为
glob()
模式。仅当 libavformat 编译时支持通配符时,此选项才可选。- glob_sequence (deprecated, will be removed)
选择混合的通配符/序列模式。
如果您的 libavformat 版本是使用 globbing 支持进行编译的,并且提供的模式至少包含一个 glob 元字符,其中前面有一个
%*?[]{}
未转义的“%”,则该模式将被解释为模式glob()
,否则将被解释为序列模式。所有全局特殊字符
%*?[]{}
必须以“%”为前缀。要转义文字“%”,您应使用“%%”。例如,该模式
foo-%*.jpeg
将匹配所有以“foo-”为前缀并以“.jpeg”结尾的文件名,并将foo-%?%?%?.jpeg
匹配所有以“foo-”为前缀、后跟三个字符的序列并以“.jpeg”结尾的文件名”。This pattern type is deprecated in favor of glob and sequence.
Default value is glob_sequence.
- pixel_format
Set the pixel format of the images to read. If not specified the pixel format is guessed from the first image file in the sequence.
- start_number
Set the index of the file matched by the image file pattern to start to read from. Default value is 0.
- start_number_range
Set the index interval range to check when looking for the first image file in the sequence, starting from start_number. Default value is 5.
- ts_from_file
If set to 1, will set frame timestamp to modification time of image file. Note that monotonity of timestamps is not provided: images go in the same order as without this option. Default value is 0. If set to 2, will set frame timestamp to the modification time of the image file in nanosecond precision.
- video_size
Set the video size of the images to read. If not specified the video size is guessed from the first image file in the sequence.
- export_path_metadata
If set to 1, will add two extra fields to the metadata found in input, making them also available for other filters (see drawtext filter for examples). Default value is 0. The extra fields are described below:
- lavf.image2dec.source_path
Corresponds to the full path to the input file being read.
- lavf.image2dec.source_basename
Corresponds to the name of the file being read.
20.12.1 Examples
- Use
ffmpeg
for creating a video from the images in the file sequence img-001.jpeg, img-002.jpeg, ..., assuming an input frame rate of 10 frames per second:ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv
- As above, but start by reading from a file with index 100 in the sequence:
ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv
- Read images matching the "*.png" glob pattern , that is all the files
terminating with the ".png" suffix:
ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
20.13 libgme
The Game Music Emu library is a collection of video game music file emulators.
See https://bitbucket.org/mpyne/game-music-emu/overview for more information.
It accepts the following options:
- track_index
Set the index of which track to demux. The demuxer can only export one track. Track indexes start at 0. Default is to pick the first track. Number of tracks is exported as tracks metadata entry.
- sample_rate
Set the sampling rate of the exported track. Range is 1000 to 999999. Default is 44100.
- max_size (bytes)
The demuxer buffers the entire file into memory. Adjust this value to set the maximum buffer size, which in turn, acts as a ceiling for the size of files that can be read. Default is 50 MiB.
20.14 libmodplug
ModPlug based module demuxer
See https://github.com/Konstanty/libmodplug
It will export one 2-channel 16-bit 44.1 kHz audio stream.
Optionally, a pal8
16-color video stream can be exported with or without printed metadata.
It accepts the following options:
- noise_reduction
Apply a simple low-pass filter. Can be 1 (on) or 0 (off). Default is 0.
- reverb_depth
Set amount of reverb. Range 0-100. Default is 0.
- reverb_delay
Set delay in ms, clamped to 40-250 ms. Default is 0.
- bass_amount
应用低音扩展,又名 XBass 或 megabass。范围是 0(安静)到 100(大声)。默认值为 0。
- bass_range
设置截止频率,即低音频率的上限。范围为 10-100 Hz。默认值为 0。
- surround_depth
应用杜比定向逻辑环绕声效果。范围是 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
以“字符”为单位设置视频帧宽度,其中 1 个字符表示 8 个像素。范围为 20-512。默认值为 30。
- video_stream_h
以“字符”为单位设置视频帧高度,其中 1 个字符表示 8 个像素。范围为 20-512。默认值为 30。
- video_stream_ptxt
打印视频流上的元数据。包括
speed
、tempo
、order
、pattern
和 (时间以毫秒为单位)row
。ts
可以是 1(打开)或 0(关闭)。默认值为 1。
20.15 libopenmpt
基于 libopenmpt 的模块解复用器
请参阅https://lib.openmpt.org/libopenmpt/了解更多信息。
有些文件有多个子歌曲(曲目),可以使用副歌 选项。
它接受以下选项:
- subsong
设置子歌曲索引。这可以是“全部”、“自动”或子歌曲的索引。子歌曲索引从 0 开始。默认值为“自动”。
默认值是让libopenmpt选择。
- layout
设置通道布局。有效值为 1、2 和 4 通道布局。默认值为立体声。
- sample_rate
设置 libopenmpt 输出的采样率。范围从 1000 到 INT_MAX。默认值是 48000。
20.16 mov/mp4/3gp
Quicktime 文件格式和 ISO/IEC 基本媒体文件格式的解复用器(ISO/IEC 14496-12 或 MPEG-4 第 12 部分、ISO/IEC 15444-12 或 JPEG 2000 第 12 部分)。
注册扩展名:mov、mp4、m4a、3gp、3g2、mj2、psp、m4b、ism、ismv、isma、f4v
20.16.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 (默认)
- ‘dts’
将 mfra 时间戳设置为 DTS
- ‘pts’
将 mfra 时间戳设置为 PTS
- ‘0’
不要使用 mfra 框设置时间戳
- use_tfdt
对于分段输入,将片段的起始时间戳设置为
baseMediaDecodeTime
from thetfdt
box。默认是启用的,这会优先使用tfdt
DTS框来设置。禁止使用earliest_presentation_time
包装盒中的产品sidx
。mfra
在任何一种情况下,如果可用且use_mfra_for
设置为 pts 或 dts, 则将使用框中的时间戳。- export_all
将udta框中无法识别的框导出为元数据条目。框类型的前四个字符被设置为键。默认为 false。
- export_xmp
将XMP_框和uuid框的全部内容导出为带有 key 的字符串
xmp
。请注意,如果export_all
设置了此选项而未设置此选项,则XMP_ box 的内容仍会导出,但带有 keyXMP_
。默认为 false。- activation_bytes
解密 Audible AAX 和 AAX+ 文件所需的 4 字节密钥。请参阅下面的 Audible AAX 小节。
- audible_fixed_key
用于处理 Audible AAX/AAX+ 文件的固定键。它已预先设置,因此无需指定。
- decryption_key
16 字节密钥(十六进制),用于解密使用 ISO 通用加密(CENC/AES-128 CTR;ISO/IEC 23001-7)加密的文件。
- max_stts_delta
有时可能会有意在 trak 的 stts 框中写入非常高的样本增量,但通常它们会被错误写入,或者在被视为有符号 32 位整数时用于存储负值以进行 dts 校正。此选项允许用户设置一个上限,超过该上限,增量将被限制为 1。如果转换为 int32 时为负,则大于该限制的值将用于调整向前的 dts。
单位是轨道时间尺度。范围是 0 到 UINT_MAX。默认值
UINT_MAX - 48000*10
允许对 48 kHz 音频流进行长达 10 秒的 dts 校正,同时适应 99.9% 的uint32
范围。- interleaved_read
在解复用器级别交错来自多个轨道的数据包。对于交错严重的文件,这可以防止因不同轨道中的数据包之间的较大间隙而导致的播放问题,因为 MOV/MP4 没有数据包放置要求。但是,由于在轨道之间进行查找,这可能会导致对非常糟糕的交错文件进行过度查找,因此禁用它可能会阻止 I/O 问题,但会影响播放。
20.16.2 有声 AAX
Audible AAX 文件是加密的 M4B 文件,可以通过指定 4 字节激活密钥来解密。
ffmpeg -activation_bytes 1CEB00DA -i test.aax -vn -c:a copy output.mp4
20.17 mpegts
MPEG-2 传输流解复用器。
该分路器接受以下选项:
- resync_size
设置查找新同步的大小限制。默认值为 65536。
- skip_unknown_pmt
对于 PAT 中未定义的程序,跳过 PMT。默认值为 0。
- fix_teletext_pts
使用根据图文电视流所属且不被丢弃的第一个节目的 PCR 计算出的时间戳来覆盖图文电视数据包 PTS 和 DTS 值。默认值为 1,如果您希望图文电视数据包 PTS 和 DTS 值保持不变,请将此选项设置为 0。
- ts_packetsize
输出选项携带原始数据包大小(以字节为单位)。显示检测到的原始数据包大小,用户无法设置。
- scan_all_pmts
扫描并合并所有 PMT。该值为-1到1之间的整数(-1表示自动设置,1表示启用,0表示禁用)。默认值为-1。
- merge_pmt_versions
当 PMT 版本更新并且基本流移动到不同的 PID 时,重新使用现有流。默认值为 0。
- max_packet_size
设置解复用器发出的数据包的最大大小(以字节为单位)。超过此大小的有效负载被分成多个数据包。范围是 1 到 INT_MAX/2。默认值为 204800 字节。
20.18 mpjpeg
MJPEG 封装在多部分 MIME 解复用器中。
该解复用器允许读取 MJPEG,其中每个帧都表示为 multipart/x-mixed-replace 流的一部分。
- strict_mime_boundary
默认实现对多部分 MIME 边界检测应用宽松的标准,以防止大量现有端点不生成正确的 MIME MJPEG 流而出现回归。通过将其设置为 1 来打开此选项将导致对边界值进行更严格的检查。
20.19 rawvideo
原始视频解复用器。
该解复用器允许读取原始视频数据。由于没有指定假定视频参数的标头,因此用户必须指定它们才能正确解码数据。
该分路器接受以下选项:
- framerate
设置输入视频帧速率。默认值为 25。
- pixel_format
设置输入视频像素格式。默认值为
yuv420p
。- video_size
设置输入视频大小。该值必须明确指定。
例如读取原始视频文件输入.raw,假设
ffplay
像素格式为rgb24
、视频大小为320x240
、帧速率为每秒 10 个图像,请使用以下命令:
ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw
20.20 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.21 tedcaptions
用于TED 演讲的 JSON 标题。
TED 没有提供标题链接,但可以从页面中猜出。文件工具/bookmarklets.htmlFFmpeg 源代码树中包含一个书签来公开它们。
该分路器接受以下选项:
- start_time
设置 TED 演讲的开始时间(以毫秒为单位)。默认值为 15000(15 秒)。它用于将字幕与可下载视频同步,因为它们包含 15 秒的介绍。
示例:将字幕转换为大多数玩家都能理解的格式:
ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt
20.22 vapoursynth
Vaporsynth 包装器。
出于安全考虑,Vapoursynth 脚本不会被自动检测,因此必须强制输入格式。对于 ff* CLI 工具,请-f vapoursynth
在输入之前添加-i yourscript.vpy
.
该分路器接受以下选项:
- max_script_size
解复用器将整个脚本缓冲到内存中。调整此值以设置最大缓冲区大小,这反过来又充当可以读取的脚本大小的上限。默认值为 1 MiB。
21 个复用器
复用器是 FFmpeg 中的配置元素,允许将多媒体流写入特定类型的文件。
当您配置 FFmpeg 构建时,默认情况下会启用所有支持的复用器。您可以使用配置选项列出所有可用的复用器--list-muxers
。
您可以使用configure选项禁用所有复用器
,并使用选项/
--disable-muxers
选择性地启用/禁用单个复用器。
--enable-muxer=MUXER
--disable-muxer=MUXER
ff* 工具的选项-muxers
将显示已启用的复用器列表。用于-formats
查看已启用的解复用器和复用器的组合列表。
下面是一些当前可用的复用器的描述。
21.1 a64
用于 Commodore 64 视频的 A64 复用器。接受单个a64_multi
或a64_multi5
编解码器视频流。
21.2 adts
音频数据传输流复用器。它接受单个 AAC 流。
21.2.1 选项
它接受以下选项:
- write_id3v2 bool
允许在流的开头写入 ID3v2.4 标签。默认为禁用。
- write_apetag bool
允许在流末尾写入 APE 标签。默认为禁用。
- write_mpeg2 bool
启用将 ADTS 帧头中的 MPEG 版本位设置为 1,表示 MPEG-2。默认值为 0,表示 MPEG-4。
21.3 aiff
音频交换文件格式复用器。
21.3.1 选项
它接受以下选项:
- write_id3v2
设置为 1 时启用 ID3v2 标签写入。默认值为 0(禁用)。
- id3v2_version
选择ID3v2版本进行写入。目前仅支持版本 3 和 4(又名 ID3v2.3 和 ID3v2.4)。默认为版本 4。
21.4 alp
用于 HighVoltage Software 的 Lego Racers 游戏音频的复用器。它接受不超过 2 个通道且采样率不超过 44100 Hz 的单个 ADPCM_IMA_ALP 流。
扩展名:tun、pcm
21.4.1 选项
它接受以下选项:
- type type
设置文件类型。
- ‘tun’
将文件类型设置为音乐。采样率必须为 22050 Hz。
- ‘pcm’
将文件类型设置为 sfx。
- ‘auto’
根据输出文件扩展名设置文件类型。
.pcm
结果类型为pcm
其他类型tun
已设置。(默认)
21.5 asf
高级系统格式复用器。
请注意,Windows Media Audio (wma) 和 Windows Media Video (wmv) 也使用此复用器。
21.5.1 选项
它接受以下选项:
- packet_size
设置复用器数据包大小。通过调整此设置,您可以减少数据碎片或复用器开销,具体取决于您的源。默认值为 3200,最小值为 100,最大值为 64k。
21.6 avi
音频视频交错复用器。
21.6.1 选项
它接受以下选项:
- reserve_index_space
为文件头中每个流的 OpenDML 主索引保留指定的字节数。默认情况下,如果第一个主索引中没有剩余空间,则附加主索引将嵌入数据包中,并作为索引链链接在一起。此索引结构可能会在某些用例中导致问题,例如第三方软件严格依赖 OpenDML 索引规范或文件查找速度缓慢时。在文件头中保留足够的索引空间可以避免这些问题。
所需的索引空间取决于输出文件的大小,并且应该约为每 GB 16 字节。当省略此选项或将其设置为零时,将猜测必要的索引空间。
- write_channel_mask
将通道布局掩码写入音频流标头。
默认情况下启用此选项。禁用通道掩码在特定情况下很有用,例如,将多个音频流合并为一个以与仅支持 AVI 中单个音频流的软件兼容时(请参阅 (ffmpeg-filters)ffmpeg-filters 手册中的“amerge”部分))。
- flipped_raw_rgb
如果设置为 true,则存储原始 RGB 位图的正高度,这表示位图是自下而上存储的。请注意,此选项不会翻转位图,必须事先手动完成,例如使用 vflip 滤镜。默认值为false,表示位图自上而下存储。
21.7 chromaprint
色谱指纹仪。
该复用器将音频数据提供给 Chromaprint 库,后者为所提供的音频数据生成指纹。请参阅https://acoustid.org/chromaprint
它需要最多 2 个通道的单个签名本机字节序 16 位原始音频流。
21.7.1 选项
- silence_threshold
检测静音的阈值。范围从 -1 到 32767,其中 -1 禁用静音检测。静音检测只能与算法的版本 3 一起使用。必须禁用静音检测才能与 AcoustID 服务一起使用。默认值为-1。
- algorithm
指纹算法的版本。范围是 0 到 4。版本 3 启用静音检测。默认值为 1。
- fp_format
输出指纹的格式为。接受以下选项:
- ‘raw’
二进制原始指纹
- ‘compressed’
二进制压缩指纹
- ‘base64’
Base64 压缩指纹(默认)
21.8 crc
CRC(循环冗余校验)测试格式。
该复用器计算并打印所有输入音频和视频帧的 Adler-32 CRC。默认情况下,在计算 CRC 之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频。
复用器的输出由以下形式的单行组成: CRC=0x CRC,其中CRC是一个用 0 填充的十六进制数,包含所有已解码输入帧的 CRC 的 8 位数字。
另请参见framecrc复用器。
21.8.1 示例
例如计算输入的 CRC,并将其存储在文件中 输出CRC:
ffmpeg -i INPUT -f crc out.crc
您可以使用以下命令将 CRC 打印到 stdout:
ffmpeg -i INPUT -f crc -
ffmpeg
您可以通过指定音频和视频编解码器和格式来选择每帧的输出格式。例如,要计算转换为 PCM 无符号 8 位的输入音频和转换为 MPEG-2 视频的输入视频的 CRC,请使用以下命令:
ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
21.9 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-specation
它为每个流创建 MPD 清单文件和段文件。
段文件名可能包含与 SegmentTemplate 一起使用的预定义标识符,如标准第 5.3.9.4.4 节中定义的那样。可用标识符为“$RepresentationID$”、“$Number$”、“$Bandwidth$”和“$Time$”。除了标准标识符之外,还支持 ffmpeg 特定的“$ext$”标识符。当指定时,ffmpeg 会将文件名中的 $ext$ 替换为 muxing 格式的扩展名,例如 mp4、webm 等,
ffmpeg -re -i <input> -map 0 -map 0 -c:a libfdk_aac -c:v libx264 \ -b:v:0 800k -b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline \ -profile:v:0 main -bf 1 -keyint_min 120 -g 120 -sc_threshold 0 \ -b_strategy 0 -ar:a:1 22050 -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
- seg_duration duration
设置以秒为单位的段长度(可以设置小数值)。当启用 use_template且禁用use_timeline时,该值被视为平均分段持续时间,并且被视为所有其他用例的最小分段持续时间。
- frag_duration duration
设置段内片段的长度(以秒为单位)(可以设置小数值)。
- frag_type type
设置分片的间隔类型。
- window_size size
设置清单中保留的最大段数。
- extra_window_size size
设置从磁盘删除之前保留在清单之外的最大段数。
- remove_at_exit remove
完成后启用 (1) 或禁用 (0) 删除所有段。
- use_template template
启用 (1) 或禁用 (0) 使用 SegmentTemplate 而不是 SegmentList。
- use_timeline timeline
Enable (1) or disable (0) use of SegmentTimeline in SegmentTemplate.
- single_file single_file
Enable (1) or disable (0) storing all segments in one file, accessed using byte ranges.
- single_file_name file_name
DASH-templated name to be used for baseURL. Implies single_file set to "1". In the template, "$ext$" is replaced with the file name extension specific for the segment format.
- init_seg_name init_name
DASH-templated name to used for the initialization segment. Default is "init-stream$RepresentationID$.$ext$". "$ext$" is replaced with the file name extension specific for the segment format.
- media_seg_name segment_name
DASH-templated name to used for the media segments. Default is "chunk-stream$RepresentationID$-$Number%05d$.$ext$". "$ext$" is replaced with the file name extension specific for the segment format.
- utc_timing_url utc_url
URL of the page that will return the UTC timestamp in ISO format. Example: "https://time.akamai.com/?iso"
- method method
Use the given HTTP method to create output files. Generally set to PUT or POST.
- http_user_agent user_agent
Override User-Agent field in HTTP header. Applicable only for HTTP output.
- http_persistent http_persistent
Use persistent HTTP connections. Applicable only for HTTP output.
- hls_playlist hls_playlist
Generate HLS playlist files as well. The master playlist is generated with the filename hls_master_name. One media playlist file is generated for each stream with filenames media_0.m3u8, media_1.m3u8, etc.
- hls_master_name file_name
HLS master playlist name. Default is "master.m3u8".
- streaming streaming
Enable (1) or disable (0) chunk streaming mode of output. In chunk streaming mode, each frame will be a moof fragment which forms a chunk.
- adaptation_sets adaptation_sets
Assign streams to AdaptationSets. Syntax is "id=x,streams=a,b,c id=y,streams=d,e" with x and y being the IDs of the adaptation sets and a,b,c,d and e are the indices of the mapped streams.
To map all video (or audio) streams to an AdaptationSet, "v" (or "a") can be used as stream identifier instead of IDs.
When no assignment is defined, this defaults to an AdaptationSet for each stream.
可选语法为“id=x,seg_duration=x,frag_duration=x,frag_type=type,descriptor=descriptor_string,streams=a,b,c id=y,seg_duration=y,frag_type=type,streams=d,e”并且依此类推,描述符对于 ISO/IEC 23009-1:2014/Amd.2:2015 定义的方案很有用。例如,-adaptation_sets "id=0,descriptor=<SupplementalProperty schemaIdUri=\"urn:mpeg:dash:srd:2014\" value=\"0,0,0,1,1,2,2\"/> ,流=v”。请注意,描述符字符串应该是自闭合 xml 标记。seg_duration、frag_duration 和 frag_type 覆盖每个适应集的全局选项值。例如, -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" type_id 将适配集标记为包含流用于参考适应集的技巧模式。例如,-adaptation_sets“id=0,seg_duration=2,frag_type=none,streams=0 id=1,seg_duration=10,frag_type=none,trick_id=0,streams=1”
- timeout timeout
设置套接字 I/O 操作的超时。仅适用于 HTTP 输出。
- index_correction index_correction
启用 (1) 或禁用 (0) 段索引校正逻辑。仅当启用use_template且禁用 use_timeline时适用 。
启用后,逻辑会监视段索引的流。如果流的段索引值不在预期的实时位置,则逻辑将更正该索引值。
通常,直播用例中需要此逻辑。在长时间运行流媒体期间,网络带宽波动很常见。每次波动都会导致段索引落后于预期的实时位置。
- format_options options_list
使用单独的 key=value 参数列表设置容器格式 (mp4/webm) 选项
:
。包含特殊字符的值:
必须进行转义。- global_sidx global_sidx
写入全局 SIDX 原子。仅适用于单文件、mp4 输出、非流模式。
- dash_segment_type dash_segment_type
可能的值:
- auto
如果设置此标志,则将根据流编解码器选择短划线段文件格式。这是默认模式。
- mp4
如果设置此标志,则破折号段文件将采用 ISOBMFF 格式。
- webm
如果设置此标志,则破折号段文件将采用 WebM 格式。
- ignore_io_errors ignore_io_errors
忽略打开和写入期间的 IO 错误。对于使用网络输出进行长时间运行很有用。
- lhls lhls
启用低延迟 HLS(LHLS)。添加带有当前段 URI 的 #EXT-X-PREFETCH 标记。hls.js 玩家正在尝试标准化开放的 LHLS 规范。草案规范可在 https://github.com/video-dev/hlsjs-rfcs/blob/lhls-spec/proposals/0001-lhls.md 中找到。此选项尝试遵守上述开放规范。它自动启用流媒体和hls_playlist选项。这是一个实验性功能。
注意:这不是 Apple 版本的 LHLS。请参阅https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis
- ldash ldash
通过限制某些元素的存在和值来启用低延迟 Dash。
- master_m3u8_publish_rate master_m3u8_publish_rate
每隔指定数量的分段间隔重复发布主播放列表。
- write_prft write_prft
在支持的流上写入生产者参考时间元素。这还可以在底层复用器中写入 prft 框。仅当启用utc_url选项时适用。默认情况下它设置为自动,在这种情况下,复用器将尝试仅在需要它的模式下启用它。
- mpd_profile mpd_profile
设置一个或多个清单配置文件。
- http_opts http_opts
要传递给底层 HTTP 协议的以 : 分隔的 key=value 选项列表。仅适用于 HTTP 输出。
- target_latency target_latency
设置服务的预期目标延迟(以秒为单位)(可以设置小数值)。仅当启用了Streaming和write_prft选项时才适用。这是客户可以用来测量服务延迟的信息字段。
- min_playback_rate min_playback_rate
设置适当的最低播放速率,以便客户端正常播放时自动调整播放延迟和缓冲区占用率。
- max_playback_rate max_playback_rate
设置适当的最大播放速率,以便客户端正常播放时自动调整播放延迟和缓冲区占用率。
- update_period update_period
设置动态内容的 mpd 更新周期。单位是第二位。
21.10 fifo
fifo 伪复用器允许通过使用先进先出队列并在单独的线程中运行实际复用器来分离编码和复用器。这与tee复用器结合使用特别有用,可用于将数据发送到具有不同可靠性/写入速度/延迟的多个目的地。
API 用户应该注意,在其 AVFormatContext 中使用的回调函数(interrupt_callback、io_open 和 io_close)必须是线程安全的。
如果队列已满或输出失败,fifo 复用器的行为是可选择的,
- 可以根据实时或处理流的时间,透明地重新启动输出,并在重试之间设置可配置的延迟。
- 编码可以在临时故障期间被阻止,或者在 fifo 队列填满的情况下继续透明地丢弃数据包。
- fifo_format
指定格式名称。如果无法从输出名称后缀猜测出来,则很有用。
- queue_size
指定队列的大小(数据包数量)。默认值为 60。
- format_opts
指定底层复用器的格式选项。Muxer 选项可以指定为由“:”分隔的 键=值对列表。
- drop_pkts_on_overflow bool
如果设置为 1 (true),万一 fifo 队列已满,数据包将被丢弃而不是阻塞编码器。这使得可以在不延迟输入的情况下继续流式传输,但代价是省略部分流。默认情况下,此选项设置为 0(假),因此在这种情况下,编码器将被阻止,直到复用器处理一些数据包并且它们都不会丢失。
- attempt_recovery bool
如果发生故障,请尝试恢复输出。这在与网络输出一起使用时特别有用,因为它可以透明地重新启动流式传输。默认情况下,此选项设置为 0 (false)。
- max_recovery_attempts
设置连续不成功恢复尝试的最大次数,在此之后输出将永久失败。默认情况下,此选项设置为 0(无限制)。
- recovery_wait_time duration
上一次恢复尝试失败后,下一次恢复尝试之前的等待时间。默认值为 5 秒。
- recovery_wait_streamtime bool
如果设置为 0 (false),则在等待恢复尝试时使用实际时间(即,将在至少 recovery_wait_time 秒后尝试恢复)。如果设置为 1 (true),则会考虑已处理流的时间(即,将在省略 流的至少recovery_wait_time秒后尝试恢复)。默认情况下,此选项设置为 0 (false)。
- recover_any_error bool
如果设置为 1 (true),则无论导致失败的错误类型如何,都将尝试恢复。默认情况下,此选项设置为 0 (false),并且在出现某些(通常是永久性)错误的情况下,即使attempt_recovery设置为 1, 也不会尝试恢复 。
- restart_with_keyframe bool
指定从队列溢出或故障恢复后是否等待关键帧。默认情况下,此选项设置为 0 (false)。
- timeshift duration
缓冲指定数量的数据包并延迟写入输出。请注意, queue_size必须足够大才能存储时移数据包。输入结束时,fifo 缓冲区会以实时速度刷新。
21.10.1 示例
- 将某些内容流式传输到 rtmp 服务器,即使在临时故障(网络中断)的情况下也继续以实时速率处理流,并尝试无限期地每秒恢复流式传输。
ffmpeg -re -i ... -c:v libx264 -c:a aac -f fifo -fifo_format flv -map 0:v -map 0:a -drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 rtmp://example.com/live/stream_name
21.11 flv
Adobe Flash 视频格式混合器。
该复用器接受以下选项:
- flvflags flags
可能的值:
- ‘aac_seq_header_detect’
根据音频流数据放置 AAC 序列头。
- ‘no_sequence_end’
禁用序列结束标记。
- ‘no_metadata’
禁用元数据标签。
- ‘no_duration_filesize’
当元数据中的持续时间和文件大小在流末尾等于零时,禁用它们。(习惯不可寻求的生活流)。
- ‘add_keyframe_index’
用于方便查找;特别是对于 HTTP 伪流。
21.12 framecrc
每个数据包 CRC(循环冗余校验)测试格式。
该复用器计算并打印每个音频和视频数据包的 Adler-32 CRC。默认情况下,在计算 CRC 之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频。
复用器的输出由每个音频和视频数据包的一行组成,格式如下:
stream_index, packet_dts, packet_pts, packet_duration, packet_size, 0xCRC
CRC是一个用 0 填充的 8 位十六进制数,包含数据包的 CRC。
21.12.1 示例
例如计算音频和视频帧的 CRC 输入,转换为原始音视频数据包,并存储在文件中输出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.13 framehash
每个数据包哈希测试格式。
该复用器计算并打印每个音频和视频数据包的加密哈希值。这可用于逐个数据包的相等性检查,而无需单独对每个数据包进行二进制比较。
默认情况下,在计算哈希之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频,但也可以使用显式转换为其他编解码器的输出。它默认使用 SHA-256 加密哈希函数,但支持其他几种算法。
复用器的输出由每个音频和视频数据包的一行组成,格式如下:
stream_index, packet_dts, packet_pts, packet_duration, packet_size, hash
hash是一个十六进制数,表示数据包的计算哈希值。
- hash algorithm
使用字符串算法指定的加密哈希函数。支持的值包括
MD5
、murmur3
、RIPEMD128
、RIPEMD160
、RIPEMD256
、RIPEMD320
、SHA160
、SHA224
、SHA256
(默认)SHA512/224
、SHA512/256
、SHA384
、SHA512
、CRC32
和adler32
。
21.13.1 示例
计算音频和视频帧的 SHA-256 哈希值输入,转换为原始音视频数据包,并存储在文件中 输出sha256:
ffmpeg -i INPUT -f framehash out.sha256
要使用 MD5 哈希函数将信息打印到 stdout,请使用以下命令:
ffmpeg -i INPUT -f framehash -hash md5 -
另请参见哈希复用器。
21.14 framemd5
每个数据包的 MD5 测试格式。
这是framehash muxer 的一个变体。与该复用器不同,它默认使用 MD5 哈希函数。
21.14.1 示例
计算音频和视频帧的 MD5 哈希值输入,转换为原始音视频数据包,并存储在文件中 输出.md5:
ffmpeg -i INPUT -f framemd5 out.md5
要将信息打印到标准输出,请使用以下命令:
ffmpeg -i INPUT -f framemd5 -
21.15 gif
动画 GIF 混合器。
它接受以下选项:
- loop
设置循环输出的次数。使用
-1
for 无循环,0
for 无限循环(默认)。- final_delay
在最后一帧之后强制延迟(以厘秒表示)。每帧结束时都会有延迟,直到下一帧为止。默认值为
-1
,这是一个特殊值,用于告诉复用器重新使用之前的延迟。如果出现循环,您可能需要自定义此值以标记暂停。
例如,要对循环 10 次的 gif 进行编码,循环之间有 5 秒的延迟:
ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif
注意1:如果你想将帧提取到单独的GIF文件中,你需要强制image2 muxer:
ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif"
注2:GIF格式具有非常大的时基:因此两帧之间的延迟不能小于一厘秒。
21.16 hash
哈希测试格式。
该复用器计算并打印所有输入音频和视频帧的加密哈希。这可以用于相等检查,而无需进行完整的二进制比较。
默认情况下,在计算哈希之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频,但也可以使用显式转换为其他编解码器的输出。时间戳被忽略。它默认使用 SHA-256 加密哈希函数,但支持其他几种算法。
复用器的输出由以下形式的单行组成: algo = hash,其中algo是表示所使用的哈希函数的短字符串,hash是表示计算的哈希值的十六进制数。
- hash algorithm
使用字符串算法指定的加密哈希函数。支持的值包括
MD5
、murmur3
、RIPEMD128
、RIPEMD160
、RIPEMD256
、RIPEMD320
、SHA160
、SHA224
、SHA256
(默认)SHA512/224
、SHA512/256
、SHA384
、SHA512
、CRC32
和adler32
。
21.16.1 示例
计算转换为原始音频和视频的输入的 SHA-256 哈希值,并将其存储在文件中输出sha256:
ffmpeg -i INPUT -f hash out.sha256
要将 MD5 哈希打印到 stdout,请使用以下命令:
ffmpeg -i INPUT -f hash -hash md5 -
另请参见framehash muxer。
21.17 hls
Apple HTTP Live Streaming 复用器,根据 HTTP Live Streaming (HLS) 规范对 MPEG-TS 进行分段。
它创建一个播放列表文件和一个或多个片段文件。输出文件名指定播放列表文件名。
默认情况下,复用器为生成的每个段创建一个文件。这些文件与播放列表具有相同的名称,后跟序列号和 .ts 扩展名。
确保在编码时需要封闭的 GOP 并设置 GOP 大小以适合您的片段时间限制。
例如,要使用以下命令转换输入文件ffmpeg
:
ffmpeg -i in.mkv -c:v h264 -flags +cgop -g 30 -hls_time 1 out.m3u8
此示例将生成播放列表,输出.m3u8和段文件: 输出0.ts,输出1.ts,输出2.ts, ETC。
另请参阅分段复用器,它提供了分段器的更通用和灵活的实现,并且可用于执行 HLS 分段。
21.17.1 选项
该复用器支持以下选项:
- hls_init_time duration
设置初始目标段长度。默认值为0。
持续时间必须是持续时间规范,请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils)持续时间部分。
在第一个 m3u8 列表上经过该时间后,将在下一个关键帧处剪切片段。初始播放列表填满后,
ffmpeg
将在持续时间等于hls_time
- hls_time duration
设置目标段长度。默认值为 2。
持续时间必须是持续时间规范,请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils)持续时间部分。该时间过后,将在下一个关键帧处剪切片段。
- hls_list_size size
设置播放列表条目的最大数量。如果设置为 0,列表文件将包含所有段。默认值为 5。
- hls_delete_threshold size
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 number
当hls_start_number_source值为generic
#EXT-X-MEDIA-SEQUENCE
时,从指定编号开始播放列表序号 ( ) 。(这是默认情况。)除非设置,否则它还会指定片段和字幕文件名的起始序列号。默认值为 0。hls_flags single_file
- hls_allow_cache allowcache
显式设置客户端是否可以 (1) 或不得 (0) 缓存媒体片段。
- hls_base_url baseurl
将baseurl附加到播放列表中的每个条目。对于生成具有绝对路径的播放列表很有用。
请注意,每个片段的播放列表序列号必须是唯一的,并且不要与可以循环的片段文件名序列号混淆,例如,如果裹选项已指定。
- hls_segment_filename filename
设置段文件名。除非
hls_flags single_file
设置, 否则文件名将用作带有段号的字符串格式:ffmpeg -i in.nut -hls_segment_filename 'file%03d.ts' out.m3u8
此示例将生成播放列表,输出.m3u8和段文件: 文件000.ts,文件001.ts,文件002.ts, ETC。
文件名可以包含完整路径或相对路径规范,但只有没有任何路径信息的文件名部分才会包含在 m3u8 段列表中。如果指定相对路径,则创建的段文件的路径将相对于当前工作目录。当设置strftime_mkdir时,filename的整个扩展值将被写入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
此示例将生成播放列表片段文件集: 文件_0_000.ts,文件_0_001.ts,文件_0_002.ts等以及 文件_1_000.ts,文件_1_001.ts,文件_1_002.ts, ETC。
字符串“%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, ETC。
- strftime
在文件名上使用 strftime()可以用本地时间扩展段文件名。段号在此模式下也可用,但要使用它,您需要指定 secondary_level_segment_index hls_flag 且 %%d 将作为说明符。
ffmpeg -i in.nut -strftime 1 -hls_segment_filename 'file-%Y%m%d-%s.ts' out.m3u8
此示例将生成播放列表,输出.m3u8和段文件: 文件-20160215-1455569023.ts,文件-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
此示例将生成播放列表,输出.m3u8和段文件: 文件-20160215-0001.ts,文件-20160215-0002.ts, ETC。
- strftime_mkdir
与 -strftime_mkdir 一起使用,它将创建在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(如果不存在),然后生成播放列表,输出.m3u8和段文件: 20160215/文件-20160215-1455569023.ts,20160215/文件-20160215-1455569024.ts, ETC。
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(如果其中任何一个不存在),然后生成播放列表,输出.m3u8和段文件: 2016/02/15/文件-20160215-1455569023.ts,2016/02/15/文件-20160215-1455569024.ts, ETC。
- hls_segment_options options_list
使用 : 分隔的 key=value 参数列表设置输出格式选项。包含特殊字符的值
:
必须进行转义。- hls_key_info_file key_info_file
使用key_info_file中的信息进行段加密。key_info_file的第一行指定写入播放列表的密钥 URI。密钥 URL 用于在播放期间访问加密密钥。第二行指定在加密过程中用于获取密钥的密钥文件的路径。密钥文件被读取为二进制格式的 16 个八位字节的单个打包数组。可选的第三行将初始化向量 (IV) 指定为十六进制字符串,用于代替段序列号(默认)进行加密。对key_info_file的更改将导致使用新密钥/IV 进行分段加密,并在播放列表中添加新密钥 URI/IV 的条目(如果
hls_flags periodic_rekey
已启用)。关键信息文件格式:
key URI key file path 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 enc
启用 (1) 或禁用 (0) AES128 加密。启用后,生成的每个片段都会被加密,并且加密密钥将保存为播放列表名称.key。
- -hls_enc_key key
用于加密段的 16 字节密钥,默认情况下它是随机生成的。
- -hls_enc_key_url keyurl
如果设置,则将在播放列表中的密钥文件名 前面添加keyurl (而不是baseurl) 。
- -hls_enc_iv iv
每个段的 16 字节初始化向量,而不是自动生成的向量。
- hls_segment_type flags
可能的值:
- ‘mpegts’
以 MPEG-2 传输流格式输出片段文件。这与所有 HLS 版本兼容。
- ‘fmp4’
以分段 MP4 格式输出分段文件,类似于 MPEG-DASH。fmp4 文件可以在 HLS 版本 7 及更高版本中使用。
- hls_fmp4_init_filename filename
将文件名设置为片段文件头文件,默认文件名是初始化.mp4。
使用
-strftime 1
on filename以本地时间扩展段文件名。ffmpeg -i in.nut -hls_segment_type fmp4 -strftime 1 -hls_fmp4_init_filename "%s_init.mp4" out.m3u8
这将产生像这样的 init 1602678741_init.mp4
- hls_fmp4_init_resend
每次 m3u8 文件刷新后重新发送 init 文件,默认为0。
当
var_stream_map
设置两个或多个变体流时, 文件名模式必须包含字符串“%v”,该字符串指定变体流索引在生成的初始化文件名中的位置。字符串“%v”可能出现在文件名中或包含该文件的最后一个目录名中。如果目录名称中存在该字符串,则在展开目录名称模式后将创建子目录。这使得能够在子目录中创建与不同变体流相对应的初始化文件。- hls_flags flags
可能的值:
- ‘single_file’
如果设置了此标志,复用器会将所有片段存储在单个 MPEG-TS 文件中,并将使用播放列表中的字节范围。通过这种方式生成的 HLS 播放列表的版本号将为 4。例如:
ffmpeg -i in.nut -hls_flags single_file out.m3u8
将生成播放列表,输出.m3u8,和一个单独的段文件, 输出.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’
Add the
#EXT-X-INDEPENDENT-SEGMENTS
to playlists that has video segments and when all the segments of that playlist are guaranteed to start with a Key frame.- ‘iframes_only’
Add the
#EXT-X-I-FRAMES-ONLY
to playlists that has video segments and can play only I-frames in the#EXT-X-BYTERANGE
mode.- ‘split_by_time’
Allow segments to start on frames other than keyframes. This improves behavior on some players when the time between keyframes is inconsistent, but may make things worse on others, and can cause some oddities during seeking. This flag should be used with the
hls_time
option.- ‘program_date_time’
Generate
EXT-X-PROGRAM-DATE-TIME
tags.- ‘second_level_segment_index’
Makes it possible to use segment indexes as %%d in hls_segment_filename expression besides date/time values when strftime is on. To get fixed width numbers with trailing zeroes, %%0xd format is available where x is the required width.
- ‘second_level_segment_size’
Makes it possible to use segment sizes (counted in bytes) as %%s in hls_segment_filename expression besides date/time values when strftime is on. To get fixed width numbers with trailing zeroes, %%0xs format is available where x is the required width.
- ‘second_level_segment_duration’
Makes it possible to use segment duration (calculated in microseconds) as %%t in hls_segment_filename expression besides date/time values when strftime is on. To get fixed width numbers with trailing zeroes, %%0xt format is available where x is the required width.
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
This will produce segments like this: segment_20170102194334_0003_00122200_0000003000000.ts, segment_20170102194334_0004_00120072_0000003000000.ts etc.
- ‘temp_file’
Write segment data to filename.tmp and rename to filename only once the segment is complete. A webserver serving up segments can be configured to reject requests to *.tmp to prevent access to in-progress segments before they have been added to the m3u8 playlist. This flag also affects how m3u8 playlist files are created. If this flag is set, all playlist files will written into temporary file and renamed after they are complete, similarly as segments are handled. But playlists with
file
protocol and with type (hls_playlist_type
) other thanvod
are always written into temporary file regardless of this flag. Master playlist files (master_pl_name
), if any, withfile
protocol, are always written into temporary file regardless of this flag ifmaster_pl_publish_rate
value is other than zero.
- hls_playlist_type event
Emit
#EXT-X-PLAYLIST-TYPE:EVENT
in the m3u8 header. Forces hls_list_size to 0; the playlist can only be appended to.- hls_playlist_type vod
Emit
#EXT-X-PLAYLIST-TYPE:VOD
in the m3u8 header. Forces hls_list_size to 0; the playlist must not change.- method
Use the given HTTP method to create the hls files.
ffmpeg -re -i in.ts -f hls -method PUT http://example.com/live/out.m3u8
This example will upload all the mpegts segment files to the HTTP server using the HTTP PUT method, and update the m3u8 files every
refresh
times using the same method. Note that the HTTP server must support the given method for uploading files.- http_user_agent
Override User-Agent field in HTTP header. Applicable only for HTTP output.
- var_stream_map
映射字符串,指定如何将音频、视频和字幕流分组为不同的变体流。变体流组由空格分隔。预期的字符串格式类似于“a:0,v:0 a:1,v:1 ....”。这里a:、v:、s:分别是指定音频、视频、字幕流的按键。允许的值为 0 到 9(仅根据实际用途进行限制)。
当有两个或多个变体流时,输出文件名模式必须包含字符串“%v”,该字符串指定变体流索引在输出媒体播放列表文件名中的位置。字符串“%v”可能出现在文件名中或包含该文件的最后一个目录名中。如果目录名称中存在该字符串,则在展开目录名称模式后将创建子目录。这使得可以在子目录中创建变体流。
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 变体流。第一个变体流将包含比特率 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,name:my_hd v:1,a:1,name:my_sd" \ 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 \ -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
此示例创建三个 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 -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
此示例在子目录中创建变体流。此处,第一个媒体播放列表创建于http://example.com/live/vs_0/out.m3u8第二个位于http://example.com/live/vs_1/out.m3u8。
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”和“aud_high”。
默认情况下,会创建一个包含所有编码流的 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”,并且音频组的默认统计信息为“否”或“是”。
默认情况下,会创建一个包含所有编码流的 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-STREAM-INF 标签之外,还为两个纯音频变体流添加 #EXT-X-MEDIA 标签,并将它们映射到一个纯视频变体流音频组名称为“aud_low”,音频组的默认状态为 NO 或 YES,一个音频语言名为 ENG,另一种音频语言名为 CHN。
默认情况下,会创建一个包含所有编码流的 hls 变体。
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" \ -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
此示例在主播放列表中添加带有 webvtt 字幕组名称“subtitle”的
#EXT-X-MEDIA
标签。TYPE=SUBTITLES
请确保输入文件至少有一个文本字幕流。- cc_stream_map
指定不同隐藏式字幕组及其属性的映射字符串。隐藏式字幕流组由空格分隔。预期的字符串格式类似于“ccgroup:<组名称>,instreamid:<INSTREAM-ID>,语言:<语言代码> ....”。“ccgroup”和“instreamid”是强制属性。“语言”是一个可选属性。通过在字符串中提供相同的“ccgroup”名称,使用此选项配置的隐藏式字幕组将映射到不同的变体流
var_stream_map
。如果var_stream_map
未设置,则第一个可用的 ccgroupcc_stream_map
将映射到输出变体流。下面给出了这两个用例的示例。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
标签 withTYPE=CLOSED-CAPTIONS
,组名称为“cc”,语言为“en”(英语),INSTREAM-ID 为“CC1”。此外,它还CLOSED-CAPTIONS
为输出变体流添加组名称“cc”的属性。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
此示例在主播放列表中为 INSTREAM-ID“CC1”和“CC2”添加两个
#EXT-X-MEDIA
标签。TYPE=CLOSED-CAPTIONS
此外,它还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.18 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.19 image2
图像文件混合器。
图像文件复用器将视频帧写入图像文件。
输出文件名由模式指定,该模式可用于生成按顺序编号的文件系列。该模式可以包含字符串“%d”或“%0 N d”,该字符串指定表示文件名中编号的字符的位置。如果使用“%0 N d”形式,则表示每个文件名中的数字的字符串将用 0 填充为N 位。可以使用字符串“%%”在模式中指定文字字符“%”。
如果模式包含“%d”或“%0 N d”,则指定的文件列表的第一个文件名将包含数字 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, ETC。
图像混合器支持 .YUV 图像文件格式。这种格式的特殊之处在于,每个图像帧由三个文件组成,分别对应 YUV420P 分量。要读取或写入此图像文件格式,请指定“.Y”文件的名称。复用器将根据需要自动打开“.U”和“.V”文件。
21.19.1 选项
- frame_pts
如果设置为 1,则使用 pkt->pts 中的 pts 扩展文件名。默认值为 0。
- start_number
从指定的数字开始序列。默认值为 1。
- update
如果设置为 1,文件名将始终被解释为文件名,而不是模式,并且相应的文件将不断被新图像覆盖。默认值为 0。
- strftime
如果设置为 1,则使用 中的日期和时间信息扩展文件名
strftime()
。默认值为 0。- atomic_writing
将输出写入临时文件,写入完成后该临时文件将重命名为目标文件名。默认为禁用。
- protocol_opts options_list
将协议选项设置为以 : 分隔的 key=value 参数列表。包含特殊字符的值
:
必须进行转义。
21.19.2 示例
以下示例展示了如何用于ffmpeg
创建文件序列img-001.jpeg,img-002.jpeg,...,每秒从输入视频中拍摄一张图像:
ffmpeg -i in.avi -vsync cfr -r 1 -f image2 'img-%03d.jpeg'
请注意ffmpeg
,使用 时,如果未使用选项指定格式
-f
且输出文件名指定图像文件格式,则自动选择 image2 muxer,因此前面的命令可以写为:
ffmpeg -i in.avi -vsync cfr -r 1 'img-%03d.jpeg'
另请注意,该模式不一定包含“%d”或“%0 N d”,例如创建单个图像文件 img.jpeg从输入视频开始,您可以使用以下命令:
ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
这时间选项允许您使用日期和时间信息扩展文件名。检查该函数的文档strftime()
以了解语法。
例如,要从“%Y-%m-%d_%H-%M-%S”模式生成图像文件,可以使用
strftime()
以下命令: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.20 matroska
Matroska 容器混合器。
该复用器实现 matroska 和 webm 容器规范。
21.20.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.20.2 选项
该复用器支持以下选项:
- reserve_index_space
默认情况下,该复用器将用于查找的索引(Matroska 术语中称为提示)写入文件末尾,因为它无法提前知道在文件开头为索引留出多少空间。然而,对于某些用例(例如可以进行搜索但速度较慢的流式传输),将索引放在文件的开头很有用。
如果此选项设置为非零值,则复用器将在文件头中保留给定的空间量,然后在复用完成时尝试在其中写入提示。如果保留空间不足,则不会写入任何 Cues,文件将被最终确定,并且写入预告片将返回错误。大多数用例的安全大小应为每小时 50kB 左右的视频。
请注意,仅当输出可查找时才会写入提示,否则此选项将不起作用。
- cues_to_front
如果设置,复用器将在必要时通过移动主数据将索引写入文件的开头。这可以与 Reserve_index_space 结合使用,在这种情况下,只有在最初保留的空间不足时才会移动数据。
如果输出不可查找,则忽略此选项。
- default_mode
此选项控制如何设置输出轨道的 FlagDefault。它影响玩家默认播放的曲目。默认模式是 '直通'。
- ‘infer’
每个具有默认配置的轨道都会设置 FlagDefault。此外,对于每种类型的轨道(音频、视频或字幕),如果不存在具有该类型默认配置的轨道,则该类型的第一个轨道将被标记为默认轨道(如果存在)。这确保了以合理的方式设置默认标志,即使输入源自缺乏默认轨道概念的容器。
- ‘infer_no_subs’
此模式与 infer 相同,只是如果不存在具有默认配置的字幕轨道,则不会将任何字幕轨道标记为默认。
- ‘passthrough’
在此模式下,当且仅当在相应流的处置中设置了 AV_DISPOSITION_DEFAULT 标志时,才会设置 FlagDefault。
- flipped_raw_rgb
如果设置为 true,则存储原始 RGB 位图的正高度,这表示位图是自下而上存储的。请注意,此选项不会翻转位图,必须事先手动完成,例如使用 vflip 滤镜。默认值为false,表示位图自上而下存储。
21.21 md5
MD5测试格式。
这是哈希复用器的一个变体。与该复用器不同,它默认使用 MD5 哈希函数。
21.21.1 示例
计算转换为原始音频和视频的输入的 MD5 哈希值,并将其存储在文件中输出.md5:
ffmpeg -i INPUT -f md5 out.md5
您可以使用以下命令将 MD5 打印到 stdout:
ffmpeg -i INPUT -f md5 -
21.22 mov, mp4, ismv
MOV/MP4/ISMV(平滑流)复用器。
mov/mp4/ismv 复用器支持分段。+faststart
通常,MOV/MP4 文件将所有数据包的所有元数据存储在一个位置(写在文件末尾,可以通过添加到-movflags
或使用该工具将其移动到开头以便更好地播放)qt-faststart
。
分片文件由许多片段组成,其中数据包和有关这些数据包的元数据存储在一起。写入分段文件的优点是,即使写入中断,文件也可解码(而普通 MOV/MP4 如果未正确完成则无法解码),并且在写入很长的文件时需要较少的内存(因为写入普通 MOV /MP4 文件将有关内存中每个数据包的信息存储到文件关闭为止)。缺点是与其他应用程序的兼容性较差。
通过设置定义如何将文件切成片段的选项之一来启用分段:
-frag_duration
、-frag_size
、
-min_frag_duration
和。如果指定了多个条件,则当满足指定条件之一时,片段将被剪切。例外情况是,必须满足任何其他条件才能适用。
-movflags +frag_keyframe
-movflags +frag_custom
-min_frag_duration
21.22.1 选项
- frag_duration duration
创建持续时间为微秒的片段。
- frag_size size
创建包含最多size字节的有效负载数据的片段。
- min_frag_duration duration
不要创建短于持续时间微秒的片段。
- movflags flags
设置各种复用开关。可以使用以下标志:
- ‘frag_keyframe’
在每个视频关键帧处开始一个新片段。
- ‘frag_custom’
允许调用者通过调用使用
av_write_frame(ctx, NULL)
到目前为止写入的数据包来写入片段来手动选择何时剪切片段。(这仅对集成 libavformat 的其他应用程序有用,而不是来自ffmpeg
.)- ‘empty_moov’
直接在文件开头写入初始 moov 原子,而不描述其中的任何样本。通常,mdat/moov 对被写入文件的开头,就像普通的 MOV/MP4 文件一样,仅包含文件的一小部分。设置此选项后,没有初始 mdat 原子,并且 moov 原子仅描述轨道但持续时间为零。
写入 ismv(平滑流)文件时隐式设置此选项。
- ‘separate_moof’
为每个轨道编写一个单独的 moof(电影片段)原子。通常,所有轨道的数据包都写入 moof 原子中(效率稍高),但设置此选项后,复用器会为每个轨道写入一对 moof/mdat,从而更容易分离轨道。
写入 ismv(平滑流)文件时隐式设置此选项。
- ‘skip_sidx’
跳过 sidx 原子的写入。当 sidx Atom 导致的比特率开销较高时,此选项可用于不强制使用 sidx Atom 的情况。当启用 global_sidx 标志时,该选项将被忽略。
- ‘faststart’
运行第二遍,将索引(moov 原子)移动到文件的开头。该操作可能需要一段时间,并且在碎片输出等各种情况下不起作用,因此默认情况下不启用。
- ‘rtphint’
将 RTP 提示轨道添加到输出文件。
- ‘disable_chpl’
Disable Nero chapter markers (chpl atom). Normally, both Nero chapters and a QuickTime chapter track are written to the file. With this option set, only the QuickTime chapter track will be written. Nero chapters can cause failures when the file is reprocessed with certain tagging programs, like mp3Tag 2.61a and iTunes 11.3, most likely other versions are affected as well.
- ‘omit_tfhd_offset’
Do not write any absolute base_data_offset in tfhd atoms. This avoids tying fragments to absolute byte positions in the file/streams.
- ‘default_base_moof’
Similarly to the omit_tfhd_offset, this flag avoids writing the absolute base_data_offset field in tfhd atoms, but does so by using the new default-base-is-moof flag instead. This flag is new from 14496-12:2012. This may make the fragments easier to parse in certain circumstances (avoiding basing track fragment location calculations on the implicit end of the previous track fragment).
- ‘negative_cts_offsets’
Enables utilization of version 1 of the CTTS box, in which the CTS offsets can be negative. This enables the initial sample to have DTS/CTS of zero, and reduces the need for edit lists for some cases such as video tracks with B-frames. Additionally, eases conformance with the DASH-IF interoperability guidelines.
This option is implicitly set when writing ismv (Smooth Streaming) files.
- moov_size bytes
Reserves space for the moov atom at the beginning of the file instead of placing the moov atom at the end. If the space reserved is insufficient, muxing will fail.
- write_tmcd
Specify
on
to force writing a timecode track,off
to disable it andauto
to write a timecode track only for mov and mp4 output (default).- write_btrt bool
Force or disable writing bitrate box inside stsd box of a track. The box contains decoding buffer size (in bytes), maximum bitrate and average bitrate for the track. The box will be skipped if none of these values can be computed. Default is
-1
orauto
, which will write the box only in MP4 mode.- write_prft
Write producer time reference box (PRFT) with a specified time source for the NTP field in the PRFT box. Set value as ‘wallclock’ to specify timesource as wallclock time and ‘pts’ to specify timesource as input packets’ PTS values.
Setting value to ‘pts’ is applicable only for a live encoding use case, where PTS values are set as as wallclock time at the source. For example, an encoding use case with decklink capture source where video_pts and audio_pts are set to ‘abs_wallclock’.
- empty_hdlr_name bool
Enable to skip writing the name inside a
hdlr
box. Default isfalse
.- movie_timescale scale
Set the timescale written in the movie header box (
mvhd
). Range is 1 to INT_MAX. Default is 1000.- video_track_timescale scale
Set the timescale used for video tracks. Range is 0 to INT_MAX. If set to
0
, the timescale is automatically set based on the native stream time base. Default is 0.
21.22.2 Example
Smooth Streaming content can be pushed in real time to a publishing point on IIS with this muxer. Example:
ffmpeg -re <normal input/transcoding options> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
21.23 mp3
MP3 复用器写入具有以下可选功能的原始 MP3 流:
- 开头的 ID3v2 元数据标头(默认启用)。支持版本 2.3 和 2.4,
id3v2_version
私有选项控制使用哪一个(3 或 4)。设置id3v2_version
为 0 会完全禁用 ID3v2 标头。复用器支持将附加图片(APIC 帧)写入 ID3v2 标头。图片以带有单个数据包的视频流的形式提供给复用器。这些流可以有任意数量,每个流对应一个 APIC 帧。流元数据将标题和评论分别标记为 APIC描述和图片类型。请参阅 http://id3.org/id3v2.4.0-frames了解允许的图片类型。
请注意,APIC 帧必须在开始时写入,因此复用器将缓冲音频帧,直到获取所有图片。因此,建议尽快提供图片,以避免过度缓冲。
- ID3v2 标头(如果存在)之后的 Xing/LAME 帧。默认情况下启用它,但仅当输出可查找时才会写入。
write_xing
可以使用 private 选项来禁用它。 该帧包含可能对解码器有用的各种信息,例如音频持续时间或编码器延迟。 - 文件末尾的旧 ID3v1 标记(默认情况下禁用)。它可以通过 private 选项启用
write_id3v1
,但由于其功能非常有限,因此不建议使用。
例子:
编写一个带有 ID3v2.3 header 和 ID3v1 footer 的 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.24 mpegts
MPEG 传输流复用器。
该复用器实施 ISO 13818-1 和 ETSI EN 300 468 的一部分。
mpegts muxer 中可识别的元数据设置为service_provider
和service_name
。如果未设置,则默认为
service_provider
'FFmpeg' 的默认值
service_name
是 '服务01'。
21.24.1 选项
复用器选项有:
- mpegts_transport_stream_id integer
设置 '传输流ID'。这标识了 DVB 中的转发器。默认为
0x0001
.- mpegts_original_network_id integer
设置 '原始网络 ID'。这是 DVB 中网络的唯一标识符。它的主要用途是通过路径'来唯一标识服务Original_Network_ID、Transport_Stream_ID'。默认为
0x0001
.- mpegts_service_id integer
设置 '服务ID',在 DVB 中也称为节目。默认为
0x0001
.- mpegts_service_type integer
设置程序'服务类型'。默认为
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 integer
设置 PMT 的第一个 PID。默认为
0x1000
,最小值为0x0020
,最大值为0x1ffa
。该选项在 PMT PID 固定的 m2ts 模式下无效0x0100
。- mpegts_start_pid integer
设置基本流的第一个 PID。默认为
0x0100
,最小值为0x0020
,最大值为0x1ffa
。此选项在基本流 PID 固定的 m2ts 模式下无效。- mpegts_m2ts_mode boolean
如果设置为 ,则启用 m2ts 模式
1
。默认值是-1
禁用 m2ts 模式。- muxrate integer
设置恒定的复用率。默认为变码率。
- pes_payload_size integer
设置最小 PES 数据包负载(以字节为单位)。默认为
2930
.- mpegts_flags 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 boolean
如果值设置为 ,则保留原始时间戳
1
。默认值为-1
,这会导致时间戳移位,使其从 0 开始。- omit_video_pes_length boolean
省略视频数据包的 PES 数据包长度。默认值为
1
(真)。- pcr_period integer
覆盖默认的 PCR 重传时间(以毫秒为单位)。Default
-1
表示自动确定 PCR 间隔:CBR 流使用 20 ms,VBR 流使用小于 100 ms 的帧持续时间的最高倍数。- pat_period duration
PAT/PMT 表之间的最长时间(以秒为单位)。默认为
0.1
.- sdt_period duration
SDT 表之间的最长时间(以秒为单位)。默认为
0.5
.- nit_period duration
NIT 表之间的最长时间(以秒为单位)。默认为
0.5
.- tables_version integer
设置 PAT、PMT、SDT 和 NIT 版本(默认
0
,有效值为 0 到 31(含))。此选项允许更新流结构,以便标准消费者可以检测到更改。为此,请重新打开输出AVFormatContext
(如果使用 API)或重新启动ffmpeg
实例,循环更改 表版本价值: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.24.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.25 mxf, mxf_d10, mxf_opatom
MXF 复用器。
21.25.1 选项
复用器选项有:
- store_user_comments bool
设置是否应存储用户评论(如果可用)或从不存储。IRT D-10 不允许用户评论。因此,默认情况下是为 mxf 和 mxf_opatom 编写它们,但不为 mxf_d10 编写它们
21.26 null
空复用器。
该复用器不会生成任何输出文件,它主要用于测试或基准测试目的。
例如,要对解码进行基准测试,ffmpeg
您可以使用以下命令:
ffmpeg -benchmark -i INPUT -f null out.null
请注意,上述命令不会读取或写入输出为空
文件,但语法需要指定输出文件ffmpeg
。
或者,您可以将命令编写为:
ffmpeg -benchmark -i INPUT -f null -
21.27 nut
- -syncpoints flags
更改 nut 中同步点的使用:
- default use the normal low-overhead seeking aids.
- none do not use the syncpoints at all, reducing the overhead but making the stream non-seekable;
不建议使用此选项,因为生成的文件对损坏非常敏感并且无法进行查找。一般来说,同步点的开销可以忽略不计。请注意,-0
write_index
可用于禁用所有不断增长的数据表,从而允许使用有限的内存复用无限的流,并且没有这些缺点。- timestamped extend the syncpoint with a wallclock field.
none和timestamped标志是实验性的 。
- -write_index bool
最后写索引,默认是写索引。
ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor
21.28 ogg
Ogg 容器混合器。
- -page_duration duration
首选页面持续时间(以微秒为单位)。复用器将尝试创建大约持续时间微秒长的页面。这允许用户在查找粒度和容器开销之间进行折衷。默认值为 1 秒。值 0 将填充所有段,使页面尽可能大。在大多数情况下,值为 1 将有效地每页使用 1 个数据包,以额外的容器开销为代价提供较小的查找粒度。
- -serial_offset value
用于设置流序列号的序列值。将其设置为不同且足够大的值可确保生成的 ogg 文件可以安全地链接。
21.29 raw muxers
原始复用器接受与指定编解码器匹配的单个流。它们不存储时间戳或元数据。除非另有说明,识别的扩展名与复用器名称相同。
21.29.1 交流3
杜比数字 (Dolby Digital),也称为 AC-3、音频。
21.29.2 广告
CRI 中间件 ADX 音频。
当输出可查找并且计数可以存储在 32 位中时,该复用器将在第一个数据包开头附近写出总样本计数。
21.29.3 aptx
aptX(蓝牙音频处理技术)音频。
21.29.4 aptx_hd
aptX HD(蓝牙音频处理技术)音频。
扩展:aptxhd
21.29.5 AVS2
AVS2-P2/IEEE1857.4 视频。
扩展名: avs, avs2
21.29.6 cavsvideo
中国AVS(音频视频标准)视频。
扩展:cavs
21.29.7 编解码器2raw
编解码器 2 音频。
没有注册扩展名,因此必须提供格式名称,例如使用 ffmpeg CLI 工具-f codec2raw
。
21.29.8数据
数据复用器接受具有任何类型的任何编解码器的单个流。必须使用-map
ffmpeg CLI 工具的选项来选择输入流。
没有注册扩展名,因此必须提供格式名称,例如使用 ffmpeg CLI 工具-f data
。
21.29.9 狄拉克
BBC 狄拉克视频。Dirac Pro 编解码器是一个子集,标准化为 SMPTE VC-2。
扩展名:drc、vc2
21.29.10 dnxhd
狂热的 DNxHD 视频。它被标准化为 SMPTE VC-3。接受 DNxHR 流。
扩展名: dnxhd, dnxhr
2011 年 29 月 21 日
DTS 相干声学 (DCA) 音频。
21.29.12 eac3
杜比数字+ (Dolby Digital Plus),也称为增强型 AC-3 音频。
13 年 21 月 29 日
MPEG-5 基本视频编码 (EVC)/EVC/MPEG-5 第 1 部分 EVC 视频。
扩展:evc
21.29.14 g722
ITU-T G.722 音频。
21.29.15 g723_1
ITU-T G.723.1 音频。
扩展:tco、rco
21.29.16 g726
ITU-T G.726 大端(“左对齐”)音频。
没有注册扩展名,因此必须提供格式名称,例如使用 ffmpeg CLI 工具-f g726
。
21.29.17 g726le
ITU-T G.726 小端(“右对齐”)音频。
没有注册扩展名,因此必须提供格式名称,例如使用 ffmpeg CLI 工具-f g726le
。
21.29.18 GSM
全球移动通信音频系统。
21.29.19 h261
ITU-T H.261 视频。
2020 年 21 月 29 日 263 分
ITU-T H.263 / H.263-1996、H.263+ / H.263-1998 / H.263 版本 2 视频。
21.29.21 h264
ITU-T H.264 / MPEG-4 第 10 部分 AVC 视频。如果比特流处于长度前缀模式,则应将其转换为附件 B 语法。
扩展名:h264、264
22 年 21 月 29 日
ITU-T H.265 / MPEG-H 第 2 部分 HEVC 视频。如果比特流处于长度前缀模式,则应将其转换为附件 B 语法。
扩展名:hevc、h265、265
21.29.23 m4v
MPEG-4 第 2 部分视频。
21.29.24 mjpeg
运动 JPEG 视频。
扩展名:mjpg、mjpeg
21.29.25 MLP
Meridian Lossless Packing,也称为 Packed PCM、音频。
21.29.26 mp2
MPEG-1 音频第二层音频。
扩展名:mp2、m2a、mpa
21.29.27 mpeg1视频
MPEG-1 第 2 部分视频。
扩展名:mpg、mpeg、m1v
21.29.28 mpeg2视频
ITU-T H.262/MPEG-2 第 2 部分视频。
扩展名:m2v
21.29.29 奥布
AV1 低开销开放比特流单元复用器。时间定界符 OBU 将被插入到流的所有时间单元中。
21.29.30 原始视频
原始未压缩视频。
扩展名:yuv、rgb
31 年 29 月 21 日
蓝牙 SIG 低复杂度子带编解码器音频。
扩展名:sbc、msbc
21.29.32 真高清
杜比 TrueHD 音频。
扩展名:thd
21.29.33 VC1
SMPTE 421M / VC-1 视频。
21.30 segment, stream_segment, ssegment
基本流分段器。
该复用器将流输出到许多持续时间几乎固定的单独文件。输出文件名模式可以以类似于image2 的方式设置,或者通过使用strftime
模板(如果时间选项已启用。
stream_segment
是复用器的一个变体,用于写入流输出格式,即不需要全局标头,并且建议用于输出(例如,MPEG 传输流段)。
ssegment
是 的较短别名stream_segment
。
每个片段都以所选参考流的关键帧开始,该关键帧通过参考流选项。
请注意,如果您希望对视频文件进行精确分割,则需要使输入关键帧与分段器期望的精确分割时间相对应,否则分段复用器将使用指定开始后下一个找到的关键帧来开始新分段时间。
分段复用器最适合单个恒定帧速率视频。
(可选)它可以通过设置选项segment_list来生成已创建段的列表。列表类型由 segment_list_type选项指定。段列表中的条目文件名默认设置为相应段文件的基名。
另请参阅hls muxer,它为 HLS 分段提供了更具体的实现。
21.30.1 选项
分段复用器支持以下选项:
- increment_tc 1|0
如果设置为
1
,则在每个片段之间增加时间码 如果选择此选项,则输入需要在第一个视频流中具有时间码。默认值为0
。- reference_stream specifier
设置引用流,由字符串说明符指定。如果说明符设置为
auto
,则自动选择引用。否则它必须是指定参考流的流说明符(请参阅 ffmpeg 手册中的“流说明符”一章)。默认值为auto
。- segment_format format
覆盖内部容器格式,默认情况下通过文件扩展名猜测。
- segment_format_options options_list
使用 : 分隔的 key=value 参数列表设置输出格式选项。包含特殊字符的值
:
必须进行转义。- segment_list name
还生成一个名为name的列表文件。如果未指定,则不会生成列表文件。
- segment_list_flags flags
设置影响段列表生成的标志。
目前它支持以下标志:
- ‘cache’
允许缓存(仅影响 M3U8 列表文件)。
- ‘live’
允许生成实时友好的文件。
- segment_list_size size
更新列表文件,使其包含最多size 的 段。如果为 0,列表文件将包含所有段。默认值为 0。
- segment_list_entry_prefix prefix
在每个条目前面添加前缀。对于生成绝对路径很有用。默认情况下不应用前缀。
- segment_list_type type
选择列表格式。
认可以下值:
- ‘flat’
为创建的段生成一个平面列表,每行一个段。
- ‘csv, ext’
为创建的段生成一个列表,每行一个段,每行匹配格式(逗号分隔值):
segment_filename,segment_start_time,segment_end_time
segment_filename是复用器根据提供的模式生成的输出文件的名称。如果需要,可应用 CSV 转义(根据 RFC4180)。
segment_start_time和segment_end_time指定段的开始和结束时间(以秒为单位)。
后缀为
".csv"
或 的列表文件".ext"
将自动选择此格式。'分机' 已被弃用,取而代之的是 '数据集'。
- ‘ffconcat’
为创建的段生成 ffconcat 文件。可以使用 FFmpeg concat demuxer读取生成的文件。
后缀为
".ffcat"
或 的列表文件".ffconcat"
将自动选择此格式。- ‘m3u8’
生成扩展的 M3U8 文件,版本 3,符合 http://tools.ietf.org/id/draft-pantos-http-live-streaming。
带有后缀的列表文件
".m3u8"
将自动选择此格式。
如果未指定,则从列表文件名后缀猜测类型。
- segment_time time
将分段持续时间设置为time,该值必须是持续时间规范。默认值为“2”。另请参阅 分段次数选项。
请注意,分割可能不准确,除非您在给定时间强制参考流关键帧。请参阅下面的介绍性通知和示例。
- min_seg_duration time
将最小分段持续时间设置为time,该值必须是持续时间规范。这可以防止复用器以低于该值的持续时间结束片段。仅对 有效
segment_time
。默认值为“0”。- segment_atclocktime 1|0
If set to "1" split at regular clock time intervals starting from 00:00 o’clock. The time value specified in segment_time is used for setting the length of the splitting interval.
For example with segment_time set to "900" this makes it possible to create files at 12:00 o’clock, 12:15, 12:30, etc.
Default value is "0".
- segment_clocktime_offset duration
Delay the segment splitting times with the specified duration when using segment_atclocktime.
For example with segment_time set to "900" and segment_clocktime_offset set to "300" this makes it possible to create files at 12:05, 12:20, 12:35, etc.
Default value is "0".
- segment_clocktime_wrap_duration duration
Force the segmenter to only start a new segment if a packet reaches the muxer within the specified duration after the segmenting clock time. This way you can make the segmenter more resilient to backward local time jumps, such as leap seconds or transition to standard time from daylight savings time.
Default is the maximum possible duration which means starting a new segment regardless of the elapsed time since the last clock time.
- segment_time_delta delta
Specify the accuracy time when selecting the start time for a segment, expressed as a duration specification. Default value is "0".
When delta is specified a key-frame will start a new segment if its PTS satisfies the relation:
PTS >= start_time - time_delta
This option is useful when splitting video content, which is always split at GOP boundaries, in case a key frame is found just before the specified split time.
In particular may be used in combination with the ffmpeg option force_key_frames. The key frame times specified by force_key_frames may not be set accurately because of rounding issues, with the consequence that a key frame time may result set just before the specified time. For constant frame rate videos a value of 1/(2*frame_rate) should address the worst case mismatch between the specified time and the time set by force_key_frames.
- segment_times times
Specify a list of split points. times contains a list of comma separated duration specifications, in increasing order. See also the segment_time option.
- segment_frames frames
Specify a list of split video frame numbers. frames contains a list of comma separated integer numbers, in increasing order.
This option specifies to start a new segment whenever a reference stream key frame is found and the sequential number (starting from 0) of the frame is greater or equal to the next value in the list.
- segment_wrap limit
Wrap around segment index once it reaches limit.
- segment_start_number number
Set the sequence number of the first segment. Defaults to
0
.- strftime 1|0
Use the
strftime
function to define the name of the new segments to write. If this is selected, the output segment name must contain astrftime
function template. Default value is0
.- break_non_keyframes 1|0
如果启用,则允许片段在关键帧以外的帧上开始。当关键帧之间的时间不一致时,这会改善某些玩家的行为,但可能会使其他玩家的情况变得更糟,并且可能会在搜索过程中导致一些奇怪的情况。默认为
0
.- reset_timestamps 1|0
在每个段的开头重置时间戳,以便每个段将以接近零的时间戳开始。它的目的是简化生成的片段的播放。可能不适用于某些复用器/编解码器组合。
0
默认 设置为。- initial_offset offset
指定应用于输出数据包时间戳的时间戳偏移。该参数必须是持续时间规范,默认为 0。
- write_empty_segments 1|0
如果启用,如果在段通常跨越的时间段内没有数据包,则写入一个空段。否则,该段将被下一个写入的数据包填充。默认为
0
.
确保在编码时需要封闭的 GOP 并设置 GOP 大小以适合您的片段时间限制。
21.30.2 示例
- 重新混合文件内容MKV到段列表
out-000.nut,输出-001.nut等,并将生成的段列表写入输出列表:
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
强制关键帧 与片段选项一起强制输入中关键帧位于指定位置的选项分段时间增量考虑到设置关键帧时间时可能进行的舍入操作。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
为了在输入文件上强制关键帧,需要进行转码。
- 通过根据指定的帧编号序列分割输入文件来对输入文件进行分段分段帧选项:
ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut
- 转换MKV
libx264
使用和编码器到 TS 段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.31 smoothstreaming
Smooth Streaming muxer 生成一组适合传统 Web 服务器服务的文件(清单、块)。
- window_size
指定清单中保留的片段数量。默认 0(保留全部)。
- extra_window_size
指定从磁盘删除之前保留在清单之外的片段数量。默认 5。
- lookahead_count
指定先行片段的数量。默认 2。
- min_frag_duration
指定最小片段持续时间(以微秒为单位)。默认 5000000。
- remove_at_exit
指定完成后是否删除所有片段。默认 0(不删除)。
21.32 streamhash
每个流哈希测试格式。
该复用器基于每个流计算并打印所有输入帧的加密哈希。这可以用于相等检查,而无需进行完整的二进制比较。
默认情况下,在计算哈希之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频,但也可以使用显式转换为其他编解码器的输出。时间戳被忽略。它默认使用 SHA-256 加密哈希函数,但支持其他几种算法。
复用器的输出由每个流一行组成,格式为: streamindex、streamtype、algo = hash,其中 streamindex是映射流的索引,streamtype是指示流类型的单个字符,algo是表示流的短字符串使用的哈希函数,哈希是表示计算出的哈希值的十六进制数。
- hash algorithm
使用字符串算法指定的加密哈希函数。支持的值包括
MD5
、murmur3
、RIPEMD128
、RIPEMD160
、RIPEMD256
、RIPEMD320
、SHA160
、SHA224
、SHA256
(默认)SHA512/224
、SHA512/256
、SHA384
、SHA512
、CRC32
和adler32
。
21.32.1 示例
计算转换为原始音频和视频的输入的 SHA-256 哈希值,并将其存储在文件中输出sha256:
ffmpeg -i INPUT -f streamhash out.sha256
要将 MD5 哈希打印到 stdout,请使用以下命令:
ffmpeg -i INPUT -f streamhash -hash md5 -
21.33 tee
tee 复用器可用于将相同的数据写入多个输出,例如文件或流。例如,它可用于通过网络传输视频并同时将其保存到磁盘。
ffmpeg
它与向命令行工具指定多个输出不同。使用 Tee 复用器,音频和视频数据将仅被编码一次。对于传统的多个输出,会启动多个并行编码操作,这可能是一个非常昂贵的过程。直接使用 libavformat API 时,tee 复用器没有用,因为这样可以将相同的数据包直接提供给多个复用器。
由于 tee muxer 不代表任何特定的输出格式,因此 ffmpeg 无法自动选择输出流。因此,所有用于输出的流都必须使用 指定-map
。请参阅下面的示例。
某些编码器可能需要不同的选项,具体取决于输出格式;自动检测不能与 tee muxer 一起使用,因此需要明确指定它们。主要的例子是全局标题旗帜。
从输出在提供给复用器的文件名中指定,并用“|”分隔。如果任何从属名称包含“|” 分隔符、前导空格或尾随空格或任何特殊字符,这些字符必须进行转义(请参阅ffmpeg-utils(1) 手册中的“引用和转义”部分)。
21.33.1 选项
- use_fifo bool
如果设置为 1,从机输出将使用fifo 复用器在单独的线程中进行处理。这允许补偿输出的不同速度/延迟/可靠性并设置透明恢复。默认情况下此功能处于关闭状态。
- fifo_options
传递给 fifo 伪复用器实例的选项。请参阅先进先出。
可以为每个从属设备指定复用器选项,方法是将它们作为 方括号之间用“:”分隔的键=值对列表前置。如果选项值包含特殊字符或“:”分隔符,则必须对它们进行转义;请注意,这是第二级转义。
还认可以下特殊选项:
- f
指定格式名称。如果无法从输出 URL 猜出,则为必需。
- bsfs[/spec]
指定要应用于指定输出的比特流过滤器列表。
通过将流说明符附加到由 分隔的选项,可以指定给定的比特流过滤器适用于哪些流
/
。spec必须是流说明符(请参阅格式流说明符)。如果未指定流说明符,则比特流过滤器将应用于输出中的所有流。如果输出包含无法应用比特流过滤器的流,例如应用于
h264_mp4toannexb
包含音频流的输出,这将导致输出操作失败。比特流过滤器的选项必须以 的形式指定
opt=value
。可以指定多个比特流过滤器,用“,”分隔。
- use_fifo bool
这允许覆盖单个从属复用器的 tee 复用器 use_fifo 选项。
- fifo_options
这允许覆盖单个从属复用器的 tee 复用器 fifo_options。请参阅先进先出。
- select
选择应映射到从属输出的流,由流说明符指定。如果未指定,则默认为所有映射的流。如果输出格式不接受所有映射流,这将导致输出操作失败。
,
您可以使用多个流说明符,以逗号 ( )分隔,例如:a:0,v
- onfail
指定输出失败时的行为。可以将其设置为
abort
(默认)或ignore
。abort
如果该从站输出出现故障,将导致整个过程失败。ignore
将忽略此输出的故障,因此其他输出将继续而不受影响。
21.33.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 格式的要求将额外数据信息添加到所有输出视频关键帧数据包中。选择的选项应用于输出.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.34 webm_chunk
WebM 实时块复用器。
该复用器将 WebM 标头和块写为单独的文件,可供通过 DASH 支持 WebM Live 流的客户端使用。
21.34.1 选项
该复用器支持以下选项:
- chunk_start_index
第一个块的索引(默认为 0)。
- header
将写入初始化数据的标头的文件名。
- audio_chunk_duration
每个音频块的持续时间(以毫秒为单位)(默认为 5000)。
21.34.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.35 webm_dash_manifest
WebM DASH 清单混合器。
该复用器实现 WebM DASH Manifest 规范来生成 DASH 清单 XML。它还支持 DASH 直播流的清单生成。
欲了解更多信息,请参阅:
- WebM DASH 规范:https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specation
- ISO DASH 规范:http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip
21.35.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
第一个块的起始索引。这将进入 '起始编号' 的属性段模板' 清单中的元素。默认值:0。
- chunk_duration_ms
每个块的持续时间(以毫秒为单位)。这将进入 '期间' 的属性段模板' 清单中的元素。默认值:1000。
- utc_timing_url
将返回 ISO 格式的 UTC 时间戳的页面的 URL。这将进入 '价值' 的属性UTC时间' 清单中的元素。默认值:无。
- time_shift_buffer_depth
保证任何表示可用的最小移位缓冲区时间(以秒为单位)。这将进入 '时移缓冲区深度' 的属性MPD' 元素。默认值:60。
- minimum_update_period
清单的最短更新周期(以秒为单位)。这将进入 '最小更新周期' 的属性MPD' 元素。默认值:0。
21.35.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 的文本文件中,然后使用元数据复用器/解复用器将其加载回来。
文件格式如下:
- 文件由一个标头和许多元数据标记组成,这些元数据标记分为多个部分,每个部分占一行。
- 标头是一个 ';FF元数据' 字符串,后跟版本号(现在为 1)。
- 元数据标签的形式为 '键=值'
- 紧随标题之后的是全局元数据
- 在全局元数据之后,可能存在包含每流/每章元数据的部分。
- 节以括号中的大写节名称(即 STREAM 或 CHAPTER)开始('[',']') 并以下一部分或文件结尾结束。
- 在章节部分的开头可能有一个可选的时基用于开始/结束值。它的形式必须是 '时基 = num / den',其中num和den是整数。如果时基丢失,则假定开始/结束时间以纳秒为单位。
接下来,章节部分必须包含章节开始和结束时间,格式为 '开始=数字','结束=数字',其中num是正整数。
- 空行和以 ' 开头的行;' 或者 '#' 被忽略。
- 包含特殊字符('=',';','#','\' 和换行符)必须用反斜杠转义 '\'。
- 请注意元数据中的空格(例如 '富=酒吧') 被认为是标签的一部分(在上面的示例中,键是 '富',值为'酒吧')。
ffmetadata 文件可能如下所示:
;FFMETADATA1 title=bike\\shed ;this is a comment artist=FFmpeg troll team [CHAPTER] TIMEBASE=1/1000 START=0 #chapter ends at 0:01:00 END=60000 title=chapter \#1 [STREAM] title=multi\ line
通过使用 ffmetadata 复用器和解复用器,可以将元数据从输入文件提取到 ffmetadata 文件,然后使用编辑后的 ffmetadata 文件将文件转码为输出文件。
提取 ffmetadata 文件ffmpeg如下:
ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
从 FFMETADATAFILE 文件重新插入已编辑的元数据信息可以通过以下方式完成:
ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT
23 协议选项
libavformat 库提供了一些通用的全局选项,可以在所有协议上进行设置。此外,每个协议都可以支持所谓的私有选项,这些选项特定于该组件。
可以通过在 FFmpeg 工具中
指定 -选项 值AVFormatContext
来设置选项,或者通过在选项中显式设置值或使用libavutil/opt.h用于编程使用的 API。
支持的选项列表如下:
- protocol_whitelist list (input)
设置以“,”分隔的允许协议列表。“ALL”匹配所有协议。以“-”为前缀的协议被禁用。默认情况下允许所有协议,但另一个协议(嵌套协议)使用的协议仅限于每个协议子集。
24 协议
协议是 FFmpeg 中的配置元素,可以访问需要特定协议的资源。
当您配置 FFmpeg 构建时,默认情况下会启用所有支持的协议。您可以使用配置选项“–list-protocols”列出所有可用的协议。
您可以使用配置选项“–disable-protocols”禁用所有协议,并使用选项“–enable-protocol= PROTOCOL ”有选择地启用协议,或者您可以使用选项“–disable-protocol=”禁用特定协议协议”。
ff* 工具的选项“-protocols”将显示支持的协议列表。
所有协议都接受以下选项:
- rw_timeout
等待(网络)读/写操作完成的最长时间(以微秒为单位)。
下面是当前可用协议的描述。
24.1 amqp
高级消息队列协议 (AMQP) 版本 0-9-1 是基于代理的发布-订阅通信协议。
FFmpeg 必须使用 –enable-librabbitmq 进行编译才能支持 AMQP。还必须运行单独的 AMQP 代理。RabbitMQ 是开源 AMQP 代理的一个示例。
启动代理后,FFmpeg 客户端可以使用以下命令将数据流式传输到代理:
ffmpeg -re -i input -f mpegts amqp://[[user]:[password]@]hostname[:port][/vhost]
其中主机名和端口(默认为 5672)是代理的地址。客户端还可以设置用于身份验证的用户/密码。这两个字段的默认值都是“guest”。代理上的虚拟主机名称可以使用 vhost 设置。默认值为“/”。
多个订阅者可以使用以下命令从代理进行流式传输:
ffplay amqp://[[user]:[password]@]hostname[:port][/vhost]
在 RabbitMQ 中,发布到代理的所有数据都流经特定的交换器,并且每个订阅客户端都有一个分配的队列/缓冲区。当数据包到达交换机时,根据交换机和routing_key字段,它可能会被复制到客户端的队列。
支持以下选项:
- exchange
设置在经纪商上使用的交易所。RabbitMQ有几个预定义的交换器:“amq.direct”是默认的交换器,其中发布者和订阅者必须有匹配的routing_key;“amq.fanout”与广播操作相同(即数据被转发到独立于routing_key的fanout交换机上的所有队列);“amq.topic”与“amq.direct”类似,但允许更复杂的模式匹配(请参阅 RabbitMQ 文档)。
- routing_key
设置路由键。默认值为“amqp”。路由密钥用于“amq.direct”和“amq.topic”交换来决定数据包是否写入订阅者的队列。
- pkt_size
发送/接收到代理的每个数据包的最大大小。默认值为 131072。最小值为 4096,最大值为任何大值(由 int 表示)。当接收数据包时,这会在 FFmpeg 中设置内部缓冲区大小。它应该等于或大于向代理发布的数据包的大小。否则,接收到的消息可能会被截断,从而导致解码错误。
- connection_timeout
与代理的初始连接期间的超时(以秒为单位)。默认值为 rw_timeout,如果未设置 rw_timeout,则为 5 秒。
- delivery_mode 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 读取最长的播放列表:
bluray:/mnt/bluray
从安装到 /mnt/bluray 的 BluRay 读取播放列表 4 的角度 2,从第 2 章开始:
-playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray
24.4 cache
输入流的缓存包装器。
将输入流缓存到临时文件。它为直播带来了搜索功能。
接受的选项是:
- read_ahead_limit
不支持搜索时可以预读的字节数。范围是 -1 到 INT_MAX。-1 表示无限制。默认值为 65536。
网址语法是
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在文件中以单独的行列出分割.txt使用ffplay
命令:
ffplay concatf:split.txt
在哪里分割.txt包含行:
split1.mpeg split2.mpeg split3.mpeg
24.7 crypto
AES 加密的流读取协议。
接受的选项是:
- key
根据给定的十六进制表示设置 AES 解密密钥二进制块。
- iv
根据给定的十六进制表示设置 AES 解密初始化向量二进制块。
接受的 URL 格式:
crypto:URL crypto+URL
24.8 data
URI 中内嵌的数据。请参阅http://en.wikipedia.org/wiki/Data_URI_scheme。
例如,要转换内联给定的 GIF 文件ffmpeg
:
ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png
24.9 fd
文件描述符访问协议。
可接受的语法是:
fd: -fd file_descriptor
如果FD未指定时,默认使用 stdout 文件描述符进行写入,使用 stdin 进行读取。与管道协议不同,fd 协议如果对应的是常规文件,则支持 Seek。为了安全起见,fd 协议不支持通过 URL 传递文件描述符。
该协议接受以下选项:
- blocksize
设置 I/O 操作最大块大小(以字节为单位)。默认值为
INT_MAX
,这将导致不限制请求的块大小。将此值设置得相当低可以缩短用户终止请求的反应时间,如果数据传输速度较慢,则这一点很有价值。- fd
设置文件描述符。
24.10 file
文件访问协议。
读取或写入文件。
文件 URL 可以采用以下形式:
file:filename
其中filename是要读取的文件的路径。
没有协议前缀的 URL 将被假定为文件 URL。根据构建的不同,看起来像 Windows 路径(开头带有驱动器盘符)的 URL 也将被假定为文件 URL(在类 UNIX 系统的构建中通常不是这种情况)。
例如从文件中读取输入.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 匿名密码如果没有设置用户。
- ftp-anonymous-password
以匿名用户身份登录时使用的密码。通常应使用电子邮件地址。
- ftp-write-seekable
控制编码期间连接的可查找性。如果设置为 1,则资源应该是可查找的,如果设置为 0,则假定资源不可查找。默认值为 0。
注意:协议可以用作输出,但建议不要这样做,除非特别小心(测试、定制服务器配置等)。不同的 FTP 服务器在查找操作期间的行为方式不同。由于服务器限制,ff* 工具可能会生成不完整的内容。
24.12 gopher
地鼠协议。
24.13 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。
- content_type
为 POST 消息或侦听模式设置特定的内容类型。
- http_proxy
设置 HTTP 代理通过隧道,例如 http://example.com:1234
- headers
设置自定义 HTTP 标头,可以覆盖内置的默认标头。该值必须是编码标头的字符串。
- multiple_requests
如果设置为 1,则使用持久连接,默认值为 0。
- post_data
设置自定义 HTTP 发布数据。
- referer
设置 Referer 标头。在 HTTP 请求中包含“Referer: URL”标头。
- user_agent
覆盖 User-Agent 标头。如果未指定,协议将使用描述 libavformat 构建的字符串。(“Lavf/<版本>”)
- reconnect_at_eof
如果设置,则 eof 被视为错误并导致重新连接,这对于实时/无限流很有用。
- reconnect_streamed
如果设置,则即使是流式传输/不可查找的流也将在出现错误时重新连接。
- reconnect_on_network_error
如果连接期间出现 TCP/TLS 错误,则会自动重新连接。
- reconnect_on_http_error
要重新连接的 HTTP 状态代码的逗号分隔列表。该列表可以包括特定的状态代码(例如“503”)或字符串“4xx”/“5xx”。
- reconnect_delay_max
设置放弃重新连接的最大延迟(以秒为单位)
- mime_type
导出 MIME 类型。
- http_version
导出 HTTP 响应版本号。通常为“1.0”或“1.1”。
- icy
如果设置为 1,则从服务器请求 ICY (SHOUTcast) 元数据。如果服务器支持此功能,则应用程序必须通过读取元数据来检索元数据icy_metadata_headers和冰冷元数据包选项。默认值为 1。
- icy_metadata_headers
如果服务器支持 ICY 元数据,则它包含 ICY 特定的 HTTP 回复标头,并以换行符分隔。
- icy_metadata_packet
如果服务器支持 ICY 元数据,并且冰冷的设置为 1,这包含服务器发送的最后一个非空元数据包。对中流元数据更新感兴趣的应用程序应该定期对其进行轮询。
- cookies
设置要在将来的请求中发送的 cookie。每个 cookie 的格式与 Set-Cookie HTTP 响应字段的值相同。多个 cookie 可以由换行符分隔。
- offset
设置初始字节偏移量。
- end_offset
尝试将请求限制为此偏移量之前的字节。
- method
当用作客户端选项时,它设置请求的 HTTP 方法。
当用作服务器选项时,它设置客户端期望的 HTTP 方法。如果预期的 HTTP 方法与接收到的 HTTP 方法不匹配,客户端将收到错误请求响应。取消设置后,暂时不会检查 HTTP 方法。将来这将被自动检测所取代。
- listen
如果设置为 1,则启用实验性 HTTP 服务器。当用作输出选项时,这可用于发送数据;当用作输入选项时,它可用于通过 HTTP POST 从客户端读取数据。如果设置为 2,则启用实验性多客户端 HTTP 服务器。这尚未在 ffmpeg.c 中实现,因此不能用作命令行选项。
# Server side (sending): ffmpeg -i somefile.ogg -c copy -listen 1 -f ogg http://server:port # Client side (receiving): ffmpeg -i http://server:port -c copy somefile.ogg # Client can also be done with wget: wget http://server:port -O somefile.ogg # Server side (receiving): ffmpeg -listen 1 -i http://server:port -c copy somefile.ogg # Client side (sending): ffmpeg -i somefile.ogg -chunked_post 0 -c copy -f ogg http://server:port # Client can also be done with wget: wget --post-file=somefile.ogg http://server:port
- send_expect_100
为 POST 发送 Expect: 100-continue 标头。如果设置为 1,它将发送,如果设置为 0,则不会,如果设置为 -1,如果适用,它将尝试发送。默认值为-1。
- auth_type
-
设置HTTP认证类型。没有 Digest 选项,因为此方法需要首先从服务器获取随机数参数,并且不能像 Basic 那样立即使用。
- none
自动选择 HTTP 身份验证类型。这是默认设置。
- basic
-
选择 HTTP 基本身份验证。
基本身份验证发送 Base64 编码的字符串,其中包含客户端的用户名和密码。Base64 不是一种加密形式,应被视为与以明文形式发送用户名和密码相同(Base64 是一种可逆编码)。如果需要保护资源,请强烈考虑使用基本身份验证之外的身份验证方案。HTTPS/TLS 应与基本身份验证一起使用。如果没有这些额外的安全增强功能,则不应使用基本身份验证来保护敏感或有价值的信息。
24.15.1 HTTP Cookie
除非随请求传入 cookie 值,否则某些 HTTP 请求将被拒绝。这饼干选项允许指定这些 cookie。至少,每个 cookie 必须指定一个值以及路径和域。同时匹配域和路径的 HTTP 请求将自动在 HTTP Cookie 标头字段中包含 cookie 值。多个 cookie 可以用换行符分隔。
播放指定 cookie 的流所需的语法是:
ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8
24.16 Icecast
Icecast 协议(流到 Icecast 服务器)
该协议接受以下选项:
- ice_genre
设置流类型。
- ice_name
设置流名称。
- ice_description
设置流描述。
- ice_url
设置流网站 URL。
- ice_public
设置流是否应该公开。默认值为 0(不公开)。
- user_agent
覆盖 User-Agent 标头。如果未指定,将使用“Lavf/<version>”形式的字符串。
- password
设置 Icecast 安装点密码。
- content_type
设置流内容类型。如果与audio/mpeg 不同,则必须设置此项。
- legacy_icecast
这可以支持 Icecast 版本 < 2.4.0,该版本不支持 HTTP PUT 方法,但支持 SOURCE 方法。
- tls
建立与 Icecast 的 TLS (HTTPS) 连接。
icecast://[username[:password]@]server:port/mountpoint
24.17 ipfs
星际文件系统 (IPFS) 协议支持。人们可以通过所谓的网关访问存储在 IPFS 网络上的文件。这些是 http(s) 端点。该协议包装了要发送到此类网关的 IPFS 本机协议(ipfs:// 和 ipns://)。用户可以(并且应该)托管自己的节点,这意味着该协议将使用本地网关来访问 IPFS 网络上的文件。
该协议接受以下选项:
- gateway
定义要使用的网关。如果未设置,协议将首先尝试按顺序 查看
$IPFS_GATEWAY
、$IPFS_PATH
和来定位本地网关。$HOME/.ipfs/
可以通过两种方式使用该协议。使用IPFS:
ffplay ipfs://<hash>
或者 IPNS 协议(IPNS 是可变的 IPFS):
ffplay ipns://<hash>
24.18 mmst
基于 TCP 的 MMS(Microsoft 媒体服务器)协议。
24.19 mmsh
基于 HTTP 的 MMS(Microsoft 媒体服务器)协议。
所需的语法是:
mmsh://server[:port][/app][/playpath]
24.20 md5
MD5输出协议。
计算要写入的数据的 MD5 哈希值,并在关闭时将其写入指定的输出或标准输出(如果未指定)。它可用于测试复用器而无需编写实际文件。
下面是一些例子。
# Write the MD5 hash of the encoded AVI file to the file output.avi.md5. ffmpeg -i input.flv -f avi -y md5:output.avi.md5 # Write the MD5 hash of the encoded AVI file to stdout. ffmpeg -i input.flv -f avi -y md5:
请注意,某些格式(通常是 MOV)要求输出协议可查找,因此它们将无法使用 MD5 输出协议。
24.21 pipe
UNIX 管道访问协议。
从 UNIX 管道读取和写入。
可接受的语法是:
pipe:[number]
如果FD未指定,number是与管道的文件描述符对应的数字(例如,0 表示stdin,1 表示stdout,2 表示stderr)。如果未指定number ,则默认情况下将使用 stdout 文件描述符进行写入,使用 stdin 进行读取。
例如,使用以下命令从标准输入读取ffmpeg
:
cat test.wav | ffmpeg -i pipe:0 # ...this is the same as... cat test.wav | ffmpeg -i pipe:
用于写入标准输出ffmpeg
:
ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi # ...this is the same as... ffmpeg -i test.wav -f avi pipe: | cat > test.avi
该协议接受以下选项:
- blocksize
设置 I/O 操作最大块大小(以字节为单位)。默认值为
INT_MAX
,这将导致不限制请求的块大小。将此值设置得相当低可以缩短用户终止请求的反应时间,如果数据传输速度较慢,则这一点很有价值。- fd
设置文件描述符。
请注意,某些格式(通常是 MOV)要求输出协议可查找,因此它们将因管道输出协议而失败。
24.22 prompeg
Pro-MPEG 实践守则 #3 第 2 版 FEC 协议。
Pro-MPEG CoP#3 FEC 是一种 2D 奇偶校验前向纠错机制,适用于通过 RTP 发送的 MPEG-2 传输流。
rtp_mpegts
该协议必须与复用器和协议一起使用rtp
。
所需的语法是:
-f rtp_mpegts -fec prompeg=option=val... rtp://hostname:port
目标 UDP 端口用于port + 2
列 FEC 流和port + 4
行 FEC 流。
该协议接受以下选项:
- l=n
列数(4-20,LxD <= 100)
- d=n
行数(4-20,LxD <= 100)
用法示例:
-f rtp_mpegts -fec prompeg=l=8:d=4 rtp://hostname:port
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[:port][/app][/instance][/playpath]
接受的参数是:
- username
可选的用户名(主要用于发布)。
- password
可选密码(主要用于发布)。
- server
RTMP 服务器的地址。
- port
要使用的 TCP 端口号(默认为 1935)。
- app
它是要访问的应用程序的名称。通常对应RTMP服务器上应用程序安装的路径(例如/一经请求/,/快闪/直播/, ETC。)。您也可以通过该选项覆盖从 URI 解析的值
rtmp_app
。- playpath
它是参考app中指定的应用程序播放的资源的路径或名称,可以以“mp4:”为前缀。您也可以通过该选项覆盖从 URI 解析的值
rtmp_playpath
。- listen
充当服务器,侦听传入连接。
- timeout
等待传入连接的最长时间。表示听。
AVOption
此外,可以通过命令行选项(或通过s 在代码中)
设置以下参数:
- 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 表示 null,后跟一个冒号。对于布尔值,数据必须分别为 0 或 1(表示 FALSE 或 TRUE)。同样,对于对象,数据必须分别为 0 或 1 来结束或开始对象。子对象中的数据项可以通过在类型前加上“N”前缀并在值之前指定名称来命名(即NB:myFlag:1
)。该选项可以多次使用来构造任意 AMF 序列。- rtmp_enhanced_codecs
指定客户端在增强型 RTMP 流中通告支持的编解码器列表。此选项应设置为以逗号分隔的 fourcc 值列表,例如
hvc1,av01,vp09
对于多个编解码器或hvc1
仅对于一个编解码器。指定的列表将显示在连接命令消息的“fourCcLive”属性中。- rtmp_flashver
用于运行 SWF 播放器的 Flash 插件的版本。默认值为 LNX 9,0,124,2。(发布时,默认为 FMLE/3.0(兼容;<libavformat 版本>)。)
- rtmp_flush_interval
同一请求中刷新的数据包数量(仅限 RTMPT)。默认值为 10。
- rtmp_live
指定媒体是直播流。无法在直播流中进行恢复或搜索。默认值为
any
,表示订阅者首先尝试播放播放路径中指定的直播流。如果未找到该名称的直播流,则会播放录制的流。其他可能的值是live
和recorded
。- rtmp_pageurl
嵌入媒体的网页的 URL。默认情况下不会发送任何值。
- rtmp_playpath
要播放或发布的流标识符。此选项会覆盖 URI 中指定的参数。
- rtmp_subscribe
要订阅的直播流的名称。默认情况下不会发送任何值。仅当指定了该选项或 rtmp_live 设置为 live 时才会发送它。
- rtmp_swfhash
解压缩的 SWF 文件的 SHA256 哈希值(32 字节)。
- rtmp_swfsize
SWFVerification 所需的解压缩 SWF 文件的大小。
- rtmp_swfurl
媒体的 SWF 播放器的 URL。默认情况下不会发送任何值。
- rtmp_swfverify
播放器 swf 文件的 URL,自动计算哈希/大小。
- rtmp_tcurl
目标流的 URL。默认为 proto://host[:port]/app。
- tcp_nodelay=1|0
设置 TCP_NODELAY 以禁用 Nagle 算法。默认值为 0。
备注:目前尚未对写入套接字进行优化,以最大限度地减少系统调用并降低 TCP_NODELAY 的效率/效果。
ffplay
例如,要从 RTMP 服务器“myserver”的应用程序“vod”
读取名为“sample”的多媒体资源:
ffplay rtmp://myserver/vod/sample
要发布到受密码保护的服务器,请分别传递播放路径和应用程序名称:
ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/
24.25 rtmpe
加密的实时消息传递协议。
加密实时消息协议 (RTMPE) 用于在标准加密原语内流式传输多媒体内容,由 Diffie-Hellman 密钥交换和 HMACSHA256 组成,生成一对 RC4 密钥。
24.26 rtmps
通过安全 SSL 连接的实时消息传递协议。
实时消息协议 (RTMPS) 用于通过加密连接传输多媒体内容。
24.27 rtmpt
通过 HTTP 建立隧道的实时消息传递协议。
通过 HTTP 隧道传输的实时消息协议 (RTMPT) 用于在 HTTP 请求中传输多媒体内容以穿越防火墙。
24.28 rtmpte
通过 HTTP 传输的加密实时消息传递协议。
通过 HTTP 隧道传输的加密实时消息协议 (RTMPTE) 用于在 HTTP 请求中传输多媒体内容以穿越防火墙。
24.29 rtmpts
通过 HTTPS 传输的实时消息传递协议。
通过 HTTPS (RTMPTS) 建立隧道的实时消息传递协议用于在 HTTPS 请求中传输多媒体内容以穿越防火墙。
24.30 libsmbclient
libsmbclient 允许操作 CIFS/SMB 网络资源。
需要以下语法。
smb://[[domain:]user[:password@]]server[/share[/path[/file]]]
该协议接受以下选项。
- timeout
设置底层低级操作使用的套接字 I/O 操作的超时(以毫秒为单位)。默认设置为-1,表示不指定超时时间。
- truncate
如果设置为 1,则在写入时截断现有文件。值为 0 可防止截断。默认值为 1。
- workgroup
设置用于建立连接的工作组。默认情况下不指定工作组。
欲了解更多信息,请参阅:http://www.samba.org/。
24.31 libssh
通过 libssh 的安全文件传输协议
使用 SFTP 协议读取或写入远程资源。
需要以下语法。
sftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
该协议接受以下选项。
- timeout
设置底层低级操作使用的套接字 I/O 操作的超时。默认设置为-1,表示不指定超时时间。
- truncate
如果设置为 1,则在写入时截断现有文件。值为 0 可防止截断。默认值为 1。
- private_key
指定包含授权期间要使用的私钥的文件的路径。默认情况下,libssh 在以下位置搜索密钥〜/.ssh/目录。
示例:播放远程服务器上存储的文件。
ffplay sftp://user:password@server_address:22/home/user/resource.mpeg
24.32 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte
通过 librtmp 支持的实时消息协议及其变体。
需要在配置过程中存在 librtmp 标头和库。您需要使用“–enable-librtmp”显式配置构建。如果启用,这将取代本机 RTMP 协议。
该协议提供支持 RTMP、HTTP 中隧道传输的 RTMP (RTMPT)、加密 RTMP (RTMPE)、基于 SSL/TLS 的 RTMP (RTMPS) 以及这些加密类型的隧道变体(RTMPTE、RTMPTS)所需的大多数客户端功能和一些服务器功能。
所需的语法是:
rtmp_proto://server[:port][/app][/playpath] options
其中rtmp_proto是与每个 RTMP 变体对应的字符串“rtmp”、“rtmpt”、“rtmpe”、“rtmps”、“rtmpte”、“rtmpts”之一,并且 server 、 port 、 app 和playpath具有与指定相同的含义RTMP 原生协议。 options包含以空格分隔的选项列表,其形式为 key = val。
有关更多信息,请参阅 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://主机名[:端口][? 选项=值...]
port指定要使用的 RTP 端口。
支持以下 URL 选项:
- ttl=n
设置 TTL(生存时间)值(仅适用于多播)。
- rtcpport=n
将远程 RTCP 端口设置为n。
- localrtpport=n
将本地 RTP 端口设置为n。
- localrtcpport=n'
将本地 RTCP 端口设置为n。
- pkt_size=n
将最大数据包大小(以字节为单位)设置为n。
- buffer_size=size
设置最大 UDP 套接字缓冲区大小(以字节为单位)。
- connect=0|1
connect()
在 UDP 套接字上 执行 a (如果设置为 1)或不执行(如果设置为 0)。- sources=ip[,ip]
列出允许的源 IP 地址。
- block=ip[,ip]
列出不允许(阻止)的源 IP 地址。
- write_to_source=0|1
将数据包发送到最新收到的数据包的源地址(如果设置为 1)或默认远程地址(如果设置为 0)。
- localport=n
将本地 RTP 端口设置为n。
- localaddr=addr
用于发送数据包或加入组播组的网络接口的本地IP地址。
- timeout=n
将套接字 I/O 操作的超时(以微秒为单位)设置为n。
这是一个已弃用的选项。反而,本地rtp端口应该使用。
重要笔记:
- 如果rtcp端口未设置 RTCP 端口将设置为 RTP 端口值加 1。
- 如果本地rtp端口(本地 RTP 端口)未设置任何可用端口将用于本地 RTP 和 RTCP 端口。
- 如果本地rtcp端口(本地 RTCP 端口)未设置,它将设置为本地 RTP 端口值加 1。
24.34 rtsp
实时流协议。
从技术上讲,RTSP 并不是 libavformat 中的协议处理程序,它是一个解复用器和复用器。该解复用器支持普通 RTSP(通过 RTP 传输数据;Apple 和 Microsoft 等公司使用此功能)和 Real-RTSP(通过 RDT 传输数据)。
复用器可用于使用 RTSP ANNOUNCE 将流发送到支持它的服务器(当前是 Darwin Streaming Server 和 Mischa Spiegelmock 的 RTSP 服务器)。
RTSP url 所需的语法是:
rtsp://hostname[:port]/path
ffmpeg
选项可以在/命令行上设置,也可以通过s 或 in
ffplay
在代码中设置。
AVOption
avformat_open_input
24.34.1 复用器
支持以下选项。
- rtsp_transport
设置 RTSP 传输协议。
它接受以下值:
- ‘udp’
使用UDP作为底层传输协议。
- ‘tcp’
使用 TCP(RTSP 控制通道内交织)作为较低层传输协议。
默认值为 '0'。
- rtsp_flags
设置 RTSP 标志。
接受以下值:
- ‘latm’
对于 AAC,使用 MP4A-LATM 打包而不是 MPEG4-GENERIC。
- ‘rfc2190’
对于 H.263,使用 RFC 2190 打包而不是 RFC 4629。
- ‘skip_rtcp’
不发送 RTCP 发送方报告。
- ‘h264_mode0’
在 RTP 中对 H.264 使用模式 0。
- ‘send_bye’
完成后发送 RTCP BYE 数据包。
默认值为 '0'。
- min_port
设置最小本地 UDP 端口。默认值为 5000。
- max_port
设置最大本地 UDP 端口。默认值为 65000。
- buffer_size
设置最大套接字缓冲区大小(以字节为单位)。
- pkt_size
设置最大发送数据包大小(以字节为单位)。默认值为 1472。
24.34.2 解复用器
支持以下选项。
- initial_pause
如果设置为 1,则不立即开始播放流。默认值为 0。
- rtsp_transport
设置 RTSP 传输协议。
它接受以下值:
- ‘udp’
使用UDP作为底层传输协议。
- ‘tcp’
使用 TCP(RTSP 控制通道内交织)作为较低层传输协议。
- ‘udp_multicast’
使用UDP多播作为底层传输协议。
- ‘http’
使用 HTTP 隧道作为较低层传输协议,这对于传递代理很有用。
- ‘https’
使用 HTTPs 隧道作为较低层传输协议,这对于传递代理很有用,并且出于安全考虑而广泛使用。
可以指定多个较低层的传输协议,在这种情况下,一次尝试一个(如果一个协议的设置失败,则尝试下一个)。对于复用器,只有 'TCP协议' 和 'UDP协议' 支持选项。
- rtsp_flags
设置 RTSP 标志。
接受以下值:
- ‘filter_src’
仅接受来自协商的对等地址和端口的数据包。
- ‘listen’
充当服务器,侦听传入连接。
- ‘prefer_tcp’
如果 TCP 可用作 RTSP RTP 传输,请首先尝试使用 TCP 进行 RTP 传输。
- ‘satip_raw’
导出原始 MPEG-TS 流而不是解复用。该标志将简单地写出原始流,原始 PAT/PMT/PID 保持不变。
默认值为 '没有任何'。
- allowed_media_types
设置从服务器接受的媒体类型。
接受以下标志:
- ‘video’
- ‘audio’
- ‘data’
- ‘subtitle’
默认情况下它接受所有媒体类型。
- min_port
设置最小本地 UDP 端口。默认值为 5000。
- max_port
设置最大本地 UDP 端口。默认值为 65000。
- listen_timeout
设置建立初始连接的最大超时(以秒为单位)。环境 监听超时> 0 套rtsp_flags到 '听'。默认值为 -1,这意味着当 '听' 模式已设置。
- reorder_queue_size
设置要缓冲的数据包数量,以处理重新排序的数据包。
- timeout
设置套接字 TCP I/O 超时(以微秒为单位)。
- user_agent
覆盖用户代理标头。如果未指定,则默认为 libavformat 标识符字符串。
- buffer_size
设置最大套接字缓冲区大小(以字节为单位)。
当通过 UDP 接收数据时,解复用器会尝试对接收到的数据包重新排序(因为它们可能会乱序到达,或者数据包可能会完全丢失)。可以通过将最大多路分解延迟设置为零(通过max_delay
AVFormatContext 字段)来禁用此功能。
当使用 观看多比特率 Real-RTSP 流时,可以使用n和
nffplay
分别选择视频和音频要显示的流,并且可以通过按和即时切换。
-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 input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
- 实时接收流:
ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp output
24.35 sap
会话公告协议 (RFC 2974)。从技术上讲,这不是 libavformat 中的协议处理程序,它是一个复用器和解复用器。它用于通过在单独的端口上定期宣布流的 SDP 来发送 RTP 流的信号。
24.35.1 复用器
提供给 muxer 的 SAP URL 的语法是:
sap://destination[:port][?options]
RTP 数据包将发送到端口port上的目标,如果未指定端口,则发送到端口 5004。
options是一个- 分隔的列表。支持以下选项:
&
- announce_addr=address
指定用于发送公告的目标 IP 地址。如果省略,则公告将发送到常用的 SAP 公告多播地址 224.2.127.254 (sap.mcast.net),如果目标是 IPv6 地址,则发送到 ff0e::2:7ffe。
- announce_port=port
指定发送公告的端口,如果未指定,则默认为 9875。
- ttl=ttl
指定公告和 RTP 数据包的生存时间值,默认为 255。
- same_port=0|1
如果设置为 1,则在同一端口对上发送所有 RTP 流。如果为零(默认值),则所有流都在唯一端口上发送,每个流上的端口号比前一个大 2。VLC/Live555 要求将其设置为 1,以便能够接收流。用于接收的 libavformat 中的 RTP 堆栈要求所有流都在唯一端口上发送。
示例命令行如下。
要在本地子网上广播流,以便在 VLC 中观看:
ffmpeg -re -i input -f sap sap://224.0.0.255?same_port=1
同样,对于观看ffplay
:
ffmpeg -re -i input -f sap sap://224.0.0.255
ffplay
通过 IPv6
观看:
ffmpeg -re -i input -f sap sap://[ff0e::1:2:3:4]
24.35.2 多路分配器
提供给解复用器的 SAP URL 的语法是:
sap://[address][:port]
address是用于侦听公告的多播地址,如果省略,则使用默认的 224.2.127.254 (sap.mcast.net)。port 是监听的端口,如果省略则为 9875。
解复用器监听给定地址和端口上的公告。一旦收到通知,它就会尝试接收该特定流。
示例命令行如下。
要回放在普通 SAP 多播地址上宣布的第一个流:
ffplay sap://
要播放在默认 IPv6 SAP 多播地址上宣布的第一个流:
ffplay sap://[ff0e::2:7ffe]
24.36 sctp
流控制传输协议。
接受的 URL 语法是:
sctp://host:port[?options]
该协议接受以下选项:
- listen
如果设置为任何值,则侦听传入连接。默认情况下进行传出连接。
- max_streams
设置最大流数。默认情况下没有设置限制。
24.37 srt
Haivision 通过 libsrt 实现安全可靠传输协议。
SRT URL 支持的语法是:
srt://hostname:port[?options]
options包含以 & 分隔的选项列表,其形式为 key = val。
或者
options srt://hostname:port
options包含“ -key val ”选项列表。
该协议接受以下选项。
- connect_timeout=milliseconds
连接超时; SRT 无法连接 RTT > 1500 毫秒(2 次握手交换),默认连接超时为 3 秒。此选项适用于呼叫者和集合点连接模式。连接超时是为集合模式设置的值的 10 倍(可以用作早期版本此连接问题的解决方法)。
- ffs=bytes
飞行标志大小(窗口大小),以字节为单位。FFS实际上是一个内部参数,您应该将其设置为不小于 接收缓冲区大小和MSS。默认值比较大,因此除非您设置了非常大的接收缓冲区,否则不需要更改此选项。默认值为 25600。
- inputbw=bytes/seconds
发送方标称输入速率,以字节/秒为单位。与一起使用 奥海德, 什么时候最大体重设置为relative(0),计算恢复包随主媒体流发送时的最大发送速率: 输入体重*(100+奥海德) / 100 如果输入体重未设置时最大体重设置为相对 (0),实际输入速率在库内评估。默认值为 0。
- iptos=tos
IP 服务类型。仅适用于发件人。默认值为 0xB8。
- ipttl=ttl
IP 生存时间。仅适用于发件人。默认值为 64。
- latency=microseconds
基于时间戳的数据包传送延迟。用于吸收丢失数据包重传的突发。该标志同时设置重复潜伏期和同等潜伏期 为相同的值。请注意,在版本 1.3.0 之前,这是设置延迟的唯一标志,但这实际上等同于设置同等潜伏期,当一方是发送方并且重复潜伏期 当 side 为接收方时,不支持双向流发送。
- listen_timeout=microseconds
设置套接字监听超时。
- maxbw=bytes/seconds
最大发送带宽,以字节/秒为单位。-1 无限(CSRTCC 限制为 30mbps) 0 相对于输入速率(参见输入体重) >0 绝对极限值 默认值为 0(相对)
- mode=caller|listener|rendezvous
连接方式。 呼叫者打开客户端连接。 听众启动服务器来侦听传入的连接。 会合使用 Rendez-Vous 连接模式。默认值为调用者。
- mss=bytes
最大段大小,以字节为单位。用于使用数据包计数器进行缓冲区分配和速率计算(假定数据包已填满)。使用对等体之间最小的 MSS。整个互联网默认为 1500。这是 UDP 数据包的最大大小,只能减小,除非您有一些不寻常的专用网络设置。默认值为 1500。
- nakreport=1|0
如果设置为 1,接收方将定期发送“UMSG_LOSSREPORT”消息,直到重新传输或故意丢弃丢失的数据包。默认值为 1。
- oheadbw=percents
高于输入速率的恢复带宽开销(以百分比为单位)。看输入体重。默认值为 25%。
- passphrase=string
HaiCrypt 加密/解密密码字符串,长度从 10 到 79 个字符。密码是发送者和接收者之间共享的秘密。它用于使用 PBKDF2(基于密码的密钥派生函数)生成密钥加密密钥。仅当以下情况时才使用PBKeylen是非零的。仅当接收到的数据被加密时,它才在接收器上使用。配置的密码无法恢复(只写)。
- enforced_encryption=1|0
如果为 true,则连接双方必须设置相同的密码(包括空,即不加密)。如果密码不匹配或只有一侧未加密,连接将被拒绝。默认为 true。
- kmrefreshrate=packets
加密密钥切换为新密钥后要传输的数据包数量。默认值为-1。-1 表示自动(srt 库中为 0x1000000)。此选项的范围是 0 - 之间的整数
INT_MAX
。- kmpreannounce=packets
发送新加密密钥与发生切换之间的时间间隔。此值也适用于发生切换和旧加密密钥停用之间的后续时间间隔。默认值为-1。-1 表示自动(srt 库中为 0x1000)。此选项的范围是 0 - 之间的整数
INT_MAX
。- snddropdelay=microseconds
发送方在丢弃数据包之前的额外延迟。该延迟会添加到默认丢弃延迟时间间隔值中。
特殊值-1:根本不丢弃发送方的数据包。
- payload_size=bytes
设置在实时模式下单次调用发送函数期间传输的数据包的最大声明大小。如果不使用此值(文件模式下的默认值),则使用 0。默认值为-1(自动),通常表示 MPEG-TS;如果您要使用 SRT 发送任何不同类型的有效负载,例如将实时流包装在非常小的帧中,那么您可以使用更大的最大帧大小,但不能大于 1456 字节。
- pkt_size=bytes
别名为 '有效负载大小'。
- peerlatency=microseconds
延迟值(如中所述重复潜伏期)由发送方设置为接收方的最小值。
- pbkeylen=bytes
发送方加密密钥长度(以字节为单位)。只能设置为 0、16、24 和 32。如果不为 0,则启用发送方加密。接收方不需要(设置为 0),密钥大小在 HaiCrypt 握手中从发送方获取。默认值为 0。
- rcvlatency=microseconds
从发送数据包的那一刻到将其传递到接收函数中的接收方应用程序的那一刻起应该经过的时间。这个时间应该是一个足够大的缓冲时间,足以覆盖发送所花费的时间、意外延长的RTT时间以及重传丢失的UDP数据包所需的时间。有效延迟值将是该选项值和以下值中的最大值同等潜伏期 由对端设置。在版本 1.3.0 之前,此选项仅可用潜伏。
- recv_buffer_size=bytes
设置UDP接收缓冲区大小,以字节表示。
- send_buffer_size=bytes
设置UDP发送缓冲区大小,以字节为单位表示。
- timeout=microseconds
设置读取、写入和连接操作的引发错误超时。请注意,SRT 库具有可以单独控制的内部超时,此处设置的值只是这些超时的上限。
- tlpktdrop=1|0
太迟的数据包丢失。当在接收器上启用时,它会跳过尚未及时传送的丢失数据包,并在播放时间到来时将以下数据包传送到应用程序。它还向发送方发送一个假 ACK。当在发送方上启用并在接收对等方上启用时,发送方会丢弃无法及时传送的旧数据包。如果接收方支持,它会在发送方自动启用。
- sndbuf=bytes
设置发送缓冲区大小,以字节表示。
- rcvbuf=bytes
设置接收缓冲区大小,以字节为单位表示。
接收缓冲区不得大于FFS。
- lossmaxttl=packets
再订购容差可能增长到的值。当重排序容差 > 0 时,数据包丢失报告将延迟,直到收到该数量的数据包为止。每次“迟来的”数据包到来时,重排序容差都会增加,但这并不是由于重传(即,当 UDP 数据包倾向于乱序),最新序列与该数据包序列之间的差异,并且不超过该选项的值。默认情况下它是0,这意味着该机制被关闭,并且丢失报告总是在序列中遇到“间隙”时立即发送。
- minversion
对等方所需的最低 SRT 版本。与不满足最低版本要求的对等方的连接将被拒绝。
十六进制版本格式为 0xXXYYZZ,表示人类可读形式的 xyz。
- streamid=string
限制为 512 个字符的字符串,可以在连接之前在套接字上设置。侦听器端将能够从 srt_accept 返回的套接字检索此流 ID,并通过具有该设置流 ID 的套接字连接。SRT 不强制对此字符串的内容进行任何特殊解释。此选项在 Rendezvous 连接中没有意义;结果可能只是一侧会覆盖另一侧的值,而哪一方获胜就看运气了
- srt_streamid=string
别名为 '流ID' 以避免与 ffmpeg 命令行选项发生冲突。
- smoother=live|file
用于该套接字传输的 Smoother 类型,负责传输和拥塞控制。连接双方的 Smoother 类型必须完全相同,否则连接将被拒绝。
- messageapi=1|0
设置后,此套接字使用消息 API,否则使用缓冲区 API。请注意,在实时模式下(请参阅转型)只有消息 API 可用。在文件模式下,您可以选择使用以下两种模式之一:
Stream API(默认,当此选项为 false 时)。在此模式下,您可以通过一条发送指令发送任意数量的数据,甚至可以使用直接从文件读取的专用函数。内部设施将负责任何速度和拥堵控制。接收时,也可以接收任意数量的数据,未提取的数据将等待下一次调用。Stream 模式下的数据部分之间没有边界。
消息API。在这种模式下,您的单个发送指令恰好传递一个有边界的数据(一条消息)。与 Live 模式相反,该消息可能跨越多个 UDP 数据包,唯一的大小限制是它应作为一个整体放入发送缓冲区中。接收方应使用尽可能大的缓冲区来接收消息,否则消息将不会被放弃。当消息不完整时(未收到所有数据包或存在数据包丢失),它不会被放弃。
- transtype=live|file
设置套接字的传输类型,特别是,设置此选项会将多个其他参数设置为特定传输类型所需的默认值。
live:设置与实时传输相同的选项。在这种模式下,您应该通过一个发送指令仅发送适合一个 UDP 数据包的数据,并且限制为第一个定义的值有效负载大小(此模式下默认为 1316)。此模式下没有速度控制,只有带宽控制(如果配置),以便不超过开销传输(重传和控制数据包)的带宽。
文件:设置非实时传输的选项。看消息API 进一步解释
- linger=seconds
套接字关闭时等待未发送数据的秒数。默认值为-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://hostname:port[?options]
options包含以 & 分隔的选项列表,其形式为 key = val。
支持的选项列表如下。
- listen=2|1|0
监听传入的连接。0 禁用侦听,1 启用单客户端模式侦听,2 启用多客户端模式侦听。默认值为 0。
- local_addr=addr
用于 tcp 套接字连接的网络接口的本地 IP 地址。
- local_port=port
用于 TCP 套接字连接的本地端口。
- timeout=microseconds
设置引发错误超时,以微秒表示。
此选项仅在读取模式下相关:如果超过此时间间隔没有数据到达,则引发错误。
- listen_timeout=milliseconds
设置监听超时,以毫秒为单位。
- recv_buffer_size=bytes
设置接收缓冲区大小,以字节表示。
- send_buffer_size=bytes
设置发送缓冲区大小,以字节表示。
- tcp_nodelay=1|0
设置 TCP_NODELAY 以禁用 Nagle 算法。默认值为 0。
备注:目前尚未对写入套接字进行优化,以最大限度地减少系统调用并降低 TCP_NODELAY 的效率/效果。
- tcp_mss=bytes
设置传出 TCP 数据包的最大分段大小(以字节为单位)。
以下示例显示如何使用 建立侦听 TCP 连接ffmpeg
,然后使用 访问该连接ffplay
:
ffmpeg -i input -f format tcp://hostname:port?listen ffplay tcp://hostname:port
24.42 tls
传输层安全 (TLS) / 安全套接字层 (SSL)
TLS/SSL url 所需的语法是:
tls://hostname:port[?options]
AVOption
可以通过命令行选项(或通过s 在代码中)
设置以下参数:
- ca_file, cafile=filename
包含被视为可信的证书颁发机构 (CA) 根证书的文件。如果链接的 TLS 库包含默认值,则可能不需要指定该默认值即可进行验证,但并非所有库和设置都内置默认值。该文件必须采用 OpenSSL PEM 格式。
- tls_verify=1|0
如果启用,请尝试验证我们正在通信的对等点。请注意,如果使用 OpenSSL,当前只能确保对等证书由 CA 数据库中的根证书之一签名,但不能验证该证书是否与我们尝试连接的主机名实际匹配。(对于其他后端,主机名也会经过验证。)
默认情况下禁用此功能,因为在许多情况下它需要调用者提供 CA 数据库。
- cert_file, cert=filename
包含在与对等方握手时使用的证书的文件。(当作为服务器在侦听模式下运行时,对等方通常需要这样做,而仅在某些设置中强制要求客户端证书。)
- key_file, key=filename
包含证书私钥的文件。
- listen=1|0
如果启用,则侦听提供的端口上的连接,并在握手中承担服务器角色而不是客户端角色。
- http_proxy
要通过隧道的 HTTP 代理,例如
http://example.com:1234
。代理必须支持 CONNECT 方法。
命令行示例:
创建为输入流提供服务的 TLS/SSL 服务器。
ffmpeg -i input -f format tls://hostname:port?listen&cert=server.crt&key=server.key
要使用以下命令播放来自 TLS/SSL 服务器的流ffplay
:
ffplay tls://hostname:port
24.43 udp
用户数据报协议。
UDP URL 所需的语法是:
udp://hostname:port[?options]
options包含以 & 分隔的选项列表,其形式为key = val。
如果系统上启用了线程,则会使用循环缓冲区来存储传入数据,这可以减少由于 UDP 套接字缓冲区溢出而导致的数据丢失。fifo_size和 overrun_nonfatal选项与此缓冲区相关。
支持的选项列表如下。
- buffer_size=size
设置 UDP 最大套接字缓冲区大小(以字节为单位)。这用于设置接收或发送缓冲区大小,具体取决于套接字的用途。默认输出大小为 32 KB,输入默认大小为 384 KB。另请参见fifo_size。
- bitrate=bitrate
如果设置为非零,如果输入有足够的数据包来维持,输出将具有指定的恒定比特率。
- burst_bits=bits
当使用比特率时,它指定数据包突发中的最大位数。
- localport=port
覆盖要绑定的本地 UDP 端口。
- localaddr=addr
用于发送数据包或加入组播组的网络接口的本地IP地址。
- pkt_size=size
设置 UDP 数据包的大小(以字节为单位)。
- reuse=1|0
明确允许或禁止重用 UDP 套接字。
- ttl=ttl
设置生存时间值(仅适用于多播)。
- connect=1|0
使用 初始化 UDP 套接字
connect()
。在这种情况下,稍后无法使用 ff_udp_set_remote_url 更改目标地址。如果开始时不知道目标地址,也可以在 ff_udp_set_remote_url 中指定此选项。这允许找出具有 getsockname 的数据包的源地址,并且如果收到“目标无法到达”,则使写入返回 AVERROR(ECONNREFUSED)。对于接收而言,这具有仅从指定对等地址/端口接收数据包的优点。- sources=address[,address]
只接收从指定地址发送的数据包。在多播的情况下,还订阅仅来自这些地址的多播流量。
- block=address[,address]
忽略从指定地址发送的数据包。如果是多播,还要排除多播订阅中的源地址。
- fifo_size=units
设置UDP接收循环缓冲区大小,以数据包数量表示,大小为188字节。如果未指定,则默认为 7*4096。
- overrun_nonfatal=1|0
在 UDP 接收循环缓冲区溢出的情况下生存。默认值为 0。
- timeout=microseconds
设置引发错误超时,以微秒表示。
此选项仅在读取模式下相关:如果超过此时间间隔没有数据到达,则引发错误。
- broadcast=1|0
明确允许或禁止 UDP 广播。
请注意,广播可能无法在具有广播风暴保护的网络上正常工作。
24.43.1 示例
- 用于
ffmpeg
通过 UDP 流式传输到远程端点:ffmpeg -i input -f format udp://hostname:port
- 用于
ffmpeg
使用 188 大小的 UDP 数据包通过 UDP 以 mpegts 格式进行流式传输,并使用较大的输入缓冲区:ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535
- 用于
ffmpeg
通过 UDP 从远程端点接收:ffmpeg -i udp://[multicast-address]:port ...
24.44 unix
Unix 本地套接字
Unix 套接字 URL 所需的语法是:
unix://filepath
AVOption
可以通过命令行选项(或通过s 在代码中)
设置以下参数:
- 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 Pub-Sub 模式实现的。服务器端绑定端口并发布数据。客户端连接到服务器(通过 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.h用于编程使用的 API。
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/设备。
例如,要从ffmpeg
卡 ID 为 0 的 ALSA 设备进行捕获,您可以运行以下命令:
ffmpeg -f alsa -i hw:0 alsaout.wav
欲了解更多信息,请参阅: http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html
26.1.1 选项
- sample_rate
设置采样率(以 Hz 为单位)。默认值为 48000。
- channels
设置通道数。默认值为 2。
26.2 android_camera
Android 相机输入设备。
此输入设备使用 Android Camera2 NDK API,该 API 可在 API 级别 24+ 的设备上使用。在配置过程中会自动检测 android_camera 的可用性。
该设备允许从 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 <索引> 和/或 -audio_device_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 bktr
BSD 视频输入设备。
26.4.1 选项
- framerate
设置帧速率。
- video_size
设置视频帧大小。默认为
vga
.- standard
-
可用值为:
- ‘pal’
- ‘ntsc’
- ‘secam’
- ‘paln’
- ‘palm’
- ‘ntscj’
26.5 decklink
DeckLink 输入设备为 Blackmagic DeckLink 设备提供捕获功能。
要启用此输入设备,您需要 Blackmagic DeckLink SDK,并且需要使用适当的--extra-cflags
和进行配置--extra-ldflags
。在 Windows 上,您需要通过widl
.
DeckLink对其支持的格式非常挑剔。输入的像素格式可以设置原始格式。必须根据您的设备确定帧速率和视频大小
-list_formats 1
。音频采样率始终为 48 kHz,通道数可以为 2、8 或 16。请注意,所有音频通道都捆绑在一个音轨中。
26.5.1 选项
- list_devices
如果设置为真的,打印设备列表并退出。默认为错误的。此选项已弃用,请使用
-sources
ffmpeg 的选项列出可用的输入设备。- list_formats
如果设置为真的,打印支持的格式列表并退出。默认为错误的。
- format_code <FourCC>
这会将输入视频格式设置为 FourCC 给出的格式。要查看您的设备支持的值,请使用列表格式。请注意,有一个 FourCC‘朋友’也可以用作朋友(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
如果设置为非零,将从垂直辅助数据中捕获额外的图文电视流。支持标清 PAL (576i) 和高清(1080i 或 1080p)源。如果是高清源,则对 OP47 数据包进行解码。
此选项是捕获的 SD PAL VBI 行(特别是行 6 到 22 以及行 318 到 335)的位掩码。第 6 行是掩码中的 LSB。不包含图文电视信息的选定行将被忽略。您可以使用特殊的全部选择所有可能的行的常量,或者 标准跳过第 6、318 和 319 行,这些行并不与所有接收器兼容。
对于 SD 源,ffmpeg 需要使用
--enable-libzvbi
. 对于高清源,在较旧的(4K 之前)DeckLink 卡型号上,您必须以 10 位模式进行捕捉。- channels
定义要捕获的音频通道数。必须是 '2','8' 或者 '16'。默认为 '2'。
- duplex_mode
设置 Decklink 设备双工/配置文件模式。必须是 '未设置','一半','满的','one_sub_device_full','one_sub_device_half','两个子设备完整','四子设备半' 默认为 '未设置'。
注意:DeckLink SDK 11.0 已将双工属性替换为配置文件属性。对于 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','两个子设备完整','四子设备半'
DeckLink Quad 2 和 DeckLink Duo 2 的有效配置文件模式:'一半','满的'
- timecode_format
要包含在帧和视频流元数据中的时间码类型。必须是 '没有任何','rp188vitc','rp188vitc2','rp188ltc','rp188hfr','rp188any','维生素C','维生素C2', 或者 '连续剧'。默认为 '没有任何' (不包含)。
为了正确支持 50/60 fps 时间码,查询的时间码类型的顺序为 'rp188any' 是 HFR、VITC1、VITC2 和 LTC,适用于 >30 fps 的内容。请注意,这与 DeckLink API 使用的顺序略有不同,即 HFR、VITC1、LTC、VITC2。
- video_input
设置视频输入源。必须是 '未设置','sdi','高清多媒体接口','光纤_SDI','成分','合成的' 或者 '视频'。默认为 '未设置'。
- audio_input
设置音频输入源。必须是 '未设置','嵌入式','aes_ebu','模拟','模拟_xlr','模拟_RCA' 或者 '麦克风'。默认为 '未设置'。
- video_pts
设置视频数据包时间戳源。必须是 '视频','声音的','参考','挂钟' 或者 '绝对挂钟'。默认为 '视频'。
- audio_pts
设置音频数据包时间戳源。必须是 '视频','声音的','参考','挂钟' 或者 '绝对挂钟'。默认为 '声音的'。
- draw_bars
如果设置为 '真的',在信号丢失的情况下绘制彩条。默认为 '真的'。
- queue_size
设置最大输入缓冲区大小(以字节为单位)。如果缓冲达到此值,传入的帧将被丢弃。默认为 '1073741824'。
- audio_depth
设置音频样本位深度。必须是 '16' 或者 '32'。默认为 '16'。
- decklink_copyts
如果设置为真的,时间戳按原样转发,而不删除初始偏移量。默认为错误的。
- timestamp_align
捕获开始时间对齐(以秒为单位)。如果设置为非零,则输入帧将被丢弃,直到系统时间戳与配置值一致。最多可容忍一帧持续时间的对准差异。这对于维护为“N 路”冗余部署的 N 个不同硬件设备之间的输入同步非常有用。在使用此选项之前,应将不同硬件设备的系统时间通过NTP或PTP等协议进行同步。请注意,此方法并非万无一失。在某些边界情况下,由于操作系统中的线程调度抖动,输入同步可能不会发生。同步可能会出现 1 帧错误,或者在极少数情况下会出现错误 时间戳对齐秒。默认为 '0'。
- wait_for_tc (bool)
丢弃帧,直到收到带有时间码的帧。有时,第一个输入帧未接收到串行时间码。如果发生这种情况,存储的流时间码将不准确。如果该选项设置为真的,输入帧将被丢弃,直到接收到带有时间码的帧。必须指定选项timecode_format 。默认为错误的。
- enable_klv(bool)
如果设置为真的,从VANC中提取KLV数据并输出KLV数据包。KLV VANC 数据包根据 MID 和 PSC 字段进行连接并聚合为一个 KLV 数据包。默认为错误的。
26.5.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.6 dshow
Windows DirectShow 输入设备。
当使用 mingw-w64 项目构建 FFmpeg 时,将启用 DirectShow 支持。目前仅支持音频和视频设备。
多个设备可以作为单独的输入打开,但它们也可以在同一输入上打开,这应该提高它们之间的同步性。
输入名称应采用以下格式:
TYPE=NAME[:TYPE=NAME]
其中TYPE可以是audio或video,NAME是设备的名称或备用名称。
26.6.1 选项
如果未指定选项,则使用设备的默认值。如果设备不支持请求的选项,则将无法打开。
- video_size
设置捕获视频中的视频大小。
- framerate
设置捕获视频的帧速率。
- sample_rate
设置捕获音频的采样率(以 Hz 为单位)。
- sample_size
设置捕获的音频的样本大小(以位为单位)。
- channels
设置捕获的音频中的通道数。
- list_devices
如果设置为真的,打印设备列表并退出。
- list_options
如果设置为真的,打印所选设备的选项列表并退出。
- 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
如果设置为真的,在捕获开始之前,向最终用户弹出一个显示对话框,允许他们手动更改视频滤镜属性和配置。请注意,对于交叉开关设备,有时可能需要调整此对话框中的值以在 PAL (25 fps) 和 NTSC (29.97) 输入帧速率、大小、隔行扫描等之间切换。更改这些值可以启用不同的扫描速率/帧速率并避免底部的绿条、闪烁的扫描线等。请注意,对于某些设备,更改这些属性也会影响将来的调用(设置新的默认值),直到系统重新启动为止。
- show_audio_device_dialog
如果设置为真的,在捕获开始之前,向最终用户弹出一个显示对话框,允许他们手动更改音频过滤器属性和配置。
- show_video_crossbar_connection_dialog
如果设置为真的,在捕获开始之前,向最终用户弹出一个显示对话框,允许他们在打开视频设备时手动修改交叉开关引脚布线。
- show_audio_crossbar_connection_dialog
如果设置为真的,在捕获开始之前,向最终用户弹出一个显示对话框,允许他们在打开音频设备时手动修改交叉开关引脚路由。
- show_analog_tv_tuner_dialog
如果设置为真的,在捕获开始之前,向最终用户弹出一个显示对话框,允许他们手动修改电视频道和频率。
- show_analog_tv_tuner_audio_dialog
如果设置为真的,在捕获开始之前,向最终用户弹出一个显示对话框,允许他们手动修改电视音频(例如单声道与立体声、语言 A、B 或 C)。
- audio_device_load
从文件加载音频捕获过滤器设备,而不是按名称搜索它。如果过滤器支持其属性的序列化,它也可能加载其他参数。要使用此功能,必须指定音频捕获源,但它可以是任何东西,甚至是假的。
- audio_device_save
将当前使用的音频捕获过滤器设备及其参数(如果过滤器支持)保存到文件中。如果存在同名文件,它将被覆盖。
- video_device_load
从文件加载视频捕获过滤器设备,而不是按名称搜索它。如果过滤器支持其属性的序列化,它也可能加载其他参数。要使用此功能,必须指定视频捕获源,但它可以是任何东西,甚至是假的。
- video_device_save
将当前使用的视频捕获过滤器设备及其参数(如果过滤器支持)保存到文件中。如果存在同名文件,它将被覆盖。
- use_video_device_timestamps
如果设置为错误的,视频帧的时间戳将从挂钟导出,而不是捕获设备提供的时间戳。这允许在提供不可靠时间戳的设备周围工作。
26.6.2 示例
- 打印 DirectShow 支持的设备列表并退出:
$ ffmpeg -list_devices true -f dshow -i dummy
- 打开视频设备相机:
$ ffmpeg -f dshow -i video="Camera"
- 打开名为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.7 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.7.1 选项
- framerate
设置帧速率。默认值为 25。
26.8 gdigrab
基于 Win32 GDI 的屏幕捕获设备。
该设备允许您捕获 Windows 上的显示区域。
输入文件名有两个选项:
desktop
或者
title=window_title
第一个选项将捕获整个桌面或桌面的固定区域。第二个选项将捕获单个窗口的内容,无论其在屏幕上的位置如何。
例如,要使用以下命令获取整个桌面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.8.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
设置视频帧大小。默认情况下捕获全屏桌面被选择,或者完整窗口大小,如果标题=窗口标题被选中。
- offset_x
使用video_size捕获区域时,设置距屏幕或桌面左边缘的距离。
请注意,偏移计算是从 Windows 上主显示器的左上角开始的。如果监视器位于主监视器的左侧,则需要使用负的offset_x值将区域移动到该监视器。
- offset_y
使用video_size捕获区域时,设置距屏幕或桌面上边缘的距离。
请注意,偏移计算是从 Windows 上主显示器的左上角开始的。如果您的主显示器上方有一个显示器,则需要使用负的offset_y值将区域移动到该显示器。
26.9 iec61883
使用 libiec61883 的 FireWire DV/HDV 输入设备。
要启用此输入设备,您需要在系统上安装 libiec61883、libraw1394 和 libavc1394。使用配置选项
--enable-libiec61883
在启用设备的情况下进行编译。
iec61883 捕获设备支持使用 libiec61883 和新的 Linux FireWire 堆栈 (juju) 从通过 IEEE1394 (FireWire) 连接的视频设备进行捕获。这是 Linux Kernel 2.6.37 及更高版本中默认的 DV/HDV 输入方法,因为旧的 FireWire 堆栈已被删除。
指定要用作输入文件的 FireWire 端口,或“自动”以选择第一个连接的端口。
26.9.1 选项
- dvtype
覆盖 DV/HDV 的自动检测。仅当自动检测不起作用或应禁止使用不同的设备类型时才应使用此功能。将 DV 设备视为 HDV(反之亦然)将不起作用并导致未定义的行为。价值汽车,DV和高清病毒都支持。
- dvbuffer
设置传入数据缓冲区的最大大小(以帧为单位)。对于 DV,这是一个精确值。对于 HDV,它不是帧精确的,因为 HDV 没有固定的帧大小。
- dvguid
通过指定其 GUID 选择捕获设备。仅从指定设备执行捕获,如果未找到具有给定 GUID 的设备,则捕获失败。如果同时连接多个设备,这对于选择输入非常有用。查看 /sys/bus/firewire/devices 以查找 GUID。
26.9.2 示例
- 抓取并显示 FireWire DV/HDV 设备的输入。
ffplay -f iec61883 -i auto
- 如果源是 HDV,则使用 100000 个数据包的数据包缓冲区抓取并记录 FireWire DV/HDV 设备的输入。
ffmpeg -f iec61883 -i auto -dvbuffer 100000 out.mpg
26.10 jack
JACK输入设备。
要在配置期间启用此输入设备,您需要在系统上安装 libjack。
JACK 输入设备创建一个或多个 JACK 可写客户端,每个音频通道一个,名称为client_name :input_N ,其中 client_name是应用程序提供的名称,N 是标识通道的数字。每个可写客户端都会将获取的数据发送到FFmpeg输入设备。
一旦您创建了一个或多个 JACK 可读客户端,您需要将它们连接到一个或多个 JACK 可写客户端。
要连接或断开 JACK 客户端,您可以使用jack_connect
和jack_disconnect
程序,或通过图形界面执行此操作,例如使用qjackctl
。
要列出 JACK 客户端及其属性,您可以调用该命令
jack_lsp
。
下面的示例展示了如何使用 捕获 JACK 可读客户端ffmpeg
。
# Create a JACK writable client with name "ffmpeg". $ ffmpeg -f jack -i ffmpeg -y out.wav # Start the sample jack_metro readable client. $ jack_metro -b 120 -d 0.2 -f 4000 # List the current JACK clients. $ jack_lsp -c system:capture_1 system:capture_2 system:playback_1 system:playback_2 ffmpeg:input_1 metro:120_bpm # Connect metro to the ffmpeg writable client. $ jack_connect metro:120_bpm ffmpeg:input_1
欲了解更多信息,请阅读: http: //jackaudio.org/
26.10.1 选项
- channels
设置通道数。默认值为 2。
26.11 kmsgrab
KMS 视频输入设备。
捕获与指定 CRTC 或平面关联的 KMS 扫描输出帧缓冲区作为可传递给其他硬件功能的 DRM 对象。
需要 DRM 主控或 CAP_SYS_ADMIN 才能运行。
如果您不明白所有这些意味着什么,您可能不想要这个。看着 x11抢反而。
26.11.1 选项
- device
要捕获的 DRM 设备。默认为/dev/dri/card0。
- format
帧缓冲区的像素格式。如果您运行的是 Linux 5.7 或更高版本,则可以自动检测到这一点,但需要为早期版本提供。默认为背景0,这是 Linux 控制台和 Xorg X 服务器最常用的格式。
- format_modifier
用于在输出帧上发出信号的格式修饰符。这是正确导入某些 API 所必需的。如果您运行的是 Linux 5.7 或更高版本,则可以自动检测到它,但在早期版本中需要时需要明确提供。有关可能的值,请参阅 libdrm 文档。
- crtc_id
用于定义捕获源的 KMS CRTC ID。将使用给定 CRTC 上的第一个活动平面。
- plane_id
用于定义捕获源的 KMS 平面 ID。如果两者都没有,则默认为找到的第一个活动平面crtc_id也不飞机编号被指定。
- framerate
捕捉的帧速率。这不与任何页面翻转或帧缓冲区更改同步 - 它只是定义帧缓冲区采样的间隔。采样速度快于帧缓冲区更新速率将生成具有相同内容的独立帧。默认为
30
.
26.11.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.12 lavfi
Libavfilter 输入虚拟设备。
该输入设备从 libavfilter 滤波器图的开放输出板读取数据。
对于每个filtergraph打开的输出,输入设备将创建一个对应的流,该流映射到生成的输出。过滤图通过选项指定图形。
26.12.1 选项
- graph
指定用作输入的过滤器图。每个视频打开输出必须用“out N ”形式的唯一字符串进行标记,其中N是从 0 开始的数字,对应于设备生成的映射输入流。第一个未标记的输出会自动分配给“out0”标签,但所有其他输出都需要显式指定。
后缀“+subcc”可以附加到输出标签,以创建一个额外的流,其中隐藏式字幕数据包附加到该输出(实验性的;目前仅适用于 EIA-608 / CEA-708)。subcc 流是在所有普通流之后按照相应流的顺序创建的。例如,如果存在“out19+subcc”、“out7+subcc”直至“out42”,则流#43是流#7的subcc,并且流#44是流#19的subcc。
如果未指定,则默认为为输入设备指定的文件名。
- graph_file
设置要读取并发送到其他过滤器的过滤器图表的文件名。filtergraph 的语法与 option graph指定的语法相同。
- dumpgraph
将图表转储到 stderr。
26.12.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]"
- 将解码帧转储到图像并将隐藏式字幕转储到文件(实验):
ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map v frame%08d.png -map s -c copy -f rawvideo subcc.bin
26.13 libcdio
基于 libcdio 的音频 CD 输入设备。
要在配置期间启用此输入设备,您需要在系统上安装 libcdio。它需要配置选项
--enable-libcdio
。
该设备允许播放和抓取音频 CD。
例如,将ffmpeg
整个音频 CD 复制到/dev/sr0,您可以运行命令:
ffmpeg -f libcdio -i /dev/sr0 cd.wav
26.13.1 选项
- speed
设置驱动器读取速度。默认值为 0。
该速度是指定CD-ROM 速度单位。速度通过libcdio
cdio_cddap_speed_set
函数设置。在许多 CD-ROM 驱动器上,指定太大的值将导致使用最快的速度。- paranoia_mode
设置偏执恢复模式标志。它接受以下值之一:
- ‘disable’
- ‘verify’
- ‘overlap’
- ‘neverskip’
- ‘full’
默认值为 '禁用'。
有关可用恢复模式的更多信息,请参阅 paranoia 项目文档。
26.14 libdc1394
IIDC1394 输入设备,基于 libdc1394 和 libraw1394。
需要配置选项--enable-libdc1394
。
26.14.1 选项
- framerate
设置帧速率。默认为
ntsc
,对应帧速率为30000/1001
。- pixel_format
选择像素格式。默认为
uyvy422
.- video_size
设置以字符串形式给出的视频大小,例如
640x480
或hd720
。默认为qvga
.
26.15 openal
OpenAL 输入设备在所有具有有效 OpenAL 1.1 实现的系统上提供音频捕获。
要在配置期间启用此输入设备,您需要在系统上安装 OpenAL 标头和库,并且需要使用--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。
- Apple
OpenAL 是 Core Audio(官方 Mac OS X 音频接口)的一部分。请参阅http://developer.apple.com/technologies/mac/audio-and-video.html
该设备允许从通过 OpenAL 处理的音频输入设备进行捕获。
您需要在提供的文件名中指定要捕获的设备的名称。如果提供空字符串,设备将自动选择默认设备。您可以使用选项list_devices获取支持的设备列表。
26.15.1 选项
- channels
设置捕获的音频中的通道数。只有价值观 1(单声道)和2目前支持(立体声)。默认为2。
- sample_size
设置捕获的音频的样本大小(以位为单位)。只有价值观 8和16目前支持。默认为 16。
- sample_rate
设置捕获音频的采样率(以 Hz 为单位)。默认为44.1k。
- list_devices
如果设置为真的,打印设备列表并退出。默认为错误的。
26.15.2 示例
打印 OpenAL 支持的设备列表并退出:
$ ffmpeg -list_devices true -f openal -i dummy out.ogg
从 OpenAL 设备捕获DR-BT101 通过 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.16 oss
打开声音系统输入设备。
提供给输入设备的文件名是代表OSS输入设备的设备节点,通常设置为 /dev/dsp。
例如从/dev/dsp使用ffmpeg
命令:
ffmpeg -f oss -i /dev/dsp /tmp/oss.wav
有关 OSS 的更多信息,请参阅: http://manuals.opensound.com/usersguide/dsp.html
26.16.1 选项
- sample_rate
设置采样率(以 Hz 为单位)。默认值为 48000。
- channels
设置通道数。默认值为 2。
26.17 pulse
PulseAudio 输入设备。
要启用此输出设备,您需要使用 来配置 FFmpeg --enable-libpulse
。
提供给输入设备的文件名是源设备或字符串“default”
要列出 PulseAudio 源设备及其属性,您可以调用该命令pactl list sources
。
有关 PulseAudio 的更多信息,请访问http://www.pulseaudio.org。
26.17.1 选项
- server
连接到由 IP 地址指定的特定 PulseAudio 服务器。如果未提供,则使用默认服务器。
- name
指定 PulseAudio 在显示活动客户端时将使用的应用程序名称,默认情况下它是字符串
LIBAVFORMAT_IDENT
。- stream_name
指定 PulseAudio 在显示活动流时将使用的流名称,默认情况下为“record”。
- sample_rate
指定采样率(以 Hz 为单位),默认情况下使用 48kHz。
- channels
指定使用的通道,默认设置为 2(立体声)。
- frame_size
此选项不执行任何操作并且已被弃用。
- fragment_size
指定 PulseAudio 中最小缓冲片段的大小(以字节为单位),它将影响音频延迟。默认情况下,它设置为 50 毫秒的数据量。
- wallclock
使用当前时间设置初始 PTS。默认值为 1。
26.17.2 示例
从默认设备录制流:
ffmpeg -f pulse -i default /tmp/pulse.wav
26.18 sndio
sndio 输入设备。
要在配置期间启用此输入设备,您需要在系统上安装 libsndio。
提供给输入设备的文件名是代表sndio输入设备的设备节点,通常设置为 /dev/audio0。
例如从/dev/audio0使用ffmpeg
命令:
ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav
26.18.1 选项
- sample_rate
设置采样率(以 Hz 为单位)。默认值为 48000。
- channels
设置通道数。默认值为 2。
26.19 video4linux2, v4l2
Video4Linux2 输入视频设备。
“v4l2”可以用作“video4linux2”的别名。
如果 FFmpeg 是使用 v4l-utils 支持构建的(通过使用
--enable-libv4l2
配置选项),则可以将其与
-use_libv4l2
输入设备选项一起使用。
要抓取的设备的名称是文件设备节点,通常 Linux 系统倾向于在设备(例如 USB 网络摄像头)插入系统时自动创建此类节点,并具有此类名称/dev/视频N,其中N是与设备关联的数字。
Video4Linux2 设备通常支持一组有限的
宽度x高度尺寸和帧速率。-list_formats all
您可以检查Video4Linux2 设备支持哪些功能。某些设备(例如电视卡)支持一种或多种标准。可以使用 列出所有支持的标准-list_standards all
。
时间戳的时基是 1 微秒。根据内核版本和配置,时间戳可能源自实时时钟(起源于 Unix Epoch)或单调时钟(起源通常在启动时,不受 NTP 或手动更改时钟的影响)。这 - 时间戳绝对值或者-ts 腹肌选项可用于强制转换为实时时钟。
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.19.1 选项
- standard
设定标准。必须是支持的标准的名称。要获取支持的标准列表,请使用列表标准 选项。
- channel
设置输入通道号。默认为-1,表示使用之前选择的通道。
- video_size
设置视频帧大小。参数必须是WIDTH x HEIGHT形式的字符串 或有效的大小缩写。
- 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.20 vfwcap
VfW(Windows 视频)捕获输入设备。
作为输入传递的文件名是捕获驱动程序编号,范围从 0 到 9。您可以使用“list”作为文件名来打印驱动程序列表。任何其他文件名将被解释为设备号 0。
26.20.1 选项
- video_size
设置视频帧大小。
- framerate
设置抓取帧率。默认值为
ntsc
,对应帧速率为30000/1001
。
26.21 x11grab
X11 视频输入设备。
要在配置期间启用此输入设备,您需要在系统上安装 libxcb。在配置过程中会自动检测到它。
该设备允许用户捕获 X11 显示器的某个区域。
作为输入传递的文件名的语法如下:
[hostname]:display_number.screen_number[+x_offset,y_offset]
主机名:显示编号。screen_number指定要从中抓取的屏幕的 X11 显示名称。主机名可以省略,默认为“localhost”。环境变量
DISPLAY
包含默认的显示名称。
x_offset和y_offset指定抓取区域相对于 X11 屏幕左上角的偏移量。它们默认为 0。
检查 X11 文档(例如man X
)以获取更多详细信息。
使用该xdpyinfo
程序获取有关 X11 显示器属性的基本信息(例如 grep 获取“名称”或“尺寸”)。
例如从: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.21.1 选项
- select_region
指定是否使用指针以图形方式选择抓取区域。值
1
提示用户通过单击和拖动以图形方式选择抓取区域。单击而不拖动即可选择整个屏幕。宽度或高度为零的区域也将选择整个屏幕。此选项会覆盖video_size、grab_x和 grab_y选项。默认值为0
。- draw_mouse
指定是否绘制鼠标指针。值
0
指定不绘制指针。默认值为1
。- follow_mouse
使抓取的区域跟随鼠标移动。参数可以是
centered
像素数PIXELS。当指定为“centered”时,抓取区域跟随鼠标指针,并保持指针位于区域中心;否则,仅当鼠标指针到达PIXELS(大于零)内并到达区域边缘时,区域才会跟随。
例如:
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
在屏幕上显示抓取的区域。
如果用 指定show_region
1
,则抓取区域将显示在屏幕上。使用此选项,如果仅抓取屏幕的一部分,则很容易知道正在抓取的内容。- region_border
设置区域边框厚度如果-显示区域1用来。范围为 1 到 128,默认值为 3(仅限基于 XCB 的 x11grab)。
例如:
ffmpeg -f x11grab -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
使用follow_mouse:
ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
- window_id
抓住这个窗口,而不是整个屏幕。默认值为 0,映射到整个屏幕(根窗口)。
可以使用该程序找到窗口的 ID
xwininfo
,可能使用选项 -tree 和 -root。如果稍后放大窗口,则不会记录新区域。当窗口关闭、取消映射(即图标化)或缩小到超出视频大小(默认为初始窗口大小)时,视频结束。
该选项禁用选项跟随鼠标和选择区域。
- 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 <索引> ,覆盖输入文件名中给出的任何设备名称或索引。
可以通过使用枚举所有可用设备-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
如果设置为真的,打印可用驱动程序列表并退出。
- 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 上,您需要通过widl
.
DeckLink对其支持的格式非常挑剔。像素格式始终为 uyvy422,必须为您的设备确定帧速率、场序和视频大小-list_formats 1
。音频采样率始终为 48 kHz。
27.4.1 选项
- list_devices
如果设置为真的,打印设备列表并退出。默认为错误的。此选项已弃用,请使用
-sinks
ffmpeg 的选项列出可用的输出设备。- list_formats
如果设置为真的,打印支持的格式列表并退出。默认为错误的。
- preroll
预卷视频的时间量(以秒为单位)。默认为0.5。
- duplex_mode
设置 Decklink 设备双工/配置文件模式。必须是 '未设置','一半','满的','one_sub_device_full','one_sub_device_half','两个子设备完整','四子设备半' 默认为 '未设置'。
注意:DeckLink SDK 11.0 已将双工属性替换为配置文件属性。对于 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','两个子设备完整','四子设备半'
DeckLink Quad 2 和 DeckLink Duo 2 的有效配置文件模式:'一半','满的'
- timing_offset
设置所用输出上的同步锁相时序像素偏移。默认为 '未设置'。
- link
设置所用输出上的 SDI 视频链路配置。必须是 '未设置','单身的'链接SDI,'双重的'链接SDI或'四边形'链接SDI。默认为 '未设置'。
- sqd
为四链路 SDI 输出启用 Square Division Quad Split 模式。必须是 '未设置','真的' 或者 '错误的'。默认为未设置。
- level_a
在所使用的输出上启用 SMPTE A 级模式。必须是 '未设置','真的' 或者 '错误的'。默认为未设置。
- 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。
欲了解更多详细信息,请阅读文件 文档/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 opengl
OpenGL 输出设备。
要启用此输出设备,您需要使用 来配置 FFmpeg --enable-opengl
。
该输出设备允许渲染到 OpenGL 上下文。上下文可以由应用程序提供或创建默认的 SDL 窗口。
当设备渲染到外部上下文时,应用程序必须实现以下消息的处理程序:
AV_DEV_TO_APP_CREATE_WINDOW_BUFFER
- 在当前线程上创建 OpenGL 上下文。
AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER
- 使 OpenGL 上下文成为当前上下文。
AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER
- 交换缓冲区。
AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER
- 销毁 OpenGL 上下文。应用程序还需要通过发送AV_APP_TO_DEV_WINDOW_SIZE
消息来通知设备当前的分辨率。
27.6.1 选项
- background
设置背景颜色。黑色是默认值。
- no_window
设置为非零值时禁用默认 SDL 窗口。应用程序必须提供 OpenGL 上下文以及
window_size_cb
设置window_swap_buffers_cb
时的回调。- window_title
设置 SDL 窗口标题,如果未指定,则默认为为输出设备指定的文件名。被忽略时无窗口已设置。
- window_size
设置首选窗口大小,可以是宽度x高度形式的字符串或视频大小缩写。如果未指定,则默认为输入视频的大小,并根据宽高比缩小。主要用在什么时候无窗口未设置。
27.6.2 示例
使用 OpenGL 渲染在 SDL 窗口上播放文件:
ffmpeg -i INPUT -f opengl "window title"
27.7 oss
OSS(开放声音系统)输出设备。
27.8 pulse
PulseAudio 输出设备。
要启用此输出设备,您需要使用 来配置 FFmpeg --enable-libpulse
。
有关 PulseAudio 的更多信息,请访问http://www.pulseaudio.org
27.8.1 选项
- server
连接到由 IP 地址指定的特定 PulseAudio 服务器。如果未提供,则使用默认服务器。
- name
指定 PulseAudio 在显示活动客户端时将使用的应用程序名称,默认情况下它是字符串
LIBAVFORMAT_IDENT
。- stream_name
指定 PulseAudio 在显示活动流时将使用的流名称,默认情况下它设置为指定的输出名称。
- device
指定要使用的设备。如果未提供,则使用默认设备。可以使用命令获取输出设备列表
pactl list sinks
。- buffer_size
- buffer_duration
控制 PulseAudio 缓冲区的大小和持续时间。小缓冲区可以提供更多控制,但需要更频繁的更新。
缓冲区大小指定大小(以字节为单位) 缓冲区持续时间指定持续时间(以毫秒为单位)。
当提供两个选项时,将使用最高值(使用流参数将持续时间重新计算为字节)。如果它们设置为 0(默认值),设备将使用默认的 PulseAudio 持续时间值。默认情况下,PulseAudio 将缓冲持续时间设置为 2 秒左右。
- prebuf
指定预缓冲大小(以字节为单位)。服务器至少在此之前未启动播放预缓冲区缓冲区中有可用字节。默认情况下,此选项初始化为与 缓冲区大小或者缓冲区持续时间(以较大者为准)。
- minreq
指定最小请求大小(以字节为单位)。服务器请求不小于最小要求从客户端请求字节,而是等到缓冲区有足够的空闲来一次请求更多字节。建议不要设置此选项,这会将其初始化为服务器认为合理的值。
27.8.2 示例
在默认服务器上的默认设备上播放文件:
ffmpeg -i INPUT -f pulse "stream name"
27.9 sdl
SDL(简单直接媒体层)输出设备。
“sdl2”可以用作“sdl”的别名。
该输出设备允许在 SDL 窗口中显示视频流。每个应用程序只允许有一个 SDL 窗口,因此应用程序中只能拥有该输出设备的一个实例。
要启用此输出设备,您需要在配置构建时在系统上安装 libsdl。
有关 SDL 的更多信息,请查看: http: //www.libsdl.org/
27.9.1 选项
- window_borderless
关闭 SDL 窗口边框。默认值为 0(启用窗口边框)。
- window_enable_quit
当提供非零值时启用退出操作(使用窗口按钮或键盘键)。默认值为 1(启用退出操作)。
- window_fullscreen
提供非零值时设置全屏模式。默认值为零。
- window_size
设置SDL窗口大小,可以是宽度x高度形式的字符串 或视频大小缩写。如果未指定,则默认为输入视频的大小,并根据宽高比缩小。
- window_title
设置 SDL 窗口标题,如果未指定,则默认为为输出设备指定的文件名。
- window_x
- window_y
设置窗口在屏幕上的位置。
27.9.2 交互式命令
设备创建的窗口可以通过以下交互命令进行控制。
- q, ESC
立即退出设备。
27.9.3 示例
以下命令显示ffmpeg
输出是一个 SDL 窗口,强制其大小为 qcif 格式:
ffmpeg -i INPUT -c:v rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"
27.10 sndio
sndio 音频输出设备。
27.11 v4l2
Video4Linux2 输出设备。
27.12 xv
XV(XVideo)输出设备。
该输出设备允许在 X Window 系统窗口中显示视频流。
27.12.1 选项
- display_name
指定硬件显示名称,它确定要使用的显示和通信域。
显示名称或 DISPLAY 环境变量可以是格式为主机名[:数字[. 屏幕编号]]。
主机名指定显示器物理连接的主机的名称。number指定该主机上显示服务器的编号。screen_number指定要在该服务器上使用的屏幕。
如果未指定,则默认为 DISPLAY 环境变量的值。
例如,
dual-headed:0.1
将指定名为“双头”的机器上显示器 0 的屏幕 1。有关显示名称格式的更多详细信息,请检查 X11 规范。
- window_id
当设置为非零值时,设备不会创建新窗口,而是使用提供的window_id的现有窗口。默认情况下,此选项设置为零,并且设备创建自己的窗口。
- window_size
设置创建的窗口大小,可以是宽x高形式的字符串 或视频大小缩写。如果未指定,则默认为输入视频的大小。设置 window_id时忽略。
- window_x
- window_y
为创建的窗口设置 X 和 Y 窗口偏移。默认情况下它们都设置为 0。这些值可能会被窗口管理器忽略。设置 window_id时忽略。
- window_title
设置窗口标题,如果未指定,则默认为为输出设备指定的文件名。设置 window_id时忽略。
有关 XVideo 的更多信息,请参阅http://www.x.org/。
27.12.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.h用于编程使用的 API。
- uchl, used_chlayout
设置使用的输入通道布局。默认值未设置。该选项仅用于特殊的重新映射。
- isr, in_sample_rate
设置输入采样率。默认值为 0。
- osr, out_sample_rate
设置输出采样率。默认值为 0。
- isf, in_sample_fmt
指定输入样本格式。它默认设置为
none
。- osf, out_sample_fmt
指定输出样本格式。它默认设置为
none
。- tsf, internal_sample_fmt
设置内部样本格式。默认值为
none
。当未明确设置时,将自动选择它。- ichl, in_chlayout
- ochl, out_chlayout
设置输入/输出通道布局。
有关所需语法, 请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 通道布局部分。
- 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’
选择柴田噪声整形抖动。
- ‘low_shibata’
选择低柴田噪声整形抖动。
- ‘high_shibata’
选择高柴田噪声整形抖动。
- ‘f_weighted’
选择 f 加权噪声整形抖动
- ‘modified_e_weighted’
选择改进的电子加权噪声整形抖动
- ‘improved_e_weighted’
选择改进的电子加权噪声整形抖动
- resampler
设置重采样引擎。默认值为 swr。
支持的值:
- ‘swr’
选择本机软件重采样器;过滤器选项 precision 和 cheby 在这种情况下不适用。
- ‘soxr’
选择 SoX Resampler(如果可用);补偿和滤波器选项 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,启用后,尝试根据输入和输出采样率使用精确的phase_count。但是,如果它大于
1 << phase_shift
,则 Phase_count 将作为1 << phase_shift
后备。默认启用。- cutoff
设置截止频率(swr:6dB点;soxr:0dB点)比率;必须是 0 到 1 之间的浮点值。swr 的默认值为 0.97,soxr 的默认值为 0.91(采样率为 44100 时,将整个音频频带保留为 20kHz)。
- precision
仅对于 soxr,将计算重采样信号的精度(以位为单位)。默认值 20(通过适当的抖动,适合目标位深度 16)提供了 SoX 的“高质量”;值为 28 表示 SoX 的“非常高的质量”。
- cheby
仅对于 soxr,选择通带滚降无(切比雪夫)和“无理”比率的更高精度近似。默认值为 0。
- async
仅适用于 swr,使用拉伸、挤压、填充和修剪将简单的 1 参数音频同步到时间戳。将其设置为 1 将启用填充和修剪,较大的值表示每秒可以拉伸或压缩数据的最大样本量。默认值为 0,因此不会应用补偿来使样本与音频时间戳匹配。
- first_pts
仅对于 swr,假设第一个点应该是这个值。时间单位是1/采样率。这允许在流开始时进行填充/修剪。默认情况下,不会对第一帧的预期点数做出任何假设,因此不会进行填充或修剪。例如,如果音频流在视频流之后开始,则可以将其设置为 0,以便用静音填充开头,或者由于编码器延迟而用负点修剪任何样本。
- min_comp
仅对于 swr,设置时间戳和音频数据之间的最小差异(以秒为单位)以触发数据的拉伸/挤压/填充或修剪,以使其与时间戳匹配。默认情况下,拉伸/挤压/填充和修剪被禁用(最小补偿量=
FLT_MAX
)。- min_hard_comp
仅对于 swr,设置时间戳和音频数据之间的最小差异(以秒为单位)以触发添加/删除样本以使其与时间戳匹配。该选项实际上是在硬(修剪/填充)和软(挤压/拉伸)补偿之间进行选择的阈值。请注意,默认情况下,通过以下方式禁用所有补偿最小补偿量。默认值为 0.1。
- comp_duration
仅对于 swr,设置数据拉伸/压缩以使其与时间戳匹配的持续时间(以秒为单位)。必须是非负双浮点值,默认值为 1.0。
- max_soft_comp
仅对于 swr,设置数据拉伸/压缩的最大因子以使其与时间戳匹配。必须是非负双浮点值,默认值为 0。
- matrix_encoding
选择矩阵立体声编码。
它接受以下值:
- ‘none’
选择无
- ‘dolby’
选择杜比
- ‘dplii’
选择杜比定向逻辑 II
默认值为
none
。- filter_type
仅对于 swr,选择重采样滤波器类型。这仅影响重采样操作。
它接受以下值:
- ‘cubic’
选择立方
- ‘blackman_nuttall’
选择 Blackman Nuttall 窗口 sinc
- ‘kaiser’
选择 Kaiser 窗口 sinc
- kaiser_beta
仅对于 swr,设置 Kaiser 窗口 beta 值。必须是区间 [2,16] 内的双精度浮点值,默认值为 9。
- output_sample_bits
仅对于 swr,设置用于抖动的输出采样位数。必须是[0,64]区间内的整数,默认值为0,表示不使用。
29 定标器选项
视频缩放器支持以下命名选项。
可以通过在 FFmpeg 工具中指定 -选项 值来设置选项,下面列出了一些仅限 API 的例外情况。对于编程使用,可以在选项中
SwsContext
或通过libavutil/opt.hAPI。
- sws_flags
设置缩放器标志。这也用于设置缩放算法。只应选择单一算法。默认值为 '双三次'。
它接受以下值:
- ‘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 only)
设置源宽度。
- srch (API only)
设置源高度。
- dstw (API only)
设置目标宽度。
- dsth (API only)
设置目标高度。
- src_format (API only)
设置源像素格式(必须表示为整数)。
- dst_format (API only)
设置目标像素格式(必须表示为整数)。
- src_range (boolean)
如果值设置为
1
,则表示源为全范围。默认值为0
,表示源范围有限。- dst_range (boolean)
如果值设置为
1
,则启用目标的全范围。默认值为0
,启用限制范围。- param0, param1
设置缩放算法参数。指定的值特定于某些缩放算法,而被其他算法忽略。指定的值是浮点数。
- sws_dither
设置抖动算法。接受以下值之一。默认值为 '汽车'。
- ‘auto’
自动选择
- ‘none’
无抖动
- ‘bayer’
拜耳抖动
- ‘ed’
误差扩散抖动
- ‘a_dither’
算术抖动,基于使用加法
- ‘x_dither’
算术抖动,基于使用异或(比 a_dither 更随机/不太明显的模式)。
- alphablend
设置当输入具有 Alpha 但输出没有时使用的 Alpha 混合。默认值为 '没有任何'。
- ‘uniform_color’
混合到统一的背景颜色上
- ‘checkerboard’
混合到棋盘上
- ‘none’
无混合
30 过滤简介
FFmpeg 中的过滤是通过 libavfilter 库启用的。
在 libavfilter 中,过滤器可以有多个输入和多个输出。为了说明可能发生的事情,我们考虑以下过滤图。
[main] input --> split ---------------------> overlay --> output | ^ |[tmp] [flip]| +-----> crop --> vflip -------+
该过滤器图将输入流分成两个流,然后通过裁剪过滤器和 vflip 过滤器发送一个流,然后通过将其覆盖在顶部将其与另一个流合并回来。您可以使用以下命令来实现此目的:
ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
结果将是视频的上半部分镜像到输出视频的下半部分。
同一线性链中的过滤器以逗号分隔,不同线性链的过滤器以分号分隔。在我们的示例中, crop、vflip位于一个线性链中,split和 overlay分别位于另一线性链中。线性链的连接点用方括号内的名称来标记。在示例中,分割过滤器生成与标签[main]和[tmp]关联的两个输出。
发送到split的第二个输出(标记为 [tmp] )的流通过裁剪过滤器进行处理,该过滤器会裁剪掉视频的下半部分,然后垂直翻转。覆盖 过滤器接收分割过滤器的第一个未更改的输出(标记为[main]),并在其下半部分覆盖由Crop,vflip过滤器链生成的输出。
某些过滤器接受输入参数列表:它们在过滤器名称和等号之后指定,并用冒号彼此分隔。
存在没有音频/视频输入的所谓源过滤器和没有音频/视频输出的 接收器过滤器。
31 图形2点
这图2点FFmpeg 中包含的程序工具 目录可用于解析过滤器图描述并以点语言发出相应的文本表示。
调用命令:
graph2dot -h
看看如何使用图2点。
然后您可以将点描述传递给点程序(来自 graphviz 程序套件)并获取过滤器图的图形表示。
例如命令序列:
echo GRAPH_DESCRIPTION | \ tools/graph2dot -o graph.tmp && \ dot -Tpng graph.tmp -o graph.png && \ display graph.png
可用于创建和显示表示由GRAPH_DESCRIPTION字符串描述的图形的图像。请注意,该字符串必须是一个完整的独立图,其输入和输出已明确定义。例如,如果您的命令行采用以下形式:
ffmpeg -i infile -vf scale=640:360 outfile
您的GRAPH_DESCRIPTION字符串需要采用以下形式:
nullsrc,scale=640:360,nullsink
您可能还需要设置nullsrc参数并添加格式 过滤器以模拟特定的输入文件。
32 过滤图描述
过滤器图是连接过滤器的有向图。它可以包含循环,并且一对过滤器之间可以有多个链接。每个链路的一侧都有一个输入焊盘,将其连接到从中获取输入的一个过滤器,另一侧有一个输出焊盘,将其连接到接受其输出的一个过滤器。
过滤器图中的每个过滤器都是在应用程序中注册的过滤器类的实例,它定义了过滤器的功能以及输入和输出焊盘的数量。
没有输入焊盘的滤波器称为“源”,没有输出焊盘的滤波器称为“接收器”。
32.1 Filtergraph syntax
过滤器图有一个文本表示,它被
-筛选/-vf/-af和
-filter_complexffmpeg
和
中的选项-vf/-af在 中ffplay
,并通过
avfilter_graph_parse_ptr()
中定义的函数
libavfilter/avfilter.h。
过滤器链由一系列连接的过滤器组成,每个过滤器都连接到序列中的前一个过滤器。过滤器链由“,”分隔的过滤器描述列表表示。
过滤器图由一系列过滤器链组成。过滤器链序列由“;”分隔的过滤器链描述列表表示。
过滤器由以下形式的字符串表示: [ in_link_1 ]...[ in_link_N ] filter_name @ id = arguments [ out_link_1 ]...[ out_link_M ]
filter_name是所描述的过滤器是其实例的过滤器类的名称,并且必须是程序中注册的过滤器类之一的名称,可选地后跟“@ id ”。过滤器类的名称后面可以选择字符串“= arguments ”。
参数是一个字符串,其中包含用于初始化过滤器实例的参数。它可能有以下两种形式之一:
- 以“:”分隔的键=值对列表。
- 以“:”分隔的值列表。在这种情况下,假定键是按照声明顺序排列的选项名称。例如,
fade
过滤器按此顺序声明三个选项 -类型,起始帧和 nb_帧。那么参数列表in:0:30表示将in中的值 赋给选项类型, 0至 起始帧和30至nb_帧。 - 以“:”分隔的混合直接值和长键=值 对的列表。直接值必须位于键=值对之前,并遵循与前一点相同的约束顺序。可以按任何首选顺序设置 以下 键=值对。
如果选项值本身是一个项目列表(例如,format
过滤器采用像素格式列表),则列表中的项目通常用 ' 分隔|'。
参数列表可以使用字符 ' 引起来'' 作为起始和结束标记,以及字符 '\' 用于转义引用文本中的字符;否则,当下一个特殊字符(属于集合 '[]=;,') 遇到。
CLI 工具中实现的特殊语法ffmpeg
允许从文件加载选项值。这是通过在选项名称前面添加斜杠“/”来完成的,然后提供的值将被解释为加载实际值的路径。例如
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与输出焊盘相关联。
当在过滤器图中找到两个具有相同名称的链接标签时,将在相应的输入和输出板之间创建链接。
如果输出 pad 未标记,则默认情况下它将链接到过滤器链中下一个过滤器的第一个未标记输入 pad。例如在过滤器链中
nullsrc, split[L1], [L2]overlay, nullsink
分割滤波器实例有两个输出板,覆盖滤波器实例有两个输入板。split 的第一个输出焊盘标记为“L1”,overlay 的第一个输入焊盘标记为“L2”,split 的第二个输出焊盘链接到overlay 的第二个输入焊盘,两者均未标记。
在过滤器描述中,如果未指定第一个过滤器的输入标签,则假定为“in”;如果未指定最后一个过滤器的输出标签,则假定为“out”。
在完整的滤波器链中,必须连接所有未标记的滤波器输入和输出焊盘。如果所有滤波器链的所有滤波器输入和输出焊盘都已连接,则滤波器图被视为有效。
Filtergraph 规范中分隔标记的前导和尾随空格(空格、制表符或换行符)将被忽略。这意味着过滤器图可以使用空行和空格来表达,以提高可红色性。
例如,过滤图:
testsrc,split[L1],hflip[L2];[L1][L2] hstack
可以表示为:
testsrc, split [L1], hflip [L2]; [L1][L2] hstack
Libavfilter 会在需要格式转换的地方自动插入比例过滤器。可以通过
在过滤器图描述前添加 swscale 标志来为那些自动插入的缩放器指定 swscale 标志。
sws_flags=flags;
以下是 filtergraph 语法的 BNF 描述:
NAME ::= sequence of alphanumeric characters and '_' FILTER_NAME ::= NAME["@"NAME] LINKLABEL ::= "[" NAME "]" LINKLABELS ::= LINKLABEL [LINKLABELS] FILTER_ARGUMENTS ::= sequence of chars (possibly quoted) FILTER ::= [LINKLABELS] FILTER_NAME ["=" FILTER_ARGUMENTS] [LINKLABELS] FILTERCHAIN ::= FILTER [,FILTERCHAIN] FILTERGRAPH ::= [sws_flags=flags;] FILTERCHAIN [;FILTERGRAPH]
32.2 Notes on filtergraph escaping
Filtergraph 描述组合需要几个级别的转义。有关所使用的转义过程的更多信息, 请参阅(ffmpeg-utils) ffmpeg-utils(1) 手册中的“引用和转义”部分。
第一级转义会影响每个过滤器选项值的内容,其中可能包含用于分隔值的特殊字符:
或转义字符之一\'
。
第二级转义会影响整个过滤器描述,其中可能包含转义字符或过滤器图描述使用的
\'
特殊字符。[],;
最后,当您在 shell 命令行上指定过滤器图表时,您需要对其中包含的 shell 特殊字符执行第三级转义。
例如,考虑将以下字符串嵌入到绘图文本过滤器描述中文本价值:
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 命令中编写 filtergraph 描述时需要额外级别的转义,这取决于所采用的 shell 的转义规则。例如,假设
\
是特殊的并且需要用另一个转义\
,则前面的字符串最终将导致:
-vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters"
为了避免在使用接受过滤器规范作为输入的命令行工具时出现麻烦的转义,建议避免在 shell 中直接包含过滤器或选项规范。
例如,对于drawtext过滤器,您可能更喜欢使用文本文件选项代替文本指定要渲染的文本。
使用该ffmpeg
工具时,您可能会考虑使用
(ffmpeg)-filter_script 选项或
(ffmpeg)-filter_complex_script 选项。
33 时间轴编辑
一些过滤器支持通用使能够选项。对于支持时间线编辑的过滤器,可以将此选项设置为在将帧发送到过滤器之前评估的表达式。如果评估不为零,则将启用过滤器,否则帧将原封不动地发送到过滤器图中的下一个过滤器。
该表达式接受以下值:
- ‘t’
时间戳以秒表示,如果输入时间戳未知,则为 NAN
- ‘n’
输入帧的序号,从0开始
- ‘pos’
输入帧在文件中的位置,如果未知则为 NAN;已弃用,请勿使用
- ‘w’
- ‘h’
输入帧的宽度和高度(如果是视频)
此外,这些过滤器支持使能够可用于重新定义表达式的命令。
与任何其他过滤选项一样,使能够选项遵循相同的规则。
例如,要启用 10 秒到 3 分钟的模糊滤镜 ( smartblur ),以及从 3 秒开始的 曲线滤镜:
smartblur = enable='between(t,10,3*60)', curves = enable='gte(t,3)' : preset=cross_process
查看ffmpeg -filters
可查看哪些过滤器支持时间轴。
34 使用命令在运行时更改选项
某些选项可以在过滤器运行期间使用命令进行更改。这些选项在输出上标记为“T”
ffmpeg
-h filter=<过滤器名称>。命令的名称是选项的名称,参数是新值。
35 个具有多个输入的滤波器选项(帧同步)
一些具有多个输入的过滤器支持一组通用选项。这些选项只能按名称设置,不能使用短符号。
- eof_action
当辅助输入遇到 EOF 时采取的操作;它接受以下值之一:
- repeat
重复最后一帧(默认)。
- endall
结束两个流。
- pass
传递主输入。
- shortest
如果设置为 1,则在最短输入终止时强制输出终止。默认值为 0。
- repeatlast
如果设置为 1,则强制过滤器将次流的最后一帧延长到主流的末尾。值为 0 会禁用此行为。默认值为 1。
- ts_sync_mode
如何严格地根据辅助输入时间戳同步流;它接受以下值之一:
- default
来自辅助输入的帧,其时间戳与主输入帧最接近或相等。
- nearest
来自辅助输入的帧,其时间戳绝对最接近主输入帧。
36 音频滤波器
配置 FFmpeg 构建时,您可以使用 禁用任何现有过滤器--disable-filters
。配置输出将显示构建中包含的音频过滤器。
以下是当前可用的音频过滤器的描述。
36.1 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
输入流的所有通道之间的电平或输入流的 Loutter(maximum
) 通道是否影响衰减。默认为average
.- detection
在 的情况下应该采用精确信号
peak
,还是在 的情况下采用 RMS 信号rms
。默认是rms
最平滑的。- mix
在输出中使用多少压缩信号。默认值为 1。范围介于 0 和 1 之间。
36.1.1 命令
该过滤器支持以上所有选项作为命令。
36.2 acontrast
简单的音频动态范围压缩/扩展滤波器。
该过滤器接受以下选项:
- contrast
设置对比度。默认值为 33。允许的范围在 0 到 100 之间。
36.3 acopy
将输入音频源原样复制到输出。这主要用于测试目的。
36.4 acrossfade
将交叉淡入淡出从一个输入音频流应用到另一输入音频流。在第一个流末尾附近的指定持续时间内应用交叉淡入淡出。
该过滤器接受以下选项:
- nb_samples, ns
指定交叉淡入淡出效果必须持续的样本数。在交叉淡入淡出效果结束时,第一个输入音频将完全静音。默认值为 44100。
- duration, d
指定交叉淡入淡出效果的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。默认情况下,持续时间由nb_samples确定。如果设置,则使用此选项而不是nb_samples。
- overlap, o
第一个流结束应该与第二个流开始重叠。默认启用。
- curve1
设置第一个流的淡入淡出过渡曲线。
- curve2
设置第二个流的淡入淡出过渡曲线。
有关可用曲线类型的描述,请参阅淡入淡出过滤器描述。
36.4.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.5 acrossover
将音频流分成几个频段。
该滤波器将音频流分成两个或多个频率范围。将所有流加起来将得到平坦的输出。
该过滤器接受以下选项:
- split
设置分频。这些必须是积极的且不断增加的。
- order
设置每个频段分割的滤波器顺序。这控制滤波器传递函数的滤波器滚降或陡度。可用值为:
- ‘2nd’
每倍频程 12 分贝。
- ‘4th’
每倍频程 24 分贝。
- ‘6th’
每倍频程 36 分贝。
- ‘8th’
每八度 48 分贝。
- ‘10th’
每八度 60 分贝。
- ‘12th’
每八度 72 分贝。
- ‘14th’
每倍频程 84 分贝。
- ‘16th’
每倍频程 96 分贝。
- ‘18th’
每倍频程 108 分贝。
- ‘20th’
每倍频程 120 分贝。
默认为第 4 个。
- level
设置输入增益电平。允许的范围是 0 到 1。默认值为 1。
- gains
设置每个频段的输出增益。所有频段的默认值为 1。
- precision
设置处理样品时使用的精度。
- auto
根据其他过滤器自动选择内部样本格式。
- float
始终使用单浮点精度样本格式。
- double
始终使用双浮点精度样本格式。
默认值为
auto
。
36.5.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.6 acrusher
降低音频比特分辨率。
该过滤器是具有增强功能的钻头破碎机。位粉碎器用于在声音上减少音频信号采样的位数。这根本不会改变位深度,它只是产生效果。位深度减小的材料听起来更加刺耳和“数字化”。该过滤器甚至能够舍入为连续值而不是离散位深度。此外,它还具有 D/C 偏移,这会导致信号的下半部分和上半部分受到不同的压缩。抗锯齿设置能够产生“更柔和”的破碎声音。
该滤波器的另一个特点是对数模式。此设置将位之间的线性距离切换为对数距离。结果是一个听起来更加“自然”的破碎机,例如,它不会门控低信号。人耳有对数感知,所以这种碾压感要舒服得多。对数粉碎也能够获得抗锯齿效果。
该过滤器接受以下选项:
- level_in
设置电平。
- level_out
设置水平。
- bits
设置位减少。
- mix
设定混合量。
- mode
可以是线性的:
lin
或对数的:log
。- dc
设置直流电。
- aa
设置抗锯齿。
- samples
设置样本减少量。
- lfo
启用低频振荡器。默认情况下禁用。
- lforange
设置 LFO 范围。
- lforate
设置 LFO 速率。
36.6.1 命令
该过滤器支持以上所有选项作为命令。
36.7 acue
延迟音频过滤,直到给定的挂钟时间戳。请参阅提示 过滤器。
36.8 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.9 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.10 adecorrelate
对输入音频流应用去相关。
该过滤器接受以下选项:
- stages
设置过滤的去相关阶段。允许的范围是 1 到 16。默认值为 6。
- seed
设置随机种子,用于设置跨通道样本的延迟。
36.11 adelay
延迟一个或多个音频通道。
延迟通道中的样本充满了寂静。
过滤器接受以下选项:
- delays
设置每个通道的延迟列表(以毫秒为单位),以“|”分隔。未使用的延迟将被默默忽略。如果给定延迟数小于通道数,则所有剩余通道都不会被延迟。如果您想延迟确切数量的样本,请在数字后附加“S”。如果您想延迟几秒钟,请在数字后附加“s”。
- all
对所有剩余通道使用最后设置的延迟。默认情况下是禁用的。如果启用此选项,则会更改选项的
delays
解释方式。
36.11.1 示例
- 将第一个通道延迟 1.5 秒,将第三个通道延迟 0.5 秒,并保持第二个通道(以及可能存在的任何其他通道)不变。
adelay=1500|0|500
- 将第二个通道延迟 500 个样本,将第三个通道延迟 700 个样本,并保持第一个通道(以及可能存在的任何其他通道)不变。
adelay=0|500S|700S
- 将所有通道延迟相同数量的样本:
adelay=delays=64S:all=1
36.12 adenorm
通过添加极低电平的噪声来纠正音频中的非正常现象。
该过滤器应放置在任何可以产生非正规化的过滤器之前。
下面是接受参数的描述。
- level
设置添加噪声的级别(以 dB 为单位)。默认为
-351
. 允许的范围是从 -451 到 -90。- type
设置添加噪声的类型。
- dc
添加直流信号。
- ac
添加交流信号。
- square
添加方波信号。
- pulse
添加脉冲信号。
默认为
dc
.
36.12.1 命令
该过滤器支持以上所有选项作为命令。
36.13 aderivative, aintegral
计算音频流的导数/积分。
依次应用这两个滤波器会产生原始音频。
36.14 adrc
将频谱动态范围控制器滤波器应用于输入音频流。
下面是接受的选项的描述。
- transfer
设置传输表达式。
该表达式可以包含以下常量:
- ch
当前频道号
- sn
当前样本数
- nb_channels
通道数
- t
以秒表示的时间戳
- sr
采样率
- p
当前频率功率值,单位 dB
- f
当前频率(以 Hz 为单位)
默认值为
p
。- attack
以毫秒为单位设置攻击。默认值为
50
毫秒。允许的范围为 1 到 1000 毫秒。- release
以毫秒为单位设置释放。默认值为
100
毫秒。允许的范围为 5 到 2000 毫秒。- channels
设置要过滤的通道,默认情况下
all
会过滤音频流中的通道。
36.14.1 命令
该过滤器支持以上所有选项作为命令。
36.14.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.15 adynamicequalizer
对输入音频流应用动态均衡。
下面是接受的选项的描述。
- 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’
将频率提升至检测阈值以上。
默认模式是 '切下'。
- dftype
设置检测过滤器的类型,可以是以下之一:
- ‘bandpass’
- ‘lowpass’
- ‘highpass’
- ‘peak’
默认类型是 '带通'。
- tftype
设置目标过滤器的类型,可以是以下之一:
- ‘bell’
- ‘lowshelf’
- ‘highshelf’
默认类型是 '钟'。
- auto
自动从检测过滤器收集阈值。默认情况下是'残疾人'。此选项可用于检测输入音频流的特定时间帧内的阈值,在这种情况下选项值会在运行时更改。
可用值为:
- ‘disabled’
禁用使用自动收集的阈值。
- ‘off’
停止选取阈值。
- ‘on’
开始选取阈值。
- ‘adaptive’
通过计算滑动窗口熵来自适应选取阈值。
- precision
设置处理样品时使用的精度。
- auto
根据其他过滤器自动选择内部样本格式。
- float
始终使用单浮点精度样本格式。
- double
始终使用双浮点精度样本格式。
36.15.1 命令
该过滤器支持以上所有选项作为命令。
36.16 adynamicsmooth
对输入音频流应用动态平滑。
下面是接受的选项的描述。
- sensitivity
设置对频率波动的敏感度。默认值为 2。允许的范围为 0 到 1e+06。
- basefreq
设置平滑的基频。默认值为 22050。允许的范围为 2 到 1e+06。
36.16.1 命令
该过滤器支持以上所有选项作为命令。
36.17 aecho
对输入音频应用回声。
回声是声音的反射,当说话或喊叫时,在山脉(有时是大型建筑物)中自然会产生回声;数字回声效果模拟这种行为,通常用于帮助填充单个乐器或人声的声音。原始信号与反射信号之间的时间差为delay
,反射信号的响度为decay
。多个回声可以有不同的延迟和衰减。
下面是接受参数的描述。
- in_gain
设置反射信号的输入增益。默认为
0.6
.- out_gain
设置反射信号的输出增益。默认为
0.3
.- delays
设置原始信号和反射信号之间的时间间隔列表(以毫秒为单位),以“|”分隔。每个的允许范围
delay
是(0 - 90000.0]
. 默认为1000
.- decays
设置以“|”分隔的反射信号响度列表。每个的允许范围
decay
是(0 - 1.0]
. 默认为0.5
.
36.17.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.18 aemphasis
音频强调滤波器使用不同的滤波器曲线创建或恢复直接取自 LP 或强调 CD 的材料。例如,要将音乐存储在黑胶唱片上,必须首先通过滤波器改变信号,以消除这种记录介质的缺点。一旦播放材料,就必须应用逆滤波器来恢复频率响应的失真。
该过滤器接受以下选项:
- level_in
设置输入增益。
- level_out
设置输出增益。
- mode
设置过滤模式。用于恢复材质使用
reproduction
模式,否则使用production
模式。默认为reproduction
模式。- type
设置过滤器类型。选择介质。可以是以下之一:
- col
选择哥伦比亚。
- emi
选择 EMI。
- bsi
选择 BSI (78RPM)。
- riaa
选择美国唱片业协会。
- cd
选择光盘 (CD)。
- 50fm
选择 50μs (FM)。
- 75fm
选择 75μs (FM)。
- 50kf
选择 50μs (FM-KF)。
- 75kf
选择 75μs (FM-KF)。
36.18.1 命令
该过滤器支持以上所有选项作为命令。
36.19 aeval
根据指定的表达式修改音频信号。
该滤波器接受一个或多个表达式(每个通道一个),这些表达式被评估并用于修改相应的音频信号。
它接受以下参数:
- exprs
为每个单独的通道设置以“|”分隔的表达式列表。如果输入通道的数量大于表达式的数量,则最后指定的表达式将用于剩余的输出通道。
- channel_layout, c
设置输出通道布局。如果未指定,则通道布局由表达式的数量指定。如果设置为 '相同的',默认情况下它将使用相同的输入通道布局。
exprs中的每个表达式可以包含以下常量和函数:
- ch
当前表达式的通道号
- n
评估样本的编号,从0开始
- s
采样率
- t
评估样本的时间(以秒为单位)
- nb_in_channels
- nb_out_channels
输入输出通道数
- val(CH)
编号为CH的输入通道的值
注意:此过滤器速度很慢。为了更快地处理,您应该使用专用过滤器。
36.19.1 示例
- 半卷:
aeval=val(ch)/2:c=same
- 第二通道的反转相位:
aeval=val(0)|-val(1)
36.20 aexciter
激励器用于产生原始信号中不存在的高声音。这是通过创建信号的谐波失真来完成的,这些谐波失真的范围受到限制并添加到原始信号中。激励器提高音频信号的上端,而不是像均衡器那样简单地提高较高频率来产生更“清脆”或“明亮”的声音。
该过滤器接受以下选项:
- 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 赫兹。
- ceil
设置产生谐波的频率上限。允许的范围为 9999 至 20000 Hz。如果值低于 10000 Hz,则不施加限制。
- listen
将原始信号静音并仅输出添加的谐波。默认情况下是禁用的。
36.20.1 命令
该过滤器支持以上所有选项作为命令。
36.21 afade
对输入音频应用淡入/淡出效果。
下面是接受参数的描述。
- type, t
指定效果类型,可以是
in
淡入效果,也out
可以是淡出效果。默认为in
.- start_sample, ss
指定开始应用淡入淡出效果的起始样本编号。默认值为 0。
- nb_samples, ns
指定淡入淡出效果必须持续的样本数。在淡入效果结束时,输出音频将具有与输入音频相同的音量,在淡出过渡结束时,输出音频将静音。默认值为 44100。
- start_time, st
指定淡入淡出效果的开始时间。默认值为 0。该值必须指定为持续时间;请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。如果设置,则使用此选项而不是start_sample。
- duration, d
指定淡入淡出效果的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。在淡入效果结束时,输出音频将具有与输入音频相同的音量,在淡出过渡结束时,输出音频将静音。默认情况下,持续时间由nb_samples确定。如果设置,则使用此选项而不是nb_samples。
- curve
设置淡入淡出过渡曲线。
它接受以下值:
- tri
选择三角形、线性斜率(默认)
- qsin
选择正弦波的四分之一
- hsin
选择正弦波的一半
- esin
选择指数正弦波
- log
选择对数
- ipar
选择倒抛物线
- qua
选择二次
- cub
选择立方
- squ
选择平方根
- cbr
选择立方根
- par
选择抛物线
- exp
选择指数
- iqsin
选择正弦波的反转四分之一
- ihsin
选择正弦波的反半部分
- dese
选择双指数座位
- desi
选择双指数 sigmoid
- losi
选择逻辑 sigmoid
- sinc
选择正弦基函数
- isinc
选择反正弦基函数
- quat
选择四次
- quatr
选择四次根
- qsin2
选择正弦波的四分之一平方
- hsin2
选择正弦波的平方一半
- nofade
未应用淡入淡出
- silence
设置淡入的初始增益或淡出的最终增益。默认值为
0.0
。- unity
设置淡出的初始增益或淡入的最终增益。默认值为
1.0
。
36.21.1 命令
该过滤器支持以上所有选项作为命令。
36.21.2 示例
- 音频前 15 秒淡入淡出:
afade=t=in:ss=0:d=15
- 淡出 900 秒音频的最后 25 秒:
afade=t=out:st=875:d=25
36.22 afftdn
使用 FFT 对音频样本进行去噪。
下面是接受参数的描述。
- noise_reduction, nr
以 dB 为单位设置降噪量,允许范围为 0.01 至 97。默认值为 12 dB。
- noise_floor, nf
以 dB 为单位设置本底噪声,允许范围为 -80 至 -20。默认值为 -50 dB。
- noise_type, nt
设置噪音类型。
它接受以下值:
- white, w
选择白噪声。
- vinyl, v
选择黑胶噪音。
- shellac, s
选择虫胶噪音。
- custom, c
选择在选项中定义的自定义噪音
bn
。默认值为白噪声。
- band_noise, bn
为 15 个频段中的每一个频段设置自定义频段噪声配置文件。条带由“ ”或“|”分隔。
- residual_floor, rf
以 dB 为单位设置剩余下限,允许范围为 -80 至 -20。默认值为 -38 dB。
- track_noise, tn
启用本底噪声跟踪。默认情况下是禁用的。启用此功能后,本底噪声会自动调整。
- track_residual, tr
启用残留跟踪。默认情况下是禁用的。
- output_mode, om
设置输出模式。
它接受以下值:
- input, i
传递输入不变。
- output, o
过滤掉通过噪音。
- noise, n
仅传递噪音。
默认值为输出。
- adaptivity, ad
设置自适应因子,用于适应每个频率仓的增益调整的速度。值0可以立即适应,而较高的值反应速度要慢得多。允许的范围是从0到1。默认值为0.5。
- floor_offset, fo
设置本底噪声偏移因子。该选项用于调整应用于测量本底噪声的偏移。它仅在启用本底噪声跟踪时有效。允许的范围是从-2.0到2.0。默认值为1.0。
- noise_link, nl
设置用于多通道音频的噪声链接。
它接受以下值:
- none
使用未改变的通道的本底噪声。
- min
使用测量的所有通道的最小本底噪声。
- max
使用测量的所有通道的最大本底噪声。
- average
使用测量的所有通道的平均本底噪声。
默认值为min。
- band_multiplier, bm
设置频带乘数因子,用于跨频率仓扩展频带的量。允许的范围是0.2到5。默认值为1.25。
- sample_noise, sn
切换从输入音频捕获和测量噪声轮廓。
它接受以下值:
- start, begin
开始样本噪声捕获。
- stop, end
停止采样噪声捕获并测量新的噪声带轮廓。
默认值为
none
。
- gain_smooth, gs
设置增益平滑空间半径,用于平滑应用于每个频率仓的增益。有助于减少随机音乐噪声伪影。较高的值会增加增益的平滑度。允许的范围是从
0
到50
。默认值为0
。
36.22.1 命令
该过滤器支持上述一些选项作为命令。
36.22.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.23 afftfilt
将任意表达式应用于频域中的样本。
- real
为每个单独通道设置频域实数表达式,以“|”分隔。默认为“重新”。如果输入通道的数量大于表达式的数量,则最后指定的表达式将用于剩余的输出通道。
- imag
为每个由“|”分隔的单独通道设置频域虚数表达式。默认为“im”。
real和imag中的每个表达式都可以包含以下常量和函数:
- sr
采样率
- b
当前频率档号
- nb
可用垃圾箱数量
- ch
当前表达式的通道号
- chs
通道数
- pts
当前帧点数
- re
当前通道频率仓的当前实部
- im
当前通道频率仓的当前虚部
- real(b, ch)
返回位置 ( bin , Channel ) 处频率 bin 的实部值
- imag(b, ch)
返回位置 ( bin , Channel ) 处频率 bin 的虚部值
- win_size
设置窗口大小。允许的范围是从 16 到 131072。默认值为
4096
- win_func
设置窗函数。
它接受以下值:
- ‘rect’
- ‘bartlett’
- ‘hann, hanning’
- ‘hamming’
- ‘blackman’
- ‘welch’
- ‘flattop’
- ‘bharris’
- ‘bnuttall’
- ‘bhann’
- ‘sine’
- ‘nuttall’
- ‘lanczos’
- ‘gauss’
- ‘tukey’
- ‘dolph’
- ‘cauchy’
- ‘parzen’
- ‘poisson’
- ‘bohman’
- ‘kaiser’
默认为
hann
.- overlap
设置窗口重叠。如果设置为 1,将选择所选窗函数的推荐重叠。默认为
0.75
.
36.23.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.24 afir
应用任意有限脉冲响应滤波器。
该滤波器设计用于应用长 FIR 滤波器,最长可达 60 秒。
它可用作数字分频滤波器、房间均衡、串扰消除、波场合成、可听化、立体混响、立体混响和空间化的组件。
该滤波器使用高于第一个流的流作为 FIR 系数。如果非第一个流拥有单个通道,则它将用于第一个流中的所有输入通道,否则非第一个流中的通道数必须与第一个流中的通道数相同。
它接受以下参数:
- dry
设置干增益。这设置输入增益。
- wet
设置湿增益。这设置了最终输出增益。
- length
设置脉冲响应滤波器长度。默认值为 1,表示处理整个 IR。
- gtype
启用应用根据 IR 功率测量的增益。
设置用于自动增益测量的方法。
- none
不要应用任何增益。
- peak
选择峰值增益,非常保守的做法。这是默认值。
- dc
选择直流增益,应用有限。
- gn
选择噪声增益方法,这是最流行的一种。
- ac
选择交流增益。
- rms
选择 RMS 增益。
- irgain
设置在滤波之前应用于 IR 系数的增益。允许的范围是 0 到 1。在使用gtype选项应用任何增益之后应用此增益。
- irfmt
设置IR码流的格式。可以是
mono
或input
. 默认为input
.- maxir
设置允许的最大脉冲响应滤波器持续时间(以秒为单位)。默认值为 30 秒。允许的范围是 0.1 到 60 秒。
- response
在附加视频流中显示 IR 频率响应、幅度(洋红色)、相位(绿色)和群延迟(黄色)。默认情况下它是禁用的。
- channel
设置显示频率响应的 IR 通道。默认情况下显示第一个频道。仅当启用 响应时才使用此选项。
- 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 时加载并准备所有 IR。默认为init
.
36.24.1 示例
- 使用单声道 IR 文件作为第二个输入将混响应用于流,使用 ffmpeg 完成命令:
ffmpeg -i input.wav -i middle_tunnel_1way_mono.wav -lavfi afir output.wav
- 应用给定输入立体声流的真实立体声处理,以及左右声道的两个立体声脉冲响应,脉冲响应文件是名为 l_ir.wav 和 r_ir.wav 的文件:
"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:gtype=gn:irgain=-5dB,pan=stereo|FL<c0+c2|FR<c1+c3"
36.25 aformat
设置输入音频的输出格式约束。该框架将协商最合适的格式以最小化转换。
它接受以下参数:
- sample_fmts, f
以“|”分隔的请求示例格式列表。
- sample_rates, r
以“|”分隔的请求采样率列表。
- channel_layouts, cl
以“|”分隔的请求通道布局列表。
有关所需语法, 请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 通道布局部分。
如果省略参数,则允许使用所有值。
强制输出为无符号 8 位或有符号 16 位立体声
aformat=sample_fmts=u8|s16:channel_layouts=stereo
36.26 afreqshift
对输入音频样本应用频移。
该过滤器接受以下选项:
- shift
指定频移。允许的范围是 -INT_MAX 到 INT_MAX。默认值为 0.0。
- level
设置应用于最终输出的输出增益。允许的范围是从 0.0 到 1.0。默认值为 1.0。
- order
设置用于过滤的过滤顺序。允许的范围是 1 到 16。默认值为 8。
36.26.1 命令
该过滤器支持以上所有选项作为命令。
36.27 afwtdn
使用小波减少输入样本的宽带噪声。
下面是接受的选项的描述。
- sigma
设置噪声西格玛,允许范围为 0 到 1。默认值为 0。此选项控制应用于输入样本的去噪强度。设置此选项的最有用的方法是通过分贝,例如。-45分贝。
- 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.27.1 命令
该过滤器支持以上所有选项作为命令。
36.28 agate
门主要用于减少信号的较低部分。这种信号处理减少了有用信号之间的干扰噪声。
门控是通过检测低于所选级别阈值的音量 并将其除以设置的因子来完成的。本底噪声的底部通过range设置。由于对信号的精确操作会导致波形失真,因此随着时间的推移,波形的减少会趋于平衡。这是通过设置Attack和Release来完成的。
攻击决定了信号必须下降到阈值以下多长时间才会发生任何减少,而释放则设置信号必须上升到阈值以上以再次减少减少的时间。比所选起音时间短的信号将保持不变。
- 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.28.1 命令
该过滤器支持以上所有选项作为命令。
36.29 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
在附加视频流中显示 IR 频率响应、幅度(洋红色)、相位(绿色)和群延迟(黄色)。默认情况下它是禁用的。
- channel
设置显示频率响应的 IR 通道。默认情况下显示第一个频道。仅当启用 响应时才使用此选项。
- size
设置视频流大小。仅当启用 响应时才使用此选项。
tf
和格式中的系数sf
以空格分隔并按升序排列。
格式中的系数zp
由空格分隔,系数的顺序并不重要。格式中的系数是具有izp
虚数单位的复数
。
可以为每个通道提供不同的系数和增益,在这种情况下使用“|” 分离系数或增益。最后提供的系数将用于所有剩余通道。
36.29.1 示例
- 在 5000Hz 左右应用 2 极椭圆陷波以获得 48000 Hz 采样率:
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
- 应用三阶模拟归一化巴特沃斯低通滤波器,使用模拟传递函数格式:
aiir=z=1.3057 0 0 0:p=1.3057 2.3892 2.1860 1:f=sf:r=d
36.30 alimiter
限制器防止输入信号上升超过所需阈值。该限制器使用前瞻技术来防止信号失真。这意味着信号处理后有一个小的延迟。请记住,它产生的延迟是您设置的起音时间。
该过滤器接受以下选项:
- level_in
设置输入增益。默认值为 1。
- level_out
设置输出增益。默认值为 1。
- limit
不要让高于此电平的信号通过限制器。默认值为 1。
- attack
限制器将在这段时间内达到其衰减水平(以毫秒为单位)。默认值为 5 毫秒。
- release
在这毫秒内从限制返回到衰减 1.0。默认值为 50 毫秒。
- asc
当始终需要增益降低时,ASC 负责释放到平均降低水平,而不是在释放时间中达到 0 的降低。
- asc_level
选择释放时间受 ASC 影响的程度,0 表示释放时间几乎没有变化,而 1 表示释放时间更长。
- level
自动电平输出信号。默认启用。如果启用,这会将音频标准化回 0dB。
- latency
使用带有攻击参数的前瞻缓冲区集来补偿所引入的延迟。当流达到 EOF 时,还会刷新前瞻缓冲区中的有效音频数据。
根据所选设置,建议在应用此过滤器之前 使用aresample对输入进行 2 倍或 4 倍上采样。
36.31 allpass
应用中心频率(以 Hz 为单位)频率和滤波器宽度宽度 的两极全通滤波器 。全通滤波器改变音频的频率与相位关系,而不改变其频率与幅度关系。
该过滤器接受以下选项:
- frequency, f
设置频率(以 Hz 为单位)。
- width_type, t
设置方法来指定滤波器的带宽。
- h
赫兹
- q
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.31.1 命令
该过滤器支持以下命令:
- frequency, f
更改全通频率。该命令的语法是:“频率”
- width_type, t
更改全通 width_type。该命令的语法是:“ width_type ”
- width, w
更改全通宽度。该命令的语法是:“宽度”
- mix, m
更改全通混合。该命令的语法是:“ mix ”
36.32 aloop
循环音频样本。
该过滤器接受以下选项:
- loop
设置循环次数。将此值设置为 -1 将导致无限循环。默认值为 0。
- size
设置最大样本数。默认值为 0。
- start
设置循环的第一个样本。默认值为 0。
- time
设置循环开始时间(以秒为单位)。仅当名为start的选项设置为时才使用
-1
。
36.33 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.33.1 示例
- 将两个单声道文件合并为立体声流:
amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
- 多重合并假设 1 个视频流和 6 个音频流输入.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.34 amix
将多个音频输入混合为一个输出。
请注意,此过滤器仅支持浮动样本(合并 和平移音频过滤器支持多种格式)。如果amix 输入具有整数样本,则将自动插入aresample以执行到浮点样本的转换。
它接受以下参数:
- inputs
输入的数量。如果未指定,则默认为 2。
- duration
如何确定流结束。
- longest
最长输入的持续时间。(默认)
- shortest
最短输入的持续时间。
- first
第一次输入的持续时间。
- dropout_transition
输入流结束时音量重新标准化的转换时间(以秒为单位)。默认值为 2 秒。
- weights
将每个输入音频流的权重指定为由空格分隔的数字序列。如果与输入数量相比指定的权重较少,则最后一个权重将分配给其余输入。每个输入的默认权重为 1。
- normalize
始终缩放输入,而不是仅对样本求和。如果禁用此选项,如果输入在此过滤器过滤之前或之后未标准化,请注意严重削波。默认情况下启用。
36.34.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.34.2 命令
该过滤器支持以下命令:
- weights
- normalize
语法与同名选项相同。
36.35 amultiply
将第一音频流与第二音频流相乘并将结果存储在输出音频流中。乘法是通过将第一流中的每个样本与第二流中相同位置的样本相乘来完成的。
通过这种逐元素乘法,可以创建幅度衰减和幅度调制。
36.36 anequalizer
每个通道的高阶参数多频段均衡器。
它接受以下参数:
- params
-
该选项字符串的格式为:“c chn f= cf w= w g= g t= f | ...” 每个均衡器频段由“|”分隔。
- chn
设置要应用均衡的通道号。如果输入没有该通道,则该条目将被忽略。
- f
设置频段的中心频率。如果输入不具有该频率,则该条目将被忽略。
- w
设置带宽(以赫兹为单位)。
- g
设置频带增益(以 dB 为单位)。
- t
设置频段的滤波器类型,可选,可以是:
- ‘0’
巴特沃斯,这是默认的。
- ‘1’
切比雪夫1型。
- ‘2’
切比雪夫2型。
- curves
使用此选项,均衡器的激活频率响应将显示在视频流中。
- size
设置视频流大小。仅当激活曲线选项时才有用。
- mgain
设置将显示的最大增益。仅当激活曲线选项时才有用。将其设置为合理的值可以显示从彼此太接近的相邻频带导出的增益,因此当两者都激活时会产生更高的增益。
- fscale
设置用于绘制视频输出中的频率响应的频率比例。可以是线性或对数。默认为对数。
- colors
设置要在视频流中显示的每个通道曲线的颜色。这是由空格或“|”分隔的颜色名称列表。无法识别或缺失的颜色将被白色替换。
36.36.1 示例
- 使用切比雪夫 1 型滤波器将前 2 个通道的中心频率 200Hz 和宽度 100 Hz 的增益降低 10:
anequalizer=c0 f=200 w=100 g=-10 t=1|c1 f=200 w=100 g=-10 t=1
36.36.2 命令
该过滤器支持以下命令:
- change
更改现有的过滤器参数。命令的语法为:“ fN |f= freq |w= width |g= Gain ”
fN为现有过滤器编号,从 0 开始,如果没有可用的过滤器则返回错误。 freq设置新的频率参数。 width设置新的宽度参数(以赫兹为单位)。 增益设置新的增益参数(以 dB 为单位)。
使用 asendcmd 的完整过滤器调用可能如下所示: asendcmd=c='4.0 anequalizer change 0|f=200|w=50|g=1',anequalizer=...
36.37 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.37.1 命令
该过滤器支持以上所有选项作为命令。
36.38 anlmf, anlms
使用第二个音频流将归一化最小均值(平方|第四)算法应用于第一个音频流。
该自适应滤波器用于通过查找与生成误差信号的最小均方相关的滤波器系数来模拟所需的滤波器(所需的第二输入音频流与实际信号(第一输入音频流)之间的差异)。
下面是接受的选项的描述。
- order
设置过滤器顺序。
- mu
设置过滤器μ。
- eps
设置过滤器 eps。
- leakage
设置过滤器泄漏量。
- out_mode
它接受以下值:
- i
通过第一个输入。
- d
通过第二个输入。
- o
通过所需的第二输入和误差信号估计之间的差异。
- n
通过输入、第一输入和误差信号估计之间的差异。
- e
通过误差信号估计样本。
默认值为o。
36.38.1 示例
- 该滤波器的许多用途之一是降噪,输入音频使用延迟固定量的相同样本进行过滤,立体声音频的一个例子是:
asplit[a][b],[a]adelay=32S|32S[a],[b][a]anlms=order=128:leakage=0.0005:mu=.5:out_mode=o
36.38.2 命令
此过滤器支持与选项相同的命令,但不包括选项order
。
36.39 anull
将音频源不变地传递到输出。
36.40 apad
用静音填充音频流的末尾。
这可以与ffmpeg
-最短将音频流扩展到与视频流相同的长度。
下面是接受的选项的描述。
- packet_size
设置静默数据包大小。默认值为 4096。
- pad_len
设置添加到末尾的静音样本数。达到该值后,流将终止。该选项与整个长度。
- whole_len
设置输出音频流中的最小样本总数。如果该值比输入音频长度长,则会在末尾添加静音,直到达到该值。该选项与垫长。
- pad_dur
指定要添加的静音样本的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。仅当设置为非负值时才使用。
- whole_dur
指定输出音频流中的最小总持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。仅当设置为非负值时才使用。如果该值比输入音频长度长,则会在末尾添加静音,直到达到该值。该选项与焊盘_杜尔
如果两者都不是垫长也不整个长度也不焊盘_杜尔 也不整个_dur设置选项后,过滤器将无限期地在输入流的末尾添加静音。
请注意,对于 ffmpeg 4.4 及更早版本,零焊盘_杜尔或者 整个_dur还导致过滤器无限期地添加静音。
36.40.1 示例
- 在输入末尾添加 1024 个静音样本:
apad=pad_len=1024
- 确保音频输出至少包含 10000 个样本,如果需要,请用静音填充输入:
apad=whole_len=10000
- 用于
ffmpeg
用静音填充音频输入,以便视频流始终是最短的,并且在使用时将被转换到输出文件的末尾最短 选项:ffmpeg -i VIDEO -i AUDIO -filter_complex "[1:0]apad" -shortest OUTPUT
36.41 aphaser
向输入音频添加移相效果。
移相滤波器在频谱中创建一系列波峰和波谷。波峰和波谷的位置经过调制,使其随时间变化,从而产生扫描效果。
下面是接受参数的描述。
- in_gain
设置输入增益。默认值为 0.4。
- out_gain
设置输出增益。默认值为 0.74
- delay
设置延迟(以毫秒为单位)。默认值为 3.0。
- decay
设置衰减。默认值为 0.4。
- speed
设置调制速度(以 Hz 为单位)。默认值为 0.5。
- type
设置调制类型。默认为三角形。
它接受以下值:
- ‘triangular, t’
- ‘sinusoidal, s’
36.42 aphaseshift
对输入音频样本应用相移。
该过滤器接受以下选项:
- shift
指定相移。允许的范围是从 -1.0 到 1.0。默认值为 0.0。
- level
设置应用于最终输出的输出增益。允许的范围是从 0.0 到 1.0。默认值为 1.0。
- order
设置用于过滤的过滤顺序。允许的范围是 1 到 16。默认值为 8。
36.42.1 命令
该过滤器支持以上所有选项作为命令。
36.43 apsnr
测量音频峰值信噪比。
该过滤器采用两个音频流作为输入,并输出第一个音频流。结果以任一输入端每通道的 dB 为单位。
36.44 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.44.1 命令
该过滤器支持以上所有选项作为命令。
36.45 apulsator
音频脉动器是介于自动平移器和颤音之间的东西。但它也可以产生有趣的立体声效果。Pulsator 基于具有不同波形和移相的 LFO(低频振荡器)来改变左右声道的音量。该滤波器能够定义左右通道之间的偏移。偏移量 0 表示两个 LFO 形状相互匹配。左右声道的改变相同——传统的颤音。50% 的偏移意味着右通道的形状在相位上精确偏移(或向后移动大约一半的频率) - 波轮充当自动声像调节器。在 1 处,两条曲线再次匹配。其间的每个设置都会在所有级之间无间隙地移动相移,并产生一些具有正弦波和三角波的“旁路”声音。将偏移设置得越接近 1(从 0.5 开始),信号从左扬声器传递到右扬声器的速度就越快。
该过滤器接受以下选项:
- level_in
设置输入增益。默认情况下为 1。范围为 [0.015625 - 64]。
- level_out
设置输出增益。默认情况下为 1。范围为 [0.015625 - 64]。
- mode
设置 LFO 将使用的波形形状。可以是以下之一:正弦波、三角波、方波、锯齿波或锯齿波。默认为正弦。
- amount
设置调制。定义 LFO 影响原始信号的程度。
- offset_l
设置左声道偏移。默认值为 0。允许的范围为 [0 - 1]。
- offset_r
设置右通道偏移。默认值为 0.5。允许的范围是 [0 - 1]。
- width
设置脉冲宽度。默认值为 1。允许的范围为 [0 - 2]。
- timing
设置可能的计时模式。可以是以下之一:bpm、ms 或 Hz。默认为赫兹。
- bpm
设置节拍数。默认值为 120。允许的范围为 [30 - 300]。仅当计时设置为 bpm 时才使用。
- ms
设置女士。默认值为 500。允许的范围为 [10 - 2000]。仅当计时设置为毫秒时才使用。
- hz
设置频率(以 Hz 为单位)。默认值为 2。允许的范围为 [0.01 - 100]。仅当计时设置为 Hz 时才使用。
36.46 aresample
使用 libsresample 库将输入音频重新采样为指定参数。如果未指定,则过滤器将自动在其输入和输出之间进行转换。
该过滤器还能够拉伸/压缩音频数据以使其与时间戳匹配,或注入静音/剪切音频以使其与时间戳匹配,或者两者结合或都不做。
该过滤器接受语法 [ sample_rate :] resampler_options,其中sample_rate 表示采样率,resampler_options是键=值对的列表 ,以“:”分隔。 有关受支持选项的完整列表, 请参阅 ffmpeg-resampler(1) 手册中的 (ffmpeg-resampler)“重采样器选项”部分。
36.46.1 示例
- 将输入音频重新采样为 44100Hz:
aresample=44100
- 将样本拉伸/压缩到给定的时间戳,每秒最多补偿 1000 个样本:
aresample=async=1000
36.47 areverse
反转音频剪辑。
警告:此滤镜需要内存来缓冲整个剪辑,因此建议进行修剪。
36.47.1 示例
- 获取剪辑的前 5 秒并将其反转。
atrim=end=5,areverse
36.48 arls
使用第二个音频流将递归最小二乘算法应用于第一个音频流。
该自适应滤波器用于通过递归查找与生成误差信号的最小加权线性最小二乘成本函数(所需的第二个输入音频流与实际信号、第一个输入之间的差异)相关的滤波器系数来模拟所需的滤波器。音频流)。
下面是接受的选项的描述。
- order
设置过滤器顺序。
- lambda
设置遗忘因子。
- delta
设置系数以初始化内部协方差矩阵。
- out_mode
设置滤波器输出样本。它接受以下值:
- i
通过第一个输入。
- d
通过第二个输入。
- o
通过所需的第二输入和误差信号估计之间的差异。
- n
通过输入、第一输入和误差信号估计之间的差异。
- e
通过误差信号估计样本。
默认值为o。
36.49 arnndn
使用循环神经网络减少语音噪声。
该过滤器接受以下选项:
- model, m
设置要加载的火车模型文件。此选项始终是必需的。
- mix
设置将过滤后的样本混合到最终输出中的量。允许的范围是从 -1 到 1。默认值为 1。负值很特殊,它们设置在最终滤波器输出中保留多少过滤的噪声。将此选项设置为 -1 可听到从输入信号中消除的实际噪声。
36.49.1 命令
该过滤器支持以上所有选项作为命令。
36.50 asdr
测量音频信号失真比。
该过滤器采用两个音频流作为输入,并输出第一个音频流。结果以任一输入端每通道的 dB 为单位。
36.51 asetnsamples
设置每个输出音频帧的样本数。
最后一个输出数据包可能包含不同数量的样本,因为当输入音频信号结束时,过滤器将刷新所有剩余的样本。
该过滤器接受以下选项:
- nb_out_samples, n
设置每个输出音频帧的帧数。该数字旨在表示每个通道的样本数。默认值为 1024。
- pad, p
如果设置为 1,过滤器将用零填充最后一个音频帧,以便最后一个帧将包含与前一个帧相同数量的样本。默认值为 1。
例如,要将每帧样本数设置为 1234 并禁用最后一帧的填充,请使用:
asetnsamples=n=1234:p=0
36.52 asetrate
设置采样率而不改变 PCM 数据。这将导致速度和音调的变化。
该过滤器接受以下选项:
- sample_rate, r
设置输出采样率。默认值为 44100 Hz。
36.53 ashowinfo
显示包含每个输入音频帧的各种信息的行。输入音频未修改。
所示行包含一系列键/值对,其形式为 key : value。
输出中显示以下值:
- n
输入帧的(连续)编号,从 0 开始。
- pts
输入帧的呈现时间戳,以时基单位表示;时基取决于滤波器输入板,通常为 1/ sample_rate。
- pts_time
输入帧的呈现时间戳(以秒为单位)。
- fmt
样本格式。
- chlayout
渠道布局。
- rate
音频帧的采样率。
- nb_samples
帧中的样本数(每个通道)。
- checksum
音频数据的 Adler-32 校验和(以十六进制打印)。对于平面音频,数据被视为所有平面都是串联的。
- plane_checksums
每个数据平面的 Adler-32 校验和列表。
36.54 asisdr
测量音频缩放不变信号失真比。
该过滤器采用两个音频流作为输入,并输出第一个音频流。结果以任一输入端每通道的 dB 为单位。
36.55 asoftclip
应用音频软剪辑。
软削波是一种失真效应,其中信号幅度沿着平滑曲线饱和,而不是硬削波的陡峭形状。
该过滤器接受以下选项:
- type
设置软剪辑的类型。
它接受以下值:
- hard
- tanh
- atan
- cubic
- exp
- alg
- quintic
- sin
- erf
- threshold
设置开始剪辑的阈值。默认值为 0dB 或 1。
- output
设置应用于输出的增益。默认值为 0dB 或 1。
- param
设置控制 sigmoid 函数的附加参数。
- oversample
设置过采样因子。
36.55.1 命令
该过滤器支持以上所有选项作为命令。
36.56 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
选择要测量的参数。元数据键可以用作标志,默认为全部它衡量一切。 没有任何禁用所有测量。
每个元数据键的列表如下:
- mean
- variance
- centroid
- spread
- skewness
- kurtosis
- entropy
- flatness
- crest
- flux
- slope
- decrease
- rolloff
36.57 asr
自动语音识别
该过滤器使用 PocketSphinx 进行语音识别。要启用此过滤器的编译,您需要使用
--enable-pocketsphinx
.
它接受以下选项:
- rate
设置输入音频的采样率。默认值为
16000
. 这需要匹配语音模型,否则结果会很差。- hmm
设置包含声学模型文件的字典。
- dict
设置发音词典。
- lm
设置语言模型文件。
- lmctl
设置语言模型集。
- lmname
设置要使用的语言模型。
- logfn
设置日志消息的输出。
过滤器将识别的语音导出为帧元数据lavfi.asr.text
。
36.58 astats
显示音频通道的时域统计信息。计算并显示每个音频通道的统计数据,并且在适用的情况下还给出总体数据。
它接受以下选项:
- length
短窗口长度(以秒为单位),用于峰值和谷值 RMS 测量。默认值为
0.05
(50 毫秒)。允许的范围是[0 - 10]
.- metadata
-
设置元数据注入。所有元数据键都以 为前缀
lavfi.astats.X
,其中X
是从 1 或 string 开始的通道号Overall
。默认为禁用。每个通道的可用键有: Bit_depth Crest_factor DC_offset Dynamic_range Entropy Entropy Flat_factor Max_difference Max_level Mean_difference Min_difference Min_level Noise_floor Noise_floor_count Number_of_Infs Number_of_NaNs Number_of_denormals Peak_count Abs_Peak_count Peak_level RMS_difference RMS_peak RMS_trough Zero_crossings Zero_crossings _率
对于
Overall
: Bit_depth DC_offset Entropy Flat_factor Max_difference Max_level Mean_difference Min_level Noise_floor Noise_floor_count Number_of_Infs Number_of_NaNs Number_of_denormals Number_of_samples Peak_count Abs_Peak_count Peak_level RMS_difference RMS_level RMS_peak RMS_trough _例如,完整的键看起来像
lavfi.astats.1.DC_offset
或lavfi.astats.Overall.Peak_count
。请阅读下面的按键说明。
- reset
设置重置之前计算累积统计数据的帧数。默认为禁用。
- measure_perchannel
选择每个通道测量的参数。元数据键可以用作标志,默认为全部它衡量一切。 没有任何禁用所有每通道测量。
- measure_overall
选择总体测量的参数。元数据键可以用作标志,默认为全部它衡量一切。 没有任何禁用所有总体测量。
测量键的说明如下:
- none
没有措施
- all
所有措施
- Bit_depth
音频的总体位深度,即每个样本使用的位数
- Crest_factor
峰值与 RMS 电平的标准比率(注:不是以 dB 为单位)
- DC_offset
从零开始的平均振幅位移
- Dynamic_range
测量的音频动态范围(以 dB 为单位)
- Entropy
在整个音频中测量的熵,通常针对白噪声测量值接近 1.0 的熵
- Flat_factor
信号在其峰值电平(即Min_level或Max_level) 的平坦度(即具有相同值的连续样本)
- 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
信号达到Min_level或Max_level的次数(不是样本数)
- Abs_Peak_count
从信号中获取的绝对样本达到Min_level和Max_level的最大绝对值的次数
- Peak_level
以 dBFS 为单位测量的标准峰值电平
- RMS_difference
两个连续样本之间的均方根差
- RMS_level
以 dBFS 为单位测量的标准 RMS 电平
- RMS_peak
- RMS_trough
在短窗口内测量的 RMS 电平的峰值和谷值,以 dBFS 为单位测量。
- Zero crossings
波形与零电平轴相交的点数
- Zero crossings rate
过零率和音频样本数
36.59 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.59.1 命令
该过滤器支持以上所有选项作为命令。
36.60 asubcut
削减低音炮频率。
该滤波器允许设置比高通滤波器更陡峭的自定义滚降,因此能够更多地衰减阻带中的频率内容。
该过滤器接受以下选项:
- cutoff
设置截止频率(以赫兹为单位)。允许的范围是 2 到 200。默认值为 20。
- order
设置过滤器顺序。可用值为 3 到 20。默认值为 10。
- level
设置输入增益电平。允许的范围是 0 到 1。默认值为 1。
36.60.1 命令
该过滤器支持以上所有选项作为命令。
36.61 asupercut
削减超频率。
该过滤器接受以下选项:
- cutoff
设置截止频率(以赫兹为单位)。允许的范围是 20000 到 192000。默认值为 20000。
- order
设置过滤器顺序。可用值为 3 到 20。默认值为 10。
- level
设置输入增益电平。允许的范围是 0 到 1。默认值为 1。
36.61.1 命令
该过滤器支持以上所有选项作为命令。
36.62 asuperpass
应用高阶巴特沃斯带通滤波器。
该过滤器接受以下选项:
- centerf
设置中心频率(以赫兹为单位)。允许的范围是 2 到 999999。默认值为 1000。
- order
设置过滤器顺序。可用值为 4 到 20。默认值为 4。
- qfactor
设置 Q 因子。允许的范围是 0.01 到 100。默认值为 1。
- level
设置输入增益电平。允许的范围是 0 到 2。默认值为 1。
36.62.1 命令
该过滤器支持以上所有选项作为命令。
36.63 asuperstop
应用高阶巴特沃斯带阻滤波器。
该过滤器接受以下选项:
- centerf
设置中心频率(以赫兹为单位)。允许的范围是 2 到 999999。默认值为 1000。
- order
设置过滤器顺序。可用值为 4 到 20。默认值为 4。
- qfactor
设置 Q 因子。允许的范围是 0.01 到 100。默认值为 1。
- level
设置输入增益电平。允许的范围是 0 到 2。默认值为 1。
36.63.1 命令
该过滤器支持以上所有选项作为命令。
36.64 atempo
调整音频节奏。
该滤波器仅接受一个参数,即音频速度。如果未指定,则滤波器将采用标称 1.0 速度。速度必须在 [0.5, 100.0] 范围内。
请注意,大于 2 的节奏将跳过一些样本,而不是将它们混合在一起。如果出于任何原因需要考虑,始终可以以菊花链方式连接多个 atempo 实例,以实现所需的产品节奏。
36.64.1 示例
- 将音频速度减慢至 80%:
atempo=0.8
- 要将音频速度加快到 300%:
atempo=3
- 要通过菊花链连接两个 atempo 实例将音频速度加快到 300%:
atempo=sqrt(3),atempo=sqrt(3)
36.64.2 命令
该过滤器支持以下命令:
- tempo
更改滤波器速度比例因子。该命令的语法是:“ tempo ”
36.65 atilt
将频谱倾斜滤波器应用于音频流。
该滤波器在任何指定频带上应用任何频谱滚降斜率。
该过滤器接受以下选项:
- freq
设置倾斜的中心频率(以 Hz 为单位)。默认值为 10000 Hz。
- slope
设置倾斜的坡度方向。默认值为 0。允许的范围为 -1 到 1。
- width
设置倾斜宽度。默认值为 1000。允许的范围为 100 到 10000。
- order
设置倾斜滤波器的顺序。
- level
设置输入音量级别。允许的范围是 0 到 4。默认值为 1。
36.65.1 命令
该过滤器支持以上所有选项作为命令。
36.66 atrim
修剪输入,使输出包含输入的一个连续子部分。
它接受以下参数:
- start
要保留的部分的开始时间戳(以秒为单位)。即带有时间戳开始的音频样本将是输出中的第一个样本。
- end
指定要删除的第一个音频样本的时间,即紧邻时间戳结尾的音频样本之前的音频样本将是输出中的最后一个样本。
- start_pts
与start相同,但此选项以样本而不是秒为单位设置开始时间戳。
- end_pts
与end相同,但此选项以样本而不是秒为单位设置结束时间戳。
- duration
输出的最大持续时间(以秒为单位)。
- start_sample
应输出的第一个样本的编号。
- end_sample
应删除的第一个样本的数量。
开始,结尾, 和期间表示为持续时间规格;请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分。
请注意,前两组开始/结束选项和期间 选项查看帧时间戳,而 _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.67 axcorrelate
计算两个输入音频流之间的归一化窗口互相关。
结果样本始终介于 -1 和 1 之间(包括 -1 和 1)。如果结果为 1,则意味着两个输入样本在所选片段中高度相关。结果 0 意味着它们根本不相关。如果结果为 -1,则意味着两个输入样本异相,这意味着它们相互抵消。
该过滤器接受以下选项:
- size
设置计算互相关的段的大小。默认值为 256。允许的范围为 2 到 131072。
- algo
设置互相关算法。可以是
slow
或fast
或best
。默认为best
. 快速算法假设任何给定段的平均值始终为零,因此需要进行的计算要少得多。这通常是不正确的,但对于典型的音频流来说是有效的。
36.67.1 示例
- 计算立体声音频流中通道之间的相关性:
ffmpeg -i stereo.wav -af channelsplit,axcorrelate=size=1024:algo=fast correlation.wav
36.68 bandpass
应用具有中心频率频率和(3dB 点)带宽的二极点巴特沃斯带通滤波器。csg选项选择恒定裙边增益(峰值增益 = Q),而不是默认值:恒定 0dB 峰值增益。滤波器以每倍频程 6dB(每十倍频程 20dB)衰减。
该过滤器接受以下选项:
- frequency, f
设置滤波器的中心频率。默认为
3000
.- csg
如果设置为 1,则为恒定裙边增益。默认为 0。
- width_type, t
设置方法来指定滤波器的带宽。
- h
赫兹
- q
Q 因子
- o
八度
- s
坡
- k
千赫
- width, w
以 width_type 单位指定滤波器的带宽。
- 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.68.1 命令
该过滤器支持以下命令:
- frequency, f
改变带通频率。该命令的语法是:“频率”
- width_type, t
更改带通宽度_类型。该命令的语法是:“ width_type ”
- width, w
改变带通宽度。该命令的语法是:“宽度”
- mix, m
改变带通混合。该命令的语法是:“ mix ”
36.69 bandreject
应用具有中心频率频率和(3dB 点)带宽 宽度 的两极巴特沃斯带阻滤波器。滤波器以每倍频程 6dB(每十倍频程 20dB)衰减。
该过滤器接受以下选项:
- frequency, f
设置滤波器的中心频率。默认为
3000
.- width_type, t
设置方法来指定滤波器的带宽。
- h
赫兹
- q
Q 因子
- o
八度
- s
坡
- k
千赫
- width, w
以 width_type 单位指定滤波器的带宽。
- 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.69.1 命令
该过滤器支持以下命令:
- frequency, f
更改带阻频率。该命令的语法是:“频率”
- width_type, t
更改带阻宽度_类型。该命令的语法是:“ width_type ”
- width, w
更改带阻宽度。该命令的语法是:“宽度”
- mix, m
更改带阻混音。该命令的语法是:“ mix ”
36.70 bass, lowshelf
使用两极搁置滤波器增强或减弱音频的低音(较低)频率,其响应类似于标准高保真音响的音调控制。这也称为搁置均衡 (EQ)。
该过滤器接受以下选项:
- gain, g
给出 0 Hz 时的增益。其有用范围约为 -20(大幅削减)到 +20(大幅提升)。使用正增益时要小心削波。
- frequency, f
设置滤波器的中心频率,因此可用于扩展或减小要提升或削减的频率范围。默认值为
100
赫兹。- width_type, t
设置方法来指定滤波器的带宽。
- h
赫兹
- q
Q 因子
- o
八度
- s
坡
- k
千赫
- width, w
确定过滤器的架过渡有多陡。
- poles, p
设置极数。默认值为 2。
- mix, m
在输出中使用多少过滤信号。默认值为 1。范围介于 0 和 1 之间。
- channels, c
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- normalize, n
归一化双二阶系数,默认情况下禁用。启用它会将直流幅度响应标准化为 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_type ”
- width, w
更改低音宽度。该命令的语法是:“宽度”
- gain, g
更改低音增益。该命令的语法是:“增益”
- mix, m
改变低音混音。该命令的语法是:“ mix ”
36.71 biquad
应用具有给定系数的双二阶 IIR 滤波器。其中b0、b1、b2和a0、a1、a2 分别是分子和分母系数。和channels,c指定要过滤的通道,默认情况下所有可用的通道都会被过滤。
36.71.1 命令
该过滤器支持以下命令:
- a0
- a1
- a2
- b0
- b1
- b2
更改双二阶参数。该命令的语法是:“ value ”
- 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.72 bs2b
Bauer 立体声到双耳转换,可改善立体声音频记录的耳机聆听效果。
要启用此过滤器的编译,您需要使用
--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
进给水平(以赫兹为单位)。
36.73 channelmap
将输入通道重新映射到新位置。
它接受以下参数:
- map
将通道从输入映射到输出。参数是一个以“|”分隔的映射列表,每个映射都采用或 in_channel形式。in_channel可以是输入通道的名称(例如 FL 表示左前)或其在输入通道布局中的索引。 out_channel是输出通道的名称或其在输出通道布局中的索引。如果未给出out_channel,则它隐式是一个索引,从零开始,每次映射加一。
in_channel-out_channel
- channel_layout
输出流的通道布局。
如果不存在映射,过滤器将隐式地将输入通道映射到输出通道,并保留索引。
36.73.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.74 channelsplit
将输入音频流中的每个通道拆分为单独的输出流。
它接受以下参数:
- channel_layout
输入流的通道布局。默认为“立体声”。
- channels
通道布局描述要提取为单独输出流的通道或“全部”以将每个输入通道提取为单独流。默认为“全部”。
选择输入中通道布局中不存在的通道将导致错误。
36.74.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.75 chorus
为音频添加合唱效果。
可以发出像合唱一样的单一声音,但也可以应用于乐器演奏。
合唱类似于具有短延迟的回声效果,但对于回声,延迟是恒定的,而对于合唱,则使用正弦或三角调制来改变延迟。调制深度定义了延迟之前或之后播放调制延迟的范围。因此,延迟的声音听起来会更慢或更快,即围绕原始声音调整的延迟声音,就像在合唱中一些人声稍微跑调一样。
它接受以下参数:
- in_gain
设置输入增益。默认值为 0.4。
- out_gain
设置输出增益。默认值为 0.4。
- delays
设置延迟。典型的延迟约为 40 毫秒至 60 毫秒。
- decays
集合衰减。
- speeds
设置速度。
- depths
设置深度。
36.75.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.76 compand
压缩或扩展音频的动态范围。
它接受以下参数:
- 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.76.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
- 2:1 压缩从 -6dB 开始:
compand=points=-80/-80|-6/-6|0/-3.8|20/3.5
- 2:1 压缩从 -9dB 开始:
compand=points=-80/-80|-9/-9|0/-5.3|20/2.9
- 2:1 压缩从 -12dB 开始:
compand=points=-80/-80|-12/-12|0/-6.8|20/1.9
- 2:1 压缩从 -18dB 开始:
compand=points=-80/-80|-18/-18|0/-9.8|20/0.7
- 3:1 压缩从 -15dB 开始:
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.77 compensationdelay
补偿延迟线是一种基于度量的延迟,用于补偿麦克风或扬声器的不同位置。
例如,您使用放置在不同位置的两个麦克风录制了吉他。由于声波前端在正常情况下具有固定速度,因此麦克风的相位可能会有所不同,具体取决于其位置和插入方式。当这些麦克风同相(同步)时,可以实现最佳的混音效果。请注意,麦克风之间的距离约为 30 厘米,使得一个麦克风捕获与另一个麦克风反相的信号。这使得最终的混音听起来喜怒无常。该滤波器通过向每个麦克风轨道添加不同的延迟并使它们同步来帮助解决相位问题。
以一首曲目为基础,将其他曲目一一同步,可以达到最佳效果。请记住,同步/延迟容差也取决于采样率。更高的采样率将提供更大的容差。
该过滤器接受以下参数:
- mm
设置毫米距离。这是微调的补偿距离。默认值为 0。
- cm
设置厘米距离。这是紧固距离设置的补偿距离。默认值为 0。
- m
设置米距离。这是硬距离设置的补偿距离。默认值为 0。
- dry
设定干燥量。未处理的(干)信号量。默认值为 0。
- wet
设定湿量。处理的(湿)信号量。默认值为 1。
- temp
设置温度(以摄氏度为单位)。这是环境温度。默认值为 20。
36.77.1 命令
该过滤器支持以上所有选项作为命令。
36.78 crossfeed
应用耳机交叉馈送滤波器。
Crossfeed 是混合立体声音频录制的左右声道的过程。它主要用于减少低频的极端立体声分离。
目的是为听众提供更多类似扬声器的声音。
该过滤器接受以下选项:
- 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.78.1 命令
该过滤器支持以上所有选项作为命令。
36.79 crystalizer
音频噪声锐化的简单算法。
该滤波器线性增加每个音频样本之间的差异。
该过滤器接受以下选项:
- i
设置效果强度(默认值:2.0)。范围必须在 -10.0 到 0(未改变的声音)到 10.0(最大效果)之间。要反向过滤,请使用负值。
- c
启用剪辑。默认情况下启用。
36.79.1 命令
该过滤器支持以上所有选项作为命令。
36.80 dcshift
对音频应用直流变换。
这对于消除音频中的直流偏移(可能是由录音链中的硬件问题引起)非常有用。直流偏移的影响是减少净空和体积。astats滤波器可用于确定信号是否具有 DC 偏移。
- shift
设置直流偏移,允许范围为[-1, 1]。它指示音频的偏移量。
- limitergain
选修的。它的值应远小于 1(例如 0.05 或 0.02),用于防止削波。
36.81 deesser
对音频样本应用嘶声消除。
- i
设置触发消除嘶声的强度。允许的范围是 0 到 1。默认值为 0。
- m
设置声音高音部分的闪避量。允许的范围是 0 到 1。默认值为 0.5。
- f
消除嘶声时保留多少原始频率内容。允许的范围是 0 到 1。默认值为 0.5。
- s
设置输出模式。
它接受以下值:
- i
传递输入不变。
- o
通过 ess 过滤掉。
- e
仅通过ess。
默认值为o。
36.82 dialoguenhance
增强立体声音频中的对话。
该滤波器接受立体声输入并产生环绕 (3.0) 声道输出。新制作的前置中置声道增强了原本在两个立体声声道中可用的语音对话。该滤波器输出左前和右前通道,与立体声输入中的可用通道相同。
该过滤器接受以下选项:
- original
设置原始中心系数以保持前中置通道输出。允许的范围是 0 到 1。默认值为 1。
- enhance
设置对话增强系数以置于前置中置声道输出。允许的范围是 0 到 3。默认值为 1。
- voice
设置语音检测系数。允许的范围是 2 到 32。默认值为 2。
36.82.1 命令
该过滤器支持以上所有选项作为命令。
36.83 drmeter
测量音频动态范围。
在非常动态的材料中发现 DR 值为 14 或更高。过渡材料中的 DR 为 8 至 13。低于 8 的任何值的动态都很差并且压缩程度很高。
该过滤器接受以下选项:
- length
设置窗口长度(以秒为单位),用于将音频分割成相等长度的片段。默认值为 3 秒。
36.84 dynaudnorm
动态音频标准化器。
该滤波器对输入音频应用一定量的增益,以使其峰值达到目标水平(例如0 dBFS)。然而,与更“简单”的归一化算法相比,动态音频归一化器*动态地*重新调整输入音频的增益因子。这允许对音频的“安静”部分应用额外的增益,同时避免失真或削波“大声”部分。换句话说:动态音频标准化器将“均衡”安静和响亮部分的音量,即每个部分的音量都达到相同的目标水平。但请注意,动态音频标准化器*无需*应用“动态范围压缩”即可实现此目标。它将保留音频文件每个部分*内*100% 的动态范围。
- 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,对于大多数输入来说,默认值应该足够了,通常不建议增加该值。不过,对于总体音量极低的输入,可能有必要允许更高的增益系数。但请注意,动态音频标准化器并不简单地应用“硬”阈值(即截止值高于阈值)。相反,将应用“S形”阈值函数。这样,增益因子将平滑地接近阈值,但永远不会超过该值。
- targetrms, r
设置目标 RMS。范围从 0.0 到 1.0。默认值为 0.0 - 禁用。默认情况下,动态音频标准化器执行“峰值”标准化。这意味着每个帧的最大局部增益因子(仅)由帧的最高幅度样本定义。这样,样本可以被尽可能多地放大而不超过最大信号电平,即没有削波。然而,动态音频标准化器也可以选择考虑帧的均方根(缩写为 RMS)。在电气工程中,RMS 通常用于确定时变信号的功率。因此,人们认为 RMS 比仅仅查看信号的峰值幅度更能近似“感知响度”。因此,通过将所有帧调整为恒定的 RMS 值,可以建立统一的“感知响度”。如果指定了目标 RMS 值,则帧的局部增益因子将定义为精确产生该 RMS 值的因子。但请注意,最大局部增益因子仍然受到帧的最高幅度样本的限制,以防止削波。
- coupling, n
启用通道耦合。默认情况下启用。默认情况下,动态音频标准化器会将所有通道放大相同的量。这意味着相同的增益因子将应用于所有通道,即最大可能的增益因子由“最大声”的通道确定。然而,在一些录音中,可能会发生不同通道的音量不均匀的情况,例如一个通道可能比其他通道“更安静”。在这种情况下,该选项可用于禁用通道耦合。这样,每个通道的增益因子将独立确定,仅取决于各个通道的最高幅度样本。这样可以协调不同通道的音量。
- correctdc, c
启用直流偏置校正。默认情况下是禁用的。音频信号(在时域中)是一系列样本值。在动态音频标准化器中,无论原始输入格式如何,这些样本值都在 -1.0 到 1.0 范围内表示。通常,音频信号或“波形”应以零点为中心。这意味着如果我们计算文件中或单个帧中所有样本的平均值,那么结果应该是 0.0 或至少非常接近该值。然而,如果平均值与 0.0 存在显着偏差(无论是正方向还是负方向),则称为 DC 偏置或 DC 偏移。由于直流偏置显然是不受欢迎的,因此动态音频标准化器提供了可选的直流偏置校正。启用 DC 偏置校正后,动态音频标准化器将确定每个输入帧的平均值或“DC 校正”偏移量,并从所有帧的样本值中减去该值,从而确保这些样本再次以 0.0 为中心。此外,为了避免帧边界处的“间隙”,DC校正偏移值将在相邻帧之间平滑地内插。
- altboundary, b
启用替代边界模式。默认情况下是禁用的。动态音频标准化器考虑每个帧周围的某个邻域。这包括前面的帧以及后面的帧。然而,对于位于音频文件的最开始和最后的“边界”帧,并非所有相邻帧都可用。特别是,对于音频文件中的前几帧,前面的帧是未知的。并且,类似地,对于音频文件中的最后几帧,后续帧是未知的。因此,出现了对于“边界”区域中的丢失帧应该假设哪些增益因子的问题。动态音频标准化器实现了两种模式来处理这种情况。默认边界模式假设丢失帧的增益因子恰好为 1.0,从而分别在输入的开头和结尾处产生平滑的“淡入”和“淡出”。
- compress, s
设置压缩因子。范围从 0.0 到 30.0。默认值为 0.0。默认情况下,动态音频标准化器不应用“传统”压缩。这意味着信号峰值不会被修剪,因此完整的动态范围将保留在每个局部邻域内。然而,在某些情况下,可能需要将动态音频标准化器的标准化算法与更“传统”的压缩相结合。为此,动态音频标准化器提供了可选的压缩(阈值)功能。如果(且仅当)启用压缩功能,所有输入帧将在实际标准化过程之前由软拐点阈值函数进行处理。简而言之,阈值函数将修剪所有幅度超过某个阈值的样本。然而,动态音频标准化器并不简单地应用固定阈值。相反,将为每个单独的帧调整阈值。一般来说,较小的参数会导致较强的压缩,反之亦然。不建议使用低于 3.0 的值,因为可能会出现声音失真。
- threshold, t
设置目标阈值。这指定了将被标准化的音频输入的最低允许幅度水平。如果输入帧音量高于该值,帧将被标准化。否则帧可能根本无法标准化。默认值设置为 0,这意味着所有输入帧都将被标准化。如果不想放大数字噪声,则此选项非常有用。
- channels, h
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- overlap, o
指定帧的重叠。如果设置为 0(默认),则不会发生帧重叠。使用>0和<1值将进行不太保守的增益调整,例如当framelen选项设置为较小值时,如果framelen选项值针对非零重叠进行补偿,则与零重叠情况相比,增益调整将在时间上更加平滑。
- curve, v
指定在计算应用于帧的增益时要使用的峰值映射曲线表达式。最大输出帧增益仍将受到前面提到的该滤波器的其他选项的限制。
该表达式可以包含以下常量:
- ch
当前频道号
- sn
当前样本数
- nb_channels
通道数
- t
以秒表示的时间戳
- sr
采样率
- p
当前帧峰值
36.84.1 命令
该过滤器支持以上所有选项作为命令。
36.85 earwax
让耳机更容易聆听音频。
该滤波器将“提示”添加到 44.1kHz 立体声(即音频 CD 格式)音频中,以便在耳机上收听时,立体声图像会从您的头部内部(耳机的标准)移动到听众的外部和前方(扬声器的标准) )。
从 SoX 移植。
36.86 equalizer
应用两极峰值均衡 (EQ) 滤波器。使用此滤波器,可以增加或减少选定频率处及其附近的信号电平,而(与带通和带阻滤波器不同)在所有其他频率处的信号电平保持不变。
为了产生复杂的均衡曲线,可以多次给出该滤波器,每次具有不同的中心频率。
该过滤器接受以下选项:
- frequency, f
设置滤波器的中心频率(以 Hz 为单位)。
- width_type, t
设置方法来指定滤波器的带宽。
- h
赫兹
- q
Q 因子
- o
八度
- s
坡
- k
千赫
- width, w
以 width_type 单位指定滤波器的带宽。
- gain, g
设置所需的增益或衰减(以 dB 为单位)。使用正增益时要小心削波。
- 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.86.1 示例
- 在 1000 Hz 时衰减 10 dB,带宽为 200 Hz:
equalizer=f=1000:t=h:width=200:g=-10
- 使用 Q 1 在 1000 Hz 处应用 2 dB 增益,并在 100 Hz 处使用 Q 2 衰减 5 dB:
equalizer=f=1000:t=q:w=1:g=2,equalizer=f=100:t=q:w=2:g=-5
36.86.2 命令
该过滤器支持以下命令:
- frequency, f
更改均衡器频率。该命令的语法是:“频率”
- width_type, t
更改均衡器 width_type。该命令的语法是:“ width_type ”
- width, w
更改均衡器宽度。该命令的语法是:“宽度”
- gain, g
更改均衡器增益。该命令的语法是:“增益”
- mix, m
更改均衡器组合。该命令的语法是:“ mix ”
36.87 extrastereo
线性增加左右声道之间的差异,从而为播放添加某种“现场”效果。
该过滤器接受以下选项:
- m
设置差异系数(默认值:2.5)。0.0表示单声道(两个声道的平均值),1.0声音不变,-1.0左右声道交换。
- c
启用剪辑。默认情况下启用。
36.87.1 命令
该过滤器支持以上所有选项作为命令。
36.88 firequalizer
使用任意频率响应应用 FIR 均衡。
过滤器接受以下选项:
- gain
设置增益曲线方程(以 dB 为单位)。表达式可以包含变量:
- f
评估频率
- sr
采样率
- ch
通道号,当禁用多通道评估时设置为 0
- chid
通道 id,请参阅 libavutil/channel_layout.h,禁用多通道评估时设置为第一个通道 id
- chs
通道数
- chlayout
通道布局,参见 libavutil/channel_layout.h
和功能:
- gain_interpolate(f)
根据 Gain_entry 对频率 f 插值增益
- cubic_interpolate(f)
与gain_interpolate相同,但更平滑
此选项也可作为命令使用。默认为
gain_interpolate(f)
.- gain_entry
设置gain_interpolate函数的增益条目。表达式可以包含函数:
- entry(f, g)
将频率 f 处的增益条目存储为值 g
此选项也可作为命令使用。
- delay
设置过滤器延迟(以秒为单位)。值越高意味着越准确。默认为
0.01
.- accuracy
设置滤波器精度(以 Hz 为单位)。值越低意味着越准确。默认为
5
.- wfunc
设置窗函数。可接受的值为:
- rectangular
矩形窗口,当增益曲线已经平滑时有用
- hann
汉恩窗(默认)
- hamming
汉明窗
- blackman
布莱克曼窗
- nuttall3
3 项连续一阶导数纳塔尔窗
- mnuttall3
最少 3 项不连续 nuttall 窗口
- nuttall
4 项连续一阶导数纳塔尔窗
- bnuttall
最少 4 项不连续 nuttall (blackman-nuttall) 窗口
- bharris
布莱克曼-哈里斯窗
- tukey
图基窗
- fixed
如果启用,则使用固定数量的音频样本。这提高了大延迟过滤时的速度。默认为禁用。
- multi
启用增益多通道评估。默认为禁用。
- zero_phase
通过减去时间戳来补偿延迟来启用零相位模式。默认为禁用。
- scale
设置增益使用的比例。可接受的值为:
- linlin
线性频率、线性增益
- linlog
线性频率、对数(以 dB 为单位)增益(默认)
- loglin
对数(倍频程,20 Hz 为 0)频率,线性增益
- loglog
对数频率、对数增益
- dumpfile
设置转储文件,适用于 gnuplot。
- dumpscale
设置转储文件的规模。可接受的值与比例选项相同。默认为 linlog。
- fft2
使用复杂的 FFT 启用 2 通道卷积。这显着提高了速度。默认为禁用。
- min_phase
启用最小相位脉冲响应。默认为禁用。
36.88.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.89 flanger
对音频应用镶边效果。
该过滤器接受以下选项:
- delay
设置基本延迟(以毫秒为单位)。范围从 0 到 30。默认值为 0。
- depth
设置添加的扫描延迟(以毫秒为单位)。范围从 0 到 10。默认值为 2。
- regen
设置再生百分比(延迟信号反馈)。范围从 -95 到 95。默认值为 0。
- width
设置延迟信号与原始信号混合的百分比。范围从 0 到 100。默认值为 71。
- speed
设置每秒扫描次数 (Hz)。范围从 0.1 到 10。默认值为 0.5。
- shape
设置扫频波形,可以是三角波或正弦波。默认值为正弦曲线。
- phase
设置多通道的扫频百分比偏移。范围从 0 到 100。默认值为 25。
- interp
设置延迟线插值,线性或二次。默认为线性。
36.90 haas
将哈斯效果应用于音频。
请注意,这对于应用于单声道信号最有意义。通过将此滤波器应用于单声道信号,它可以提供一定的方向性并拉伸其立体声图像。
该过滤器接受以下选项:
- level_in
设置输入电平。默认为1或 0dB
- level_out
设置输出电平。默认值为1或 0dB。
- side_gain
设置应用于信号侧面部分的增益。默认为1。
- middle_source
设置中间源的类型。可以是以下之一:
- ‘left’
选择左声道。
- ‘right’
选择正确的频道。
- ‘mid’
选取立体图像的中间部分信号。
- ‘side’
选取立体图像的侧面部分信号。
- middle_phase
改变中间阶段。默认情况下是禁用的。
- left_delay
设置左声道延迟。默认值为2.05毫秒。
- left_balance
设置左声道平衡。默认为-1。
- left_gain
设置左声道增益。默认为1。
- left_phase
改变左相位。默认情况下是禁用的。
- right_delay
设置右声道延迟。默认为2.12毫秒。
- right_balance
设置右声道平衡。默认为1。
- right_gain
设置右声道增益。默认为1。
- right_phase
改变右相。默认情况下启用。
36.91 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
一起处理立体声通道。如果通道间的target_gain不匹配,则认为其无效并使用最后一个有效的target_gain。
- 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.92 headphone
应用头部相关传递函数 (HRTF) 在用户周围创建虚拟扬声器,以便通过耳机进行双耳聆听。HRIR 通过附加流提供,每个通道都需要一个立体声输入流。
该过滤器接受以下选项:
- map
设置卷积输入流的映射。参数是一个以“|”分隔的通道名称列表,按顺序排列,因为它们作为过滤器的附加流输入给出。这也指定了输入流的数量。输入流的数量必须不小于第一个流中的通道数加一。
- gain
设置应用于音频的增益。值以 dB 为单位。默认值为 0。
- type
设置处理类型。可以是时间或频率。time在时域中处理音频,速度很慢。 freq正在频域中处理音频,速度很快。默认为频率。
- lfe
设置 LFE 通道的自定义增益。值以 dB 为单位。默认值为 0。
- size
以一次处理的样本数量设置帧的大小。默认值为1024。允许的范围是从 1024 到 96000。
- hrir
设置 hrir 流的格式。默认值为立体声。替代值是multich。如果 value 设置为Stereo,则附加流的数量应大于或等于第一个输入流中的输入通道的数量。此外,每个附加流都应具有立体声通道数。如果值设置为multich,则附加流的数量应该正好是 1。此外,附加流的输入通道数应等于或大于第一输入流的通道数的两倍。
36.92.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.93 highpass
应用 3dB 点频率的高通滤波器。滤波器可以是单极,也可以是双极(默认)。滤波器以每极点每倍频程 6dB 的衰减(每极点每十倍频程 20dB)。
该过滤器接受以下选项:
- frequency, f
设置频率(以 Hz 为单位)。默认值为 3000。
- poles, p
设置极数。默认值为 2。
- width_type, t
设置方法来指定滤波器的带宽。
- h
赫兹
- q
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.93.1 命令
该过滤器支持以下命令:
- frequency, f
更改高通频率。该命令的语法是:“频率”
- width_type, t
更改高通 width_type。该命令的语法是:“ width_type ”
- width, w
更改高通宽度。该命令的语法是:“宽度”
- mix, m
更改高通混音。该命令的语法是:“ mix ”
36.94 join
将多个输入流连接到一个多通道流中。
它接受以下参数:
- inputs
输入流的数量。默认为 2。
- channel_layout
所需的输出通道布局。它默认为立体声。
- map
将通道从输入映射到输出。参数是一个以“|”分隔的映射列表,每个映射都采用以下 形式。input_idx是输入流的从 0 开始的索引。in_channel 可以是输入通道的名称(例如 FL 表示左前)或其在指定输入流中的索引。out_channel是输出通道的名称。
input_idx.in_channel-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.95 ladspa
加载 LADSPA(Linux 音频开发人员的简单插件 API)插件。
要启用此过滤器的编译,您需要使用
--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个控件上设置的值。或者,也可以使用以下语法定义它们: value0 | 值1 | value2 |...,其中 valuei是在第 i个控件上设置的值。如果控制设置为 时
help
,将打印所有可用控件及其有效范围。- sample_rate, s
指定采样率,默认为 44100。仅在插件输入为零时使用。
- nb_samples, n
设置每个输出帧每个通道的样本数,默认值为 1024。仅在插件具有零输入时使用。
- duration, d
设置源音频的最短持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。请注意,生成的持续时间可能大于指定的持续时间,因为生成的音频始终在完整帧的末尾被剪切。如果未指定,或者表示的持续时间为负,则音频应该永远生成。仅当插件输入为零时才使用。
- latency, l
启用延迟补偿,默认情况下禁用。仅当插件有输入时才使用。
36.95.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
C* Click - Metronome
使用 (CAPS) 库中的 插件生成 20 bpm 的点击次数C* Audio Plugin Suite
: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.95.2 命令
该过滤器支持以下命令:
- cN
修改第N个控制值。
如果指定的值无效,则会忽略该值并保留前一个值。
36.96 loudnorm
EBU R128 响度标准化。包括动态和线性归一化模式。支持单通道(直播、文件)和双通道(文件)模式。该算法可以针对 IL、LRA 和最大真实峰值。在动态模式下,为了准确检测真实峰值,音频流将上采样至 192 kHz。使用-ar
选项或aresample
过滤器显式设置输出采样率。
该过滤器接受以下选项:
- I, i
设置综合响度目标。范围为 -70.0 - -5.0。默认值为-24.0。
- LRA, lra
设置响度范围目标。范围为 1.0 - 50.0。默认值为 7.0。
- TP, tp
设置最大真实峰值。范围为 -9.0 - +0.0。默认值为-2.0。
- measured_I, measured_i
测量输入文件的 IL。范围为 -99.0 - +0.0。
- measured_LRA, measured_lra
测量输入文件的 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
都必须指定。目标 LRA 不应低于源 LRA,并且积分响度的变化不应导致超过目标 TP 的真实峰值。如果不满足其中任何一个条件,规范化模式将恢复为动态。选项是true
或false
。默认为true
.- dual_mono
将单声道输入文件视为“双单声道”。如果单声道文件用于在立体声系统上播放,则其 EBU R128 测量在视觉上将是不正确的。如果设置为
true
,此选项将补偿这种影响。多通道输入文件不受此选项的影响。选项为真或假。默认为 false。- print_format
设置统计数据的打印格式。选项包括摘要、json 或无。默认值为无。
36.97 lowpass
应用 3dB 点频率的低通滤波器。滤波器可以是单极或双极(默认)。滤波器以每极点每倍频程 6dB 的衰减(每极点每十倍频程 20dB)。
该过滤器接受以下选项:
- frequency, f
设置频率(以 Hz 为单位)。默认值为 500。
- poles, p
设置极数。默认值为 2。
- width_type, t
设置方法来指定滤波器的带宽。
- h
赫兹
- q
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.97.1 示例
- 低通仅 LFE 通道,如果 LFE 不存在,则不执行任何操作:
lowpass=c=LFE
36.97.2 命令
该过滤器支持以下命令:
- frequency, f
改变低通频率。该命令的语法是:“频率”
- width_type, t
更改低通 width_type。该命令的语法是:“ width_type ”
- width, w
更改低通宽度。该命令的语法是:“宽度”
- mix, m
更改低通混音。该命令的语法是:“ mix ”
36.98 lv2
加载 LV2(LADSPA 版本 2)插件。
要启用此过滤器的编译,您需要使用
--enable-lv2
.
- plugin, p
指定插件 URI。您可能需要转义“:”。
- controls, c
设置“|” 分隔的控件列表,它们是零个或多个浮点值,确定加载插件的行为(例如延迟、阈值或增益)。如果控制设置为 时
help
,将打印所有可用控件及其有效范围。- sample_rate, s
指定采样率,默认为 44100。仅在插件输入为零时使用。
- nb_samples, n
设置每个输出帧每个通道的样本数,默认值为 1024。仅在插件具有零输入时使用。
- duration, d
设置源音频的最短持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。请注意,生成的持续时间可能大于指定的持续时间,因为生成的音频始终在完整帧的末尾被剪切。如果未指定,或者表示的持续时间为负,则音频应该永远生成。仅当插件输入为零时才使用。
36.98.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 的 Bit Crusher 插件:
lv2=p=http\\\\://www.openavproductions.com/artyfx#bitta:c=crush=0.3
36.98.2 命令
此过滤器支持插件作为命令导出的所有选项。
36.99 mcompand
多频段 压缩或扩展音频的动态范围。
使用 4 阶 Linkwitz-Riley IIR 将输入音频分为多个频段。这类似于扬声器的分频,并且在没有压缩扩展器作用时导致平坦的频率响应。
它接受以下参数:
- args
该选项语法为:attack,decay,[attack,decay..] 软拐点 crossover_Frequency [delay [initial_volume [gain]]] | 攻击、衰减...有关每个项目的说明,请参阅压扩过滤器文档。
36.100 pan
混合具有特定增益级别的通道。该过滤器接受输出通道布局,后跟一组通道定义。
该过滤器还旨在有效地重新映射音频流的通道。
过滤器接受以下形式的参数:“ l | outdef | outdef |...”
- l
输出通道布局或通道数量
- outdef
输出通道规范,格式为:“ out_name =[ Gain *] in_name [(+-)[ Gain *] in_name ...]”
- out_name
要定义的输出通道,通道名称(FL、FR 等)或通道编号(c0、c1 等)
- gain
通道的乘法系数,1 保持音量不变
- in_name
要使用的输入通道,详细信息请参见out_name;无法混合命名和编号的输入通道
如果通道规范中的“=”被“<”替换,则该规范的增益将被重新归一化,使得总数为1,从而避免削波噪声。
36.100.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.100.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.101 replaygain
ReplayGain 扫描仪过滤器。该过滤器将音频流作为输入并按原样输出。过滤结束时显示track_gain
和track_peak
。
该过滤器接受以下导出的只读选项:
- track_gain
在流末尾导出轨道增益(以 dB 为单位)。
- track_peak
在流末尾导出曲目峰值。
36.102 resample
转换音频采样格式、采样率和通道布局。它并不意味着可以直接使用。
36.103 rubberband
使用 librubberband 应用时间拉伸和变调。
要启用此过滤器的编译,您需要使用
--enable-librubberband
.
该过滤器接受以下选项:
- tempo
设置速度比例因子。
- pitch
设置音高比例因子。
- transients
设置瞬态检测器。可能的值为:
- crisp
- mixed
- smooth
- detector
设置探测器。可能的值为:
- compound
- percussive
- soft
- phase
设置相位。可能的值为:
- laminar
- independent
- window
设置处理窗口大小。可能的值为:
- standard
- short
- long
- smoothing
设置平滑。可能的值为:
- off
- on
- formant
变调时启用共振峰保留。可能的值为:
- shifted
- preserved
- pitchq
设置音调质量。可能的值为:
- quality
- speed
- consistency
- channels
设置频道。可能的值为:
- apart
- together
36.103.1 命令
该过滤器支持以下命令:
- tempo
更改滤波器速度比例因子。该命令的语法是:“ tempo ”
- pitch
更改滤波器音高比例因子。命令的语法是:“ pitch ”
36.104 sidechaincompress
该滤波器的作用类似于普通压缩器,但能够使用第二输入信号压缩检测到的信号。它需要两个输入流并返回一个输出流。第一个输入流将根据第二个流信号进行处理。然后,可以在处理的后期阶段使用其他滤波器对滤波后的信号进行滤波。请参阅平移和合并过滤器。
该过滤器接受以下选项:
- 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
侧链流的 Loutter( ) 通道是否影响衰减。默认为average
.- detection
在 的情况下应该采用精确信号
peak
,还是在 的情况下采用 RMS 信号rms
。默认是rms
主要是更平滑。- level_sc
设置侧链增益。默认值为 1。范围介于 0.015625 和 64 之间。
- mix
在输出中使用多少压缩信号。默认值为 1。范围介于 0 和 1 之间。
36.104.1 命令
该过滤器支持以上所有选项作为命令。
36.104.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.105 sidechaingate
侧链门的作用类似于普通(宽带)门,但能够在将检测到的信号发送到增益降低阶段之前对其进行过滤。通常,门使用全范围信号来检测高于阈值的电平。例如:如果您从侧链信号中切除所有较低频率,则仅当没有出现足够的高音时,门才会降低轨道的音量。通过这种技术,您可以减少自然鼓的共鸣或消除严重扭曲的吉他中静音敲击的“隆隆声”。它需要两个输入流并返回一个输出流。第一个输入流将根据第二个流信号进行处理。
该过滤器接受以下选项:
- 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。可以是峰值或有效值。
- link
选择所有通道之间的平均电平或较大声通道是否会影响衰减。默认为平均。可以是平均值或最大值。
- level_sc
设置侧链增益。默认值为 1。范围为 0.015625 到 64。
36.105.1 命令
该过滤器支持以上所有选项作为命令。
36.106 silencedetect
检测音频流中的静音。
当此过滤器检测到输入音频音量小于或等于噪声容限值且持续时间大于或等于检测到的最小噪声持续时间时,该过滤器会记录一条消息。
打印的时间和持续时间以秒为单位表示。或
lavfi.silence_start
元lavfi.silence_start.X
数据键设置在时间戳等于或超过检测持续时间的第一帧上,并且它包含静音的第一帧的时间戳。
或lavfi.silence_duration
和lavfi.silence_duration.X
或元数据lavfi.silence_end
键lavfi.silence_end.X
设置在静音后的第一帧上。如果单核细胞增多症启用,每个通道单独评估,.X
使用后缀键,并X
对应于通道号。
该过滤器接受以下选项:
- noise, n
设置噪声容限。可以以 dB(如果“dB”附加到指定值)或幅度比为单位指定。默认值为 -60dB,或 0.001。
- duration, d
设置通知前的静音持续时间(默认为 2 秒)。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。
- mono, m
单独处理每个通道,而不是组合处理。默认情况下是禁用的。
36.106.1 示例
- 检测 5 秒静音,噪声容限为 -50dB:
silencedetect=n=-50dB:d=5
- 检测静音的完整示例,
ffmpeg
噪声容限为 0.0001沉默.mp3:ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
36.107 silenceremove
消除音频开头、中间或结尾的静音。
该过滤器接受以下选项:
- start_periods
该值用于指示是否应在音频开始处修剪音频。值为零表示不应从一开始就修剪静音。当指定非零值时,它会修剪音频,直到找到非静音。通常,当从音频开始处修剪静音时,start_periods将为,
1
但可以将其增加到更高的值,以将所有音频修剪到特定数量的非静音周期。默认值为0
。- start_duration
指定在停止修剪音频之前必须检测到非静音的时间长度。通过增加持续时间,突发的噪音可以被视为静音并被修剪掉。默认值为
0
。- start_threshold
这表明什么样本值应被视为静音。对于数字音频, 的值
0
可能没问题,但对于从模拟录制的音频,您可能希望增加该值以考虑背景噪声。可以以 dB(如果“dB”附加到指定值)或幅度比为单位指定。默认值为0
。- start_silence
指定在开始时修剪后将保留的最大静音持续时间。默认值为 0,相当于修剪所有检测为静音的样本。
- start_mode
指定多通道音频开始时静音结束的检测模式。可以是任何一个或全部。默认为任何。使用any 时,任何通道中被检测为非静音的任何样本都将在音频流开始时触发静音结束修剪。对于all,只有当每个通道的每个样本都被检测为非静音时,才会在音频流开始时触发静音结束修剪,限制使用。
- stop_periods
设置从音频末尾开始修剪静音的计数。当指定正值时,它会在找到指定的静音时间段后修剪音频。要从文件中间删除静音,请将stop_periods指定 为负数。然后,该值被视为正值,并用于指示效果应按照 stop_periods指定的方式重新启动处理,使其适合消除音频中间的静音时段。默认值为
0
。- stop_duration
指定在不再复制音频之前必须存在的静音持续时间。通过指定更长的持续时间,可以在音频中保留所需的静音。默认值为
0
。- stop_threshold
这与开始阈值但用于修剪音频末尾的静音。可以以 dB(如果“dB”附加到指定值)或幅度比为单位指定。默认值为
0
。- stop_silence
指定修剪后将保留的最大静音持续时间。默认值为 0,相当于修剪所有检测为静音的样本。
- stop_mode
指定多通道音频开始后静音开始的检测模式。可以是任何一个或全部。默认为全部。对于任何,来自任何通道的任何被检测为静音的样本都将在音频流开始后触发静音修剪的开始,使用有限。对于all,只有当每个通道的每个样本都被检测为静音时,才会在音频流开始后触发静音修剪的开始。
- detection
设置如何检测静音。
- avg
移动窗口中样本绝对值的平均值。
- rms
移动窗口中样本绝对值的均方根。
- peak
移动窗口中样本绝对值的最大值。
- median
移动窗口中样本绝对值的中位数。
- ptp
移动窗口中样本的最大峰值与最小峰值差异的绝对值。
- dev
移动窗口中样本值的标准偏差。
默认值为
rms
。- window
设置用于计算用于检测静音的样本数量的窗口大小的持续时间(以秒为单位)。使用
0
将有效禁用任何窗口,并且每个通道仅使用单个样本进行静音检测。在这种情况下,可能还需要设置开始沉默和/或 停止沉默到非零值也开始持续时间和/或 停止持续时间为非零值。默认值为0.02
。允许的范围是从0
到10
。- timestamp
设置每个音频帧输出时间戳的处理方式。
- write
完整时间戳重写,仅保留第一个输出帧的开始时间。
- copy
未丢弃的帧保留与输入音频帧相同的时间戳。
默认值为
write
。
36.107.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.107.2 命令
该过滤器支持上述一些选项作为命令。
36.108 sofalizer
SOFAlizer 使用头部相关传输函数 (HRTF) 在用户周围创建虚拟扬声器,以便通过耳机进行双耳聆听(支持最多 9 个通道的音频格式)。HRTF 存储在 SOFA 文件中(有关数据库,请参阅http://www.sofacoustics.org/ )。SOFAlizer 由奥地利科学院声学研究所 (ARI) 开发。
要启用此过滤器的编译,您需要使用
--enable-libmysofa
.
该过滤器接受以下选项:
- sofa
设置用于渲染的 SOFA 文件。
- gain
设置应用于音频的增益。值以 dB 为单位。默认值为 0。
- rotation
设置虚拟扬声器的旋转角度(以度为单位)。默认值为 0。
- elevation
设置虚拟扬声器的高度(以度为单位)。默认值为 0。
- radius
使用近场 HRTF 设置扬声器和听众之间的距离(以米为单位)。默认值为 1。
- type
设置处理类型。可以是时间或频率。time在时域中处理音频,速度很慢。 freq正在频域中处理音频,速度很快。默认为频率。
- speakers
设置虚拟扬声器的自定义位置。此选项的语法为:<CH> <AZIM> <ELEV>[|<CH> <AZIM> <ELEV>|...]。每个虚拟扬声器都用简短的通道名称进行描述,后跟方位角和仰角(以度为单位)。每个虚拟扬声器描述均以“|”分隔。例如,要覆盖左前和右前声道位置,请使用:“speakers=FL 45 15|FR 345 15”。具有无法识别的通道名称的描述将被忽略。
- lfegain
设置 LFE 通道的自定义增益。值以 dB 为单位。默认值为 0。
- framesize
以样本数量设置自定义框架大小。默认值为 1024。允许的范围是从 1024 到 96000。仅在选项 ' 时使用类型' 设置为频率。
- normalize
导入 SOFA 文件时是否应将所有 IR 标准化。默认情况下启用。
- interpolate
如果确切位置不匹配,是否应将最近的 IR 与相邻 IR 进行插值。默认情况下是禁用的。
- minphase
加载 SOFA 文件时对所有 IR 进行 Minphase。默认情况下是禁用的。
- anglestep
设置邻居搜索角度步长。仅当启用选项插值时才使用。
- radstep
设置邻居搜索半径步长。仅当启用选项插值时才使用。
36.108.1 示例
- 使用 ClubFritz6 沙发文件:
sofalizer=sofa=/path/to/ClubFritz6.sofa:type=freq:radius=1
- 使用 ClubFritz12 沙发锉刀,半径较大,旋转较小:
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.109 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。此选项控制样本压缩的最大局部半周期。仅当以下情况时才使用此选项临界点选项设置为大于 0.0 的值,然后在这种情况下,当局部峰值低于或与设置的值相同时临界点属于该峰值半周期的所有样本都将按当前压缩因子进行压缩。
- threshold, t
设置阈值。默认值为 0.0。允许的范围是从 0.0 到 1.0。该选项指定样本的哪些半周期将被压缩,哪些将被扩展。任何局部峰值低于或等于该选项值的半周期样本将按当前压缩因子进行压缩,否则,如果大于阈值,则将使用扩展因子进行扩展,使其达到峰值目标值但不会超过它。
- raise, r
设置样本每半周期的扩展提升量。默认值为 0.001。允许的范围是从 0.0 到 1.0。这控制每个新半周期增加扩展因子的速度,直到达到扩张价值。将此选项设置得太高可能会导致失真。
- fall, f
设置样本每半周期的压缩提升量。默认值为 0.001。允许的范围是从 0.0 到 1.0。这控制每个新半周期压缩因子提高的速度,直到达到压缩价值。
- channels, h
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- invert, i
启用反向过滤,默认情况下禁用。这颠倒了解释临界点 选项。当启用样本的任何半周期时,其局部峰值低于或等于 临界点选项将被扩展,否则它将被压缩。
- link, l
计算应用于每个滤波通道样本的增益时链接通道默认处于禁用状态。禁用时,每个滤波通道增益计算是独立的,否则,当启用此选项时,将使用每个滤波通道的所有可能增益的最小值。
- rms, m
设置扩展目标 RMS 值。这指定了标准化音频输入允许的最高 RMS 电平。默认值为 0.0,因此禁用。允许的范围是从 0.0 到 1.0。
36.109.1 命令
该过滤器支持以上所有选项作为命令。
36.109.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.110 stereotools
该滤波器有一些方便的实用程序来管理立体声信号,用于将 M/S 立体声录音转换为 L/R 信号,同时控制参数或传播主轨道的立体声图像。
该过滤器接受以下选项:
- level_in
在过滤两个通道之前设置输入电平。默认值为 1。允许的范围为 0.015625 到 64。
- level_out
设置两个通道滤波后的输出电平。默认值为 1。允许的范围为 0.015625 到 64。
- balance_in
设置两个通道之间的输入平衡。默认值为 0。允许的范围为 -1 到 1。
- balance_out
设置两个通道之间的输出平衡。默认值为 0。允许的范围为 -1 到 1。
- softclip
启用软剪辑。导致模拟失真而不是严酷的数字 0dB 削波。默认禁用。
- mutel
将左声道静音。默认禁用。
- muter
将右通道静音。默认禁用。
- phasel
改变左声道的相位。默认禁用。
- phaser
改变右通道的相位。默认禁用。
- mode
设置立体声模式。可用值为:
- ‘lr>lr’
从左/右到左/右,这是默认值。
- ‘lr>ms’
左/右到中/侧。
- ‘ms>lr’
中/侧到左/右。
- ‘lr>ll’
左/右到左/左。
- ‘lr>rr’
左/右到右/右。
- ‘lr>l+r’
左/右到左+右。
- ‘lr>rl’
左/右到右/左。
- ‘ms>ll’
中/侧到左/左。
- ‘ms>rr’
中/侧到右/右。
- ‘ms>rl’
中/侧到右/左。
- ‘lr>l-r’
左/右到左 - 右。
- slev
设置侧面信号的电平。默认值为 1。允许的范围为 0.015625 到 64。
- sbal
设置侧面信号的平衡。默认值为 0。允许的范围为 -1 到 1。
- mlev
设置中间信号的电平。默认值为 1。允许的范围为 0.015625 到 64。
- mpan
设置中间信号声像。默认值为 0。允许的范围为 -1 到 1。
- base
在单声道和反向通道之间设置立体声基础。默认值为 0。允许的范围为 -1 到 1。
- delay
设置延迟(以毫秒为单位)从右通道向左延迟多少时间,反之亦然。默认值为 0。允许的范围为 -20 到 20。
- sclevel
设置 S/C 电平。默认值为 1。允许的范围为 1 到 100。
- phase
设置立体声相位(以度为单位)。默认值为 0。允许的范围为 0 到 360。
- bmode_in, bmode_out
设置balance_in/balance_out选项的平衡模式。
可以是以下之一:
- ‘balance’
经典平衡模式。一次衰减一个通道。增益提高到 1。
- ‘amplitude’
与上面的经典模式类似,但增益提高到 2。
- ‘power’
功率分布均匀,范围从-6dB 到+6dB。
36.110.1 命令
该过滤器支持以上所有选项作为命令。
36.110.2 示例
- 应用类似卡拉 OK 的效果:
stereotools=mlev=0.015625
- 将 M/S 信号转换为 L/R:
"stereotools=mode=ms>lr"
36.111 stereowiden
该滤波器通过抑制两个通道共有的信号以及将左信号延迟到右信号(反之亦然)来增强立体声效果,从而扩大立体声效果。
该过滤器接受以下选项:
- delay
左信号到右信号的延迟时间(以毫秒为单位),反之亦然。默认值为 20 毫秒。
- feedback
延迟信号的增益量变为右,反之亦然。在右输出中提供左信号的延迟效果,反之亦然,从而提供加宽效果。默认值为 0.3。
- crossfeed
左向右交叉馈送,相位反相。这有助于抑制单声道。如果该值为 1,它将取消两个通道共有的所有信号。默认值为 0.3。
- drymix
设置原始通道的输入信号电平。默认值为 0.8。
36.111.1 命令
该过滤器支持除命令delay
之外的所有上述选项。
36.112 superequalizer
应用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.113 surround
应用音频环绕声上混滤波器。
该过滤器允许从音频流产生多通道输出。
该过滤器接受以下选项:
- chl_out
设置输出通道布局。默认情况下,这是5.1。
有关所需语法, 请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 通道布局部分。
- chl_in
设置输入通道布局。默认情况下,这是立体声。
有关所需语法, 请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 通道布局部分。
- level_in
设置输入音量级别。默认情况下,这是1。
- level_out
设置输出音量级别。默认情况下,这是1。
- lfe
如果输出通道布局有 LFE 通道输出,则启用它。默认情况下,此功能已启用。
- lfe_low
设置 LFE 低截止频率。默认情况下,该频率为128 Hz。
- lfe_high
设置 LFE 高截止频率。默认情况下,该频率为256 Hz。
- lfe_mode
设置 LFE 模式,可以是add或sub。默认是添加。在添加模式下,LFE 通道从输入音频创建并添加到输出。在子模式下,LFE 通道是根据输入音频创建的并添加到输出,但所有非 LFE 输出通道也会从输出 LFE 通道中减去。
- smooth
设置时间平滑度强度,用于在立体声变换时及时改变因子。允许的范围是从0.0到1.0。当焦点选项值大于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.114 tiltshelf
使用两极搁架滤波器增强或降低音频的较低频率,并降低或增强音频的较高频率,其响应类似于标准高保真音响的音调控制。这也称为搁置均衡 (EQ)。
该过滤器接受以下选项:
- gain, g
给出 0 Hz 时的增益。其有用范围约为 -20(大幅削减)到 +20(大幅提升)。使用正增益时要小心削波。
- frequency, f
设置滤波器的中心频率,因此可用于扩展或减小要提升或削减的频率范围。默认值为
3000
赫兹。- width_type, t
设置方法来指定滤波器的带宽。
- h
赫兹
- q
Q 因子
- o
八度
- s
坡
- k
千赫
- width, w
确定过滤器的架过渡有多陡。
- poles, p
设置极数。默认值为 2。
- mix, m
在输出中使用多少过滤信号。默认值为 1。范围介于 0 和 1 之间。
- channels, c
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- normalize, n
归一化双二阶系数,默认情况下禁用。启用它会将直流幅度响应标准化为 0dB。
- transform, a
设置 IIR 滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- precision, r
设置过滤精度。
- auto
根据环绕滤波器选择自动样本格式。
- s16
始终使用带符号的 16 位。
- s32
始终使用有符号的 32 位。
- f32
始终使用浮点 32 位。
- f64
始终使用浮点 64 位。
- block_size, b
设置用于反向 IIR 处理的块大小。如果该值设置为足够高的值(高于达到接近零值时截断的脉冲响应长度),滤波将变成线性相位,否则如果不够大,它将产生令人讨厌的伪影。
请注意,当设置为非零值时,滤波器延迟将恰好是这么多样本。
36.114.1 命令
该过滤器支持一些选项作为命令。
36.115 treble, highshelf
使用两极倾斜滤波器来增强或降低音频的高音(较高)频率,其响应类似于标准高保真音响的音调控制。这也称为搁置均衡 (EQ)。
该过滤器接受以下选项:
- gain, g
给出 ~22 kHz 和奈奎斯特频率中较低者的增益。其有用范围约为 -20(大幅削减)到 +20(大幅提升)。使用正增益时要小心削波。
- frequency, f
设置滤波器的中心频率,因此可用于扩展或减小要提升或削减的频率范围。默认值为
3000
赫兹。- width_type, t
设置方法来指定滤波器的带宽。
- h
赫兹
- q
Q 因子
- o
八度
- s
坡
- k
千赫
- width, w
确定过滤器的架过渡有多陡。
- poles, p
设置极数。默认值为 2。
- mix, m
在输出中使用多少过滤信号。默认值为 1。范围介于 0 和 1 之间。
- channels, c
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- normalize, n
归一化双二阶系数,默认情况下禁用。启用它会将直流幅度响应标准化为 0dB。
- transform, a
设置 IIR 滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- precision, r
设置过滤精度。
- auto
根据环绕滤波器选择自动样本格式。
- s16
始终使用带符号的 16 位。
- s32
始终使用有符号的 32 位。
- f32
始终使用浮点 32 位。
- f64
始终使用浮点 64 位。
- block_size, b
设置用于反向 IIR 处理的块大小。如果该值设置为足够高的值(高于达到接近零值时截断的脉冲响应长度),滤波将变成线性相位,否则如果不够大,它将产生令人讨厌的伪影。
请注意,当设置为非零值时,滤波器延迟将恰好是这么多样本。
36.115.1 命令
该过滤器支持以下命令:
- frequency, f
改变高音频率。该命令的语法是:“频率”
- width_type, t
更改高音宽度_类型。该命令的语法是:“ width_type ”
- width, w
更改高音宽度。该命令的语法是:“宽度”
- gain, g
改变高音增益。该命令的语法是:“增益”
- mix, m
改变高音混合。该命令的语法是:“ mix ”
36.116 tremolo
正弦幅度调制。
该过滤器接受以下选项:
- f
调制频率(以赫兹为单位)。分谐波范围内的调制频率(20 Hz 或更低)将产生颤音效果。通过指定高于 20 Hz 的调制频率,该滤波器还可用作环形调制器。范围为 0.1 - 20000.0。默认值为 5.0 Hz。
- d
以百分比表示的调制深度。范围为 0.0 - 1.0。默认值为 0.5。
36.117 vibrato
正弦相位调制。
该过滤器接受以下选项:
- f
调制频率(以赫兹为单位)。范围为 0.1 - 20000.0。默认值为 5.0 Hz。
- d
以百分比表示的调制深度。范围为 0.0 - 1.0。默认值为 0.5。
36.118 virtualbass
应用音频虚拟低音滤波器。
该滤波器接受立体声输入并产生具有 LFE (2.1) 通道输出的立体声。新制作的 LFE 通道增强了最初从两个立体声通道获得的虚拟低音。该滤波器输出左前和右前通道,与立体声输入中可用的一样不变。
该过滤器接受以下选项:
- cutoff
设置虚拟低音截止频率。默认值为 250 Hz。允许的范围为 100 至 500 Hz。
- strength
设置虚拟低音强度。允许的范围是 0.5 到 3。默认值为 3。
36.119 volume
调节输入音频音量。
它接受以下参数:
- volume
设置音频音量表达式。
输出值被剪裁为最大值。
输出音频音量由以下关系给出:
output_volume = volume * input_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
适用于所选重放增益的预放大增益(以 dB 为单位)。
replaygain_preamp的默认值为0.0。
- replaygain_noclip
通过限制所应用的增益来防止削波。
replaygain_noclip的默认值为1。
- eval
计算体积表达式时设置。
它接受以下值:
- ‘once’
仅在过滤器初始化期间或当 '体积'命令已发送
- ‘frame’
评估每个传入帧的表达式
默认值为 '一次'。
体积表达式可以包含以下参数。
- n
帧编号(从零开始)
- nb_channels
通道数
- nb_consumed_samples
过滤器消耗的样本数
- nb_samples
当前帧中的样本数
- pos
文件中的原始帧位置;已弃用,请勿使用
- pts
框架PTS
- sample_rate
采样率
- startpts
流开始时的 PTS
- startt
流开始时间
- t
帧时间
- tb
时间戳时基
- volume
最后设定的音量值
请注意,当评估被设定为 '一次' 只有 sample_rate和tb变量可用,所有其他变量将计算为NAN。
36.119.1 命令
该过滤器支持以下命令:
- volume
修改体积表达式。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
36.119.2 示例
- 将输入音量减半:
volume=volume=0.5 volume=volume=1/2 volume=volume=-6.0206dB
在上面的所有示例中,命名键为体积可以省略,例如:
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.120 volumedetect
检测输入视频的音量。
过滤器没有参数。它仅支持 16 位有符号整数样本,因此输入将在需要时进行转换。当到达输入流末尾时,有关音量的统计信息将打印在日志中。
特别是,它将显示平均体积(均方根)、最大体积(基于每个样本)以及已注册体积值的直方图的开头(从最大值到样本的累积 1/1000) )。
所有音量均以相对于最大 PCM 值的分贝为单位。
36.120.1 示例
以下是输出的摘录:
[Parsed_volumedetect_0 0xa23120] mean_volume: -27 dB [Parsed_volumedetect_0 0xa23120] max_volume: -4 dB [Parsed_volumedetect_0 0xa23120] histogram_4db: 6 [Parsed_volumedetect_0 0xa23120] histogram_5db: 62 [Parsed_volumedetect_0 0xa23120] histogram_6db: 286 [Parsed_volumedetect_0 0xa23120] histogram_7db: 1042 [Parsed_volumedetect_0 0xa23120] histogram_8db: 2551 [Parsed_volumedetect_0 0xa23120] histogram_9db: 4609 [Parsed_volumedetect_0 0xa23120] histogram_10db: 8409
代表着:
- 均方能量约为-27 dB,或10^-2.7。
- 最大样本位于 -4 dB,或更准确地说在 -4 dB 和 -5 dB 之间。
- -4 dB 处有 6 个样本,-5 dB 处有 62 个样本,-6 dB 处有 286 个样本,等等。
换句话说,将音量提高 +4 dB 不会导致任何削波,将音量提高 +5 dB 会导致 6 个样本发生削波,依此类推。
37 音频源
以下是当前可用音频源的描述。
37.1 abuffer
缓冲音频帧,并使它们可供过滤器链使用。
该源主要用于编程用途,特别是通过中定义的接口libavfilter/buffersrc.h。
它接受以下参数:
- time_base
将用于提交帧的时间戳的时基。它必须是浮点数或分子/分母形式。
- sample_rate
传入音频缓冲区的采样率。
- sample_fmt
传入音频缓冲区的样本格式。示例格式名称或其对应的整数表示形式,来自枚举 AVSampleFormatlibavutil/samplefmt.h
- channel_layout
传入音频缓冲区的通道布局。来自channel_layout_map的通道布局名称 libavutil/channel_layout.c或其对应的 AV_CH_LAYOUT_* 宏中的整数表示libavutil/channel_layout.h
- channels
传入音频缓冲区的通道数。如果同时指定了 channels和channel_layout ,那么它们必须保持一致。
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, c
设置通道布局。指定布局中的通道数必须等于指定表达式的数量。
- duration, d
设置源音频的最短持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。请注意,生成的持续时间可能大于指定的持续时间,因为生成的音频始终在完整帧的末尾被剪切。
如果未指定,或者表示的持续时间为负,则音频应该永远生成。
- nb_samples, n
设置每个输出帧每个通道的样本数,默认为 1024。
- sample_rate, s
指定采样率,默认为44100。
exprs中的每个表达式可以包含以下常量:
- n
评估样本的编号,从0开始
- t
评估样本的时间,以秒为单位,从0开始
- s
采样率
37.2.1 示例
- 产生静音:
aevalsrc=0
- 生成频率为 440 Hz 的 sin 信号,将采样率设置为 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
指定通道布局,可以是表示通道布局的字符串。Channel_layout的默认值为“stereo”。
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
为每个频率点设置幅度值频率。值的数量必须与频点的数量相同。值由空格分隔。
- phase, p
为每个频率点设置相位值频率。值的数量必须与频点的数量相同。值由空格分隔。
- sample_rate, r
设置采样率,默认为44100。
- nb_samples, n
设置每帧的样本数。默认值为 1024。
- win_func, w
设置窗函数。默认是黑人。
37.6 anullsrc
空音频源,返回未处理的音频帧。它主要用作模板并用于分析/调试工具,或者作为忽略输入数据的过滤器的源(例如 sox 合成器过滤器)。
该来源接受以下选项:
- channel_layout, cl
-
指定通道布局,可以是表示通道布局的整数或字符串。Channel_layout的默认值为 “stereo”。
检查channel_layout_map定义 libavutil/channel_layout.c用于字符串和通道布局值之间的映射。
- sample_rate, r
指定采样率,默认为 44100。
- nb_samples, n
设置每个请求帧的样本数。
- duration, d
设置源音频的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。
如果未指定,或者表示的持续时间为负,则音频应该永远生成。
37.6.1 示例
- 将采样率设置为 48000 Hz,并将通道布局设置为 AV_CH_LAYOUT_MONO。
anullsrc=r=48000:cl=4
- 使用更明显的语法执行相同的操作:
anullsrc=r=48000:cl=mono
所有参数都需要明确定义。
37.7 flite
使用 libflite 库合成语音。
要启用此过滤器的编译,您需要使用
--enable-libflite
.
请注意,2.0 之前的 flite 库版本不是线程安全的。
该过滤器接受以下选项:
- list_voices
如果设置为 1,则列出可用语音的名称并立即退出。默认值为 0。
- nb_samples, n
设置每帧的最大样本数。默认值为 512。
- textfile
设置包含要讲话的文本的文件名。
- text
设置要说话的文本。
- voice, v
设置用于语音合成的声音。默认值为
kal
。另请参阅list_voices选项。
37.7.1 示例
- 从文件中读取语音.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
- 制作播放
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
设置 Kaiser 窗口测试版。
- att
设置阻带衰减。默认值为 120dB,允许范围为 40 至 180dB。
- round
启用舍入,默认情况下禁用。
- hptaps
设置高通滤波器的抽头数。
- lptaps
设置低通滤波器的抽头数。
37.11 sine
生成由幅度为 1/8 的正弦波组成的音频信号。
音频信号是位精确的。
该过滤器接受以下选项:
- frequency, f
设置载波频率。默认值为 440 赫兹。
- 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
- 生成遵循 NTSC 模式的 1 kHz 正弦波
1602,1601,1602,1601,1602
: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 结构的指针,该结构定义传入缓冲区的格式,作为不透明参数传递给avfilter_init_filter
初始化。
38.2 anullsink
空音频接收器;对输入音频绝对不做任何事情。它主要用作模板并用于分析/调试工具。
39 视频滤镜
配置 FFmpeg 构建时,您可以使用 禁用任何现有过滤器--disable-filters
。配置输出将显示您的构建中包含的视频过滤器。
以下是当前可用的视频过滤器的描述。
39.1 addroi
在视频帧中标记感兴趣的区域。
帧数据原封不动地传递,但元数据附加到帧中,指示感兴趣的区域,这可能会影响后续编码的行为。可以通过多次应用过滤器来标记多个区域。
- x
距帧左边缘的区域距离(以像素为单位)。
- y
区域距框架顶部边缘的距离(以像素为单位)。
- w
区域宽度(以像素为单位)。
- h
区域高度(以像素为单位)。
参数x、y、w和h是表达式,可能包含以下变量:
- iw
输入框的宽度。
- ih
输入框的高度。
- qoffset
在该区域内应用的量化偏移。
这必须是 -1 到 +1 范围内的实数值。值为零表示没有质量变化。负值要求更好的质量(更少的量化),而正值要求更差的质量(更大的量化)。
该范围经过校准,以便极值指示最大可能的偏移量 - 如果帧的其余部分以最差的可能质量进行编码,则偏移量 -1 表示该区域无论如何都应以尽可能最佳的质量进行编码。然后以某种与编解码器相关的方式对中间值进行插值。
例如,在 10 位 H.264 中,量化参数在 -12 和 51 之间变化。因此,典型的 qoffset 值 -1/10 表明该区域应该使用整个范围十分之一左右的 QP 进行编码,效果优于框架的其余部分。因此,如果帧的大部分以 30 左右的 QP 进行编码,则该区域将获得 24 左右的 QP(偏移量约为 -1/10 * (51 - -12) = -6.3)。极值 -1 表示该区域应该以尽可能最佳的质量进行编码,而不管帧的其余部分如何处理 - 也就是说,应该以 -12 的 QP 进行编码。
- 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
与字幕过滤器相同,只是它不需要 libavcodec 和 libavformat 才能工作。另一方面,它仅限于 ASS(高级变电站 Alpha)字幕文件。
除了字幕过滤器中的常见选项之外,此过滤器还接受以下选项:
- 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
为第 1 平面、第 2 平面或第 3 平面设置 sigma。默认值为 32767。有效范围为 0 到 32767。此选项控制由大小定义的半径内每个像素的权重。默认值意味着每个像素具有相同的权重。将此选项设置为 0 可有效禁用过滤。
39.6.1 命令
此过滤器支持与选项相同的命令(除了 option )s
。该命令接受与相应选项相同的语法。
39.7 avgblur
应用平均模糊滤镜。
该过滤器接受以下选项:
- sizeX
设置水平半径大小。
- planes
设置要过滤的平面。默认情况下,所有平面都会被过滤。
- sizeY
设置垂直半径大小,如果为零,则与 相同
sizeX
。默认为0
.
39.7.1 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.8 backgroundkey
将静态背景变成透明背景。
过滤器接受以下选项:
- threshold
场景变化检测的阈值。
- similarity
与背景的相似度百分比。
- blend
设置不相似像素的混合量。
39.8.1 命令
该过滤器支持以上所有选项作为命令。
39.9 bbox
计算输入帧亮度平面中非黑色像素的边界框。
此过滤器计算包含亮度值大于最小允许值的所有像素的边界框。描述边界框的参数打印在过滤器日志上。
过滤器接受以下选项:
- min_val
设置最小亮度值。默认为
16
.
39.9.1 命令
该过滤器支持以上所有选项作为命令。
39.10 bilateral
应用双边滤波器,空间平滑,同时保留边缘。
该过滤器接受以下选项:
- sigmaS
设置高斯函数的 sigma 来计算空间权重。允许的范围是 0 到 512。默认值为 0.1。
- sigmaR
设置高斯函数的 sigma 来计算范围权重。允许的范围是 0 到 1。默认值为 0.1。
- planes
设置要过滤的平面。默认仅是第一个。
39.10.1 命令
该过滤器支持以上所有选项作为命令。
39.11 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。
39.11.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
39.12 bitplanenoise
显示并测量位平面噪声。
该过滤器接受以下选项:
- bitplane
设置要分析的平面。默认为
1
.- filter
从上面的集合中过滤掉噪声像素
bitplane
。默认为禁用。
39.13 blackdetect
检测(几乎)全黑的视频间隔。对于检测章节过渡、广告或无效录音非常有用。
过滤器将其检测分析输出到日志和帧元数据。如果找到至少具有指定的最小持续时间的黑色段,则会将包含开始和结束时间戳以及持续时间的行打印到级别为日志的日志中info
。此外,debug
每帧打印一条带有级别的日志行,显示为该帧检测到的黑色量。
该过滤器还将元数据附加到带有 key 的黑色片段的第一帧lavfi.black_start
以及带有 key 的黑色片段结束后的第一帧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.14 blackframe
检测(几乎)全黑的帧。对于检测章节过渡或广告很有用。输出行包含检测到的帧的帧号、黑度百分比、文件中的位置(如果已知或 -1)以及时间戳(以秒为单位)。
为了显示输出行,您需要将日志级别至少设置为 AV_LOG_INFO 值。
该过滤器导出帧元数据lavfi.blackframe.pblack
。该值表示图片中低于阈值的像素的百分比。
它接受以下参数:
- amount
必须低于阈值的像素百分比;它默认为
98
.- threshold, thresh
阈值,低于该阈值的像素值被视为黑色;它默认为
32
.
39.15 blend
将两个视频帧相互混合。
该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.15.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.15.2 命令
该过滤器支持与选项相同的命令。
39.16 blockdetect
在不改变输入帧的情况下确定帧的块度。
基于 Remco Muijs 和 Ihor Kirenko:“用于自适应视频处理的无参考块伪影测量。” 2005年第13届欧洲信号处理会议。
该过滤器接受以下选项:
- period_min
- period_max
设置用于确定像素网格(周期)的最小值和最大值。默认值为 [3,24]。
- planes
设置要过滤的平面。默认仅是第一个。
39.16.1 示例
- 确定第一个平面的块效应并搜索 [8,32] 内的周期:
blockdetect=period_min=8:period_max=32:planes=1
39.17 blurdetect
在不改变输入帧的情况下确定帧的模糊度。
基于 Marziliano、Pina 等人。“无参考感知模糊度量。” 允许基于块的缩写。
该过滤器接受以下选项:
- low
- high
设置 Canny 阈值算法使用的低阈值和高阈值。
高阈值选择“强”边缘像素,然后将其通过8-连通性与低阈值选择的“弱”边缘像素连接。
低阈值和高阈值必须在 [0,1] 范围内选择,并且low应小于或等于high。
低的默认值为,
20/255
高的默认 值为50/255
。- radius
定义在边缘像素周围搜索局部最大值的半径。
- block_pct
仅确定最重要块的模糊度(以百分比给出)。
- block_width
确定宽度为block_width的块的模糊度。如果设置为小于 1 的任何值,则不使用任何块,并且无论block_height是多少,整个图像都会被处理为一幅图像。
- block_height
确定高度为block_height的块的模糊度。如果设置为小于 1 的任何值,则不使用任何块,并且无论block_width是多少,整个图像都会被处理为一个图像。
- planes
设置要过滤的平面。默认仅是第一个。
39.17.1 示例
- 确定 80% 最重要的 32x32 块的模糊:
blurdetect=block_width=32:block_height=32:block_pct=80
39.18 bm3d
使用块匹配 3D 算法对帧进行去噪。
该过滤器接受以下选项。
- sigma
设置去噪强度。默认值为 1。允许的范围为 0 到 999.9。去噪算法对sigma非常敏感,所以根据来源进行调整。
- block
设置局部补丁大小。这将设置二维尺寸。
- bstep
设置处理块的滑动步长。默认值为 4。允许的范围为 1 到 64。较小的值允许处理更多参考块,但速度较慢。
- group
设置第三维相似块的最大数量。默认值为 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
选项的值为禁用,如果估计选项的值为 ,则始终启用。final
- planes
设置要过滤的平面。默认值是除 alpha 之外的所有可用值。
39.18.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.19 boxblur
对输入视频应用 boxblur 算法。
它接受以下参数:
- luma_radius, lr
- luma_power, lp
- chroma_radius, cr
- chroma_power, cp
- alpha_radius, ar
- alpha_power, ap
下面是接受的选项的描述。
- luma_radius, lr
- chroma_radius, cr
- alpha_radius, ar
设置用于模糊相应输入平面的框半径表达式(以像素为单位)。
半径值必须是非负数,并且不得大于
min(w,h)/2
亮度和 alpha 平面以及min(cw,ch)/2
色度平面的表达式的值。默认值亮度半径是“2”。如果没有指定, 色度半径和阿尔法半径默认为设置的相应值亮度半径。
表达式可以包含以下常量:
- w
- h
输入宽度和高度(以像素为单位)。
- cw
- ch
输入色度图像的宽度和高度(以像素为单位)。
- hsub
- vsub
水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为2,vsub为1。
- luma_power, lp
- chroma_power, cp
- alpha_power, ap
指定将 boxblur 滤镜应用到相应平面的次数。
默认值亮度功率是2。如果没有指定, 色度功率和阿尔法功率默认为设置的相应值亮度功率。
值为 0 将禁用该效果。
39.19.1 示例
- 应用 boxblur 滤镜,并将亮度、色度和 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.20 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.21 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
。
39.22 ccrepack
重新打包 CEA-708 隐藏式字幕辅助数据
此过滤器修复了与上游格式错误的 CEA-708 有效负载相关的商业编码器中出现的各种问题,特别是元组数量不正确(目标 FPS 的 cc_count 错误)以及元组排序不正确(即 CEA-608 元组不在第一个条目中)在有效负载中)。
39.23 cas
将对比度自适应锐化滤镜应用于视频流。
该过滤器接受以下选项:
- strength
设置锐化强度。默认值为 0。
- planes
设置要过滤的平面。默认值是过滤除 alpha 平面之外的所有平面。
39.23.1 命令
该过滤器支持与选项相同的命令。
39.24 chromahold
删除除特定颜色之外的所有颜色的所有颜色信息。
该过滤器接受以下选项:
- color
不会被中性色度取代的颜色。
- similarity
与上述颜色的相似度百分比。0.01 仅匹配确切的关键颜色,而 1.0 匹配所有内容。
- blend
混合百分比。0.0 使像素要么完全灰色,要么根本不灰色。值越高,颜色保留得越多。
- yuv
表示传递的颜色已经是 YUV 而不是 RGB。
启用此功能后,“绿色”或“红色”等文字颜色不再有意义。这可用于将精确的 YUV 值作为十六进制数传递。
39.24.1 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.25 chromakey
YUV 色彩空间颜色/色度键控。
该过滤器接受以下选项:
- color
将替换为透明度的颜色。
- similarity
与主色的相似度百分比。
0.01 仅匹配确切的关键颜色,而 1.0 匹配所有内容。
- blend
混合百分比。
0.0 使像素完全透明或根本不透明。
值越高,像素就越透明,透明度越高,像素颜色与关键颜色越相似。
- yuv
表示传递的颜色已经是 YUV 而不是 RGB。
启用此功能后,“绿色”或“红色”等文字颜色不再有意义。这可用于将精确的 YUV 值作为十六进制数传递。
39.25.1 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.25.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.26 chromakey_cuda
CUDA 加速 YUV 色彩空间颜色/色度键控。
该过滤器的工作原理与普通色键过滤器类似,但在 CUDA 帧上运行。有关更多详细信息和参数,请参阅chromakey。
39.26.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
39.27 chromanr
减少色度噪声。
该过滤器接受以下选项:
- thres
设置平均色度值的阈值。当前像素与低于该阈值的邻近像素的Y、U、V像素分量的绝对差之和将用于平均。亮度分量保持不变并复制到输出。默认值为 30。允许的范围为 1 到 200。
- sizew
设置用于平均的矩形的水平半径。允许的范围是 1 到 100。默认值为 5。
- sizeh
设置用于平均的矩形的垂直半径。允许的范围是 1 到 100。默认值为 5。
- stepw
设置平均时的水平步长。默认值为 1。允许的范围为 1 到 50。主要用于加速过滤。
- steph
设置平均时的垂直步长。默认值为 1。允许的范围为 1 到 50。主要用于加速过滤。
- threy
设置平均色度值的 Y 阈值。对当前像素和相邻像素的 Y 分量之间允许的最大差异设置更精细的控制。默认值为 200。允许的范围为 1 到 200。
- threu
设置平均色度值的 U 阈值。对当前像素和相邻像素的 U 分量之间允许的最大差异设置更精细的控制。默认值为 200。允许的范围为 1 到 200。
- threv
设置平均色度值的 V 阈值。对当前像素和相邻像素的 V 分量之间允许的最大差异设置更精细的控制。默认值为 200。允许的范围为 1 到 200。
- distance
设置计算中使用的距离类型。
- ‘manhattan’
绝对的差别。
- ‘euclidean’
差值的平方。
默认距离类型为曼哈顿。
39.27.1 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
39.28 chromashift
水平和/或垂直移动色度像素。
该过滤器接受以下选项:
- cbh
设置水平移动色度蓝色的量。
- cbv
设置垂直移动色度蓝色的量。
- crh
设置水平移动色度红色的量。
- crv
设置垂直移动色度红色的量。
- edge
设置边缘模式,可以是smear、 default 或warp。
39.28.1 命令
该过滤器支持以上所有选项作为命令。
39.29 ciescope
显示上面覆盖有像素的 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
设置ciescope大小,默认设置为512。
- intensity, i
设置用于将输入像素值映射到 CIE 图的强度。
- contrast
设置用于绘制超出活动颜色系统色域的舌头颜色的对比度。
- corrgamma
示波器上显示正确的伽玛值,默认启用。
- showwhite
在 CIE 图上显示白点,默认禁用。
- gamma
设置输入伽玛。仅与 XYZ 输入色彩空间一起使用。
- fill
使用 CIE 颜色填充。默认情况下启用。
39.30 codecview
可视化某些编解码器导出的信息。
某些编解码器可以使用辅助数据或其他方式通过帧导出信息。例如,一些基于 MPEG 的编解码器通过 编解码器中的export_mvs标志导出运动向量标志2选项。
过滤器接受以下选项:
- block
使用亮度平面显示块分区结构。
- mv
设置运动矢量以进行可视化。
mv的可用标志有:
- ‘pf’
P 帧的前向预测 MV
- ‘bf’
B 帧的前向预测 MV
- ‘bb’
B 帧的向后预测 MV
- qp
使用色度平面显示量化参数。
- mv_type, mvt
设置运动矢量类型以进行可视化。包括所有帧的 MV,除非由frame_type选项指定。
mv_type的可用标志有:
- ‘fp’
前向预测 MV
- ‘bp’
向后预测的 MV
- frame_type, ft
设置帧类型以可视化运动矢量。
Frame_type的可用标志有:
- ‘if’
帧内编码帧(I 帧)
- ‘pf’
预测帧(P 帧)
- ‘bf’
双向预测帧(B 帧)
39.30.1 示例
- 使用以下方法可视化所有帧的前向预测 MV
ffplay
:ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv_type=fp
- 使用以下方法可视化 P 帧和 B 帧的多方向 MV
ffplay
:ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv=pf+bf+bb
39.31 colorbalance
修改输入帧的原色(红色、绿色和蓝色)的强度。
该滤镜允许在阴影、中间色调或高光区域中调整输入帧,以实现红青色、绿洋红色或蓝黄色平衡。
正调整值将平衡移向原色,负值将平衡移向补色。
该过滤器接受以下选项:
- rs
- gs
- bs
调整红色、绿色和蓝色阴影(最暗的像素)。
- rm
- gm
- bm
调整红色、绿色和蓝色中间色调(中等像素)。
- rh
- gh
- bh
调整红色、绿色和蓝色高光(最亮的像素)。
允许的选项范围是
[-1.0, 1.0]
. 默认值是0
.- pl
更改色彩平衡时保持亮度。默认为禁用。
39.31.1 示例
- 向阴影添加红色偏色:
colorbalance=rs=.3
39.31.2 命令
该过滤器支持以上所有选项作为命令。
39.32 colorcontrast
调整 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.32.1 命令
该过滤器支持以上所有选项作为命令。
39.33 colorcorrect
有选择地调整黑色和白色的色彩白平衡。该滤镜在 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.33.1 命令
该过滤器支持以上所有选项作为命令。
39.34 colorchannelmixer
通过重新混合颜色通道来调整视频输入帧。
此滤镜通过添加与相同像素的其他通道关联的值来修改颜色通道。例如,如果要修改的值为红色,则输出值为:
red=red*rr + blue*rb + green*rg + alpha*ra
该过滤器接受以下选项:
- rr
- rg
- rb
- ra
调整输入红色、绿色、蓝色和 Alpha 通道对输出红色通道的贡献。默认值适用
1
于rr、0
rg 、rb和ra。- gr
- gg
- gb
- ga
调整输入红色、绿色、蓝色和 Alpha 通道对输出绿色通道的贡献。默认值适用
1
于gg、gr、gb和ga。0
- 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.34.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.34.2 命令
该过滤器支持以上所有选项作为命令。
39.35 colorize
在视频流上叠加纯色。
该过滤器接受以下选项:
- hue
设置色调。允许的范围是 0 到 360。默认值为 0。
- saturation
设置颜色饱和度。允许的范围是 0 到 1。默认值为 0.5。
- lightness
设置颜色亮度。允许的范围是 0 到 1。默认值为 0.5。
- mix
设置源亮度的混合。默认设置为 1.0。允许的范围是从 0.0 到 1.0。
39.35.1 命令
该过滤器支持以上所有选项作为命令。
39.36 colorkey
RGB 色彩空间颜色键控。此过滤器通过将关键颜色相似半径内的每个像素的 alpha 分量设置为 0,对 8 位 RGB 格式帧进行操作。相似半径之外的像素的 alpha 值取决于混合选项的值。
该过滤器接受以下选项:
- color
设置将 alpha 设置为 0(完全透明度)的颜色。请参阅ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。默认为
black
.- similarity
设置从关键颜色开始的半径,在此范围内其他颜色也具有完全透明度。计算出的距离与 3D 空间中关键颜色的 RGB 值和像素颜色之间的单位分数距离相关。范围为 0.01 至 1.0。0.01 匹配精确关键颜色周围很小的半径内,而 1.0 匹配所有内容。默认为
0.01
.- blend
设置如何计算位于相似性半径之外的像素的 Alpha 值。0.0 使像素完全透明或完全不透明。值越高,像素就越透明,像素颜色与关键颜色越相似,透明度就越高。范围是 0.0 到 1.0。默认为
0.0
.
39.36.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.36.2 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.37 colorhold
删除除特定一种颜色之外的所有 RGB 颜色的所有颜色信息。
该过滤器接受以下选项:
- color
不会被中性灰色取代的颜色。
- similarity
与上述颜色的相似度百分比。0.01 仅匹配确切的关键颜色,而 1.0 匹配所有内容。
- blend
混合百分比。0.0 使像素完全变灰。值越高,颜色保留得越多。
39.37.1 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.38 colorlevels
使用级别调整视频输入帧。
该过滤器接受以下选项:
- 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.38.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.38.2 命令
该过滤器支持以上所有选项作为命令。
39.39 colormap
将自定义颜色贴图应用于视频流。
该过滤器需要三个输入视频流。第一个流是要被过滤掉的视频流。第二和第三视频流指定源颜色到目标颜色映射的色块。
该过滤器接受以下选项:
- patch_size
设置源和目标视频流补丁大小(以像素为单位)。
- nb_patches
设置源视频流和目标视频流中使用的补丁的最大数量。默认值是附加视频流中可用的补丁数。允许的最大补丁数是
64
。- type
设置用于目标颜色的调整。可以是
relative
或absolute
. 默认值为absolute
.- kernel
设置用于测量映射颜色之间的颜色差异的内核。
可接受的值为:
- ‘euclidean’
- ‘weuclidean’
默认为
euclidean
.
39.40 colormatrix
转换颜色矩阵。
该过滤器接受以下选项:
- src
- dst
指定源和目标颜色矩阵。必须指定这两个值。
可接受的值为:
- ‘bt709’
BT.709
- ‘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.41 colorspace
转换色彩空间、传输特性或原色。输入视频需要具有均匀的尺寸。
该过滤器接受以下选项:
- all
一次指定所有颜色属性。
可接受的值为:
- ‘bt470m’
BT.470M
- ‘bt470bg’
BT.470BG
- ‘bt601-6-525’
BT.601-6525
- ‘bt601-6-625’
BT.601-6625
- ‘bt709’
BT.709
- ‘smpte170m’
SMPTE-170M
- ‘smpte240m’
SMPTE-240M
- ‘bt2020’
BT.2020
- space
指定输出色彩空间。
可接受的值为:
- ‘bt709’
BT.709
- ‘fcc’
美国联邦通信委员会
- ‘bt470bg’
BT.470BG 或 BT.601-6 625
- ‘smpte170m’
SMPTE-170M 或 BT.601-6 525
- ‘smpte240m’
SMPTE-240M
- ‘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’
彩色RGB
- ‘iec61966-2-1’
IEC61966-2-1
- ‘iec61966-2-4’
IEC61966-2-4
- ‘xvycc’
xvycc
- ‘bt2020-10’
BT.2020 适用于 10 位内容
- ‘bt2020-12’
12 位内容的 BT.2020
- primaries
指定输出原色。
可接受的值为:
- ‘bt709’
BT.709
- ‘bt470m’
BT.470M
- ‘bt470bg’
BT.470BG 或 BT.601-6 625
- ‘smpte170m’
SMPTE-170M 或 BT.601-6 525
- ‘smpte240m’
SMPTE-240M
- ‘film’
电影
- ‘smpte431’
SMPTE-431
- ‘smpte432’
SMPTE-432
- ‘bt2020’
BT.2020
- ‘jedec-p22’
JEDEC P22 荧光粉
- range
指定输出颜色范围。
可接受的值为:
- ‘tv’
电视(受限)范围
- ‘mpeg’
MPEG(受限)范围
- ‘pc’
PC(全)系列
- ‘jpeg’
JPEG(全)范围
- format
指定输出颜色格式。
可接受的值为:
- ‘yuv420p’
YUV 4:2:0 平面 8 位
- ‘yuv420p10’
YUV 4:2:0 平面 10 位
- ‘yuv420p12’
YUV 4:2:0 平面 12 位
- ‘yuv422p’
YUV 4:2:2 平面 8 位
- ‘yuv422p10’
YUV 4:2:2 平面 10 位
- ‘yuv422p12’
YUV 4:2:2 平面 12 位
- ‘yuv444p’
YUV 4:4:4 平面 8 位
- ‘yuv444p10’
YUV 4:4:4 平面 10 位
- ‘yuv444p12’
YUV 4:4:4 平面 12 位
- fast
进行快速转换,跳过伽玛/主校正。这将显着减少 CPU 占用,但在数学上是不正确的。要获得与颜色矩阵过滤器生成的输出兼容的输出,请使用 fast=1。
- dither
指定抖动模式。
可接受的值为:
- ‘none’
无抖动
- ‘fsb’
弗洛伊德-斯坦伯格抖动
- wpadapt
白点适应模式。
可接受的值为:
- ‘bradford’
布拉德福德白点适应
- ‘vonkries’
von Kries 白点适应
- ‘identity’
身份白点适应(即无白点适应)
- iall
一次覆盖所有输入属性。与所有人相同的接受值。
- ispace
覆盖输入色彩空间。与space相同的可接受值。
- iprimaries
覆盖输入原色。与初选相同的可接受值。
- itrc
覆盖输入传输特性。与trc相同的接受值。
- irange
覆盖输入颜色范围。与range相同的接受值。
该过滤器将传输特性、色彩空间和原色转换为指定的用户值。如果未指定,输出值将设置为基于“all”属性的默认值。如果也未指定该属性,过滤器将记录错误。输出颜色范围和格式默认与输入颜色范围和格式的值相同。应在输入数据上设置输入传输特性、色彩空间、原色和色彩范围。如果缺少其中任何一个,过滤器将记录错误并且不会发生转换。
例如,要将输入转换为 SMPTE-240M,请使用以下命令:
colorspace=smpte240m
39.42 colorspace_cuda
CUDA 加速了色彩空间过滤器的实现。
与软件色彩空间过滤器相比,它的功能绝不是完整的,并且目前仅支持 jpeg/full 和 mpeg/limited range 之间的色彩范围转换。
该过滤器接受以下选项:
- range
指定输出颜色范围。
可接受的值为:
- ‘tv’
电视(受限)范围
- ‘mpeg’
MPEG(受限)范围
- ‘pc’
PC(全)系列
- ‘jpeg’
JPEG(全)范围
39.43 colortemperature
调整视频中的色温以模拟环境色温的变化。
该过滤器接受以下选项:
- temperature
设置开尔文温度。允许的范围为 1000 到 40000。默认值为 6500 K。
- mix
设置与过滤输出的混合。允许的范围是 0 到 1。默认值为 1。
- pl
设置保留亮度的量。允许的范围是 0 到 1。默认值为 0。
39.43.1 命令
该过滤器支持与选项相同的命令。
39.44 convolution
应用 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.44.1 命令
该过滤器支持以上所有选项作为命令。
39.44.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.45 convolve
使用第二个流作为脉冲在频域中应用视频流的 2D 卷积。
该过滤器接受以下选项:
- planes
设置要处理的平面。
- impulse
设置将处理哪些脉冲视频帧,可以是first 或all。默认为全部。
该convolve
过滤器还支持帧同步选项。
39.46 copy
将输入视频源原样复制到输出。这主要用于测试目的。
39.47 coreimage
在 OSX 上使用 Apple 的 CoreImage API 在 GPU 上进行视频过滤。
硬件加速基于 OpenGL 上下文。通常,这意味着它是由视频硬件处理的。然而,存在基于软件的 OpenGL 实现,这意味着无法保证硬件处理。这取决于各自的 OSX。
Apple 提供了许多滤镜和图像生成器,并且具有多种选项。过滤器必须通过其名称及其选项来引用。
coreimage 过滤器接受以下选项:
- list_filters
列出所有可用的过滤器和生成器及其所有各自的选项以及可能的最小值和最大值以及默认值。
list_filters=true
- filter
按各自的名称和选项指定所有过滤器。使用list_filters确定所有有效的过滤器名称和选项。数字选项由浮点值指定,并自动限制在其各自的值范围内。矢量和颜色选项必须由空格分隔的浮点值列表指定。必须进行字符转义。特殊选项名称
default
可用于使用过滤器的默认选项。需要指定一个
default
或至少一个过滤器选项。所有省略的选项都使用其默认值。过滤字符串的语法如下:filter=<NAME>@<OPTION>=<VALUE>[@<OPTION>=<VALUE>][@...][#<NAME>@<OPTION>=<VALUE>[@<OPTION>=<VALUE>][@...]][#...]
- output_rect
指定一个矩形,将过滤器链的输出复制到输入图像中。它由空格分隔的浮点值列表给出:
output_rect=x\ y\ width\ height
如果未给出,则输出矩形等于输入图像的尺寸。输出矩形会在输入图像的边界处自动裁剪。负值对于每个组件都有效。
output_rect=25\ 25\ 100\ 100
多个过滤器可以链接起来进行连续处理,无需 GPU-HOST 传输,从而可以快速处理复杂的过滤器链。目前,仅支持具有 0 个(生成器)或恰好 1 个(过滤器)输入图像和 1 个输出图像的过滤器。此外,过渡滤波器还不能按预期使用。
一些过滤器根据各自的过滤器内核生成带有附加填充的输出图像。填充会自动删除,以确保过滤器输出的大小与输入图像的大小相同。
对于图像生成器,输出图像的大小分别由滤波器链的前一个输出图像或整个滤波器链的输入图像确定。生成器不使用该图像的像素信息来生成其输出。然而,生成的输出被混合到该图像上,导致输出图像部分或完全覆盖。
coreimagesrc视频源可用于生成直接馈送到过滤器链中的输入图像。通过使用它,不需要通过另一个视频源或输入视频提供输入图像。
39.47.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 主页创建 QR 代码,以 Apple 标准 bash shell 的完整且转义的命令行形式给出:
ffmpeg -f lavfi -i nullsrc=s=100x100,coreimage=filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.png
39.48 corr
获取两个输入视频之间的相关性。
该过滤器采用两个输入视频。
两个输入视频必须具有相同的分辨率和像素格式,此过滤器才能正常工作。它还假设两个输入具有相同数量的帧,并进行一一比较。
通过日志系统打印获得的每个组件的平均值、最小和最大相关性。
过滤器将计算出的每帧的相关性存储在帧元数据中。
该过滤器还支持帧同步选项。
在下面的示例中,输入文件主.mpg正在处理的文件与参考文件进行比较参考.mpg。
ffmpeg -i main.mpg -i ref.mpg -lavfi corr -f null -
39.49 cover_rect
覆盖一个长方形物体
它接受以下选项:
- cover
可选封面图像的文件路径需要为 yuv420。
- mode
设置覆盖模式。
它接受以下值:
- ‘cover’
用提供的图像覆盖它
- ‘blur’
通过插入周围像素来覆盖它
默认值是模糊。
39.49.1 示例
- 使用给定视频提供的图像覆盖矩形对象
ffmpeg
:ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
39.50 crop
将输入视频裁剪为给定尺寸。
它接受以下参数:
- w, out_w
输出视频的宽度。它默认为
iw
. 该表达式仅在过滤器配置期间或当 'w' 或者 '输出' 命令已发送。- h, out_h
输出视频的高度。它默认为
ih
. 该表达式仅在过滤器配置期间或当 'H' 或者 '输出_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的计算值。针对每个新帧对它们进行评估。
- 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。
- 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.50.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.50.2 命令
该过滤器支持以下命令:
- w, out_w
- h, out_h
- x
- y
设置输出视频的宽度/高度以及输入视频中的水平/垂直位置。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.51 cropdetect
自动检测裁剪尺寸。
它计算必要的裁剪参数并通过记录系统打印推荐参数。根据mode ,检测到的尺寸对应于输入视频的非黑色或视频区域。
它接受以下参数:
- mode
根据模式的不同,裁剪检测基于周围像素的单纯黑色值或运动矢量和边缘像素的组合。
- ‘black’
检测正在播放的视频周围的黑色像素。为了进行精细控制,请使用选项limit。
- ‘mvedges’
通过视频内的运动矢量检测正在播放的视频,并扫描通常形成正在播放视频的边界的边缘像素。
- limit
设置更高的黑色值阈值,可以选择从无 (0) 到全部指定(对于基于 8 位的格式为 255)。大于设定值的强度值被认为是非黑色。默认为 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] 范围内选择,并且low应小于或等于high。
低的默认值为,
5/255
高的默认 值为15/255
。
39.51.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.51.2 命令
该过滤器支持以下命令:
- limit
该命令接受与相应选项相同的语法。如果指定的表达式无效,则将其保留为当前值。
39.52 cue
延迟视频过滤直到给定的时钟时间戳。过滤器首先通过预卷帧数,那么它最多缓冲 缓冲帧数并等待提示。到达提示后,它会转发缓冲的帧以及输入中的任何后续帧。
该过滤器可用于同步 Decklink 等实时输出设备的多个 ffmpeg 进程的输出。通过将延迟放入过滤链和预缓冲帧中,该过程可以在达到目标时钟时间戳后几乎立即将数据传递到输出。
无法保证完美的帧精度,但结果对于某些用例来说已经足够好了。
- cue
以 UNIX 时间戳(以微秒为单位)表示的提示时间戳。默认值为 0。
- preroll
作为预卷传递的内容的持续时间(以秒为单位)。默认值为 0。
- buffer
等待提示之前缓冲内容的最大持续时间(以秒为单位)。默认值为 0。
39.53 curves
使用曲线应用颜色调整。
此滤镜类似于 Adobe Photoshop 和 GIMP 曲线工具。每个分量(红色、绿色和蓝色)的值由使用平滑曲线相互连接的N 个关键点定义。x 轴表示输入帧的像素值,y 轴表示要为输出帧设置的新像素值。
默认情况下,分量曲线由两个点(0;0)和 (1;1)定义。这会创建一条直线,其中每个原始像素值都“调整”为其自己的值,这意味着图像不会发生变化。
过滤器允许您重新定义这两点并添加更多点。将定义一条新曲线以平滑地通过所有这些新坐标。新定义的点需要在x轴上严格递增,并且它们的
x和y值必须在[0;1]区间内。曲线是通过使用自然或单调三次样条插值形成的,具体取决于interp选项(默认值:natural
)。样natural
条曲线通常会产生更平滑的曲线,而单调 ( pchip
) 样条曲线则保证指定点之间的过渡是单调的。如果计算的曲线碰巧超出向量空间,则这些值将被相应地剪裁。
该过滤器接受以下选项:
- preset
选择可用的颜色预设之一。除了以下选项之外,还可以使用此选项r,G,乙参数; 在这种情况下,后面的选项优先于预设值。可用的预设有:
- ‘none’
- ‘color_negative’
- ‘cross_process’
- ‘darker’
- ‘increase_contrast’
- ‘lighter’
- ‘linear_contrast’
- ‘medium_contrast’
- ‘negative’
- ‘strong_contrast’
- ‘vintage’
默认为
none
.- master, m
设置主关键点。这些点将定义第二遍映射。它有时被称为“亮度”或“值”映射。它可以与 r,G,乙或者全部因为它的作用就像一个后处理 LUT。
- red, r
设置红色组件的关键点。
- green, g
设置绿色组件的关键点。
- blue, b
设置蓝色分量的关键点。
- all
设置所有组件(不包括主组件)的关键点。可以与其他关键点组件选项一起使用。在这种情况下,未设置的组件将回退到此 全部环境。
- psfile
.acv
指定要从中导入设置的 Photoshop 曲线文件 ( )。- plot
将曲线的 Gnuplot 脚本保存在指定文件中。
- interp
指定插值的类型。可用的算法有:
- ‘natural’
使用两次连续可导的分段三次多项式的自然三次样条。
- ‘pchip’
使用分段三次 Hermite 插值多项式 (PCHIP) 的单调三次样条。
为了避免一些filtergraph语法冲突,每个关键点列表需要使用以下语法定义:x0/y0 x1/y1 x2/y2 ...
。
39.53.1 命令
该过滤器支持与选项相同的命令。
39.53.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'
这里我们获得每个组件的以下坐标:
- red
(0;0.11) (0.42;0.51) (1;0.95)
- green
(0;0) (0.50;0.48) (1;1)
- blue
(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.54 datascope
视频数据分析过滤器。
此过滤器显示视频部分的十六进制像素值。
该过滤器接受以下选项:
- size, s
设置输出视频大小。
- x
设置距拾取像素位置的 x 偏移量。
- y
设置距拾取像素位置的 y 偏移量。
- mode
设置范围模式,可以是以下之一:
- ‘mono’
在黑色背景上绘制白色的十六进制像素值。
- ‘color’
在黑色背景上使用输入视频像素颜色绘制十六进制像素值。
- ‘color2’
在从输入视频中选取的颜色背景上绘制十六进制像素值,以这种方式选取文本颜色,使其始终可见。
- axis
在视频的左侧和顶部绘制行数和列数。
- opacity
设置背景不透明度。
- format
设置显示数字格式。可以是
hex
,或者dec
。默认为hex
.- components
设置要显示的像素组件。默认情况下,显示所有像素组件。
39.54.1 命令
该过滤器支持与选项相同的命令,但不包括size
选项。
39.55 dblur
应用定向模糊滤镜。
该过滤器接受以下选项:
- angle
设置方向模糊的角度。默认为
45
.- radius
设置方向模糊的半径。默认为
5
.- planes
设置要过滤的平面。默认情况下,所有平面都会被过滤。
39.55.1 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.56 dctdnoiz
使用 2D DCT(频域滤波)对帧进行去噪。
该过滤器不是为实时设计的。
该过滤器接受以下选项:
- sigma, s
设置噪声西格玛常数。
该西格玛定义了硬阈值
3 * sigma
;每个低于该阈值的 DCT 系数(绝对值)都会被丢弃。如果您需要更高级的过滤,请参阅表达式。
默认为
0
.- overlap
设置每个块的重叠像素数。由于过滤器可能很慢,因此您可能希望降低该值,但代价是过滤器效率较低,并且存在各种伪影的风险。
如果重叠值不允许处理整个输入宽度或高度,则会显示警告,并且不会对相应的边框进行降噪。
默认值为blocksize -1,这是最好的设置。
- expr, e
设置系数因子表达式。
对于 DCT 块的每个系数,该表达式将被计算为该系数的乘数值。
如果设置了此选项,则西格玛选项将被忽略。
系数的绝对值可以通过c 变量访问。
- n
使用位数设置块大小。定义 blocksize,即已处理块的宽度和高度。
1<<n
默认值为3 (8x8),对于 16x16 的块大小可以提高到4 。请注意,更改此设置会对处理速度产生巨大影响。此外,较大的块大小并不一定意味着更好的去噪。
39.56.1 示例
应用降噪西格玛的4.5
:
dctdnoiz=4.5
使用表达式系统可以实现相同的操作:
dctdnoiz=e='gte(c, 4.5*3)'
使用块大小的剧烈降噪16x16
:
dctdnoiz=15:n=4
39.57 deband
从输入视频中去除条带伪影。它的工作原理是用参考像素的平均值替换带状像素。
该过滤器接受以下选项:
- 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.57.1 命令
该过滤器支持以上所有选项作为命令。
39.58 deblock
从输入视频中去除块效应。
该过滤器接受以下选项:
- filter
设置过滤器类型,可以是弱或强。默认很强。这控制应用何种类型的解块。
- block
设置块的大小,允许的范围是 4 到 512。默认为8。
- alpha
- beta
- gamma
- delta
设置阻塞检测阈值。允许的范围是 0 到 1。默认值是:alpha为0.098,其余为0.05 。使用较高的阈值可提供更强的去块效应强度。设置alpha控制块精确边缘的阈值检测。其余选项控制边缘附近的阈值检测。每一个用于下/上或左/右。将其中任何一个设置为0都会禁用去块效应。
- planes
设置要过滤的平面。默认是过滤所有可用的平面。
39.58.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.58.2 命令
该过滤器支持以上所有选项作为命令。
39.59 decimate
定期删除重复的帧。
该过滤器接受以下选项:
- cycle
设置将删除一帧的帧数。将其设置为 N意味着每批N帧中的一帧将被丢弃。默认为
5
.- dupthresh
设置重复检测的阈值。如果帧的差异度量小于或等于该值,则将其声明为重复。默认为
1.1
- scthresh
设置场景变化阈值。默认为
15
.- blockx
- blocky
设置度量计算期间使用的 x 轴和 y 轴块的大小。较大的块可以更好地抑制噪声,但对小运动的检测也较差。必须是二的幂。默认为
32
.- ppsrc
将主输入标记为预处理输入并激活干净的源输入流。这允许使用各种过滤器对输入进行预处理,以帮助度量计算,同时保持帧选择无损。当设置为 时
1
,第一个流用于预处理输入,第二个流是从中选择保留帧的干净源。默认为0
.- chroma
设置在度量计算中是否考虑色度。默认为
1
.- mixed
设置输入是否仅部分包含要抽取的内容。默认为
false
. 如果启用,视频输出流将以可变帧速率进行。
39.60 deconvolve
使用第二个流作为脉冲在频域中应用视频流的 2D 反卷积。
该过滤器接受以下选项:
- planes
设置要处理的平面。
- impulse
设置将处理哪些脉冲视频帧,可以是first 或all。默认为全部。
- noise
进行除法运算时设置噪音。默认值为0.0000001。当宽度和高度不同并且不是 2 的幂或者卷积之前的流有噪声时很有用。
该deconvolve
过滤器还支持帧同步选项。
39.61 dedot
减少视频中的交叉亮度(点爬行)和交叉颜色(彩虹)。
它接受以下选项:
- m
设置操作模式。可以是用于减少交叉亮度的 点爬行和/或用于减少交叉颜色的 彩虹的组合。
- lt
设置空间亮度阈值。较低的值会增加交叉亮度的减少。
- tl
设置时间亮度的容差。较高的值会增加交叉亮度的减少。
- tc
设置色度时间变化的容差。较高的值会增加串色的减少。
- ct
设置时间色度阈值。较低的值会增加串色的减少。
39.62 deflate
对视频应用放气效果。
该滤波器仅考虑低于像素的值,用局部 (3x3) 平均值替换像素。
它接受以下选项:
- threshold0
- threshold1
- threshold2
- threshold3
限制每个平面的最大变化,默认为65535。如果为0,平面将保持不变。
39.62.1 命令
该过滤器支持以上所有选项作为命令。
39.63 deflicker
消除时间帧亮度变化。
它接受以下选项:
- size, s
设置帧中的移动平均过滤器大小。默认值为 5。允许的范围为 2 - 129。
- mode, m
设置平均模式以平滑时间亮度变化。
可用值为:
- ‘am’
算术平均值
- ‘gm’
几何平均数
- ‘hm’
调和平均值
- ‘qm’
二次均值
- ‘cm’
三次平均值
- ‘pm’
功率平均值
- ‘median’
中位数
- bypass
实际上不要修改框架。当只需要元数据时很有用。
39.64 dejudder
消除部分隔行电视电影内容产生的抖动。
例如,可以通过上拉滤波器引入抖动。如果原始源是部分电视电影内容,则输出pullup,dejudder
将具有可变的帧速率。可能会更改容器的记录帧速率。除了这一变化之外,此过滤器不会影响恒定帧速率视频。
此过滤器中可用的选项是:
- cycle
指定重复抖动的窗口长度。
接受任何大于 1 的整数。有用的值有:
- ‘4’
如果原件以 24 fps 到 30 fps 进行电视传送(电影到 NTSC)。
- ‘5’
如果原件以 25 至 30 fps(PAL 至 NTSC)进行电视传送。
- ‘20’
如果两者混合。
默认为 '4'。
39.65 delogo
通过周围像素的简单插值来抑制电视台徽标。只需设置一个矩形覆盖徽标并观察它消失(有时会出现更丑陋的东西 - 您的里程可能会有所不同)。
它接受以下参数:
- x
- y
指定徽标的左上角坐标。必须指定它们。
- w
- h
指定要清除的徽标的宽度和高度。必须指定它们。
- show
当设置为 1 时,屏幕上会绘制一个绿色矩形,以简化查找正确的x、y、w和h参数的过程。默认值为 0。
矩形绘制在最外面的像素上,该像素将(部分)替换为插值。每个方向上紧邻该矩形外部的下一个像素的值将用于计算矩形内部的插值像素值。
39.65.1 示例
- 设置一个覆盖左上角坐标为 0,0、大小为 100x77 的矩形:
delogo=x=0:y=0:w=100:h=77
39.66 derain
通过应用基于卷积神经网络的去雨方法去除输入图像/视频中的雨。支持型号:
- 循环挤压和激励上下文聚合网络(RESCAN)。请参阅http://openaccess.thecvf.com/content_ECCV_2018/papers/Xia_Li_Recurrent_Squeeze-and-Exitation_Context_ECCV_2018_paper.pdf。
存储库中提供了训练和模型生成脚本:https://github.com/XueweiMeng/derain_filter.git。
该过滤器接受以下选项:
- filter_type
指定要使用的过滤器。该选项接受以下值:
- ‘derain’
过滤器除水。要进行去雨过滤,您需要使用去雨模型。
- ‘dehaze’
除雾过滤器。要进行去雾过滤,需要使用去雾模型。
默认值为 '德兰'。
- dnn_backend
指定使用哪个 DNN 后端来加载和执行模型。该选项接受以下值:
- ‘tensorflow’
TensorFlow 后端。要启用此后端,您需要安装 TensorFlow for C 库(请参阅 https://www.tensorflow.org/install/lang_c)并使用以下命令配置 FFmpeg
--enable-libtensorflow
- model
设置模型文件的路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow 只能加载其格式的文件。
要获得完整功能(例如异步执行),请使用dnn_processing过滤器。
39.67 deshake
尝试修复水平和/或垂直移动的微小变化。该滤镜有助于消除因手持相机、碰撞三脚架、在车辆上移动等而导致的相机抖动。
该过滤器接受以下选项:
- x
- y
- w
- h
指定一个矩形区域来限制运动矢量的搜索。如果需要,运动矢量的搜索可以限制在由其左上角、宽度和高度定义的帧的矩形区域内。这些参数与drawbox过滤器具有相同的含义,可用于可视化边界框的位置。
当运动矢量搜索可能将帧内对象的同时运动与相机运动混淆时,这非常有用。
如果x、y、w和h中的任何一个或全部设置为 -1,则使用全帧。这允许设置后面的选项,而无需指定运动矢量搜索的边界框。
默认 - 搜索整个框架。
- rx
- ry
指定 x 和 y 方向的最大移动范围,范围为 0-64 像素。默认 16。
- edge
指定如何生成像素来填充帧边缘的空白。可用值为:
- ‘blank, 0’
在空白处补零
- ‘original, 1’
空白位置的原始图像
- ‘clamp, 2’
空白位置的挤出边缘值
- ‘mirror, 3’
空白位置的镜像边缘
默认值为 '镜子'。
- blocksize
指定用于运动搜索的块大小。范围 4-128 像素,默认 8。
- contrast
指定块的对比度阈值。仅考虑具有超过指定对比度(最暗和最亮像素之间的差异)的块。范围 1-255,默认 125。
- search
指定搜索策略。可用值为:
- ‘exhaustive, 0’
设置穷举搜索
- ‘less, 1’
设置不太详尽的搜索。
默认值为 '详尽的'。
- filename
如果设置,则运动搜索的详细日志将写入指定文件。
39.68 despill
消除由绿屏或蓝屏的反射颜色引起的不必要的前景色污染。
该过滤器接受以下选项:
- type
设置要使用的防溢出类型。
- mix
设置如何生成溢出图。
- expand
设置清除剩余溢出物的量。
- red
控制溢出区域的红色量。
- green
控制溢出区域的绿色量。绿屏应为 -1。
- blue
控制溢出区域的蓝色量。蓝屏时应为 -1。
- brightness
控制溢出区域的亮度,保留颜色。
- alpha
修改生成的溢出贴图中的 alpha。
39.68.1 命令
该过滤器支持以上所有选项作为命令。
39.69 detelecine
应用电视电影操作的精确逆操作。它需要使用模式选项指定的预定义模式,该模式必须与传递到电视电影过滤器的模式相同。
该过滤器接受以下选项:
- first_field
- ‘top, t’
顶场优先
- ‘bottom, b’
底部字段优先 默认值为
top
。
- pattern
一串数字,代表您希望应用的下拉模式。默认值为
23
。- start_frame
表示第一帧相对于电视电影模式的位置的数字。如果流被切断,则将使用此功能。默认值为
0
。
39.70 dilation
对视频应用膨胀效果。
此过滤器用局部 (3x3) 最大值替换像素。
它接受以下选项:
- threshold0
- threshold1
- threshold2
- threshold3
限制每个平面的最大变化,默认为65535。如果为0,平面将保持不变。
- coordinates
指定要引用的像素的标志。默认值为 255,即使用所有八个像素。
标记为本地 3x3 坐标图,如下所示:
1 2 3 4 5 6 7 8
39.70.1 命令
该过滤器支持以上所有选项作为命令。
39.71 displace
替换第二个和第三个输入流所指示的像素。
它接受三个输入流并输出一个流,第一个输入是源,第二和第三输入是位移图。
第二个输入指定沿 x 轴移动像素的量,而第三个输入指定沿 y 轴移动像素的量。如果其中一个置换图流终止,则将使用该置换图的最后一帧。
请注意,一旦生成,位移贴图就可以反复重复使用。
下面是接受的选项的描述。
- edge
设置超出范围的像素的置换行为。
可用值为:
- ‘blank’
缺失的像素被黑色像素替换。
- ‘smear’
相邻像素将展开以替换丢失的像素。
- ‘wrap’
超出范围的像素将被包裹,以便它们指向另一侧的像素。
- ‘mirror’
超出范围的像素将被镜像像素替换。
默认为 '涂抹'。
39.71.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.72 dnn_classify
使用基于边界框的深度神经网络进行分类。
该过滤器接受以下选项:
- dnn_backend
指定使用哪个 DNN 后端来加载和执行模型。此选项现在仅接受 openvino,将添加 TensorFlow 后端。
- model
设置模型文件的路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。
- input
设置 dnn 网络的输入名称。
- output
设置 dnn 网络的输出名称。
- confidence
设置置信度阈值(默认值:0.5)。
- labels
设置标签文件的路径,指定标签 ID 和名称之间的映射。每个标签名称写在一行中,跳过尾部空格和空行。第一行是 id 0 的标签名称,第二行是 id 1 的标签名称,以此类推。如果不提供标签文件,则以标签 id 视为名称。
- backend_configs
设置要传递到后端的配置
对于tensorflow后端,您可以使用以下命令设置其配置会话配置选项,请使用tools/python/tf_sess_config.py 获取您系统的配置。
39.73 dnn_detect
使用深度神经网络进行对象检测。
该过滤器接受以下选项:
- dnn_backend
指定使用哪个 DNN 后端来加载和执行模型。此选项现在仅接受 openvino,将添加 TensorFlow 后端。
- model
设置模型文件的路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。
- input
设置 dnn 网络的输入名称。
- output
设置 dnn 网络的输出名称。
- confidence
设置置信度阈值(默认值:0.5)。
- labels
设置标签文件的路径,指定标签 ID 和名称之间的映射。每个标签名称写在一行中,跳过尾部空格和空行。第一行是标签 id 0 的名称(通常是“背景”),第二行是标签 id 1 的名称,以此类推。如果未提供标签文件,则将标签 id 视为名称。
- backend_configs
设置要传递到后端的配置。要使用异步执行,请设置 async(默认值:set)。如果后端不支持异步,则回滚到同步执行。
39.74 dnn_processing
使用深度神经网络进行图像处理。它与另一个过滤器一起工作,将帧的像素格式转换为 dnn 网络所需的格式。
该过滤器接受以下选项:
- dnn_backend
指定使用哪个 DNN 后端来加载和执行模型。该选项接受以下值:
- ‘tensorflow’
TensorFlow 后端。要启用此后端,您需要安装 TensorFlow for C 库(请参阅 https://www.tensorflow.org/install/lang_c)并使用以下命令配置 FFmpeg
--enable-libtensorflow
- ‘openvino’
OpenVINO 后端。要启用此后端,您需要构建并安装 OpenVINO for C 库(请参阅 https://github.com/openvinotoolkit/openvino/blob/master/build-instruction.md)并使用
--enable-libopenvino
(–extra-cflags=- I... –extra-ldflags=-L... 如果头文件和库未安装到系统路径中,则可能需要)
- model
设置模型文件的路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow、OpenVINO 后端只能加载其格式的文件。
- input
设置 dnn 网络的输入名称。
- output
设置 dnn 网络的输出名称。
- backend_configs
设置要传递到后端的配置。要使用异步执行,请设置 async(默认值:set)。如果后端不支持异步,则回滚到同步执行。
对于tensorflow后端,您可以使用以下命令设置其配置会话配置选项,请使用tools/python/tf_sess_config.py获取您系统的TensorFlow后端配置。
39.74.1 示例
- 使用 can.pb 去除 rgb24 帧中的雨水(请参阅derain过滤器):
./ffmpeg -i rain.jpg -vf format=rgb24,dnn_processing=dnn_backend=tensorflow:model=can.pb:input=x:output=y derain.jpg
- 使用 srcnn.pb(参见sr过滤器)处理 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(请参阅sr过滤器)处理 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.75 drawbox
在输入图像上绘制一个彩色框。
它接受以下参数:
- x
- y
指定框左上角坐标的表达式。默认为 0。
- width, w
- height, h
指定框的宽度和高度的表达式;如果为 0,则它们被解释为输入宽度和高度。默认为 0。
- color, c
指定要写入的框的颜色。有关此选项的一般语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。如果使用特殊值
invert
,则框边缘颜色与具有反转亮度的视频相同。- thickness, t
设置框边缘厚度的表达式。值
fill
将创建一个填充框。默认值为3
。请参阅下面的可接受常量列表。
- replace
如果输入具有 Alpha,则适用。使用 value 时
1
,绘制框的像素将覆盖视频的颜色和 Alpha 像素。默认值为0
,它将框合成到输入上,使视频的 Alpha 保持不变。
x、y、w、h和t的参数是包含以下常量的表达式:
- dar
输入显示宽高比,与 ( w / h ) * sar相同。
- hsub
- vsub
水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub为 1。
- in_h, ih
- in_w, iw
输入的宽度和高度。
- sar
输入样本的长宽比。
- x
- y
绘制框的 x 和 y 偏移坐标。
- w
- h
绘制框的宽度和高度。
- box_source
如果要在边数据的检测bboxes中使用box数据,可以将box source设置为side_data_detection_bboxes。
如果设置了box_source ,则x、y、宽度和高度将被忽略,并且仍然使用框数据来检测侧面数据的框。因此,如果您不确定盒子来源,请不要使用此参数。
- t
拉制盒子的厚度。
这些常量允许x、y、w、h和t表达式相互引用,因此您可以指定
y=x/dar
orh=w/dar
。
39.75.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.75.2 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.76 drawgraph
使用输入视频元数据绘制图表。
它接受以下参数:
- 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 手册中的 (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.77 drawgrid
在输入图像上绘制网格。
它接受以下参数:
- x
- y
指定网格交点某个点坐标的表达式(用于配置偏移)。两者都默认为 0。
- width, w
- height, h
指定网格单元宽度和高度的表达式,如果为 0,则它们分别解释为输入宽度和高度,减去
thickness
,因此图像会被框起来。默认为 0。- color, c
指定网格的颜色。有关此选项的一般语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。如果使用特殊值
invert
,网格颜色与亮度反转的视频相同。- thickness, t
设置网格线粗细的表达式。默认值为
1
。请参阅下面的可接受常量列表。
- replace
如果输入具有 Alpha,则适用。绘制网格的像素
1
将覆盖视频的颜色和 Alpha 像素。默认值为0
,它将网格合成到输入上,使视频的 Alpha 保持不变。
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
orh=w/dar
。
39.77.1 示例
- 绘制一个网格,单元格大小为 100x100 像素,厚度为 2 像素,颜色为红色,不透明度为 50%:
drawgrid=width=100:height=100:thickness=2:color=red@0.5
- 绘制一个白色的 3x3 网格,不透明度为 50%:
drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5
39.77.2 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.78 drawtext
使用 libfreetype 库在视频顶部绘制文本字符串或指定文件中的文本。
To enable compilation of this filter, you need to configure FFmpeg with
--enable-libfreetype
and --enable-libharfbuzz
.
To enable default font fallback and the font option you need to
configure FFmpeg with --enable-libfontconfig
.
To enable the text_shaping option, you need to configure FFmpeg with
--enable-libfribidi
.
39.78.1 Syntax
It accepts the following parameters:
- box
Used to draw a box around text using the background color. The value must be either 1 (enable) or 0 (disable). The default value of box is 0.
- boxborderw
Set the width of the border to be drawn around the box using boxcolor. The value must be specified using one of the following formats:
-
boxborderw=10
set the width of all the borders to 10 -
boxborderw=10|20
set the width of the top and bottom borders to 10 and the width of the left and right borders to 20 -
boxborderw=10|20|30
set the width of the top border to 10, the width of the bottom border to 30 and the width of the left and right borders to 20 -
boxborderw=10|20|30|40
set the borders width to 10 (top), 20 (right), 30 (bottom), 40 (left)
The default value of boxborderw is "0".
-
- boxcolor
The color to be used for drawing box around text. For the syntax of this option, check the (ffmpeg-utils)"Color" section in the ffmpeg-utils manual.
The default value of boxcolor is "white".
- line_spacing
Set the line spacing in pixels. The default value of line_spacing is 0.
- text_align
Set the vertical and horizontal alignment of the text with respect to the box boundaries. The value is combination of flags, one for the vertical alignment (T=top, M=middle, B=bottom) and one for the horizontal alignment (L=left, C=center, R=right). Please note that tab characters are only supported with the left horizontal alignment.
- y_align
Specify what the y value is referred to. Possible values are:
-
text
the top of the highest glyph of the first text line is placed at y -
baseline
the baseline of the first text line is placed at y -
font
the baseline of the first text line is placed at y plus the ascent (in pixels) defined in the font metrics
The default value of y_align is "text" for backward compatibility.
-
- borderw
Set the width of the border to be drawn around the text using bordercolor. The default value of borderw is 0.
- bordercolor
Set the color to be used for drawing border around text. For the syntax of this option, check the (ffmpeg-utils)"Color" section in the ffmpeg-utils manual.
The default value of bordercolor is "black".
- expansion
选择文本的扩展方式。可以是
none
,strftime
(已弃用)或normal
(默认)。有关详细信息,请参阅 下面的文本扩展部分。- basetime
设置计数的开始时间。值以微秒为单位。仅适用于已弃用的
strftime
扩展模式。要在正常扩展模式下进行模拟,请使用该pts
函数,并提供开始时间(以秒为单位)作为第二个参数。- fix_bounds
如果为 true,请检查并修复文本坐标以避免剪切。
- fontcolor
用于绘制字体的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。
字体颜色的默认值为“黑色”。
- fontcolor_expr
以与文本相同的方式扩展的字符串以获得动态 字体颜色值。默认情况下,此选项具有空值并且不被处理。设置此选项后,它将覆盖fontcolor选项。
- font
用于绘制文本的字体系列。默认情况下为 Sans。
- fontfile
用于绘制文本的字体文件。必须包含路径。如果禁用 fontconfig 支持,则此参数是必需的。
- alpha
应用 Alpha 混合绘制文本。该值可以是 0.0 到 1.0 之间的数字。该表达式也接受相同的变量x、y。默认值为 1。请参阅fontcolor_expr。
- fontsize
用于绘制文本的字体大小。字体大小的默认值为16。
- text_shaping
如果设置为 1,则在绘制文本之前尝试调整文本形状(例如,反转从右到左文本的顺序并加入阿拉伯字符)。否则,只需完全按照给定的方式绘制文本即可。默认为 1(如果支持)。
- ft_load_flags
用于加载字体的标志。
这些标志映射了 libfreetype 支持的相应标志,并且是以下值的组合:
- default
- no_scale
- no_hinting
- render
- no_bitmap
- vertical_layout
- force_autohint
- crop_bitmap
- pedantic
- ignore_global_advance_width
- no_recurse
- ignore_transform
- monochrome
- linear_design
- no_autohint
默认值为“默认”。
有关更多信息,请参阅 FT_LOAD_* libfreetype 标志的文档。
- shadowcolor
用于在绘制的文本后面绘制阴影的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。
阴影颜色的默认值为“黑色”。
- boxw
设置要在文本周围绘制的框的宽度。boxw的默认值是自动计算的以匹配文本宽度
- boxh
设置要在文本周围绘制的框的高度。自动计算 boxh的默认值以匹配文本高度
- shadowx
- shadowy
文本阴影位置相对于文本位置的 x 和 y 偏移。它们可以是正值也可以是负值。两者的默认值都是“0”。
- start_number
n/frame_num 变量的起始帧编号。默认值为“0”。
- tabsize
用于呈现选项卡的空格数量的大小。默认值为 4。
- timecode
以“hh:mm:ss[:;.]ff”格式设置初始时间码表示形式。它可以与或不与文本参数一起使用。 必须指定 timecode_rate选项。
- timecode_rate, rate, r
设置时间码帧速率(仅限时间码)。值将四舍五入到最接近的整数。最小值为“1”。帧速率 30 和 60 支持丢帧时间码。
- tc24hmax
如果设置为 1,时间码选项的输出将在 24 小时内环绕。默认值为 0(禁用)。
- text
要绘制的文本字符串。文本必须是 UTF-8 编码字符序列。如果没有使用参数textfile指定文件,则此参数是必需的 。
- textfile
包含要绘制的文本的文本文件。文本必须是 UTF-8 编码字符序列。
如果参数 text 没有指定文本字符串,则此参数是必需的。
如果同时指定了text和textfile,则会引发错误。
- text_source
如果要在侧数据的检测bbox中使用文本数据,则应将文本源设置为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
最大字形高度,即渲染文本中包含的所有字形的最大高度,相当于ascent -escent 。
- 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.78.2 文本扩展
如果扩张设置为 时strftime
,过滤器会strftime
识别所提供文本中 C 函数接受的序列并相应地扩展它们。检查 的文档
strftime
。此功能已弃用,有利于normal
使用gmtime
或localtime
扩展函数进行扩展。
如果扩张设置为 时none
,文本将逐字打印。
如果扩张设置为normal
(这是默认值),则使用以下扩展机制。
反斜杠字符 '\' 后跟任何字符,始终扩展到第二个字符。
形式的序列%{...}
被扩展。大括号之间的文本是函数名称,后面可能是用“:”分隔的参数。如果参数包含特殊字符或分隔符(“:”或“}”),则应对它们进行转义。
请注意,它们可能还必须作为值进行转义文本 过滤器参数字符串中的选项以及过滤器图描述中的过滤器参数,也可能适用于 shell,最多可构成四个级别的转义;使用文本文件文本文件选项可以避免这些问题。
可以使用以下功能:
expr, e
表达式求值结果。
它必须采用一个参数来指定要计算的表达式,该表达式接受与x和 y值相同的常量和函数。请注意,并非所有常量都应使用,例如,在计算表达式时不知道文本大小,因此常量text_w和text_h将具有未定义的值。
expr_int_format, eif
计算表达式的值并将其输出为格式化整数。
第一个参数是要计算的表达式,就像expr函数一样。第二个参数指定输出格式。允许的值为 'X','X','d' 和 '你'。它们的处理方式与函数中完全相同
printf
。第三个参数是可选的,用于设置输出所占据的位置数。它可用于从左侧添加零填充。gmtime
过滤器运行的时间,以 UTC 表示。它可以接受一个参数:
strftime
C 函数格式字符串。格式字符串经过扩展以支持变量%[1-6]N ,该变量以可选指定的位数打印秒的小数部分。localtime
过滤器运行的时间,以本地时区表示。它可以接受一个参数:
strftime
C 函数格式字符串。格式字符串经过扩展以支持变量%[1-6]N ,该变量以可选指定的位数打印秒的小数部分。metadata
框架元数据。采用一两个参数。
第一个参数是强制性的,指定元数据键。
第二个参数是可选的,指定默认值,当元数据键未找到或为空时使用。
可以通过检查运行打印的每个帧部分中包含的以 TAG 开头的条目来识别可用的元数据
ffprobe -show_frames
。通向绘图文本过滤器的过滤器中生成的字符串元数据也可用。
n, frame_num
帧编号,从0开始。
pict_type
当前图片类型的一个字符描述。
pts
当前帧的时间戳。它最多可能需要三个参数。
第一个参数是时间戳的格式;它默认为
flt
十进制数秒,精度为微秒;hms
代表格式化的[-]HH:MM:SS.mmm时间戳,精度为毫秒。gmtime
代表帧的时间戳,格式为UTC时间;localtime
代表帧的时间戳,格式为本地时区时间。第二个参数是添加到时间戳的偏移量。
如果格式设置为,则可以提供
hms
第三个参数,以 24 小时格式 (00-23) 呈现格式化时间戳的小时部分。24HH
如果格式设置为
localtime
或gmtime
,则可以提供第三个参数:strftime
C 函数格式字符串。默认情况下,将使用 YYYY-MM-DD HH:MM:SS格式。
39.78.3 命令
该过滤器支持通过命令更改参数:
- reinit
更改现有的过滤器参数。
参数的语法与过滤器调用相同,例如
fontsize=56:fontcolor=green:text='Hello World'
使用 sendcmd 的完整过滤器调用如下所示:
sendcmd=c='56.0 drawtext reinit fontsize=56\:fontcolor=green\:text=Hello\\ World'
如果整个参数无法解析或应用为有效值,则过滤器将继续使用其现有参数。
还支持以下选项作为命令:
- X
- y
- α
- 字体大小
- 字体颜色
- 盒子颜色
- 边框颜色
- 阴影颜色
- 盒子
- 盒子
- 盒子
- 盒子边框
- 行间距
- 文本对齐
- 影子x
- 阴暗的
- 边界
39.78.4 示例
- 使用 FreeSerif 字体绘制“测试文本”,使用可选参数的默认值。
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
- 在位置 x=100 和 y=50(从屏幕左上角开始计算)处使用大小为 24 的 FreeSerif 字体绘制“测试文本”,文本为黄色,周围有红色框。文本和框的不透明度均为 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"
- 显示文件内容学分离开框架底部并向上滚动。
drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
- 在输入视频的中心绘制一个绿色字母“g”。字形基线放置在半个屏幕高度。
drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
- 每 3 秒显示文本 1 秒:
drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
- 使用 fontconfig 设置字体。请注意,冒号需要转义。
drawtext='fontfile=Linux Libertine O-40\:style=Semibold:text=FFmpeg'
- 根据视频的高度绘制字体大小的“测试文本”。
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 }"
- 水平对齐多个单独的文本。注意最大字形_a
和字体大小值包含在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 解复用器必须有选项-导出路径元数据 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.79 edgedetect
检测并绘制边缘。该过滤器使用 Canny 边缘检测算法。
该过滤器接受以下选项:
- low
- high
设置 Canny 阈值算法使用的低阈值和高阈值。
高阈值选择“强”边缘像素,然后将其通过8-连通性与低阈值选择的“弱”边缘像素连接。
低阈值和高阈值必须在 [0,1] 范围内选择,并且low应小于或等于high。
低的默认值为,
20/255
高的默认 值为50/255
。- mode
定义绘图模式。
- ‘wires’
在黑色背景上绘制白色/灰色电线。
- ‘colormix’
混合颜色以创建绘画/卡通效果。
- ‘canny’
在所有选定的平面上应用 Canny 边缘检测器。
默认值为wires。
- planes
选择用于过滤的平面。默认情况下,所有可用平面都会被过滤。
39.79.1 示例
- 标准边缘检测以及滞后阈值的自定义值:
edgedetect=low=0.1:high=0.4
- 没有阈值处理的绘画效果:
edgedetect=mode=colormix:high=0
39.80 elbg
使用 ELBG(增强型 LBG)算法应用色调分离效果。
对于每个输入图像,滤波器将在给定码本长度(即不同输出颜色的数量)的情况下计算从输入到输出的最佳映射。
该过滤器接受以下选项。
- codebook_length, l
设置码本长度。该值必须是正整数,表示不同输出颜色的数量。默认值为 256。
- nb_steps, n
设置用于计算最佳映射的最大迭代次数。值越高,结果越好,但计算时间越长。默认值为 1。
- seed, s
设置随机种子,必须是 0 到 UINT32_MAX 之间的整数。如果未指定,或者明确设置为 -1,过滤器将尽力使用良好的随机种子。
- pal8
设置 pal8 输出像素格式。此选项不适用于大于 256 的码本长度。默认值处于禁用状态。
- use_alpha
在量化计算中包含 alpha 值。允许创建具有多个 alpha 平滑混合的调色板输出图像(例如 PNG8)。
39.81 entropy
测量视频帧颜色通道直方图中的灰度熵。
它接受以下参数:
- mode
可以是正常的或差异的。默认为正常。
diff模式测量直方图增量值的熵,即相邻直方图值之间的绝对差异。
39.82 epx
应用专为像素艺术设计的 EPX 放大滤镜。
它接受以下选项:
- n
设置缩放尺寸:
2
for2xEPX
,3
for3xEPX
。默认为3
.
39.83 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’
评估每个传入帧的表达式
默认值为 '在里面'。
这些表达式接受以下参数:
- n
输入帧的帧数从0开始
- pos
输入文件中相应数据包的字节位置,如果未指定则为 NAN;已弃用,请勿使用
- r
输入视频的帧率,如果输入帧率未知则为 NAN
- t
时间戳以秒表示,如果输入时间戳未知,则为 NAN
39.83.1 命令
过滤器支持以下命令:
- contrast
设置对比度表达式。
- brightness
设置亮度表达式。
- saturation
设置饱和度表达式。
- gamma
设置伽马表达式。
- gamma_r
设置 gamma_r 表达式。
- gamma_g
设置 gamma_g 表达式。
- gamma_b
设置 gamma_b 表达式。
- gamma_weight
设置 gamma_weight 表达式。
该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.84 erosion
对视频应用腐蚀效果。
此过滤器用局部 (3x3) 最小值替换像素。
它接受以下选项:
- threshold0
- threshold1
- threshold2
- threshold3
限制每个平面的最大变化,默认为65535。如果为0,平面将保持不变。
- coordinates
指定要引用的像素的标志。默认值为 255,即使用所有八个像素。
标记为本地 3x3 坐标图,如下所示:
1 2 3 4 5 6 7 8
39.84.1 命令
该过滤器支持以上所有选项作为命令。
39.85 estdif
对输入视频进行去隔行处理(“estdif”代表“边缘倾斜跟踪去隔行过滤器”)。
仅空间滤波器,使用边缘坡度跟踪算法来插入缺失的线。它接受以下参数:
- mode
采用的隔行扫描模式。它接受以下值之一:
- frame
每帧输出一帧。
- field
每个字段输出一帧。
默认值为
field
。- parity
针对输入隔行扫描视频假设的图像场奇偶校验。它接受以下值之一:
- tff
假设顶部字段是第一个。
- bff
假设底部字段是第一个。
- auto
启用字段奇偶校验的自动检测。
默认值为
auto
。如果隔行扫描未知或解码器不导出此信息,则将假定顶场优先。- deint
指定要取消隔行扫描的帧。接受以下值之一:
- all
对所有帧进行去隔行处理。
- interlaced
仅对标记为隔行的去隔行帧进行处理。
默认值为
all
。- rslope
指定边缘坡度追踪的搜索半径。默认值为 1。允许的范围为 1 到 15。
- redge
指定最佳边缘匹配的搜索半径。默认值为 2。允许的范围为 0 到 15。
- ecost
指定边缘匹配的边缘成本。默认值为 2。允许的范围为 0 到 50。
- mcost
指定边缘匹配的中间成本。默认值为 1。允许的范围为 0 到 50。
- dcost
指定边缘匹配的距离成本。默认值为 1。允许的范围为 0 到 50。
- interp
指定使用的插值。默认为 4 点插值。它接受以下值之一:
- 2p
两点插值。
- 4p
四点插值。
- 6p
六点插值。
39.85.1 命令
该过滤器支持与选项相同的命令。
39.86 exposure
调整视频流的曝光度。
该过滤器接受以下选项:
- exposure
在 EV 中设置曝光校正。允许范围为 -3.0 至 3.0 EV 默认值为 0 EV。
- black
设置黑电平校正。允许的范围是从 -1.0 到 1.0。默认值为 0。
39.86.1 命令
该过滤器支持与选项相同的命令。
39.87 extractplanes
将输入视频流中的颜色通道分量提取到单独的灰度视频流中。
过滤器接受以下选项:
- planes
设置要提取的平面。
平面的可用值为:
- ‘y’
- ‘u’
- ‘v’
- ‘a’
- ‘r’
- ‘g’
- ‘b’
选择输入中不可用的平面将导致错误。这意味着您不能同时 选择
r
,g
,b
平面和y
,u
,平面。v
39.87.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.88 fade
对输入视频应用淡入/淡出效果。
它接受以下参数:
- type, t
效果类型可以是“in”(淡入)或“out”(淡出效果)。默认为
in
.- start_frame, s
指定开始应用淡入淡出效果的帧数。默认值为 0。
- nb_frames, n
淡入淡出效果持续的帧数。淡入效果结束时,输出视频将具有与输入视频相同的强度。在淡出过渡结束时,输出视频将填充所选内容颜色。默认值为 25。
- alpha
如果设置为 1,则仅淡出 Alpha 通道(如果输入上存在)。默认值为 0。
- start_time, st
指定开始应用淡入淡出效果的帧的时间戳(以秒为单位)。如果同时指定了 start_frame 和 start_time,则淡入淡出将从最后一个开始。默认值为 0。
- duration, d
淡入淡出效果必须持续的秒数。在淡入效果结束时,输出视频将具有与输入视频相同的强度,在淡出过渡结束时,输出视频将填充所选内容颜色。如果同时指定了duration 和nb_frames,则使用duration。默认值为 0(默认使用 nb_frames)。
- color, c
指定淡入淡出的颜色。默认为“黑色”。
39.88.1 示例
- 淡入视频的前 30 帧:
fade=in:0:30
上面的命令相当于:
fade=t=in:s=0:n=30
- 淡出 200 帧视频的最后 45 帧:
fade=out:155:45 fade=type=out:start_frame=155:nb_frames=45
- 淡入 1000 帧视频的前 25 帧并淡出最后 25 帧:
fade=in:0:25, fade=out:975:25
- 将前 5 帧设为黄色,然后从第 5-24 帧淡入:
fade=in:5:20:color=yellow
- 在视频的前 25 帧上淡入 Alpha:
fade=in:0:25:alpha=1
- 将前 5.5 秒设为黑色,然后淡入 0.5 秒:
fade=t=in:st=5.5:d=0.5
39.89 feedback
应用反馈视频过滤器。
该过滤器将裁剪后的输入帧传递到第二个输出。从那里可以使用其他视频过滤器对其进行过滤。过滤器接收到来自第二个输入的帧后,该帧会合并到来自第一个输入的原始帧之上,并传递到第一个输出。
典型用法是仅过滤帧的一部分。
该过滤器接受以下选项:
- x
- y
设置左上角的裁剪位置。
- w
- h
设置裁剪尺寸。
39.89.1 示例
- 使用 gblur 滤镜仅模糊视频帧大小 100x100 的左上角矩形部分。
[in][blurin]feedback=x=0:y=0:w=100:h=100[out][blurout];[blurout]gblur=8[blurin]
- 使用抽屉式滤镜在大小为 100x100 的视频帧的左上部分绘制黑框。
[in][blurin]feedback=x=0:y=0:w=100:h=100[out][blurout];[blurout]drawbox=x=0:y=0:w=100:h=100:t=100[blurin]
- 使用像素化滤镜对大小为 100x100 的视频帧的矩形部分进行像素化。
[in][blurin]feedback=x=320:y=240:w=100:h=100[out][blurout];[blurout]pixelize[blurin]
39.90 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.91 fftfilt
将任意表达式应用于频域中的样本
- dc_Y
调整图像亮度平面的dc值(增益)。
0
过滤器接受范围为的整数值1000
。默认值设置为0
。- dc_U
调整图像第一色度平面的dc值(增益)。
0
过滤器接受范围为的整数值1000
。默认值设置为0
。- dc_V
调整图像第二色度平面的dc值(增益)。
0
过滤器接受范围为的整数值1000
。默认值设置为0
。- weight_Y
设置亮度平面的频域权重表达式。
- weight_U
设置第一个色度平面的频域权重表达式。
- weight_V
设置第二色度平面的频域权重表达式。
- eval
计算表达式时设置。
它接受以下值:
- ‘init’
在过滤器初始化期间仅对表达式求值一次。
- ‘frame’
评估每个传入帧的表达式。
默认值为 '在里面'。
过滤器接受以下变量:
- X
- Y
当前样本的坐标。
- W
- H
图像的宽度和高度。
- N
输入帧的编号,从0开始。
- WS
- HS
用于水平和垂直处理的 FFT 阵列的大小。
39.91.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.92 field
使用步幅算法从隔行扫描图像中提取单个字段,以避免浪费 CPU 时间。输出帧被标记为非隔行扫描。
该过滤器接受以下选项:
- type
指定是提取顶部字段(如果值为
0
或top
)还是底部字段(如果值为1
或bottom
)。
39.93 fieldhint
通过复制提示文件提供的周围帧的顶部和底部字段来创建新帧。
- hint
设置包含提示的文件:绝对/相对帧号。
剪辑中的每一帧必须有一行。每行必须包含两个以逗号分隔的数字,可以选择后跟
-
或+
。文件每行提供的数字不能超出 [N-1,N+1],其中 N 是absolute
模式的当前帧编号,也不能超出relative
模式的 [-1, 1] 范围。第一个数字告诉我们从哪一帧拾取顶场,第二个数字告诉我们从哪一帧拾取底场。如果可选地后跟
+
输出帧将被标记为隔行,否则如果后跟-
输出帧将被标记为逐行,否则它将被标记为与输入帧相同。如果可选地跟随t
输出帧,则将仅使用顶场,或者在这种情况下,b
将仅使用底场。如果行以#
或开头,;
则跳过该行。- mode
可以是 item
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.94 fieldmatch
用于逆电视电影的场匹配滤波器。它旨在从电视电影流中重建逐行帧。该滤波器不会丢弃重复的帧,因此要实现完整的逆电视电影,需要在滤波器图中
fieldmatch
跟随抽取滤波器,例如抽取滤波器。
场匹配和抽取的分离主要是由于可以在两者之间插入去隔行滤波器回退的可能性。如果源混合了电视电影和真实隔行扫描内容,
fieldmatch
将无法匹配隔行扫描部分的字段。但这些剩余的精梳帧将被标记为隔行扫描,因此可以在抽取之前通过稍后的滤波器(例如yadif)去隔行扫描。
除了各种配置选项之外,fieldmatch
还可以采用可选的第二个流,通过PPSRC选项。如果启用,帧重建将基于第二个流中的字段和帧。这允许对第一个输入进行预处理,以帮助过滤器的各种算法,同时保持输出无损(假设字段匹配正确)。通常,现场感知降噪器或亮度/对比度调整会有所帮助。
请注意,此过滤器使用与 TIVTC/TFM(AviSynth 项目)和 VIVTC/VFM(VapourSynth 项目)相同的算法。后者是基于 TFM 的轻型克隆fieldmatch
。虽然语义和用法非常接近,但某些行为和选项名称可能有所不同。
抽取滤波器当前仅适用于恒定帧速率输入。如果您的输入混合了电视电影 (30fps) 和具有较低帧速率(如 24fps)的渐进式内容,请使用以下过滤器链来生成必要的 CFR 流:dejudder,fps=30000/1001,fieldmatch,decimate
。
该过滤器接受以下选项:
- order
指定输入流的假定字段顺序。可用值为:
- ‘auto’
自动检测奇偶校验(使用 FFmpeg 的内部奇偶校验值)。
- ‘bff’
假设底场优先。
- ‘tff’
假设顶场优先。
请注意,有时建议不要信任流宣布的奇偶校验。
默认值为自动。
- mode
设置要使用的匹配模式或策略。个人电脑模式是最安全的,因为它不会在可能的情况下冒因重复帧而产生抖动的风险,但如果存在错误的编辑或混合字段,当实际存在良好匹配时,它最终会输出梳理帧。另一方面,pcn_ub模式在产生抖动方面风险最大,但如果有的话,几乎总能找到一个好的框架。其他值都介于两者之间个人电脑和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 路匹配,如果仍然梳理 (p/c + u),则尝试第 3 个匹配(相同顺序)
- ‘pc_n_ub’
2 路匹配,如果仍然梳理,则尝试第 3 个匹配,如果仍然梳理,则尝试第 4/5 个匹配 (p/c + n + u/b)
- ‘pcn’
3 路匹配 (p/c/n)
- ‘pcn_ub’
3 路匹配,如果所有 3 个原始匹配都被检测为已梳理 (p/c/n + u/b),则尝试第 4/5 个匹配
末尾的括号表示将用于该模式的匹配假设命令= tff(并且场地在自动或 顶部)。
在速度方面个人电脑模式是迄今为止最快的pcn_ub是最慢的。
默认值为pc_n。
- ppsrc
将主输入流标记为预处理输入,并启用辅助输入流作为从中选取字段的干净源。更多详情请参见过滤器介绍。它类似于剪辑2VFM/TFM 的功能。
默认值为
0
(禁用)。- field
设置要匹配的字段。建议将其设置为与以下相同的值 命令除非您在该设置下遇到匹配失败的情况。在某些情况下,更改用于匹配的字段可能会对匹配性能产生很大影响。可用值为:
- ‘auto’
自动(与命令)。
- ‘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]
范围内。场景变化检测仅在以下情况下相关梳子比赛= SC . 范围为 sthresh是[0.0, 100.0]
。默认值为
12.0
。- combmatch
什么时候战斗不是none,
fieldmatch
在决定使用哪个比赛作为最终比赛时会考虑比赛的梳理分数。可用值为:- ‘none’
没有基于梳理分数的最终匹配。
- ‘sc’
仅当检测到场景变化时才使用组合分数。
- ‘full’
始终使用梳理乐谱。
默认为sc。
- combdbg
强制
fieldmatch
计算某些匹配的梳理指标并打印它们。此设置称为麦克风输出在 TFM/VFM 词汇中。可用值为:- ‘none’
没有强制计算。
- ‘pcn’
强制 p/c/n 计算。
- ‘pcnub’
强制 p/c/n/u/b 计算。
默认值为none。
- cthresh
这是用于梳理帧检测的区域梳理阈值。这本质上控制了必须检测到的“强”或“可见”梳理的程度。较大的值意味着梳理必须更明显,较小的值意味着梳理可能不那么明显或强烈,但仍然可以检测到。有效设置是从
-1
(每个像素都将被检测为梳理)到255
(没有像素将被检测为梳理)。这基本上是像素差值。一个好的范围是[8, 12]
.默认值为
9
。- chroma
设置在精梳帧决策中是否考虑色度。仅当您的源存在色度问题(彩虹等)并导致启用色度的梳理帧检测出现问题时才禁用此功能。实际上,使用色度= 0通常更可靠,除了源中仅存在色度组合的情况。
默认值为
0
。- blockx
- blocky
分别设置梳帧检测时使用的窗口的x轴和y轴大小。这与所在区域的大小有关 康佩尔需要将像素检测为已梳理的,才能声明已梳理的帧。请参阅康佩尔参数说明以获取更多信息。可能的值是从 4 开始到 512 的 2 的幂的任何数字。
默认值为
16
。- combpel
任何内部的梳理像素数块状的经过 块xsize 帧上要检测的帧的块大小。尽管阈值控制梳理必须有多“可见”,此设置控制在任何局部区域(由定义的窗口)中必须有“多少”梳理。块x和块状的设置)在框架上。最小值为
0
,最大值为blocky x blockx
(此时将不会检测到已梳理的任何帧)。此设置称为心肌梗塞在 TFM/VFM 词汇中。默认值为
80
。
39.94.1 p/c/n/u/b 含义
39.94.1.1 p/c/n
我们假设以下电视电影流:
Top fields: 1 2 2 3 4 Bottom fields: 1 2 3 4 4
这些数字对应于字段相关的逐行扫描帧。这里,前两帧是逐行的,第三帧和第四帧是梳理的,依此类推。
当fieldmatch
配置为从底部运行匹配时(场地=底部)这就是输入流的转换方式:
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
作为字段匹配的结果,我们可以看到一些帧被重复。要执行完整的逆电视电影,在此操作后需要依赖抽取滤波器。例如,参见抽取滤波器。
现在从顶部字段匹配相同的操作(场地=顶部) 看起来像这样:
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.94.1.2u/b
u和b匹配有点特殊,因为它们从相反的奇偶校验标志进行匹配。在以下示例中,我们假设当前正在匹配第二帧(顶部:2,底部:2)。根据匹配情况,每个匹配字段的上方和下方都会放置一个“x”。
与底部匹配(场地=底部):
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
与顶部匹配 (场地=顶部):
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.94.2 示例
顶场优先电视电影流的简单 IVTC:
fieldmatch=order=tff:combmatch=none, decimate
高级 IVTC,对于静止梳理帧可 回退到yadif :
fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate
39.95 fieldorder
转换输入视频的场序。
它接受以下参数:
- order
输出字段顺序。有效值为tff(顶场优先)或bff (底场优先)。
默认值为 '特夫'。
转换是通过将图片内容向上或向下移动一行,并用适当的图片内容填充剩余行来完成的。此方法与大多数广播场序转换器一致。
如果输入视频未标记为隔行扫描,或者已标记为具有所需的输出场顺序,则此过滤器不会更改传入视频。
当转换为 PAL DV 素材或从 PAL DV 素材(底场优先)转换时,此功能非常有用。
例如:
ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
39.96 fifo, afifo
缓冲输入图像并在请求时发送它们。
它主要在由 libavfilter 框架自动插入时有用。
它不带参数。
39.97 fillborders
填充输入视频的边框,而不更改视频流尺寸。有时,视频的四个边缘可能有垃圾,您可能不希望裁剪视频输入以保持某个数字的大小倍数。
该过滤器接受以下选项:
- left
从左边框开始填充的像素数。
- right
从右边框开始填充的像素数。
- top
从顶部边框填充的像素数。
- bottom
从底部边框填充的像素数。
- mode
设置填充模式。
它接受以下值:
- ‘smear’
使用最外层像素填充像素
- ‘mirror’
使用镜像填充像素(半样本对称)
- ‘fixed’
用常数值填充像素
- ‘reflect’
使用反射填充像素(整个样本对称)
- ‘wrap’
使用环绕填充像素
- ‘fade’
将像素淡入恒定值
- ‘margins’
用边界附近的加权平均像素填充顶部和底部的像素
默认为涂抹。
- color
设置固定或淡入淡出模式下像素的颜色。默认为黑色。
39.97.1 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.98 find_rect
在输入视频中找到一个矩形物体。
要搜索的对象必须指定为用指定的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
mipmap 的数量,默认为 3。
- xmin, ymin, xmax, ymax
指定要在其中搜索的矩形。
- discard
丢弃未检测到对象的帧。默认为禁用。
39.98.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.99 floodfill
具有相同像素分量值和另一个值的淹没区域。
它接受以下选项:
- x
设置像素 x 坐标。
- y
设置像素 y 坐标。
- s0
设置源 #0 组件值。
- s1
设置源 #1 组件值。
- s2
设置源 #2 组件值。
- s3
设置源 #3 组件值。
- d0
设置目标#0 组件值。
- d1
设置目标#1 组件值。
- d2
设置目标#2 组件值。
- d3
设置目标#3 组件值。
39.100 format
将输入视频转换为指定的像素格式之一。Libavfilter 将尝试选择一个适合作为下一个过滤器的输入。
它接受以下参数:
- pix_fmts
以“|”分隔的像素格式名称列表,例如“pix_fmts=yuv420p|monow|rgb24”。
39.100.1 示例
- 将输入视频转换为yuv420p格式
format=pix_fmts=yuv420p
将输入视频转换为列表中的任何格式
format=pix_fmts=yuv420p|yuv444p|yuv410p
39.101 fps
根据需要复制或丢弃帧,将视频转换为指定的恒定帧速率。
它接受以下参数:
- fps
所需的输出帧速率。它接受包含以下常量的表达式:
- ‘source_fps’
输入的帧速率
- ‘ntsc’
NTSC 帧速率
30000/1001
- ‘pal’
PAL 帧速率
25.0
- ‘film’
影片帧率
24.0
- ‘ntsc_film’
NTSC-电影帧率
24000/1001
默认为
25
.- start_time
假设第一个 PTS 应该是给定值(以秒为单位)。这允许在流开始时进行填充/修剪。默认情况下,不会对第一帧的预期 PTS 做出任何假设,因此不会进行填充或修剪。例如,如果视频流在音频流之后开始,则可以将其设置为 0,以便用第一帧的重复项填充开头,或者修剪具有负 PTS 的任何帧。
- round
时间戳(PTS)舍入方法。
可能的值为:
- zero
向 0 舍入
- inf
从 0 开始舍入
- down
向无穷大舍入
- up
向+无穷大舍入
- near
四舍五入到最接近的
默认为
near
.- eof_action
读取最后一帧时执行的操作。
可能的值为:
- round
使用与其他帧相同的时间戳舍入方法。
- pass
如果尚未达到输入持续时间,则传递最后一帧。
默认为
round
.
或者,可以将选项指定为平面字符串: fps [: start_time [: round ]]。
另请参阅setpts过滤器。
39.101.1 示例
- 将 fps 设置为 25 的典型用法:
fps=fps=25
- 将 fps 设置为 24,使用缩写和舍入方法舍入到最接近的值:
fps=fps=film:round=near
39.102 framepack
将两个不同的视频流打包成立体视频,在支持的编解码器上设置适当的元数据。两个视图应具有相同的大小和帧速率,并且当较短的视频结束时处理将停止。请注意,您可以使用比例和 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.103 framerate
通过从源帧插入新的视频输出帧来更改帧速率。
此过滤器的设计不能正确处理交错媒体。如果您希望更改隔行扫描媒体的帧速率,则需要在此过滤器之前进行去隔行扫描,并在此过滤器之后重新隔行扫描。
下面是接受的选项的描述。
- fps
指定每秒输出帧数。该选项也可以单独指定为一个值。默认为
50
.- interp_start
指定输出帧将创建为两个帧的线性插值的范围的起点。范围是[
0
-255
],默认是15
。- interp_end
指定输出帧将创建为两个帧的线性插值的范围的末尾。范围是[
0
-255
],默认是240
。- scene
指定检测到场景变化的级别为 0 到 100 之间的值,以指示新场景;较低的值反映当前帧引入新场景的概率较低,而较高的值表示当前帧更有可能是新场景。默认为
8.2
.- flags
指定影响过滤过程的标志。
标志的可用值为:
- scene_change_detect, scd
使用选项scene的值启用场景变化检测。默认情况下启用此标志。
39.104 framestep
每第 N 帧选择一帧。
该过滤器接受以下选项:
- step
在每帧之后选择帧
step
。允许的值为大于 0 的正整数。默认值为1
。
39.105 freezedetect
检测冻结的视频。
当此过滤器检测到输入视频在指定持续时间内内容没有重大变化时,会记录一条消息并设置帧元数据。视频冻结检测计算视频帧所有分量的平均绝对差,并将其与本底噪声进行比较。
打印的时间和持续时间以秒为单位表示。元
lavfi.freezedetect.freeze_start
数据密钥设置在时间戳等于或超过检测持续时间的第一帧上,并且包含冻结第一帧的时间戳。和
lavfi.freezedetect.freeze_duration
元
lavfi.freezedetect.freeze_end
数据键在冻结后的第一帧上设置。
该过滤器接受以下选项:
- noise, n
设置噪声容限。可以以 dB 为单位指定(如果“dB”附加到指定值)或指定为 0 和 1 之间的差值比。默认值为 -60dB 或 0.001。
- duration, d
设置通知前的冻结持续时间(默认为 2 秒)。
39.106 freezeframes
冻结视频帧。
该过滤器使用第二个输入的帧冻结视频帧。
该过滤器接受以下选项:
- first
设置开始冻结的第一帧的编号。
- last
设置结束冻结的最后一帧的编号。
- replace
设置将使用第二个输入的帧数,而不是替换的帧。
39.107 frei0r
对输入视频应用 frei0r 效果。
要启用此过滤器的编译,您需要安装 frei0r 标头并使用--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 到 0.0 之间的浮点数1.0(含)或 ffmpeg-utils 手册中 (ffmpeg-utils)“颜色”部分中指定的颜色描述、位置(指定为X / Y,其中 X和Y是浮点数)和/或细绳。
参数的数量和类型取决于加载的效果。如果未指定效果参数,则设置默认值。
39.107.1 示例
- 应用扭曲0r效果,设置前两个双参数:
frei0r=filter_name=distort0r:filter_params=0.5|0.01
- 应用色距效果,将颜色作为第一个参数:
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.107.2 命令
该过滤器支持过滤器参数选项作为命令。
39.108 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.109 gblur
应用高斯模糊滤镜。
该过滤器接受以下选项:
- sigma
设置水平西格玛,高斯模糊的标准差。默认为
0.5
.- steps
设置高斯近似的步数。默认为
1
.- planes
设置要过滤的平面。默认情况下,所有平面都会被过滤。
- sigmaV
设置垂直西格玛,如果为负,则与 相同
sigma
。默认为-1
.
39.109.1 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.110 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_表达式, 或者cr_表达式 指定选项后,过滤器将自动选择 YCbCr 色彩空间。如果其中之一红色表达式,绿色表达式, 或者 蓝色表达式指定选项后,它将选择 RGB 颜色空间。
如果未定义其中一个色度表达式,则它将依赖于另一个。如果未指定 alpha 表达式,它将计算为不透明值。如果未指定任何色度表达式,它们将计算为亮度表达式。
表达式可以使用以下变量和函数:
- N
过滤后的帧的序号,从 开始
0
。- X
- Y
当前样本的坐标。
- W
- H
图像的宽度和高度。
- SW
- SH
宽度和高度比例取决于当前过滤的平面。它是对应亮度平面像素数与当前平面像素数的比值。例如,对于 YUV4:2:0,这些值适用
1,1
于亮度平面和0.5,0.5
色度平面。- T
当前帧的时间,以秒为单位。
- p(x, y)
返回当前 平面位置 ( x , y ) 处的像素值。
- lum(x, y)
返回亮度平面位置 ( x , y ) 处的 像素值。
- cb(x, y)
返回蓝差色度平面位置 ( x , y ) 处的像素值。如果不存在这样的平面,则返回 0。
- cr(x, y)
返回红差色度平面位置 ( x , y ) 处的像素值。如果不存在这样的平面,则返回 0。
- r(x, y)
- g(x, y)
- b(x, y)
返回红/绿/蓝分量位置 ( x , y )处的像素值。如果没有这样的组件,则返回 0。
- alpha(x, y)
返回alpha 平面位置 ( x , y ) 处的像素值。如果不存在这样的平面,则返回 0。
- psum(x,y), lumsum(x, y), cbsum(x,y), crsum(x,y), rsum(x,y), gsum(x,y), bsum(x,y), alphasum(x,y)
矩形中从 (0,0) 到 (x,y) 的样本值的总和,这允许获得矩形内的样本总和。查看不带 sum 后缀的函数。
- interpolation
设置插值方法之一:
- nearest, n
- bilinear, b
默认为双线性。
对于函数,如果x和y位于区域之外,则该值将自动裁剪到较近的边缘。
请注意,此过滤器可以使用多个线程,在这种情况下,每个切片都有自己的表达式状态。如果您只想使用单个表达式状态,因为您的表达式依赖于先前的状态,那么您应该将过滤器线程的数量限制为 1。
39.110.1 示例
- 水平翻转图像:
geq=p(W-X\,Y)
- 生成二维正弦波,角度
PI/3
和波长为 100 像素:geq=128 + 100*sin(2*(PI/100)*(cos(PI/3)*(X-50*T) + sin(PI/3)*Y)):128:128
- 生成奇特神秘的移动光:
nullsrc=s=256x256,geq=random(1)/hypot(X-cos(N*0.07)*W/2-W/2\,Y-sin(N*0.09)*H/2-H/2)^2*1000000*sin(N*0.02):128:128
- 生成快速浮雕效果:
format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2'
- 根据像素位置修改 RGB 分量:
geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)'
- 创建与输入大小相同的径向渐变(另请参阅晕影滤镜):
geq=lum=255*gauss((X/W-0.5)*3)*gauss((Y/H-0.5)*3)/gauss(0)/gauss(0),format=gray
39.111 gradfun
修复有时因截断至 8 位颜色深度而引入近平坦区域的条带伪影。在条带所在的位置插入渐变,并对它们进行抖动处理。
它专为播放而设计。不要在有损压缩之前使用它,因为压缩往往会丢失抖动并恢复频带。
它接受以下参数:
- strength
滤镜改变任一像素的最大量。这也是检测近平坦区域的阈值。可接受的值范围为 0.51 至 64;默认值为 1.2。超出范围的值将被限制在有效范围内。
- radius
要拟合梯度的邻域。较大的半径可以实现更平滑的渐变,但也会阻止滤镜修改详细区域附近的像素。可接受的值为 8-32;默认值为 16。超出范围的值将被剪裁到有效范围。
或者,可以将选项指定为扁平字符串: strength [: radius ]
39.111.1 示例
3.5
应用强度和半径为 的过滤器8
:gradfun=3.5:8
- 指定半径,省略强度(将回退到默认值):
gradfun=radius=8
39.112 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_delta’
显示当前帧与上一帧之间的 pts 增量。
- ‘time’
显示当前过滤的帧时间。
- ‘time_delta’
显示当前帧与上一帧之间的时间增量。
- ‘timebase’
显示过滤器链接的时基。
- ‘format’
显示过滤器链接使用的格式。
- ‘size’
如果过滤器链接使用音频,则显示视频大小或音频通道数。
- ‘rate’
如果过滤器链接使用音频,则显示视频帧速率或采样率。
- ‘eof’
显示链路输出状态。
- ‘sample_count_in’
显示从过滤器中获取的样本数。
- ‘sample_count_out’
显示从过滤器给出的样本数。
- ‘sample_count_delta’
显示上述两个值之间的样本数量增量。
- ‘disabled’
显示时间线过滤器状态。
- rate, r
设置输出流的视频速率上限,默认值为25。这保证了输出视频帧率不会高于该值。
39.113 grayworld
基于灰色世界假设应用色彩校正的色彩恒常性滤镜
该算法使用线性光,因此输入数据应事先线性化(并可能正确标记)。
ffmpeg -i INPUT -vf zscale=transfer=linear,grayworld,zscale=transfer=bt709,format=yuv420p OUTPUT
39.114 greyedge
颜色恒定变化滤波器,通过灰度边缘算法估计场景照明并相应地校正场景颜色。
请参阅:https://staff.science.uva.nl/th.gevers/pub/GeversTIP07.pdf
该过滤器接受以下选项:
- difford
应用于场景的微分顺序。必须在 [0,2] 范围内选择,默认值为 1。
- minknorm
用于计算 Minkowski 距离的 Minkowski 参数。必须在 [0,20] 范围内选择,默认值为 1。设置为 0 以获得最大值而不是计算 Minkowski 距离。
- sigma
应用于场景的高斯模糊的标准偏差。必须在 [0,1024.0] 范围内选择,默认值 = 1。如果difford大于 0 ,则 Floor( sigma * break_off_sigma(3) ) 不能等于 0 。
39.114.1 示例
- 灰边:
greyedge=difford=1:minknorm=5:sigma=2
- 最大边缘:
greyedge=difford=1:minknorm=0:sigma=2
39.115 guided
应用引导滤镜进行边缘保留平滑、去雾等。
该过滤器接受以下选项:
- 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.115.1 命令
该过滤器支持以上所有选项作为命令。
39.115.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.116 haldclut
将 Hald CLUT 应用于视频流。
第一个输入是要处理的视频流,第二个输入是 Hald CLUT。Hald CLUT 输入可以是简单的图片或完整的视频流。
该过滤器接受以下选项:
- clut
设置将从第二个输入流处理哪些 CLUT 视频帧,可以是first或all。默认为全部。
- shortest
当最短输入终止时强制终止。默认为
0
.- repeatlast
流结束后继续应用最后一个 CLUT。
0
到达 CLUT 的最后一帧后禁用过滤器的值 。默认为1
.
haldclut
还具有与lut3d相同的插值选项(两个滤波器共享相同的内部结构)。
该过滤器还支持帧同步选项。
有关 Hald CLUT 的更多信息可以在 Eskil Steenberg(Hald CLUT 作者)的网站上找到:http://www.quelsolaar.com/technology/clut.html。
39.116.1 命令
该过滤器支持interp
选项作为命令。
39.116.2 工作流程示例
39.116.2.1 暂停 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 流的最新图片将应用于该mandelbrot
流的其余帧。
39.116.2.2 通过预览暂停 CLUT
Hald CLUT 应该是像素的平方Level*Level*Level
图像
Level*Level*Level
。对于给定的 Hald CLUT,FFmpeg 将从图片左上角开始选择最大的可能方块。剩余的填充像素(底部或右侧)将被忽略。该区域可用于添加 Hald CLUT 的预览。
通常,过滤器将支持以下生成的 Hald CLUT
haldclut
:
ffmpeg -f lavfi -i haldclutsrc=8 -vf " pad=iw+320 [padded_clut]; smptebars=s=320x256, split [a][b]; [padded_clut][a] overlay=W-320:h, curves=color_negative [main]; [main][b] overlay=W-320" -frames:v 1 clut.png
它包含 CLUT 的原始效果和预览:SMPTE 颜色条显示在右上角,下方是经过颜色更改处理的相同颜色条。
然后,可以通过以下方式可视化此 Hald CLUT 的效果:
ffplay input.mkv -vf "movie=clut.png, [in] haldclut"
39.117 hflip
水平翻转输入视频。
例如,要水平翻转输入视频ffmpeg
:
ffmpeg -i in.avi -vf "hflip" out.avi
39.118 histeq
该过滤器在每帧的基础上应用全局颜色直方图均衡。
它可用于校正具有压缩像素强度范围的视频。滤波器重新分配像素强度,以均衡其在强度范围内的分布。它可以被视为“自动调节对比度滤镜”。此过滤器仅适用于纠正质量下降或捕获质量不佳的源视频。
该过滤器接受以下选项:
- strength
确定要应用的均衡量。随着强度的降低,像素强度的分布越来越接近输入帧的分布。该值必须是 [0,1] 范围内的浮点数,默认为 0.200。
- intensity
设置可以生成的最大强度并适当缩放输出值。应根据需要设置强度,然后根据需要限制强度以避免洗掉。该值必须是 [0,1] 范围内的浮点数,默认为 0.210。
- antibanding
设置抗条带级别。如果启用,过滤器将随机少量改变输出像素的亮度,以避免直方图出现条带。可能的值为
none
,weak
或strong
。它默认为none
.
39.119 histogram
计算并绘制输入视频的颜色分布直方图。
计算出的直方图是图像中颜色分量分布的表示。
标准直方图显示图像中颜色分量的分布。显示每个颜色分量的颜色图表。显示当前帧中 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.119.1 示例
- 计算并绘制直方图:
ffplay -i input -vf histogram
39.120 hqdn3d
这是一款高精度/高质量 3D 降噪滤波器。它的目的是减少图像噪声,产生平滑的图像并使静止图像真正静止。它应该增强可压缩性。
它接受以下可选参数:
- luma_spatial
指定空间亮度强度的非负浮点数。默认为 4.0。
- chroma_spatial
指定空间色度强度的非负浮点数。默认为 3.0* luma_spatial /4.0。
- luma_tmp
指定亮度时间强度的浮点数。默认为 6.0* luma_spatial /4.0。
- chroma_tmp
指定色度时间强度的浮点数。它默认为 luma_tmp * chroma_spatial / luma_spatial。
39.120.1 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.121 hwdownload
将硬件帧下载到系统内存。
输入必须是硬件帧,输出必须是非硬件格式。输出并不支持所有格式 - 可能需要插入额外的格式格式紧随图表中的过滤器以获得支持格式的输出。
39.122 hwmap
将硬件帧映射到系统内存或另一个设备。
该过滤器有几种不同的操作模式;使用哪一种取决于输入和输出格式:
- 硬件帧输入,普通帧输出
将输入帧映射到系统内存并将它们传递到输出。如果以后需要原始硬件框架(例如,在其部分上覆盖其他东西之后),则硬件地图可以在下一个模式中再次使用过滤器来检索它。
- 普通帧输入、硬件帧输出
如果输入实际上是软件映射的硬件帧,则取消映射 - 即返回原始硬件帧。
否则,必须提供设备。在该设备上为输出创建新的硬件表面,然后将它们映射回输入处的软件格式,并将这些帧提供给前面的过滤器。这将像 上传过滤器,但当输入已经采用兼容格式时,可能能够避免额外的副本。
- 硬件帧输入输出
必须直接或通过提供一个设备来提供输出 派生设备选项。输入和输出设备必须是不同类型并且兼容 - 其确切含义取决于系统,但通常这意味着它们必须引用相同的底层硬件上下文(例如,引用相同的显卡)。
如果输入帧最初是在输出设备上创建的,则取消映射以检索原始帧。
否则,将帧映射到输出设备 - 在输出上创建与输入上的帧相对应的新硬件帧。
接受以下附加参数:
- mode
设置帧映射模式。一些组合:
- read
映射的帧应该是可读的。
- write
映射的帧应该是可写的。
- overwrite
映射将始终覆盖整个帧。
在某些情况下,这可能会提高性能,因为不需要加载帧的原始内容。
- direct
映射不得涉及任何复制。
在某些情况下,会创建到帧副本的间接映射,其中直接映射是不可能的,或者它会具有意外的属性。设置此标志可确保映射是直接的,如果不可能,则会失败。
如果未指定,则 默认为读+写。
- derive_device type
不是使用初始化时提供的设备,而是从输入帧所在的设备 派生类型为 type 的新设备。
- reverse
在硬件到硬件映射中,反向映射 - 在接收器中创建帧并将它们映射回源。在需要沿一个方向进行映射但所使用的设备仅支持相反方向的某些情况下,这可能是必要的。
此选项很危险 - 如果该过滤器的输出存在任何其他约束,它可能会以未定义的方式破坏前面的过滤器。在未完全理解其使用含义之前请勿使用它。
39.123 hwupload
将系统内存帧上传到硬件表面。
初始化过滤器时必须提供要上传的设备。如果使用 ffmpeg,请选择适当的设备-filter_hw_device 选项或与派生设备选项。输入和输出设备必须是不同类型并且兼容 - 其确切含义取决于系统,但通常这意味着它们必须引用相同的底层硬件上下文(例如,引用相同的显卡)。
接受以下附加参数:
- derive_device type
不是使用初始化时提供的设备,而是从输入帧所在的设备 派生类型为 type 的新设备。
39.124 hwupload_cuda
将系统内存帧上传到 CUDA 设备。
它接受以下可选参数:
- device
要使用的 CUDA 设备的编号
39.125 hqx
应用专为像素艺术设计的高质量放大滤镜。该滤波器最初由 Maxim Stepin 创建。
它接受以下选项:
- n
设置缩放尺寸:
2
forhq2x
、3
forhq3x
和4
forhq4x
。默认为3
.
39.126 hstack
水平堆叠输入视频。
所有流必须具有相同的像素格式和相同的高度。
过滤器接受以下选项:
- inputs
设置输入流的数量。默认值为 2。
- shortest
如果设置为 1,则在最短输入终止时强制输出终止。默认值为 0。
39.127 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.128 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.129 hue
修改输入的色调和/或饱和度。
它接受以下参数:
- h
将色调角指定为度数。它接受一个表达式,默认为“0”。
- s
在 [-10,10] 范围内指定饱和度。它接受一个表达式并默认为“1”。
- H
将色调角指定为弧度数。它接受一个表达式,默认为“0”。
- b
指定 [-10,10] 范围内的亮度。它接受一个表达式并默认为“0”。
H和H是互斥的,不能同时指定。
这乙,H,H和s选项值是包含以下常量的表达式:
- n
输入帧的帧数从0开始
- pts
以时基单位表示的输入帧的呈现时间戳
- r
输入视频的帧率,如果输入帧率未知则为 NAN
- t
时间戳以秒表示,如果输入时间戳未知,则为 NAN
- tb
输入视频的时基
39.129.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.129.2 命令
该过滤器支持以下命令:
- b
- s
- h
- H
修改输入视频的色调和/或饱和度和/或亮度。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.130 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.131 hysteresis
通过连接组件将第一个流增长为第二个流。这使得构建更稳健的边缘掩模成为可能。
该过滤器接受以下选项:
- planes
设置哪些平面将被处理为位图,未处理的平面将从第一个流复制。默认值 0xf,将处理所有平面。
- threshold
设置过滤时使用的阈值。如果像素分量值高于该值,则激活连接分量的过滤算法。默认值为 0。
该hysteresis
过滤器还支持帧同步选项。
39.132 iccdetect
从嵌入的 ICC 配置文件(如果存在)中检测色彩空间,并相应地更新帧的标签。
该过滤器接受以下选项:
- force
如果为 true,则帧的现有色彩空间标签将始终被从 ICC 配置文件检测到的值覆盖。否则,仅当它们包含
unknown
. 默认启用。
39.133 iccgen
生成 ICC 配置文件并将其附加到框架上。
该过滤器接受以下选项:
- color_primaries
- color_trc
配置为其生成 ICC 配置文件的色彩空间。默认值
auto
从输入帧的元数据推断值,默认为 BT.709/sRGB(视情况而定)。请参阅setparams过滤器以获取可能值的列表,但请注意,这些
unknown
值对此过滤器无效。- force
如果为 true,即使会覆盖现有的 ICC 配置文件,也会生成 ICC 配置文件。默认禁用。
39.134 identity
获取两个输入视频之间的同一性得分。
该过滤器采用两个输入视频。
两个输入视频必须具有相同的分辨率和像素格式,此过滤器才能正常工作。它还假设两个输入具有相同数量的帧,并进行一一比较。
通过日志系统打印获得的每个组件的平均、最小和最大身份分数。
过滤器将计算出的每帧的身份分数存储在帧元数据中。
该过滤器还支持帧同步选项。
在下面的示例中,输入文件主.mpg正在处理的文件与参考文件进行比较参考.mpg。
ffmpeg -i main.mpg -i ref.mpg -lavfi identity -f null -
39.135 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.136 il
去交错或交错字段。
该过滤器允许处理隔行扫描图像场而不对其进行去隔行扫描。解交织将输入帧分成 2 个场(所谓的半图像)。奇数行移动到输出图像的上半部分,偶数行移动到下半部分。您可以独立处理(过滤)它们,然后重新交错它们。
该过滤器接受以下选项:
- luma_mode, l
- chroma_mode, c
- alpha_mode, a
luma_mode、chroma_mode和 alpha_mode的可用值为:
- ‘none’
没做什么。
- ‘deinterleave, d’
解交错字段,将一个字段放在另一个字段之上。
- ‘interleave, i’
交错字段。逆转解交错的效果。
默认值为
none
。- luma_swap, ls
- chroma_swap, cs
- alpha_swap, as
交换亮度/色度/阿尔法字段。交换偶数行和奇数行。默认值为
0
。
39.136.1 命令
该过滤器支持以上所有选项作为命令。
39.137 inflate
对视频应用充气效果。
该过滤器仅考虑高于像素的值,用局部 (3x3) 平均值替换像素。
它接受以下选项:
- threshold0
- threshold1
- threshold2
- threshold3
限制每个平面的最大变化,默认为65535。如果为0,平面将保持不变。
39.137.1 命令
该过滤器支持以上所有选项作为命令。
39.138 interlace
对渐进式内容进行简单的交错过滤。这会将奇数帧的上(或下)行与偶数帧的下(或上)行交错,将帧速率减半并保留图像高度。
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
垂直低通滤波器可避免 Twitter 交错并减少莫尔图案。
- ‘0, off’
禁用垂直低通滤波器
- ‘1, linear’
启用线性滤波器(默认)
- ‘2, complex’
启用复杂过滤器。这将稍微减少抖动和莫尔条纹,但更好地保留细节和主观锐度印象。
39.139 kerndeint
通过应用 Donald Graft 的自适应内核去隔行来对输入视频进行去隔行。处理视频的交错部分以生成逐行帧。
接受的参数的描述如下。
- thresh
设置在确定是否必须处理像素线时影响滤波器容差的阈值。它必须是 [0,255] 范围内的整数,默认为 10。值为 0 将导致对每个像素应用该过程。
- map
如果设置为 1,则将超过阈值的像素绘制为白色。默认值为 0。
- order
设置字段顺序。如果设置为 1,则交换字段;如果设置为 0,则保留字段。默认值为 0。
- sharp
如果设置为 1,则启用额外锐化。默认值为 0。
- twoway
如果设置为 1,则启用双向锐化。默认值为 0。
39.139.1 示例
- 应用默认值:
kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
- 启用额外锐化:
kerndeint=sharp=1
- 将处理后的像素绘制为白色:
kerndeint=map=1
39.140 kirsch
将 Kirsch 算子应用于输入视频流。
过滤器接受以下选项:
- planes
设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。
- scale
设置将与过滤结果相乘的值。
- delta
设置将添加到过滤结果的值。
39.140.1 命令
该过滤器支持以上所有选项作为命令。
39.141 lagfun
慢慢更新较暗的像素。
该滤光片使短闪光显得更长。该过滤器接受以下选项:
- decay
设置衰减因子。默认值为 0.95。允许的范围是从 0 到 1。
- planes
设置要过滤的平面。默认为全部。允许的范围是 0 到 15。
39.141.1 命令
该过滤器支持以上所有选项作为命令。
39.142 lenscorrection
校正径向镜头畸变
该滤镜可用于校正因使用广角镜头而导致的径向畸变,从而重新校正图像。要找到正确的参数,可以使用可用的工具,例如作为 opencv 一部分的工具或简单的试错法。要使用 opencv,请使用 opencv 源中的校准样本(在样本/cpp 下),并从结果矩阵中提取 k1 和 k2 系数。
请注意,KDE 项目的开源工具 Krita 和 Digikam 中实际上提供了相同的过滤器。
与也可用于补偿镜头误差的晕影滤镜相比,此滤镜可校正图像的失真,而晕影滤镜可校正亮度分布,因此在某些情况下您可能需要同时使用这两个滤镜,但您可能会遇到以下情况:照顾顺序,即是否应在镜头校正之前或之后应用渐晕。
39.142.1 选项
该过滤器接受以下选项:
- cx
图像焦点的相对 x 坐标,即畸变中心。该值的范围为 [0,1],并表示为图像宽度的分数。默认值为 0.5。
- cy
图像焦点的相对 y 坐标,即畸变中心。该值的范围为 [0,1],并表示为图像高度的分数。默认值为 0.5。
- k1
二次校正项的系数。该值的范围是[-1,1]。0 表示不修正。默认值为 0。
- k2
双二次校正项的系数。该值的范围是[-1,1]。0 表示不修正。默认值为 0。
- i
设置插值类型。可以是
nearest
或bilinear
. 默认为nearest
.- fc
指定未映射像素的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。默认颜色是
black@0
.
生成校正的公式为:
r_src = r_tgt * (1 + k1 * ( r_tgt / r_0 )^2 + k2 * ( r_tgt / r_0 )^4)
其中r_0是图像对角线的一半,r_src和r_tgt分别是距源图像和目标图像中焦点的距离。
39.142.2 命令
该过滤器支持以上所有选项作为命令。
39.143 lensfun
通过lensfun 库(http://lensfun.sourceforge.net/)应用镜头校正。
滤镜lensfun
需要相机制造商、相机型号和镜头型号才能应用镜头校正。该过滤器将加载lensfun数据库并对其进行查询以在数据库中查找相应的相机和镜头条目。只要可以使用给定选项找到这些条目,过滤器就可以对帧执行校正。请注意,不完整的字符串将导致过滤器选择与给定选项的最佳匹配,并且过滤器将输出所选的相机和镜头型号(以级别“信息”记录)。您必须根据需要提供品牌、相机型号和镜头型号。
要获取可用品牌和型号的列表,请省略make
和
model
选项中的一个或全部。过滤器会将完整列表发送到 level 的日志INFO
。第一列是品牌,第二列是型号。要获取可用镜头的列表,请设置品牌和型号的任意值并忽略该
lens_model
选项。过滤器将在日志中发送 level 的完整镜头列表
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.143.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.144 libplacebo
基于 libplacebo ( https://code.videolan.org/videolan/libplacebo ) 的灵活 GPU 加速处理过滤器。
39.144.1 选项
此过滤器的选项分为以下部分:
39.144.1.1 输出模式
这些选项控制整体输出模式。默认情况下,libplacebo 将尝试尽可能保留源色度和大小,但它将应用源帧中存在的任何嵌入胶片颗粒、杜比视界元数据或变形 SAR。
- inputs
设置输入数量。这可以与变量一起使用
idx
,以允许在输出帧内放置/混合多个输入。这有效地启用了类似于hstack、overlay等 的功能。- 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
。- fps
设置输出帧速率。这可以是理性的,例如
60000/1001
。如果设置为特殊字符串none
(默认值),输入时间戳将不加修改地传递到输出。否则,将根据需要对输入视频帧进行插值,以将视频重新缩放到指定的目标帧速率,其方式由帧混合器选项。- format
设置输出格式覆盖。如果未设置(默认),帧将以与相应输入帧相同的格式输出。否则,将进行格式转换。
- force_original_aspect_ratio
- force_divisible_by
与相同的比例过滤器选项的工作方式相同。
- normalize_sar
如果启用,输出帧的像素长宽比将始终为 1:1。这将根据需要引入额外的填充/裁剪。如果禁用(默认),则任何宽高比不匹配(包括来自变形视频源的宽高比不匹配)都会转发到输出像素宽高比。
- pad_crop_ratio
指定当输入宽高比与输出宽高比不匹配时填充和裁剪之间的 比率(介于
0.0
和之间)1.0
规范化_sar已生效。默认值0.0
始终用黑色边框填充内容,而值1.0
始终裁剪掉部分内容。中间值是可能的,从而导致两种方法的混合。- fillcolor
设置用于填充输出图像未覆盖的输出区域的颜色,例如由于规范化_sar。有关此选项的一般语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。默认为
black
.- 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'"
- colorspace
- color_primaries
- color_trc
- range
配置输出帧将传送的色彩空间。
auto
输出帧的默认值与输入帧的格式相同,不会发生任何变化。对于任何其他值,将执行转换。请参阅setparams过滤器以获取可能值的列表。
- apply_filmgrain
如果源帧中存在胶片颗粒(例如 AV1 或 H.274),则应用胶片颗粒,并将其从输出中剥离。默认启用。
- apply_dolbyvision
Apply Dolby Vision RPU metadata if present in source frames, and strip it from the output. Enabled by default. Note that Dolby Vision will always output BT.2020+PQ, overriding the usual input frame metadata. These will also be picked as the values of
auto
for the respective frame output options.
In addition to the expression constants documented for the scale filter, the crop_w, crop_h, crop_x, crop_y, pos_w, pos_h, pos_x and pos_y options can also contain the following constants:
- in_idx, idx
The (0-based) numeric index of the currently active input stream.
- crop_w, cw
- crop_h, ch
The computed values of crop_w and crop_h.
- pos_w, pw
- pos_h, ph
The computed values of pos_w and pos_h.
- in_t, t
The input frame timestamp, in seconds. NAN if input timestamp is unknown.
- out_t, ot
The input frame timestamp, in seconds. NAN if input timestamp is unknown.
- n
The input frame number, starting with 0.
39.144.1.2 Scaling
The options in this section control how libplacebo performs upscaling and (if
necessary) downscaling. Note that libplacebo will always internally operate on
4:4:4 content, so any sub-sampled chroma formats such as yuv420p
will
necessarily be upsampled and downsampled as part of the rendering process. That
means scaling might be in effect even if the source and destination resolution
are the same.
- upscaler
- downscaler
Configure the filter kernel used for upscaling and downscaling. The respective defaults are
spline36
andmitchell
. For a full list of possible values, passhelp
to these options. The most important values are:- ‘none’
Forces the use of built-in GPU texture sampling (typically bilinear). Extremely fast but poor quality, especially when downscaling.
- ‘bilinear’
Bilinear interpolation. Can generally be done for free on GPUs, except when doing so would lead to aliasing. Fast and low quality.
- ‘nearest’
Nearest-neighbour interpolation. Sharp but highly aliasing.
- ‘oversample’
Algorithm that looks visually similar to nearest-neighbour interpolation but tries to preserve pixel aspect ratio. Good for pixel art, since it results in minimal distortion of the artistic appearance.
- ‘lanczos’
Standard sinc-sinc interpolation kernel.
- ‘spline36’
Cubic spline approximation of lanczos. No difference in performance, but has very slightly less ringing.
- ‘ewa_lanczos’
Elliptically weighted average version of lanczos, based on a jinc-sinc kernel. This is also popularly referred to as just "Jinc scaling". Slow but very high quality.
- ‘gaussian’
Gaussian kernel. Has certain ideal mathematical properties, but subjectively very blurry.
- ‘mitchell’
Cubic BC spline with parameters recommended by Mitchell and Netravali. Very little ringing.
- frame_mixer
Controls the kernel used for mixing frames temporally. The default value is
none
, which disables frame mixing. For a full list of possible values, passhelp
to this option. The most important values are:- ‘none’
Disables frame mixing, giving a result equivalent to "nearest neighbour" semantics.
- ‘oversample’
对输入视频进行过采样以创建“平滑运动”类型的效果:如果输出帧恰好落在两个视频帧之间的过渡上,则会根据相对重叠进行混合。当需要保留原始主观外观时,这是推荐的选项。
- ‘mitchell_clamp’
更大的滤波器内核,以尽可能消除振铃和其他伪影的方式平滑地插入多个帧。当需要最大视觉平滑度时,推荐使用此选项。
- ‘linear’
帧之间的线性混合/淡入淡出。对于构建例如幻灯片尤其有用。
- lut_entries
配置缩放器 LUT 的大小,范围从
1
到256
。默认值0
将选择 libplacebo 的内部默认值,通常是64
。- antiringing
启用防振铃(对于非 EWA 滤波器)。该值(在
0.0
和 之间1.0
)配置抗振铃算法的强度。如果设置得太高,可能会增加锯齿。默认禁用。- sigmoid
在升级过程中启用 S 形压缩。稍微减少振铃。默认启用。
39.144.1.3 解带
Libplacebo 附带一个内置的去带滤波器,能够很好地抵消许多常见的带和阻塞源。每当需要质量时,强烈建议打开此功能。
- deband
启用(快速)解带算法。默认禁用。
- deband_iterations
去带算法的去带迭代次数。每次迭代都以逐渐增加的半径(和减小的阈值)执行。推荐值的范围为
1
至4
。默认为1
.- deband_threshold
去带滤波器强度。数字越高,解带就越激进。默认为
4.0
.- deband_radius
去频带滤波器半径。较大的半径适合缓慢的梯度,而较小的半径适合陡峭的梯度。默认为
16.0
.- deband_grain
要添加的额外产出谷物的数量。有助于隐藏瑕疵。默认为
6.0
.
39.144.1.4 颜色调整
主观色彩控制的集合。不是很严格,因此确切的效果会根据输入原色和色彩空间的不同而有所不同。
- 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.144.1.5 峰值检测
为了帮助处理仅具有静态 HDR10 元数据(或没有任何标记)的源,libplacebo 使用其自己的内部帧分析计算着色器来分析源帧并实时调整色调映射函数。如果这太慢,或者需要精确再现的帧完美结果,建议关闭此功能。
- peak_detect
启用 HDR 峰值检测。忽略静态 MaxCLL/MaxFALL 值,有利于从输入进行动态检测。请注意,检测到的值不会写回输出帧,它们仅指导内部色调映射过程。默认启用。
- smoothing_period
峰值检测平滑周期,介于
0.0
和之间1000.0
。较高的值会导致峰值检测对输入变化的响应能力降低。默认为100.0
.- minimum_peak
检测到的峰值的下限(相对于 SDR 白色),介于
0.0
和之间100.0
。默认为1.0
.- scene_threshold_low
- scene_threshold_high
场景变化检测的下限和上限阈值。
0.0
以和之间的对数刻度表示100.0
。分别默认为5.5
和10.0
。将任一值设置为负值都会禁用此功能。- percentile
使用帧亮度直方图的哪个百分位作为色调映射的源峰值。默认为
99.995
,一个相当保守的值。将其设置为100.0
禁用帧直方图测量,而是使用真实峰值亮度进行色调映射。
39.144.1.6 色调映射
本节中的选项控制 libplacebo 在处理广色域或 HDR 内容之间的不匹配时如何执行色调映射和色域映射。一般来说,libplacebo 依靠准确的源标记和掌握显示色域信息来产生最佳结果。
- gamut_mode
如何处理因色度色域映射而可能出现的色域外颜色。
- ‘clip’
什么也不做,只需将超出范围的颜色剪辑到 RGB 体积即可。质量低但速度极快。
- ‘perceptual’
对色域体积进行感知上的软剪辑颜色。这是默认设置。
- ‘relative’
相对比色硬剪辑。与软膝类似,
perceptual
但没有软膝。- ‘saturation’
饱和度映射,将原色直接映射到 RGB 空间中的原色。不推荐,除非需要明亮、饱和的显示的人造计算机图形。
- ‘absolute’
绝对比色硬夹。不执行白点调整。
- ‘desaturate’
Hard-desaturates out-of-gamut colors towards white, while preserving the luminance. Has a tendency to distort the visual appearance of bright objects.
- ‘darken’
Linearly reduces content brightness to preserves saturated details, followed by clipping the remaining out-of-gamut colors.
- ‘warn’
Highlight out-of-gamut pixels (by inverting/marking them).
- ‘linear’
Linearly reduces chromaticity of the entire image to make it fit within the target color volume. Be careful when using this on BT.2020 sources without proper mastering metadata, as doing so will lead to excessive desaturation.
- tonemapping
Tone-mapping algorithm to use. Available values are:
- ‘auto’
Automatic selection based on internal heuristics. This is the default.
- ‘clip’
Performs no tone-mapping, just clips out-of-range colors. Retains perfect color accuracy for in-range colors but completely destroys out-of-range information. Does not perform any black point adaptation. Not configurable.
- ‘st2094-40’
EETF from SMPTE ST 2094-40 Annex B, which applies the Bezier curves from HDR10+ dynamic metadata based on Bezier curves to perform tone-mapping. The OOTF used is adjusted based on the ratio between the targeted and actual display peak luminances.
- ‘st2094-10’
EETF from SMPTE ST 2094-10 Annex B.2, which takes into account the input signal average luminance in addition to the maximum/minimum. The configurable contrast parameter influences the slope of the linear output segment, defaulting to
1.0
for no increase/decrease in contrast. Note that this does not currently include the subjective gain/offset/gamma controls defined in Annex B.3.- ‘bt.2390’
EETF from the ITU-R Report BT.2390, a hermite spline roll-off with linear segment. The knee point offset is configurable. Note that this parameter defaults to
1.0
, rather than the value of0.5
from the ITU-R spec.- ‘bt.2446a’
EETF from ITU-R Report BT.2446, method A. Designed for well-mastered HDR sources. Can be used for both forward and inverse tone mapping. Not configurable.
- ‘spline’
Simple spline consisting of two polynomials, joined by a single pivot point. The parameter gives the pivot point (in PQ space), defaulting to
0.30
. Can be used for both forward and inverse tone mapping.- ‘reinhard’
Simple non-linear, global tone mapping algorithm. The parameter specifies the local contrast coefficient at the display peak. Essentially, a parameter of
0.5
implies that the reference white will be about half as bright as when clipping. Defaults to0.5
, which results in the simplest formulation of this function.- ‘mobius’
莱因哈德色调映射算法的推广,支持黑色附近的附加线性斜率。色调映射参数指示线性部分和非线性部分之间的权衡。本质上,对于给定的参数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.144.1.7 抖动
默认情况下,libplacebo 会在必要时进行抖动,其中包括渲染为低于 16 位精度的任何整数格式。建议始终将其保留为打开状态,因为不这样做可能会导致输出中出现可见的条带,即使debanding
启用了过滤器也是如此。如果需要最大性能,请使用ordered_fixed
抖动而不是禁用抖动。
- dithering
使用抖动方法。接受以下值:
- ‘none’
完全禁用抖动。可能会导致可见的条带。
- ‘blue’
使用伪蓝噪声进行抖动。这是默认设置。
- ‘ordered’
可调有序抖动模式。
- ‘ordered_fixed’
更快的有序抖动,固定大小为
6
. 无纹理。- ‘white’
用白噪声进行抖动。无纹理。
- dither_lut_size
抖动 LUT 大小,作为
1
和之间的 log base28
。默认为6
,对应于 LUT 大小64x64
。- dither_temporal
启用临时抖动。默认禁用。
39.144.1.8 自定义着色器
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.144.1.9 调试/性能
本节中的所有选项均默认关闭。当试图以牺牲质量为代价来获得最大性能时,它们可能会有所帮助。
- skip_aa
缩小尺寸时禁用抗锯齿功能。
- polar_cutoff
截断极坐标 (EWA) 缩放器内核,使其低于此绝对量级(介于
0.0
和之间)1.0
。- disable_linear
禁用线性光缩放。
- disable_builtin
禁用内置 GPU 采样(强制 LUT)。
- disable_fbos
强制禁用 FBO,导致几乎所有功能丢失,但提供最大可能的速度。
39.144.2 命令
该过滤器支持几乎所有上述选项作为命令。
39.144.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 输入插值到平滑的恒定 60 fps 输出:
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 hwdec 互操作以避免通过 RAM 进行往返:
ffmpeg -init_hw_device vulkan -hwaccel vaapi -hwaccel_output_format vaapi ... -vf libplacebo
39.145 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)。
- n_threads
设置初始化 libvmaf 时要使用的线程数。默认值:
0
,无线程。- n_subsample
设置要使用的帧子采样间隔。
该过滤器还支持帧同步选项。
39.145.1 示例
- 在下面的示例中,视频失真扭曲.mpg与参考文件进行比较参考.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.146 libvmaf_cuda
这是libvmaf过滤器的 CUDA 变体。它只接受 CUDA 帧。
它需要 Netflix 的 vmaf 库 (libvmaf) 作为先决条件。安装库后,可以使用以下命令启用它:
./configure --enable-nonfree --enable-ffnvcodec --enable-libvmaf
。
39.146.1 示例
- 显示 CUVID 硬件解码和使用scale_cuda进行 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[ref]; \ [1:v]scale_cuda=format=yuv420p[dis]; \ [dis][ref]libvmaf_cuda=log_fmt=json:log_path=output.json " \ -f null -
39.147 limitdiff
使用第二个和可选的第三个视频流应用有限差分滤波器。
该过滤器接受以下选项:
- threshold
设置允许视频流之间存在某些差异时使用的阈值。任何低于或精确于该阈值的绝对差值将从第一视频流中选取像素分量。
- elasticity
设置处理视频流时软阈值的弹性。该值与第一个值相乘设置第二个阈值。任何大于或精确于第二阈值的绝对差值将从第二视频流中选取像素分量。对于这两个阈值之间的值,将使用第一和第二视频流之间的线性插值。
- reference
启用参考(第三)视频流处理。默认情况下是禁用的。如果设置,该视频流将用于计算与第一个视频流的绝对差。
- planes
指定将处理哪些平面。默认为所有可用。
39.147.1 命令
该过滤器支持以上所有选项作为命令,除了选项 '参考'。
39.148 limiter
将像素分量值限制在指定范围 [min, max] 内。
该过滤器接受以下选项:
- min
下限。默认为输入允许的最低值。
- max
上限。默认为输入允许的最高值。
- planes
指定将处理哪些平面。默认为所有可用。
39.148.1 命令
该过滤器支持以上所有选项作为命令。
39.149 loop
循环视频帧。
该过滤器接受以下选项:
- loop
设置循环次数。将此值设置为 -1 将导致无限循环。默认值为 0。
- size
设置最大尺寸(以帧数为单位)。默认值为 0。
- start
设置循环的第一帧。默认值为 0。
- time
设置循环开始时间(以秒为单位)。仅当名为start的选项设置为时才使用
-1
。
39.149.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.150 lut1d
将 1D LUT 应用于输入视频。
该过滤器接受以下选项:
- file
设置 1D LUT 文件名。
目前支持的格式:
- ‘cube’
伊里达斯
- ‘csp’
电影空间
- interp
选择插值模式。
可用值为:
- ‘nearest’
使用最近定义点的值。
- ‘linear’
使用线性插值来插值。
- ‘cosine’
使用余弦插值来插值。
- ‘cubic’
使用三次插值法对值进行插值。
- ‘spline’
使用样条插值来插值。
39.150.1 命令
该过滤器支持以上所有选项作为命令。
39.151 lut3d
将 3D LUT 应用于输入视频。
该过滤器接受以下选项:
- file
设置 3D LUT 文件名。
目前支持的格式:
- ‘3dl’
后遗症
- ‘cube’
伊里达斯
- ‘dat’
达芬奇
- ‘m3d’
潘多拉
- ‘csp’
电影空间
- interp
选择插值模式。
可用值为:
- ‘nearest’
使用最近定义点的值。
- ‘trilinear’
使用定义立方体的 8 个点插入值。
- ‘tetrahedral’
使用四面体插值。
- ‘pyramid’
使用金字塔插值。
- ‘prism’
使用棱镜插值。
39.151.1 命令
该过滤器支持interp
选项作为命令。
39.152 lumakey
将某些亮度值转换为透明度。
该过滤器接受以下选项:
- threshold
设置将用作透明度基础的亮度。默认值为
0
。- tolerance
设置要抠出的亮度值的范围。默认值为
0.01
。- softness
设置柔和度范围。默认值为
0
。使用它来控制从零到完全透明度的逐渐过渡。
39.152.1 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.153 lut, lutrgb, lutyuv
计算用于将每个像素分量输入值绑定到输出值的查找表,并将其应用于输入视频。
lutyuv将查找表应用于 YUV 输入视频,lutrgb 将查找表应用于 RGB 输入视频。
这些过滤器接受以下参数:
- c0
设置第一个像素分量表达式
- c1
设置第二个像素分量表达式
- c2
设置第三像素分量表达式
- c3
设置第四个像素分量表达式,对应alpha分量
- r
设置红色分量表达式
- g
设置绿色分量表达式
- b
设置蓝色分量表达式
- a
α分量表达式
- y
设置Y/luma分量表达式
- u
设置 U/Cb 分量表达式
- v
设置V/Cr分量表达式
它们中的每一个都指定用于计算相应像素分量值的查找表的表达式。
与每个c*选项关联的确切组件取决于输入的格式。
lut过滤器需要输入 YUV 或 RGB 像素格式, lutrgb需要输入 RGB 像素格式,lutyuv需要 YUV。
表达式可以包含以下常量和函数:
- w
- h
输入的宽度和高度。
- val
像素分量的输入值。
- clipval
输入值,剪切到minval - maxval范围。
- maxval
像素分量的最大值。
- minval
像素分量的最小值。
- negval
像素分量值的负值,剪裁到 minval - maxval范围;它对应于表达式“maxval-clipval+minval”。
- clip(val)
val中的计算值,被裁剪到 minval - maxval范围。
- gammaval(gamma)
计算出的像素分量值的伽玛校正值,被裁剪到minval - maxval范围。它对应于表达式“pow((clipval-minval)/(maxval-minval)\, gamma )*(maxval-minval)+minval”
所有表达式默认为“clipval”。
39.153.1 命令
该过滤器支持与选项相同的命令。
39.153.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"
- 在输入上设置恒定的 alpha 通道值:
format=rgba,lutrgb=a="maxval-minval/2"
- 将亮度伽玛校正 0.5 倍:
lutyuv=y=gammaval(0.5)
- 丢弃亮度的最低有效位:
lutyuv=y='bitand(val, 128+64+32)'
- 类似彩色效果:
lutyuv=u='(val-maxval/2)*2+maxval/2':v='(val-maxval/2)*2+maxval/2'
39.154 lut2, tlut2
该lut2
过滤器接受两个输入流并输出一个流。
(time lut2)过滤tlut2
器从一个流中获取两个连续的帧。
该过滤器接受以下参数:
- c0
设置第一个像素分量表达式
- c1
设置第二个像素分量表达式
- c2
设置第三像素分量表达式
- c3
设置第四个像素分量表达式,对应alpha分量
- d
设置输出位深度,仅适用于
lut2
过滤器。默认值为 0,这意味着从第一个输入格式自动选取位深度。
该lut2
过滤器还支持帧同步选项。
它们中的每一个都指定用于计算相应像素分量值的查找表的表达式。
与每个c*选项关联的确切组件取决于输入中的格式。
表达式可以包含以下常量:
- w
- h
输入的宽度和高度。
- x
像素分量的第一个输入值。
- y
像素分量的第二个输入值。
- bdx
第一个输入视频位深度。
- bdy
第二个输入视频位深度。
所有表达式默认为“x”。
39.154.1 命令
该过滤器支持除 option 之外的所有上述选项作为命令d
。
39.154.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.155 maskedclamp
使用第二输入和第三输入流钳位第一输入流。
返回第一个流的值,该值介于第二个输入流 -undershoot
和第三个输入流 +之间overshoot
。
该过滤器接受以下选项:
- undershoot
默认值为
0
。- overshoot
默认值为
0
。- planes
设置哪些平面将被处理为位图,未处理的平面将从第一个流复制。默认值 0xf,将处理所有平面。
39.155.1 命令
该过滤器支持以上所有选项作为命令。
39.156 maskedmax
使用第二输入流和第一输入流之间的绝对差以及第三输入流和第一输入流之间的绝对差将第二和第三输入流合并为输出流。如果第二个绝对差大于第一个,则选取的值将来自第二个输入流,否则来自第三个输入流。
该过滤器接受以下选项:
- planes
设置哪些平面将被处理为位图,未处理的平面将从第一个流复制。默认值 0xf,将处理所有平面。
39.156.1 命令
该过滤器支持以上所有选项作为命令。
39.157 maskedmerge
使用第三输入流中的每像素权重将第一输入流与第二输入流合并。
第三个流像素分量中的值 0 意味着来自第一个流的像素分量原封不动地返回,而最大值(例如,8 位视频为 255)意味着来自第二个流的像素分量原封不动地返回。中间值定义两个输入流的像素分量之间的合并量。
该过滤器接受以下选项:
- planes
设置哪些平面将被处理为位图,未处理的平面将从第一个流复制。默认值 0xf,将处理所有平面。
39.157.1 命令
该过滤器支持以上所有选项作为命令。
39.158 maskedmin
使用第二输入流和第一输入流之间的绝对差以及第三输入流和第一输入流之间的绝对差将第二和第三输入流合并为输出流。如果第二个绝对差小于第一个绝对差,则选取的值将来自第二个输入流,否则来自第三个输入流。
该过滤器接受以下选项:
- planes
设置哪些平面将被处理为位图,未处理的平面将从第一个流复制。默认值 0xf,将处理所有平面。
39.158.1 命令
该过滤器支持以上所有选项作为命令。
39.159 maskedthreshold
选择比较具有固定阈值的两个视频流的绝对差的像素。
如果第一和第二视频流的像素分量之间的绝对差等于或低于用户提供的阈值,则拾取来自第一视频流的像素分量,否则拾取来自第二视频流的像素分量。
该过滤器接受以下选项:
- threshold
设置从两个输入视频流的绝对差中选取像素时使用的阈值。
- planes
设置哪些平面将被处理为位图,未处理的平面将从第二个流复制。默认值 0xf,将处理所有平面。
- mode
设置过滤器操作模式。可以是
abs
或diff
. 默认为abs
.
39.159.1 命令
该过滤器支持以上所有选项作为命令。
39.160 maskfun
从输入视频创建蒙版。
例如,在过滤器之后创建运动蒙版很有用tblend
。
该过滤器接受以下选项:
- low
设置低阈值。任何低于或精确于此值的像素分量将被设置为 0。
- high
设置高门槛。任何高于此值的像素分量将被设置为当前像素格式允许的最大值。
- planes
设置要过滤的平面,默认情况下会过滤所有可用的平面。
- fill
用该值填充所有帧像素。
- sum
设置帧的最大平均像素值。如果所有像素分量的总和高于此平均值,则输出帧将完全填充由填充选项设置的值。与滤镜结合使用时,通常可用于场景变化
tblend
。
39.160.1 命令
该过滤器支持以上所有选项作为命令。
39.161 mcdeint
应用运动补偿去隔行。
它每帧需要一个字段作为输入,因此必须与 yadif=1/3 或等效项一起使用。
该过滤器接受以下选项:
- mode
设置去隔行模式。
它接受以下值之一:
- ‘fast’
- ‘medium’
- ‘slow’
使用迭代运动估计
- ‘extra_slow’
喜欢 '慢的',但使用多个参考系。
默认值为 '快速地'。
- parity
设置输入视频假定的图片场奇偶校验。它必须是以下值之一:
- ‘0, tff’
假设顶场优先
- ‘1, bff’
假设底场优先
默认值为 '最好的朋友'。
- qp
设置内部编码器使用的每块量化参数 (QP)。
较高的值应会导致更平滑的运动矢量场,但各个矢量的最优性较差。默认值为 1。
39.162 median
从半径定义的某个矩形中选取中值像素。
该过滤器接受以下选项:
- radius
设置水平半径大小。默认值为
1
。允许的范围是 1 到 127 之间的整数。- planes
设置要处理的平面。默认值为
15
,即所有可用平面。- radiusV
设置垂直半径大小。默认值为
0
。允许的范围是 0 到 127 之间的整数。如果是 0,将从水平radius
选项中选取值。- percentile
设置中位数百分位数。默认值为
0.5
。默认值0.5
将始终选择中值,而0
将选择最小值和1
最大值。
39.162.1 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.163 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.163.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.164 mestimate
使用块匹配算法估计和导出运动矢量。运动矢量存储在帧侧数据中以供其他滤波器使用。
该过滤器接受以下选项:
- method
指定运动估计方法。接受以下值之一:
- ‘esa’
详尽的搜索算法。
- ‘tss’
三步搜索算法。
- ‘tdls’
二维对数搜索算法。
- ‘ntss’
新的三步搜索算法。
- ‘fss’
四步搜索算法。
- ‘ds’
钻石搜索算法。
- ‘hexbs’
基于六边形的搜索算法。
- ‘epzs’
增强的预测区域搜索算法。
- ‘umh’
不均匀多六边形搜索算法。
默认值为 '欧空局'。
- mb_size
宏块大小。默认
16
。- search_param
搜索参数。默认
7
。
39.165 midequalizer
使用两个视频流应用中途图像均衡效果。
Midway 图像均衡调整一对图像以具有相同的直方图,同时尽可能保持其动态。它对于匹配一对立体相机的曝光等很有用。
该滤波器有两个输入和一个输出,它们必须具有相同的像素格式,但可以具有不同的大小。滤波器的输出首先根据两个输入的中间直方图进行调整。
该过滤器接受以下选项:
- planes
设置要处理的平面。默认值为
15
,即所有可用平面。
39.166 minterpolate
使用运动插值将视频转换为指定的帧速率。
该过滤器接受以下选项:
- fps
指定输出帧速率。这可以是理性的,例如
60000/1001
。如果fps低于源 fps,则会丢帧。默认60
。- mi_mode
运动插补模式。接受以下值:
- ‘dup’
复制上一帧或下一帧以插入新帧。
- ‘blend’
混合源帧。插值帧是前一帧和下一帧的平均值。
- ‘mci’
运动补偿插值。选择该模式时,以下选项有效:
- ‘mc_mode’
运动补偿模式。接受以下值:
- ‘obmc’
重叠块运动补偿。
- ‘aobmc’
自适应重叠块运动补偿。根据相邻运动矢量的可靠性自适应地控制窗口加权系数,以减少过度平滑。
默认模式是 'OBMC'。
- ‘me_mode’
运动估计模式。接受以下值:
- ‘bidir’
双向运动估计。在向前和向后方向上估计每个源帧的运动矢量。
- ‘bilat’
双边运动估计。直接估计内插帧的运动矢量。
默认模式是 '比拉特'。
- ‘me’
用于运动估计的算法。接受以下值:
- ‘esa’
详尽的搜索算法。
- ‘tss’
三步搜索算法。
- ‘tdls’
二维对数搜索算法。
- ‘ntss’
新的三步搜索算法。
- ‘fss’
四步搜索算法。
- ‘ds’
钻石搜索算法。
- ‘hexbs’
基于六边形的搜索算法。
- ‘epzs’
增强的预测区域搜索算法。
- ‘umh’
不均匀多六边形搜索算法。
默认算法是'出口处'。
- ‘mb_size’
宏块大小。默认
16
。- ‘search_param’
运动估计搜索参数。默认
32
。- ‘vsbmc’
启用可变大小块运动补偿。运动估计在对象边界处应用较小的块尺寸,以使它们不那么模糊。默认为
0
(禁用)。
- scd
场景变化检测方法。场景变化导致运动矢量处于随机方向。场景变化检测用重复帧替换插值帧。其他模式可能不需要。接受以下值:
- ‘none’
禁用场景变化检测。
- ‘fdiff’
帧差。比较相应的像素值,如果满足scd_threshold,则检测到场景变化。
默认方法是'差异'。
- scd_threshold
场景变化检测阈值。默认为
10.
.
39.167 mix
将多个视频输入流混合为一个视频流。
下面是接受的选项的描述。
- inputs
输入的数量。如果未指定,则默认为 2。
- weights
将每个输入视频流的权重指定为序列。每个权重均由空格分隔。如果权重数量小于帧数,则最后指定的权重将用于所有剩余的未设置权重。
- scale
指定比例,如果设置了,它将乘以每个权重的总和乘以像素值,得到最终的目标像素值。默认情况下,比例自动缩放为权重之和。
- planes
设置要过滤的平面。默认为全部。允许的范围是 0 到 15。
- duration
指定如何确定流结束。
- ‘longest’
最长输入的持续时间。(默认)
- ‘shortest’
最短输入的持续时间。
- ‘first’
第一次输入的持续时间。
39.167.1 命令
该过滤器支持以下命令:
- weights
- scale
- planes
语法与同名选项相同。
39.168 monochrome
使用自定义滤色器将视频转换为灰色。
下面是接受的选项的描述。
- cb
设置色度蓝点。允许的范围是 -1 到 1。默认值为 0。
- cr
设置色度红点。允许的范围是 -1 到 1。默认值为 0。
- size
设置滤色片尺寸。允许的范围是 0.1 到 10。默认值为 1。
- high
设置高光强度。允许的范围是 0 到 1。默认值为 0。
39.168.1 命令
该过滤器支持以上所有选项作为命令。
39.169 morpho
该过滤器允许应用主要形态灰度变换、侵蚀和膨胀第二输入流中设置的任意结构。
与腐蚀
和膨胀过滤器中简单的实现和慢得多的性能不同,当速度至关重要时,morpho
应该使用过滤器。
接受选项的描述如下,
- mode
设置要应用的形态变换,可以是:
- ‘erode’
- ‘dilate’
- ‘open’
- ‘close’
- ‘gradient’
- ‘tophat’
- ‘blackhat’
默认为
erode
.- planes
设置要过滤的平面,默认情况下,除 alpha 之外的所有平面都会被过滤。
- structure
设置将从第二个输入流处理哪个结构的视频帧,可以是first或all。默认为全部。
该morpho
过滤器还支持帧同步选项。
39.169.1 命令
该过滤器支持与选项相同的命令。
39.170 mpdecimate
丢弃与前一帧差别不大的帧,以降低帧速率。
该过滤器的主要用途是用于极低比特率编码(例如通过拨号调制解调器进行流传输),但理论上它可以用于修复错误地反向电视传送的电影。
下面是接受的选项的描述。
- max
设置可以丢弃的最大连续帧数(如果为正),或丢弃帧之间的最小间隔(如果为负)。如果该值为 0,则无论先前连续丢弃的帧的数量如何,该帧都会被丢弃。
默认值为 0。
- keep
设置在开始丢弃之前要忽略的连续相似帧的最大数量。如果该值为 0,则丢弃该帧,而不管先前连续相似的帧的数量。
默认值为 0。
- hi
- lo
- frac
设置下降阈值。
值你好和罗用于 8x8 像素块并表示实际像素值差异,因此阈值 64 对应于每个像素的 1 个差异单位,或者相同的差异以不同的方式分布在块上。
如果没有 8x8 块的差异超过阈值,则该帧是丢弃的候选帧你好,如果不超过压裂块(1 表示整个图像)的差异超过阈值罗。
默认值你好为 64*12,默认值为罗为 64*5,默认值为压裂是0.33。
39.171 msad
获取两个输入视频之间的 MSAD(绝对差平均和)。
该过滤器采用两个输入视频。
两个输入视频必须具有相同的分辨率和像素格式,此过滤器才能正常工作。它还假设两个输入具有相同数量的帧,并进行一一比较。
通过记录系统打印获得的每个组件的平均值、最小和最大 MSAD。
过滤器将计算出的每帧的 MSAD 存储在帧元数据中。
该过滤器还支持帧同步选项。
在下面的示例中,输入文件主.mpg正在处理的文件与参考文件进行比较参考.mpg。
ffmpeg -i main.mpg -i ref.mpg -lavfi msad -f null -
39.172 multiply
将第一视频流像素值与第二视频流像素值相乘。
该过滤器接受以下选项:
- scale
设置应用于第二个视频流的比例。默认情况下是
1
. 允许的范围是从0
到9
。- offset
设置应用于第二个视频流的偏移量。默认情况下是
0.5
. 允许的范围是从-1
到1
。- planes
指定要处理的输入视频流中的平面。默认情况下,所有平面都会被处理。
39.172.1 命令
该过滤器支持与选项相同的命令。
39.173 negate
否定(反转)输入视频。
它接受以下选项:
- components
将组件设置为否定。
组件的可用值为:
- ‘y’
- ‘u’
- ‘v’
- ‘a’
- ‘r’
- ‘g’
- ‘b’
- negate_alpha
当值为 1 时,它会否定 alpha 分量(如果存在)。默认值为 0。
39.173.1 命令
该过滤器支持与选项相同的命令。
39.174 nlmeans
使用非局部均值算法对帧进行去噪。
通过寻找具有相似上下文的其他像素来调整每个像素。这种上下文相似性是通过比较周围的块大小来定义的 pXp。在以下区域中搜索补丁rXr 像素周围。
请注意,研究区域定义了补丁的中心,这意味着某些补丁将由该研究区域之外的像素组成。
该过滤器接受以下选项。
- s
设置去噪强度。默认值为 1.0。必须在 [1.0, 30.0] 范围内。
- p
设置补丁大小。默认值为 7。必须是 [0, 99] 范围内的奇数。
- pc
与...一样p但对于色度平面。
默认值为0,表示自动。
- r
设定研究规模。默认值为 15。必须是 [0, 99] 范围内的奇数。
- rc
与...一样r但对于色度平面。
默认值为0,表示自动。
39.175 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
控制是否使用预筛选器神经网络来决定哪些像素应由预测器神经网络处理以及哪些像素可以通过简单的三次插值处理。预筛选器经过训练,知道三次插值对于像素是否足够,或者是否应该由预测器 nn 进行预测。预筛选器 nn 的计算复杂度远低于预测器 nn 的计算复杂度。由于大多数像素可以通过三次插值处理,因此使用预筛选器通常会导致处理速度更快。预筛选器非常准确,因此使用它和不使用它之间的差异几乎总是不易察觉。
可以是以下之一:
- ‘none’
- ‘original’
- ‘new’
- ‘new2’
- ‘new3’
默认为
new
.
39.175.1 命令
该过滤器支持与选项相同的命令,但不包括权重选项。
39.176 noformat
强制 libavfilter 不使用任何指定的像素格式作为下一个过滤器的输入。
它接受以下参数:
- pix_fmts
以“|”分隔的像素格式名称列表,例如 pix_fmts=yuv420p|monow|rgb24"。
39.176.1 示例
- 强制 libavfilter 使用不同于yuv420p 的格式作为 vflip 过滤器的输入:
noformat=pix_fmts=yuv420p,vflip
- 将输入视频转换为列表中未包含的任何格式:
noformat=yuv420p|yuv444p|yuv410p
39.177 noise
在视频输入帧上添加噪声。
该过滤器接受以下选项:
- 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.177.1 示例
向输入视频添加时间和均匀噪声:
noise=alls=20:allf=t+u
39.178 normalize
标准化 RGB 视频(又名直方图拉伸、对比度拉伸)。请参阅:https://en.wikipedia.org/wiki/Normalization_(image_processing)
对于每帧的每个通道,滤波器计算输入范围并将其线性映射到用户指定的输出范围。输出范围默认为从纯黑到纯白的全动态范围。
可以在输入范围上使用时间平滑,以减少小暗或亮物体进入或离开场景时引起的闪烁(亮度的快速变化)。这类似于摄像机上的自动曝光(自动增益控制),并且与摄像机一样,它可能会导致视频出现一段时间的曝光过度或曝光不足。
R、G、B 通道可以独立标准化,这可能会导致一些色偏,或者作为单个通道链接在一起,这可以防止色偏。链接标准化保留了色调。独立标准化则不然,因此它可以用来消除一些色偏。独立标准化和链接标准化可以以任意比例组合。
标准化过滤器接受以下选项:
- blackpt
- whitept
定义输出范围的颜色。最小输入值映射到blackpt。最大输入值映射到whitept。默认值分别为黑色和白色。指定 blackpt为白色,为whitept指定黑色将得到颜色反转的标准化视频。灰色阴影可用于降低动态范围(对比度)。在这里指定饱和颜色可以创建一些有趣的效果。
- smoothing
用于时间平滑的先前帧的数量。使用当前帧的滚动平均值和平滑先前帧来平滑每个通道的输入范围。默认值为 0(无时间平滑)。
- independence
控制独立(色移)通道归一化与链接(颜色保留)归一化的比率。0.0是完全链接的,1.0是完全独立的。默认为 1.0(完全独立)。
- strength
过滤器的整体强度。1.0是全力。0.0 是一个相当昂贵的无操作。默认为 1.0(全强度)。
39.178.1 命令
该过滤器支持与选项相同的命令,但不包括平滑选项。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.178.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.179 null
将视频源不变地传递到输出。
39.180 ocr
光学字符识别
该过滤器使用 Tesseract 进行光学字符识别。要启用此过滤器的编译,您需要使用
--enable-libtesseract
.
它接受以下选项:
- datapath
将数据路径设置为超立方体数据。默认是使用安装时设置的任何内容。
- language
设置语言,默认为“eng”。
- whitelist
设置字符白名单。
- blacklist
设置字符黑名单。
过滤器将识别的文本导出为帧元数据lavfi.ocr.text
。过滤器将已识别单词的置信度导出为帧元数据lavfi.ocr.confidence
。
39.181 ocv
使用 libopencv 应用视频转换。
要启用此过滤器,请安装 libopencv 库和标头并使用--enable-libopencv
.
它接受以下参数:
- filter_name
要应用的 libopencv 过滤器的名称。
- filter_params
要传递给 libopencv 过滤器的参数。如果未指定,则采用默认值。
有关更准确的信息,请参阅官方 libopencv 文档: http://docs.opencv.org/master/modules/imgproc/doc/filtering.html
支持多个 libopencv 过滤器;请参阅以下小节。
39.181.1 扩张
使用特定的结构元素放大图像。它对应于libopencv函数cvDilate
。
它接受参数:struct_el | nb_迭代。
struct_el表示结构元素,语法为 :cols x rows + anchor_x xanchor_y / shape
cols和rows表示结构元素的列数和行数,anchor_x和anchor_y表示锚点,并塑造结构元素的形状。形状 必须是“矩形”、“十字形”、“椭圆形”或“自定义”。
如果shape的值为“custom”,则其后必须跟有“= filename ”形式的字符串。假定名为filename 的文件 表示二进制图像,每个可打印字符对应于一个亮像素。当使用自定义 形状时,将忽略 列和行,而是假定读取文件的数量或列和行。
struct_el的默认值为“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.181.2 侵蚀
使用特定的结构元素侵蚀图像。它对应于libopencv函数cvErode
。
它接受参数:struct_el : nb_iterations,具有与dilate过滤器相同的语法和语义。
39.181.3 平滑
平滑输入视频。
该过滤器采用以下参数: type | 参数1 | 参数2 | 参数3 | 参数4。
type是要应用的平滑滤波器的类型,并且必须是以下值之一:“blur”、“blur_no_scale”、“median”、“gaussian”或“bilingual”。默认值为“高斯”。
param1、param2、param3和param4的含义 取决于 smooth 类型。param1和 param2接受整数正值或 0。param3和param4 接受浮点值。
param1的默认值为3。其他参数的默认值为 0。
这些参数对应于分配给 libopencv 函数的参数cvSmooth
。
39.182 oscilloscope
2D 视频示波器。
可用于测量空间脉冲、阶跃响应、色度延迟等。
它接受以下参数:
- x
设置范围中心 x 位置。
- y
设置范围中心 y 位置。
- s
设置范围大小,相对于帧对角线。
- t
设置示波器倾斜/旋转。
- o
设置轨迹不透明度。
- tx
设置轨迹中心 x 位置。
- ty
设置轨迹中心 y 位置。
- tw
设置相对于帧宽度的迹线宽度。
- th
设置相对于框架高度的迹线高度。
- c
设置要跟踪的组件。默认情况下,它跟踪前三个组件。
- g
绘制跟踪网格。默认情况下启用。
- st
绘制一些统计数据。默认情况下启用。
- sc
画出范围。默认情况下启用。
39.182.1 命令
该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.182.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.183 overlay
将一个视频叠加在另一个视频之上。
它需要两个输入并有一个输出。第一个输入是“主”视频,第二个输入覆盖在其上。
它接受以下参数:
下面是接受的选项的描述。
- x
- y
设置主视频上叠加视频的 x 和 y 坐标的表达式。两个表达式的默认值为“0”。如果表达式无效,则会将其设置为一个巨大的值(意味着叠加层不会显示在输出可见区域内)。
- eof_action
请参阅帧同步。
- eval
设置当表达式为X, 和y被评估。
它接受以下值:
- ‘init’
仅在过滤器初始化期间或处理命令时对表达式求值一次
- ‘frame’
评估每个传入帧的表达式
默认值为 '框架'。
- shortest
请参阅帧同步。
- 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
请参阅帧同步。
- 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。
该过滤器还支持帧同步选项。
请注意,n、t变量仅在每帧进行评估时才可用,并且在以下情况下将评估为 NAN:评估被设定为 '在里面'。
请注意,帧是按时间戳顺序从每个输入视频中获取的,因此,如果它们的初始时间戳不同,最好将两个输入通过 setpts=PTS- STARTPTS过滤器传递,以使它们以相同的零时间戳开始,就像电影过滤器的例子一样。
您可以将更多覆盖链接在一起,但您应该测试这种方法的效率。
39.183.1 命令
该过滤器支持以下命令:
- x
- y
修改覆盖输入的 x 和 y。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.183.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
ffmpeg
使用带有以下选项的工具在输入的左下角插入透明的 PNG 徽标-filter_complex
:ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
- 使用以下工具插入 2 个不同的透明 PNG 徽标(第二个徽标位于右下角)
ffmpeg
:ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
- 在主视频顶部添加透明颜色层;
WxH
必须指定覆盖过滤器的主输入的大小:color=color=red@.3:size=WxH [over]; [in][over] overlay [out]
ffplay
使用该工具 并排播放原始视频和过滤版本(此处带有防抖滤镜) :ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
上面的命令与以下命令相同:
ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
- 从时间 2 开始,制作一个从左到右顶部出现的滑动覆盖层:
overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
- 通过将两个输入视频并排放置来组成输出:
ffmpeg -i left.avi -i right.avi -filter_complex " nullsrc=size=200x100 [background]; [0:v] setpts=PTS-STARTPTS, scale=100x100 [left]; [1:v] setpts=PTS-STARTPTS, scale=100x100 [right]; [background][left] overlay=shortest=1 [background+left]; [background+left][right] overlay=shortest=1:x=100 [left+right] "
- 通过将 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.184 overlay_cuda
将一个视频叠加在另一个视频之上。
这是覆盖过滤器的 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
评估每个传入帧的表达式
默认值为框架。
- eof_action
请参阅帧同步。
- shortest
请参阅帧同步。
- repeatlast
请参阅帧同步。
该过滤器还支持帧同步选项。
39.185 owdenoise
应用过完备小波降噪器。
该过滤器接受以下选项:
- depth
设置深度。
深度值越大,低频分量的去噪就越多,但会减慢滤波速度。
必须是 8-16 范围内的 int,默认为
8
。- luma_strength, ls
设置亮度强度。
必须是 0-1000 范围内的双精度值,默认值为
1.0
。- chroma_strength, cs
设置色度强度。
必须是 0-1000 范围内的双精度值,默认值为
1.0
。
39.186 pad
向输入图像添加填充,并将原始输入放置在提供的x、y坐标处。
它接受以下参数:
- width, w
- height, h
指定添加了填充的输出图像尺寸的表达式。如果宽度或高度的值为0,则相应的输入尺寸将用于输出。
宽度表达式可以引用高度表达式设置的值 ,反之亦然 。
宽度和高度的默认值为0。
- x
- y
指定将输入图像放置在填充区域内相对于输出图像的上/左边框的偏移量。
x表达式可以引用y表达式设置的值 ,反之亦然。
x和y的默认值为0。
如果x或y的计算结果为负数,它们将被更改,以便输入图像位于填充区域的中心。
- color
指定填充区域的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。
颜色的默认值为“黑色”。
- eval
指定何时计算 width、height、x和y表达式。
它接受以下值:
- ‘init’
仅在过滤器初始化期间或处理命令时对表达式求值一次。
- ‘frame’
评估每个传入帧的表达式。
默认值为 '在里面'。
- aspect
填充到宽高比而不是分辨率。
width、height、x和y选项的值 是包含以下常量的表达式:
- in_w
- in_h
输入视频的宽度和高度。
- iw
- ih
它们与in_w和in_h相同。
- out_w
- out_h
输出宽度和高度(填充区域的大小),由宽度和高度表达式指定。
- ow
- oh
它们与out_w和out_h相同。
- x
- y
x 和 y 偏移量由x和y表达式指定 ,如果尚未指定,则为 NAN。
- a
与iw / ih相同
- sar
输入样本长宽比
- dar
输入显示宽高比,与 ( iw / ih ) * sar相同
- hsub
- vsub
水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub为 1。
39.186.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.187 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
),您可以使用它来评估调色板的颜色量化程度。此信息在信息日志记录级别也可见
。
39.187.1 示例
- 使用以下命令生成给定视频的代表性调色板
ffmpeg
:ffmpeg -i input.mkv -vf palettegen palette.png
39.188 paletteuse
使用调色板对输入视频流进行下采样。
该过滤器需要两个输入:一个视频流和一个调色板。调色板必须是 256 像素图像。
它接受以下选项:
- dither
选择抖动模式。可用的算法有:
- ‘bayer’
有序 8x8 拜耳抖动(确定性)
- ‘heckbert’
Paul Heckbert 在 1982 年定义的抖动(简单误差扩散)。注意:这种抖动有时被认为是“错误的”,并作为参考包含在内。
- ‘floyd_steinberg’
Floyd 和 Steingberg 抖动(误差扩散)
- ‘sierra2’
Frankie Sierra 抖动 v2(误差扩散)
- ‘sierra2_4a’
Frankie Sierra 抖动 v2“Lite”(误差扩散)
- ‘sierra3’
Frankie Sierra 抖动 v3(误差扩散)
- ‘burkes’
伯克抖动(误差扩散)
- ‘atkinson’
Apple Computer 的 Bill Atkinson 提出的阿特金森抖动(误差扩散)
- ‘none’
禁用抖动。
默认为sierra2_4a。
- bayer_scale
当选择拜耳抖动时,此选项定义图案的比例(剖面线图案的可见程度)。较低的值意味着图案更明显,条带更少,而较高的值意味着图案更不可见,但条带更多。
该选项必须是 [0,5] 范围内的整数值。默认值为2。
- diff_mode
如果设置,则定义要处理的区域
- ‘rectangle’
只有变化的矩形才会被重新处理。这类似于 GIF 裁剪/偏移压缩机制。如果仅图像的一部分发生变化,并且具有限制误差扩散范围等用例,则此选项对于提高速度很有用抖动到限制移动场景的矩形(如果场景变化不大,它会产生更具确定性的输出,从而减少移动噪声并获得更好的 GIF 压缩)。
默认为无。
- new
为每个输出帧采用新的调色板。
- alpha_threshold
设置透明度的 Alpha 阈值。高于此阈值的 Alpha 值将被视为完全不透明,低于此阈值的值将被视为完全透明。
该选项必须是 [0,255] 范围内的整数值。默认值为128。
39.188.1 示例
- 使用调色板(例如使用Palettegen生成)对 GIF 进行编码
ffmpeg
:ffmpeg -i input.mkv -i palette.png -lavfi paletteuse output.gif
39.189 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’
默认值为 '线性'。
- sense
设置坐标选项的解释。
它接受以下值:
- ‘0, source’
-
将给定坐标指定的源中的点发送到目标的角点。
- ‘1, destination’
-
将源的角发送到给定坐标指定的目标中的点。
默认值为 '来源'。
- eval
设置坐标表达式x0,y0,...x3,y3被评估。
它接受以下值:
- ‘init’
仅在过滤器初始化期间或处理命令时对表达式求值一次
- ‘frame’
评估每个传入帧的表达式
默认值为 '在里面'。
39.190 phase
将隔行扫描视频延迟一场时间,以便改变场序。
预期用途是修复以与胶片到视频传输相反的场序捕获的 PAL 影片。
下面是接受参数的描述。
- mode
设置相位模式。
它接受以下值:
- ‘t’
捕获场顺序从上到下,传输从下到上。滤波器将延迟底部场。
- ‘b’
捕获字段顺序为底部优先,传输顶部优先。过滤器将延迟顶场。
- ‘p’
使用相同的场序进行捕获和传输。这种模式的存在只是为了其他选项的文档参考,但如果你真的选择它,过滤器将忠实地什么都不做。
- ‘a’
捕获字段顺序由字段标志自动确定,传输相反。过滤器选择 't' 和 '乙' 使用字段标志逐帧模式。如果没有可用的字段信息,那么这就像'你'。
- ‘u’
捕捉未知或变化,转移相反。过滤器选择 't' 和 '乙”通过分析图像并选择在场之间产生最佳匹配的替代方案,逐帧进行。
- ‘T’
捕获顶部优先,传输未知或变化。过滤器选择 't' 和 'p'使用图像分析。
- ‘B’
从底部开始捕获,传输未知或变化。过滤器选择 '乙' 和 'p'使用图像分析。
- ‘A’
捕获由字段标志确定,传输未知或变化。过滤器选择 't','乙' 和 'p' 使用字段标志和图像分析。如果没有可用的字段信息,那么这就像'U'。这是默认模式。
- ‘U’
捕获和转移均未知或变化。过滤器选择 't','乙' 和 'p' 仅使用图像分析。
39.190.1 命令
该过滤器支持以上所有选项作为命令。
39.191 photosensitivity
减少视频中的各种闪烁,从而帮助患有癫痫症的用户。
它接受以下选项:
- frames, f
设置过滤时使用的帧数。默认值为 30。
- threshold, t
设置检测阈值因子。默认值为 1。越低越严格。
- skip
设置采样帧时要跳过的像素数。默认值为 1。允许的范围为 1 到 1024。
- bypass
保持框架不变。默认为禁用。
39.192 pixdesctest
像素格式描述符测试过滤器,主要用于内部测试。输出视频应等于输入视频。
例如:
format=monow, pixdesctest
可用于测试单色像素格式描述符定义。
39.193 pixelize
将像素化应用于视频流。
该过滤器接受以下选项:
- width, w
- height, h
设置将用于像素化的块尺寸。默认值为
16
。- mode, m
设置所使用的像素化模式。
可能的值为:
- ‘avg’
- ‘min’
- ‘max’
默认值为
avg
。- planes, p
设置要过滤的平面。默认是过滤所有平面。
39.193.1 命令
该过滤器支持所有选项作为命令。
39.194 pixscope
显示颜色通道的样本值。主要用于检查颜色和级别。支持的最低分辨率为 640x480。
过滤器接受以下选项:
- x
设置示波器 X 位置、X 轴上的相对偏移量。
- y
设置示波器 Y 位置、Y 轴上的相对偏移量。
- w
设置范围宽度。
- h
设置范围高度。
- o
设置窗口的不透明度。该窗口还保存有关像素区域的统计信息。
- wx
设置窗口 X 位置、X 轴相对偏移。
- wy
设置窗口 Y 位置、Y 轴相对偏移。
39.194.1 命令
该过滤器支持与选项相同的命令。
39.195 pp
使用 libpostproc 启用指定的后处理子过滤器链。该库应通过 GPL 版本自动选择 ( --enable-gpl
)。子过滤器必须用“/”分隔,并且可以通过在前面添加“-”来禁用。每个子过滤器和一些选项都有一个可以互换使用的短名称和长名称,即 dr/dering 是相同的。
过滤器接受以下选项:
- subfilters
设置后处理子过滤器字符串。
所有子过滤器共享通用选项来确定其范围:
- a/autoq
遵守此子过滤器的质量命令。
- c/chrom
也进行色度过滤(默认)。
- y/nochrom
仅进行亮度过滤(无色度)。
- n/noluma
仅进行色度过滤(无亮度)。
这些选项可以附加在子过滤器名称之后,并用“|”分隔。
可用的子过滤器有:
- hb/hdeblock[|difference[|flatness]]
水平去块效应滤波器
- difference
差异因子,值越高意味着去块效应越多(默认值:
32
)。- flatness
平坦度阈值,较低的值意味着更多的去块效应(默认值:
39
)。
- vb/vdeblock[|difference[|flatness]]
垂直去块效应滤波器
- difference
差异因子,值越高意味着去块效应越多(默认值:
32
)。- flatness
平坦度阈值,较低的值意味着更多的去块效应(默认值:
39
)。
- ha/hadeblock[|difference[|flatness]]
精确的水平去块效应滤波器
- difference
差异因子,值越高意味着去块效应越多(默认值:
32
)。- flatness
平坦度阈值,较低的值意味着更多的去块效应(默认值:
39
)。
- va/vadeblock[|difference[|flatness]]
精确的垂直去块效应滤波器
- difference
差异因子,值越高意味着去块效应越多(默认值:
32
)。- flatness
平坦度阈值,较低的值意味着更多的去块效应(默认值:
39
)。
水平和垂直去块效应滤波器共享差异和平坦度值,因此您无法设置不同的水平和垂直阈值。
- h1/x1hdeblock
实验性水平去块效应滤波器
- v1/x1vdeblock
实验性垂直去块效应滤波器
- dr/dering
除振铃过滤器
- tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], temporal noise reducer
- threshold1
更大 -> 更强的过滤
- threshold2
更大 -> 更强的过滤
- threshold3
更大 -> 更强的过滤
- al/autolevels[:f/fullyrange], automatic brightness / contrast correction
- f/fullyrange
将亮度拉伸至
0-255
.
- lb/linblenddeint
线性混合去隔行滤波器,通过使用滤波器过滤所有行来对给定块进行去隔行
(1 2 1)
。- li/linipoldeint
线性插值去隔行滤波器,通过每隔一行线性插值来对给定块进行去隔行。
- ci/cubicipoldeint
三次插值去隔行滤波器通过对每隔一行进行三次插值来对给定块进行去隔行。
- md/mediandeint
中值去隔行滤波器,通过对每隔一行应用中值滤波器来对给定块进行去隔行。
- fd/ffmpegdeint
FFmpeg 去隔行过滤器,通过使用过滤器过滤每隔一行来对给定块进行去隔行
(-1 4 2 4 -1)
。- l5/lowpass5
垂直应用的 FIR 低通去隔行滤波器,通过使用滤波器过滤所有行来对给定块进行去隔行
(-1 2 6 2 -1)
。- fq/forceQuant[|quantizer]
使用您指定的常量量化器覆盖输入中的量化器表。
- quantizer
使用的量化器
- de/default
默认 pp 过滤器组合 (
hb|a,vb|a,dr|a
)- fa/fast
快速pp过滤器组合(
h1|a,v1|a,dr|a
)- ac
高品质 pp 过滤组合 (
ha|a|128|7,va|a,dr|a
)
39.195.1 示例
- 应用水平和垂直去块效应、去振铃和自动亮度/对比度:
pp=hb/vb/dr/al
- 应用默认滤镜而不进行亮度/对比度校正:
pp=de/-al
- 应用默认滤波器和时间降噪器:
pp=default/tmpnoise|1|2|3
- 仅对亮度应用去块效应,并根据可用的 CPU 时间自动打开或关闭垂直去块效应:
pp=hb|y/vb|a
39.196 pp7
应用后处理滤波器 7。它是spp滤波器的变体,类似于具有 7 点 DCT 的 spp = 6,其中在 IDCT 后仅使用中心样本。
该过滤器接受以下选项:
- qp
强制使用恒定的量化参数。它接受 0 到 63 范围内的整数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。
- mode
设置阈值模式。可用模式有:
- ‘hard’
设置硬阈值。
- ‘soft’
设置软阈值(更好的去振铃效果,但可能更模糊)。
- ‘medium’
设置中等阈值(良好结果,默认)。
39.197 premultiply
使用第二个流的第一个平面作为 Alpha 将 Alpha 预乘效果应用于输入视频流。
两个流必须具有相同的尺寸和相同的像素格式。
过滤器接受以下选项:
- planes
设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。
- inplace
不需要第二个输入进行处理,而是使用输入流中的 alpha 平面。
39.198 prewitt
将 prewitt 运算符应用于输入视频流。
过滤器接受以下选项:
- planes
设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。
- scale
设置将与过滤结果相乘的值。
- delta
设置将添加到过滤结果的值。
39.198.1 命令
该过滤器支持以上所有选项作为命令。
39.199 pseudocolor
使用伪彩色更改视频中的帧颜色。
该过滤器接受以下选项:
- c0
设置像素第一分量表达式
- c1
设置像素第二分量表达式
- c2
设置像素第三分量表达式
- c3
设置像素第四分量表达式,对应alpha分量
- index, i
设置用作更改颜色基础的组件
- preset, p
选择内置 LUT 之一。默认设置为无。
可用的 LUT:
- ‘magma’
- ‘inferno’
- ‘plasma’
- ‘viridis’
- ‘turbo’
- ‘cividis’
- ‘range1’
- ‘range2’
- ‘shadows’
- ‘highlights’
- ‘solar’
- ‘nominal’
- ‘preferred’
- ‘total’
- ‘spectral’
- ‘cool’
- ‘heat’
- ‘fiery’
- ‘blues’
- ‘green’
- ‘helix’
- opacity
设置输出颜色的不透明度。允许的范围为 0 到 1。默认值设置为 1。
每个表达式选项指定用于计算相应像素分量值的查找表的表达式。
表达式可以包含以下常量和函数:
- w
- h
输入的宽度和高度。
- val
像素分量的输入值。
- ymin, umin, vmin, amin
允许的最小元件值。
- ymax, umax, vmax, amax
最大允许组件值。
所有表达式默认为“val”。
39.199.1 命令
该过滤器支持以上所有选项作为命令。
39.199.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.200 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,过滤器将返回错误。
该过滤器还支持帧同步选项。
如果选择stats_file ,则打印的文件包含一系列键/值对,其形式为key : value对于每个比较的帧对。
如果指定的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.200.1 示例
- 例如:
movie=ref_movie.mpg, setpts=PTS-STARTPTS [main]; [main][ref] psnr="stats_file=stats.log" [out]
在此示例中,正在处理的输入文件与参考文件进行比较ref_movie.mpg。每个单独帧的 PSNR 存储在统计日志。
- 另一个使用不同容器的示例:
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.201 pullup
下拉反转(逆电视电影)滤波器,能够处理混合硬电视电影、24000/1001 fps 逐行扫描和 30000/1001 fps 逐行扫描内容。
上拉过滤器旨在利用未来的上下文来做出决策。该过滤器是无状态的,因为它不锁定要遵循的模式,而是期待以下字段以识别匹配并重建渐进帧。
要生成具有均匀帧速率的内容,请在上拉后插入 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’
使用色度红平面。
该选项可以设置为使用色度平面而不是默认的亮度平面来进行滤波器的计算。这可能会提高非常干净的源材料的准确性,但更有可能会降低准确性,特别是在存在色度噪声(彩虹效应)或任何灰度视频的情况下。设置的主要目的议员色度平面的目的是减少 CPU 负载并使上拉可以在慢速机器上实时使用。
为了获得最佳结果(输出文件中没有重复的帧),有必要更改输出帧速率。例如,要反转电视电影 NTSC 输入:
ffmpeg -i input -vf pullup -r 24000/1001 ...
39.202 qp
更改视频量化参数 (QP)。
过滤器接受以下选项:
- qp
设置量化参数的表达式。
该表达式通过 eval API 进行计算,并且可以包含以下常量:
- known
如果索引不是 129,则为 1,否则为 0。
- qp
从-129到128开始的顺序索引。
39.202.1 示例
- 一些等式:
qp=2+2*sin(PI*qp)
39.203 random
将视频帧从内部帧缓存刷新为随机顺序。没有帧被丢弃。受到frei0r神经过滤器的启发。
- frames
设置内部缓存的帧数大小,范围为
2
到512
。默认为30
.- seed
0
为随机数生成器设置种子,必须是和之间的整数UINT32_MAX
。如果未指定,或者明确设置为小于0
,过滤器将尽力使用良好的随机种子。
39.204 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.204.1 命令
该过滤器支持以上所有选项作为命令。
39.204.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.205 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.205.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.206 remap
使用第二个:Xmap 和第三个:Ymap 输入视频流重新映射像素。
位置 (X, Y) 处的目标像素将从源 (x, y) 位置拾取,其中 x = Xmap(X, Y) 且 y = Ymap(X, Y)。如果映射值超出范围,则像素的零值将用于目标像素。
Xmap 和 Ymap 输入视频流的尺寸必须相同。输出视频流将具有 Xmap/Ymap 视频流尺寸。Xmap 和 Ymap 输入视频流为 16 位深度、单通道。
- format
指定此过滤器输出的像素格式。可以是
color
或gray
. 默认为color
.- fill
指定未映射像素的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。默认颜色是
black
.
39.207 removegrain
移除颗粒滤波器是用于渐进式视频的空间降噪器。
- m0
设置第一个平面的模式。
- m1
设置第二个平面的模式。
- m2
设置第三个平面的模式。
- m3
设置第四个平面的模式。
模式的范围是0到24。每种模式的说明如下:
- 0
保持输入平面不变。默认。
- 1
剪裁具有 8 个相邻像素的最小值和最大值的像素。
- 2
剪裁 8 个相邻像素中第二个最小值和最大值的像素。
- 3
剪裁 8 个相邻像素中第三个最小值和最大值的像素。
- 4
剪裁 8 个相邻像素中第四个最小值和最大值的像素。这相当于中值滤波器。
- 5
线敏感剪裁提供最小的变化。
- 6
线敏感剪裁,中间。
- 7
线敏感剪裁,中间。
- 8
线敏感剪裁,中间。
- 9
在相邻像素最接近的线上进行线敏感剪裁。
- 10
将目标像素替换为最近邻像素。
- 11
[1 2 1] 水平和垂直内核模糊。
- 12
与模式 11 相同。
- 13
Bob 模式,从相邻像素最接近的线插入顶场。
- 14
Bob 模式,从相邻像素最接近的线插入底场。
- 15
Bob 模式,插入顶场。与 13 相同,但插值公式更复杂。
- 16
Bob 模式,插入底场。与 14 相同,但插值公式更复杂。
- 17
剪裁具有每对相对相邻像素的最大值和最小值的最小值和最大值的像素。
- 18
使用与当前像素的最大距离最小的相对邻居进行线敏感裁剪。
- 19
将像素替换为其 8 个相邻像素的平均值。
- 20
对 9 个像素进行平均([1 1 1] 水平和垂直模糊)。
- 21
使用相对邻居的平均值来剪辑像素。
- 22
与模式 21 相同,但更简单、更快。
- 23
小边缘和光晕去除,但据说没用。
- 24
与23类似。
39.208 removelogo
抑制电视台徽标,使用图像文件来确定哪些像素包含徽标。它的工作原理是用相邻像素填充构成徽标的像素。
该过滤器接受以下选项:
- filename, f
设置滤镜位图文件,可以是libavformat支持的任何图像格式。图像文件的宽度和高度必须与正在处理的视频流的宽度和高度相匹配。
所提供的位图图像中值为零的像素不被视为徽标的一部分,非零像素被视为徽标的一部分。如果徽标使用白色 (255),其余部分使用黑色 (0),那么您将是安全的。为了制作滤镜位图,建议对徽标可见的黑框进行屏幕截图,然后使用阈值滤镜,然后使用侵蚀滤镜一次或两次。
如果需要,可以手动修复小斑点。请记住,如果徽标像素未被覆盖,过滤器质量将会大大降低。将太多像素标记为徽标的一部分不会造成太大伤害,但会增加覆盖图像所需的模糊量,并会破坏比必要的更多信息,并且额外的像素会减慢大型徽标的速度。
39.209 repeatfields
此过滤器使用视频 ES 标头中的重复字段标志和基于其值的硬重复字段。
39.210 reverse
反转视频剪辑。
警告:此滤镜需要内存来缓冲整个剪辑,因此建议进行修剪。
39.210.1 示例
- 获取剪辑的前 5 秒并将其反转。
trim=end=5,reverse
39.211 rgbashift
水平和/或垂直移动 R/G/B/A 像素。
该过滤器接受以下选项:
- rh
设置水平移动红色的量。
- rv
设置垂直移动红色的量。
- gh
设置水平移动绿色的量。
- gv
设置垂直移动绿色的量。
- bh
设置水平移动蓝色的量。
- bv
设置垂直移动蓝色的量。
- ah
设置水平移动 alpha 的量。
- av
设置垂直移动 alpha 的量。
- edge
设置边缘模式,可以是smear、 default 或warp。
39.211.1 命令
该过滤器支持以上所有选项作为命令。
39.212 roberts
将罗伯茨交叉运算符应用于输入视频流。
过滤器接受以下选项:
- planes
设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。
- scale
设置将与过滤结果相乘的值。
- delta
设置将添加到过滤结果的值。
39.212.1 命令
该过滤器支持以上所有选项作为命令。
39.213 rotate
将视频旋转任意角度(以弧度表示)。
该过滤器接受以下选项:
下面是可选参数的描述。
- 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)
完全包含旋转弧度的输入视频所需的最小宽度/高度。
这些仅在计算时可用输出和 输出_h表达式。
39.213.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.213.2 命令
过滤器支持以下命令:
- a, angle
设置角度表达式。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.214 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.215 scale
使用 libswscale 库缩放(调整大小)输入视频。
比例过滤器通过更改输出样本宽高比,强制输出显示宽高比与输入相同。
如果输入图像格式与下一个过滤器请求的格式不同,则缩放过滤器会将输入转换为请求的格式。
39.215.1 选项
该过滤器接受以下选项,或 libswscale 缩放器支持的任何选项。
有关缩放器选项的完整列表, 请参阅(ffmpeg-scaler)ffmpeg-scaler 手册。
- width, w
- height, h
设置输出视频尺寸表达式。默认值是输入尺寸。
如果宽度或w值为 0,则输入宽度用于输出。如果height或h值为 0,则输入高度将用于输出。
如果其中一个且只有一个值是 -n 并且 n >= 1,则缩放过滤器将使用一个值来维持输入图像的纵横比(根据其他指定维度计算)。然而,之后它将确保计算出的尺寸可被 n 整除,并在必要时调整该值。
如果两个值都是 -n 并且 n >= 1,则行为将与前面详述的两个值都设置为 0 相同。
请参阅下面的维度表达式中可接受的常量列表。
- eval
指定何时计算宽度和高度表达式。它接受以下值:
- ‘init’
仅在过滤器初始化期间或处理命令时对表达式求值一次。
- ‘frame’
评估每个传入帧的表达式。
默认值为 '在里面'。
- interl
设置隔行扫描模式。它接受以下值:
- ‘1’
强制隔行感知缩放。
- ‘0’
不要应用隔行缩放。
- ‘-1’
根据源帧是否标记为隔行扫描来选择隔行扫描感知缩放。
默认值为 '0'。
- flags
设置 libswscale 缩放标志。请参阅 (ffmpeg-scaler)ffmpeg-scaler 手册以获取完整的值列表。如果没有明确指定,过滤器将应用默认标志。
- param0, param1
为需要它们的缩放算法设置 libswscale 输入参数。有关完整文档,请参阅 (ffmpeg-scaler)ffmpeg-scaler 手册。如果没有明确指定,过滤器将应用空参数。
- size, s
设置视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。
- in_color_matrix
- out_color_matrix
设置输入/输出 YCbCr 色彩空间类型。
这允许覆盖自动检测到的值,并允许强制将特定值用于输出和编码器。
如果未指定,颜色空间类型取决于像素格式。
可能的值:
- ‘auto’
自动选择。
- ‘bt709’
格式符合国际电信联盟 (ITU) 建议 BT.709。
- ‘fcc’
设置符合美国联邦通信委员会 (FCC) 联邦法规 (CFR) Title 47 (2003) 73.682 (a) 的色彩空间。
- ‘bt601’
- ‘bt470’
- ‘smpte170m’
设置色彩空间符合:
- 国际电联无线电通信部门(ITU-R)建议书 BT.601
- ITU-R 建议书。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)。
- force_original_aspect_ratio
如有必要,启用减小或增加输出视频宽度或高度以保持原始宽高比。可能的值:
- ‘disable’
按指定缩放视频并禁用此功能。
- ‘decrease’
如果需要,输出视频尺寸将自动减小。
- ‘increase’
如果需要,输出视频尺寸将自动增加。
此选项的一个有用实例是,当您知道特定设备允许的最大分辨率时,您可以使用它来限制输出视频,同时保留宽高比。例如,设备 A 允许播放 1280x720,而您的视频为 1920x800。使用此选项(将其设置为减小)并向命令行指定 1280x720 将使输出变为 1280x533。
请注意,这与指定 -1 是不同的w 或者H,您仍然需要指定输出分辨率才能使该选项起作用。
- force_divisible_by
确保与以下命令一起使用时,输出尺寸(宽度和高度)均可被给定整数整除力原始纵横比。
-n
这与在中使用类似w和H选项。该选项遵循设置的值力原始纵横比,相应地增加或减少分辨率。视频的长宽比可能会略有修改。
如果您需要使视频适合或超过定义的分辨率,则此选项会很方便力原始纵横比但编码器对宽度或高度的可分性也有限制。
的价值观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
输入流中帧的位置(字节偏移量),如果此信息不可用和/或无意义(例如在合成视频的情况下),则为 NaN。仅适用于
eval=frame
. 已弃用,请勿使用。
39.215.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
- 通过组合scale和setsar使像素成为正方形,确保生成的分辨率均匀(某些编解码器需要):
scale='trunc(ih*dar/2)*2:trunc(ih/2)*2',setsar=1/1
39.215.3 命令
该过滤器支持以下命令:
- width, w
- height, h
设置输出视频尺寸表达式。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.216 scale_cuda
使用加速的 CUDA 内核缩放(调整大小)和转换(像素格式)输入视频。设置输出宽度和高度的工作方式与缩放过滤器相同。
该过滤器接受以下选项:
- w
- h
设置输出视频尺寸表达式。默认值是输入尺寸。
允许使用与比例过滤器相同的表达式。
- interp_algo
设置用于缩放的算法:
- nearest
最近邻居
如果输入参数与所需输出匹配,则默认使用。
- bilinear
双线性
- bicubic
双三次
这是默认设置。
- lanczos
兰佐斯
- format
控制输出像素格式。默认情况下,或者如果未指定,则使用输入像素格式。
该滤镜不支持 YUV 和 RGB 像素格式之间的转换。
- passthrough
如果设置为 0,即使不需要转换,也会处理每个帧。此模式可用于将过滤器用作耗尽有限解码器帧池的下游帧消费者的缓冲区。
如果设置为 1,如果帧与所需的输出参数匹配,则帧将按原样传递。这是默认行为。
- param
算法特定的参数。
影响双三次算法的曲线。
- force_original_aspect_ratio
- force_divisible_by
与相同的比例过滤器选项的工作方式相同。
39.216.1 示例
- 将输入缩放至 720p,保持宽高比并确保输出为 yuv420p。
scale_cuda=-2:720:format=yuv420p
- 使用最近邻算法升级至 4K。
scale_cuda=4096:2160:interp_algo=nearest
- 不进行任何转换或缩放,而是将所有输入帧复制到新分配的帧中。这对于处理过滤器和编码链非常有用,否则会耗尽解码器帧池。
scale_cuda=passthrough=0
39.217 scale_npp
使用 NVIDIA 性能基元 (libnpp) 对 CUDA 视频帧执行缩放和/或像素格式转换。设置输出宽度和高度的工作方式与缩放过滤器相同。
接受以下附加选项:
- format
输出 CUDA 帧的像素格式。如果设置为字符串“same”(默认),则将保留输入格式。请注意,硬件帧尚不支持自动格式协商和转换
- interp_algo
用于调整大小的插值算法。以下之一:
- nn
最近的邻居。
- linear
- cubic
- cubic2p_bspline
2 参数三次 (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。
请注意,这与指定 -1 是不同的w 或者H,您仍然需要指定输出分辨率才能使该选项起作用。
- force_divisible_by
确保与以下命令一起使用时,输出尺寸(宽度和高度)均可被给定整数整除力原始纵横比。
-n
这与在中使用类似w和H选项。该选项遵循设置的值力原始纵横比,相应地增加或减少分辨率。视频的长宽比可能会略有修改。
如果您需要使视频适合或超过定义的分辨率,则此选项会很方便力原始纵横比但编码器对宽度或高度的可分性也有限制。
- eval
指定何时计算宽度和高度表达式。它接受以下值:
- ‘init’
仅在过滤器初始化期间或处理命令时对表达式求值一次。
- ‘frame’
评估每个传入帧的表达式。
的价值观w和H选项是包含以下常量的表达式:
- in_w
- in_h
输入的宽度和高度
- iw
- ih
它们与in_w和in_h相同。
- out_w
- out_h
输出(缩放)宽度和高度
- ow
- oh
这些与out_w和out_h相同
- a
与iw / ih相同
- sar
输入样本长宽比
- dar
输入显示宽高比。计算自
(iw / ih) * sar
.- n
输入帧的(连续)编号,从 0 开始。仅适用于
eval=frame
。- t
输入帧的呈现时间戳,以秒数表示。仅适用于
eval=frame
.- pos
输入流中帧的位置(字节偏移量),如果此信息不可用和/或无意义(例如在合成视频的情况下),则为 NaN。仅适用于
eval=frame
. 已弃用,请勿使用。
39.218 scale2ref
根据参考视频缩放(调整大小)输入视频。
请参阅比例过滤器以了解可用选项,scale2ref 支持相同的功能,但使用参考视频而不是主输入作为基础。scale2ref 还支持以下附加常量w和 H选项:
- main_w
- main_h
主输入视频的宽度和高度
- main_a
与main_w / main_h相同
- main_sar
主输入视频的样本宽高比
- main_dar, mdar
主输入视频的显示宽高比。计算自
(main_w / main_h) * main_sar
.- main_hsub
- main_vsub
主输入视频的水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub 为 1。
- main_n
主输入帧的(连续)编号,从 0 开始。仅适用于
eval=frame
。- main_t
主输入帧的呈现时间戳,以秒数表示。仅适用于
eval=frame
.- main_pos
主输入流中帧的位置(字节偏移量),如果此信息不可用和/或无意义(例如在合成视频的情况下),则为 NaN。仅适用于
eval=frame
.
39.218.1 示例
- 在叠加之前缩放字幕流 (b) 以匹配主视频 (a) 的大小
'scale2ref[b][a];[a][b]overlay'
- 将徽标缩放至视频高度的 1/10,同时保留其显示纵横比。
[logo-in][video-in]scale2ref=w=oh*mdar:h=ih/10[logo-out][video-out]
39.218.2 命令
该过滤器支持以下命令:
- width, w
- height, h
设置输出视频尺寸表达式。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
39.219 scale2ref_npp
使用 NVIDIA 性能基元 (libnpp) 根据参考视频缩放(调整大小)输入视频。
请参阅scale_npp过滤器了解可用选项,scale2ref_npp支持相同的功能,但使用参考视频而不是主输入作为基础。scale2ref_npp 还支持以下附加常量w和 H选项:
- main_w
- main_h
主输入视频的宽度和高度
- main_a
与main_w / main_h相同
- main_sar
主输入视频的样本宽高比
- main_dar, mdar
主输入视频的显示宽高比。计算自
(main_w / main_h) * main_sar
.- main_n
主输入帧的(连续)编号,从 0 开始。仅适用于
eval=frame
。- main_t
主输入帧的呈现时间戳,以秒数表示。仅适用于
eval=frame
.- main_pos
主输入流中帧的位置(字节偏移量),如果此信息不可用和/或无意义(例如在合成视频的情况下),则为 NaN。仅适用于
eval=frame
.
39.219.1 示例
- 在叠加之前缩放字幕流 (b) 以匹配主视频 (a) 的大小
'scale2ref_npp[b][a];[a][b]overlay_cuda'
- 将徽标缩放至视频高度的 1/10,同时保留其显示纵横比。
[logo-in][video-in]scale2ref_npp=w=oh*mdar:h=ih/10[logo-out][video-out]
39.220 scale_vt
使用 VTPixelTransferSession 缩放和转换颜色参数。
该过滤器接受以下选项:
- w
- h
设置输出视频尺寸表达式。默认值是输入尺寸。
- color_matrix
设置输出色彩空间矩阵。
- color_primaries
设置输出原色。
- color_transfer
设置输出传输特性。
39.221 scharr
将 scharr 运算符应用于输入视频流。
过滤器接受以下选项:
- planes
设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。
- scale
设置将与过滤结果相乘的值。
- delta
设置将添加到过滤结果的值。
39.221.1 命令
该过滤器支持以上所有选项作为命令。
39.222 scroll
以恒定速度水平和/或垂直滚动输入视频。
该过滤器接受以下选项:
- horizontal, h
设置水平滚动速度。默认值为 0。允许的范围为 -1 到 1。负值会更改滚动方向。
- vertical, v
设置垂直滚动速度。默认值为 0。允许的范围为 -1 到 1。负值会更改滚动方向。
- hpos
设置初始水平滚动位置。默认值为 0。允许的范围为 0 到 1。
- vpos
设置初始垂直滚动位置。默认值为 0。允许的范围为 0 到 1。
39.222.1 命令
该过滤器支持以下命令:
- horizontal, h
设置水平滚动速度。
- vertical, v
设置垂直滚动速度。
39.223 scdet
检测视频场景变化。
该过滤器使用帧之间的 mafd 设置帧元数据、场景分数,并将帧转发到下一个过滤器,以便他们可以使用这些元数据来检测场景更改或其他。
此外,当该过滤器检测到场景变化时,它会记录一条消息并设置帧元数据临界点。
lavfi.scd.mafd
元数据键是使用 mafd 为每一帧设置的。
lavfi.scd.score
元数据键设置有每帧的场景变化分数,以检测场景变化。
lavfi.scd.time
元数据键设置为当前过滤的帧时间,检测场景变化临界点。
该过滤器接受以下选项:
- threshold, t
将场景变化检测阈值设置为最大变化的百分比。良好的值在该
[8.0, 14.0]
范围内。范围为临界点是[0., 100.]
。默认值为
10.
。- sc_pass, s
设置标志以将场景更改帧传递到下一个过滤器。默认值是
0
如果您只想获取场景变化帧的快照,可以启用它。
39.224 selectivecolor
将青色、品红色、黄色和黑色 (CMYK) 调整为特定的颜色范围(例如“红色”、“黄色”、“绿色”、“青色”...)。调整范围由颜色的“纯度”(即它的饱和度)定义。
此滤镜类似于 Adobe Photoshop 的选择性颜色工具。
该过滤器接受以下选项:
- correction_method
选择色彩校正方法。
可用值为:
- ‘absolute’
指定的调整“按原样”应用(添加/减去原始像素分量值)。
- ‘relative’
指定的调整是相对于原始组件值的。
默认为
absolute
.- reds
红色像素的调整(红色分量最大的像素)
- yellows
黄色像素的调整(蓝色分量最小的像素)
- greens
绿色像素的调整(绿色分量最大的像素)
- cyans
青色像素的调整(红色分量最小的像素)
- blues
蓝色像素的调整(蓝色分量最大的像素)
- magentas
洋红色像素的调整(绿色分量最小的像素)
- whites
白色像素的调整(所有分量都大于 128 的像素)
- neutrals
除纯黑和纯白之外的所有像素的调整
- blacks
黑色像素的调整(所有分量都小于 128 的像素)
- psfile
.asv
指定要从中导入设置的 Photoshop 选择性颜色文件 ( )。
所有调整设置(红人,黄色, ...) 接受 [-1,1] 范围内最多 4 个空格分隔的浮点调整值,分别调整其范围内像素的青色、品红色、黄色和黑色量。
39.224.1 示例
- 在每个绿色区域中将青色增加 50%,将黄色减少 33%,在蓝色区域中将洋红色增加 27%:
selectivecolor=greens=.5 0 -.33 0:blues=0 .27
- 使用 Photoshop 选择性颜色预设:
selectivecolor=psfile=MySelectiveColorPresets/Misty.asv
39.225 separatefields
它separatefields
采用基于帧的视频输入,并将每个帧分割为其组件字段,生成一个新的半高剪辑,其帧速率和帧数都是两倍。
该过滤器使用帧中的场主导信息来决定每对场中的哪一个首先放置在输出中。如果出现错误,请在过滤器之前使用setfieldseparatefields
过滤器。
39.226 setdar, setsar
过滤setdar
器设置过滤器输出视频的显示宽高比。
这是通过根据以下等式更改指定的样本(也称为像素)长宽比来完成的:
DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * 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.226.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.227 setfield
输出视频帧的力场。
过滤setfield
器标记输出帧的交错类型字段。fieldorder
它不会更改输入帧,而只会设置相应的属性,这会影响后续过滤器(例如或)处理该帧的方式yadif
。
该过滤器接受以下选项:
- mode
可用值为:
- ‘auto’
保持相同的字段属性。
- ‘bff’
将帧标记为底场优先。
- ‘tff’
将帧标记为顶场优先。
- ‘prog’
将帧标记为渐进式。
39.228 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’
保持相同的颜色 trc 属性(默认)。
- ‘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’
39.229 sharpen_npp
使用 NVIDIA 性能基元 (libnpp) 通过边界控制执行图像锐化。
接受以下附加选项:
- border_type
广告框边框所使用的采样类型。以下之一:
- replicate
复制像素值。
39.230 shear
对输入视频应用剪切变换。
该过滤器支持以下选项:
- shx
X 方向的剪切因子。默认值为 0。允许的范围为 -2 到 2。
- shy
Y 方向的剪切因子。默认值为 0。允许的范围为 -2 到 2。
- fillcolor, c
设置用于填充未被转换视频覆盖的输出区域的颜色。有关此选项的一般语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。如果选择特殊值“none”,则不打印背景(例如,如果从不显示背景,则很有用)。
默认值为“黑色”。
- interp
设置插值类型。可以是
bilinear
或nearest
. 默认为bilinear
.
39.230.1 命令
该过滤器支持以上所有选项作为命令。
39.231 showinfo
显示包含每个输入视频帧的各种信息的行。输入视频未修改。
该过滤器支持以下选项:
- checksum
计算每个平面的校验和。默认启用。
所示行包含一系列键/值对,其形式为 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
输入帧的每个平面中像素的平均值,以“[mean0mean1mean2mean3 ] ”的形式表示 。
- stdev
输入帧的每个平面中像素值的标准偏差,以“[ stdev0 stdev1 stdev2 stdev3 ]”的形式表示。
39.232 showpalette
显示每帧的 256 种颜色调色板。此过滤器仅与pal8像素格式帧相关 。
它接受以下选项:
- s
设置用于表示一种调色板颜色条目的框的大小。默认值为
30
(对于30x30
像素框)。
39.233 shuffleframes
重新排序和/或复制和/或丢弃视频帧。
它接受以下参数:
- mapping
设置输入帧的目标索引。这是空格或“|” 将输入帧映射到输出帧的分隔索引列表。索引数还设置每个索引可以具有的最大值。'-1'索引有特殊含义,那就是丢帧。
第一帧的索引为 0。默认情况下保持输入不变。
39.233.1 示例
- 交换输入的每三帧的第二帧和第三帧:
ffmpeg -i INPUT -vf "shuffleframes=0 2 1" OUTPUT
- 交换输入的每 10 帧中的第 10 帧和第 1 帧:
ffmpeg -i INPUT -vf "shuffleframes=9 1 2 3 4 5 6 7 8 0" OUTPUT
39.234 shufflepixels
对视频帧中的像素重新排序。
该过滤器接受以下选项:
- direction, d
设置随机播放方向。可以是正向或反向。默认方向是向前。
- mode, m
设置随机播放模式。可以是水平、垂直或块模式。
- width, w
- height, h
设置随机播放块大小。在水平随机播放模式的情况下,仅使用尺寸的宽度部分,而在垂直随机播放模式的情况下,仅使用尺寸的高度部分。
- seed, s
设置与洗牌像素一起使用的随机种子。主要用于设置能够反向过滤过程以获得原始输入。例如,要反向正向洗牌,您需要使用相同的参数和完全相同的种子并将方向设置为反向。
39.235 shuffleplanes
重新排序和/或复制视频平面。
它接受以下参数:
- map0
用作第一个输出平面的输入平面的索引。
- map1
用作第二个输出平面的输入平面的索引。
- map2
用作第三输出平面的输入平面的索引。
- map3
用作第四个输出平面的输入平面的索引。
第一个平面的索引为 0。默认情况下保持输入不变。
39.235.1 示例
- 交换输入的第二个和第三个平面:
ffmpeg -i INPUT -vf shuffleplanes=0:2:1:3 OUTPUT
39.236 signalstats
评估各种视觉指标,帮助确定与模拟视频媒体数字化相关的问题。
默认情况下,过滤器将记录这些元数据值:
- 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
-
统计数据指定图像分析的附加形式。 出去输出视频并突出显示指定类型的像素。
两个选项都接受以下值:
- ‘tout’
识别时间异常值像素。时间异常值是与同一场的相邻像素不同的像素。时间异常值的示例包括视频丢失、磁头堵塞或磁带跟踪问题的结果。
- ‘vrep’
识别垂直线重复。垂直线重复包括帧内相似的像素行。在原生数字视频中,垂直线重复很常见,但这种模式在从模拟源数字化的视频中并不常见。当它出现在由模拟源数字化产生的视频中时,它可能表明来自压差补偿器的隐藏。
- ‘brng’
识别超出合法广播范围的像素。
- color, c
设置突出显示颜色出去选项。默认颜色为黄色。
39.236.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"
- 播放视频,并在帧上绘制 signalstats 元数据。
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.237 signature
计算 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.237.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.238 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 建议书。P.910 (07/22) 最新版本:https://www.itu.int/rec/T-REC-P.910-202207-I/en
它接受以下选项:
- print_summary
如果设置为 1,摘要统计信息将打印到控制台。默认 0。
39.238.1 示例
- 要计算 SI/TI 指标并打印摘要:
ffmpeg -i input.mp4 -vf siti=print_summary=1 -f null -
39.239 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] 范围内的浮点数,指定用于模糊图像的高斯滤波器的方差(如果较大则更慢)。默认值为亮度半径。
- chroma_strength, cs
设置色度强度。该选项值必须是配置模糊的 [-1.0,1.0] 范围内的浮点数。[0.0,1.0] 中包含的值将使图像模糊,而 [-1.0,0.0] 中包含的值将使图像锐化。默认值为亮度强度。
- chroma_threshold, ct
设置用作系数的色度阈值来确定像素是否应该模糊。选项值必须是 [-30,30] 范围内的整数。值 0 将过滤所有图像,包含在 [0,30] 中的值将过滤平坦区域,包含在 [-30,0] 中的值将过滤边缘。默认值为亮度阈值。
如果未显式设置色度选项,则设置相应的亮度值。
39.240 sobel
将索贝尔算子应用于输入视频流。
过滤器接受以下选项:
- planes
设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。
- scale
设置将与过滤结果相乘的值。
- delta
设置将添加到过滤结果的值。
39.240.1 命令
该过滤器支持以上所有选项作为命令。
39.241 spp
应用一个简单的后处理过滤器,以多次压缩和解压缩图像(或者 - 在质量水平6
- 所有)移动并平均结果。
该过滤器接受以下选项:
- quality
设定质量。该选项定义平均的级别数。它接受 0-6 范围内的整数。如果设置为
0
,过滤器将不起作用。的值6
意味着更高的质量。该值每增加一个,速度就会下降约 2 倍。默认值为3
。- qp
强制使用恒定的量化参数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。
- mode
设置阈值模式。可用模式有:
- ‘hard’
设置硬阈值(默认)。
- ‘soft’
设置软阈值(更好的去振铃效果,但可能更模糊)。
- use_bframe_qp
如果设置为 ,则启用 B 帧中的 QP 的使用
1
。使用此选项可能会导致闪烁,因为 B 帧通常具有较大的 QP。默认为0
(未启用)。
39.241.1 命令
该过滤器支持以下命令:
- quality, level
设定质量水平。该值
max
可用于设置当前的最大级别6
。
39.242 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.243 ssim
获取两个输入视频之间的 SSIM(结构相似度度量)。
该过滤器接受两个输入视频作为输入,第一个输入被视为“主要”源,并且原封不动地传递到输出。第二个输入用作计算 SSIM 的“参考”视频。
两个视频输入必须具有相同的分辨率和像素格式,此过滤器才能正常工作。它还假设两个输入具有相同数量的帧,并进行一一比较。
过滤器存储计算出的每帧的SSIM。
接受的参数的描述如下。
- stats_file, f
如果指定,过滤器将使用命名文件来保存每个单独帧的 SSIM。当文件名等于“-”时,数据将发送到标准输出。
如果选择stats_file ,则打印的文件包含一系列键/值对,其形式为key : value对于每个比较的帧对。
每个显示参数的说明如下:
- n
输入帧的序号,从1开始
- Y, U, V, R, G, B
后缀指定的组件的比较帧的 SSIM。
- All
整个帧的比较帧的 SSIM。
- dB
与上面相同,但以 dB 表示。
该过滤器还支持帧同步选项。
39.243.1 示例
- 例如:
movie=ref_movie.mpg, setpts=PTS-STARTPTS [main]; [main][ref] ssim="stats_file=stats.log" [out]
在此示例中,正在处理的输入文件与参考文件进行比较ref_movie.mpg。每个单独帧的SSIM存储在统计日志。
- 同时使用 psnr 和 ssim 的另一个示例:
ffmpeg -i main.mpg -i ref.mpg -lavfi "ssim;[0:v][1:v]psnr" -f null -
- 另一个使用不同容器的示例:
ffmpeg -i main.mpg -i ref.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]ssim" -f null -
39.244 stereo3d
在不同的立体图像格式之间进行转换。
过滤器接受以下选项:
- in
设置输入的立体图像格式。
输入图像格式的可用值为:
- ‘sbsl’
并排平行(左眼向左,右眼向右)
- ‘sbsr’
并排斗眼(右眼向左,左眼向右)
- ‘sbs2l’
并排平行,半宽分辨率(左眼向左,右眼向右)
- ‘sbs2r’
并排十字眼,半宽分辨率(左眼右眼,右眼左眼)
- ‘abl’
- ‘tbl’
上-下(左眼在上,右眼在下)
- ‘abr’
- ‘tbr’
上-下(右眼在上,左眼在下)
- ‘ab2l’
- ‘tb2l’
半高分辨率的上-下(左眼在上,右眼在下)
- ‘ab2r’
- ‘tb2r’
半高分辨率的上下(右眼在上,左眼在下)
- ‘al’
交替帧(左眼第一,右眼第二)
- ‘ar’
交替帧(右眼第一,左眼第二)
- ‘irl’
交错行(左眼从顶行开始,右眼从下一行开始)
- ‘irr’
交错行(右眼从顶行开始,左眼从下一行开始)
- ‘icl’
交错列,左眼优先
- ‘icr’
交错列,右眼优先
默认值为 'sbsl'。
- out
设置输出的立体图像格式。
- ‘sbsl’
并排平行(左眼向左,右眼向右)
- ‘sbsr’
并排斗眼(右眼向左,左眼向右)
- ‘sbs2l’
并排平行,半宽分辨率(左眼向左,右眼向右)
- ‘sbs2r’
并排十字眼,半宽分辨率(左眼右眼,右眼左眼)
- ‘abl’
- ‘tbl’
上-下(左眼在上,右眼在下)
- ‘abr’
- ‘tbr’
上-下(右眼在上,左眼在下)
- ‘ab2l’
- ‘tb2l’
半高分辨率的上-下(左眼在上,右眼在下)
- ‘ab2r’
- ‘tb2r’
半高分辨率的上下(右眼在上,左眼在下)
- ‘al’
交替帧(左眼第一,右眼第二)
- ‘ar’
交替帧(右眼第一,左眼第二)
- ‘irl’
交错行(左眼从顶行开始,右眼从下一行开始)
- ‘irr’
交错行(右眼从顶行开始,左眼从下一行开始)
- ‘arbg’
立体红/蓝灰色(左眼红色滤光片,右眼蓝色滤光片)
- ‘argg’
立体红/绿灰色(左眼红色滤光片,右眼绿色滤光片)
- ‘arcg’
立体红/青灰色(左眼上有红色滤光片,右眼上有青色滤光片)
- ‘arch’
立体红/青色半色(左眼上有红色滤光片,右眼上有青色滤光片)
- ‘arcc’
立体红/青色(左眼上有红色滤镜,右眼上有青色滤镜)
- ‘arcd’
使用 Dubois 最小二乘投影优化浮雕红/青色(左眼上的红色滤光片,右眼上的青色滤光片)
- ‘agmg’
浮雕绿色/洋红色灰色(左眼上有绿色滤光片,右眼上有洋红色滤光片)
- ‘agmh’
浮雕绿色/洋红色半色(左眼上有绿色滤光片,右眼上有洋红色滤光片)
- ‘agmc’
浮雕绿色/洋红色(左眼上有绿色滤光片,右眼上有洋红色滤光片)
- ‘agmd’
使用 Dubois 的最小二乘投影优化浮雕绿色/洋红色颜色(左眼上的绿色滤光片,右眼上的洋红色滤光片)
- ‘aybg’
浮雕黄色/蓝灰色(左眼上有黄色滤光片,右眼上有蓝色滤光片)
- ‘aybh’
浮雕黄/蓝半色(左眼为黄色滤光片,右眼为蓝色滤光片)
- ‘aybc’
浮雕黄色/蓝色(左眼上有黄色滤光片,右眼上有蓝色滤光片)
- ‘aybd’
使用 Dubois 最小二乘投影优化浮雕黄色/蓝色(左眼上的黄色滤光片,右眼上的蓝色滤光片)
- ‘ml’
单声道输出(仅限左眼)
- ‘mr’
单声道输出(仅右眼)
- ‘chl’
棋盘格,左眼优先
- ‘chr’
棋盘格,右眼优先
- ‘icl’
交错列,左眼优先
- ‘icr’
交错列,右眼优先
- ‘hdmi’
HDMI帧包
默认值为 '弧线'。
39.244.1 示例
- 将输入视频从并排并行转换为浮雕黄色/蓝色杜布瓦:
stereo3d=sbsl:aybd
- 将输入视频从上到下(左眼在上,右眼在下)转换为并排十字眼。
stereo3d=abl:sbsr
39.245 streamselect, astreamselect
选择视频或音频流。
该过滤器接受以下选项:
- inputs
设置输入数量。默认值为 2。
- map
设置输入索引以重新映射到输出。
39.245.1 命令
andstreamselect
过滤astreamselect
器支持以下命令:
- map
设置输入索引以重新映射到输出。
39.245.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.246 subtitles
使用 libass 库在输入视频上绘制字幕。
要启用此过滤器的编译,您需要使用
--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),并且libass 必须是使用 libunibreak 构建的。
除本机 ASS 外,该选项默认启用。
如果未指定第一个键,则假定第一个值指定文件名。
例如,渲染文件子.srt在输入视频之上,使用以下命令:
subtitles=sub.srt
这相当于:
subtitles=filename=sub.srt
从文件渲染默认字幕流视频.mkv, 使用:
subtitles=video.mkv
要从该文件渲染第二个字幕流,请使用:
subtitles=video.mkv:si=1
使字幕流来自子.srt呈现 80% 透明蓝色
DejaVu Serif
,使用:
subtitles=sub.srt:force_style='Fontname=DejaVu Serif,PrimaryColour=&HCCFF0000'
39.247 super2xsai
使用 Super2xSaI(缩放和插值)像素艺术缩放算法将输入缩放 2 倍并平滑。
对于放大像素艺术图像而不降低清晰度很有用。
39.248 swaprect
交换视频中的两个矩形对象。
该过滤器接受以下选项:
- w
设置对象宽度。
- h
设置对象高度。
- x1
设置第一个矩形 x 坐标。
- y1
设置第一个矩形 y 坐标。
- x2
设置第二个矩形 x 坐标。
- y2
设置第二个矩形 y 坐标。
每帧所有表达式都会计算一次。
所有选项都是包含以下常量的表达式:
- w
- h
输入的宽度和高度。
- a
与w / h相同
- sar
输入样本长宽比
- dar
输入显示宽高比,等于 ( w / h ) * sar
- n
输入帧的编号,从0开始。
- t
以秒表示的时间戳。如果输入时间戳未知,则为 NAN。
- pos
输入帧在文件中的位置,如果未知则为 NAN;已弃用,请勿使用
39.248.1 命令
该过滤器支持以上所有选项作为命令。
39.249 swapuv
交换 U 和 V 平面。
39.250 tblend
混合连续的视频帧。
参见混合
39.251 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.252 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.253 threshold
对视频流应用阈值效应。
该滤波器需要四个视频流来执行阈值处理。第一个流是我们正在过滤的流。第二个流保存阈值,第三个流保存最小值,最后第四个流保存最大值。
过滤器接受以下选项:
- planes
设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。
例如,如果第一流像素的分量值小于第二阈值流的像素分量的阈值,则将选取第三流值,否则将选取第四流像素分量值。
使用颜色源过滤器可以执行各种类型的阈值处理:
39.253.1 命令
该过滤器支持所有选项作为命令。
39.253.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.254 thumbnail
在给定的连续帧序列中选择最具代表性的帧。
该过滤器接受以下选项:
- n
设置要分析的帧批量大小;在一组n帧中,过滤器将选择其中一个,然后处理下一批n帧,直到结束。默认为
100
.- log
设置日志级别以显示选取的帧统计信息。默认为
info
.
由于过滤器跟踪整个帧序列,较大的n 值将导致较高的内存使用量,因此不建议使用较高的值。
39.254.1 示例
- 每50帧提取一张图片:
thumbnail=50
- 使用以下命令创建缩略图的完整示例
ffmpeg
:ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
39.255 tile
将几个连续的帧平铺在一起。
直到过滤器可以做相反的事情。
该过滤器接受以下选项:
- layout
在表格中设置网格大小
COLUMNSxROWS
。范围最多为 UINT_MAX 个单元。默认为6x5
.- nb_frames
设置在给定区域中渲染的最大帧数。它必须小于或等于w x h。默认值为
0
,表示将使用所有区域。- margin
设置外边框边距(以像素为单位)。范围是 0 到 1024。默认值为
0
。- padding
设置内边框粗细(即帧之间的像素数)。有关更高级的填充选项(例如具有不同的边缘值),请参阅填充视频过滤器。范围是 0 到 1024。默认值为
0
。- color
指定未使用区域的颜色。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。颜色的默认值为“黑色”。
- overlap
设置将多个连续帧平铺在一起时要重叠的帧数。该值必须介于
0
和nb_frames - 1之间。默认为0
.- init_padding
在显示第一个输出帧之前,将帧数设置为最初为空。这控制获得第一个输出帧的时间。该值必须介于
0
和nb_frames - 1之间。默认为0
.
39.255.1 示例
- 生成所有关键帧的 8x8 PNG 图块(-skip_frame nokey)在电影中:
ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
这-垂直同步0有必要防止
ffmpeg
重复每个输出帧以适应最初检测到的帧速率。 - 使用混合平面和命名选项
5
在帧区域中显示图片3x2
,7
帧之间有像素,初始边距像素:2
tile=3x2:nb_frames=5:padding=7:margin=2
39.256 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
绕过已经隔行扫描的帧,仅调整帧速率。
只能启用垂直低通滤波和绕过已经隔行扫描的帧模式 interleave_top和interleave_bottom。
39.257 tmedian
从几个连续的输入视频帧中选取中值像素。
该过滤器接受以下选项:
- radius
设置中值滤波器的半径。默认值为 1。允许的范围为 1 到 127。
- planes
设置要过滤的平面。默认值为
15
,处理所有平面。- percentile
设置中位数百分位数。默认值为
0.5
。默认值0.5
将始终选择中值,而0
将选择最小值和1
最大值。
39.257.1 命令
该过滤器支持所有上述选项作为命令,不包括选项radius
。
39.258 tmidequalizer
应用临时中途视频均衡效果。
Midway 视频均衡调整视频帧序列以具有相同的直方图,同时尽可能保持其动态。它对于匹配视频帧序列的曝光等很有用。
该过滤器接受以下选项:
- radius
设置过滤半径。默认为
5
. 允许的范围是 1 到 127。- sigma
设置过滤西格玛。默认为
0.5
. 这控制过滤的强度。将此选项设置为 0 实际上不会执行任何操作。- planes
设置要处理的平面。默认值为
15
,即所有可用平面。
39.259 tmix
混合连续的视频帧。
下面是接受的选项的描述。
- frames
要混合的连续帧的数量。如果未指定,则默认为 3。
- weights
指定每个输入视频帧的权重。每个权重均由空格分隔。如果权重数量小于帧数,则最后指定的权重将用于所有剩余的未设置权重。
- scale
指定比例,如果设置了,它将乘以每个权重的总和乘以像素值,得到最终的目标像素值。默认情况下,比例自动缩放为权重之和。
- planes
设置要过滤的平面。默认为全部。允许的范围是 0 到 15。
39.259.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.259.2 命令
该过滤器支持以下命令:
- weights
- scale
- planes
语法与同名选项相同。
39.260 tonemap
来自不同动态范围的色调图颜色。
该过滤器需要单精度浮点数据,因为它需要对超出范围的值进行操作(并且可以输出)。需要 另一个过滤器(例如 zscale )将结果帧转换为可用格式。
实现的色调映射算法仅适用于线性光,因此输入数据应事先线性化(并可能正确标记)。
ffmpeg -i INPUT -vf zscale=transfer=linear,tonemap=clip,zscale=transfer=bt709,format=yuv420p OUTPUT
39.260.1 选项
该过滤器接受以下选项。
- tonemap
设置要使用的色调映射算法。
可能的值为:
- none
不应用任何色调贴图,仅对过亮像素进行去饱和处理。
- clip
硬剪辑任何超出范围的值。使用它可以实现范围内值的完美色彩精度,同时扭曲超出范围的值。
- linear
将整个参考色域拉伸至显示的线性倍数。
- gamma
拟合色调曲线之间的对数传递。
- reinhard
通过简单的曲线和非线性对比度来保持整体图像亮度,这会导致细节扁平化并降低颜色精度。
- hable
比莱因哈德更好地保留黑暗和明亮的细节,但代价是稍微使所有东西变暗。当保留细节比颜色和亮度精度更重要时使用它。
- 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.261 tpad
暂时填充视频帧。
该过滤器接受以下选项:
- start
指定输入视频流之前的延迟帧数。默认值为 0。
- stop
指定输入视频流后的填充帧数。设置为 -1 以无限期填充。默认值为 0。
- start_mode
设置添加到流开头的帧类型。可以是添加或克隆。随着添加纯色框架的添加。克隆帧是第一帧的克隆。默认是添加。
- stop_mode
设置添加到流末尾的帧类型。可以是添加或克隆。随着添加纯色框架的添加。克隆帧是最后一帧的克隆。默认是添加。
- start_duration, stop_duration
指定启动/停止延迟的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。这些选项覆盖start和stop。默认值为 0。
- color
指定填充区域的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。
颜色的默认值为“黑色”。
39.262 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’
保留纵向几何形状(当height >= width时)。
- ‘landscape’
保留景观几何形状(当width >= height时)。
默认值为
none
。
例如,顺时针旋转 90 度并保留纵向布局:
transpose=dir=1:passthrough=portrait
上面的命令也可以指定为:
transpose=1:portrait
39.263 transpose_npp
在输入视频中调换行和列,并可选择翻转它。有关更深入的示例,请参阅转置视频过滤器,它共享大部分相同的选项。
它接受以下参数:
- dir
指定转置方向。
可以采用以下值:
- ‘cclock_flip’
逆时针旋转90度并垂直翻转。(默认)
- ‘clock’
顺时针旋转90度。
- ‘cclock’
逆时针旋转90度。
- ‘clock_flip’
顺时针旋转90度并垂直翻转。
- passthrough
如果输入几何图形与指定值指定的几何图形匹配,则不应用转置。它接受以下值:
- ‘none’
始终应用转置。(默认)
- ‘portrait’
保留纵向几何形状(当height >= width时)。
- ‘landscape’
保留景观几何形状(当width >= height时)。
39.264 trim
修剪输入,使输出包含输入的一个连续子部分。
它接受以下参数:
- start
指定保留部分的开始时间,即具有时间戳开始的帧将是输出中的第一帧。
- end
指定将被丢弃的第一帧的时间,即紧邻时间戳结束的帧之前的帧将是输出中的最后一帧。
- start_pts
这与start相同,只不过此选项以时基单位而不是秒设置开始时间戳。
- end_pts
这与end相同,只不过此选项以时基单位而不是秒设置结束时间戳。
- duration
输出的最大持续时间(以秒为单位)。
- start_frame
应传递到输出的第一帧的编号。
- end_frame
应丢弃的第一帧的编号。
开始,结尾, 和期间表示为持续时间规格;请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。
请注意,前两组开始/结束选项和期间 选项查看帧时间戳,而 _frame 变体只是对通过过滤器的帧进行计数。另请注意,此过滤器不会修改时间戳。如果您希望输出时间戳从零开始,请在修剪过滤器之后插入 setpts 过滤器。
如果设置了多个开始或结束选项,则此过滤器会尝试贪婪并保留至少与指定约束之一匹配的所有帧。要仅保留一次匹配所有约束的部分,请链接多个修剪过滤器。
默认设置是保留所有输入。因此可以仅设置最终值以保留指定时间之前的所有内容。
例子:
- 删除除第二分钟输入之外的所有内容:
ffmpeg -i INPUT -vf trim=60:120
- 只保留第一秒:
ffmpeg -i INPUT -vf trim=duration=1
39.265 unpremultiply
使用第二个流的第一个平面作为 Alpha 将 Alpha 预乘效果应用于输入视频流。
两个流必须具有相同的尺寸和相同的像素格式。
过滤器接受以下选项:
- planes
设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。
如果格式有 1 或 2 个分量,则亮度为位 0。如果格式有 3 或 4 个分量:对于 RGB 格式,位 0 为绿色,位 1 为蓝色,位 2 为红色;对于 RGB 格式,位 0 为绿色,位 1 为蓝色,位 2 为红色;对于 YUV 格式,位 0 是亮度,位 1 是色度-U,位 2 是色度-V。如果存在,Alpha 通道始终是最后一位。
- inplace
不需要第二个输入进行处理,而是使用输入流中的 alpha 平面。
39.266 unsharp
锐化或模糊输入视频。
它接受以下参数:
- 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.266.1 示例
- 应用强亮度锐化效果:
unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
- 对亮度和色度参数应用强烈模糊:
unsharp=7:7:-2:7:7:-2
39.267 untile
将由平铺图像组成的视频分解为单独的图像。
输出视频的帧速率是输入视频的帧速率乘以图块数量。
该过滤器接受以下选项:
- layout
设置网格大小(即行数和列数)。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。
39.267.1 示例
- 从由 25 个垂直堆叠的帧组成的静态图像文件生成 1 秒的视频,就像模拟胶片卷轴一样:
ffmpeg -r 1 -i image.jpg -vf untile=1x25 movie.mkv
39.268 uspp
应用超慢/简单的后处理过滤器,以多次压缩和解压缩图像(或者 - 在质量水平8
- 所有)移动并平均结果。
这与 spp 行为的不同之处在于,uspp 实际上使用 libavcodec Snow 对每种情况进行编码和解码,而 spp 使用类似于 MJPEG 的简化帧内 8x8 DCT。
此过滤器仅在 ffmpeg 4.4 或更早版本中可用。
该过滤器接受以下选项:
- quality
设定质量。该选项定义平均的级别数。它接受 0-8 范围内的整数。如果设置为
0
,过滤器将不起作用。的值8
意味着更高的质量。该值每增加一个,速度就会下降约 2 倍。默认值为3
。- qp
强制使用恒定的量化参数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。
- codec
使用指定的编解码器而不是雪。
39.269 v360
在各种格式之间转换 360 度视频。
该过滤器接受以下选项:
- input
- output
设置输入/输出视频的格式。
可用格式:
- ‘e’
- ‘equirect’
等距矩形投影。
- ‘c3x2’
- ‘c6x1’
- ‘c1x6’
具有 3x2/6x1/1x6 布局的立方体贴图。
格式特定选项:
- in_pad
- out_pad
设置输入/输出立方体贴图的填充比例。数值以小数表示。
示例值:
- ‘0’
无填充。
- ‘0.01’
脸部的 1% 是填充物。例如,分辨率为 1920x1280 时,面部尺寸为 640x640,每边填充为 3 个像素。(640 * 0.01 = 6 像素)
默认值为'0'。最大值为'0.1'。
- fin_pad
- fout_pad
为输入/输出立方体贴图设置固定填充。值以像素为单位。
默认值为'0'。如果大于零,它将覆盖其他填充选项。
- in_forder
- out_forder
设置输入/输出立方体贴图的面顺序。为每个位置选择一个方向。
方向指定:
- ‘r’
正确的
- ‘l’
左边
- ‘u’
向上
- ‘d’
向下
- ‘f’
向前
- ‘b’
后退
默认值为'鲁德FB'。
- in_frot
- out_frot
设置输入/输出立方体贴图的面旋转。为每个位置选择一个角度。
角度的指定:
- ‘0’
顺时针0度
- ‘1’
顺时针90度
- ‘2’
顺时针180度
- ‘3’
顺时针270度
默认值为'000000'。
- ‘eac’
等角立方体贴图。
- ‘flat’
- ‘gnomonic’
- ‘rectilinear’
常规视频。
格式特定选项:
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角线视野。以度为单位的值。
如果设置了对角视野,它将覆盖水平和垂直视野。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角线视野。以度为单位的值。
如果设置了对角视野,它将覆盖水平和垂直视野。
- ‘dfisheye’
双鱼眼。
格式特定选项:
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角线视野。以度为单位的值。
如果设置了对角视野,它将覆盖水平和垂直视野。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角线视野。以度为单位的值。
如果设置了对角视野,它将覆盖水平和垂直视野。
- ‘barrel’
- ‘fb’
- ‘barrelsplit’
Facebook 的 360 度格式。
- ‘sg’
立体格式。
格式特定选项:
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角线视野。以度为单位的值。
如果设置了对角视野,它将覆盖水平和垂直视野。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角线视野。以度为单位的值。
如果设置了对角视野,它将覆盖水平和垂直视野。
- ‘mercator’
墨卡托格式。
- ‘ball’
球型,向后产生明显的变形。
- ‘hammer’
Hammer-Aitoff 地图投影格式。
- ‘sinusoidal’
正弦地图投影格式。
- ‘fisheye’
鱼眼投影。
格式特定选项:
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角线视野。以度为单位的值。
如果设置了对角视野,它将覆盖水平和垂直视野。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角线视野。以度为单位的值。
如果设置了对角视野,它将覆盖水平和垂直视野。
- ‘pannini’
潘尼尼投影。
格式特定选项:
- h_fov
设置输出 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’
拉格朗日9插值。
- ‘cube’
- ‘cubic’
双三次插值。
- ‘lanc’
- ‘lanczos’
兰佐斯插值。
- ‘sp16’
- ‘spline16’
Spline16 插值。
- ‘gauss’
- ‘gaussian’
高斯插值。
- ‘mitchell’
米切尔插值法。
默认值为'线'。
- 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.269.1 示例
- 使用双三次插值将等距柱状视频转换为具有 3x2 布局和 1% 填充的立方体贴图:
ffmpeg -i input.mkv -vf v360=e:c3x2:cubic:out_pad=0.01 output.mkv
- 提取等角立方体贴图的后视图:
ffmpeg -i input.mkv -vf v360=eac:flat:yaw=180 output.mkv
- 将并排立体格式的转置和水平翻转等角立方体贴图转换为等矩形上下立体格式:
v360=eac:equirect:in_stereo=sbs:in_trans=1:ih_flip=1:out_stereo=tb
39.269.2 命令
该过滤器支持上述选项的子集作为命令。
39.270 vaguedenoiser
应用基于小波的降噪器。
它使用 Cohen-Daubechies-Feauveau 9/7 将视频输入中的每一帧变换到小波域中。然后它对获得的系数应用一些过滤。之后它进行逆小波变换。由于小波特性,它应该提供良好的平滑结果,并减少噪声,而不会模糊图片特征。
该过滤器接受以下选项:
- threshold
过滤强度。越高,视频的过滤程度就越高。在视频看起来过度过滤之前,硬阈值可以使用比软阈值更高的阈值。默认值为 2。
- method
过滤器将使用的过滤方法。
它接受以下值:
- ‘hard’
所有低于阈值的值都将归零。
- ‘soft’
所有低于阈值的值都将归零。上述所有值都将减少阈值。
- ‘garrote’
缩放或取消系数 - 介于(更多)软阈值和(更少)硬阈值之间。
默认为绞刑。
- nsteps
小波分解图像的次数。图片的分解不能超出特定点(通常,640x480 帧为 8 - 即 2^9 = 512 > 480)。有效值为 1 到 32 之间的整数。默认值为 6。
- percent
部分完全去噪(有限系数缩小),从0到100。默认值为85。
- planes
要处理的平面列表。默认情况下,所有平面都会被处理。
- type
过滤器将使用的阈值类型。
它接受以下值:
- ‘universal’
所有分解使用的阈值相同。
- ‘bayes’
使用的阈值还取决于每个分解系数。
默认是通用的。
39.271 varblur
通过使用第二个视频流设置模糊半径来应用可变模糊滤镜。第二个流必须具有相同的尺寸。
该过滤器接受以下选项:
- min_r
设置最小允许半径。允许的范围是 0 到 254。默认值为 0。
- max_r
设置最大允许半径。允许的范围是 1 到 255。默认值为 8。
- planes
设置要处理的平面。默认情况下,全部使用。
该varblur
过滤器还支持帧同步选项。
39.271.1 命令
该过滤器支持以上所有选项作为命令。
39.272 vectorscope
在二维图中显示 2 个颜色分量值(称为矢量示波器)。
该过滤器接受以下选项:
- mode, m
设置矢量示波器模式。
它接受以下值:
- ‘gray’
- ‘tint’
灰度值显示在图形上,亮度越高意味着图形中位置上具有相同分量颜色值的像素越多。这是默认模式。
- ‘color’
灰度值显示在图表上。
x
视频帧中不存在的周围像素值以由选项和设置的 2 个颜色分量的渐变绘制y
。第三个颜色分量是静态的。- ‘color2’
视频帧中存在的实际颜色分量值显示在图表上。
- ‘color3’
与 color2 类似,但相同值的频率较高,
x
并且y
在图表上会增加另一个颜色分量的值,即x
和的默认值的亮度y
。- ‘color4’
视频帧中存在的实际颜色显示在图表上。如果两种不同的颜色映射到图表上的相同位置,则选择图表中不存在的组件值较高的颜色。
- ‘color5’
灰度值显示在图表上。与从径向渐变中选取的第三个颜色分量类似,
color
但具有从径向渐变中选取的第三个颜色分量。
- x
设置 X 轴上表示的颜色分量。默认为
1
.- y
设置 Y 轴上表示的颜色分量。默认为
2
.- intensity, i
设置强度,由模式使用:灰色、颜色、颜色3和颜色5,用于增加代表图中(X,Y)位置频率的颜色分量的亮度。
- envelope, e
- ‘none’
没有信封,这是默认的。
- ‘instant’
即时包络,即使是最暗的单个像素也会清晰突出。
- ‘peak’
保存图表中随时间变化的最大值和最小值。这样,您仍然可以发现超出范围的值,而无需不断查看矢量示波器。
- ‘peak+instant’
峰值和瞬时包络结合在一起。
- graticule, g
设置绘制何种类型的经纬网。
- ‘none’
- ‘green’
- ‘color’
- ‘invert’
- opacity, o
设置网格不透明度。
- flags, f
设置标线标志。
- ‘white’
绘制白点的标线。
- ‘black’
绘制黑点的刻度。
- ‘name’
绘制色点简称。
- bgopacity, b
设置背景不透明度。
- lthreshold, l
为未在 X 或 Y 轴上表示的颜色分量设置低阈值。低于该值的值将被忽略。默认值为 0。请注意,该值乘以一个像素组件可以具有的实际最大可能值。因此,对于 8 位输入和 0.1 的低阈值,实际阈值是 0.1 * 255 = 25。
- hthreshold, h
为未在 X 或 Y 轴上表示的颜色分量设置高阈值。高于此值的值将被忽略。默认值为 1。请注意,该值乘以一个像素组件可以具有的实际最大可能值。因此,对于 8 位输入和高阈值 0.9,实际阈值是 0.9 * 255 = 230。
- colorspace, c
设置绘制经纬网时使用哪种颜色空间。
- ‘auto’
- ‘601’
- ‘709’
默认为自动。
- tint0, t0
- tint1, t1
设置灰色/色调矢量模式的色调。默认情况下,两个选项均为零。这意味着没有色调,输出将保持灰色。
39.273 vidstabdetect
分析视频稳定/防抖。执行第 1 步(共 2 步),请参阅 vidstabtransform了解第 2 步。
此过滤器生成一个文件,其中包含有关后续帧的相对平移和旋转变换信息,然后由vidstabtransform过滤器使用。
要启用此过滤器的编译,您需要使用
--enable-libvidstab
.
该过滤器接受以下选项:
- result
设置用于写入转换信息的文件的路径。默认值为转换.trf。
- shakiness
设置视频的抖动程度和相机的速度。它接受 1-10 范围内的整数,值 1 表示抖动较小,值 10 表示抖动较大。默认值为 5。
- accuracy
设置检测过程的准确性。它必须是 1-15 范围内的值。值为 1 表示精度较低,值为 15 表示精度较高。默认值为 15。
- stepsize
设置搜索过程的步长。以 1 像素分辨率扫描最小值周围的区域。默认值为 6。
- mincontrast
设置最小对比度。低于该值,本地测量字段将被丢弃。必须是 0-1 范围内的浮点值。默认值为 0.3。
- tripod
设置三脚架模式的参考帧编号。
如果启用,帧的运动将与过滤流中的参考帧进行比较,由指定的数字标识。这个想法是补偿或多或少静态场景中的所有运动,并保持相机视图绝对静止。
如果设置为 0,则禁用。帧从1开始计数。
- show
在结果帧中显示字段和变换。它接受 0-2 范围内的整数。默认值为 0,这会禁用任何可视化。
- fileformat
要写入的转换数据文件的格式。可接受的值为
- ‘ascii’
人类可读的纯文本
- ‘binary’
二进制格式,比
ascii
. (默认)
39.273.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.274 vidstabtransform
视频稳定/防抖:第 2 阶段(共 2 阶段),请参阅vidstabDetect了解第 1 阶段。
读取包含每个帧的变换信息的文件并应用/补偿它们。与vidstabDetect 过滤器一起使用,可以对视频进行去抖动处理。另请参阅 http://public.hronopik.de/vid.stab。使用锐化滤镜也很重要,请参见下文。
要启用此过滤器的编译,您需要使用
--enable-libvidstab
.
39.274.1 选项
- input
设置用于读取转换的文件的路径。默认值为 转换.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
设置每帧最大缩放百分比(启用时 光学变焦设置为 2)。范围为 0 到 5,默认值为 0.25。
- interpol
指定插值类型。
可用值为:
- ‘no’
无插值
- ‘linear’
仅线性 水平
- ‘bilinear’
双向线性(默认)
- ‘bicubic’
两个方向的三次方(慢速)
- tripod
如果设置为 1,则启用虚拟三脚架模式,相当于
relative=0:smoothing=0
。默认值为 0。还可以使用vidstabdetect
tripod
的选项。- debug
如果设置为 1,则增加日志详细程度。此外,检测到的全局运动也会写入临时文件全局运动.trf。默认值为 0。
39.274.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.275 vflip
垂直翻转输入视频。
例如,要垂直翻转视频ffmpeg
:
ffmpeg -i in.avi -vf "vflip" out.avi
39.276 vfrdet
检测可变帧率视频。
该过滤器尝试检测输入是可变的还是恒定的帧速率。
最后,它将输出检测为具有可变增量点和具有恒定增量点的帧数。如果存在具有可变增量的帧,那么它还会显示遇到的最小、最大和平均增量。
39.277 vibrance
提高或改变饱和度。
该过滤器接受以下选项:
- intensity
如果为正值,则设置增强强度;如果为负值,则设置改变强度。默认值为 0。允许的范围为 -2 到 2。
- rbal
设置红色平衡。默认值为 1。允许的范围为 -10 到 10。
- gbal
设置绿色平衡。默认值为 1。允许的范围为 -10 到 10。
- bbal
设置蓝色平衡。默认值为 1。允许的范围为 -10 到 10。
- rlum
设置红色亮度系数。
- glum
设置绿色亮度系数。
- blum
设置蓝色亮度系数。
- alternate
如果
intensity
为负并且设置为 1,颜色将会改变,否则颜色的饱和度会降低,更趋向于灰色。
39.277.1 命令
该过滤器支持以上所有选项作为命令。
39.278 vif
获取两个输入视频之间的平均 VIF(视觉信息保真度)。
该过滤器采用两个输入视频。
两个输入视频必须具有相同的分辨率和像素格式,此过滤器才能正常工作。它还假设两个输入具有相同数量的帧,并进行一一比较。
获得的平均 VIF 分数通过日志系统打印。
过滤器存储计算出的每帧的 VIF 分数。
该过滤器还支持帧同步选项。
在下面的示例中,输入文件主.mpg正在处理的文件与参考文件进行比较参考.mpg。
ffmpeg -i main.mpg -i ref.mpg -lavfi vif -f null -
39.279 vignette
产生或逆转自然渐晕效果。
该过滤器接受以下选项:
- angle, a
将镜头角度表达式设置为弧度数。
该值被限制在
[0,PI/2]
范围内。默认值:
"PI/5"
- x0
- y0
设置中心坐标表达式。分别
"w/2"
并"h/2"
默认。- mode
设置前进/后退模式。
可用模式有:
- ‘forward’
距中心点的距离越大,图像变得越暗。
- ‘backward’
距中心点的距离越大,图像变得越亮。尽管没有自动检测来提取镜头,但这可用于反转晕影效果角度和其他设置(尚未)。它还可以用来创建燃烧效果。
默认值为 '向前'。
- eval
设置表达式的求值模式 (角度,x0,y0)。
它接受以下值:
- ‘init’
在过滤器初始化期间仅对表达式求值一次。
- ‘frame’
评估每个传入帧的表达式。这比'慢得多在里面' 模式,因为它需要重新计算所有缩放器,但它允许高级动态表达式。
默认值为 '在里面'。
- dither
设置抖动以减少圆形条纹效果。默认为
1
(启用)。- aspect
设置小插图方面。此设置允许调整晕影的形状。将此值设置为输入的 SAR 将根据视频的尺寸生成矩形渐晕。
默认为
1/1
.
39.279.1 表达式
这α,x0和y0表达式可以包含以下参数。
- w
- h
输入宽度和高度
- n
输入帧的编号,从0开始
- pts
过滤后的视频帧的 PTS(呈现时间戳)时间,以 TB为单位表示,如果未定义则为 NAN
- r
输入视频的帧率,如果输入帧率未知则为 NAN
- t
过滤后的视频帧的 PTS(呈现时间戳),以秒表示,如果未定义则为 NAN
- tb
输入视频的时基
39.279.2 示例
- 应用简单的强渐晕效果:
vignette=PI/4
- 制作闪烁的渐晕:
vignette='PI/4+random(1)*PI/50':eval=frame
39.280 vmafmotion
获取视频的平均 VMAF 运动得分。它是 VMAF 的组件指标之一。
获得的平均运动分数通过日志系统打印出来。
该过滤器接受以下选项:
- stats_file
如果指定,过滤器将使用指定的文件来保存每帧相对于前一帧的运动分数。当文件名等于“-”时,数据将发送到标准输出。
例子:
ffmpeg -i ref.mpg -vf vmafmotion -f null -
39.281 vstack
垂直堆叠输入视频。
所有流必须具有相同的像素格式和相同的宽度。
该过滤器接受以下选项:
- inputs
设置输入流的数量。默认值为 2。
- shortest
如果设置为 1,则在最短输入终止时强制输出终止。默认值为 0。
39.282 w3fdif
对输入视频进行去隔行处理(“w3fdif”代表“Weston 3 Field Deinterlacing Filter”)。
Weston 3 场去隔行滤波器基于 Martin Weston 为 BBC R&D 描述的流程,并基于 Jim Easterbrook 为 BBC R&D 编写的去隔行算法实现,使用 BBC R&D 计算的滤波器系数。
该过滤器使用帧中的场主导信息来决定将每对场中的哪一个场放在输出中的第一位。如果出现错误,请在过滤器之前使用setfieldw3fdif
过滤器。
有两组滤波器系数,所谓“简单”和“复杂”。使用哪一组滤波器系数可以通过传递可选参数来设置:
- filter
设置隔行滤波器系数。接受以下值之一:
- ‘simple’
简单的滤波器系数设置。
- ‘complex’
更复杂的滤波器系数集。
默认值为 '复杂的'。
- mode
采用的隔行扫描模式。它接受以下值之一:
- frame
每帧输出一帧。
- field
每个字段输出一帧。
默认值为
field
。- parity
针对输入隔行扫描视频假设的图像场奇偶校验。它接受以下值之一:
- tff
假设顶部字段是第一个。
- bff
假设底部字段是第一个。
- auto
启用字段奇偶校验的自动检测。
默认值为
auto
。如果隔行扫描未知或解码器不导出此信息,则将假定顶场优先。- deint
指定要取消隔行扫描的帧。接受以下值之一:
- ‘all’
对所有帧进行去隔行,
- ‘interlaced’
仅对标记为隔行的去隔行帧进行处理。
默认值为 '全部'。
39.282.1 命令
该过滤器支持与选项相同的命令。
39.283 waveform
视频波形监视器。
波形监视器绘制颜色分量强度。默认情况下仅亮度。波形的每一列对应于源视频中的一列像素。
它接受以下选项:
- 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’
设置样本宽高比以匹配视频的输入大小
默认为 '没有任何'。
- input
设置过滤器的输入格式以供选择。可 '全部',用于从所有可用格式中进行选择,或 '第一的',用于选择第一个可用格式。默认为 '第一的'。
39.284 weave, doubleweave
它weave
采用基于场的视频输入,并将每两个连续场连接成单帧,从而生成一个新的双高度剪辑,帧速率和帧数减半。
其doubleweave
工作原理与此相同weave
,但帧速率和帧数不会减半。
它接受以下选项:
- first_field
设置第一个字段。可用值为:
- ‘top, t’
将帧设置为顶场优先。
- ‘bottom, b’
将帧设置为底场优先。
39.284.1 示例
- 使用select和separatefields过滤器隔行扫描视频:
separatefields,select=eq(mod(n,4),0)+eq(mod(n,4),3),weave
39.285 xbr
应用专为像素艺术设计的 xBR 高品质放大滤镜。它遵循一组边缘检测规则,请参阅 https://forums.libretro.com/t/xbr-algorithm-tutorial/123。
它接受以下选项:
- n
设置缩放尺寸:
2
for2xBR
、3
for3xBR
和4
for4xBR
。默认为3
.
39.286 xcorrelate
在第一和第二输入视频流之间应用归一化互相关。
第二输入视频流尺寸必须低于第一输入视频流。
该过滤器接受以下选项:
- planes
设置要处理的平面。
- secondary
设置将从第二个输入视频流中处理哪些辅助视频帧,可以是first或all。默认为全部。
该xcorrelate
过滤器还支持帧同步选项。
39.287 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.287.1 示例
- 从一个输入视频到另一输入视频的交叉淡入淡出,淡入淡出过渡,过渡持续时间为 2 秒,偏移量为 5 秒:
ffmpeg -i first.mp4 -i second.mp4 -filter_complex xfade=transition=fade:duration=2:offset=5 output.mp4
39.288 xmedian
从多个输入视频中选取中值像素。
该过滤器接受以下选项:
- inputs
设置输入数量。默认值为 3。允许的范围为 3 到 255。如果输入数量为偶数,则结果将为两个中值之间的平均值。
- planes
设置要过滤的平面。默认值为
15
,处理所有平面。- percentile
设置中位数百分位数。默认值为
0.5
。默认值0.5
将始终选择中值,而0
将选择最小值和1
最大值。
39.288.1 命令
该过滤器支持所有上述选项作为命令,不包括选项inputs
。
39.289 xstack
将视频输入堆叠到自定义布局中。
所有流必须具有相同的像素格式。
该过滤器接受以下选项:
- inputs
设置输入流的数量。默认值为 2。
- layout
指定输入的布局。此选项需要用户明确设置所需的布局配置。这设置输出中每个视频输入的位置。每个输入由“|”分隔。第一个数字代表列,第二个数字代表行。数字从 0 开始,并用“_”分隔。(可选)可以使用 wX 和 hX,其中 X 是从中获取宽度或高度的视频输入。当用“+”分隔时可以使用多个值。在这种情况下,值会被加在一起。
请注意,如果输入的大小不同,则可能会出现间隙,因为并非所有输出视频帧都会被填充。同样,如果视频的位置没有为相邻视频的全帧留出足够的空间,则视频可能会相互重叠。
对于 2 个输入,设置默认布局
0_0|w0_0
(相当于 )。grid=2x1
在所有其他情况下,布局或网格必须由用户设置。一次可以指定grid
或之一。layout
指定两者都会导致错误。- grid
指定固定大小的输入网格。此选项用于创建输入流的固定大小网格。在表格中设置网格大小
COLUMNSxROWS
。必须有ROWS * COLUMNS
输入流,它们将被排列为具有ROWS
行和COLUMNS
列的网格。使用此选项时,行中的每个输入流必须具有相同的高度,并且所有行必须具有相同的宽度。如果
grid
设置,则inputs
选项将被忽略并隐式设置为ROWS * COLUMNS
。对于 2 个输入,设置默认网格
2x1
(相当于 )。layout=0_0|w0_0
在所有其他情况下,布局或网格必须由用户设置。一次可以指定grid
或之一。layout
指定两者都会导致错误。- shortest
如果设置为 1,则在最短输入终止时强制输出终止。默认值为 0。
- fill
如果设置为有效颜色,所有未使用的像素将用该颜色填充。默认情况下填充设置为无,因此它被禁用。
39.289.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.290 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.291 yadif_cuda
使用yadif算法对输入视频进行去隔行,但在 CUDA 中实现,以便它可以作为带有 nvdec 和/或 nvenc 的 GPU 加速管道的一部分。
它接受以下参数:
- mode
采用的隔行扫描模式。它接受以下值之一:
- 0, send_frame
每帧输出一帧。
- 1, send_field
每个字段输出一帧。
- 2, send_frame_nospatial
与 类似
send_frame
,但它跳过空间交错检查。- 3, send_field_nospatial
与 类似
send_field
,但它跳过空间交错检查。
默认值为
send_frame
。- parity
针对输入隔行扫描视频假设的图像场奇偶校验。它接受以下值之一:
- 0, tff
假设顶部字段是第一个。
- 1, bff
假设底部字段是第一个。
- -1, auto
启用字段奇偶校验的自动检测。
默认值为
auto
。如果隔行扫描未知或解码器不导出此信息,则将假定顶场优先。- deint
指定要取消隔行扫描的帧。接受以下值之一:
- 0, all
对所有帧进行去隔行处理。
- 1, interlaced
仅对标记为隔行的去隔行帧进行处理。
默认值为
all
。
39.292 yaepblur
应用模糊滤镜,同时保留边缘(“yaepblur”的意思是“另一个保留边缘的模糊滤镜”)。该算法在“JS Lee,使用本地统计数字图像增强和噪声过滤,IEEE Trans.Pattern Anal.Mach.Intell.PAMI-2,1980”中进行了描述。
它接受以下参数:
- radius, r
设置窗口半径。默认值为 3。
- planes, p
设置要过滤的平面。默认仅是第一个平面。
- sigma, s
设置模糊强度。默认值为 128。
39.292.1 命令
该过滤器支持与选项相同的命令。
39.293 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.293.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.294 zscale
使用 z.lib 库缩放(调整大小)输入视频:
https://github.com/sekrit-twc/zimg。要启用此过滤器的编译,您需要使用--enable-libzimg
.
zscale 过滤器通过更改输出样本宽高比,强制输出显示宽高比与输入相同。
如果输入图像格式与下一个过滤器请求的格式不同,则 zscale 过滤器会将输入转换为请求的格式。
39.294.1 选项
该过滤器接受以下选项。
- width, w
- height, h
设置输出视频尺寸表达式。默认值是输入尺寸。
如果宽度或w值为 0,则输入宽度用于输出。如果height或h值为 0,则输入高度将用于输出。
如果其中一个且只有一个值为 -n,且 n >= 1,则 zscale 过滤器将使用一个值来维持输入图像的纵横比,该纵横比是根据其他指定尺寸计算得出的。然而,之后它将确保计算出的尺寸可被 n 整除,并在必要时调整该值。
如果两个值都是 -n 并且 n >= 1,则行为将与前面详述的两个值都设置为 0 相同。
请参阅下面的维度表达式中可接受的常量列表。
- size, s
设置视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。
- dither, d
设置抖动类型。
可能的值为:
- none
- ordered
- random
- error_diffusion
默认为无。
- filter, f
设置调整大小过滤器类型。
可能的值为:
- point
- bilinear
- bicubic
- spline16
- spline36
- lanczos
默认为双线性。
- range, r
设置颜色范围。
可能的值为:
- input
- limited
- full
默认与输入相同。
- primaries, p
设置原色。
可能的值为:
- input
- 709
- unspecified
- 170m
- 240m
- 2020
默认与输入相同。
- transfer, t
设置传输特性。
可能的值为:
- input
- 709
- unspecified
- 601
- linear
- 2020_10
- 2020_12
- smpte2084
- iec61966-2-1
- arib-std-b67
默认与输入相同。
- matrix, m
设置色彩空间矩阵。
可能的值是:
- input
- 709
- unspecified
- 470bg
- 170m
- 2020_ncl
- 2020_cl
默认与输入相同。
- rangein, rin
设置输入颜色范围。
可能的值为:
- input
- limited
- full
默认与输入相同。
- primariesin, pin
设置输入原色。
可能的值为:
- input
- 709
- unspecified
- 170m
- 240m
- 2020
默认与输入相同。
- transferin, tin
设置输入传输特性。
可能的值为:
- input
- 709
- unspecified
- 601
- linear
- 2020_10
- 2020_12
默认与输入相同。
- matrixin, min
设置输入色彩空间矩阵。
可能的值是:
- input
- 709
- unspecified
- 470bg
- 170m
- 2020_ncl
- 2020_cl
- chromal, c
设置输出色度位置。
可能的值为:
- input
- left
- center
- topleft
- top
- bottomleft
- bottom
- chromalin, cin
设置输入色度位置。
可能的值为:
- input
- left
- center
- topleft
- top
- bottomleft
- bottom
- 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.294.2 命令
该过滤器支持以下命令:
- width, w
- height, h
设置输出视频尺寸表达式。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则将其保留为当前值。
40 个 OpenCL 视频过滤器
以下是当前可用的 OpenCL 视频过滤器的描述。
要启用这些过滤器的编译,您需要使用
--enable-opencl
.
运行 OpenCL 过滤器需要您初始化硬件设备并将该设备传递给任何过滤器图中的所有过滤器。
- -init_hw_device opencl[=name][:device[,key=value...]]
使用给定的设备参数 初始化一个名为name的opencl类型的新硬件设备。
- -filter_hw_device name
将名为name的硬件设备传递给任何过滤器图中的所有过滤器。
有关更多详细信息,请参阅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将上传到与软件框架具有相同布局的表面,因此可能需要在将输入转换为正确格式之前立即添加格式过滤器,并且hwdownload不支持输出上的所有格式 - 它可能有必要在图表中紧随其后 插入附加格式过滤器以获得支持格式的输出。
40.1 avgblur_opencl
应用平均模糊滤镜。
该过滤器接受以下选项:
- sizeX
设置水平半径大小。范围为
[1, 1024]
,默认值为1
。- planes
设置要过滤的平面。默认值为
0xf
,处理所有平面。- sizeY
设置垂直半径大小。范围为
[1, 1024]
,默认值为0
。如果为零,sizeX
则将使用该值。
40.1.1 示例
- 应用水平和垂直尺寸为 3 的平均模糊滤波器,将输出的每个像素设置为输入中以其为中心的 7x7 区域的平均值。对于图像边缘的像素,该区域不会超出图像边界,因此在计算中不使用超出范围的坐标。
-i INPUT -vf "hwupload, avgblur_opencl=3, hwdownload" OUTPUT
40.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
亮度和 alpha 平面以及min(cw,ch)/2
色度平面的表达式的值。默认值亮度半径是“2”。如果没有指定, 色度半径和阿尔法半径默认为设置的相应值亮度半径。
表达式可以包含以下常量:
- w
- h
输入宽度和高度(以像素为单位)。
- cw
- ch
输入色度图像的宽度和高度(以像素为单位)。
- hsub
- vsub
水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为2,vsub为1。
- luma_power, lp
- chroma_power, cp
- alpha_power, ap
指定将 boxblur 滤镜应用到相应平面的次数。
默认值亮度功率是2。如果没有指定, 色度功率和阿尔法功率默认为设置的相应值亮度功率。
值为 0 将禁用该效果。
40.2.1 示例
应用 boxblur 过滤器,将输出的每个像素分别设置为每个平面的 box-radiuses luma_radius、chroma_radius、alpha_radius的平均值。滤波器会将luma_power、chroma_power、alpha_power时间应用到相应的平面上。对于图像边缘的像素,半径不会超出图像边界,因此计算中不使用超出范围的坐标。
- 应用 boxblur 滤镜,将亮度、色度和 alpha 半径设置为 2,并将亮度、色度和 alpha 幂设置为 3。对于图像的每个平面,滤镜将运行 3 次,盒子半径设置为 2。
-i INPUT -vf "hwupload, boxblur_opencl=luma_radius=2:luma_power=3, hwdownload" OUTPUT -i INPUT -vf "hwupload, boxblur_opencl=2:3, hwdownload" OUTPUT
- 应用 boxblur 滤镜,将亮度半径设置为 2,将 luma_power 设置为 1,将 chroma_radius 设置为 4,将 chroma_power 设置为 5,将 alpha_radius 设置为 3,将 alpha_power 设置为 7。
对于亮度平面,2x2 的盒子半径将运行一次。
对于色度平面,4x4 盒子半径将运行 5 次。
对于 alpha 平面,3x3 的盒子半径将运行 7 次。
-i INPUT -vf "hwupload, boxblur_opencl=2:1:4:5:3:7, hwdownload" OUTPUT
40.3 colorkey_opencl
RGB 色彩空间颜色键控。
该过滤器接受以下选项:
- color
将替换为透明度的颜色。
- similarity
与主色的相似度百分比。
0.01 仅匹配确切的关键颜色,而 1.0 匹配所有内容。
- blend
混合百分比。
0.0 使像素完全透明或根本不透明。
值越高,像素就越透明,透明度越高,像素颜色与关键颜色越相似。
40.3.1 示例
- 通过一些轻微的混合使输入中的每个半绿色像素透明:
-i INPUT -vf "hwupload, colorkey_opencl=green:0.3:0.1, hwdownload" OUTPUT
40.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
。
40.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
40.5 erosion_opencl
对视频应用腐蚀效果。
此过滤器用局部 (3x3) 最小值替换像素。
它接受以下选项:
- threshold0
- threshold1
- threshold2
- threshold3
限制每个平面的最大变化。范围为
[0, 65535]
,默认值为65535
。如果0
,平面将保持不变。- coordinates
指定要引用的像素的标志。范围为
[0, 255]
,默认值为255
,即使用所有八个像素。以 为中心的局部 3x3 坐标区域的标志
x
:1 2 3
4×5
6 7 8
40.5.1 示例
- 应用腐蚀过滤器,阈值0设置为30,阈值1设置为40,阈值2设置为50,坐标设置为231,将输出的每个像素设置为像素之间的局部最小值:3x3的1、2、3、6、7、8输入中以其为中心的区域。如果输入像素与局部最小值之差大于对应平面的阈值,则输出像素将被设置为输入像素-对应平面的阈值。
-i INPUT -vf "hwupload, erosion_opencl=30:40:50:coordinates=231, hwdownload" OUTPUT
40.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
.
40.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
40.7 dilation_opencl
对视频应用膨胀效果。
此过滤器用局部 (3x3) 最大值替换像素。
它接受以下选项:
- threshold0
- threshold1
- threshold2
- threshold3
限制每个平面的最大变化。范围为
[0, 65535]
,默认值为65535
。如果0
,平面将保持不变。- coordinates
指定要引用的像素的标志。范围为
[0, 255]
,默认值为255
,即使用所有八个像素。以 为中心的局部 3x3 坐标区域的标志
x
:1 2 3
4×5
6 7 8
40.7.1 示例
- 应用膨胀过滤器,阈值0设置为30,阈值1设置为40,阈值2设置为50,坐标设置为231,将输出的每个像素设置为像素之间的局部最大值:3x3的1、2、3、6、7、8输入中以其为中心的区域。如果输入像素与局部最大值之差大于对应平面的阈值,则输出像素将被设置为输入像素+对应平面的阈值。
-i INPUT -vf "hwupload, dilation_opencl=30:40:50:coordinates=231, hwdownload" OUTPUT
40.8 nlmeans_opencl
通过 OpenCL 的非局部均值降噪滤波器,该滤波器接受与nlmeans相同的选项。
40.9 overlay_opencl
将一个视频叠加在另一个视频之上。
它需要两个输入并有一个输出。第一个输入是“主”视频,第二个输入覆盖在其上。该过滤器要求所有输入具有相同的内存布局。因此,可能需要进行格式转换。
该过滤器接受以下选项:
- x
设置叠加视频在主视频上的 x 坐标。默认值为
0
。- y
设置叠加视频在主视频上的 y 坐标。默认值为
0
。
40.9.1 示例
- 在输入视频的左上角叠加图像 LOGO。两个输入均为 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
40.10 pad_opencl
向输入图像添加填充,并将原始输入放置在提供的x、y坐标处。
它接受以下选项:
- width, w
- height, h
指定添加了填充的输出图像尺寸的表达式。如果宽度或高度的值为0,则相应的输入尺寸将用于输出。
宽度表达式可以引用高度表达式设置的值 ,反之亦然 。
宽度和高度的默认值为0。
- x
- y
指定将输入图像放置在填充区域内相对于输出图像的上/左边框的偏移量。
x表达式可以引用y表达式设置的值 ,反之亦然。
x和y的默认值为0。
如果x或y的计算结果为负数,它们将被更改,以便输入图像位于填充区域的中心。
- color
指定填充区域的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。
- aspect
填充到一个方面而不是分辨率。
width、height、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相同
40.11 prewitt_opencl
将 Prewitt 运算符 ( https://en.wikipedia.org/wiki/Prewitt_operator ) 应用到输入视频流。
过滤器接受以下选项:
- planes
设置要过滤的平面。默认值为
0xf
,处理所有平面。- scale
设置将与过滤结果相乘的值。范围为
[0.0, 65535]
,默认值为1.0
。- delta
设置将添加到过滤结果的值。范围为
[-65535, 65535]
,默认值为0.0
。
40.11.1 示例
- 应用 Prewitt 运算符,将比例设置为 2,将增量设置为 10。
-i INPUT -vf "hwupload, prewitt_opencl=scale=2:delta=10, hwdownload" OUTPUT
40.12 program_opencl
使用 OpenCL 程序过滤视频。
- source
OpenCL 程序源文件。
- kernel
程序中的内核名称。
- inputs
过滤器的输入数量。默认为 1。
- size, s
输出帧的大小。默认与第一个输入相同。
该program_opencl
过滤器还支持帧同步选项。
程序源文件必须包含具有给定名称的内核函数,该函数将为输出的每个平面运行一次。平面上的每次运行都会作为单独的 2D 全局 NDRange 排队,并为每个要生成的像素提供一个工作项。因此,每个工作项的全局 ID 偏移量是目标图像中像素的坐标。
内核函数需要采用以下参数:
- 目标图像,__write_only image2d_t。
该图像将成为输出;内核应该写所有的内容。
- 帧索引,unsigned int。
这是一个从零开始的计数器,每帧加一。
- 源图像,__read_only 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)); }
40.13 remap_opencl
使用第二个:Xmap 和第三个:Ymap 输入视频流重新映射像素。
位置 (X, Y) 处的目标像素将从源 (x, y) 位置拾取,其中 x = Xmap(X, Y) 且 y = Ymap(X, Y)。如果映射值超出范围,则像素的零值将用于目标像素。
Xmap 和 Ymap 输入视频流的尺寸必须相同。输出视频流将具有 Xmap/Ymap 视频流尺寸。Xmap和Ymap输入视频流是32位浮点像素格式,单通道。
- interp
指定用于像素重新映射的插值。允许的值为
near
和linear
。默认值为linear
。- fill
指定未映射像素的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。默认颜色是
black
.
40.14 roberts_opencl
将 Roberts 交叉运算符 ( https://en.wikipedia.org/wiki/Roberts_cross ) 应用到输入视频流。
过滤器接受以下选项:
- planes
设置要过滤的平面。默认值为
0xf
,处理所有平面。- scale
设置将与过滤结果相乘的值。范围为
[0.0, 65535]
,默认值为1.0
。- delta
设置将添加到过滤结果的值。范围为
[-65535, 65535]
,默认值为0.0
。
40.14.1 示例
- 应用 Roberts 交叉运算符,比例设置为 2,增量设置为 10
-i INPUT -vf "hwupload, roberts_opencl=scale=2:delta=10, hwdownload" OUTPUT
40.15 sobel_opencl
将 Sobel 运算符 ( https://en.wikipedia.org/wiki/Sobel_operator ) 应用到输入视频流。
过滤器接受以下选项:
- planes
设置要过滤的平面。默认值为
0xf
,处理所有平面。- scale
设置将与过滤结果相乘的值。范围为
[0.0, 65535]
,默认值为1.0
。- delta
设置将添加到过滤结果的值。范围为
[-65535, 65535]
,默认值为0.0
。
40.15.1 示例
- 应用 sobel 算子,比例设置为 2,增量设置为 10
-i INPUT -vf "hwupload, sobel_opencl=scale=2:delta=10, hwdownload" OUTPUT
40.16 tonemap_opencl
使用色调映射执行 HDR(PQ/HLG) 到 SDR 转换。
它接受以下参数:
- tonemap
指定要使用的色调映射运算符。与tonemap中的tonemap 选项相同。
- param
调整色调映射算法。与tonemap中的参数选项相同。
- 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
默认与输入相同。
40.16.1 示例
- 使用线性算子将 HDR(PQ/HLG) 视频转换为 bt2020-transfer-characteristic p010 格式。
-i INPUT -vf "format=p010,hwupload,tonemap_opencl=t=bt2020:tonemap=linear:format=p010,hwdownload,format=p010" OUTPUT
40.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”。
40.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
40.18 xfade_opencl
使用 OpenCL 使用自定义过渡效果交叉淡入淡出两个视频。
它接受以下选项:
- transition
设置一种可能的过渡效果。
- custom
选择自定义过渡效果,实际的过渡描述将从源和内核选项中选取。
- fade
- wipeleft
- wiperight
- wipeup
- wipedown
- slideleft
- slideright
- slideup
- slidedown
-
默认过渡是淡入淡出。
- source
用于自定义转换的 OpenCL 程序源文件。
- kernel
设置用于从程序源文件进行自定义转换的内核名称。
- duration
设置视频过渡的持续时间。
- offset
设置相对于第一个视频的过渡开始时间。
程序源文件必须包含具有给定名称的内核函数,该函数将为输出的每个平面运行一次。平面上的每次运行都会作为单独的 2D 全局 NDRange 排队,并为每个要生成的像素提供一个工作项。因此,每个工作项的全局 ID 偏移量是目标图像中像素的坐标。
内核函数需要采用以下参数:
- 目标图像,__write_only image2d_t。
该图像将成为输出;内核应该写所有的内容。
- 第一个源图像,__read_only image2d_t。第二个源图像,__read_only image2d_t。
这些是每个输入上的最新图像。内核可以读取它们以生成输出,但无法写入它们。
- 过渡进度,浮动。该值始终介于 0 和 1 之间(含 0 和 1)。
示例程序:
- 应用点幕过渡效果:
__kernel void blend_images(__write_only image2d_t dst, __read_only image2d_t src1, __read_only image2d_t src2, float progress) { const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE | CLK_FILTER_LINEAR); int2 p = (int2)(get_global_id(0), get_global_id(1)); float2 rp = (float2)(get_global_id(0), get_global_id(1)); float2 dim = (float2)(get_image_dim(src1).x, get_image_dim(src1).y); rp = rp / dim; float2 dots = (float2)(20.0, 20.0); float2 center = (float2)(0,0); float2 unused; float4 val1 = read_imagef(src1, sampler, p); float4 val2 = read_imagef(src2, sampler, p); bool next = distance(fract(rp * dots, &unused), (float2)(0.5, 0.5)) < (progress / distance(rp, center)); write_imagef(dst, p, next ? val1 : val2); }
41 VAAPI 视频滤镜
VAAPI视频滤镜通常与VAAPI解码器和VAAPI编码器一起使用。以下是 VAAPI 视频滤镜的说明。
要启用这些过滤器的编译,您需要使用
--enable-vaapi
.
要使用 vaapi 过滤器,您需要正确设置 vaapi 设备。欲了解更多信息,请阅读https://trac.ffmpeg.org/wiki/Hardware/VAAPI
41.1 overlay_vaapi
将一个视频叠加在另一个视频之上。
它需要两个输入并有一个输出。第一个输入是“主”视频,第二个输入覆盖在其上。
该过滤器接受以下选项:
- x
- y
设置主视频上叠加视频的 x 和 y 坐标表达式。
两个表达式的默认值为“0”。
- w
- h
设置主视频上叠加视频的宽度和高度的表达式。
“w”的默认值为“overlay_iw”,“h”的默认值为“overlay_ih*w/overlay_iw”。
表达式可以包含以下参数:
- main_w, W
- main_h, H
主要输入宽度和高度。
- overlay_iw
- overlay_ih
覆盖输入宽度和高度。
- overlay_w, w
- overlay_h, h
叠加输出宽度和高度。
- overlay_x, x
- overlay_y, y
覆盖层在主层内部的位置
- alpha
设置叠加视频的透明度。允许的范围是 0.0 到 1.0。价值越高意味着透明度越低。默认值为
1.0
。- eof_action
请参阅帧同步。
- shortest
请参阅帧同步。
- repeatlast
请参阅帧同步。
该过滤器还支持帧同步选项。
41.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
- 在距离 INPUT 视频左上角偏移 (200, 100) 处叠加图像 LOGO。输入的颜色通道具有相同的内存布局,覆盖层具有额外的 alpha 平面,例如 INPUT 是 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
41.2 tonemap_vaapi
通过色调映射执行 HDR(高动态范围)到 SDR(标准动态范围)的转换。它将 HDR10 内容的动态范围映射到 SDR 内容。目前它仅接受 HDR10 作为输入。
它接受以下参数:
- format
指定输出像素格式。
目前支持的格式有:
- p010
- nv12
默认为 nv12。
- primaries, p
设置输出原色。
默认与输入相同。
- transfer, t
设置输出传输特性。
默认为 bt709。
- matrix, m
设置输出色彩空间矩阵。
默认与输入相同。
41.2.1 示例
- 将 HDR(HDR10) 视频转换为 bt2020-transfer-characteristic p010 格式
tonemap_vaapi=format=p010:t=bt2020-10
41.3 hstack_vaapi
水平堆叠输入视频。
这是hstack过滤器的 VA-API 变体,每个输入流可能有不同的高度,该过滤器将缩小/放大每个输入流,同时保持原始方面。
它接受以下选项:
41.4 vstack_vaapi
垂直堆叠输入视频。
这是vstack过滤器的 VA-API 变体,每个输入流可能具有不同的宽度,该过滤器将缩小/放大每个输入流,同时保持原始方面。
它接受以下选项:
41.5 xstack_vaapi
将视频输入堆叠到自定义布局中。
这是xstack过滤器的 VA-API 变体,每个输入流可能有不同的大小,该过滤器会将每个输入流缩小/放大到给定的输出大小,或第一个输入流的大小。
它接受以下选项:
- 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
设置每个输入流的输出大小网格已设置。如果未设置此选项,则此过滤器将默认将输出大小设置为第一个输入流的大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。
- fill
请参阅xstack。
42 Vulkan 视频滤镜
以下是当前可用的 Vulkan 视频过滤器的描述。
--enable-vulkan
要启用这些过滤器的编译,您需要使用和--enable-libglslang
或来配置 FFmpeg
--enable-libshaderc
。
运行 Vulkan 过滤器需要您初始化硬件设备并将该设备传递给任何过滤器图中的所有过滤器。
- -init_hw_device vulkan[=name][:device[,key=value...]]
使用key=value中给定的设备参数和选项初始化一个名为name的vulkan类型的新硬件设备。支持以下选项:
- debug
如果设置为 1,则打开验证层。
- linear_images
分配线性图像。不适用于解码。
- disable_multiplane
禁用多平面图像。不适用于解码。
- -filter_hw_device name
将名为name的硬件设备传递给任何过滤器图中的所有过滤器。
有关更多详细信息,请参阅https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options
- 选择第一个设备并使用默认参数运行 nlmeans_vulkan 过滤器的示例。
-init_hw_device vulkan=vk:0 -filter_hw_device vk -i INPUT -vf "hwupload,nlmeans_vulkan,hwdownload" OUTPUT
由于 Vulkan 过滤器无法访问普通内存中的帧数据,因此所有帧数据在使用之前都需要上传(hwupload)到连接到相应设备的硬件表面,然后下载(hwdownload)回普通内存。请注意,hwupload将上传到与软件框架具有相同布局的框架,因此可能需要在将输入转换为正确格式之前立即添加格式过滤器,并且hwdownload不支持输出上的所有格式 - 它是通常需要在图表中紧随其后 插入附加格式过滤器以获得支持格式的输出。
42.1 avgblur_vulkan
应用平均模糊滤镜,使用 Vulkan 在 GPU 上实现。
该过滤器接受以下选项:
- sizeX
设置水平半径大小。范围为
[1, 32]
,默认值为3
。- sizeY
设置垂直半径大小。范围为
[1, 32]
,默认值为3
。- planes
设置要过滤的平面。默认值为
0xf
,处理所有平面。
42.2 blend_vulkan
将两个 Vulkan 框架相互混合。
该blend
过滤器采用两个输入流并输出一个流,第一个输入是“顶层”,第二个输入是“底层”。默认情况下,当最长的输入终止时,输出终止。
下面是接受的选项的描述。
- c0_mode
- c1_mode
- c2_mode
- c3_mode
- all_mode
在all_mode的情况下,为特定像素组件或所有像素组件设置混合模式。默认值为
normal
。组件模式的可用值为:
- ‘normal’
- ‘multiply’
42.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
。
42.4 chromaber_vulkan
应用模拟色差的效果。最适合 RGB 输入,但也可提供与 YCbCr 输入类似的效果。
- dist_x
水平位移乘数。从图像中心开始,每个色度像素的位置都将乘以该数量。默认为
0
.- dist_y
类似地,这设置了垂直位移乘数。默认为
0
.
42.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)。
42.6 vflip_vulkan
垂直翻转图像。
42.7 hflip_vulkan
水平翻转图像。
42.8 flip_vulkan
沿垂直轴和水平轴翻转图像。
42.9 gblur_vulkan
在 Vulkan 帧上应用高斯模糊滤镜。
该过滤器接受以下选项:
- sigma
设置水平西格玛,高斯模糊的标准差。默认为
0.5
.- sigmaV
设置垂直西格玛,如果为负,则与 相同
sigma
。默认为-1
.- planes
设置要过滤的平面。默认情况下,所有平面都会被过滤。
- size
沿水平轴设置内核大小。默认为
19
.- sizeV
沿垂直轴设置内核大小。默认值为,它设置为使用与size
0
相同的值。
42.10 nlmeans_vulkan
使用非局部均值算法对帧进行降噪,该算法使用 Vulkan 在 GPU 上实现。支持比nlmeans或nlmeans_opencl更多的像素格式,包括 Alpha 通道支持。
该过滤器接受以下选项。
- s
设置所有组件的降噪强度。默认值为 1.0。必须在 [1.0, 100.0] 范围内。
- p
设置所有平面的补丁大小。默认值为 7。必须是 [0, 99] 范围内的奇数。
- r
设定研究规模。默认值为 15。必须是 [0, 99] 范围内的奇数。
- t
设置并行度。默认值为 36。必须是 [1, 168] 范围内的数字。较大的值可能会加快处理速度,但会占用更多 VRAM。较低的值会减慢速度,从而减少 VRAM 使用。仅支持具有原子浮点运算的 GPU(RDNA3+、Ampere+)。
- s0
- s1
- s2
- s3
设置特定组件的降噪强度。默认值为1,等于s。必须是 [1, 100] 范围内的奇数。
- p0
- p1
- p2
- p3
设置特定组件的补丁大小。默认值为7,等于p。必须是 [0, 99] 范围内的奇数。
42.11 overlay_vulkan
将一个视频叠加在另一个视频之上。
它需要两个输入并有一个输出。第一个输入是“主”视频,第二个输入覆盖在其上。该过滤器要求所有输入使用相同的像素格式。因此,可能需要进行格式转换。
该过滤器接受以下选项:
- x
设置叠加视频在主视频上的 x 坐标。默认值为
0
。- y
设置叠加视频在主视频上的 y 坐标。默认值为
0
。
42.12 transpose_vt
在输入视频中调换行和列,并可选择翻转它。有关更深入的示例,请参阅转置视频过滤器,它共享大部分相同的选项。
它接受以下参数:
- dir
指定转置方向。
可以采用以下值:
- ‘cclock_flip’
逆时针旋转90度并垂直翻转。(默认)
- ‘clock’
顺时针旋转90度。
- ‘cclock’
逆时针旋转90度。
- ‘clock_flip’
顺时针旋转90度并垂直翻转。
- ‘hflip’
水平翻转输入视频。
- ‘vflip’
垂直翻转输入视频。
- passthrough
如果输入几何图形与指定值指定的几何图形匹配,则不应用转置。它接受以下值:
- ‘none’
始终应用转置。(默认)
- ‘portrait’
保留纵向几何形状(当height >= width时)。
- ‘landscape’
保留景观几何形状(当width >= height时)。
42.13 transpose_vulkan
在输入视频中调换行和列,并可选择翻转它。有关更深入的示例,请参阅转置视频过滤器,它共享大部分相同的选项。
它接受以下参数:
- dir
指定转置方向。
可以采用以下值:
- ‘cclock_flip’
逆时针旋转90度并垂直翻转。(默认)
- ‘clock’
顺时针旋转90度。
- ‘cclock’
逆时针旋转90度。
- ‘clock_flip’
顺时针旋转90度并垂直翻转。
- passthrough
如果输入几何图形与指定值指定的几何图形匹配,则不应用转置。它接受以下值:
- ‘none’
始终应用转置。(默认)
- ‘portrait’
保留纵向几何形状(当height >= width时)。
- ‘landscape’
保留景观几何形状(当width >= height时)。
43 QSV 视频滤波器
以下是当前可用的 QSV 视频滤镜的说明。
--enable-libmfx
要启用这些过滤器的编译,您需要使用或配置 FFmpeg
--enable-libvpl
。
要使用 QSV 滤波器,您需要正确设置 QSV 设备。欲了解更多信息,请阅读https://trac.ffmpeg.org/wiki/Hardware/QuickSync
43.1 hstack_qsv
水平堆叠输入视频。
这是hstack过滤器的 QSV 变体,每个输入流可能有不同的高度,该过滤器将缩小/放大每个输入流,同时保持原始方面。
它接受以下选项:
43.2 vstack_qsv
垂直堆叠输入视频。
这是vstack过滤器的 QSV 变体,每个输入流可能具有不同的宽度,该过滤器将缩小/放大每个输入流,同时保持原始方面。
它接受以下选项:
43.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
设置每个输入流的输出大小网格已设置。如果未设置此选项,则此过滤器将默认将输出大小设置为第一个输入流的大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。
- fill
请参阅xstack。
44 个视频源
以下是当前可用视频源的描述。
44.1 buffer
缓冲视频帧,并使它们可供过滤器链使用。
该源主要用于编程用途,特别是通过中定义的接口libavfilter/buffersrc.h。
它接受以下参数:
- video_size
指定缓冲视频帧的大小(宽度和高度)。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。
- width
输入视频宽度。
- height
输入视频高度。
- pix_fmt
表示缓冲视频帧的像素格式的字符串。可以是像素格式对应的数字,也可以是像素格式名称。
- time_base
指定缓冲帧的时间戳所采用的时基。
- frame_rate
指定视频流的预期帧速率。
- pixel_aspect, sar
输入视频的样本(像素)长宽比。
- hw_frames_ctx
当使用硬件像素格式时,这应该是对描述输入帧的 AVHWFramesContext 的引用。
例如:
buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1
将指示源接受大小为 320x240 且格式为“yuv410p”的视频帧,假设 1/24 作为时间戳时基和方形像素(1:1 样本长宽比)。由于名称为“yuv410p”的像素格式对应于数字 6(请检查枚举 AVPixelFormat 定义)libavutil/pixfmt.h),本例对应:
buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1
或者,可以将选项指定为平面字符串,但不推荐使用此语法:
宽度:高度:pix_fmt:time_base.num:time_base.den:pixel_aspect.num:pixel_aspect.den
44.2 cellauto
创建由基本元胞自动机生成的模式。
元胞自动机的初始状态可以通过以下方式定义 文件名和图案选项。如果未指定此类选项,则会随机创建初始状态。
在每个新帧,视频中的新行都会填充下一代元胞自动机的结果。整个框架被填充时的行为由滚动选项。
该来源接受以下选项:
- 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)“视频大小”部分。
如果文件名或者图案指定时,大小默认设置为指定初始状态行的宽度,高度设置为width * PHI。
如果尺寸设置后,它必须包含指定模式字符串的宽度,并且指定模式将在较大的行中居中。
如果未指定文件名或模式字符串,则大小值默认为“320x518”(用于随机生成的初始状态)。
- scroll
如果设置为 1,则当输出中的所有行都已填充时向上滚动输出。如果设置为 0,则新生成的行将在填充底行后立即写入顶行。默认为 1。
- start_full, full
如果设置为 1,则在输出第一帧之前用生成的行完全填充输出。这是默认行为,若要禁用,请将值设置为 0。
- stitch
如果设置为 1,则将左右行边缘缝合在一起。这是默认行为,若要禁用,请将值设置为 0。
44.2.1 示例
- 读取初始状态图案,并指定大小为 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
44.3 coreimagesrc
在 OSX 上使用 Apple 的 CoreImage API 在 GPU 上生成的视频源。
该视频源是coreimage视频过滤器的专门版本。在应用的过滤器链的开头使用核心图像生成器来生成内容。
coreimagesrc 视频源接受以下选项:
- list_generators
列出所有可用的生成器及其各自的选项以及可能的最小值和最大值以及默认值。
list_generators=true
- size, s
指定源视频的大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为
320x240
。- rate, r
指定源视频的帧速率,即每秒生成的帧数。它必须是格式为 frame_rate_num / frame_rate_den的字符串、整数、浮点数或有效的视频帧速率缩写。默认值为“25”。
- sar
设置源视频的样本宽高比。
- duration, d
设置源视频的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。
如果未指定,或者表示的持续时间为负,则视频应永久生成。
此外,还接受coreimage视频过滤器的所有选项。完整的过滤器链可用于进一步处理生成的输入,而无需 CPU-HOST 传输。有关详细信息,请参阅coreimage文档和示例。
44.3.1 示例
- 使用 CIQRCodeGenerator 为 FFmpeg 主页创建 QR 码,以 Apple 标准 bash shell 的完整且转义的命令行形式给出:
ffmpeg -f lavfi -i coreimagesrc=s=100x100:filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.png
此示例相当于coreimage的 QRCode 示例,无需 nullsrc 视频源。
44.4 ddagrab
通过桌面复制 API 捕获 Windows 桌面。
该过滤器专门返回 D3D11 硬件帧,用于 GPU 上编码或处理。因此任何类型的软件处理都需要 明确的硬件下载。
它接受以下选项:
- output_idx
要捕获的 DXGI 输出索引。
通常对应于 Windows 给屏幕的索引减一,因此它从 0 开始。
默认输出 0。
- draw_mouse
是否绘制鼠标光标。
默认为 true。
仅影响硬件光标。如果游戏或应用程序呈现自己的光标,它将始终被捕获。
- framerate
捕获桌面的帧速率。
默认为 30 FPS。
- video_size
指定捕获视频的大小。
默认为屏幕的全尺寸。
如果小于屏幕尺寸,则从底部/右侧裁剪。
- offset_x
捕获视频的水平偏移。
- offset_y
捕获视频的垂直偏移。
- output_fmt
所需的过滤器输出格式。默认为 8 位 BGRA。
它接受以下值:
- ‘auto’
将所有支持的输出格式传递给 DDA 并返回 DDA 决定使用的格式。
- ‘8bit’
- ‘bgra’
8 位格式始终有效,如果需要,DDA 将转换为它们。
- ‘10bit’
- ‘x2bgr10’
如果请求 10 位格式但不可用,过滤器初始化将失败。
44.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
44.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(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。
如果未指定,或者表示的持续时间为负,则视频应永久生成。
- speed
设置渐变旋转的速度。
- type, t
设置渐变类型,可以是
linear
或radial
或circular
或spiral
。
44.6 mandelbrot
生成 Mandelbrot 集分形,并逐渐向start_x和start_y指定的点缩放。
该来源接受以下选项:
- end_pts
设置终端 pts 值。默认值为 400。
- end_scale
设置终端比例值。必须是浮点值。默认值为 0.3。
- inner
设置内部着色模式,即用于绘制Mandelbrot分形内部区域的算法。
它应采用以下值之一:
- 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。
44.7 mptestsrc
生成由 MPlayer 测试过滤器生成的各种测试模式。
生成的视频大小是固定的,为256x256。该源对于测试编码功能特别有用。
该来源接受以下选项:
- rate, r
指定源视频的帧速率,即每秒生成的帧数。它必须是格式为 frame_rate_num / frame_rate_den的字符串、整数、浮点数或有效的视频帧速率缩写。默认值为“25”。
- duration, d
设置源视频的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。
如果未指定,或者表示的持续时间为负,则视频应永久生成。
- test, t
-
设置要执行的测试的编号或名称。支持的测试有:
- dc_luma
- dc_chroma
- freq_luma
- freq_chroma
- amp_luma
- amp_chroma
- cbp
- mv
- ring1
- ring2
- all
- max_frames, m
设置每次测试生成的最大帧数,默认值为 30。
默认值为“all”,它将循环显示所有测试的列表。
一些例子:
mptestsrc=t=dc_luma
将生成“dc_luma”测试模式。
44.8 frei0r_src
提供 frei0r 源。
要启用此过滤器的编译,您需要安装 frei0r 标头并使用--enable-frei0r
.
该源接受以下参数:
- size
要生成的视频的大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。
- framerate
生成视频的帧速率。它可能是num / den形式的字符串 或帧速率缩写。
- filter_name
要加载的 frei0r 源的名称。有关 frei0r 以及如何设置参数的更多信息,请阅读视频滤镜文档中的 frei0r部分。
- filter_params
要传递到 frei0r 源的以“|”分隔的参数列表。
例如,要生成大小为 200x200、帧速率为 10 的 frei0r partik0l 源,该源覆盖在覆盖过滤器主输入上:
frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay
44.9 life
生成生活模式。
本资料基于约翰·康威的人生游戏的概括。
源输入代表一个生命网格,每个像素代表一个细胞,该细胞可以处于两种可能状态之一:活着或死亡。每个细胞与其八个邻居相互作用,这些邻居是水平、垂直或对角相邻的细胞。
在每次交互中,网格都会根据所采用的规则进行演化,该规则指定了使细胞保持存活或诞生的相邻存活细胞的数量。这规则选项允许指定要采用的规则。
该来源接受以下选项:
- filename, f
设置从中读取初始网格状态的文件。在文件中,每个非空白字符都被视为活动单元格,换行符用于分隔每行的末尾。
如果不指定该选项,则初始网格是随机生成的。
- rate, r
设置视频速率,即每秒生成的帧数。默认值为 25。
- random_fill_ratio, ratio
设置初始随机网格的随机填充比率。它是一个浮点数,范围从0到1,默认为1/PHI。当指定文件时它会被忽略。
- random_seed, seed
设置填充初始随机网格的种子,必须是 0 到 UINT32_MAX 之间的整数。如果未指定,或者明确设置为 -1,过滤器将尽力使用良好的随机种子。
- rule
设定生活规则。
可以使用“S NS /B NB ”类型的代码来指定规则,其中NS和NB是 0-8 范围内的数字序列, NS指定使活动小区保持活动状态的活动相邻小区的数量, NB使死亡细胞变得活跃(即“出生”)的存活相邻细胞的数量。“s”和“b”可以分别代替“S”和“B”。
或者,可以通过 18 位整数指定规则。9 个高位用于编码下一个细胞状态(如果每个数量的相邻存活细胞都存活),低位指定“诞生”新细胞的规则。更高阶的比特对更多数量的相邻单元进行编码。例如,数字 6153 =
(12<<9)+9
指定存活规则 12 和出生规则 9,对应于“S23/B03”。默认值为“S23/B3”,这是原始的康威生命游戏规则,如果一个细胞有 2 或 3 个相邻的存活细胞,则该细胞将保持存活;如果死亡的细胞周围有 3 个存活的细胞,则将诞生一个新细胞细胞。
- size, s
设置输出视频的大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。
如果文件名指定后,大小默认设置为与输入文件的大小相同。如果尺寸设置后,它必须包含输入文件中指定的大小,并且该文件中定义的初始网格位于较大的结果区域的中心。
如果未指定文件名,则大小值默认为“320x240”(用于随机生成的初始网格)。
- stitch
如果设置为 1,则将左右网格边缘以及顶部和底部边缘缝合在一起。默认为 1。
- mold
设置单元模具速度。如果设置,死细胞将从死亡颜色到 模具颜色步长为模具。模具可以具有 0 到 255 之间的值。
- life_color
设置活体(或新生)细胞的颜色。
- death_color
设置死细胞的颜色。如果模具设置后,这是用于表示死细胞的第一种颜色。
- mold_color
设置霉菌颜色,用于明确死亡和发霉的细胞。
对于这 3 个颜色选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。
44.9.1 示例
- 读取网格图案,并将其置于大小为 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
44.10 allrgb, allyuv, color, colorchart, colorspectrum, haldclutsrc, nullsrc, pal75bars, pal100bars, rgbtestsrc, smptebars, smptehdbars, testsrc, testsrc2, yuvtestsrc
源allrgb
返回所有 RGB 颜色的大小为 4096x4096 的帧。
源allyuv
返回所有 yuv 颜色的大小为 4096x4096 的帧。
源color
提供统一颜色的输入。
The colorchart
source provides a colors checker chart.
The colorspectrum
source provides a color spectrum input.
The haldclutsrc
source provides an identity Hald CLUT. See also
haldclut filter.
The nullsrc
source returns unprocessed video frames. It is
mainly useful to be employed in analysis / debugging tools, or as the
source for filters which ignore the input data.
The pal75bars
source generates a color bars pattern, based on
EBU PAL recommendations with 75% color levels.
The pal100bars
source generates a color bars pattern, based on
EBU PAL recommendations with 100% color levels.
The rgbtestsrc
source generates an RGB test pattern useful for
detecting RGB vs BGR issues. You should see a red, green and blue
stripe from top to bottom.
The smptebars
source generates a color bars pattern, based on
the SMPTE Engineering Guideline EG 1-1990.
The smptehdbars
source generates a color bars pattern, based on
the SMPTE RP 219-2002.
The testsrc
source generates a test video pattern, showing a
color pattern, a scrolling gradient and a timestamp. This is mainly
intended for testing purposes.
The testsrc2
source is similar to testsrc, but supports more
pixel formats instead of just rgb24
. This allows using it as an
input for other tests without requiring a format conversion.
The yuvtestsrc
source generates an YUV test pattern. You should
see a y, cb and cr stripe from top to bottom.
The sources accept the following parameters:
- level
Specify the level of the Hald CLUT, only available in the
haldclutsrc
source. A level ofN
generates a picture ofN*N*N
byN*N*N
pixels to be used as identity matrix for 3D lookup tables. Each component is coded on a1/(N*N)
scale.- color, c
Specify the color of the source, only available in the
color
source. For the syntax of this option, check the (ffmpeg-utils)"Color" section in the ffmpeg-utils manual.- size, s
Specify the size of the sourced video. For the syntax of this option, check the (ffmpeg-utils)"Video size" section in the ffmpeg-utils manual. The default value is
320x240
.This option is not available with the
allrgb
,allyuv
, andhaldclutsrc
filters.- rate, r
Specify the frame rate of the sourced video, as the number of frames generated per second. It has to be a string in the format frame_rate_num/frame_rate_den, an integer number, a floating point number or a valid video frame rate abbreviation. The default value is "25".
- duration, d
Set the duration of the sourced video. See (ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual for the accepted syntax.
如果未指定,或者表示的持续时间为负,则视频应永久生成。
由于帧速率用作时间基准,因此包括最后一帧在内的所有帧都将具有完整的持续时间。如果指定的持续时间不是帧持续时间的倍数,则会向上舍入。
- sar
设置源视频的样本宽高比。
- alpha
指定背景的 Alpha(不透明度),仅在
testsrc2
源中可用。该值必须介于 0(完全透明)和 255(完全不透明,默认值)之间。- decimals, n
设置时间戳中显示的小数位数,仅在
testsrc
源中可用。显示的时间戳值将对应于原始时间戳值乘以指定值的 10 次方。默认值为 0。
- type
设置色谱类型,仅在
colorspectrum
源中可用。可以是以下之一:- ‘black’
- ‘white’
- ‘all’
- patch_size
设置单色色块的色块大小,仅在
colorchart
源码中可用。默认为64x64
.- preset
设置 colorchecker 颜色预设,仅在
colorchart
源中可用。可用值为:
- ‘reference’
- ‘skintones’
默认值为
reference
。
44.10.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
44.10.2 命令
源码color
支持以下命令:
- c, color
设置创建的图像的颜色。接受相应的相同语法颜色选项。
44.11 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); }
44.12 sierpinski
生成谢尔宾斯基地毯/三角形分形,并随机平移。
该来源接受以下选项:
- size, s
设置帧大小。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为“640x480”。
- rate, r
设置帧速率,表示为每秒的帧数。默认值为“25”。
- seed
设置用于随机平移的种子。
- jump
设置单个平移目标的最大跳跃。允许的范围是从 1 到 10000。
- type
设置分形类型,可以是默认值
carpet
或triangle
。
44.13 zoneplate
生成波带片测试视频模式。
该来源接受以下选项:
- size, s
设置帧大小。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为“320x240”。
- rate, r
设置帧速率,表示为每秒的帧数。默认值为“25”。
- duration, d
设置源视频的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。
如果未指定,或者表示的持续时间为负,则视频应永久生成。
- sar
设置源视频的样本宽高比。
- precision
设置正弦计算查找表的精度(以位为单位)。默认值为 10。允许的范围为 4 到 16。
- xo
设置输出信号的水平轴偏移。默认值为 0。
- yo
设置输出信号的垂直轴偏移。默认值为 0。
- to
设置输出信号的时间轴偏移。默认值为 0。
- k0
设置添加到信号相位的 0 阶常数。默认值为 0。
- kx
设置水平轴的一阶相位因子乘数。默认值为 0。
- ky
设置垂直轴的一阶相位因子乘数。默认值为 0。
- kt
设置时间轴的一阶相位因子乘数。默认值为 0。
- kxt, kyt, kxy
设置空间轴和时间轴组合的相位因子乘数。默认值为 0。
- kx2
设置水平轴的二阶相位因子乘数。默认值为 0。
- ky2
设置垂直轴的二阶相位因子乘数。默认值为 0。
- kt2
设置时间轴的二阶相位因子乘数。默认值为 0。
- ku
设置添加到最终相位的常数以产生信号的色度蓝色分量。默认值为 0。
- kv
设置添加到最终相位的常数以产生信号的色度红色分量。默认值为 0。
44.13.1 命令
该源支持上述一些选项作为命令。
44.13.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=ku=512:kv=100:kt2=0:ky2=256:kx2=556:s=wvga:yo=0:kt=11
45 个视频接收器
以下是当前可用视频接收器的描述。
45.1 buffersink
缓冲视频帧,并使它们可用于过滤器图的末尾。
该接收器主要用于编程使用,特别是通过中定义的接口libavfilter/buffersink.h 或选项系统。
它接受指向 AVBufferSinkContext 结构的指针,该结构定义传入缓冲区的格式,作为不透明参数传递给avfilter_init_filter
初始化。
45.2 nullsink
空视频接收器:对输入视频完全不执行任何操作。它主要用作模板并用于分析/调试工具。
46 多媒体过滤器
以下是当前可用的多媒体过滤器的描述。
46.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
设置显示的音频波的长度(以帧数为单位)。
46.1.1 命令
Filter 支持以上一些选项作为命令。
46.2 abitscope
将输入音频转换为视频输出,显示音频位范围。
该过滤器接受以下选项:
- rate, r
设置帧速率,表示为每秒的帧数。默认值为“25”。
- size, s
指定输出的视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为
1024x256
。- colors
指定由空格或“|”分隔的颜色列表 它将用于绘制通道。无法识别或缺失的颜色将被白色替换。
- mode, m
设置输出模式。可以是
bars
或trace
. 默认为bars
.
46.3 adrawgraph
使用输入音频元数据绘制图表。
参见绘图
46.4 agraphmonitor
请参阅图形监视器。
46.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
.
46.6 aphasemeter
测量输入音频的相位,将其导出为元数据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
启用视频输出。默认启用。
46.6.1 定相检测
该滤波器还检测立体声流中的异相和单声道序列。当序列持续时间较长或达到最小设置时,它会记录序列的开始、结束和持续时间。
过滤器接受以下检测选项:
- phasing
启用单声道和异相检测。默认为禁用。
- tolerance, t
设置单声道检测的相位容差,以幅度比表示。默认为
0
. 允许的范围是[0, 1]
.- angle, a
设置异相检测的角度阈值(以度为单位)。默认为
170
. 允许的范围是[90, 180]
.- duration, d
设置单声道或异相持续时间直到通知,以秒为单位。默认为
2
.
46.6.2 示例
ffmpeg
以 0.001 相位容差检测 1 秒单声道的 完整示例:ffmpeg -i stereo.wav -af aphasemeter=video=0:phasing=1:duration=1:tolerance=0.001 -f null -
46.7 avectorscope
将输入音频转换为视频输出,表示音频矢量范围。
该滤波器用于测量立体声音频流通道之间的差异。由相同的左右信号组成的单声道信号会产生垂直直线。任何立体分离都可以视为与这条线的偏差,从而创建利萨如图形。如果出现直线(或偏离直线)但水平的线,则表明左右通道异相。
该过滤器接受以下选项:
- mode, m
设置矢量示波器模式。
可用值为:
- ‘lissajous’
李萨如旋转了 45 度。
- ‘lissajous_xy’
与上面相同,但没有旋转。
- ‘polar’
形状类似半圆。
默认值为 '利萨如'。
- 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’
在先前和当前样本之间绘制抗锯齿线。
默认值为 '点'。
- scale
指定音频样本的幅度比例。
可用值为:
- ‘lin’
线性。
- ‘sqrt’
平方根。
- ‘cbrt’
立方根。
- ‘log’
对数。
- swap
将左通道轴与右通道轴交换。
- mirror
镜轴。
- ‘none’
没有镜子。
- ‘x’
仅镜像 x 轴。
- ‘y’
仅镜像 y 轴。
- ‘xy’
镜像两个轴。
46.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]'
46.7.2 命令
size
该过滤器支持除 options和 之外的所有上述选项作为命令rate
。
46.8 bench, abench
过滤器图表的基准部分。
该过滤器接受以下选项:
- action
启动或停止计时器。
可用值为:
- ‘start’
获取当前时间,将其设置为帧元数据(使用 key
lavfi.bench.start_time
),并将帧转发到下一个过滤器。- ‘stop’
获取当前时间,
lavfi.bench.start_time
从输入帧元数据中取出元数据,得到时间差。然后打印时间差、平均值、最大和最小时间(分别为、 和t
)avg
。时间戳以秒为单位表示。max
min
46.8.1 示例
- 基准选择性滤色镜:
bench=start,selectivecolor=reds=-.2 .12 -.49,bench=stop
46.9 concat
连接音频和视频流,将它们一个接一个地连接在一起。
该过滤器适用于同步视频和音频流的片段。所有段必须具有相同数量的每种类型的流,并且这也是输出的流的数量。
该过滤器接受以下选项:
- n
设置段数。默认值为 2。
- v
设置输出视频流的数量,即每段视频流的数量。默认值为 1。
- a
设置输出音频流的数量,即每个段中音频流的数量。默认值为 0。
- unsafe
激活不安全模式:如果段具有不同的格式,则不会失败。
该滤波器有v + a 个输出:第一个v 个视频输出,然后 一个音频输出。
有n x( v + a ) 个输入:首先是第一段的输入,与输出的顺序相同,然后是第二段的输入,依此类推。
由于编解码器帧大小或草率创作等各种原因,相关流并不总是具有完全相同的持续时间。因此,相关的同步流(例如视频及其音轨)应该立即连接起来。连接过滤器将使用每个片段中最长的流的持续时间(最后一个片段除外),并在必要时用静音填充较短的音频流。
为了使此过滤器正常工作,所有段必须从时间戳 0 开始。
所有对应的流在所有段中必须具有相同的参数;过滤系统将自动为视频流选择通用的像素格式,为音频流选择通用的采样格式、采样率和通道布局,但其他设置(例如分辨率)必须由用户显式转换。
不同的帧速率是可以接受的,但会导致输出时帧速率可变;请务必配置输出文件来处理它。
46.9.1 示例
- 连接开头、剧集和结尾,全部采用双语版本(视频在流 0 中,音频在流 1 和 2 中):
ffmpeg -i opening.mkv -i episode.mkv -i ending.mkv -filter_complex \ '[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2] concat=n=3:v=1:a=2 [v] [a1] [a2]' \ -map '[v]' -map '[a1]' -map '[a2]' output.mkv
- 连接两个部分,分别处理音频和视频,使用 (a) 电影源,并调整分辨率:
movie=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]
请注意,如果第一个文件中音频和视频流的持续时间不完全相同,则会在拼接处发生不同步。
46.9.2 命令
该过滤器支持以下命令:
- next
关闭当前段并进入下一个段
46.10 ebur128
EBU R128 扫描仪过滤器。该滤波器获取音频流并分析其响度级别。默认情况下,它以 10Hz 的频率记录一条消息,其中包含瞬时响度(由 标识M
)、短期响度 ( S
)、综合响度 ( I
) 和响度范围 ( LRA
)。
该过滤器只能分析样本格式为双精度浮点的流。如果需要,输入流将转换为该规范。用户可能需要在此过滤器之后插入格式和/或样本过滤器以获得原始参数。
该滤波器还具有视频输出(请参阅视频选项),并带有实时图表以观察响度演变。该图形包含上面提到的记录消息,因此当设置此选项时不再打印它,除非设置了详细日志记录。主图形区域包含短期响度(3 秒的分析),右侧的仪表用于瞬时响度(400 毫秒),但可以选择配置为显示短期响度(请参阅仪表)。
绿色区域标记目标响度周围的 +/- 1LU 目标范围(默认为 -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。如果视频或者元数据设置选项后,它会切换到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 为单位)。
46.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 -
46.11 interleave, ainterleave
暂时交错来自多个输入的帧。
interleave
适用于视频输入ainterleave
和音频。
这些过滤器从多个输入读取帧并将最旧的排队帧发送到输出。
输入流必须具有明确定义的、单调递增的帧时间戳值。
为了提交一帧进行输出,这些过滤器需要为每个输入至少排队一帧,因此,如果一个输入尚未终止并且不会接收传入帧,它们就无法工作。
例如,考虑当一个输入是select
总是丢弃输入帧的过滤器时的情况。过滤interleave
器将继续从该输入读取数据,但在输入发送流结束信号之前,它永远无法将新帧发送到输出。
此外,根据输入同步,如果一个输入接收的帧多于其他输入,并且队列已满,则过滤器将丢弃帧。
这些过滤器接受以下选项:
- nb_inputs, n
设置不同输入的数量,默认为2。
- duration
如何确定流结束。
- longest
最长输入的持续时间。(默认)
- shortest
最短输入的持续时间。
- first
第一次输入的持续时间。
46.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
46.12 latency, alatency
测量过滤延迟。
报告先前的过滤器过滤延迟、音频过滤器的音频样本数量延迟或视频过滤器的视频帧数量。
在输入流结束时,过滤器将报告过滤器图中先前运行的过滤器的最小和最大测量延迟。
46.13 metadata, ametadata
操纵帧元数据。
该过滤器接受以下选项:
- mode
设置过滤器的操作模式。
可以是以下之一:
- ‘select’
如果 和
value
均已key
设置,则选择具有此类元数据的帧。如果仅key
设置,则选择元数据中具有此类键的每个帧。- ‘add’
添加新的元数据
key
和value
. 如果密钥已经可用,则不执行任何操作。- ‘modify’
修改已存在键的值。
- ‘delete’
如果
value
设置,则仅删除具有该值的键。否则,删除密钥。如果key
未设置,则删除帧中的所有元数据值。- ‘print’
如果找到元数据,则打印密钥及其值。如果
key
未设置,则打印框架中可用的所有元数据值。
- key
设置用于所有模式的键。
print
必须为除和之外的所有模式进行设置delete
。- value
设置将使用的元数据值。此选项对于
modify
andadd
模式是必需的。- function
比较元数据值和 时使用哪个函数
value
。可以是以下之一:
- ‘same_str’
值被解释为字符串,如果元数据值与 相同则返回 true
value
。- ‘starts_with’
值被解释为字符串,如果元数据值以选项
value
字符串开头,则返回 true。- ‘less’
值被解释为浮点数,如果元数据值小于,则返回 true
value
。- ‘equal’
值被解释为浮点数,如果
value
等于元数据值则返回 true。- ‘greater’
值被解释为浮点数,如果元数据值大于 则返回 true
value
。- ‘expr’
值被解释为浮点数,如果选项中的表达式
expr
计算结果为 true,则返回 true。- ‘ends_with’
值被解释为字符串,如果元数据值以选项
value
字符串结尾,则返回 true。
- expr
function
设置当设置为时使用的表达式expr
。该表达式通过 eval API 进行计算,并且可以包含以下常量:- VALUE1, FRAMEVAL
value
元数据键 的浮点表示形式。- VALUE2, USERVAL
value
用户在选项中提供的浮点表示形式value
。
- file
如果在模式中指定
print
,输出将写入指定的文件。可以指定任何可写的 url,而不是纯文件名。文件名“-”是标准输出的简写。如果file
未设置选项,则输出将写入具有 AV_LOG_INFO 日志级别的日志。- direct
当输出写入使用 file 设置的 URL 时,减少打印模式下的缓冲。
46.13.1 示例
- 打印键值在 0 到 1 之间的帧的所有元数据值
lavfi.signalstats.YDIF
。signalstats,metadata=print:key=lavfi.signalstats.YDIF:value=0:function=expr:expr='between(VALUE1,0,1)'
- 将静音检测输出打印到文件元数据.txt。
silencedetect,ametadata=mode=print:file=metadata.txt
- 将所有元数据定向到文件描述符为 4 的管道。
metadata=mode=print:file='pipe\:4'
46.14 perms, aperms
设置输出帧的读/写权限。
这些过滤器主要针对开发人员在过滤器图中测试以下过滤器中的直接路径。
过滤器接受以下选项:
- mode
选择权限模式。
它接受以下值:
- ‘none’
没做什么。这是默认设置。
- ‘ro’
将所有输出帧设置为只读。
- ‘rw’
将所有输出帧设置为直接可写。
- ‘toggle’
如果该帧可写,则将其设置为只读;如果是只读,则将其设置为可写。
- ‘random’
将每个输出帧随机设置为只读或可写。
- seed
设置随机模式的种子,必须是
0
和之间的整数UINT32_MAX
。如果未指定,或者明确设置为-1
,过滤器将尽力使用良好的随机种子。
注意:如果在权限过滤器和下一个过滤器之间自动插入过滤器,则在下一个过滤器中可能无法按预期接收权限。在 perms/aperms 过滤器之前 插入format或aformat过滤器可以避免此问题。
46.15 realtime, arealtime
减慢过滤速度以大致匹配实时。
这些过滤器将暂停过滤一段可变的时间,以使输出速率与输入时间戳相匹配。它们类似于关于选项到ffmpeg
.
他们接受以下选项:
- limit
暂停的时间限制。任何超过该时间的暂停都将被视为时间戳不连续并重置计时器。默认值为 2 秒。
- speed
处理速度因素。该值必须是大于零的浮点数。大于 1.0 的值将导致比实时处理更快,较小的值将减慢处理速度。该限制会相应地自动调整。默认值为 1.0。
无法实现比没有这些滤波器更快的处理速度。
46.15.1 命令
两个过滤器都支持上述所有选项作为命令。
46.16 segment, asegment
将单个输入流拆分为多个流。
该过滤器的作用与串联过滤器相反。
segment
适用于视频帧和asegment
音频样本。
该过滤器接受以下选项:
- timestamps
输出段的时间戳由“|”分隔。第一个段将从输入流的开头运行。最后一段将运行直到输入流结束
- frames, samples
用于分割片段的精确帧/样本计数。
在所有情况下,为每个段添加前缀“+”将使其相对于前一个段。
46.16.1 示例
- 将输入音频流拆分为三个输出音频流,从输入音频流开始处开始并将其存储在第一个输出音频流中,然后在第 60 秒处存储在第二个输出音频流中,最后在输入音频流存储的第 150 秒后在第三个输出音频流中:
asegment=timestamps="60|150"
46.17 select, aselect
选择要传入输出的帧。
该过滤器接受以下选项:
- 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(呈现时间戳),以TB为单位表示。如果未定义则为 NAN。
- t
已过滤帧的 PTS,以秒为单位表示。如果未定义则为 NAN。
- prev_pts
先前过滤的帧的 PTS。如果未定义则为 NAN。
- prev_selected_pts
先前过滤的最后一个帧的 PTS。如果未定义则为 NAN。
- prev_selected_t
先前选择的最后一帧的 PTS,以秒为单位表示。如果未定义则为 NAN。
- start_pts
流中的第一个 PTS 不是 NAN。如果没有找到,它仍然是 NAN。
- start_t
流中非 NAN 的第一个 PTS(以秒为单位)。如果没有找到,它仍然是 NAN。
- pict_type (video only)
过滤帧的类型。它可以采用以下值之一:
- I
- P
- B
- S
- SI
- SP
- BI
- interlace_type (video only)
帧交错类型。它可以采用以下值之一:
- PROGRESSIVE
帧是逐行的(不是隔行的)。
- TOPFIRST
该帧是顶场优先。
- BOTTOMFIRST
该帧是底场优先的。
- consumed_sample_n (audio only)
当前帧之前选定的样本数
- samples_n (audio only)
当前帧中的样本数
- sample_rate (audio only)
输入采样率
- key
如果过滤后的帧是关键帧,则为 1,否则为 0。
- pos
已过滤帧在文件中的位置,如果信息不可用(例如对于合成视频),则为 -1;已弃用,请勿使用
- scene (video only)
0到1之间的值表示新场景;较低的值反映当前帧引入新场景的概率较低,而较高的值表示当前帧更有可能是一个新场景(请参见下面的示例)
- concatdec_select
concat 解复用器可以通过设置入点和出点来仅选择 concat 输入文件的一部分,但输出数据包可能不会完全包含在所选间隔中。通过使用此变量,可以跳过由串联解复用器生成的未完全包含在所选间隔中的帧。
这是通过将帧点与lavf.concat.start_time 和lavf.concat.duration数据包元数据值进行比较来实现的,这些值也存在于解码帧中。
如果帧pts 至少为 start_time 并且缺少持续时间元数据或帧 pts 小于 start_time + 持续时间,则 concatdec_select 变量为 -1,否则为 0,如果缺少 start_time 元数据,则 concatdec_select 变量为 NaN 。
这基本上意味着,如果输入帧的点位于连接解复用器设置的间隔内,则选择该输入帧。
选择表达式的默认值为“1”。
46.17.1 示例
- 选择输入中的所有帧:
select
上面的例子与下面的例子是一样的:
select=1
- 跳过所有帧:
select=0
- 仅选择 I 帧:
select='eq(pict_type\,I)'
- 每 100 选择一帧:
select='not(mod(n\,100))'
- 仅选择 10-20 时间间隔内包含的帧:
select=between(t\,10\,20)
- 仅选择 10-20 时间间隔内包含的 I 帧:
select=between(t\,10\,20)*eq(pict_type\,I)
- 选择最小距离为 10 秒的帧:
select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
- 使用 aselect 仅选择样本数 > 100 的音频帧:
aselect='gt(samples_n\,100)'
- 创建第一个场景的马赛克:
ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png
将场景与 0.3 到 0.5 之间的值进行 比较通常是一个明智的选择。
- 将偶数帧和奇数帧发送到单独的输出,然后组合它们:
select=n=2:e='mod(n, 2)+1' [odd][even]; [odd] pad=h=2*ih [tmp]; [tmp][even] overlay=y=h
- 从 ffconcat 文件中选择有用的帧,该文件使用入点和出点,但源文件不仅仅是内部帧。
ffmpeg -copyts -vsync 0 -segment_time_metadata 1 -i input.ffconcat -vf select=concatdec_select -af aselect=concatdec_select output.avi
46.18 sendcmd, asendcmd
将命令发送到过滤器图中的过滤器。
这些过滤器读取要发送到过滤器图中其他过滤器的命令。
sendcmd
必须插入两个视频过滤器之间,
asendcmd
必须插入两个音频过滤器之间,但除此之外,它们的行为方式相同。
命令的规范可以在带有命令选项的过滤器参数中提供,或者在由文件名选项指定的文件中 提供。
这些过滤器接受以下选项:
- commands, c
设置要读取并发送到其他过滤器的命令。
- filename, f
设置要读取并发送到其他过滤器的命令的文件名。
46.18.1 命令语法
命令描述由一系列间隔规范组成,其中包括当与该间隔相关的特定事件发生时要执行的命令列表。发生的事件通常是当前帧时间进入或离开给定时间间隔。
间隔由以下语法指定:
START[-END] COMMANDS;
时间间隔由START和END时间指定。 END是可选的,默认为最长时间。
如果当前帧时间包含在间隔 [ START , END ) 中,即时间大于或等于START且小于 END ,则认为当前帧时间在指定间隔内。
COMMANDS由一系列一个或多个命令规范组成,用“,”分隔,与该间隔相关。命令规范的语法由以下给出:
[FLAGS] TARGET COMMAND ARG
FLAGS是可选的,指定与能够发送指定命令的时间间隔相关的事件类型,并且必须是由“+”或“|”分隔的标识符标志的非空序列。并括在“[”和“]”之间。
可以识别以下标志:
- enter
当当前帧时间戳进入指定间隔时发送该命令。换句话说,当前一帧时间戳不在给定间隔内而当前帧时间戳在给定间隔内时发送该命令。
- leave
当当前帧时间戳离开指定间隔时发送该命令。换句话说,当前一帧时间戳位于给定间隔内而当前帧时间戳不在给定间隔内时发送命令。
- expr
命令ARG被解释为表达式,表达式的结果作为ARG传递。
该表达式通过 eval API 进行计算,并且可以包含以下常量:
- POS
帧文件中的原始位置,如果当前帧未定义,则未定义。已弃用,请勿使用。
- PTS
输入中的呈现时间戳。
- N
视频或音频输入帧的计数,从 0 开始。
- T
当前帧的时间(以秒为单位)。
- TS
当前命令间隔的开始时间(以秒为单位)。
- TE
当前命令间隔的结束时间(以秒为单位)。
- TI
当前命令间隔的插值时间,TI = (T - TS) / (TE - TS)。
- W
视频帧宽度。
- H
视频帧高度。
如果未指定FLAGS[enter]
,则假定为默认值。
TARGET指定命令的目标,通常是过滤器类的名称或特定过滤器实例名称。
COMMAND指定目标过滤器的命令名称。
ARG是可选的,指定给定COMMAND的可选参数列表。
在一个间隔规范与另一个间隔规范之间,空格或从行开始到行尾的字符序列#
将被忽略,并可用于注释注释。
命令规范语法的简化 BNF 描述如下:
COMMAND_FLAG ::= "enter" | "leave" COMMAND_FLAGS ::= COMMAND_FLAG [(+|"|")COMMAND_FLAG] COMMAND ::= ["[" COMMAND_FLAGS "]"] TARGET COMMAND [ARG] COMMANDS ::= COMMAND [,COMMANDS] INTERVAL ::= START[-END] COMMANDS INTERVALS ::= INTERVAL[;INTERVALS]
46.18.2 示例
- 指定第 4 秒处的音频速度变化:
asendcmd=c='4.0 atempo tempo 1.5',atempo
- 定位特定的过滤器实例:
asendcmd=c='4.0 atempo@my tempo 1.5',atempo@my
- 在文件中指定绘图文本和色调命令的列表。
# 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)
过滤器图允许读取和处理存储在文件中的上述命令列表测试命令,可以指定为:
sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue
46.19 setpts, asetpts
更改输入帧的 PTS(呈现时间戳)。
setpts
适用于视频帧、asetpts
音频帧。
该过滤器接受以下选项:
- expr
对每个帧进行评估以构造其时间戳的表达式。
该表达式通过 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
应用命令后第一帧的时间或如果没有命令则第一帧的时间。
46.19.1 示例
- 从零开始计算 PTS
setpts=PTS-STARTPTS
- 应用快动作效果:
setpts=0.5*PTS
- 应用慢动作效果:
setpts=2.0*PTS
- 设置固定速率为每秒 25 帧:
setpts=N/(25*TB)
- 设置固定速率 25 fps,带有一些抖动:
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
46.19.2 命令
两个过滤器都支持以上所有选项作为命令。
46.20 setrange
强制输出视频帧的颜色范围。
过滤setrange
器标记输出帧的颜色范围属性。它不会更改输入帧,而只会设置相应的属性,这会影响后续过滤器处理该帧的方式。
该过滤器接受以下选项:
- range
可用值为:
- ‘auto’
保持相同的颜色范围属性。
- ‘unspecified, unknown’
将颜色范围设置为未指定。
- ‘limited, tv, mpeg’
将颜色范围设置为有限。
- ‘full, pc, jpeg’
将颜色范围设置为完整。
46.21 settb, asettb
设置用于输出帧时间戳的时基。它主要用于测试时基配置。
它接受以下参数:
- expr, tb
计算输出时基的表达式。
的价值待定是代表有理数的算术表达式。该表达式可以包含常量“AVTB”(默认时基)、“intb”(输入时基)和“sr”(采样率,仅限音频)。默认值为“intb”。
46.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
46.22 showcqt
使用带有直接频域系数计算的 Brown-Puckette 常数 Q 变换算法,将输入音频转换为对数表示频谱的视频输出(但变换本身并不是真正的常数 Q,而是 Q 因子实际上是可变/钳位的),具有音乐音调等级,从 E0 到 D#10。
该过滤器接受以下选项:
- size, s
指定输出的视频大小。一定是均匀的。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为
1920x1080
。- fps, rate, r
设置输出帧速率。默认值为
25
。- bar_h
设置条形图高度。一定是均匀的。默认值是
-1
自动计算条形图高度。- axis_h
设置轴高度。一定是均匀的。默认值是
-1
自动计算轴高度。- sono_h
设置超声图高度。一定是均匀的。默认值是
-1
自动计算超声图高度。- fullhd
设置全高清分辨率。此选项已弃用,请使用size , s 代替。默认值为
1
。- sono_v, volume
指定声波图体积表达式。它可以包含变量:
- bar_v
bar_v计算表达式
- frequency, freq, f
评估频率
- timeclamp, tc
timeclamp选项 的值
和功能:
- 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
timeclamp选项 的值
和功能:
- 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
timeclamp选项的值。
默认值为
384*tc/(384+tc*f)
。- count
指定每个视频帧的变换计数。默认值为
6
。可接受的范围是[1, 30]
.- fcount
指定每个像素的变换计数。默认值为
0
,这使得它自动计算。可接受的范围是[0, 10]
.- fontfile
指定与 freetype 一起使用的字体文件来绘制轴。如果没有指定,则使用嵌入字体。请注意,使用字体文件或嵌入字体进行绘图不是使用自定义basefreq和endfreq实现的,而是使用axisfile 选项。
- font
指定字体配置模式。它的优先级低于fontfile。模式
:
中的 可以替换为|
以避免不必要的转义。- fontcolor
指定字体颜色表达。这是应返回整数值 0xRRGGBB 的算术表达式。它可以包含变量:
- frequency, freq, f
评估频率
- timeclamp, tc
timeclamp选项 的值
和功能:
- 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’
美国联邦通信委员会
- ‘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
.
46.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-note 为绿色,其他为蓝色:
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
46.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
赫兹。- max
设置输出中使用的最大频率。默认值为
20000
赫兹。实际频率上限取决于输入音频的采样率,当该值设置为大于奈奎斯特频率时,将强制执行该值。- 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
。
46.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
设置处理音频时要使用的通道。默认情况下,所有内容都会被处理。
46.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
设置输出帧率。
46.26 showspectrum
将输入音频转换为视频输出,表示音频频谱。
该过滤器接受以下选项:
- size, s
指定输出的视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为
640x512
。- slide
指定光谱应如何沿着窗口滑动。
它接受以下值:
- ‘replace’
当样本到达右侧时,样本再次从左侧开始
- ‘scroll’
样本从右向左滚动
- ‘fullframe’
仅当样本到达右侧时才产生框架
- ‘rscroll’
样本从左向右滚动
- ‘lreplace’
当样本到达左侧时,样本再次从右侧开始
默认值为
replace
。- mode
指定显示模式。
它接受以下值:
- ‘combined’
所有通道显示在同一行
- ‘separate’
所有通道均显示在单独的行中
默认值为 '合并的'。
- color
指定显示颜色模式。
它接受以下值:
- ‘channel’
每个通道以单独的颜色显示
- ‘intensity’
每个通道都使用相同的配色方案显示
- ‘rainbow’
每个通道均使用彩虹配色方案显示
- ‘moreland’
每个通道均使用 Moreland 配色方案显示
- ‘nebulae’
每个通道均使用星云配色方案显示
- ‘fire’
每个通道均使用火色方案显示
- ‘fiery’
每个通道都使用火热的配色方案显示
- ‘fruit’
每个通道都使用水果配色方案显示
- ‘cool’
每个通道都使用冷色调显示
- ‘magma’
每个通道均使用岩浆配色方案显示
- ‘green’
每个通道均使用绿色配色方案显示
- ‘viridis’
每个通道均使用 viridis 配色方案显示
- ‘plasma’
每个通道均使用等离子配色方案显示
- ‘cividis’
每个通道均使用 cividis 配色方案显示
- ‘terrain’
每个通道都使用地形颜色方案显示
默认值为 '渠道'。
- scale
指定用于计算强度颜色值的比例。
它接受以下值:
- ‘lin’
线性
- ‘sqrt’
平方根,默认
- ‘cbrt’
立方根
- ‘log’
对数
- ‘4thrt’
第四根
- ‘5thrt’
五次方根
默认值为 '开方'。
- fscale
指定频率范围。
它接受以下值:
- ‘lin’
线性
- ‘log’
对数
默认值为 '林'。
- 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过滤器非常相似;请参阅该部分中的示例。
46.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]'
46.27 showspectrumpic
将输入音频转换为单个视频帧,表示音频频谱。
该过滤器接受以下选项:
- size, s
指定输出的视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为
4096x2048
。- mode
指定显示模式。
它接受以下值:
- ‘combined’
所有通道显示在同一行
- ‘separate’
所有通道均显示在单独的行中
默认值为 '合并的'。
- color
指定显示颜色模式。
它接受以下值:
- ‘channel’
每个通道以单独的颜色显示
- ‘intensity’
每个通道都使用相同的配色方案显示
- ‘rainbow’
每个通道均使用彩虹配色方案显示
- ‘moreland’
每个通道均使用 Moreland 配色方案显示
- ‘nebulae’
每个通道均使用星云配色方案显示
- ‘fire’
每个通道均使用火色方案显示
- ‘fiery’
每个通道都使用火热的配色方案显示
- ‘fruit’
每个通道都使用水果配色方案显示
- ‘cool’
每个通道都使用冷色调显示
- ‘magma’
每个通道均使用岩浆配色方案显示
- ‘green’
每个通道均使用绿色配色方案显示
- ‘viridis’
每个通道均使用 viridis 配色方案显示
- ‘plasma’
每个通道均使用等离子配色方案显示
- ‘cividis’
每个通道均使用 cividis 配色方案显示
- ‘terrain’
每个通道都使用地形颜色方案显示
默认值为 '强度'。
- scale
指定用于计算强度颜色值的比例。
它接受以下值:
- ‘lin’
线性
- ‘sqrt’
平方根,默认
- ‘cbrt’
立方根
- ‘log’
对数
- ‘4thrt’
第四根
- ‘5thrt’
五次方根
默认值为 '日志'。
- fscale
指定频率范围。
它接受以下值:
- ‘lin’
线性
- ‘log’
对数
默认值为 '林'。
- 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 分量的像素格式输出时设置不透明度强度。
46.27.1 示例
- 使用以下命令提取 1024x1024 图片中整个音轨的音频频谱图
ffmpeg
:ffmpeg -i audio.flac -lavfi showspectrumpic=s=1024x1024 spectrogram.png
46.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
46.29 showwaves
将输入音频转换为视频输出,表示样本波。
该过滤器接受以下选项:
- size, s
指定输出的视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为
600x240
。- mode
设置显示模式。
可用值为:
- ‘point’
为每个样本画一个点。
- ‘line’
为每个样本画一条垂直线。
- ‘p2p’
为每个样本画一个点并在它们之间画一条线。
- ‘cline’
为每个样本绘制一条居中垂直线。
默认值为
point
。- n
设置同一列上打印的样本数。较大的值将降低帧速率。必须是正整数。 仅当未明确指定 速率值时才能设置此选项。
- rate, r
设置(近似)输出帧速率。这是通过设置选项n来完成的。默认值为“25”。
- split_channels
设置通道是否应单独绘制或重叠。默认值为 0。
- colors
设置颜色,以“|”分隔 将用于绘制每个通道。
- scale
设置幅度刻度。
可用值为:
- ‘lin’
线性。
- ‘log’
对数。
- ‘sqrt’
平方根。
- ‘cbrt’
立方根。
默认为线性。
- draw
设置绘图模式。这对于设置高n非常有用。
可用值为:
- ‘scale’
缩放每个绘制样本的像素值。
- ‘full’
直接绘制每个样本。
默认值为
scale
。
46.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]
46.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
。
46.30.1 示例
- 使用以下命令提取 1024x800 图片中整个音轨波形的通道分割表示
ffmpeg
:ffmpeg -i audio.flac -lavfi showwavespic=split_channels=1:s=1024x800 waveform.png
46.31 sidedata, asidedata
删除帧侧数据,或根据它选择帧。
该过滤器接受以下选项:
- mode
设置过滤器的操作模式。
可以是以下之一:
- ‘select’
选择边数据为 的每一帧
type
。- ‘delete’
删除 的辅助数据
type
。如果type
未设置,则删除帧中的所有侧面数据。
- type
设置与所有模式一起使用的侧面数据类型。必须设置为
select
模式。有关帧端数据类型的列表,请参阅AVFrameSideDataType
中的枚举libavutil/frame.h。例如,要选择AV_FRAME_DATA_PANSCAN
辅助数据,您必须指定PANSCAN
。
46.32 spectrumsynth
从 2 个输入视频频谱合成音频,第一个输入流表示随时间变化的幅度,第二个输入流表示随时间变化的相位。滤波器将从视频中显示的频域转换回音频输出中显示的时域。
该滤波器主要是为了反转处理后的频谱
滤波器输出而创建的,但也可以从其他频谱图中合成声音。但在这种情况下,如果相位数据不可用,结果将会很差,因为在这种情况下需要重新创建相位数据,通常只是从随机噪声中重新创建。为了获得最佳结果,请仅使用灰色输出(显示频谱channel
过滤器中的颜色模式
)以及幅度视频的比例和
相位视频的比例。要生成第二个视频的阶段,请使用
选项。输入视频通常应使用
幻灯片模式,因为这样可以节省解码视频所需的资源。
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
.
46.32.1 示例
- 首先从音频创建幅度和相位视频,假设音频是具有 44100 采样率的立体声,然后使用 SpectrumSynth 将视频重新合成回音频:
ffmpeg -i input.flac -lavfi showspectrum=mode=separate:scale=log:overlap=0.875:color=channel:slide=fullframe:data=magnitude -an -c:v rawvideo magnitude.nut ffmpeg -i input.flac -lavfi showspectrum=mode=separate:scale=lin:overlap=0.875:color=channel:slide=fullframe:data=phase -an -c:v rawvideo phase.nut ffmpeg -i magnitude.nut -i phase.nut -lavfi spectrumsynth=channels=2:sample_rate=44100:win_func=hann:overlap=0.875:slide=fullframe output.flac
46.33 split, asplit
将输入分成几个相同的输出。
asplit
适用于音频输入split
和视频。
该过滤器接受一个指定输出数量的参数。如果未指定,则默认为 2。
46.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
46.34 zmq, azmq
接收通过 libzmq 客户端发送的命令,并将它们转发到过滤器图中的过滤器。
zmq
并azmq
作为直通滤波器工作。zmq
必须插入两个视频过滤器之间、azmq
两个音频过滤器之间。两者都能够将消息发送到任何过滤器类型。
要启用这些过滤器,您需要安装 libzmq 库和标头,并使用--enable-libzmq
.
有关 libzmq 的更多信息,请参阅: http: //www.zeromq.org/
和过滤器作为 libzmq 服务器工作,它接收通过由 定义的网络接口发送的
zmq
消息azmq
绑定地址(或缩写“乙") 选项。该选项的默认值为tcp://本地主机:5555。您可能想根据需要更改此值,但不要忘记转义任何“:”符号(请参阅filtergraph转义)。
收到的消息必须采用以下形式:
TARGET COMMAND [ARG]
TARGET指定命令的目标,通常是过滤器类的名称或特定过滤器实例名称。默认过滤器实例名称使用模式 '已解析_<过滤器名称>_<索引>',但您可以使用 ' 来覆盖它过滤器名称@id' 语法(请参阅Filtergraph 语法)。
COMMAND指定目标过滤器的命令名称。
ARG是可选的,指定给定COMMAND 的可选参数列表。
收到消息后,将处理该消息并将相应的命令注入到过滤器图中。根据结果,过滤器将向客户端发送答复,采用以下格式:
ERROR_CODE ERROR_REASON MESSAGE
消息是可选的。
46.34.1 示例
看着工具/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
47 多媒体源
以下是当前可用的多媒体源的描述。
47.1 amovie
这与电影源相同,只是它默认选择音频流。
47.2 avsynctest
生成音频/视频同步测试。
生成的流定期显示 Flash 视频帧并发出音频蜂鸣声。对于检查 A/V 同步问题很有用。
它接受以下选项:
- 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
设置前景色/背景色/附加颜色。
47.2.1 命令
该源支持上述一些选项作为命令。
47.3 movie
从电影容器中读取音频和/或视频流。
它接受以下参数:
- filename
要读取的资源的名称(不一定是文件;也可以是通过某种协议访问的设备或流)。
- format_name, f
指定电影读取的格式,可以是容器的名称或输入设备的名称。如果未指定,则从movie_name或通过探测 猜测格式。
- seek_point, sp
指定搜索点(以秒为单位)。将从该搜索点开始输出帧。该参数通过 进行计算
av_strtod
,因此数值可能会带有 IS 后缀。默认值为“0”。- streams, s
指定要读取的流。可以指定多个流,用“+”分隔。然后,源将按照相同的顺序拥有尽可能多的输出。语法在ffmpeg 手册的 (ffmpeg)“流说明符”部分中有解释。两个特殊名称“dv”和“da”分别指定默认(最适合)的视频和音频流。默认为“dv”,如果过滤器名为“amovie”,则默认为“da”。
- stream_index, si
指定要读取的视频流的索引。如果值为-1,将自动选择最合适的视频流。默认值为“-1”。已弃用。如果过滤器名为“amovie”,它将选择音频而不是视频。
- loop
指定按顺序读取流的次数。如果值为 0,则流将无限循环。默认值为“1”。
请注意,当电影循环播放时,源时间戳不会更改,因此它将生成非单调递增的时间戳。
- discontinuity
指定帧之间的时间差,超过该时间差的点将被视为时间戳不连续性,可通过调整后面的时间戳来消除。
- dec_threads
指定解码线程数
- format_opts
指定打开文件的格式选项。格式选项可以指定为由“:”分隔的键=值对的列表。以下示例显示如何添加protocol_whitelist和protocol_blacklist选项:
ffplay -f lavfi "movie=filename='1.sdp':format_opts='protocol_whitelist=file,rtp,udp\:protocol_blacklist=http'"
它允许在过滤器图的主输入之上叠加第二个视频,如下图所示:
input -----------> deltapts0 --> overlay --> output ^ | movie --> scale--> deltapts1 -------+
47.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”的 pad,音频连接到名为“audio”的 pad:
movie=dvd.vob:s=v:0+#0x81 [video] [audio]
47.3.2 命令
movie 和 amovie 都支持以下命令:
- seek
使用“av_seek_frame”执行搜索。语法是:seekstream_index | 时间戳| 旗帜
- stream_index:如果stream_index为-1,则选择默认流,并且时间戳会自动从AV_TIME_BASE单位转换为流特定的time_base。
- timestamp:以 AVStream.time_base 为单位的时间戳,或者如果未指定流,则以 AV_TIME_BASE 为单位。
- flags:选择方向和搜索模式的标志。
- get_duration
获取以 AV_TIME_BASE 为单位的电影时长。
48 外部库
FFmpeg 可以与许多外部库连接以添加对更多格式的支持。默认情况下,它们都不被使用,必须通过将适当的标志传递给 来显式请求它们的使用
./configure
。
48.1 Alliance for Open Media (AOM)
FFmpeg 可以利用 AOM 库进行 AV1 解码和编码。
访问http://aomedia.org/并按照安装该库的说明进行操作。然后传递--enable-libaom
给configure以启用它。
48.2 AMD AMF/VCE
FFmpeg 可以使用 AMD 高级媒体框架库在具有视频编码引擎 (VCE) 的硬件上加速 H.264 和 HEVC(仅限 Windows)编码。
要启用支持,您必须从https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git获取 AMF 框架头文件(版本 1.4.9+) 。
AMF/
在系统包含路径中创建一个目录。将 的内容复制AMF/amf/public/include/
到该目录中。然后使用 FFmpeg 配置--enable-amf
。
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 脚本安装此驱动程序。
48.3 AviSynth
FFmpeg 可以读取 AviSynth 脚本作为输入。要启用支持,请
在安装AviSynth+--enable-avisynth
提供的标头后传递给 configure 。可以将 AviSynth+ 配置为仅安装标头,方法是传递到正常的基于 CMake 的构建系统,或使用提供的.
-DHEADERS_ONLY:bool=on
GNUmakefile
对于 Windows,支持的 AviSynth 变体为 32 位版本的 AviSynth 2.6 RC1 或更高版本,以及32 位和 64 位版本的 AviSynth+ r1718 或更高版本。
对于 Linux、macOS 和 BSD,唯一支持的 AviSynth 变体是 AviSynth+,从版本 3.5 开始。
2016 年,AviSynth+ 添加了对使用 GCC 进行构建的支持。然而,由于 Windows 调用约定的怪异,AviSynth+ 的 32 位 GCC 版本与 FFmpeg 的典型 32 位版本不兼容。
默认情况下,FFmpeg 假定与 AviSynth+ 的 32 位 MSVC 构建兼容,因为这是最广泛使用和根深蒂固的构建配置。-DAVSC_WIN32_GCC32
用户可以覆盖此设置,并通过
在配置 FFmpeg 时传递 来启用对 AviSynth+ 32 位 GCC 版本的支持--extra-cflags
。
FFmpeg 的 64 位版本不受影响,并且可以使用 AviSynth+ 的 MSVC 或 GCC 版本,无需任何特殊标志。
AviSynth(+) 是动态加载的。分销商可以使用 构建 FFmpeg --enable-avisynth
,并且无论最终用户是否安装了 AviSynth,二进制文件都可以正常工作。如果/当最终用户想要使用 AviSynth 脚本时,他们可以安装 AviSynth(+),FFmpeg 将能够找到并使用它来打开脚本。
48.4 Chromaprint
FFmpeg 可以利用 Chromaprint 库来生成音频指纹。传递--enable-chromaprint
给配置以启用它。请参阅https://acoustid.org/chromaprint。
48.5 codec2
FFmpeg可以利用codec2库进行codec2解码和编码。目前没有原生解码器,所以必须使用libcodec2进行解码。
访问http://freedv.org/,下载“Codec 2 源存档”。使用 CMake 构建并安装。Debian 用户可以安装 libcodec2-dev 软件包。安装 libcodec2 后,您可以--enable-libcodec2
通过配置来启用它。
使用 codec2 的最简单方法是使用 .c2 文件,因为它们包含解码所需的模式信息。要编码此类文件,请使用 .c2 文件扩展名并为 libcodec2 编码器提供 -mode 选项:
ffmpeg -i input.wav -mode 700C output.c2
。播放就这么简单ffplay output.c2
。要获取支持模式的列表,请运行ffmpeg -h encoder=libcodec2
。还支持原始编解码器2 文件。为了理解它们,需要将使用的模式指定为格式选项:
ffmpeg -f codec2raw -mode 1300 -i input.raw output.wav
。
48.6 dav1d
FFmpeg 可以利用 dav1d 库进行 AV1 视频解码。
转至https://code.videolan.org/videolan/dav1d并按照安装该库的说明进行操作。然后传递--enable-libdav1d
给configure以启用它。
48.7 davs2
FFmpeg 可以利用 davs2 库进行 AVS2-P2/IEEE1857.4 视频解码。
转到https://github.com/pkuvcl/davs2并按照安装该库的说明进行操作。然后传递--enable-libdavs2
给configure以启用它。
libdavs2 采用 GNU 公共许可证版本 2 或更高版本(详细信息请参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级到 GPL 才能使用它。
48.8 uavs3d
FFmpeg 可以利用 uavs3d 库进行 AVS3-P2/IEEE1857.10 视频解码。
访问https://github.com/uavs3/uavs3d并按照安装库的说明进行操作。然后传递--enable-libuavs3d
给configure以启用它。
48.9 Game Music Emu
FFmpeg 可以利用 Game Music Emu 库从支持的视频游戏音乐文件格式读取音频。传递--enable-libgme
给配置以启用它。请参阅https://bitbucket.org/mpyne/game-music-emu/overview。
48.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
文件。
48.11 Kvazaar
FFmpeg 可以利用 Kvazaar 库进行 HEVC 编码。
访问https://github.com/ultravideo/kvazaar并按照安装库的说明进行操作。然后传递
--enable-libkvazaar
给configure以启用它。
48.12 LAME
FFmpeg 可以利用 LAME 库进行 MP3 编码。
访问http://lame.sourceforge.net/并按照说明安装该库。然后传递--enable-libmp3lame
给configure以启用它。
48.13 libilbc
iLBC 是一种窄带语音编解码器,作为 WebRTC 项目的一部分由 Google 免费提供。libilbc 是 iLBC 编解码器的打包友好副本。FFmpeg 可以利用 libilbc 库进行 iLBC 解码和编码。
转到https://github.com/TimothyGu/libilbc并按照安装该库的说明进行操作。然后传递--enable-libilbc
给configure以启用它。
48.14 libjxl
JPEG XL 是一种图像格式,旨在完全取代传统 JPEG,以延长其使用寿命。请参阅https://jpegxl.info/了解更多信息,并参阅
https://github.com/libjxl/libjxl了解库源。您可以传递
--enable-libjxl
到configure以启用libjxl包装器。
48.15 libvpx
FFmpeg 可以利用 libvpx 库进行 VP8/VP9 解码和编码。
访问http://www.webmproject.org/并按照安装该库的说明进行操作。然后传递--enable-libvpx
给configure以启用它。
48.16 ModPlug
FFmpeg 可以利用这个源自 Modplug-XMMS 的库来读取类似 MOD 的音乐文件。请参阅https://github.com/Konstanty/libmodplug。传递--enable-libmodplug
给配置以启用它。
48.17 OpenCORE, VisualOn, and Fraunhofer libraries
OpenCore、VisualOn 和 Fraunhofer 库源自 Google Android 源代码,为多种音频编解码器提供编码器。
OpenCORE 和 VisualOn 库采用 Apache License 2.0(详细信息请参见http://www.apache.org/licenses/LICENSE-2.0 ),与 LGPL 版本 2.1 和 GPL 版本 2 不兼容。您必须升级 FFmpeg 的许可证通过传递配置来使用 LGPL 版本 3(或者如果您已启用 GPL 组件,--enable-version3
则为 GPL 版本 3)。
Fraunhofer AAC 库的许可证与 GPL 不兼容。因此,对于 GPL 版本,您必须传递--enable-nonfree
配置才能使用它。据我们所知,它与 LGPL 兼容。
48.17.1 OpenCORE AMR
FFmpeg 可以利用 OpenCORE 库进行 AMR-NB 解码/编码和 AMR-WB 解码。
转至http://sourceforge.net/projects/opencore-amr/并按照安装库的说明进行操作。然后通过--enable-libopencore-amrnb
和/或
--enable-libopencore-amrwb
配置来启用它们。
48.17.2 VisualOn AMR-WB 编码器库
FFmpeg 可以利用 VisualOn AMR-WBenc 库进行 AMR-WB 编码。
转至http://sourceforge.net/projects/opencore-amr/并按照安装该库的说明进行操作。然后传递--enable-libvo-amrwbenc
给configure以启用它。
48.17.3 弗劳恩霍夫 AAC 库
FFmpeg 可以利用 Fraunhofer AAC 库进行 AAC 解码和编码。
转至http://sourceforge.net/projects/opencore-amr/并按照安装该库的说明进行操作。然后传递--enable-libfdk-aac
给configure以启用它。
48.18 OpenH264
FFmpeg 可以利用 OpenH264 库进行 H.264 解码和编码。
访问http://www.openh264.org/并按照安装该库的说明进行操作。然后传递--enable-libopenh264
给configure以启用它。
对于解码来说,这个库比 libavcodec 中内置的解码器要有限得多;目前,该库缺乏对 B 帧解码和其他一些主要/重要功能的支持。(它目前仅支持约束基线配置文件和 CABAC。)使用它主要用于测试和利用 Cisco 的专利组合许可证 ( http://www.openh264.org/BINARY_LICENSE.txt )。
48.19 OpenJPEG
FFmpeg 可以使用 OpenJPEG 库对 J2K 视频进行解码/编码。转至
http://www.openjpeg.org/获取库并按照安装说明进行操作。要在 FFmpeg 中启用 OpenJPEG,请传递--enable-libopenjpeg
到
。/配置。
48.20 rav1e
FFmpeg 可以通过其 C 绑定使用 rav1e(Rust AV1 编码器)来编码视频。访问https://github.com/xiph/rav1e/并按照说明构建 C 库。要在 FFmpeg 中启用 rav1e,请传递--enable-librav1e
到。/配置。
48.21 SVT-AV1
FFmpeg 可以利用 Scalable Video Technology for AV1 库进行 AV1 编码。
访问https://gitlab.com/AOMediaCodec/SVT-AV1/并按照安装库的说明进行操作。然后传递--enable-libsvtav1
给configure以启用它。
48.22 TwoLAME
FFmpeg 可以利用 TwoLAME 库进行 MP2 编码。
访问http://www.twolame.org/并按照安装该库的说明进行操作。然后传递--enable-libtwolame
给configure以启用它。
48.23 VapourSynth
FFmpeg 可以读取 VapourSynth 脚本作为输入。要启用支持,请传递
--enable-vapoursynth
到配置。Vapoursynth 通过检测
pkg-config
。支持版本 42 或更高版本。请参阅http://www.vapoursynth.com/。
出于安全考虑,Vapoursynth 脚本不会被自动检测,因此必须强制输入格式。对于 ff* CLI 工具,请-f vapoursynth
在输入之前添加-i yourscript.vpy
.
48.24 x264
FFmpeg 可以利用 x264 库进行 H.264 编码。
转至http://www.videolan.org/developers/x264.html并按照安装该库的说明进行操作。然后传递--enable-libx264
给configure以启用它。
x264 遵循 GNU 公共许可证版本 2 或更高版本(详细信息请参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级到 GPL 才能使用它。
48.25 x265
FFmpeg 可以利用 x265 库进行 HEVC 编码。
转至http://x265.org/developers.html并按照安装该库的说明进行操作。然后传递--enable-libx265
给configure以启用它。
x265 遵循 GNU 公共许可证版本 2 或更高版本(详细信息请参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级为 GPL 才能使用它。
48.26 xavs
FFmpeg 可以利用 xavs 库进行 AVS 编码。
转至http://xavs.sf.net/并按照安装该库的说明进行操作。然后传递--enable-libxavs
给configure以启用它。
48.27 xavs2
FFmpeg 可以利用 xavs2 库进行 AVS2-P2/IEEE1857.4 视频编码。
转到https://github.com/pkuvcl/xavs2并按照安装该库的说明进行操作。然后传递--enable-libxavs2
给configure以启用它。
libxavs2 采用 GNU 公共许可证版本 2 或更高版本(详细信息请参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级到 GPL 才能使用它。
48.28 ZVBI
ZVBI是一个VBI解码库,FFmpeg可以使用它来解码DVB图文电视页面和DVB图文电视字幕。
转至http://sourceforge.net/projects/zapping/并按照安装该库的说明进行操作。然后传递--enable-libzvbi
给configure以启用它。
49 支持的文件格式、编解码器或功能
您可以使用-formats
和-codecs
选项来获得详尽的列表。
49.1 File Formats
FFmpeg 通过库支持以下文件格式libavformat
:
Name | 编码 | 解码 | 评论 |
3dostr | X | ||
4xm | X | 4X Technologies 格式,用于某些游戏。 | |
8088flex TMV | X | ||
AAX | X | Audible 增强音频格式,用于有声读物。 | |
AA | X | 有声格式 2、3 和 4,用于有声读物。 | |
ACT Voice | X | 包含 G.729 音频 | |
Adobe Filmstrip | X | X | |
Audio IFF (AIFF) | X | X | |
American Laser Games MM | X | Mad Dog McCree 等游戏中使用的多媒体格式。 | |
3GPP AMR | X | X | |
Amazing Studio Packed Animation File | X | 游戏《黑暗之心》中使用的多媒体格式。 | |
Apple HTTP Live Streaming | X | ||
Artworx Data Format | X | ||
Interplay ACM | X | 某些 Interplay 游戏中使用的纯音频格式。 | |
ADP | X | Nintendo Gamecube 使用的音频格式。 | |
AFC | X | Nintendo Gamecube 使用的音频格式。 | |
ADS/SS2 | X | PS2 上使用的音频格式。 | |
APNG | X | X | |
ASF | X | X | 高级/活动流格式。 |
AST | X | X | Nintendo 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 的一些游戏。 | |
Binary text | X | ||
Bink | X | 许多游戏使用的多媒体格式。 | |
Bink Audio | X | 某些游戏使用的纯音频多媒体格式。 | |
Bitmap Brothers JV | X | 用于Z和Z95游戏。 | |
BRP | X | 阿尔戈英雄游戏格式。 | |
Brute Force & Ignorance | X | 用于游戏《Flash Traffic:天使之城》。 | |
BFSTM | X | Nintendo WiiU 上使用的音频格式(基于 BRSTM)。 | |
BRSTM | X | Nintendo Wii 上使用的音频格式。 | |
BW64 | X | 广播波 64 位。 | |
BWF | X | X | |
codec2 (raw) | X | X | 必须给出 -mode 格式选项才能正确解码。 |
codec2 (.c2 files) | 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 游戏使用的多媒体格式。 | |
Digital Speech Standard (DSS) | X | ||
CD+G | X | CD+G 卡拉 OK 光盘使用的视频格式 | |
Phantom Cine | X | ||
Commodore CDXL | X | Amiga CD 视频格式 | |
Core Audio Format | X | X | 苹果核心音频格式 |
CRC testing format | X | ||
Creative Voice | X | X | 专为 Sound Blaster Pro 创建。 |
CRYO APC | X | CRYO Interactive Entertainment 在某些游戏中使用的音频格式。 | |
D-Cinema audio | X | X | |
Deluxe Paint Animation | X | ||
DCSTR | X | ||
DFA | X | 此格式用于 Chronomaster 游戏 | |
DirectDraw Surface | X | ||
DSD Stream File (DSF) | X | ||
DV video | X | X | |
DXA | X | 此格式用于非 Windows 版本的 Feeble Files 游戏以及重新打包以与 ScummVM 一起使用的不同游戏过场动画。 | |
Electronic Arts cdata | X | ||
Electronic Arts Multimedia | X | 用于各种EA游戏;文件具有 WVE 和 UV2 等扩展名。 | |
Ensoniq Paris Audio File | X | ||
FFM (FFserver live feed) | X | X | |
Flash (SWF) | X | X | |
Flash 9 (AVM2) | X | X | 仅解码嵌入的音频。 |
FLI/FLC/FLX animation | X | .fli/.flc 文件 | |
Flash Video (FLV) | X | X | Macromedia Flash 视频文件 |
framecrc testing format | X | ||
FunCom ISS | X | FunCom 的各种游戏(例如《最长的旅程》)中使用的音频格式。 | |
G.723.1 | X | X | |
G.726 | X | 左对齐和右对齐。 | |
G.729 BIT | X | X | |
G.729 raw | X | ||
GENH | X | 各种游戏的音频格式。 | |
GIF Animation | X | X | |
GXF | X | X | 通用交换格式 SMPTE 360M,由 Thomson Grass Valley 播放服务器使用。 |
HNM | X | 仅支持版本 4,用于 Cryo Interactive 的某些游戏 | |
iCEDraw File | X | ||
ICO | X | X | 微软Windows ICO |
id Quake II CIN video | X | ||
id RoQ | X | X | 用于《雷神之锤 III》、《绝地武士 2》等电脑游戏。 |
IEC61937 encapsulation | 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 使用的格式 |
Internet Video Recording | 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 Video (MLV) | X | ||
Matroska | X | X | |
Matroska audio | X | ||
FFmpeg metadata | X | X | 文本格式的元数据。 |
MAXIS XA | X | 用于模拟城市3000;文件扩展名 .xa。 | |
MCA | X | 用于Capcom的一些游戏;文件扩展名 .mca。 | |
MD Studio | X | ||
Metal Gear Solid: The Twin Snakes | 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 System | X | X | 音视频混合,支持VCD格式 |
MPEG-PS (program stream) | X | X | 也称为VOB 文件,支持 SVCD 和 DVD 格式 |
MPEG-TS (transport stream) | X | X | 也称为 DVB 传输流 |
MPEG-4 | X | X | MPEG-4 是 QuickTime 的变体。 |
MSF | X | PS3 上使用的音频格式。 | |
Mirillis FIC video | X | 无光标渲染。 | |
MIDI Sample Dump Standard | X | ||
MIME multipart JPEG | X | ||
MSN TCP webcam | X | 由 MSN Messenger 网络摄像头流使用。 | |
MTV | X | ||
Musepack | X | ||
Musepack SV8 | X | ||
Material eXchange Format (MXF) | X | X | SMPTE 377M,D-Cinema、广播行业使用。 |
Material eXchange Format (MXF), D-10 Mapping | X | X | SMPTE 386M、D-10/IMX 映射。 |
NC camera feed | X | NC (AVIP NC4600) 摄像机流 | |
NIST SPeech HEader REsources | X | ||
Computerized Speech Lab NSP | X | ||
NTT TwinVQ (VQF) | X | 日本电报电话公司 TwinVQ。 | |
Nullsoft Streaming Video | X | ||
NuppelVideo | X | ||
NUT | X | X | NUT 开放容器格式 |
Ogg | X | X | |
Playstation Portable PMP | X | ||
Portable Voice Format | X | ||
RK Audio (RKA) | X | ||
TechnoTrend PVA | X | 由 TechnoTrend DVB PCI 板使用。 | |
QCP | X | ||
raw ADTS (AAC) | X | X | |
raw AC-3 | X | X | |
raw AMR-NB | X | ||
raw AMR-WB | X | ||
raw APAC | X | ||
raw aptX | X | X | |
raw aptX HD | X | X | |
raw Bonk | X | ||
raw Chinese AVS video | X | X | |
raw DFPWM | X | X | |
raw Dirac | X | X | |
raw DNxHD | X | X | |
raw DTS | X | X | |
raw DTS-HD | X | ||
raw E-AC-3 | X | X | |
raw FLAC | X | X | |
raw GSM | X | ||
raw H.261 | X | X | |
raw H.263 | X | X | |
raw H.264 | X | X | |
raw HEVC | X | X | |
raw Ingenient MJPEG | X | ||
raw MJPEG | X | X | |
raw MLP | X | ||
raw MPEG | X | ||
raw MPEG-1 | X | ||
raw MPEG-2 | X | ||
raw MPEG-4 | X | X | |
raw NULL | X | ||
raw video | X | X | |
raw id RoQ | X | ||
raw OBU | X | X | |
raw OSQ | X | ||
raw SBC | X | X | |
raw Shorten | X | ||
raw TAK | X | ||
raw TrueHD | X | X | |
raw VC-1 | X | X | |
raw PCM A-law | X | X | |
raw PCM mu-law | X | X | |
raw PCM Archimedes VIDC | X | X | |
raw PCM signed 8 bit | X | X | |
raw PCM signed 16 bit big-endian | X | X | |
raw PCM signed 16 bit little-endian | X | X | |
raw PCM signed 24 bit big-endian | X | X | |
raw PCM signed 24 bit little-endian | X | X | |
raw PCM signed 32 bit big-endian | X | X | |
raw PCM signed 32 bit little-endian | X | X | |
raw PCM signed 64 bit big-endian | X | X | |
raw PCM signed 64 bit little-endian | X | X | |
raw PCM unsigned 8 bit | X | X | |
raw PCM unsigned 16 bit big-endian | X | X | |
raw PCM unsigned 16 bit little-endian | X | X | |
raw PCM unsigned 24 bit big-endian | X | X | |
raw PCM unsigned 24 bit little-endian | X | X | |
raw PCM unsigned 32 bit big-endian | X | X | |
raw PCM unsigned 32 bit little-endian | X | X | |
raw PCM 16.8 floating point little-endian | X | ||
raw PCM 24.0 floating point little-endian | X | ||
raw PCM floating-point 32 bit big-endian | X | X | |
raw PCM floating-point 32 bit little-endian | X | X | |
raw PCM floating-point 64 bit big-endian | X | X | |
raw PCM floating-point 64 bit little-endian | X | X | |
RDT | X | ||
REDCODE R3D | X | RED 数码相机使用的文件格式,包含 JPEG 2000 帧和 PCM 音频。 | |
RealMedia | X | X | |
Redirector | X | ||
RedSpark | X | ||
Renderware TeXture Dictionary | X | ||
Resolume DXV | X | ||
RF64 | X | ||
RL2 | X | 娱乐软件合作伙伴在某些游戏中使用的音频和视频格式。 | |
RPL/ARMovie | X | ||
Lego Mindstorms RSO | X | X | |
RSD | X | ||
RTMP | X | X | 通过将流发布到RTMP服务器来执行输出 |
RTP | X | X | |
RTSP | X | X | |
Sample Dump eXchange | X | ||
SAP | X | X | |
SBG | X | ||
SDNS | X | ||
SDP | X | ||
SER | X | ||
Digital Pictures SGA | X | ||
Sega FILM/CPK | X | X | 用于许多世嘉土星游戏机游戏。 |
Silicon Graphics Movie | X | ||
Sierra SOL | X | Sierra Online 游戏中使用的 .sol 文件。 | |
Sierra VMD | X | 用于 Sierra CD-ROM 游戏。 | |
Smacker | X | 许多游戏使用的多媒体格式。 | |
SMJPEG | X | X | 用于某些 Loki 游戏移植。 |
SMPTE 337M encapsulation | X | ||
Smush | X | 某些 LucasArts 游戏中使用的多媒体格式。 | |
Sony OpenMG (OMA) | X | X | Sony Sonic Stage 和 Sony Vegas 使用的音频格式。 |
Sony PlayStation STR | X | ||
Sony Wave64 (W64) | X | X | |
SoX native format | X | X | |
SUN AU format | X | X | |
SUP raw PGS subtitles | X | X | |
SVAG | X | Konami PS2 游戏中使用的音频格式。 | |
TDSC | X | ||
Text files | X | ||
THP | X | 用于任天堂 GameCube。 | |
Tiertex Limited SEQ | X | Tiertex .seq 文件用于游戏 Flashback 的 DOS CD-ROM 版本。 | |
True Audio | X | X | |
VAG | X | 许多索尼 PS2 游戏中使用的音频格式。 | |
VC-1 test bitstream | X | X | |
Vidvox Hap | X | X | |
Vivo | X | ||
VPK | X | 索尼 PS 游戏中使用的音频格式。 | |
Marble WADY | X | ||
WAV | X | X | |
Waveform Archiver | X | ||
WavPack | X | X | |
WebM | X | X | |
Windows Televison (WTV) | X | X | |
Wing Commander III movie | X | Origin 的 Wing Commander III 电脑游戏中使用的多媒体格式。 | |
Westwood Studios audio | X | X | Westwood Studios 游戏中使用的多媒体格式。 |
Westwood Studios VQA | X | Westwood Studios 游戏中使用的多媒体格式。 | |
Wideband Single-bit Data (WSD) | X | ||
WVE | X | ||
Konami XMD | X | ||
XMV | X | Xbox 游戏中使用的 Microsoft 视频容器。 | |
XVAG | X | PS3 上使用的音频格式。 | |
xWMA | X | XAudio 2 使用的 Microsoft 音频容器。 | |
eXtended BINary text (XBIN) | X | ||
YUV4MPEG pipe | X | X | |
Psygnosis YOP | X |
X
表示支持该列中的功能(编码/解码)。
49.2 Image Formats
FFmpeg 可以读取和写入视频序列的每一帧的图像。支持以下图像格式:
Name | 编码 | 解码 | 评论 |
.Y.U.V | X | X | 每个组件一个原始文件 |
Alias PIX | X | X | Alias/Wavefront PIX 图像格式 |
animated GIF | X | X | |
APNG | X | X | 动画便携式网络图形 |
BMP | X | X | 微软BMP图像 |
BRender PIX | X | Argonaut BRender 3D 引擎图像格式。 | |
CRI | X | 辛特尔RAW | |
DPX | X | X | 数字图片交换 |
EXR | X | 开放EXR | |
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 | 微软画图图像 | |
PAM | X | X | PAM 是具有 alpha 支持的 PNM 扩展。 |
PBM | X | X | 便携式位图图像 |
PCD | X | 照片CD | |
PCX | X | X | 电脑画笔 |
PFM | X | X | 便携式浮动地图图像 |
PGM | X | X | 便携式灰度图图像 |
PGMYUV | X | X | YUV 4:2:0 中具有 U 和 V 分量的 PGM |
PGX | X | PGX 文件解码器 | |
PHM | X | X | 便携式 HalfFloatMap 图像 |
PIC | X | 绘画/PC油漆 | |
PNG | X | X | 便携式网络图形图像 |
PPM | X | X | 便携式 PixelMap 图像 |
PSD | X | Photoshop | |
PTX | X | 五、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 | 乙 | X | WebP图像格式,通过外部库libwebp支持编码 |
XBM | X | X | X 位图图像格式 |
XFace | X | X | X-Face 图像格式 |
XPM | X | X PixMap 图像格式 | |
XWD | X | X | X Window 转储图像格式 |
X
表示支持该列中的功能(编码/解码)。
E
意味着支持是通过外部库提供的。
49.3 Video Codecs
Name | 编码 | 解码 | 评论 |
4X Movie | X | 用于某些电脑游戏。 | |
8088flex TMV | X | ||
A64 multicolor | X | 创建适合在 Commodore 64(多色模式)上播放的视频。 | |
Amazing Studio PAF Video | X | ||
American Laser Games MM | X | 用于像疯狗麦克雷这样的游戏。 | |
Amuse Graphics Movie | X | ||
AMV Video | X | X | 用于中文MP3播放器。 |
ANSI/ASCII art | X | ||
Apple Intermediate Codec | X | ||
Apple MJPEG-B | X | ||
Apple Pixlet | X | ||
Apple ProRes | X | X | fourcc:apch、apcn、apcs、apco、ap4h、ap4x |
Apple QuickDraw | X | fourcc:qdrw | |
Argonaut Video | X | 用于一些阿尔戈英雄游戏。 | |
Asus v1 | X | X | 四联:ASV1 |
Asus v2 | X | X | 四联:ASV2 |
ATI VCR1 | X | 四联:VCR1 | |
ATI VCR2 | X | 四:VCR2 | |
Auravision Aura | X | ||
Auravision Aura 2 | X | ||
Autodesk Animator Flic video | X | ||
Autodesk RLE | X | 四方:AASC | |
AV1 | 乙 | 乙 | 通过外部库 libaom、libdav1d、librav1e 和 libsvtav1 支持 |
Avid 1:1 10-bit RGB Packer | X | X | fourcc:AVrp |
AVS (Audio Video Standard) video | X | Creature Shock 游戏使用的视频编码。 | |
AVS2-P2/IEEE1857.4 | 乙 | 乙 | 通过外部库 libxavs2 和 libdavs2 支持 |
AVS3-P2/IEEE1857.10 | 乙 | 通过外部库 libuavs3d 支持 | |
AYUV | X | X | Microsoft 未压缩打包 4:4:4:4 |
Beam Software VB | X | ||
Bethesda VID video | X | 用于 Bethesda Softworks 的一些游戏。 | |
Bink Video | X | ||
BitJazz SheerVideo | X | ||
Bitmap Brothers JV video | X | ||
y41p Brooktree uncompressed 4:1:1 12-bit | X | X | |
Brooktree ProSumer Video | X | 四联:BT20 | |
Brute Force & Ignorance | X | 用于游戏《Flash Traffic:天使之城》。 | |
C93 video | X | Cyberia 游戏中使用的编解码器。 | |
CamStudio | X | 四方:CSCD | |
CD+G | X | CD+G 卡拉 OK 光盘的视频编解码器 | |
CDXL | X | Amiga CD 视频编解码器 | |
Chinese AVS video | 乙 | X | AVS1-P2,JiZhun配置文件,通过外部库libxavs编码 |
Delphine Software International CIN video | X | Delphine Software International 游戏中使用的编解码器。 | |
Discworld II BMV Video | X | ||
CineForm HD | X | X | |
Canopus HQ | X | ||
Canopus HQA | X | ||
Canopus HQX | X | ||
Canopus Lossless Codec | X | ||
CDToons | X | 各种 Broderbund 游戏中使用的编解码器。 | |
Cinepak | X | ||
Cirrus Logic AccuPak | X | X | 四方:CLJR |
CPiA Video Format | X | ||
Creative YUV (CYUV) | X | ||
DFA | X | Chronomaster 游戏中使用的编解码器。 | |
Dirac | 乙 | X | 通过本机 vc2 (Dirac Pro) 编码器支持 |
Deluxe Paint Animation | X | ||
DNxHD | X | X | 又名 SMPTE VC3 |
Duck TrueMotion 1.0 | X | fourcc: 鸭子 | |
Duck TrueMotion 2.0 | X | 四联:TM20 | |
Duck TrueMotion 2.0 RT | X | 四联:TR20 | |
DV (Digital Video) | X | X | |
Dxtory capture format | X | ||
Feeble Files/ScummVM DXA | X | 编解码器最初用于 Feeble Files 游戏。 | |
Electronic Arts CMV video | X | 用于 NHL 95 比赛。 | |
Electronic Arts Madcow video | X | ||
Electronic Arts TGV video | X | ||
Electronic Arts TGQ video | X | ||
Electronic Arts TQI video | X | ||
Escape 124 | X | ||
Escape 130 | X | ||
FFmpeg video codec #1 | X | X | 无损编解码器(fourcc:FFV1) |
Flash Screen Video v1 | X | X | fourcc:FSV1 |
Flash Screen Video v2 | X | X | |
Flash Video (FLV) | X | X | Flash 中使用的 Sorenson H.263 |
FM Screen Capture Codec | X | ||
Forward Uncompressed | X | ||
Fraps | X | ||
Go2Meeting | X | fourcc:G2M2、G2M3 | |
Go2Webinar | X | 四联:G2M4 | |
Gremlin Digital Video | X | ||
H.261 | X | X | |
H.263 / H.263-1996 | X | X | |
H.263+ / H.263-1998 / H.263 version 2 | X | X | |
H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 | 乙 | X | 通过外部库 libx264 和 OpenH264 支持的编码 |
HEVC | X | X | 通过外部库 libx265 和 libkvazaar 支持的编码 |
HNM version 4 | X | ||
HuffYUV | X | X | |
HuffYUV FFmpeg variant | X | X | |
IBM Ultimotion | X | fourcc:ULTI | |
id Cinematic video | X | 用于《雷神之锤 II》。 | |
id RoQ video | X | X | 用于《雷神之锤 III》、《绝地武士 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 video | X | 用于 Interplay .MVE 文件。 | |
J2K | X | X | |
Karl Morton’s video codec | X | 《百战天虫》游戏中使用的编解码器。 | |
Kega Game Video (KGV1) | X | Kega 模拟器屏幕捕获编解码器。 | |
Lagarith | X | ||
LCL (LossLess Codec Library) MSZH | X | ||
LCL (LossLess Codec Library) ZLIB | 乙 | 乙 | |
LEAD MCMP | X | ||
LOCO | X | ||
LucasArts SANM/Smush | X | 用于 LucasArts 游戏/SMUSH 动画。 | |
lossless MJPEG | X | X | |
MagicYUV Video | X | X | |
Mandsoft Screen Capture Codec | X | ||
Microsoft ATC Screen | X | 也称为 Microsoft Screen 3。 | |
Microsoft Expression Encoder Screen | X | 也称为微软钛屏 2。 | |
Microsoft RLE | X | X | |
Microsoft Screen 1 | X | 也称为 Windows Media Video V7 屏幕。 | |
Microsoft Screen 2 | X | 也称为 Windows Media Video V9 屏幕。 | |
Microsoft Video 1 | X | ||
Mimic | X | 用于 MSN Messenger 网络摄像头流。 | |
Miro VideoXL | X | fourcc:VIXL | |
MJPEG (Motion JPEG) | X | X | |
Mobotix MxPEG video | X | ||
Motion Pixels video | X | ||
MPEG-1 video | X | X | |
MPEG-2 video | X | X | |
MPEG-4 part 2 | X | X | libxvidcore 也可以用于编码。 |
MPEG-4 part 2 Microsoft variant version 1 | X | ||
MPEG-4 part 2 Microsoft variant version 2 | X | X | |
MPEG-4 part 2 Microsoft variant version 3 | X | X | |
Newtek SpeedHQ | X | X | |
Nintendo Gamecube THP video | X | ||
NotchLC | X | ||
NuppelVideo/RTjpeg | X | NuppelVideo 文件中使用的视频编码。 | |
On2 VP3 | X | 仍处于实验阶段 | |
On2 VP4 | X | 四联:VP40 | |
On2 VP5 | X | 四联:VP50 | |
On2 VP6 | X | 四:VP60、VP61、VP62 | |
On2 VP7 | X | 四:VP70、VP71 | |
VP8 | 乙 | X | fourcc:VP80,通过外部库 libvpx 支持的编码 |
VP9 | 乙 | X | 通过外部库 libvpx 支持的编码 |
Pinnacle TARGA CineWave YUV16 | X | 四联:Y216 | |
Q-team QPEG | X | fourccs:QPEG、Q1.0、Q1.1 | |
QuickTime 8BPS video | X | ||
QuickTime Animation (RLE) video | X | X | fourcc: 'rle' |
QuickTime Graphics (SMC) | X | X | fourcc: 'smc' |
QuickTime video (RPZA) | X | X | fourcc: rpza |
R10K AJA Kona 10-bit RGB Codec | X | X | |
R210 Quicktime Uncompressed RGB 10-bit | X | X | |
Raw Video | X | X | |
RealVideo 1.0 | X | X | |
RealVideo 2.0 | X | X | |
RealVideo 3.0 | X | 离理想还很远 | |
RealVideo 4.0 | X | ||
Renderware TXD (TeXture Dictionary) | X | Renderware 引擎使用的纹理字典。 | |
RivaTuner Video | X | fourcc: 'RTV1' | |
RL2 video | X | 娱乐软件合作伙伴在某些游戏中使用 | |
ScreenPressor | X | ||
Screenpresso | X | ||
Screen Recorder Gold Codec | X | ||
Sierra VMD video | X | 用于 Sierra VMD 文件。 | |
Silicon Graphics Motion Video Compressor 1 (MVC1) | X | ||
Silicon Graphics Motion Video Compressor 2 (MVC2) | X | ||
Silicon Graphics RLE 8-bit video | X | ||
Smacker video | X | Smacker 中使用的视频编码。 | |
SMPTE VC-1 | X | ||
Snow | X | X | 实验性小波编解码器(fourcc:SNOW) |
Sony PlayStation MDEC (Motion DECoder) | X | ||
Sorenson Vector Quantizer 1 | X | X | 四联:SVQ1 |
Sorenson Vector Quantizer 3 | X | 四联:SVQ3 | |
Sunplus JPEG (SP5X) | X | 四联:SP5X | |
TechSmith Screen Capture Codec | X | 四号:TSCC | |
TechSmith Screen Capture Codec 2 | X | 四联:TSC2 | |
Theora | 乙 | X | 通过外部库 libtheora 支持的编码 |
Tiertex Limited SEQ video | X | DOS CD-ROM FlashBack 游戏中使用的编解码器。 | |
Ut Video | X | X | |
v210 QuickTime uncompressed 4:2:2 10-bit | X | X | |
v308 QuickTime uncompressed 4:4:4 | X | X | |
v408 QuickTime uncompressed 4:4:4:4 | X | X | |
v410 QuickTime uncompressed 4:4:4 10-bit | X | X | |
VBLE Lossless Codec | X | ||
vMix Video | X | fourcc: 'VMX1' | |
VMware Screen Codec / VMware Video | X | VMware 捕获的视频中使用的编解码器。 | |
Westwood Studios VQA (Vector Quantized Animation) video | X | ||
Windows Media Image | X | ||
Windows Media Video 7 | X | X | |
Windows Media Video 8 | X | X | |
Windows Media Video 9 | X | 不完全工作 | |
Wing Commander III / Xan | X | 用于 Wing Commander III .MVE 文件。 | |
Wing Commander IV / Xan | X | 用于 Wing Commander IV。 | |
Winnov WNV1 | X | ||
WMV7 | X | X | |
YAMAHA SMAF | X | X | |
Psygnosis YOP Video | X | ||
yuv4 | X | X | libquicktime 未压缩打包 4:2:0 |
ZeroCodec Lossless Video | X | ||
ZLIB | X | X | LCL部分,编码器实验 |
Zip Motion Blocks Video | X | X | 编码器仅适用于 PAL8。 |
X
表示支持该列中的功能(编码/解码)。
E
意味着支持是通过外部库提供的。
49.4 Audio Codecs
Name | 编码 | 解码 | 评论 |
8SVX exponential | X | ||
8SVX fibonacci | X | ||
AAC | 前任 | X | 通过内部编码器和外部库 libfdk-aac 支持的编码 |
AAC+ | 乙 | 九 | 通过外部库 libfdk-aac 支持的编码 |
AC-3 | 九 | 九 | |
ACELP.KELVIN | X | ||
ADPCM 4X Movie | X | ||
ADPCM Yamaha AICA | X | ||
ADPCM AmuseGraphics Movie | X | ||
ADPCM Argonaut Games | X | X | |
ADPCM CDROM XA | X | ||
ADPCM Creative Technology | X | 16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2 | |
ADPCM Electronic Arts | X | 用于各种 EA 游戏。 | |
ADPCM Electronic Arts Maxis CDROM XS | X | 用于《模拟城市 3000》。 | |
ADPCM Electronic Arts R1 | X | ||
ADPCM Electronic Arts R2 | X | ||
ADPCM Electronic Arts R3 | X | ||
ADPCM Electronic Arts XAS | X | ||
ADPCM G.722 | X | X | |
ADPCM G.726 | X | X | |
ADPCM IMA Acorn Replay | X | ||
ADPCM IMA AMV | X | X | 用于 AMV 文件 |
ADPCM IMA Cunning Developments | X | ||
ADPCM IMA Electronic Arts EACS | X | ||
ADPCM IMA Electronic Arts SEAD | X | ||
ADPCM IMA Funcom | X | ||
ADPCM IMA High Voltage Software ALP | X | X | |
ADPCM IMA Mobiclip MOFLEX | X | ||
ADPCM IMA QuickTime | X | X | |
ADPCM IMA Simon & Schuster Interactive | X | X | |
ADPCM IMA Ubisoft APM | X | X | |
ADPCM IMA Loki SDL MJPEG | X | ||
ADPCM IMA WAV | X | X | |
ADPCM IMA Westwood | X | ||
ADPCM ISS IMA | X | 用于 FunCom 游戏。 | |
ADPCM IMA Dialogic | X | ||
ADPCM IMA Duck DK3 | X | 用于一些世嘉土星游戏机游戏。 | |
ADPCM IMA Duck DK4 | X | 用于一些世嘉土星游戏机游戏。 | |
ADPCM IMA Radical | X | ||
ADPCM 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 | 用于世嘉 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 | 乙 | X | 通过外部库 libopencore-amrnb 支持的编码 |
AMR-WB | 乙 | X | 通过外部库 libvo-amrwbenc 支持的编码 |
Amazing Studio PAF Audio | X | ||
Apple lossless audio | X | X | QuickTime fourcc 'alac' |
aptX | X | X | 用于蓝牙A2DP |
aptX HD | X | X | 用于蓝牙A2DP |
ATRAC1 | X | ||
ATRAC3 | X | ||
ATRAC3+ | X | ||
ATRAC9 | X | ||
Bink Audio | X | 用于许多游戏中的 Bink 和 Smacker 文件。 | |
Bonk audio | X | ||
CELT | 乙 | 通过外部库 libcelt 支持解码 | |
codec2 | 乙 | 乙 | 通过外部库 libcodec2 支持 en/解码 |
CRI HCA | X | ||
Delphine Software International CIN audio | X | Delphine Software International 游戏中使用的编解码器。 | |
DFPWM | X | X | |
Digital Speech Standard - Standard Play mode (DSS SP) | X | ||
Discworld II BMV Audio | X | ||
COOK | X | 支持除 5.1 之外的所有版本。 | |
DCA (DTS Coherent Acoustics) | X | X | 支持的扩展名:XCh、XXCH、X96、XBR、XLL、LBR(部分) |
Dolby E | X | ||
DPCM Cuberoot-Delta-Exact | X | 在少数游戏中使用。 | |
DPCM Gremlin | X | ||
DPCM id RoQ | X | X | 用于《雷神之锤 III》、《绝地武士 2》等电脑游戏。 |
DPCM Marble WADY | X | ||
DPCM Interplay | X | 用于各种 Interplay 电脑游戏。 | |
DPCM Squareroot-Delta-Exact | X | 用于各种游戏。 | |
DPCM Sierra Online | X | 用于 Sierra Online 游戏音频文件。 | |
DPCM Sol | X | ||
DPCM Xan | X | 用于 Origin 的 Wing Commander IV AVI 文件。 | |
DPCM Xilam DERF | X | ||
DSD (Direct Stream Digital), least significant bit first | X | ||
DSD (Direct Stream Digital), most significant bit first | X | ||
DSD (Direct Stream Digital), least significant bit first, planar | X | ||
DSD (Direct Stream Digital), most significant bit first, planar | X | ||
DSP Group TrueSpeech | X | ||
DST (Direct Stream Transfer) | X | ||
DV audio | X | ||
Enhanced AC-3 | X | X | |
EVRC (Enhanced Variable Rate Codec) | X | ||
FLAC (Free Lossless Audio Codec) | X | 九 | |
FTR Voice | X | ||
G.723.1 | X | X | |
G.729 | X | ||
GSM | 乙 | X | 通过外部库 libgsm 支持的编码 |
GSM Microsoft variant | 乙 | X | 通过外部库 libgsm 支持的编码 |
IAC (Indeo Audio Coder) | X | ||
iLBC (Internet Low Bitrate Codec) | 乙 | 前任 | 通过外部库 libilbc 支持编码和解码 |
IMC (Intel Music Coder) | X | ||
Interplay ACM | X | ||
MACE (Macintosh Audio Compression/Expansion) 3:1 | X | ||
MACE (Macintosh Audio Compression/Expansion) 6:1 | X | ||
Marian’s A-pac audio | X | ||
MI-SC4 (Micronas SC-4 Audio) | X | ||
MLP (Meridian Lossless Packing) | X | X | 用于 DVD 音频光盘。 |
Monkey’s Audio | X | ||
MP1 (MPEG audio layer 1) | 九 | ||
MP2 (MPEG audio layer 2) | 九 | 九 | 还通过外部库 TwoLAME 支持编码 |
MP3 (MPEG audio layer 3) | 乙 | 九 | 通过外部库 LAME 支持编码,还支持 ADU MP3 和 MP3onMP4 |
MPEG-4 Audio Lossless Coding (ALS) | X | ||
MobiClip FastAudio | X | ||
Musepack SV7 | X | ||
Musepack SV8 | X | ||
Nellymoser Asao | X | X | |
On2 AVC (Audio for Video Codec) | X | ||
Opus | 乙 | X | 通过外部库 libopus 支持的编码 |
OSQ (Original Sound Quality) | X | ||
PCM A-law | X | X | |
PCM mu-law | X | X | |
PCM Archimedes VIDC | X | X | |
PCM signed 8-bit planar | X | X | |
PCM signed 16-bit big-endian planar | X | X | |
PCM signed 16-bit little-endian planar | X | X | |
PCM signed 24-bit little-endian planar | X | X | |
PCM signed 32-bit little-endian planar | X | X | |
PCM 32-bit floating point big-endian | X | X | |
PCM 32-bit floating point little-endian | X | X | |
PCM 64-bit floating point big-endian | X | X | |
PCM 64-bit floating point little-endian | X | X | |
PCM D-Cinema audio signed 24-bit | X | X | |
PCM signed 8-bit | X | X | |
PCM signed 16-bit big-endian | X | X | |
PCM signed 16-bit little-endian | X | X | |
PCM signed 24-bit big-endian | X | X | |
PCM signed 24-bit little-endian | X | X | |
PCM signed 32-bit big-endian | X | X | |
PCM signed 32-bit little-endian | X | X | |
PCM signed 16/20/24-bit big-endian in MPEG-TS | X | ||
PCM unsigned 8-bit | X | X | |
PCM unsigned 16-bit big-endian | X | X | |
PCM unsigned 16-bit little-endian | X | X | |
PCM unsigned 24-bit big-endian | X | X | |
PCM unsigned 24-bit little-endian | X | X | |
PCM unsigned 32-bit big-endian | X | X | |
PCM unsigned 32-bit little-endian | X | X | |
PCM SGA | X | ||
QCELP / PureVoice | X | ||
QDesign Music Codec 1 | X | ||
QDesign Music Codec 2 | X | 仍然存在一些扭曲。 | |
RealAudio 1.0 (14.4K) | X | X | 真正的 14400 位/秒编解码器 |
RealAudio 2.0 (28.8K) | X | 真正的 28800 位/秒编解码器 | |
RealAudio 3.0 (dnet) | 九 | X | 真正的低比特率 AC-3 编解码器 |
RealAudio Lossless | X | ||
RealAudio SIPR / ACELP.NET | X | ||
RK Audio (RKA) | X | ||
SBC (low-complexity subband codec) | X | X | 用于蓝牙A2DP |
Shorten | X | ||
Sierra VMD audio | X | 用于 Sierra VMD 文件。 | |
Smacker audio | X | ||
SMPTE 302M AES3 audio | X | X | |
Sonic | X | X | 实验编解码器 |
Sonic lossless | X | X | 实验编解码器 |
Speex | 乙 | 前任 | 通过外部库 libspeex 支持 |
TAK (Tom’s lossless Audio Kompressor) | X | ||
True Audio (TTA) | X | X | |
TrueHD | X | X | 用于 HD-DVD 和蓝光光盘。 |
TwinVQ (VQF flavor) | X | ||
VIMA | X | 用于 LucasArts SMUSH 动画。 | |
ViewQuest VQC | X | ||
Vorbis | 乙 | 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
意味着也可以使用纯整数版本(确保在没有硬件浮点支持的系统上获得高性能)。
49.5 Subtitle Formats
Name | 穆星 | 解复用 | 编码 | 解码 |
3GPP Timed Text | X | X | ||
AQTitle | X | X | ||
DVB | X | X | X | X |
DVB teletext | X | 乙 | ||
DVD | X | X | X | X |
JACOsub | X | X | X | |
MicroDVD | X | X | X | |
MPL2 | X | X | ||
MPsub (MPlayer) | X | X | ||
PGS | X | |||
PJS (Phoenix) | X | X | ||
RealText | X | X | ||
SAMI | X | X | ||
Spruce format (STL) | X | X | ||
SSA/ASS | X | X | X | X |
SubRip (SRT) | X | X | X | X |
SubViewer v1 | X | X | ||
SubViewer | X | X | ||
TED Talks captions | X | X | ||
TTML | X | X | ||
VobSub (IDX+SUB) | X | X | ||
VPlayer | X | X | ||
WebVTT | X | X | X | X |
XSUB | X | X |
X
表示支持该功能。
E
意味着支持是通过外部库提供的。
49.6 Network Protocols
Name | 支持 |
AMQP | 乙 |
file | X |
FTP | X |
Gopher | X |
Gophers | X |
HLS | X |
HTTP | X |
HTTPS | X |
Icecast | X |
MMSH | X |
MMST | X |
pipe | X |
Pro-MPEG FEC | X |
RTMP | X |
RTMPE | X |
RTMPS | X |
RTMPT | X |
RTMPTE | X |
RTMPTS | X |
RTP | X |
SAMBA | 乙 |
SCTP | X |
SFTP | 乙 |
TCP | X |
TLS | X |
UDP | X |
ZMQ | 乙 |
X
表示支持该协议。
E
意味着支持是通过外部库提供的。
49.7 Input/Output Devices
Name | 输入 | 输出 |
ALSA | X | X |
BKTR | X | |
caca | X | |
DV1394 | X | |
Lavfi virtual device | X | |
Linux framebuffer | X | X |
JACK | X | |
LIBCDIO | X | |
LIBDC1394 | X | |
OpenAL | X | |
OpenGL | X | |
OSS | X | X |
PulseAudio | X | X |
SDL | X | |
Video4Linux2 | X | X |
VfW capture | X | |
X11 grabbing | X | |
Win32 grabbing | X |
X
表示支持输入/输出。
49.8 Timecode
Codec/format | 读 | 写 |
AVI | X | X |
DV | X | X |
GXF | X | X |
MOV | X | X |
MPEG1/2 | X | X |
MXF | X | X |
50 另请参阅
ffmpeg ffplay、ffprobe、 ffmpeg-utils、 ffmpeg-scaler、 ffmpeg-resampler、 ffmpeg-编解码器、 ffmpeg-bitstream-filters、 ffmpeg-formats、 ffmpeg-devices、 ffmpeg-protocols、 ffmpeg-filters
51 位作者
FFmpeg 开发人员。
git log
有关作者身份的详细信息,请参阅项目的 Git 历史记录 (https://git.ffmpeg.org/ffmpeg),例如通过在 FFmpeg 源目录中键入命令
,或浏览https://git 的在线存储库。 ffmpeg.org/ffmpeg。
文件中列出了特定组件的维护者 维护者在源代码树中。
本文档于2023 年 11 月 17 日使用makeinfo 生成。
由telepoint.bg提供的托管