目录
- 1 概要
- 2 描述
- 3 详细描述
- 4 流选择
- 5 选项
- 6 示例
- 7 语法
- 8 表达式求值
- 9 编解码器选项
- 10 解码器
- 11 视频解码器
- 12 音频解码器
- 13 字幕解码器
- 14 编码器
- 15 音频编码器
- 16 视频编码器
- 16.1 a64_multi, a64_multi5
- 16.2 Cinepak
- 16.3 GIF
- 16.4 Hap
- 16.5 jpeg2000
- 16.6 librav1e
- 16.7 libaom-av1
- 16.8 libsvtav1
- 16.9 libjxl
- 16.10 libkvazaar
- 16.11 libopenh264
- 16.12 libtheora
- 16.13 libvpx
- 16.14 libvvenc
- 16.15 libwebp
- 16.16 libx264, libx264rgb
- 16.17 libx265
- 16.18 libxavs2
- 16.19 libxeve
- 16.20 libxvid
- 16.21 MediaFoundation
- 16.22 Microsoft RLE
- 16.23 mpeg2
- 16.24 png
- 16.25 ProRes
- 16.26 QSV 编码器
- 16.27 snow
- 16.28 VAAPI 编码器
- 16.29 vbn
- 16.30 vc2
- 17 字幕编码器
- 18 比特流过滤器
- 18.1 aac_adtstoasc
- 18.2 av1_metadata
- 18.3 chomp
- 18.4 dca_core
- 18.5 dovi_rpu
- 18.6 dump_extra
- 18.7 dv_error_marker
- 18.8 eac3_core
- 18.9 extract_extradata
- 18.10 filter_units
- 18.11 hapqa_extract
- 18.12 h264_metadata
- 18.13 h264_mp4toannexb
- 18.14 h264_redundant_pps
- 18.15 hevc_metadata
- 18.16 hevc_mp4toannexb
- 18.17 imxdump
- 18.18 mjpeg2jpeg
- 18.19 mjpegadump
- 18.20 mov2textsub
- 18.21 mpeg2_metadata
- 18.22 mpeg4_unpack_bframes
- 18.23 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 showinfo
- 18.31 text2movsub
- 18.32 trace_headers
- 18.33 truehd_core
- 18.34 vp9_metadata
- 18.35 vp9_superframe
- 18.36 vp9_superframe_split
- 18.37 vp9_raw_reorder
- 19 格式选项
- 20 解复用器
- 20.1 aa
- 20.2 aac
- 20.3 apng
- 20.4 asf
- 20.5 concat
- 20.6 dash
- 20.7 dvdvideo
- 20.8 ea
- 20.9 imf
- 20.10 flv, live_flv, kux
- 20.11 gif
- 20.12 hls
- 20.13 image2
- 20.14 libgme
- 20.15 libmodplug
- 20.16 libopenmpt
- 20.17 mov/mp4/3gp
- 20.18 mpegts
- 20.19 mpjpeg
- 20.20 rawvideo
- 20.21 rcwt
- 20.22 sbg
- 20.23 tedcaptions
- 20.24 vapoursynth
- 20.25 w64
- 20.26 wav
- 21 封装器
- 21.1 原始封装器
- 21.2 原始 PCM 封装器
- 21.3 MPEG-1/MPEG-2 程序流封装器
- 21.4 MOV/MPEG-4/ISOMBFF 封装器
- 21.5 a64
- 21.6 ac4
- 21.7 adts
- 21.8 aea
- 21.9 aiff
- 21.10 alp
- 21.11 amr
- 21.12 amv
- 21.13 apm
- 21.14 apng
- 21.15 argo_asf
- 21.16 argo_cvg
- 21.17 asf, asf_stream
- 21.18 ass
- 21.19 ast
- 21.20 au
- 21.21 avi
- 21.22 avif
- 21.23 avm2
- 21.24 bit
- 21.25 caf
- 21.26 codec2
- 21.27 chromaprint
- 21.28 crc
- 21.29 dash
- 21.30 daud
- 21.31 dv
- 21.32 ffmetadata
- 21.33 fifo
- 21.34 film_cpk
- 21.35 filmstrip
- 21.36 fits
- 21.37 flac
- 21.38 flv
- 21.39 framecrc
- 21.40 framehash
- 21.41 framemd5
- 21.42 gif
- 21.43 gxf
- 21.44 hash
- 21.45 hds
- 21.46 hls
- 21.47 iamf
- 21.48 ico
- 21.49 ilbc
- 21.50 image2, image2pipe
- 21.51 ircam
- 21.52 ivf
- 21.53 jacosub
- 21.54 kvag
- 21.55 lc3
- 21.56 lrc
- 21.57 matroska
- 21.58 md5
- 21.59 microdvd
- 21.60 mmf
- 21.61 mp3
- 21.62 mpegts
- 21.63 mxf, mxf_d10, mxf_opatom
- 21.64 null
- 21.65 nut
- 21.66 ogg
- 21.67 rcwt
- 21.68 segment, stream_segment, ssegment
- 21.69 smoothstreaming
- 21.70 streamhash
- 21.71 tee
- 21.72 webm_chunk
- 21.73 webm_dash_manifest
- 22 元数据
- 23 协议选项
- 24 协议
- 24.1 amqp
- 24.2 async
- 24.3 bluray
- 24.4 cache
- 24.5 concat
- 24.6 concatf
- 24.7 crypto
- 24.8 data
- 24.9 fd
- 24.10 file
- 24.11 ftp
- 24.12 gopher
- 24.13 gophers
- 24.14 hls
- 24.15 http
- 24.16 Icecast
- 24.17 ipfs
- 24.18 mmst
- 24.19 mmsh
- 24.20 md5
- 24.21 pipe
- 24.22 prompeg
- 24.23 rist
- 24.24 rtmp
- 24.25 rtmpe
- 24.26 rtmps
- 24.27 rtmpt
- 24.28 rtmpte
- 24.29 rtmpts
- 24.30 libsmbclient
- 24.31 libssh
- 24.32 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte
- 24.33 rtp
- 24.34 rtsp
- 24.35 sap
- 24.36 sctp
- 24.37 srt
- 24.38 srtp
- 24.39 subfile
- 24.40 tee
- 24.41 tcp
- 24.42 tls
- 24.43 udp
- 24.44 unix
- 24.45 zmq
- 25 设备选项
- 26 输入设备
- 27 输出设备
- 28 重采样器选项
- 29 缩放器选项
- 30 滤波简介
- 31 graph2dot
- 32 滤镜图描述
- 33 时间线编辑
- 34 使用命令在运行时更改选项
- 35 具有多个输入的滤镜的选项 (framesync)
- 36 音频滤镜
- 36.1 aap
- 36.2 acompressor
- 36.3 acontrast
- 36.4 acopy
- 36.5 acrossfade
- 36.6 acrossover
- 36.7 acrusher
- 36.8 acue
- 36.9 adeclick
- 36.10 adeclip
- 36.11 adecorrelate
- 36.12 adelay
- 36.13 adenorm
- 36.14 aderivative, aintegral
- 36.15 adrc
- 36.16 adynamicequalizer
- 36.17 adynamicsmooth
- 36.18 aecho
- 36.19 aemphasis
- 36.20 aeval
- 36.21 aexciter
- 36.22 afade
- 36.23 afftdn
- 36.24 afftfilt
- 36.25 afir
- 36.26 aformat
- 36.27 afreqshift
- 36.28 afwtdn
- 36.29 agate
- 36.30 aiir
- 36.31 alimiter
- 36.32 allpass
- 36.33 aloop
- 36.34 amerge
- 36.35 amix
- 36.36 amultiply
- 36.37 anequalizer
- 36.38 anlmdn
- 36.39 anlmf, anlms
- 36.40 anull
- 36.41 apad
- 36.42 aphaser
- 36.43 aphaseshift
- 36.44 apsnr
- 36.45 apsyclip
- 36.46 apulsator
- 36.47 aresample
- 36.48 areverse
- 36.49 arls
- 36.50 arnndn
- 36.51 asdr
- 36.52 asetnsamples
- 36.53 asetrate
- 36.54 ashowinfo
- 36.55 asisdr
- 36.56 asoftclip
- 36.57 aspectralstats
- 36.58 asr
- 36.59 astats
- 36.60 asubboost
- 36.61 asubcut
- 36.62 asupercut
- 36.63 asuperpass
- 36.64 asuperstop
- 36.65 atempo
- 36.66 atilt
- 36.67 atrim
- 36.68 axcorrelate
- 36.69 bandpass
- 36.70 bandreject
- 36.71 bass, lowshelf
- 36.72 biquad
- 36.73 bs2b
- 36.74 channelmap
- 36.75 channelsplit
- 36.76 chorus
- 36.77 compand
- 36.78 compensationdelay
- 36.79 crossfeed
- 36.80 crystalizer
- 36.81 dcshift
- 36.82 deesser
- 36.83 dialoguenhance
- 36.84 drmeter
- 36.85 dynaudnorm
- 36.86 earwax
- 36.87 equalizer
- 36.88 extrastereo
- 36.89 firequalizer
- 36.90 flanger
- 36.91 haas
- 36.92 hdcd
- 36.93 headphone
- 36.94 highpass
- 36.95 join
- 36.96 ladspa
- 36.97 loudnorm
- 36.98 lowpass
- 36.99 lv2
- 36.100 mcompand
- 36.101 pan
- 36.102 replaygain
- 36.103 resample
- 36.104 rubberband
- 36.105 sidechaincompress
- 36.106 sidechaingate
- 36.107 silencedetect
- 36.108 silenceremove
- 36.109 sofalizer
- 36.110 speechnorm
- 36.111 stereotools
- 36.112 stereowiden
- 36.113 superequalizer
- 36.114 surround
- 36.115 tiltshelf
- 36.116 treble, highshelf
- 36.117 tremolo
- 36.118 vibrato
- 36.119 virtualbass
- 36.120 volume
- 36.121 volumedetect
- 37 音频源
- 38 音频接收器
- 39 视频滤镜
- 39.1 addroi
- 39.2 alphaextract
- 39.3 alphamerge
- 39.4 amplify
- 39.5 ass
- 39.6 atadenoise
- 39.7 avgblur
- 39.8 backgroundkey
- 39.9 bbox
- 39.10 bilateral
- 39.11 bilateral_cuda
- 39.12 bitplanenoise
- 39.13 blackdetect
- 39.14 blackframe
- 39.15 blend
- 39.16 blockdetect
- 39.17 blurdetect
- 39.18 bm3d
- 39.19 boxblur
- 39.20 bwdif
- 39.21 bwdif_cuda
- 39.22 ccrepack
- 39.23 cas
- 39.24 chromahold
- 39.25 chromakey
- 39.26 chromakey_cuda
- 39.27 chromanr
- 39.28 chromashift
- 39.29 ciescope
- 39.30 codecview
- 39.31 colorbalance
- 39.32 colorcontrast
- 39.33 colorcorrect
- 39.34 colorchannelmixer
- 39.35 colorize
- 39.36 colorkey
- 39.37 colorhold
- 39.38 colorlevels
- 39.39 colormap
- 39.40 colormatrix
- 39.41 colorspace
- 39.42 colorspace_cuda
- 39.43 colortemperature
- 39.44 convolution
- 39.45 convolve
- 39.46 copy
- 39.47 coreimage
- 39.48 corr
- 39.49 cover_rect
- 39.50 crop
- 39.51 cropdetect
- 39.52 cue
- 39.53 curves
- 39.54 datascope
- 39.55 dblur
- 39.56 dctdnoiz
- 39.57 deband
- 39.58 deblock
- 39.59 decimate
- 39.60 deconvolve
- 39.61 dedot
- 39.62 deflate
- 39.63 deflicker
- 39.64 dejudder
- 39.65 delogo
- 39.66 derain
- 39.67 deshake
- 39.68 despill
- 39.69 detelecine
- 39.70 dilation
- 39.71 displace
- 39.72 dnn_classify
- 39.73 dnn_detect
- 39.74 dnn_processing
- 39.75 drawbox
- 39.76 drawgraph
- 39.77 drawgrid
- 39.78 drawtext
- 39.79 edgedetect
- 39.80 elbg
- 39.81 entropy
- 39.82 epx
- 39.83 eq
- 39.84 erosion
- 39.85 estdif
- 39.86 exposure
- 39.87 extractplanes
- 39.88 fade
- 39.89 feedback
- 39.90 fftdnoiz
- 39.91 fftfilt
- 39.92 field
- 39.93 fieldhint
- 39.94 fieldmatch
- 39.95 fieldorder
- 39.96 fillborders
- 39.97 find_rect
- 39.98 floodfill
- 39.99 format
- 39.100 fps
- 39.101 framepack
- 39.102 framerate
- 39.103 framestep
- 39.104 freezedetect
- 39.105 freezeframes
- 39.106 frei0r
- 39.107 fspp
- 39.108 fsync
- 39.109 gblur
- 39.110 geq
- 39.111 gradfun
- 39.112 graphmonitor
- 39.113 grayworld
- 39.114 greyedge
- 39.115 guided
- 39.116 haldclut
- 39.117 hflip
- 39.118 histeq
- 39.119 histogram
- 39.120 hqdn3d
- 39.121 hwdownload
- 39.122 hwmap
- 39.123 hwupload
- 39.124 hwupload_cuda
- 39.125 hqx
- 39.126 hstack
- 39.127 hsvhold
- 39.128 hsvkey
- 39.129 hue
- 39.130 huesaturation
- 39.131 hysteresis
- 39.132 iccdetect
- 39.133 iccgen
- 39.134 identity
- 39.135 idet
- 39.136 il
- 39.137 inflate
- 39.138 interlace
- 39.139 kerndeint
- 39.140 kirsch
- 39.141 lagfun
- 39.142 lenscorrection
- 39.143 lensfun
- 39.144 lcevc
- 39.145 libplacebo
- 39.146 libvmaf
- 39.147 libvmaf_cuda
- 39.148 limitdiff
- 39.149 limiter
- 39.150 loop
- 39.151 lut1d
- 39.152 lut3d
- 39.153 lumakey
- 39.154 lut, lutrgb, lutyuv
- 39.155 lut2, tlut2
- 39.156 maskedclamp
- 39.157 maskedmax
- 39.158 maskedmerge
- 39.159 maskedmin
- 39.160 maskedthreshold
- 39.161 maskfun
- 39.162 mcdeint
- 39.163 median
- 39.164 mergeplanes
- 39.165 mestimate
- 39.166 midequalizer
- 39.167 minterpolate
- 39.168 mix
- 39.169 monochrome
- 39.170 morpho
- 39.171 mpdecimate
- 39.172 msad
- 39.173 multiply
- 39.174 negate
- 39.175 nlmeans
- 39.176 nnedi
- 39.177 noformat
- 39.178 noise
- 39.179 normalize
- 39.180 null
- 39.181 ocr
- 39.182 ocv
- 39.183 oscilloscope
- 39.184 overlay
- 39.185 overlay_cuda
- 39.186 owdenoise
- 39.187 pad
- 39.188 palettegen
- 39.189 paletteuse
- 39.190 perspective
- 39.191 phase
- 39.192 photosensitivity
- 39.193 pixdesctest
- 39.194 pixelize
- 39.195 pixscope
- 39.196 pp
- 39.197 pp7
- 39.198 premultiply
- 39.199 prewitt
- 39.200 pseudocolor
- 39.201 psnr
- 39.202 pullup
- 39.203 qp
- 39.204 qrencode
- 39.205 quirc
- 39.206 random
- 39.207 readeia608
- 39.208 readvitc
- 39.209 remap
- 39.210 removegrain
- 39.211 removelogo
- 39.212 repeatfields
- 39.213 reverse
- 39.214 rgbashift
- 39.215 roberts
- 39.216 rotate
- 39.217 sab
- 39.218 scale
- 39.219 scale_cuda
- 39.220 scale_npp
- 39.221 scale2ref_npp
- 39.222 scale_vt
- 39.223 scharr
- 39.224 scroll
- 39.225 scdet
- 39.226 selectivecolor
- 39.227 separatefields
- 39.228 setdar, setsar
- 39.229 setfield
- 39.230 setparams
- 39.231 sharpen_npp
- 39.232 shear
- 39.233 showinfo
- 39.234 showpalette
- 39.235 shuffleframes
- 39.236 shufflepixels
- 39.237 shuffleplanes
- 39.238 signalstats
- 39.239 signature
- 39.240 siti
- 39.241 smartblur
- 39.242 sobel
- 39.243 spp
- 39.244 sr
- 39.245 ssim
- 39.246 stereo3d
- 39.247 streamselect, astreamselect
- 39.248 subtitles
- 39.249 super2xsai
- 39.250 swaprect
- 39.251 swapuv
- 39.252 tblend
- 39.253 telecine
- 39.254 thistogram
- 39.255 threshold
- 39.256 thumbnail
- 39.257 tile
- 39.258 tiltandshift
- 39.259 tinterlace
- 39.260 tmedian
- 39.261 tmidequalizer
- 39.262 tmix
- 39.263 tonemap
- 39.264 tpad
- 39.265 transpose
- 39.266 transpose_npp
- 39.267 trim
- 39.268 unpremultiply
- 39.269 unsharp
- 39.270 untile
- 39.271 uspp
- 39.272 v360
- 39.273 vaguedenoiser
- 39.274 varblur
- 39.275 vectorscope
- 39.276 vidstabdetect
- 39.277 vidstabtransform
- 39.278 vflip
- 39.279 vfrdet
- 39.280 vibrance
- 39.281 vif
- 39.282 vignette
- 39.283 vmafmotion
- 39.284 vstack
- 39.285 w3fdif
- 39.286 waveform
- 39.287 weave, doubleweave
- 39.288 xbr
- 39.289 xcorrelate
- 39.290 xfade
- 39.291 xmedian
- 39.292 xpsnr
- 39.293 xstack
- 39.294 yadif
- 39.295 yadif_cuda
- 39.296 yaepblur
- 39.297 zoompan
- 39.298 zscale
- 40 OpenCL 视频滤镜
- 40.1 avgblur_opencl
- 40.2 boxblur_opencl
- 40.3 colorkey_opencl
- 40.4 convolution_opencl
- 40.5 erosion_opencl
- 40.6 deshake_opencl
- 40.7 dilation_opencl
- 40.8 nlmeans_opencl
- 40.9 overlay_opencl
- 40.10 pad_opencl
- 40.11 prewitt_opencl
- 40.12 program_opencl
- 40.13 remap_opencl
- 40.14 roberts_opencl
- 40.15 sobel_opencl
- 40.16 tonemap_opencl
- 40.17 unsharp_opencl
- 40.18 xfade_opencl
- 41 VAAPI 视频滤镜
- 42 Vulkan 视频滤镜
- 43 QSV 视频滤镜
- 44 视频源
- 44.1 buffer
- 44.2 cellauto
- 44.3 coreimagesrc
- 44.4 ddagrab
- 44.5 gradients
- 44.6 mandelbrot
- 44.7 mptestsrc
- 44.8 frei0r_src
- 44.9 life
- 44.10 perlin
- 44.11 qrencodesrc
- 44.12 allrgb, allyuv, color, colorchart, colorspectrum, haldclutsrc, nullsrc, pal75bars, pal100bars, rgbtestsrc, smptebars, smptehdbars, testsrc, testsrc2, yuvtestsrc
- 44.13 openclsrc
- 44.14 sierpinski
- 44.15 zoneplate
- 45 视频接收器
- 46 多媒体滤镜
- 46.1 a3dscope
- 46.2 abitscope
- 46.3 adrawgraph
- 46.4 agraphmonitor
- 46.5 ahistogram
- 46.6 aphasemeter
- 46.7 avectorscope
- 46.8 bench, abench
- 46.9 concat
- 46.10 ebur128
- 46.11 interleave, ainterleave
- 46.12 latency, alatency
- 46.13 metadata, ametadata
- 46.14 perms, aperms
- 46.15 realtime, arealtime
- 46.16 segment, asegment
- 46.17 select, aselect
- 46.18 sendcmd, asendcmd
- 46.19 setpts, asetpts
- 46.20 setrange
- 46.21 settb, asettb
- 46.22 showcqt
- 46.23 showcwt
- 46.24 showfreqs
- 46.25 showspatial
- 46.26 showspectrum
- 46.27 showspectrumpic
- 46.28 showvolume
- 46.29 showwaves
- 46.30 showwavespic
- 46.31 sidedata, asidedata
- 46.32 spectrumsynth
- 46.33 split, asplit
- 46.34 zmq, azmq
- 47 多媒体源
- 48 外部库
- 48.1 开放媒体联盟 (AOM)
- 48.2 AMD AMF/VCE
- 48.3 AviSynth
- 48.4 Chromaprint
- 48.5 codec2
- 48.6 dav1d
- 48.7 davs2
- 48.8 uavs3d
- 48.9 游戏音乐模拟器
- 48.10 英特尔 QuickSync 视频
- 48.11 Kvazaar
- 48.12 LAME
- 48.13 LCEVCdec
- 48.14 libilbc
- 48.15 libjxl
- 48.16 libvpx
- 48.17 ModPlug
- 48.18 OpenCORE、VisualOn 和 Fraunhofer 库
- 48.19 OpenH264
- 48.20 OpenJPEG
- 48.21 rav1e
- 48.22 SVT-AV1
- 48.23 TwoLAME
- 48.24 VapourSynth
- 48.25 x264
- 48.26 x265
- 48.27 xavs
- 48.28 xavs2
- 48.29 超高速基本视频编码器 (XEVE)
- 48.30 超高速基本视频解码器 (XEVD)
- 48.31 ZVBI
- 49 支持的文件格式、编解码器或功能
- 50 另请参阅
- 51 作者
1 概要
ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...
2 描述
ffmpeg
是一个通用的媒体转换器。它可以读取各种输入 - 包括实时抓取/录制设备 - 并进行过滤和转码,转换为大量的输出格式。
ffmpeg
从任意数量的输入(可以是常规文件、管道、网络流、抓取设备等)读取数据,这些输入通过 -i
选项指定,并写入任意数量的输出,这些输出通过一个简单的输出 url 指定。命令行上任何不能被解释为选项的内容都被认为是输出 url。
原则上,每个输入或输出都可以包含任意数量的不同类型的基本流(视频/音频/字幕/附件/数据),尽管允许的流数量和/或类型可能受到容器格式的限制。选择哪些输入中的哪些流进入哪个输出,可以通过自动方式完成,也可以使用 -map
选项(请参阅 流选择 章节)。
要在选项中引用输入/输出,您必须使用它们的索引(从 0 开始)。例如,第一个输入是 0
,第二个是 1
,等等。类似地,输入/输出中的流通过它们的索引引用。例如,2:3
指的是第三个输入或输出中的第四个流。另请参阅 流指定符 章节。
作为一般规则,选项应用于下一个指定的文件。因此,顺序很重要,您可以在命令行上多次使用相同的选项。每次出现都应用于下一个输入或输出文件。此规则的例外是全局选项(例如,详细级别),应首先指定。
不要混合输入和输出文件 - 首先指定所有输入文件,然后指定所有输出文件。也不要混合属于不同文件的选项。所有选项仅应用于下一个输入或输出文件,并在文件之间重置。
下面是一些简单的示例。
- 通过重新编码媒体流将输入媒体文件转换为不同的格式
ffmpeg -i input.avi output.mp4
- 将输出文件的视频比特率设置为 64 kbit/s
ffmpeg -i input.avi -b:v 64k -bufsize 64k output.mp4
- 强制输出文件的帧率为 24 fps
ffmpeg -i input.avi -r 24 output.mp4
- 强制输入文件(仅对原始格式有效)的帧率为 1 fps,输出文件的帧率为 24 fps
ffmpeg -r 1 -i input.m2v -r 24 output.mp4
对于原始输入文件,可能需要格式选项。
3 详细描述
ffmpeg
从下面列出的组件构建一个转码管道。程序的运行包括输入数据块从源头向下流动到管道的终点,同时被它们沿途遇到的组件转换。
可以使用以下类型的组件
- 解复用器(“解多路复用器”的缩写)读取输入源以提取
- 全局属性,例如元数据或章节;
- 输入基本流及其属性的列表
为每个 -i 选项创建一个解复用器实例,并将编码的数据包发送到解码器或复用器。
在其他文献中,解复用器有时被称为分离器,因为它们的主要功能是将文件分成基本流(尽管有些文件只包含一个基本流)。
解复用器的示意图如下所示
┌──────────┬───────────────────────┐ │ demuxer │ │ packets for stream 0 ╞══════════╡ elementary stream 0 ├──────────────────────► │ │ │ │ global ├───────────────────────┤ │properties│ │ packets for stream 1 │ and │ elementary stream 1 ├──────────────────────► │ metadata │ │ │ ├───────────────────────┤ │ │ │ │ │ ........... │ │ │ │ │ ├───────────────────────┤ │ │ │ packets for stream N │ │ elementary stream N ├──────────────────────► │ │ │ └──────────┴───────────────────────┘ ▲ │ │ read from file, network stream, │ grabbing device, etc. │
- 解码器接收音频、视频或字幕基本流的编码(压缩)数据包,并将它们解码为原始帧(视频的像素数组,音频的 PCM)。解码器通常与解复用器中的基本流相关联(并从该基本流接收输入),但有时也可能单独存在(请参阅 环回解码器)。
解码器的示意图如下所示
┌─────────┐ packets │ │ raw frames ─────────►│ decoder ├────────────► │ │ └─────────┘
- 滤镜图处理和转换原始音频或视频帧。滤镜图由一个或多个链接到图形中的单独的滤镜组成。滤镜图有两种类型 - 简单 和 复杂,分别使用 -filter 和 -filter_complex 选项配置。
简单滤镜图与输出基本流相关联;它从解码器接收要过滤的输入,并将过滤后的输出发送到该输出流的编码器。
一个简单的视频滤镜图,执行去隔行扫描(使用
yadif
去隔行器),然后进行缩放(使用scale
滤镜),可能如下所示┌────────────────────────┐ │ simple filtergraph │ frames from ╞════════════════════════╡ frames for a decoder │ ┌───────┐ ┌───────┐ │ an encoder ────────────►├─►│ yadif ├─►│ scale ├─►│────────────► │ └───────┘ └───────┘ │ └────────────────────────┘
复杂的滤镜图是独立的,不与任何特定的流相关联。它可能具有多个(或零个)输入,可能具有不同的类型(音频或视频),每个输入都从解码器或另一个复杂滤镜图的输出接收数据。它还具有一个或多个输出,这些输出要么馈送给编码器,要么馈送给另一个复杂滤镜图的输入。
以下示例图表示一个具有 3 个输入和 2 个输出(全部为视频)的复杂滤镜图
┌─────────────────────────────────────────────────┐ │ complex filtergraph │ ╞═════════════════════════════════════════════════╡ frames ├───────┐ ┌─────────┐ ┌─────────┐ ┌────────┤ frames ─────────►│input 0├─►│ overlay ├─────►│ overlay ├─►│output 0├────────► ├───────┘ │ │ │ │ └────────┤ frames ├───────┐╭►│ │ ╭►│ │ │ ─────────►│input 1├╯ └─────────┘ │ └─────────┘ │ ├───────┘ │ │ frames ├───────┐ ┌─────┐ ┌─────┬─╯ ┌────────┤ frames ─────────►│input 2├►│scale├►│split├───────────────►│output 1├────────► ├───────┘ └─────┘ └─────┘ └────────┤ └─────────────────────────────────────────────────┘
来自第二个输入的帧覆盖在来自第一个输入的帧之上。来自第三个输入的帧被重新缩放,然后复制成两个相同的流。其中一个覆盖在组合的前两个输入之上,结果作为滤镜图的第一个输出公开。另一个副本最终成为滤镜图的第二个输出。
- 编码器接收原始音频、视频或字幕帧,并将它们编码为编码的数据包。编码(压缩)过程通常是有损的 - 它会降低流质量以使输出更小;一些编码器是无损的,但代价是输出尺寸大得多。视频或音频编码器从某个滤镜图的输出接收其输入,字幕编码器从解码器接收输入(因为尚不支持字幕过滤)。每个编码器都与某个复用器的输出基本流相关联,并将其输出发送到该复用器。
编码器的示意图如下所示
┌─────────┐ raw frames │ │ packets ────────────►│ encoder ├─────────► │ │ └─────────┘
- 复用器(“多路复用器”的缩写)从编码器(转码路径)或直接从解复用器(流复制路径)接收其基本流的编码数据包,交错它们(当有多个基本流时),并将结果字节写入输出文件(或管道、网络流等)。
复用器的示意图如下所示
┌──────────────────────┬───────────┐ packets for stream 0 │ │ muxer │ ──────────────────────►│ elementary stream 0 ╞═══════════╡ │ │ │ ├──────────────────────┤ global │ packets for stream 1 │ │properties │ ──────────────────────►│ elementary stream 1 │ and │ │ │ metadata │ ├──────────────────────┤ │ │ │ │ │ ........... │ │ │ │ │ ├──────────────────────┤ │ packets for stream N │ │ │ ──────────────────────►│ elementary stream N │ │ │ │ │ └──────────────────────┴─────┬─────┘ │ write to file, network stream, │ grabbing device, etc. │ │ ▼
3.1 流复制
ffmpeg
中最简单的管道是单流流复制,即复制一个输入基本流的数据包,而不对其进行解码、过滤或编码。例如,考虑一个名为 INPUT.mkv 的输入文件,其中包含 3 个基本流,我们从中获取第二个流并将其写入文件 OUTPUT.mp4。这种管道的示意图如下所示
┌──────────┬─────────────────────┐ │ demuxer │ │ unused ╞══════════╡ elementary stream 0 ├────────╳ │ │ │ │INPUT.mkv ├─────────────────────┤ ┌──────────────────────┬───────────┐ │ │ │ packets │ │ muxer │ │ │ elementary stream 1 ├─────────►│ elementary stream 0 ╞═══════════╡ │ │ │ │ │OUTPUT.mp4 │ │ ├─────────────────────┤ └──────────────────────┴───────────┘ │ │ │ unused │ │ elementary stream 2 ├────────╳ │ │ │ └──────────┴─────────────────────┘
可以使用以下命令行构建上述管道
ffmpeg -i INPUT.mkv -map 0:1 -c copy OUTPUT.mp4
在此命令行中
- 有一个输入 INPUT.mkv;
- 此输入没有输入选项;
- 有一个输出 OUTPUT.mp4;
- 此输出有两个输出选项
-
-map 0:1
选择要使用的输入流 - 从索引为 0(即第一个)的输入中选择索引为 1(即第二个)的流; -
-c copy
选择copy
编码器,即不进行解码或编码的流复制。
-
流复制对于更改基本流计数、容器格式或修改容器级元数据非常有用。由于没有解码或编码,因此速度非常快,并且没有质量损失。但是,由于多种因素(例如,目标容器所需的某些信息在源中不可用),它在某些情况下可能不起作用。显然也不可能应用滤镜,因为滤镜处理的是解码后的帧。
可以构建更复杂的流复制场景 - 例如,将两个输入文件的流合并到一个输出文件中
┌──────────┬────────────────────┐ ┌────────────────────┬───────────┐ │ demuxer 0│ │ packets │ │ muxer │ ╞══════════╡elementary stream 0 ├────────►│elementary stream 0 ╞═══════════╡ │INPUT0.mkv│ │ │ │OUTPUT.mp4 │ └──────────┴────────────────────┘ ├────────────────────┤ │ ┌──────────┬────────────────────┐ │ │ │ │ demuxer 1│ │ packets │elementary stream 1 │ │ ╞══════════╡elementary stream 0 ├────────►│ │ │ │INPUT1.aac│ │ └────────────────────┴───────────┘ └──────────┴────────────────────┘
这可以通过命令行构建
ffmpeg -i INPUT0.mkv -i INPUT1.aac -map 0:0 -map 1:0 -c copy OUTPUT.mp4
这里的输出 -map 选项使用了两次,在输出文件中创建了两个流 - 一个由第一个输入提供,另一个由第二个输入提供。单个 -c 选项实例为这两个流都选择了流复制。您也可以结合使用此选项的多个实例以及流指定符,以便为每个流应用不同的值,这将在以下章节中演示。
相反的场景是将单个输入的多个流拆分到多个输出中
┌──────────┬─────────────────────┐ ┌───────────────────┬───────────┐ │ demuxer │ │ packets │ │ muxer 0 │ ╞══════════╡ elementary stream 0 ├─────────►│elementary stream 0╞═══════════╡ │ │ │ │ │OUTPUT0.mp4│ │INPUT.mkv ├─────────────────────┤ └───────────────────┴───────────┘ │ │ │ packets ┌───────────────────┬───────────┐ │ │ elementary stream 1 ├─────────►│ │ muxer 1 │ │ │ │ │elementary stream 0╞═══════════╡ └──────────┴─────────────────────┘ │ │OUTPUT1.mp4│ └───────────────────┴───────────┘
可以使用以下命令构建:
ffmpeg -i INPUT.mkv -map 0:0 -c copy OUTPUT0.mp4 -map 0:1 -c copy OUTPUT1.mp4
请注意,即使它们的值相同,每个输出文件都需要一个单独的 -c 选项实例。这是因为非全局选项(大多数都是)仅在它们放置之前的文件上下文中应用。
当然,这些示例可以进一步推广到任意数量的输入到任意数量的输出的重新映射。
3.2 转码
转码是解码一个流然后再重新编码的过程。由于编码往往计算量大,并且在大多数情况下会降低流的质量(即它是有损的),因此您应该仅在需要时进行转码,否则执行流复制。转码的典型原因包括:
- 应用滤镜 - 例如调整大小、去隔行或叠加视频;重采样或混合音频;
- 您想将流提供给无法解码原始编解码器的东西。
请注意,除非您为它们指定 -c copy,否则 ffmpeg
将转码所有音频、视频和字幕流。
考虑一个示例管道,该管道读取一个包含一个音频流和一个视频流的输入文件,将视频转码,并将音频复制到一个输出文件中。这可以用示意图表示如下
┌──────────┬─────────────────────┐ │ demuxer │ │ audio packets ╞══════════╡ stream 0 (audio) ├─────────────────────────────────────╮ │ │ │ │ │INPUT.mkv ├─────────────────────┤ video ┌─────────┐ raw │ │ │ │ packets │ video │ video frames │ │ │ stream 1 (video) ├─────────►│ decoder ├──────────────╮ │ │ │ │ │ │ │ │ └──────────┴─────────────────────┘ └─────────┘ │ │ ▼ ▼ │ │ ┌──────────┬─────────────────────┐ video ┌─────────┐ │ │ │ muxer │ │ packets │ video │ │ │ ╞══════════╡ stream 0 (video) │◄─────────┤ encoder ├──────────────╯ │ │ │ │ │(libx264)│ │ │OUTPUT.mp4├─────────────────────┤ └─────────┘ │ │ │ │ │ │ │ stream 1 (audio) │◄────────────────────────────────────╯ │ │ │ └──────────┴─────────────────────┘
并使用以下命令行实现
ffmpeg -i INPUT.mkv -map 0:v -map 0:a -c:v libx264 -c:a copy OUTPUT.mp4
请注意,它是如何使用流指定符 :v
和 :a
来选择输入流,并将 -c 选项的不同值应用到这些流的;有关更多详细信息,请参阅流指定符部分。
3.3 滤镜
转码时,可以在编码之前使用简单或复杂的滤镜图来过滤音频和视频流。
3.3.1 简单滤镜图
简单的滤镜图是那些恰好具有一个输入和一个输出,且类型相同(音频或视频)的滤镜图。它们使用每个流的 -filter 选项进行配置(-vf 和 -af 分别是 -filter:v(视频)和 -filter:a(音频)的别名)。请注意,简单的滤镜图与其输出流绑定,因此例如,如果您有多个音频流,则 -af 将为每个音频流创建一个单独的滤镜图。
以上面的转码示例为例,添加滤镜(并为了清晰起见省略音频)后,它看起来像这样
┌──────────┬───────────────┐ │ demuxer │ │ ┌─────────┐ ╞══════════╡ video stream │ packets │ video │ frames │INPUT.mkv │ ├─────────►│ decoder ├─────►───╮ │ │ │ └─────────┘ │ └──────────┴───────────────┘ │ ╭───────────◄───────────╯ │ ┌────────────────────────┐ │ │ simple filtergraph │ │ ╞════════════════════════╡ │ │ ┌───────┐ ┌───────┐ │ ╰──►├─►│ yadif ├─►│ scale ├─►├╮ │ └───────┘ └───────┘ ││ └────────────────────────┘│ │ │ ┌──────────┬───────────────┐ video ┌─────────┐ │ │ muxer │ │ packets │ video │ │ ╞══════════╡ video stream │◄─────────┤ encoder ├───────◄───────╯ │OUTPUT.mp4│ │ │ │ │ │ │ └─────────┘ └──────────┴───────────────┘
3.3.2 复杂滤镜图
复杂的滤镜图是那些不能简单地描述为应用于一个流的线性处理链的滤镜图。例如,当图形具有多个输入和/或输出,或者当输出流类型与输入不同时,就会出现这种情况。复杂的滤镜图使用 -filter_complex 选项进行配置。请注意,此选项是全局的,因为复杂的滤镜图本质上不能明确地与单个流或文件关联。每个 -filter_complex 实例都会创建一个新的复杂滤镜图,并且可以有任意数量的复杂滤镜图。
复杂滤镜图的一个简单示例是 overlay
滤镜,它有两个视频输入和一个视频输出,其中一个视频叠加在另一个视频的顶部。它的音频对应物是 amix
滤镜。
3.4 回环解码器
虽然解码器通常与解复用器流相关联,但也可以创建“环回”解码器,这些解码器解码来自某些编码器的输出,并允许将其反馈到复杂的滤镜图中。这是通过 -dec
指令完成的,该指令将应解码的输出流的索引作为参数。每个这样的指令都会创建一个新的环回解码器,该解码器使用从零开始的连续整数进行索引。然后,应在复杂滤镜图链接标签中使用这些索引来引用环回解码器,如 -filter_complex 的文档中所述。
可以通过将解码 AVOptions 放在 -dec
之前传递给环回解码器,类似于输入/输出选项。
例如,以下示例
ffmpeg -i INPUT \ -map 0:v:0 -c:v libx264 -crf 45 -f null - \ -threads 3 -dec 0:0 \ -filter_complex '[0:v][dec:0]hstack[stack]' \ -map '[stack]' -c:v ffv1 OUTPUT
读取输入视频,并
- (第 2 行)以低质量使用
libx264
对其进行编码; - (第 3 行)使用 3 个线程解码此编码流;
- (第 4 行)将解码后的视频与原始输入视频并排放置;
- (第 5 行)然后将组合后的视频进行无损编码并写入 OUTPUT。
这样的转码管道可以用以下图表表示
┌──────────┬───────────────┐ │ demuxer │ │ ┌─────────┐ ┌─────────┐ ┌────────────────────┐ ╞══════════╡ video stream │ │ video │ │ video │ │ null muxer │ │ INPUT │ ├──►│ decoder ├──┬────────►│ encoder ├─┬─►│(discards its input)│ │ │ │ └─────────┘ │ │(libx264)│ │ └────────────────────┘ └──────────┴───────────────┘ │ └─────────┘ │ ╭───────◄──╯ ┌─────────┐ │ │ │loopback │ │ │ ╭─────◄──────┤ decoder ├────◄──╯ │ │ └─────────┘ │ │ │ │ │ │ ┌───────────────────┐ │ │ │complex filtergraph│ │ │ ╞═══════════════════╡ │ │ │ ┌─────────────┐ │ ╰─╫─►├─►│ hstack ├─►├╮ ╰─►├─►│ │ ││ │ └─────────────┘ ││ └───────────────────┘│ │ ┌──────────┬───────────────┐ ┌─────────┐ │ │ muxer │ │ │ video │ │ ╞══════════╡ video stream │◄─┤ encoder ├───────◄──────────╯ │ OUTPUT │ │ │ (ffv1) │ │ │ │ └─────────┘ └──────────┴───────────────┘
4 流选择
ffmpeg
提供 -map
选项来手动控制每个输出文件中的流选择。用户可以跳过 -map
,并让 ffmpeg 执行如下所述的自动流选择。-vn / -an / -sn / -dn
选项可用于跳过分别包含视频、音频、字幕和数据流,无论是手动映射还是自动选择的,但复杂滤镜图的输出流除外。
4.1 描述
以下子章节描述了流选择中涉及的各种规则。接下来的示例展示了如何在实践中应用这些规则。
尽管我们尽一切努力准确反映该程序的行为,但 FFmpeg 正在持续开发中,代码可能自本文撰写之时起已发生更改。
4.1.1 自动流选择
在特定输出文件没有任何映射选项的情况下,ffmpeg 会检查输出格式,以检查其中可以包含哪种类型的流,即视频、音频和/或字幕。对于每种可接受的流类型,ffmpeg 将从所有输入中选择一个流(如果可用)。
它将根据以下条件选择该流
- 对于视频,它是分辨率最高的流,
- 对于音频,它是通道最多的流,
- 对于字幕,它是找到的第一个字幕流,但有一个警告。输出格式的默认字幕编码器可以是基于文本的或基于图像的,并且只会选择相同类型的字幕流。
在多个相同类型的流的等级相同的情况下,将选择索引最低的流。
数据或附件流不会自动选择,只能使用 -map
包含。
4.1.2 手动流选择
当使用 -map
时,只有用户映射的流才会包含在该输出文件中,但下面描述的滤镜图输出可能有一个例外。
4.1.3 复杂滤镜图
如果存在任何带有未标记垫片的复杂滤镜图输出流,它们将被添加到第一个输出文件中。如果输出格式不支持该流类型,这将导致致命错误。在没有 map 选项的情况下,包含这些流会导致自动跳过对其类型的流选择。如果存在 map 选项,则除了映射的流之外,还会包含这些滤镜图流。
带有标记垫片的复杂滤镜图输出流必须映射一次且仅一次。
4.1.4 流处理
流处理独立于流选择,但字幕有例外情况,如下所述。流处理通过 -codec
选项设置,该选项针对特定输出文件中的流。特别是,编解码器选项在流选择过程之后由 ffmpeg 应用,因此不会影响后者。如果未为流类型指定 -codec
选项,则 ffmpeg 将选择输出文件混合器注册的默认编码器。
字幕存在例外情况。如果为输出文件指定了字幕编码器,则将包含找到的任何类型(文本或图像)的第一个字幕流。ffmpeg 不会验证指定的编码器是否可以转换所选流,或者转换后的流是否在输出格式中可接受。这也普遍适用:当用户手动设置编码器时,流选择过程无法检查编码后的流是否可以混合到输出文件中。如果不能,ffmpeg 将中止,并且所有输出文件都将无法处理。
4.2 示例
以下示例说明了 ffmpeg 流选择方法的行为、怪癖和限制。
它们假设以下三个输入文件。
input file 'A.avi' stream 0: video 640x360 stream 1: audio 2 channels input file 'B.mp4' stream 0: video 1920x1080 stream 1: audio 2 channels stream 2: subtitles (text) stream 3: audio 5.1 channels stream 4: subtitles (text) input file 'C.mkv' stream 0: video 1280x720 stream 1: audio 2 channels stream 2: subtitles (image)
示例:自动流选择
ffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov
指定了三个输出文件,对于前两个,没有设置 -map
选项,因此 ffmpeg 将自动为这两个文件选择流。
out1.mkv 是一个 Matroska 容器文件,接受视频、音频和字幕流,因此 ffmpeg 将尝试选择每种类型的一个流。
对于视频,它将选择 B.mp4 中的 stream 0
,该流在所有输入视频流中具有最高分辨率。
对于音频,它将选择 B.mp4 中的 stream 3
,因为它具有最多的通道数。
对于字幕,它将选择 B.mp4 中的 stream 2
,这是来自 A.avi 和 B.mp4 的第一个字幕流。
out2.wav 仅接受音频流,因此仅选择 B.mp4 中的 stream 3
。
对于 out3.mov,由于设置了 -map
选项,因此不会发生自动流选择。-map 1:a
选项将选择第二个输入 B.mp4 中的所有音频流。此输出文件中将不包含其他流。
对于前两个输出,所有包含的流都将被转码。选择的编码器将是每个输出格式注册的默认编码器,这可能与所选输入流的编解码器不匹配。
对于第三个输出,音频流的编解码器选项已设置为 copy
,因此不会发生解码-过滤-编码操作,或者说不能发生。所选流的数据包应从输入文件传输并在输出文件中混合。
示例:自动字幕选择
ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv
尽管 out1.mkv 是一个接受字幕流的 Matroska 容器文件,但仅应选择视频和音频流。C.mkv 的字幕流是基于图像的,并且 Matroska 混合器的默认字幕编码器是基于文本的,因此预计字幕的转码操作将失败,因此不会选择该流。但是,在 out2.mkv 中,命令中指定了字幕编码器,因此除了视频流之外,还选择了字幕流。-an
的存在禁用了 out2.mkv 的音频流选择。
示例:未标记的滤镜图输出
ffmpeg -i A.avi -i C.mkv -i B.mp4 -filter_complex "overlay" out1.mp4 out2.srt
这里使用 -filter_complex
选项设置了一个滤镜图,该滤镜图由一个视频滤镜组成。overlay
滤镜需要精确的两个视频输入,但没有指定任何输入,因此使用了前两个可用的视频流,即 A.avi 和 C.mkv 的视频流。滤镜的输出垫片没有标签,因此将其发送到第一个输出文件 out1.mp4。因此,跳过了视频流的自动选择,该选择将选择 B.mp4 中的流。通道最多的音频流,即 B.mp4 中的 stream 3
,是自动选择的。但是,由于 MP4 格式没有注册默认的字幕编码器,并且用户没有指定字幕编码器,因此没有选择字幕流。
第二个输出文件 out2.srt 仅接受基于文本的字幕流。因此,即使第一个可用的字幕流属于 C.mkv,它也是基于图像的,因此被跳过。所选的流,B.mp4 中的 stream 2
,是第一个基于文本的字幕流。
示例:标记的滤镜图输出
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
上面的命令也将失败,因为 hue 滤镜输出有一个标签 [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 中的视频流被发送到 hue 滤镜,其输出使用 split 滤镜克隆一次,并标记两个输出。然后,每个副本都映射到第一个和第三个输出文件。
需要两个视频输入的 overlay 滤镜使用前两个未使用的视频流。它们是来自 A.avi 和 C.mkv 的流。overlay 输出没有标签,因此无论是否存在 -map
选项,它都会被发送到第一个输出文件 out1.mp4。
aresample 滤镜被发送到第一个未使用的音频流,即 A.avi 的音频流。由于此滤镜输出也未标记,因此它也被映射到第一个输出文件。-an
的存在仅抑制自动或手动选择音频流,而不是从滤镜图发送的输出。这两个映射的流应在 out1.mp4 中映射的流之前排序。
映射到 out2.mkv
的视频、音频和字幕流完全由自动流选择决定。
out3.mkv 由来自 hue 滤镜的克隆视频输出和来自 B.mp4 的第一个音频流组成。
5 选项
所有数字选项,如果未另行指定,则接受表示数字的字符串作为输入,该字符串后可以跟一个 SI 单位前缀,例如:“K”、“M”或“G”。
如果将“i”附加到 SI 单位前缀,则完整的前缀将被解释为二进制倍数的单位前缀,二进制倍数基于 1024 的幂而不是 1000 的幂。将“B”附加到 SI 单位前缀会将值乘以 8。例如,可以使用“KB”、“MiB”、“G”和“B”作为数字后缀。
不带参数的选项是布尔值选项,并将相应的值设置为 true。可以通过在选项名称前加上“no”将其设置为 false。例如,使用“-nofoo”会将名称为“foo”的布尔值选项设置为 false。
接受参数的选项支持一种特殊的语法,命令行中给出的参数会被解释为包含实际参数值的文件路径。要使用此功能,请在选项名称前(前导破折号之后)立即添加一个正斜杠“/”。例如:
ffmpeg -i INPUT -/filter:v filter.script OUTPUT
将会从名为 filter.script 的文件中加载滤镜图描述。
5.1 流指定符
有些选项是按流应用的,例如比特率或编解码器。流指定符用于精确指定给定选项属于哪个或哪些流。
流指定符是一个字符串,通常附加在选项名称之后,并用冒号分隔。例如,-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 的流。否则,它匹配指定类型的所有流。
- g:group_specifier[:additional_stream_specifier]
匹配属于具有指定符 group_specifier 的组中的流。如果使用 additional_stream_specifier,则它匹配既是组的一部分又匹配 additional_stream_specifier 的流。group_specifier 可以是以下之一:
- group_index
匹配具有此组索引的流。
- #group_id 或 i:group_id
匹配具有此组 ID 的流。
- p:program_id[:additional_stream_specifier]
匹配属于 ID 为 program_id 的程序的流。如果使用 additional_stream_specifier,则它匹配既是程序的一部分又匹配 additional_stream_specifier 的流。
- #stream_id 或 i:stream_id
通过流 ID(例如,MPEG-TS 容器中的 PID)匹配流。
- m:key[:value]
匹配具有元数据标签 key 且具有指定值的流。如果未给出 value,则匹配包含给定标签且具有任何值的流。key 或 value 中的冒号字符“:”需要使用反斜杠转义。
- disp:dispositions[:additional_stream_specifier]
匹配具有给定配置的流。dispositions 是一个或多个配置的列表(由 -dispositions 选项打印),并使用“+”连接。
- u
匹配具有可用配置的流,必须定义编解码器,并且必须存在诸如视频尺寸或音频采样率等基本信息。
请注意,在
ffmpeg
中,按元数据匹配仅适用于输入文件。
5.2 通用选项
这些选项在 ff* 工具之间共享。
- -L
显示许可证。
- -h, -?, -help, --help [arg]
显示帮助。可以指定一个可选参数来打印关于特定项目的帮助。如果未指定参数,则仅显示基本的(非高级)工具选项。
arg 的可能值为:
- long
除了基本工具选项之外,还打印高级工具选项。
- full
打印完整的选项列表,包括编码器、解码器、解复用器、复用器、过滤器等的共享和私有选项。
- decoder=decoder_name
打印有关名为 decoder_name 的解码器的详细信息。使用 -decoders 选项获取所有解码器的列表。
- encoder=encoder_name
打印有关名为 encoder_name 的编码器的详细信息。使用 -encoders 选项获取所有编码器的列表。
- demuxer=demuxer_name
打印有关名为 demuxer_name 的解复用器的详细信息。使用 -formats 选项获取所有解复用器和复用器的列表。
- muxer=muxer_name
打印有关名为 muxer_name 的复用器的详细信息。使用 -formats 选项获取所有复用器和解复用器的列表。
- filter=filter_name
打印有关名为 filter_name 的过滤器的详细信息。使用 -filters 选项获取所有过滤器的列表。
- bsf=bitstream_filter_name
打印有关名为 bitstream_filter_name 的比特流过滤器的详细信息。使用 -bsfs 选项获取所有比特流过滤器的列表。
- protocol=protocol_name
打印有关名为 protocol_name 的协议的详细信息。使用 -protocols 选项获取所有协议的列表。
- -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
设置库使用的日志级别和标志。
可选的 flags 前缀可以包含以下值:
- ‘repeat’
指示不应将重复的日志输出压缩到第一行,并且将省略“最后一条消息重复 n 次”行。
- ‘level’
指示日志输出应向每条消息行添加
[level]
前缀。这可以作为日志着色的替代方法,例如在将日志转储到文件时。
标志也可以单独使用,方法是添加“+”/“-”前缀来设置/重置单个标志,而不会影响其他 flags 或更改 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
前缀标志或 loglevel 的当前状态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
)。
例如,要使用日志级别
32
(日志级别info
的别名)将报告输出到名为 ffreport.log 的文件中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 列表,请使用 -help 选项。它们分为两类
- generic
这些选项可以为任何容器、编解码器或设备设置。通用选项列在容器/设备的 AVFormatContext 选项下,以及编解码器的 AVCodecContext 选项下。
- private
这些选项特定于给定的容器、设备或编解码器。私有选项列在其相应的容器/设备/编解码器下。
例如,要将 ID3v2.3 标头而不是默认的 ID3v2.4 写入 MP3 文件,请使用 MP3 复用器的 id3v2_version 私有选项
ffmpeg -i input.flac -id3v2_version 3 out.mp3
所有编解码器 AVOptions 都是按流设置的,因此应将流指定符附加到它们
ffmpeg -i multichannel.mxf -map 0:v:0 -map 0:a:0 -map 0:a:0 -c:a:0 ac3 -b:a:0 640k -ac:a:1 2 -c:a:1 aac -b:2 128k out.mp4
在上面的示例中,多声道音频流被映射两次以进行输出。第一个实例使用编解码器 ac3 和比特率 640k 进行编码。第二个实例被下混音为 2 个声道,并使用编解码器 aac 进行编码。使用输出流的绝对索引为其指定了 128k 的比特率。
注意:-nooption 语法不能用于布尔 AVOptions,请使用 -option 0/-option 1。
注意:以前通过在选项名称前添加 v/a/s 来指定每个流 AVOptions 的未记录方式现在已过时,并将很快被删除。
5.4 主要选项
- -f fmt (input/output)
强制输入或输出文件格式。通常会自动检测输入文件的格式,并根据输出文件的文件扩展名进行猜测,因此在大多数情况下不需要此选项。
- -i url (input)
输入文件 url
- -y (global)
覆盖输出文件而不询问。
- -n (global)
不覆盖输出文件,如果指定的输出文件已存在,则立即退出。
- -stream_loop number (input)
设置输入流应循环的次数。循环 0 表示不循环,循环 -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
之前)时,限制从输入文件读取的数据的 duration。当用作输出选项(在输出 url 之前)时,在输出的持续时间达到 duration 后停止写入输出。
duration 必须是时间持续时间规范,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分。
-to 和 -t 是互斥的,-t 具有优先级。
- -to position (input/output)
在 position 停止写入输出或读取输入。position 必须是时间持续时间规范,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分。
-to 和 -t 是互斥的,-t 具有优先级。
- -fs limit_size (output)
设置文件大小限制,以字节为单位表示。超过限制后,不会写入任何进一步的字节块。输出文件的大小会略大于请求的文件大小。
- -ss position(输入/输出)
当用作输入选项(在
-i
之前)时,在此输入文件中跳转到 position。请注意,在大多数格式中,不可能精确跳转,因此ffmpeg
将跳转到 position 之前的最接近的跳转点。当进行转码且启用 -accurate_seek(默认)时,跳转点和 position 之间的额外段将被解码并丢弃。当进行流复制或使用 -noaccurate_seek 时,它将被保留。当用作输出选项(在输出 URL 之前)时,将解码但丢弃输入,直到时间戳达到 position。
position 必须是时间持续时间规范,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分。
- -sseof position(输入)
-
类似于
-ss
选项,但相对于“文件末尾”。也就是说,负值在文件中较早,0 表示在 EOF 处。 - -isync input_index(输入)
将输入指定为同步源。
这将获取目标输入和参考输入的起始时间之间的差异,并按该差异偏移目标文件的时间戳。这两个输入的源时间戳应来自同一时钟源,以获得预期结果。如果设置了
copyts
,则还必须设置start_at_zero
。如果任何一个输入没有起始时间戳,则不会进行同步调整。可接受的值是指有效的 ffmpeg 输入索引。如果同步参考是目标索引本身或 -1,则不会对目标时间戳进行任何调整。同步参考本身可能不会同步到任何其他输入。
默认值为 -1。
- -itsoffset offset(输入)
设置输入时间偏移。
offset 必须是时间持续时间规范,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分。
偏移量将添加到输入文件的时间戳中。指定正偏移量意味着相应的流会延迟 offset 中指定的时间持续时间。
- -itsscale scale(输入,按流)
重新缩放输入时间戳。scale 应该是一个浮点数。
- -timestamp date(输出)
在容器中设置记录时间戳。
date 必须是日期规范,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“日期”部分。
- -metadata[:metadata_specifier] key=value(输出,按元数据)
设置元数据键/值对。
可以给出可选的 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(输出,按流)
设置流的处置标志。
默认值:默认情况下,所有处置标志都从输入流复制,除非此选项适用的输出流由复杂过滤器图提供 - 在这种情况下,默认情况下不设置任何处置标志。
value 是由“+”或“ - ”分隔的处置标志序列。“+”前缀添加给定的处置,“-”删除它。如果第一个标志也带有“+”或“ - ”前缀,则生成的处置是 value 更新的默认值。如果第一个标志没有前缀,则生成的处置是 value。也可以通过将其设置为 0 来清除处置。
如果未为输出文件指定任何
-disposition
选项,则当输出文件中存在多个相同类型的流,并且该类型的流没有被标记为默认时,ffmpeg 会自动在每种类型的第一个流上设置“default”处置标志。-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
要从第一个音频流中添加“original”并删除“comment”处置标志,而不删除其其他处置标志
ffmpeg -i in.mkv -c copy -disposition:a:0 +original-comment out.mkv
要从第一个音频流中删除“original”并添加“comment”处置标志,而不删除其其他处置标志
ffmpeg -i in.mkv -c copy -disposition:a:0 -original+comment out.mkv
要在第一个音频流上仅设置“original”和“comment”处置标志(并删除其其他处置标志)
ffmpeg -i in.mkv -c copy -disposition:a:0 original+comment out.mkv
要从第一个音频流中删除所有处置标志
ffmpeg -i in.mkv -c copy -disposition:a:0 0 out.mkv
并非所有复用器都支持嵌入式缩略图,并且那些支持的复用器仅支持少数几种格式,例如 JPEG 或 PNG。
- -program [title=title:][program_num=program_num:]st=stream[:st=stream...](输出)
-
使用指定的 title、program_num 创建一个节目,并将指定的 stream 添加到其中。
- -stream_group [map=input_file_id=stream_group][type=type:]st=stream[:st=stream][:stg=stream_group][:id=stream_group_id...](输出)
-
创建指定 type 和 stream_group_id 的流组,或通过 map 映射输入组,将指定的 stream 和/或先前定义的 stream_group 添加到其中。
type 可以是以下之一
- iamf_audio_element
将属于同一 IAMF 音频元素的 stream 分组
对于此组 type,可以使用以下选项
- audio_element_type
音频元素类型。支持以下值
- channel
可缩放通道音频表示
- scene
Ambisonics 表示
- demixing
用于重建可缩放通道音频表示的解混信息。此选项必须与其余部分用“,”分隔,并采用以下 key=value 选项
- parameter_id
帧中参数块可以引用的标识符
- dmixp_mode
预定义的解混参数组合
- recon_gain
用于重建可缩放通道音频表示的重建增益信息。此选项必须与其余部分用“,”分隔,并采用以下 key=value 选项
- parameter_id
帧中参数块可以引用的标识符
- layer
定义音频元素中通道布局的图层。此选项必须与其余部分用“,”分隔。可以定义多个用“,”分隔的条目,并且必须至少设置一个条目。
它采用以下用“:”分隔的 key=value 选项
- ch_layout
图层的通道布局
- flags
可以使用以下标志
- recon_gain
是否在帧内的参数块中以元数据的形式指示 recon_gain 是否存在
- output_gain
- output_gain_flags
output_gain 应用于哪些通道。可以使用以下标志
- FL
- FR
- BL
- BR
- TFL
- TFR
- ambisonics_mode
ambisonics 模式。如果 audio_element_type 设置为 channel,则此项无效。
支持以下值
- mono
每个 ambisonics 通道在该组中都被编码为单独的单声道流
- default_w
默认权重值
- iamf_mix_presentation
将属于同一 IAMF 混合演示文稿引用的所有 IAMF 音频元素的 stream 分组
对于此组 type,可以使用以下选项
- submix
混音呈现中的一个子混音。此选项必须用“,”与其他选项分隔。可以定义多个用“,”分隔的条目,并且必须设置至少一个。
它采用以下用“:”分隔的 key=value 选项
- parameter_id
帧中的标识符参数块可以引用此标识符,用于后处理混合音频信号,以生成用于播放的音频信号。
- parameter_rate
帧中引用此parameter_id的参数块中的采样率持续时间字段表示为
- default_mix_gain
当给定帧没有共享相同parameter_id的参数块时,应用的默认混音增益值。
- element
引用此混音呈现中使用的音频元素,以生成用于播放的最终输出音频信号。此选项必须用“|”与其他选项分隔。可以定义多个用“|”分隔的条目,并且必须设置至少一个。
它采用以下用“:”分隔的 key=value 选项
- stg
此子混音引用的音频元素的stream_group_id。
- parameter_id
帧中的标识符参数块可以引用此标识符,用于在与其它处理过的音频元素相加之前,对引用的和渲染的音频元素应用任何处理。
- parameter_rate
帧中引用此parameter_id的参数块中的采样率持续时间字段表示为
- default_mix_gain
当给定帧没有共享相同parameter_id的参数块时,应用的默认混音增益值。
- annotations
描述子混音元素的键值字符串,其中“key”是符合BCP-47的字符串,指定“value”字符串的语言。“key”必须与混音的annotations中的“key”相同。
- headphones_rendering_mode
指示当在耳机上播放时,基于输入通道的音频元素是渲染到立体声扬声器,还是使用双耳渲染器进行空间化。如果引用的音频元素的audio_element_type设置为channel,则此选项无效。
支持以下值
- stereo
- binaural
- layout
指定此子混音上测量响度信息的布局。此选项必须用“|”与其他选项分隔。可以定义多个用“|”分隔的条目,并且必须设置至少一个。
它采用以下用“:”分隔的 key=value 选项
- layout_type
-
- loudspeakers
布局遵循ITU-2051-3的扬声器声音系统约定。
- binaural
布局是双耳的。
- sound_system
通道布局与ITU-2051-3的声音系统A到J之一匹配,外加7.1.2和3.1.2。如果layout_type设置为binaural,则此选项无效。
- integrated_loudness
程序集成响度信息,如ITU-1770-4中定义。
- digital_peak
音频信号的数字(采样)峰值,如ITU-1770-4中定义。
- true_peak
音频信号的真实峰值,如ITU-1770-4中定义。
- dialog_anchored_loudness
对话响度信息,如ITU-1770-4中定义。
- album_anchored_loudness
专辑响度信息,如ITU-1770-4中定义。
- annotations
描述混音的键值字符串,其中“key”是符合BCP-47的字符串,指定“value”字符串的语言。“key”必须与所有子混音元素的annotations中的“key”相同。
例如,要从多个 WAV 输入文件创建一个可扩展的 5.1 IAMF 文件
ffmpeg -i front.wav -i back.wav -i center.wav -i lfe.wav -map 0:0 -map 1:0 -map 2:0 -map 3:0 -c:a opus -stream_group type=iamf_audio_element:id=1:st=0:st=1:st=2:st=3, demixing=parameter_id=998, recon_gain=parameter_id=101, layer=ch_layout=stereo, layer=ch_layout=5.1, -stream_group type=iamf_mix_presentation:id=2:stg=0:annotations=en-us=Mix_Presentation, submix=parameter_id=100:parameter_rate=48000|element=stg=0:parameter_id=100:annotations=en-us=Scalable_Submix|layout=sound_system=stereo|layout=sound_system=5.1 -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 output.iamf
要将具有四个流的输入 IAMF 文件中的两个流组(音频元素和混音呈现)复制到 mp4 输出中
ffmpeg -i input.iamf -c:a copy -stream_group map=0=0:st=0:st=1:st=2:st=3 -stream_group map=0=1:stg=0 -streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 output.mp4
- -target type (输出)
指定目标文件类型(
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
每个目标的参数设置如下。
VCD
pal: -f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324 -s 352x288 -r 25 -codec:v mpeg1video -g 15 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680 -ar 44100 -ac 2 -codec:a mp2 -b:a 224k ntsc: -f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324 -s 352x240 -r 30000/1001 -codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680 -ar 44100 -ac 2 -codec:a mp2 -b:a 224k 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 (输入/输出)
作为输入选项,阻止文件的所有数据流被过滤或自动选择或映射到任何输出。请参阅
-discard
选项以单独禁用流。作为输出选项,禁用数据记录,即自动选择或映射任何数据流。对于完全手动控制,请参阅
-map
选项。- -dframes number (输出)
设置要输出的数据帧数。这是
-frames:d
的过时别名,您应该使用它代替。- -frames[:stream_specifier] framecount (输出,按流)
在 framecount 帧后停止写入流。
- -q[:stream_specifier] q (输出,按流)
- -qscale[:stream_specifier] q (输出,按流)
使用固定质量比例(VBR)。 q/qscale 的含义取决于编解码器。如果在没有stream_specifier的情况下使用qscale,则它仅应用于视频流,这是为了保持与以前行为的兼容性,并且因为当没有使用stream_specifier时,将相同的编解码器特定值指定给两个不同的编解码器(音频和视频)通常不是预期的。
- -filter[:stream_specifier] filtergraph (输出,按流)
创建由 filtergraph 指定的滤镜图,并使用它来过滤流。
filtergraph 是要应用于流的滤镜图的描述,并且必须具有单个输入和单个输出,且与流的类型相同。在滤镜图中,输入与标签
in
关联,输出与标签out
关联。有关滤镜图语法的更多信息,请参阅 ffmpeg-filters 手册。如果您想创建具有多个输入和/或输出的滤镜图,请参阅 -filter_complex 选项。
- -reinit_filter[:stream_specifier] integer (输入,按流)
此布尔选项确定当输入帧参数在流中间发生更改时,是否重新初始化馈送此流的滤镜图。默认情况下启用此选项,因为大多数视频和所有音频过滤器都无法处理输入帧属性的偏差。重新初始化后,将丢失现有的过滤器状态,例如某些过滤器中可用的帧计数
n
引用。重新初始化时缓冲的任何帧都会丢失。触发重新初始化的属性是,对于视频,帧分辨率或像素格式;对于音频,采样格式、采样率、通道数或通道布局。- -filter_threads nb_threads (全局)
定义用于处理过滤器管道的线程数。每个管道将生成一个线程池,其中有这么多线程可用于并行处理。默认值是可用的 CPU 数量。
- -pre[:stream_specifier] preset_name (输出,按流)
指定匹配流的预设。
- -stats (全局)
将编码进度/统计信息记录为“info”级别的日志(请参阅
-loglevel
)。默认情况下启用此选项,要显式禁用它,您需要指定-nostats
。- -stats_period time (全局)
设置更新编码进度/统计信息的周期。默认值为 0.5 秒。
- -progress url (全局)
将程序友好的进度信息发送到 url。
进度信息会定期写入,并在编码过程结束时写入。它由“键=值”的行组成。键仅由字母数字字符组成。进度信息的最后一个键始终是“progress”,其值为“continue”或“end”。
更新周期使用
-stats_period
设置。例如,将进度信息记录到标准输出
ffmpeg -progress pipe:1 -i in.mkv out.mkv
- -stdin
启用标准输入上的交互。默认情况下启用,除非标准输入被用作输入。要显式禁用交互,你需要指定
-nostdin
。禁用标准输入上的交互很有用,例如,如果 ffmpeg 在后台进程组中。使用
ffmpeg ... < /dev/null
大致可以实现相同的结果,但这需要一个 shell。- -debug_ts (全局)
打印时间戳/延迟信息。默认情况下关闭。此选项主要用于测试和调试目的,输出格式可能因版本而异,因此不应被可移植脚本使用。
另请参阅选项
-fdebug ts
。- -attach 文件名 (输出)
向输出文件添加附件。一些格式支持此功能,例如 Matroska,用于渲染字幕的字体。附件以特定类型的流来实现,因此此选项将向文件添加一个新流。然后,可以像往常一样在此流上使用每个流的选项。使用此选项创建的附件流将在所有其他流之后创建(即使用
-map
或自动映射创建的流)。请注意,对于 Matroska,你还必须设置 mimetype 元数据标签
ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv
(假设附件流将是输出文件中的第三个流)。
- -dump_attachment[:流指定符] 文件名 (输入,每个流)
将匹配的附件流提取到名为 文件名 的文件中。如果 文件名 为空,则将使用
filename
元数据标签的值。例如,将第一个附件提取到名为“out.ttf”的文件
ffmpeg -dump_attachment:t:0 out.ttf -i INPUT
要将所有附件提取到由
filename
标签确定的文件中ffmpeg -dump_attachment:t "" -i INPUT
技术说明 – 附件作为编解码器附加数据实现,因此此选项实际上可用于从任何流提取附加数据,而不仅仅是附件。
5.5 视频选项
- -vframes 数量 (输出)
设置要输出的视频帧数。这是
-frames:v
的过时别名,你应该改用它。- -r[:流指定符] fps (输入/输出,每个流)
设置帧率(Hz 值,分数或缩写)。
作为输入选项,忽略文件中存储的任何时间戳,而是生成假设恒定帧率 fps 的时间戳。这与用于某些输入格式(如 image2 或 v4l2)的 -framerate 选项不同(在旧版本的 FFmpeg 中曾经相同)。如有疑问,请使用 -framerate 而不是输入选项 -r。
作为输出选项
- 视频编码
在编码之前复制或丢弃帧,以实现恒定的输出帧率 fps。
- 视频流复制
向混流器指示 fps 是流的帧率。在这种情况下,不会丢弃或复制数据。如果 fps 与数据包时间戳确定的实际流帧率不匹配,则可能会产生无效文件。另请参阅
setts
比特流过滤器。
- -fpsmax[:流指定符] fps (输出,每个流)
设置最大帧率(Hz 值,分数或缩写)。
当输出帧率自动设置且高于此值时,限制输出帧率。在批量处理或当输入帧率被错误地检测为非常高时很有用。它不能与
-r
一起设置。在流复制期间忽略它。- -s[:流指定符] 尺寸 (输入/输出,每个流)
设置帧大小。
作为输入选项,这是 video_size 私有选项的快捷方式,一些解复用器可以识别此选项,对于这些解复用器,帧大小要么未存储在文件中,要么是可配置的 – 例如,原始视频或视频采集器。
作为输出选项,这会将
scale
视频滤镜插入到相应滤镜图的末尾。请直接使用scale
滤镜将其插入开头或其他位置。格式为 'wxh'(默认值 - 与源相同)。
- -aspect[:流指定符] 宽高比 (输出,每个流)
设置由 宽高比 指定的视频显示宽高比。
宽高比 可以是浮点数字符串,也可以是 num:den 形式的字符串,其中 num 和 den 是宽高比的分子和分母。例如,“4:3”、“16:9”、“1.3333”和“1.7777”是有效的参数值。
如果与 -vcodec copy 一起使用,它将影响存储在容器级别的宽高比,但不影响存储在编码帧中的宽高比(如果存在)。
- -display_rotation[:流指定符] 旋转角度 (输入,每个流)
设置视频旋转元数据。
旋转角度 是一个十进制数字,指定在显示之前视频应逆时针旋转的度数。
此选项将覆盖文件中存储的旋转/显示变换元数据(如果有)。当视频被转码(而不是复制)且启用了
-autorotate
时,视频将在过滤阶段旋转。否则,如果混流器支持,元数据将被写入输出文件。如果给出了
-display_hflip
和/或-display_vflip
选项,它们将在由此选项指定的旋转之后应用。- -display_hflip[:流指定符] (输入,每个流)
设置在显示时图像是否应水平翻转。
有关更多详细信息,请参阅
-display_rotation
选项。- -display_vflip[:流指定符] (输入,每个流)
设置在显示时图像是否应垂直翻转。
有关更多详细信息,请参阅
-display_rotation
选项。- -vn (输入/输出)
作为输入选项,阻止文件的所有视频流被过滤或自动选择或映射到任何输出。请参阅
-discard
选项以单独禁用流。作为输出选项,禁用视频录制,即自动选择或映射任何视频流。有关完整的手动控制,请参阅
-map
选项。- -vcodec 编解码器 (输出)
设置视频编解码器。这是
-codec:v
的别名。- -pass[:流指定符] n (输出,每个流)
选择处理遍数(1 或 2)。它用于执行两遍视频编码。第一遍将视频的统计信息记录到日志文件(另请参阅选项 -passlogfile),第二遍使用该日志文件以精确请求的比特率生成视频。在第一遍中,您可以停用音频并将输出设置为 null,以下是 Windows 和 Unix 的示例
ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null
- -passlogfile[:stream_specifier] prefix (输出,每流)
将两遍日志文件名前缀设置为 prefix,默认文件名前缀为 “ffmpeg2pass”。完整的文件名将是 PREFIX-N.log,其中 N 是特定于输出流的数字
- -vf filtergraph (输出)
创建由 filtergraph 指定的滤镜图,并使用它来过滤流。
这是
-filter:v
的别名,请参阅 -filter 选项。- -autorotate
根据文件元数据自动旋转视频。默认启用,使用 -noautorotate 禁用它。
- -autoscale
根据第一帧的分辨率自动缩放视频。默认启用,使用 -noautoscale 禁用它。禁用自动缩放后,滤镜图的所有输出帧可能不在同一分辨率,并且可能不适合某些编码器/复用器。因此,除非您真的知道自己在做什么,否则不建议禁用它。禁用自动缩放风险自负。
5.6 高级视频选项
- -pix_fmt[:stream_specifier] format (输入/输出,每流)
设置像素格式。使用
-pix_fmts
显示所有支持的像素格式。如果无法选择所选的像素格式,ffmpeg 将打印警告并选择编码器支持的最佳像素格式。如果 pix_fmt 以+
为前缀,则如果无法选择所请求的像素格式,并且禁用滤镜图中的自动转换,ffmpeg 将以错误退出。如果 pix_fmt 是单个+
,则 ffmpeg 选择与输入(或图输出)相同的像素格式,并且禁用自动转换。- -sws_flags flags (输入/输出)
为 libswscale 库设置默认标志。这些标志由自动插入的
scale
滤镜以及简单滤镜图中的滤镜使用,如果在滤镜图定义中未覆盖。有关缩放器选项列表,请参阅 (ffmpeg-scaler)ffmpeg-scaler 手册。
- -rc_override[:stream_specifier] override (输出,每流)
针对特定间隔的速率控制覆盖,格式为以斜杠分隔的“int,int,int”列表。前两个值是起始和结束帧号,最后一个值是如果要使用正值则为量化器,如果为负值则为质量因子。
- -vstats
将视频编码统计信息转储到 vstats_HHMMSS.log。有关格式说明,请参阅 vstats 文件格式 部分。
- -vstats_file file
将视频编码统计信息转储到 file。有关格式说明,请参阅 vstats 文件格式 部分。
- -vstats_version file
指定要使用的 vstats 格式的版本。默认为
2
。有关格式说明,请参阅 vstats 文件格式 部分。- -vtag fourcc/tag (输出)
强制视频标签/fourcc。这是
-tag:v
的别名。- -force_key_frames[:stream_specifier] time[,time...] (输出,每流)
- -force_key_frames[:stream_specifier] expr:expr (输出,每流)
- -force_key_frames[:stream_specifier] source (输出,每流)
-
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 选项或类似选项会更有效。
- -apply_cropping[:stream_specifier] source (输入,每流)
根据文件元数据,在解码后自动裁剪视频。默认值为 *all*。
- none (0)
不应用任何裁剪元数据。
- all (1)
同时应用编解码器和容器级裁剪。这是默认模式。
- codec (2)
应用编解码器级裁剪。
- container (3)
应用容器级裁剪。
- -copyinkf[:stream_specifier] (输出,每流)
在进行流复制时,也复制在开头找到的非关键帧。
- -init_hw_device type[=name][:device[,key=value...]]
使用给定的设备参数初始化一个名为 name 的新 type 类型硬件设备。如果未指定名称,则它将收到一个 “type%d” 形式的默认名称。
device 和以下参数的含义取决于设备类型
- 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 显示适配器的编号。如果未指定,它将尝试使用默认的 Direct3D 11 显示适配器或硬件 VendorId 由 ‘vendor_id’ 指定的第一个 Direct3D 11 显示适配器。
示例
- -init_hw_device d3d11va
在默认的 Direct3D 11 显示适配器上创建一个 d3d11va 设备。
- -init_hw_device d3d11va:1
在索引为 1 的 Direct3D 11 显示适配器上创建一个 d3d11va 设备。
- -init_hw_device d3d11va:,vendor_id=0x8086
在硬件 VendorId 为 0x8086 的第一个 Direct3D 11 显示适配器上创建一个 d3d11va 设备。
- vaapi
device 可以是 X11 显示名称、DRM 渲染节点或 DirectX 适配器索引。如果未指定,它将尝试打开默认的 X11 显示($DISPLAY),然后是第一个 DRM 渲染节点(/dev/dri/renderD128),或者 Windows 上的默认 DirectX 适配器。
识别以下选项
- kernel_driver
当未指定 device 时,使用此选项指定与所需设备关联的内核驱动程序的名称。此选项仅在启用硬件加速方法 drm 和 vaapi 时可用。
- vendor_id
当未指定 device 和 kernel_driver 时,使用此选项指定与所需设备关联的供应商 ID。此选项仅在启用硬件加速方法 drm 和 vaapi 且未指定 kernel_driver 时可用。
示例
- -init_hw_device vaapi
在默认设备上创建一个 vaapi 设备。
- -init_hw_device vaapi:/dev/dri/renderD129
在 DRM 渲染节点 /dev/dri/renderD129 上创建一个 vaapi 设备。
- -init_hw_device vaapi:1
在 DirectX 适配器 1 上创建一个 vaapi 设备。
- -init_hw_device vaapi:,kernel_driver=i915
在与内核驱动程序 ‘i915’ 关联的设备上创建一个 vaapi 设备。
- -init_hw_device vaapi:,vendor_id=0x8086
在与供应商 ID ‘0x8086’ 关联的设备上创建一个 vaapi 设备。
- vdpau
device 是 X11 显示名称。如果未指定,它将尝试打开默认的 X11 显示($DISPLAY)。
- qsv
device 选择 ‘MFX_IMPL_*’ 中的一个值。允许的值为
- auto
- sw
- hw
- auto_any
- hw_any
- hw2
- hw3
- hw4
如果未指定,则使用 ‘auto_any’。(请注意,通过创建平台适当的子设备(‘dxva2’ 或 ‘d3d11va’ 或 ‘vaapi’),然后从中派生 QSV 设备,可能更容易实现 QSV 的预期结果。)
识别以下选项
- child_device
在 Linux 上指定 DRM 渲染节点,或在 Windows 上指定 DirectX 适配器。
- child_device_type
选择平台适当的子设备类型。在 Windows 上,当在配置时指定
--enable-libvpl
时,默认使用 ‘d3d11va’ 作为子设备类型,当在配置时指定--enable-libmfx
时,默认使用 ‘dxva2’ 作为子设备类型。在 Linux 上,用户只能使用 ‘vaapi’ 作为子设备类型。
示例
- -init_hw_device qsv:hw,child_device=/dev/dri/renderD129
在 DRM 渲染节点 /dev/dri/renderD129 上使用 ‘MFX_IMPL_HARDWARE’ 创建一个 QSV 设备。
- -init_hw_device qsv:hw,child_device=1
在 DirectX 适配器 1 上使用 ‘MFX_IMPL_HARDWARE’ 创建一个 QSV 设备。
- -init_hw_device qsv:hw,child_device_type=d3d11va
选择类型为 ‘d3d11va’ 的 GPU 子设备,并使用 ‘MFX_IMPL_HARDWARE’ 创建 QSV 设备。
- -init_hw_device qsv:hw,child_device_type=dxva2
选择类型为 ‘dxva2’ 的 GPU 子设备,并使用 ‘MFX_IMPL_HARDWARE’ 创建 QSV 设备。
- -init_hw_device qsv:hw,child_device=1,child_device_type=d3d11va
在 DirectX 适配器 1 上使用 ‘MFX_IMPL_HARDWARE’ 创建一个 QSV 设备,子设备类型为 ‘d3d11va’。
- -init_hw_device vaapi=va:/dev/dri/renderD129 -init_hw_device qsv=hw1@va
在 /dev/dri/renderD129 上创建一个名为 ‘va’ 的 VAAPI 设备,然后从设备 ‘va’ 派生一个名为 ‘hw1’ 的 QSV 设备。
- 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 是整数,则根据设备在系统相关设备列表中的索引来选择设备。如果 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 的 type 类型的新硬件设备,该设备从名称为 source 的现有设备派生。
- -init_hw_device list
列出此 ffmpeg 构建中支持的所有硬件设备类型。
- -filter_hw_device name
将名为 name 的硬件设备传递给任何滤镜图中的所有滤镜。这可以用于设置要使用
hwupload
滤镜上传到的设备,或者要使用hwmap
滤镜映射到的设备。其他滤镜在需要硬件设备时也可能使用此参数。请注意,这通常仅在输入不是已经以硬件帧的形式存在时才需要 - 当输入已经是硬件帧时,滤镜将从它们作为输入接收的帧的上下文中派生出它们所需的设备。这是一个全局设置,因此所有滤镜都将接收相同的设备。
- -hwaccel[:stream_specifier] hwaccel (输入,每个流)
使用硬件加速来解码匹配的流。 hwaccel 的允许值是
- none
不使用任何硬件加速(默认值)。
- auto
自动选择硬件加速方法。
- vdpau
使用 VDPAU (Unix 视频解码和呈现 API) 硬件加速。
- dxva2
使用 DXVA2 (DirectX 视频加速) 硬件加速。
- d3d11va
使用 D3D11VA (DirectX 视频加速) 硬件加速。
- vaapi
使用 VAAPI (视频加速 API) 硬件加速。
- qsv
使用 Intel QuickSync Video 加速进行视频转码。
与其他大多数值不同,此选项不启用加速解码(即在选择 qsv 解码器时自动使用),而是启用加速转码,而无需将帧复制到系统内存中。
要使其工作,解码器和编码器都必须支持 QSV 加速,并且不得使用任何滤镜。
如果所选的 hwaccel 不可用或所选的解码器不支持,则此选项无效。
请注意,大多数加速方法都是为播放而设计的,在现代 CPU 上速度不会比软件解码更快。此外,
ffmpeg
通常需要将解码后的帧从 GPU 内存复制到系统内存中,从而导致进一步的性能损失。因此,此选项主要用于测试。- -hwaccel_device[:流指定符] hwaccel_device (输入,按流)
选择用于硬件加速的设备。
此选项仅在同时指定 -hwaccel 选项时才有意义。它可以引用使用 -init_hw_device 按名称创建的现有设备,或者它可以创建一个新设备,就像之前立即调用了 ‘-init_hw_device’ type:hwaccel_device 一样。
- -hwaccels
列出此 ffmpeg 构建中启用的所有硬件加速组件。实际的运行时可用性取决于硬件及其安装的相应驱动程序。
- -fix_sub_duration_heartbeat[:流指定符]
根据随机访问数据包的接收情况,将特定的输出视频流设置为心跳流,以便根据该心跳流拆分和推送当前正在进行的字幕。
这降低了尚未接收到结束数据包或后续字幕的字幕的延迟。缺点是,为了覆盖整个持续时间,这很可能会导致字幕事件重复,因此,在处理字幕事件传递到输出的延迟不相关的用例时,不应使用此选项。
需要为相关的输入字幕流设置 -fix_sub_duration,此选项才能生效,并且输入字幕流必须直接映射到心跳流所在的同一输出中。
5.7 音频选项
- -aframes number (输出)
设置要输出的音频帧数。这是
-frames:a
的已过时的别名,您应该改用它。- -ar[:流指定符] freq (输入/输出,按流)
设置音频采样频率。对于输出流,默认设置为相应输入流的频率。对于输入流,此选项仅对音频采集设备和原始解复用器有意义,并映射到相应的解复用器选项。
- -aq q (输出)
设置音频质量(编解码器特定的 VBR)。这是 -q:a 的别名。
- -ac[:流指定符] channels (输入/输出,按流)
设置音频通道数。对于输出流,默认设置为输入音频通道的数量。对于输入流,此选项仅对音频采集设备和原始解复用器有意义,并映射到相应的解复用器选项。
- -an (输入/输出)
作为输入选项,阻止文件的所有音频流被过滤或自动选择或映射到任何输出。请参阅
-discard
选项以单独禁用流。作为输出选项,禁用音频录制,即禁用任何音频流的自动选择或映射。要进行完全手动控制,请参阅
-map
选项。- -acodec codec (输入/输出)
设置音频编解码器。这是
-codec:a
的别名。- -sample_fmt[:流指定符] sample_fmt (输出,按流)
设置音频采样格式。使用
-sample_fmts
获取支持的采样格式列表。- -af filtergraph (输出)
创建由 filtergraph 指定的滤镜图,并使用它来过滤流。
这是
-filter:a
的别名,请参阅 -filter 选项。
5.8 高级音频选项
- -atag fourcc/tag (输出)
强制音频标记/fourcc。这是
-tag:a
的别名。- -ch_layout[:流指定符] layout (输入/输出,按流)
-channel_layout
的别名。- -channel_layout[:流指定符] layout (输入/输出,按流)
设置音频通道布局。对于输出流,默认设置为输入通道布局。对于输入流,它会覆盖输入的通道布局。并非所有解码器都遵守覆盖的通道布局。此选项还设置音频采集设备和原始解复用器的通道布局,并映射到相应的解复用器选项。
- -guess_layout_max channels (输入,按流)
如果某些输入通道布局未知,则仅当它对应于最多指定数量的通道时才尝试猜测。例如,2 表示
ffmpeg
将识别 1 个通道为单声道,2 个通道为立体声,但不识别 6 个通道为 5.1。默认值是始终尝试猜测。使用 0 禁用所有猜测。使用-channel_layout
选项显式指定输入布局也会禁用猜测。
5.9 字幕选项
- -scodec codec (输入/输出)
设置字幕编解码器。这是
-codec:s
的别名。- -sn (输入/输出)
作为输入选项,阻止文件的所有字幕流被过滤或自动选择或映射到任何输出。请参阅
-discard
选项以单独禁用流。作为输出选项,禁用字幕录制,即禁用任何字幕流的自动选择或映射。要进行完全手动控制,请参阅
-map
选项。
5.10 高级字幕选项
- -fix_sub_duration
修复字幕持续时间。对于每个字幕,等待同一流中的下一个数据包,并调整第一个字幕的持续时间以避免重叠。对于某些字幕编解码器,尤其是 DVB 字幕,这是必要的,因为原始数据包中的持续时间仅是粗略的估计,而结束实际上是由空的字幕帧标记的。如果未在必要时使用此选项,可能会导致持续时间夸大或由于时间戳不单调而导致多路复用失败。
请注意,此选项将延迟所有数据的输出,直到解码下一个字幕数据包:它可能会大大增加内存消耗和延迟。
- -canvas_size size
设置用于渲染字幕的画布大小。
5.11 高级选项
- -map [-]input_file_id[:流指定符][:视图指定符][:?] | [链接标签] (输出)
-
在输出文件中创建一个或多个流。此选项有两种形式用于指定数据源:第一种形式从某些输入文件(使用
-i
指定)中选择一个或多个流,第二种形式从某些复杂滤镜图(使用-filter_complex
指定)中获取输出。在第一种形式中,为来自索引为 input_file_id 的输入文件的每个流创建一个输出流。如果给定了 流指定符,则仅使用与该指定符匹配的流(有关 流指定符 语法,请参阅 流指定符 部分)。
流标识符之前的
-
字符会创建“负”映射。它禁用与已创建的映射匹配的流。可以在流指定符之后提供可选的 视图指定符,对于多视图视频,它指定要使用的视图。视图指定符可以具有以下格式之一
- view:view_id
按 ID 选择视图;view_id 可以设置为“all”,以使用交错到一个流中的所有视图;
- vidx:view_idx
通过索引选择视图;例如,0 是基础视图,1 是第一个非基础视图,依此类推。
- vpos:位置
通过显示位置选择视图;位置 可以是
left
或right
。
转码的默认设置是仅使用基础视图,即相当于
vidx:0
。对于流复制,不支持视图指定符,并且始终复制所有视图。流索引后面的尾随
?
将允许映射是可选的:如果映射不匹配任何流,则将忽略该映射,而不是失败。请注意,如果使用了无效的输入文件索引(例如,如果映射引用了不存在的输入),则映射仍然会失败。另一种 [链接标签] 形式会将复杂滤镜图(请参阅 -filter_complex 选项)的输出映射到输出文件。链接标签 必须与图中定义的输出链接标签相对应。
可以多次指定此选项,每次都会向输出文件添加更多流。任何给定的输入流也可以多次映射为不同输出流的源,例如,为了使用不同的编码选项和/或滤镜。流在输出中创建的顺序与命令行中给出
-map
选项的顺序相同。使用此选项会禁用此输出文件的默认映射。
示例
- 映射所有内容
要将第一个输入文件中的所有流映射到输出
ffmpeg -i INPUT -map 0 output
- 选择特定流
如果第一个输入文件中有两个音频流,则这些流将由 0:0 和 0:1 标识。您可以使用
-map
来选择将哪些流放入输出文件中。例如ffmpeg -i INPUT -map 0:1 out.wav
会将 INPUT 中的第二个输入流映射到 out.wav 中的(单个)输出流。
- 创建多个流
要从输入文件 a.mov(由标识符 0:2 指定)中选择索引为 2 的流,并从输入 b.mov(由标识符 1:6 指定)中选择索引为 6 的流,并将它们复制到输出文件 out.mov
ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov
- 创建多个流 2
要从输入文件中选择所有视频和第三个音频流
ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT
- 负映射
要映射除第二个音频之外的所有流,请使用负映射
ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT
- 可选映射
要映射第一个输入中的视频和音频流,并使用尾随
?
,如果第一个输入中不存在音频流,则忽略音频映射ffmpeg -i INPUT -map 0:v -map 0:a? OUTPUT
- 按语言映射
要选择英语音频流
ffmpeg -i INPUT -map 0:m:language:eng OUTPUT
- -ignore_unknown
如果尝试复制此类流,则忽略未知类型的输入流,而不是失败。
- -copy_unknown
允许复制未知类型的输入流,而不是在尝试复制此类流时失败。
- -map_metadata[:metadata_spec_out] infile[:metadata_spec_in](输出,每个元数据)
从 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
请注意,在此示例中,简单的
0
也可以工作,因为默认情况下假定为全局元数据。- -map_chapters input_file_index (输出)
将索引为 input_file_index 的输入文件中的章节复制到下一个输出文件。如果未指定章节映射,则从至少包含一个章节的第一个输入文件复制章节。使用负文件索引禁用任何章节复制。
- -benchmark (全局)
在编码结束时显示基准测试信息。显示使用的实际时间、系统时间和用户时间以及最大内存消耗。并非所有系统都支持最大内存消耗,如果不支持,通常会显示为 0。
- -benchmark_all (全局)
在编码期间显示基准测试信息。显示各个步骤(音频/视频编码/解码)中使用的实际时间、系统时间和用户时间。
- -timelimit duration (全局)
在 ffmpeg 在 CPU 用户时间中运行 duration 秒后退出。
- -dump (全局)
将每个输入数据包转储到 stderr。
- -hex (全局)
在转储数据包时,也转储有效负载。
- -readrate speed (输入)
限制输入读取速度。
它的值是一个浮点正数,表示在 1 秒的实际时间中应摄取的媒体的最大持续时间(以秒为单位)。默认值为零,表示对摄取速度没有施加限制。值
1
表示实时速度,等效于-re
。主要用于模拟捕获设备或实时输入流(例如,从文件读取时)。当输入是实际的捕获设备或实时流时,不应使用低值,因为它可能会导致数据包丢失。
当输出数据包的流速很重要时(例如,实时流式传输),此选项很有用。
- -re (输入)
以本机帧速率读取输入。这等效于设置
-readrate 1
。- -readrate_initial_burst seconds
设置初始读取突发时间(以秒为单位),之后将强制执行 -re/-readrate。
- -vsync parameter (全局)
- -fps_mode[:stream_specifier] parameter (输出,每个流)
设置视频同步方法/帧速率模式。vsync 应用于所有输出视频流,但可以通过设置 fps_mode 来覆盖流的 vsync。vsync 已弃用,将来会被删除。
出于兼容性原因,vsync 的某些值可以指定为数字(在下表中以括号显示)。
- passthrough (0)
每个帧都会将其时间戳从解复用器传递到复用器。
- cfr (1)
将复制和删除帧以精确实现请求的恒定帧速率。
- vfr (2)
帧将以其时间戳传递或删除,以防止 2 个帧具有相同的时间戳。
- auto (-1)
根据复用器功能在 cfr 和 vfr 之间选择。这是默认方法。
请注意,时间戳可能会在此之后被复用器进一步修改。例如,如果启用了格式选项 avoid_negative_ts。
使用 -map,您可以选择从哪个流获取时间戳。您可以保持视频或音频不变,并将剩余的流与不变的流同步。
- -frame_drop_threshold parameter
帧丢弃阈值,指定视频帧可以落后多少才会被丢弃。以帧率单位表示,所以 1.0 代表一帧。默认值为 -1.1。一个可能的用例是避免因时间戳噪声而导致丢帧,或在时间戳精确的情况下提高丢帧精度。
- -apad 参数 (输出,每个流)
填充输出音频流。这与应用
-af apad
效果相同。参数是一个字符串,包含的过滤器参数与apad
过滤器相同。必须为此输出设置-shortest
选项才能生效。- -copyts
不处理输入时间戳,而是保留其值,不尝试清理它们。特别是,不删除初始启动时间偏移值。
请注意,根据 vsync 选项或特定的复用器处理(例如,如果启用了格式选项 avoid_negative_ts),即使选择了此选项,输出时间戳也可能与输入时间戳不匹配。
- -start_at_zero
与 copyts 一起使用时,将输入时间戳移动,使其从零开始。
这意味着例如使用
-ss 50
将使输出时间戳从 50 秒开始,而不管输入文件的时间戳从何处开始。- -copytb 模式
指定在流复制时如何设置编码器时基。模式 是一个整数数值,可以采用以下值之一
- 1
使用解复用器时基。
时基从对应的输入解复用器复制到输出编码器。当复制具有可变帧率的视频流时,有时需要这样做以避免时间戳非单调递增。
- 0
使用解码器时基。
时基从对应的输入解码器复制到输出编码器。
- -1
尝试自动做出选择,以便生成一个合理的输出。
默认值为 -1。
- -enc_time_base[:流指定符] 时基 (输出,每个流)
设置编码器时基。时基 可以采用以下值之一
- 0
根据媒体类型分配默认值。
对于视频 - 使用 1/帧率,对于音频 - 使用 1/采样率。
- demux
使用来自解复用器的时基。
- filter
使用来自滤镜图的时基。
- 一个正数
使用提供的数字作为时基。
此字段可以提供为两个整数的比率(例如 1:24, 1:48000)或作为十进制数(例如 0.04166, 2.0833e-5)
默认值为 0。
- -bitexact (输入/输出)
为(解)复用器和(解/编)码器启用位精确模式
- -shortest (输出)
当最短的输出流结束时,完成编码。
请注意,此选项可能需要缓冲帧,这会引入额外的延迟。此延迟的最大量可以使用
-shortest_buf_duration
选项控制。- -shortest_buf_duration 持续时间 (输出)
当至少一个流是“稀疏的”(即帧之间有较大的间隔 - 这通常是字幕的情况)时,
-shortest
选项可能需要缓冲潜在的大量数据。此选项控制缓冲帧的最大持续时间(以秒为单位)。较大的值可能允许
-shortest
选项产生更准确的结果,但会增加内存使用和延迟。默认值为 10 秒。
- -dts_delta_threshold 阈值
时间戳不连续性增量阈值,以秒为单位的十进制数表示。
此选项启用的时间戳不连续性校正仅适用于接受时间戳不连续性的输入格式(为此启用了
AVFMT_TS_DISCONT
标志),例如 MPEG-TS 和 HLS,并且在使用-copyts
选项时会自动禁用(除非检测到回绕)。如果检测到时间戳不连续性,其绝对值大于 阈值,则 ffmpeg 将通过减少/增加当前 DTS 和 PTS 相应的增量值来消除不连续性。
默认值为 10。
- -dts_error_threshold 阈值
时间戳误差增量阈值,以秒为单位的十进制数表示。
此选项启用的时间戳校正仅适用于不接受时间戳不连续性的输入格式(为此未启用
AVFMT_TS_DISCONT
标志)。如果检测到时间戳不连续性,其绝对值大于 阈值,则 ffmpeg 将丢弃 PTS/DTS 时间戳值。
默认值为
3600*30
(30 小时),这是任意选择的,相当保守。- -muxdelay 秒数 (输出)
设置最大解复用-解码延迟。
- -muxpreload 秒数 (输出)
设置初始解复用-解码延迟。
- -streamid 输出流索引:新值 (输出)
为输出流分配一个新的 stream-id 值。此选项应在它适用的输出文件名之前指定。对于存在多个输出文件的情况,可以将 streamid 重新分配给不同的值。
例如,要将输出 mpegts 文件的流 0 PID 设置为 33,将流 1 PID 设置为 36
ffmpeg -i inurl -streamid 0:33 -streamid 1:36 out.ts
- -bsf[:流指定符] 比特流过滤器 (输入/输出,每个流)
将比特流过滤器应用于匹配的流。过滤器应用于从解复用器接收到的每个数据包(当用作输入选项时),或在将其发送到复用器之前(当用作输出选项时)。
比特流过滤器 是一个逗号分隔的比特流过滤器规范列表,每个规范的形式为
filter[=optname0=optval0:optname1=optval1:...]
任何属于选项值的 ’,=:’ 字符都需要使用反斜杠转义。
使用
-bsfs
选项获取比特流过滤器列表。例如:
ffmpeg -bsf:v h264_mp4toannexb -i h264.mp4 -c:v copy -an out.h264
将
h264_mp4toannexb
比特流过滤器(将 MP4 封装的 H.264 流转换为 Annex B)应用于输入视频流。另一方面,
ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt
将
mov2textsub
比特流过滤器(从 MOV 字幕中提取文本)应用于输出字幕流。但是请注意,由于这两个示例都使用-c copy
,因此过滤器是在输入还是输出上应用无关紧要 - 如果发生转码,情况会有所不同。- -tag[:流指定符] 编解码器标签 (输入/输出,每个流)
强制匹配流的标签/fourcc。
- -timecode 时:分:秒SEP帧
指定用于写入的时间码。SEP 对于非丢帧时间码为 ‘:’,对于丢帧时间码为 ‘;’ (或 ‘.’)。
ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg
- -filter_complex 滤镜图 (全局)
定义一个复杂的滤镜图,即具有任意数量的输入和/或输出的滤镜图。对于简单的图 – 那些具有相同类型的一个输入和一个输出的图 – 请参阅 -filter 选项。滤镜图 是滤镜图的描述,如 ffmpeg-filters 手册的“滤镜图语法”部分所述。此选项可以多次指定 - 每次使用都会创建一个新的复杂滤镜图。
复杂滤镜图的输入可能来自不同的源类型,由相应链接标签的格式区分
- 要连接输入流,请使用
[文件索引:流指定符]
(即与 -map 相同的语法)。如果 流指定符 匹配多个流,将使用第一个流。对于多视图视频,流指定符后面可以跟视图指定符,请参阅 -map 选项的文档以了解其语法。 - 要连接环回解码器,请使用 [dec:解码器索引],其中 解码器索引 是要连接到给定输入的环回解码器的索引。对于多视图视频,解码器索引后面可以跟视图指定符,请参阅 -map 选项的文档以了解其语法。
- 要连接来自另一个复杂滤镜图的输出,请使用其链接标签。例如,以下示例
ffmpeg -i input.mkv \ -filter_complex '[0:v]scale=size=hd1080,split=outputs=2[for_enc][orig_scaled]' \ -c:v libx264 -map '[for_enc]' output.mkv \ -dec 0:0 \ -filter_complex '[dec:0][orig_scaled]hstack[stacked]' \ -map '[stacked]' -c:v ffv1 comparison.mkv
读取输入视频,并
- (第 2 行)使用一个具有一个输入和两个输出的复杂滤镜图,将视频缩放到 1920x1080,并将结果复制到两个输出;
- (第 3 行)使用
libx264
对一个缩放的输出进行编码,并将结果写入 output.mkv; - (第 4 行)使用环回解码器解码此编码的流;
- (第 5 行)将环回解码器的输出(即
libx264
编码的视频)与缩放的原始输入并排放置; - (第6行)然后将组合后的视频进行无损编码,并写入到 comparison.mkv 中。
请注意,这两个滤镜图不能合并成一个,因为那样会在转码管道中形成循环(滤镜图的输出进入编码器,从编码器进入解码器,然后又回到同一个图),而这种循环是不允许的。
未标记的输入将连接到匹配类型的第一个未使用的输入流。
输出链接标签使用 -map 来引用。未标记的输出将被添加到第一个输出文件中。
请注意,使用此选项可以仅使用 lavfi 源,而无需普通输入文件。
例如,要在视频上叠加图像:
ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map '[out]' out.mkv
这里,
[0:v]
指的是第一个输入文件的第一个视频流,它链接到 overlay 滤镜的第一个(主)输入。类似地,第二个输入文件的第一个视频流链接到 overlay 的第二个(叠加)输入。假设每个输入文件中只有一个视频流,我们可以省略输入标签,因此以上等同于:
ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map '[out]' out.mkv
此外,我们可以省略输出标签,滤镜图的单个输出将自动添加到输出文件中,因此我们可以简单地写成:
ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv
作为一种特殊例外,你可以使用位图字幕流作为输入:它将被转换为与文件中最大视频大小相同的视频,如果文件中没有视频,则转换为 720x576。请注意,这是一个实验性的临时解决方案。一旦 libavfilter 具有对字幕的适当支持,它将被删除。
例如,要在以 MPEG-TS 格式存储的 DVB-T 录像上硬编码字幕,并将字幕延迟 1 秒:
ffmpeg -i input.ts -filter_complex \ '[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \ -sn -map '#0x2dc' output.mkv
(0x2d0、0x2dc 和 0x2ef 分别是视频、音频和字幕流的 MPEG-TS PID;0:0、0:3 和 0:7 也可以工作)
要使用 lavfi
color
源生成 5 秒的纯红色视频:ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
- 要连接输入流,请使用
- -filter_complex_threads nb_threads (全局)
定义用于处理 filter_complex 图的线程数。类似于 filter_threads,但仅用于
-filter_complex
图。默认值是可用 CPU 的数量。- -lavfi filtergraph (全局)
定义一个复杂的滤镜图,即具有任意数量的输入和/或输出的滤镜图。等同于 -filter_complex。
- -accurate_seek (输入)
此选项启用或禁用使用 -ss 选项在输入文件中进行精确查找。默认情况下启用,因此在转码时查找是精确的。使用 -noaccurate_seek 可以禁用它,例如,在复制某些流并转码其他流时可能会很有用。
- -seek_timestamp (输入)
此选项启用或禁用使用 -ss 选项在输入文件中按时间戳查找。默认情况下禁用。如果启用,则 -ss 选项的参数将被视为实际时间戳,并且不会被文件的开始时间偏移。这仅对不从时间戳 0 开始的文件(例如传输流)有意义。
- -thread_queue_size size (输入/输出)
对于输入,此选项设置从文件或设备读取时排队的包的最大数量。对于低延迟/高速率实时流,如果未及时读取数据包,则可能会丢弃这些数据包;设置此值可以强制 ffmpeg 使用单独的输入线程并在数据包到达时立即读取它们。默认情况下,仅当指定多个输入时,ffmpeg 才会执行此操作。
对于输出,此选项指定可以排队到每个复用线程的最大数据包数。
- -sdp_file file (全局)
将输出流的 sdp 信息打印到 file。这允许在至少有一个输出不是 rtp 流时转储 sdp 信息。(要求至少有一个输出格式为 rtp)。
- -discard (输入)
允许丢弃特定的流或流中的帧。可以使用值
all
完全丢弃任何输入流,而从流中选择性丢弃帧发生在解复用器中,并非所有解复用器都支持。- none
不丢弃任何帧。
- 默认
默认值,不丢弃任何帧。
- noref
丢弃所有非参考帧。
- bidir
丢弃所有双向帧。
- nokey
丢弃所有帧,但关键帧除外。
- all
丢弃所有帧。
- -abort_on flags (全局)
在各种条件下停止并中止。可以使用以下标志:
- empty_output
没有数据包传递给复用器,输出为空。
- empty_output_stream
在某些输出流中,没有数据包传递给复用器。
- -max_error_rate (全局)
设置所有输入中解码帧失败的比例,当超过此比例时,ffmpeg 将返回退出代码 69。超过此阈值不会终止处理。范围是 0 到 1 之间的浮点数。默认值为 2/3。
- -xerror (全局)
在发生错误时停止并退出
- -max_muxing_queue_size packets (输出,每个流)
当转码音频和/或视频流时,ffmpeg 在每个此类流都有一个数据包之前不会开始写入输出。在等待这种情况发生时,会缓冲其他流的数据包。此选项设置此缓冲区的大小,以数据包为单位,用于匹配的输出流。
此选项的默认值对于大多数用途来说应该足够高,因此只有在确定需要时才更改此选项。
- -muxing_queue_data_threshold bytes (输出,每个流)
这是一个最小阈值,在此阈值之前不会考虑复用队列大小。默认为每个流 50 兆字节,并且基于传递给复用器的数据包的总大小。
- -auto_conversion_filters (全局)
启用在所有滤镜图中自动插入格式转换滤镜,包括 -vf、-af、-filter_complex 和 -lavfi 定义的滤镜图。如果滤镜格式协商需要转换,则滤镜的初始化将失败。仍然可以通过在图中插入相关的转换滤镜(scale、aresample)来执行转换。默认情况下启用,要显式禁用它,你需要指定
-noauto_conversion_filters
。- -bits_per_raw_sample[:stream_specifier] value (输出,每个流)
声明给定输出流中每个原始样本的位数是 value。请注意,此选项设置提供给编码器/复用器的信息,它不会更改流以符合此值。设置与流属性不匹配的值可能会导致编码失败或输出文件无效。
- -stats_enc_pre[:stream_specifier] path (输出,每个流)
- -stats_enc_post[:stream_specifier] path (输出,每个流)
- -stats_mux_pre[:stream_specifier] path (输出,每个流)
将有关匹配流的每帧编码信息写入由 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 (输出,每个流)
- -stats_enc_post_fmt[:stream_specifier] format_spec (输出,每个流)
- -stats_mux_pre_fmt[:stream_specifier] format_spec (输出,每个流)
指定使用 -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 (数据包)
数据包的解码时间戳,表示为整数。应乘以时间基来计算演示时间。
- dt (数据包)
帧或数据包的解码时间,表示为十进制数。等于 dts 乘以 tb。
- sn (帧,音频)
到目前为止发送给编码器的音频采样数。
- samp (帧,音频)
帧中的音频采样数。
- size (数据包)
编码数据包的大小,以字节为单位。
- br (数据包)
当前比特率,以比特/秒为单位。
- abr (数据包)
到目前为止整个流的平均比特率,以比特/秒为单位。如果此时无法确定,则为 -1。
- key (数据包)
如果数据包包含关键帧,则为字符“K”,否则为字符“N”。
标记为 数据包 的指令只能与 -stats_enc_post_fmt 和 -stats_mux_pre_fmt 一起使用。
标记为 帧 的指令只能与 -stats_enc_pre_fmt 一起使用。
标记为 音频 的指令只能与音频流一起使用。
默认格式字符串为
- 预编码
{fidx} {sidx} {n} {t}
- 后编码
{fidx} {sidx} {n} {t}
将来,可能会在默认格式化字符串的末尾添加新项目。依赖于格式保持完全不变的用户应该手动指定。
请注意,写入同一文件的不同流的统计信息可能具有不同的格式。
5.12 预设文件
预设文件包含一系列 option=value 对,每行一个,指定一系列在命令行上不方便指定的选项。以井号('#')字符开头的行将被忽略,并用于提供注释。请查看 FFmpeg 源代码树中的 presets 目录以获取示例。
预设文件有两种类型:ffpreset 和 avpreset 文件。
5.12.1 ffpreset 文件
ffpreset 文件使用 vpre
、apre
、spre
和 fpre
选项指定。 fpre
选项将预设的文件名作为输入,而不是预设名称,并且可用于任何类型的编解码器。 对于 vpre
、apre
和 spre
选项,预设文件中指定的选项将应用于与预设选项类型相同的当前选定的编解码器。
传递给 vpre
、apre
和 spre
预设选项的参数根据以下规则识别要使用的预设文件:
首先,ffmpeg 在目录 $FFMPEG_DATADIR(如果已设置)和 $HOME/.ffmpeg 中,以及在配置时定义的 datadir(通常为 PREFIX/share/ffmpeg)或 win32 上可执行文件旁边的 ffpresets 文件夹中,按该顺序搜索名为 arg.ffpreset 的文件。 例如,如果参数为 libvpx-1080p
,它将搜索文件 libvpx-1080p.ffpreset。
如果找不到此类文件,则 ffmpeg 将在上述目录中搜索名为 codec_name-arg.ffpreset 的文件,其中 codec_name 是将应用预设文件选项的编解码器的名称。 例如,如果使用 -vcodec libvpx
选择视频编解码器并使用 -vpre 1080p
,则它将搜索文件 libvpx-1080p.ffpreset。
5.12.2 avpreset 文件
avpreset 文件使用 pre
选项指定。它们的工作方式与 ffpreset 文件类似,但它们仅允许特定于编码器的选项。因此,无法使用指定编码器的 option=value 对。
当指定 pre
选项时,ffmpeg 将在目录 $AVCONV_DATADIR(如果已设置)和 $HOME/.avconv 中,以及在配置时定义的 datadir(通常为 PREFIX/share/ffmpeg)中按顺序查找带有后缀 .avpreset 的文件。
首先,ffmpeg 在上述目录中搜索名为 codec_name-arg.avpreset 的文件,其中 codec_name 是将应用预设文件选项的编解码器的名称。例如,如果使用 -vcodec libvpx
选择视频编解码器并使用 -pre 1080p
,则它将搜索文件 libvpx-1080p.avpreset。
如果找不到此类文件,则 ffmpeg 将在同一目录中搜索名为 arg.avpreset 的文件。
5.13 vstats 文件格式
-vstats
和 -vstats_file
选项允许生成包含有关生成的视频输出的统计信息的文件。
-vstats_version
选项控制生成文件的格式版本。
对于版本 1
,格式为
frame= FRAME q= FRAME_QUALITY PSNR= PSNR f_size= FRAME_SIZE s_size= STREAM_SIZEkB time= TIMESTAMP br= BITRATEkbits/s avg_br= AVERAGE_BITRATEkbits/s
对于版本 2
,格式为
out= OUT_FILE_INDEX st= OUT_FILE_STREAM_INDEX frame= FRAME_NUMBER q= FRAME_QUALITYf PSNR= PSNR f_size= FRAME_SIZE s_size= STREAM_SIZEkB time= TIMESTAMP br= BITRATEkbits/s avg_br= AVERAGE_BITRATEkbits/s
下面描述了与每个键对应的值
- avg_br
以 Kbits/s 表示的平均比特率
- br
以 Kbits/s 表示的比特率
- frame
编码帧数
- out
输出文件索引
- PSNR
峰值信噪比
- q
帧的质量
- f_size
以字节数表示的编码数据包大小
- s_size
以 KiB 表示的流大小
- st
输出文件流索引
- time
数据包的时间
- type
图像类型
另请参阅 -stats_enc 选项,了解显示编码统计信息的另一种方法。
6 示例
6.1 视频和音频抓取
如果指定输入格式和设备,则 ffmpeg 可以直接抓取视频和音频。
ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg
或者使用 ALSA 音频源(单声道输入,卡 ID 为 1)而不是 OSS
ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg
请注意,在启动 ffmpeg 之前,必须使用任何电视查看器(例如 Gerd Knorr 的 xawtv)激活正确的视频源和通道。您还必须使用标准混音器正确设置音频录制级别。
6.2 X11 抓取
通过以下方式使用 ffmpeg 抓取 X11 显示:
ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg
0.0 是 X11 服务器的 display.screen 编号,与 DISPLAY 环境变量相同。
ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg
0.0 是您的 X11 服务器的显示屏幕编号,与 DISPLAY 环境变量相同。10 是抓取的 x 偏移量,20 是 y 偏移量。
6.3 视频和音频文件格式转换
任何支持的文件格式和协议都可以作为 ffmpeg 的输入。
示例
- 您可以使用 YUV 文件作为输入。
ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
它将使用这些文件。
/tmp/test0.Y, /tmp/test0.U, /tmp/test0.V, /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
Y 文件的分辨率是 U 和 V 文件的两倍。它们是原始文件,没有头部。 它们可以由所有不错的视频解码器生成。如果 ffmpeg 无法猜测图像大小,您必须使用 -s 选项指定图像大小。
- 您可以从原始 YUV420P 文件输入。
ffmpeg -i /tmp/test.yuv /tmp/out.avi
test.yuv 是一个包含原始 YUV 平面数据的文件。每一帧都由 Y 平面组成,后面跟着垂直和水平分辨率减半的 U 和 V 平面。
- 您可以输出到原始 YUV420P 文件。
ffmpeg -i mydivx.avi hugefile.yuv
- 您可以设置多个输入文件和输出文件。
ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
将音频文件 a.wav 和原始 YUV 视频文件 a.yuv 转换为 MPEG 文件 a.mpg。
- 您也可以同时进行音频和视频转换。
ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
将 a.wav 转换为采样率为 22050 Hz 的 MPEG 音频。
- 您可以同时编码为多种格式,并定义从输入流到输出流的映射。
ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2
将 a.wav 转换为 64 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 等的文件中。图像将被缩放以适合新的 WxH 值。
如果您只想提取有限数量的帧,您可以将以上命令与
-frames:v
或-t
选项结合使用,或与 -ss 结合使用,以便从特定时间点开始提取。从多个图像创建视频。
ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi
语法
foo-%03d.jpeg
指定使用由三个数字组成的十进制数,并用零填充以表示序列号。这与 C printf 函数支持的语法相同,但只有接受普通整数的格式才适用。导入图像序列时,-i 还通过选择图像2特定的
-pattern_type glob
选项,在内部支持展开类似 shell 的通配符模式(globbing)。例如,从匹配 glob 模式
foo-*.jpeg
的文件名创建视频。ffmpeg -f image2 -pattern_type glob -framerate 12 -i 'foo-*.jpeg' -s WxH foo.avi
- 您可以在输出中放置多个相同类型的流。
ffmpeg -i test1.avi -i test2.avi -map 1:1 -map 1:0 -map 0:1 -map 0:0 -c copy -y test12.nut
生成的输出文件 test12.nut 将包含来自输入文件的前四个流,顺序相反。
- 强制 CBR 视频输出。
ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
- lmin、lmax、mblmin 和 mblmax 这四个选项使用“lambda”单位,但您可以使用 QP2LAMBDA 常数轻松地从“q”单位转换。
ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
7 语法
本节介绍 FFmpeg 库和工具使用的语法和格式。
7.1 引号和转义
除非明确指定,否则 FFmpeg 采用以下引用和转义机制。应用以下规则。
- ‘'’ 和 ‘\’ 是特殊字符(分别用于引用和转义)。 除此之外,可能还有其他特殊字符,具体取决于使用转义和引用的特定语法。
- 特殊字符通过在其前面加上 ‘\’ 来转义。
- 用 ‘'’ 括起来的所有字符都按字面量包含在解析的字符串中。 引用字符 ‘'’ 本身不能被引用,因此您可能需要关闭引号并对其进行转义。
- 除非转义或引用,否则解析字符串中开头和结尾的空格将被删除。
请注意,当使用命令行或脚本时,您可能需要添加第二层转义,这取决于所采用的 shell 语言的语法。
libavutil/avstring.h
中定义的函数 av_get_token
可用于根据上述规则解析被引用或转义的令牌。
FFmpeg 源代码树中的工具 tools/ffescape 可用于自动引用或转义脚本中的字符串。
7.1.1 示例
- 转义包含
'
特殊字符的字符串Crime d'Amour
。Crime d\'Amour
- 上面的字符串包含一个引号,因此在引用它时需要转义
'
。'Crime d'\''Amour'
- 使用引号包含开头或结尾的空格。
' this string starts and ends with whitespaces '
- 转义和引用可以混合使用。
' The string '\'string\'' is a string '
- 要包含文字 ‘\’,您可以使用转义或引用。
'c:\foo' can be written as c:\\foo
7.2 日期
接受的语法是:
[(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z] now
如果值为“now”,则它采用当前时间。
时间为当地时间,除非附加 Z,在这种情况下,它被解释为 UTC。如果未指定年-月-日部分,则采用当前的年-月-日。
7.3 时间长度
有两种接受的语法来表示持续时间。
[-][HH:]MM:SS[.m...]
HH 表示小时数,MM 表示分钟数,最多 2 位数字,SS 表示秒数,最多 2 位数字。 末尾的 m 表示 SS 的十进制值。
或者
[-]S+[.m...][s|ms|us]
S 表示秒数,带有可选的十进制部分 m。 可选的文字后缀 ‘s’、‘ms’ 或 ‘us’ 表示将该值分别解释为秒、毫秒或微秒。
在两个表达式中,可选的 ‘-’ 表示负持续时间。
7.3.1 示例
以下示例都是有效的持续时间:
- ‘55’
55 秒
- ‘0.2’
0.2 秒
- ‘200ms’
200 毫秒,即 0.2 秒
- ‘200000us’
200000 微秒,即 0.2 秒
- ‘12:03:45’
12 小时 03 分 45 秒
- ‘23.189’
23.189 秒
7.4 视频尺寸
指定源视频的大小,它可以是 widthxheight 形式的字符串,也可以是大小缩写的名称。
可以识别以下缩写:
- ‘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 视频速率
指定视频的帧率,表示为每秒生成的帧数。它必须是 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 比率
比率可以表示为表达式,或 numerator:denominator 的形式。
请注意,具有无限 (1/0) 或负值的比率被认为是有效的,因此如果您想排除这些值,则应检查返回值。
可以使用 "0:0" 字符串表示未定义的值。
7.7 颜色
它可以是如下定义的颜色名称(不区分大小写匹配)或 [0x|#]RRGGBB[AA]
序列,可能后跟 @ 和表示 alpha 分量的字符串。
alpha 分量可以是 "0x" 后跟一个十六进制数字的字符串,也可以是 0.0 到 1.0 之间的十进制数字,表示不透明度值('0x00' 或 '0.0' 表示完全透明,'0xff' 或 '1.0' 表示完全不透明)。如果未指定 alpha 分量,则假定为 '0xff'。
字符串 'random' 将产生随机颜色。
以下颜色名称被识别
- ‘AliceBlue’
0xF0F8FF
- ‘AntiqueWhite’
0xFAEBD7
- ‘Aqua’
0x00FFFF
- ‘Aquamarine’
0x7FFFD4
- ‘Azure’
0xF0FFFF
- ‘Beige’
0xF5F5DC
- ‘Bisque’
0xFFE4C4
- ‘Black’
0x000000
- ‘BlanchedAlmond’
0xFFEBCD
- ‘Blue’
0x0000FF
- ‘BlueViolet’
0x8A2BE2
- ‘Brown’
0xA52A2A
- ‘BurlyWood’
0xDEB887
- ‘CadetBlue’
0x5F9EA0
- ‘Chartreuse’
0x7FFF00
- ‘Chocolate’
0xD2691E
- ‘Coral’
0xFF7F50
- ‘CornflowerBlue’
0x6495ED
- ‘Cornsilk’
0xFFF8DC
- ‘Crimson’
0xDC143C
- ‘Cyan’
0x00FFFF
- ‘DarkBlue’
0x00008B
- ‘DarkCyan’
0x008B8B
- ‘DarkGoldenRod’
0xB8860B
- ‘DarkGray’
0xA9A9A9
- ‘DarkGreen’
0x006400
- ‘DarkKhaki’
0xBDB76B
- ‘DarkMagenta’
0x8B008B
- ‘DarkOliveGreen’
0x556B2F
- ‘Darkorange’
0xFF8C00
- ‘DarkOrchid’
0x9932CC
- ‘DarkRed’
0x8B0000
- ‘DarkSalmon’
0xE9967A
- ‘DarkSeaGreen’
0x8FBC8F
- ‘DarkSlateBlue’
0x483D8B
- ‘DarkSlateGray’
0x2F4F4F
- ‘DarkTurquoise’
0x00CED1
- ‘DarkViolet’
0x9400D3
- ‘DeepPink’
0xFF1493
- ‘DeepSkyBlue’
0x00BFFF
- ‘DimGray’
0x696969
- ‘DodgerBlue’
0x1E90FF
- ‘FireBrick’
0xB22222
- ‘FloralWhite’
0xFFFAF0
- ‘ForestGreen’
0x228B22
- ‘Fuchsia’
0xFF00FF
- ‘Gainsboro’
0xDCDCDC
- ‘GhostWhite’
0xF8F8FF
- ‘Gold’
0xFFD700
- ‘GoldenRod’
0xDAA520
- ‘Gray’
0x808080
- ‘Green’
0x008000
- ‘GreenYellow’
0xADFF2F
- ‘HoneyDew’
0xF0FFF0
- ‘HotPink’
0xFF69B4
- ‘IndianRed’
0xCD5C5C
- ‘Indigo’
0x4B0082
- ‘Ivory’
0xFFFFF0
- ‘Khaki’
0xF0E68C
- ‘Lavender’
0xE6E6FA
- ‘LavenderBlush’
0xFFF0F5
- ‘LawnGreen’
0x7CFC00
- ‘LemonChiffon’
0xFFFACD
- ‘LightBlue’
0xADD8E6
- ‘LightCoral’
0xF08080
- ‘LightCyan’
0xE0FFFF
- ‘LightGoldenRodYellow’
0xFAFAD2
- ‘LightGreen’
0x90EE90
- ‘LightGrey’
0xD3D3D3
- ‘LightPink’
0xFFB6C1
- ‘LightSalmon’
0xFFA07A
- ‘LightSeaGreen’
0x20B2AA
- ‘LightSkyBlue’
0x87CEFA
- ‘LightSlateGray’
0x778899
- ‘LightSteelBlue’
0xB0C4DE
- ‘LightYellow’
0xFFFFE0
- ‘Lime’
0x00FF00
- ‘LimeGreen’
0x32CD32
- ‘Linen’
0xFAF0E6
- ‘Magenta’
0xFF00FF
- ‘Maroon’
0x800000
- ‘MediumAquaMarine’
0x66CDAA
- ‘MediumBlue’
0x0000CD
- ‘MediumOrchid’
0xBA55D3
- ‘MediumPurple’
0x9370D8
- ‘MediumSeaGreen’
0x3CB371
- ‘MediumSlateBlue’
0x7B68EE
- ‘MediumSpringGreen’
0x00FA9A
- ‘MediumTurquoise’
0x48D1CC
- ‘MediumVioletRed’
0xC71585
- ‘MidnightBlue’
0x191970
- ‘MintCream’
0xF5FFFA
- ‘MistyRose’
0xFFE4E1
- ‘Moccasin’
0xFFE4B5
- ‘NavajoWhite’
0xFFDEAD
- ‘Navy’
0x000080
- ‘OldLace’
0xFDF5E6
- ‘Olive’
0x808000
- ‘OliveDrab’
0x6B8E23
- ‘Orange’
0xFFA500
- ‘OrangeRed’
0xFF4500
- ‘Orchid’
0xDA70D6
- ‘PaleGoldenRod’
0xEEE8AA
- ‘PaleGreen’
0x98FB98
- ‘PaleTurquoise’
0xAFEEEE
- ‘PaleVioletRed’
0xD87093
- ‘PapayaWhip’
0xFFEFD5
- ‘PeachPuff’
0xFFDAB9
- ‘Peru’
0xCD853F
- ‘Pink’
0xFFC0CB
- ‘Plum’
0xDDA0DD
- ‘PowderBlue’
0xB0E0E6
- ‘Purple’
0x800080
- ‘Red’
0xFF0000
- ‘RosyBrown’
0xBC8F8F
- ‘皇家蓝’
0x4169E1
- ‘马鞍棕’
0x8B4513
- ‘鲑鱼色’
0xFA8072
- ‘沙棕色’
0xF4A460
- ‘海绿色’
0x2E8B57
- ‘海贝壳色’
0xFFF5EE
- ‘赭色’
0xA0522D
- ‘银色’
0xC0C0C0
- ‘天蓝色’
0x87CEEB
- ‘石板蓝’
0x6A5ACD
- ‘石板灰’
0x708090
- ‘雪白色’
0xFFFAFA
- ‘春绿色’
0x00FF7F
- ‘钢蓝色’
0x4682B4
- ‘棕褐色’
0xD2B48C
- ‘水鸭色’
0x008080
- ‘蓟色’
0xD8BFD8
- ‘番茄色’
0xFF6347
- ‘绿松石色’
0x40E0D0
- ‘紫色’
0xEE82EE
- ‘小麦色’
0xF5DEB3
- ‘白色’
0xFFFFFF
- ‘烟白色’
0xF5F5F5
- ‘黄色’
0xFFFF00
- ‘黄绿色’
0x9ACD32
7.8 声道布局
声道布局指定了多声道音频流中声道的空间排列。为了指定声道布局,FFmpeg 使用一种特殊的语法。
各个声道通过一个 ID 来标识,如下表所示
- ‘FL’
前左
- ‘FR’
前右
- ‘FC’
前中
- ‘LFE’
低频
- ‘BL’
后左
- ‘BR’
后右
- ‘FLC’
前左中
- ‘FRC’
前右中
- ‘BC’
后中
- ‘SL’
侧左
- ‘SR’
侧右
- ‘TC’
顶部中心
- ‘TFL’
顶部前左
- ‘TFC’
顶部前中
- ‘TFR’
顶部前右
- ‘TBL’
顶部后左
- ‘TBC’
顶部后中
- ‘TBR’
顶部后右
- ‘DL’
下混左
- ‘DR’
下混右
- ‘WL’
宽左
- ‘WR’
宽右
- ‘SDL’
环绕直达左
- ‘SDR’
环绕直达右
- ‘LFE2’
低频 2
可以使用以下标识符来指定标准声道布局组合
- ‘单声道’
FC
- ‘立体声’
FL+FR
- ‘2.1’
FL+FR+LFE
- ‘3.0’
FL+FR+FC
- ‘3.0(后)’
FL+FR+BC
- ‘4.0’
FL+FR+FC+BC
- ‘四声道’
FL+FR+BL+BR
- ‘四声道(侧)’
FL+FR+SL+SR
- ‘3.1’
FL+FR+FC+LFE
- ‘5.0’
FL+FR+FC+BL+BR
- ‘5.0(侧)’
FL+FR+FC+SL+SR
- ‘4.1’
FL+FR+FC+LFE+BC
- ‘5.1’
FL+FR+FC+LFE+BL+BR
- ‘5.1(侧)’
FL+FR+FC+LFE+SL+SR
- ‘6.0’
FL+FR+FC+BC+SL+SR
- ‘6.0(前)’
FL+FR+FLC+FRC+SL+SR
- ‘3.1.2’
FL+FR+FC+LFE+TFL+TFR
- ‘六边形’
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(前)’
FL+FR+LFE+FLC+FRC+SL+SR
- ‘7.0’
FL+FR+FC+BL+BR+SL+SR
- ‘7.0(前)’
FL+FR+FC+FLC+FRC+SL+SR
- ‘7.1’
FL+FR+FC+LFE+BL+BR+SL+SR
- ‘7.1(宽)’
FL+FR+FC+LFE+BL+BR+FLC+FRC
- ‘7.1(宽侧)’
FL+FR+FC+LFE+FLC+FRC+SL+SR
- ‘5.1.2’
FL+FR+FC+LFE+BL+BR+TFL+TFR
- ‘八边形’
FL+FR+FC+BL+BR+BC+SL+SR
- ‘立方体’
FL+FR+BL+BR+TFL+TFR+TBL+TBR
- ‘5.1.4’
FL+FR+FC+LFE+BL+BR+TFL+TFR+TBL+TBR
- ‘7.1.2’
FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR
- ‘7.1.4’
FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBL+TBR
- ‘7.2.3’
FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBC+LFE2
- ‘9.1.4’
FL+FR+FC+LFE+BL+BR+FLC+FRC+SL+SR+TFL+TFR+TBL+TBR
- ‘9.1.6’
FL+FR+FC+LFE+BL+BR+FLC+FRC+SL+SR+TFL+TFR+TBL+TBR+TSL+TSR
- ‘十六边形’
FL+FR+FC+BL+BR+BC+SL+SR+WL+WR+TBL+TBR+TBC+TFC+TFL+TFR
- ‘双耳’
BIL+BIR
- ‘下混’
DL+DR
- ‘22.2’
FL+FR+FC+LFE+BL+BR+FLC+FRC+BC+SL+SR+TC+TFL+TFC+TFR+TBL+TBC+TBR+LFE2+TSL+TSR+BFC+BFL+BFR
自定义声道布局可以指定为一系列术语,用“+”分隔。每个术语可以是
- 单个声道的名称(例如“FL”、“FR”、“FC”、“LFE”等),每个声道可以选择在“@”后包含一个自定义名称(例如“FL@Left”、“FR@Right”、“FC@Center”、“LFE@Low_Frequency”等)
标准声道布局可以通过以下方式指定
- 单个声道的名称(例如“FL”、“FR”、“FC”、“LFE”等)
- 标准声道布局的名称(例如“单声道”、“立体声”、“4.0”、“四声道”、“5.0”等)
- 声道的数量,以十进制表示,后跟“c”,表示该数量声道的默认声道布局(参见函数
av_channel_layout_default
)。请注意,并非所有声道数量都有默认布局。 - 声道的数量,以十进制表示,后跟“C”,表示具有指定数量声道的未知声道布局。请注意,并非所有声道布局规范字符串都支持未知声道布局。
- 声道布局掩码,以十六进制表示,以“0x”开头(参见 libavutil/channel_layout.h 中的
AV_CH_*
宏)。
在 libavutil 版本 53 之前,指定声道数量的尾随字符“c”是可选的,但现在是必需的,而声道布局掩码也可以指定为十进制数(当且仅当其后不跟“c”或“C”时)。
另请参见 libavutil/channel_layout.h 中定义的函数 av_channel_layout_from_string
。
8 表达式求值
在计算算术表达式时,FFmpeg 使用通过 libavutil/eval.h 接口实现的内部公式计算器。
表达式可以包含一元运算符、二元运算符、常量和函数。
两个表达式 expr1 和 expr2 可以组合成另一个表达式“expr1;expr2”。expr1 和 expr2 依次求值,新表达式的值为 expr2 的值。
以下二元运算符可用:+
、-
、*
、/
、^
。
以下一元运算符可用:+
、-
。
一些内部变量可用于存储和加载中间结果。可以使用带有索引参数(从 0 到 9 不等)的 ld
和 st
函数来访问它们,以指定要访问的内部变量。
以下函数可用
- abs(x)
计算 x 的绝对值。
- acos(x)
计算 x 的反余弦。
- asin(x)
计算 x 的反正弦。
- atan(x)
计算 x 的反正切。
- atan2(y, x)
计算 y/x 的反正切的主值。
- between(x, min, max)
如果 x 大于或等于 min 且小于或等于 max,则返回 1,否则返回 0。
- bitand(x, y)
- bitor(x, y)
对 x 和 y 执行按位与/或运算。
在执行按位运算之前,x 和 y 的计算结果会转换为整数。
请注意,转换为整数和转换回浮点数都可能会损失精度。请注意大数字(通常为 2^53 及更大)的意外结果。
- ceil(expr)
将表达式 expr 的值向上舍入到最接近的整数。例如,“ceil(1.5)”为“2.0”。
- clip(x, min, max)
返回 x 的值,该值被限制在 min 和 max 之间。
- cos(x)
计算 x 的余弦值。
- cosh(x)
计算 x 的双曲余弦值。
- eq(x, y)
如果 x 和 y 相等,则返回 1,否则返回 0。
- exp(x)
计算 x 的指数 (以
e
,即欧拉数为底)。- floor(expr)
将表达式 expr 的值向下舍入到最接近的整数。例如,“floor(-1.5)”为“-2.0”。
- gauss(x)
计算 x 的高斯函数,对应于
exp(-x*x/2) / sqrt(2*PI)
。- gcd(x, y)
返回 x 和 y 的最大公约数。如果 x 和 y 都为 0,或者两者或其中之一小于零,则行为未定义。
- gt(x, y)
如果 x 大于 y,则返回 1,否则返回 0。
- gte(x, y)
如果 x 大于或等于 y,则返回 1,否则返回 0。
- hypot(x, y)
此函数类似于同名的 C 函数;它返回 "sqrt(x*x + y*y)",即边长为 x 和 y 的直角三角形的斜边长度,或者点 (x, y) 到原点的距离。
- if(x, y)
计算 x,如果结果非零,则返回计算 y 的结果,否则返回 0。
- if(x, y, z)
计算 x,如果结果非零,则返回计算 y 的结果,否则返回计算 z 的结果。
- ifnot(x, y)
计算 x,如果结果为零,则返回计算 y 的结果,否则返回 0。
- ifnot(x, y, z)
计算 x,如果结果为零,则返回计算 y 的结果,否则返回计算 z 的结果。
- isinf(x)
如果 x 为 +/-INFINITY,则返回 1.0,否则返回 0.0。
- isnan(x)
如果 x 为 NAN,则返回 1.0,否则返回 0.0。
- ld(idx)
加载索引为 idx 的内部变量的值,该值先前已使用 st(idx, expr) 存储。该函数返回加载的值。
- lerp(x, y, z)
返回 x 和 y 之间按 z 量进行的线性插值。
- log(x)
计算 x 的自然对数。
- lt(x, y)
如果 x 小于 y,则返回 1,否则返回 0。
- lte(x, y)
如果 x 小于或等于 y,则返回 1,否则返回 0。
- max(x, y)
返回 x 和 y 之间的最大值。
- min(x, y)
返回 x 和 y 之间的最小值。
- mod(x, y)
计算 x 除以 y 的余数。
- not(expr)
如果 expr 为零,则返回 1.0,否则返回 0.0。
- pow(x, y)
计算 x 的 y 次幂,它等价于 "(x)^(y)"。
- print(t)
- print(t, l)
打印表达式 t 的值,日志级别为 l。如果未指定 l,则使用默认日志级别。返回打印的表达式的值。
- random(idx)
返回 0.0 到 1.0 之间的伪随机值。idx 是用于保存种子/状态的内部变量的索引,该变量先前可以使用
st(idx)
存储。要初始化种子,您需要将种子值作为 64 位无符号整数存储在索引为 idx 的内部变量中。
例如,要将值为
42
的种子存储在索引为0
的内部变量中,并打印一些随机值st(0,42); print(random(0)); print(random(0)); print(random(0))
- randomi(idx, min, max)
返回 min 和 max 之间的伪随机值。idx 是用于保存种子/状态的内部变量的索引,该变量先前可以使用
st(idx)
存储。要初始化种子,您需要将种子值作为 64 位无符号整数存储在索引为 idx 的内部变量中。
- root(expr, max)
查找一个输入值,该输入值使由 expr 表示的函数(参数为 ld(0))在 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(idx, expr)
将表达式 expr 的值存储在内部变量中。idx 指定存储值的变量的索引,它的值范围为 0 到 9。该函数返回存储在内部变量中的值。
存储的值可以使用
ld(var)
检索。注意:变量当前不在表达式之间共享。
- tan(x)
计算 x 的正切值。
- tanh(x)
计算 x 的双曲正切值。
- taylor(expr, x)
- taylor(expr, x, idx)
在 x 处计算泰勒级数,给定一个表示函数在 0 处的
ld(idx)
阶导数的表达式。当级数不收敛时,结果未定义。
ld(idx) 用于表示 expr 中的导数阶数,这意味着给定的表达式将被多次计算,并具有表达式可以通过
ld(idx)
访问的各种输入值。如果未指定 idx,则假定为 0。注意,当您具有在 y 而不是 0 处的导数时,可以使用
taylor(expr, x-y)
。- time(0)
返回当前(挂钟)时间(以秒为单位)。
- trunc(expr)
将表达式 expr 的值向零方向舍入到最接近的整数。例如,“trunc(-1.5)”为“-1.0”。
- while(cond, expr)
当表达式 cond 为非零时,计算表达式 expr,并返回最后一次 expr 计算的值;如果 cond 始终为假,则返回 NAN。
可以使用以下常量
- PI
单位圆的面积,约等于 3.14
- E
exp(1)(欧拉数),约等于 2.718
- PHI
黄金比例 (1+sqrt(5))/2,约等于 1.618
假设如果一个表达式具有非零值,则认为它是“真”的,请注意
*
的作用类似于 AND
+
的作用类似于 OR
例如,构造
if (A AND B) then C
等效于
if(A*B, C)
在您的 C 代码中,您可以扩展一元和二元函数的列表,并定义可识别的常量,以便它们可用于您的表达式。
评估器还识别国际单位制前缀。如果在前缀后附加“i”,则使用基于 1024 而不是 1000 的幂的二进制前缀。“B”后缀将值乘以 8,并且可以附加在单位前缀之后或单独使用。这允许使用例如“KB”、“MiB”、“G”和“B”作为数字后缀。
以下是可用的国际单位制前缀列表,并指示了相应的 10 的幂和 2 的幂。
- y
10^-24 / 2^-80
- z
10^-21 / 2^-70
- a
10^-18 / 2^-60
- f
10^-15 / 2^-50
- p
10^-12 / 2^-40
- n
10^-9 / 2^-30
- u
10^-6 / 2^-20
- m
10^-3 / 2^-10
- c
10^-2
- d
10^-1
- h
10^2
- k
10^3 / 2^10
- K
10^3 / 2^10
- M
10^6 / 2^20
- G
10^9 / 2^30
- T
10^12 / 2^40
- P
10^15 / 2^50
- E
10^18 / 2^60
- Z
10^21 / 2^70
- Y
10^24 / 2^80
9 编解码器选项
libavcodec 提供一些通用的全局选项,这些选项可以设置在所有编码器和解码器上。此外,每个编解码器可能支持所谓的私有选项,这些选项是特定于给定编解码器的。
有时,全局选项可能只影响特定类型的编解码器,对于其他编解码器可能毫无意义或被忽略,因此您需要了解指定选项的含义。此外,某些选项仅用于解码或编码。
可以通过在 FFmpeg 工具中指定 -option value 来设置选项,也可以通过在 AVCodecContext
选项中显式设置值,或者使用 libavutil/opt.h API 进行编程方式的设置。
以下是支持的选项列表:
- b integer (编码,音频,视频)
设置比特率,单位为比特/秒。默认值为 200K。
- ab integer (编码,音频)
设置音频比特率,单位为比特/秒。默认值为 128K。
- bt integer (编码,视频)
设置视频比特率容差,单位为比特/秒。在单次编码模式下,比特率容差指定速率控制允许偏离目标平均比特率值的程度。这与最小/最大比特率无关。过度降低容差会对质量产生不利影响。
- flags flags (解码/编码,音频,视频,字幕)
设置通用标志。
可能的值:
- ‘mv4’
使用每个宏块四个运动矢量 (mpeg4)。
- ‘qpel’
使用 1/4 像素运动补偿。
- ‘loop’
使用环路滤波器。
- ‘qscale’
使用固定 qscale。
- ‘pass1’
在第一遍模式下使用内部 2 遍速率控制。
- ‘pass2’
在第二遍模式下使用内部 2 遍速率控制。
- ‘gray’
仅解码/编码灰度。
- ‘psnr’
在编码期间设置错误变量。
- ‘truncated’
输入比特流可能被随机截断。
- ‘drop_changed’
不输出参数与流中第一个解码帧不同的帧。当帧被丢弃时,会返回错误 AVERROR_INPUT_CHANGED。
- ‘ildct’
使用隔行 DCT。
- ‘low_delay’
强制低延迟。
- ‘global_header’
将全局头放在 extradata 中,而不是每个关键帧中。
- ‘bitexact’
仅写入平台、构建和时间无关的数据(除了 (I)DCT)。这确保了文件和数据校验和在平台之间可重现且匹配。其主要用途是进行回归测试。
- ‘aic’
应用 H263 高级帧内编码 / mpeg4 AC 预测。
- ‘ilme’
应用隔行运动估计。
- ‘cgop’
使用封闭 GOP。
- ‘output_corrupt’
输出甚至可能已损坏的帧。
- time_base rational number
设置编解码器时基。
它是表示帧时间戳的基本时间单位(以秒为单位)。对于固定帧率的内容,时基应为
1 / frame_rate
,并且时间戳增量应恒定为 1。- g integer (编码,视频)
设置图像组 (GOP) 大小。默认值为 12。
- ar integer (解码/编码,音频)
设置音频采样率(单位为赫兹)。
- ac integer (解码/编码,音频)
设置音频通道数。
- cutoff integer (编码,音频)
设置截止带宽。(仅受选定编码器支持,请参阅其各自的文档部分。)
- frame_size integer (编码,音频)
设置音频帧大小。
除最后一个帧外,每个提交的帧必须包含每个通道正好 frame_size 个样本。当编解码器设置了 CODEC_CAP_VARIABLE_FRAME_SIZE 时,可以为 0,在这种情况下,帧大小不受限制。某些解码器会设置此选项以指示恒定的帧大小。
- frame_number integer
设置帧号。
- delay integer
- qcomp float (编码,视频)
设置视频量化器缩放压缩 (VBR)。它在速率控制方程中用作常量。推荐的默认 rc_eq 范围:0.0-1.0。
- qblur float (编码,视频)
设置视频量化器缩放模糊 (VBR)。
- qmin integer (编码,视频)
设置最小视频量化器缩放 (VBR)。必须介于 -1 和 69 之间,默认值为 2。
- qmax integer (编码,视频)
设置最大视频量化器缩放 (VBR)。必须介于 -1 和 1024 之间,默认值为 31。
- qdiff integer (编码,视频)
设置量化器缩放之间的最大差异 (VBR)。
- bf integer (编码,视频)
设置非 B 帧之间 B 帧的最大数量。
必须是介于 -1 和 16 之间的整数。0 表示禁用 B 帧。如果使用 -1 值,它将根据编码器选择一个自动值。
默认值为 0。
- b_qfactor float (编码,视频)
设置 P 帧和 B 帧之间的 qp 系数。
- codec_tag integer
- bug flags (解码,视频)
解决未自动检测到的编码器错误。
可能的值:
- ‘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 (解码/编码,音频,视频)
指定严格遵循标准的程度。
可能的值:
- ‘very’
严格符合规范或参考软件的旧版本。
- ‘strict’
严格符合规范中的所有内容,无论后果如何。
- ‘normal’
- ‘unofficial’
允许非官方扩展。
- ‘experimental’
允许非标准化的实验性内容、实验性(未完成/正在进行/未经良好测试)的解码器和编码器。注意:实验性解码器可能存在安全风险,请勿将其用于解码不受信任的输入。
- b_qoffset float (编码,视频)
设置 P 帧和 B 帧之间的 QP 偏移。
- err_detect flags (解码,音频,视频)
设置错误检测标志。
可能的值:
- ‘crccheck’
验证嵌入的 CRC。
- ‘bitstream’
检测比特流规范偏差。
- ‘buffer’
检测不正确的比特流长度。
- ‘explode’
在检测到轻微错误时中止解码。
- ‘ignore_err’
忽略解码错误,并继续解码。如果您想分析视频的内容,因此希望解码所有内容,无论如何,这都很有用。如果发生错误,此选项不会产生令人愉悦的观看视频。
- ‘careful’
将违反规范且未在实际中看到的事情视为错误。
- ‘compliant’
将所有不符合规范的情况视为错误。
- ‘aggressive’
将理智的编码器不应该做的事情视为错误。
- has_b_frames integer
- block_align integer
- rc_override_count integer
- maxrate integer (编码,音频,视频)
设置最大比特率容差,单位为比特/秒。需要设置 bufsize。
- minrate integer (编码,音频,视频)
设置最小比特率容差,单位为比特/秒。在设置 CBR 编码时最有用。其他情况下几乎没用。
- bufsize integer (编码,音频,视频)
设置速率控制缓冲区大小,单位为比特。
- i_qfactor float (编码,视频)
设置 P 帧和 I 帧之间的 QP 系数。
- i_qoffset float (编码,视频)
设置 P 帧和 I 帧之间的 QP 偏移。
- dct integer (编码,视频)
设置 DCT 算法。
可能的值:
- ‘auto’
自动选择一个好的算法(默认)
- ‘fastint’
快速整数算法
- ‘int’
精确整数算法
- ‘mmx’
- ‘altivec’
- ‘faan’
浮点 AAN DCT
- lumi_mask float (编码,视频)
对亮度区域的压缩强度高于中间亮度区域。
- tcplx_mask float (编码,视频)
设置时间复杂度掩码。
- scplx_mask float (编码,视频)
设置空间复杂度掩码。
- p_mask float (编码,视频)
设置帧间掩码。
- dark_mask float (编码,视频)
对黑暗区域的压缩强度高于中间亮度区域。
- idct integer (解码/编码,视频)
选择 IDCT 实现。
可能的值:
- ‘auto’
- ‘int’
- ‘simple’
- ‘simplemmx’
- ‘simpleauto’
自动选择与 simple 版本兼容的 IDCT
- ‘arm’
- ‘altivec’
- ‘sh4’
- ‘simplearm’
- ‘simplearmv5te’
- ‘simplearmv6’
- ‘simpleneon’
- ‘xvid’
- ‘faani’
浮点 AAN IDCT
- slice_count integer
- ec flags (解码,视频)
设置错误隐藏策略。
可能的值:
- ‘guess_mvs’
迭代运动矢量 (MV) 搜索(慢)
- ‘deblock’
对损坏的宏块使用强去块滤波器
- ‘favor_inter’
优先从前一帧而不是当前帧进行预测
- bits_per_coded_sample integer
- aspect rational number (编码,视频)
设置样本宽高比。
- sar rational number (编码,视频)
设置样本宽高比。 aspect 的别名。
- debug flags (解码/编码,音频,视频,字幕)
打印特定的调试信息。
可能的值:
- ‘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 (编码,视频)
设置全像素运动估计比较函数。
可能的值:
- ‘sad’
绝对差之和,快速(默认)
- ‘sse’
平方误差之和
- ‘satd’
绝对哈达玛变换差之和
- ‘dct’
绝对 DCT 变换差之和
- ‘psnr’
平方量化误差之和(避免,质量低)
- ‘bit’
块所需的比特数
- ‘rd’
率失真最优,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差之和
- ‘vsse’
平方垂直差之和
- ‘nsse’
噪声保持平方差之和
- ‘w53’
5/3 小波,仅用于雪花效果
- ‘w97’
9/7 小波,仅用于雪花效果
- ‘dctmax’
- ‘chroma’
- subcmp integer (编码,视频)
设置子像素运动估计比较函数。
可能的值:
- ‘sad’
绝对差之和,快速(默认)
- ‘sse’
平方误差之和
- ‘satd’
绝对哈达玛变换差之和
- ‘dct’
绝对 DCT 变换差之和
- ‘psnr’
平方量化误差之和(避免,质量低)
- ‘bit’
块所需的比特数
- ‘rd’
率失真最优,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差之和
- ‘vsse’
平方垂直差之和
- ‘nsse’
噪声保持平方差之和
- ‘w53’
5/3 小波,仅用于雪花效果
- ‘w97’
9/7 小波,仅用于雪花效果
- ‘dctmax’
- ‘chroma’
- mbcmp integer (编码,视频)
设置宏块比较函数。
可能的值:
- ‘sad’
绝对差之和,快速(默认)
- ‘sse’
平方误差之和
- ‘satd’
绝对哈达玛变换差之和
- ‘dct’
绝对 DCT 变换差之和
- ‘psnr’
平方量化误差之和(避免,质量低)
- ‘bit’
块所需的比特数
- ‘rd’
率失真最优,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差之和
- ‘vsse’
平方垂直差之和
- ‘nsse’
噪声保持平方差之和
- ‘w53’
5/3 小波,仅用于雪花效果
- ‘w97’
9/7 小波,仅用于雪花效果
- ‘dctmax’
- ‘chroma’
- ildctcmp integer (编码,视频)
设置隔行 DCT 比较函数。
可能的值:
- ‘sad’
绝对差之和,快速(默认)
- ‘sse’
平方误差之和
- ‘satd’
绝对哈达玛变换差之和
- ‘dct’
绝对 DCT 变换差之和
- ‘psnr’
平方量化误差之和(避免,质量低)
- ‘bit’
块所需的比特数
- ‘rd’
率失真最优,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差之和
- ‘vsse’
平方垂直差之和
- ‘nsse’
噪声保持平方差之和
- ‘w53’
5/3 小波,仅用于雪花效果
- ‘w97’
9/7 小波,仅用于雪花效果
- ‘dctmax’
- ‘chroma’
- dia_size integer (编码,视频)
设置运动估计的菱形类型和大小。
- ‘(1024, INT_MAX)’
全运动估计(最慢)
- ‘(768, 1024]’
umh 运动估计
- ‘(512, 768]’
十六进制运动估计
- ‘(256, 512]’
l2s 菱形运动估计
- ‘[2,256]’
var 菱形运动估计
- ‘(-1, 2)’
小菱形运动估计
- ‘-1’
有趣的菱形运动估计
- ‘(INT_MIN, -1)’
sab 菱形运动估计
- last_pred integer (编码,视频)
设置前一帧运动预测器的数量。
- precmp integer (编码,视频)
设置预运动估计比较函数。
可能的值:
- ‘sad’
绝对差之和,快速(默认)
- ‘sse’
平方误差之和
- ‘satd’
绝对哈达玛变换差之和
- ‘dct’
绝对 DCT 变换差之和
- ‘psnr’
平方量化误差之和(避免,质量低)
- ‘bit’
块所需的比特数
- ‘rd’
率失真最优,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差之和
- ‘vsse’
平方垂直差之和
- ‘nsse’
噪声保持平方差之和
- ‘w53’
5/3 小波,仅用于雪花效果
- ‘w97’
9/7 小波,仅用于雪花效果
- ‘dctmax’
- ‘chroma’
- pre_dia_size integer (编码,视频)
设置运动估计预处理的菱形类型和大小。
- subq integer (编码,视频)
设置子像素运动估计质量。
- me_range integer (编码,视频)
设置限制运动矢量范围(DivX 播放器为 1023)。
- global_quality integer (编码,音频,视频)
- slice_flags integer
- mbd integer (编码,视频)
设置宏块决策算法(高质量模式)。
可能的值:
- ‘simple’
使用 mbcmp(默认)
- ‘bits’
使用最少比特
- ‘rd’
使用最佳率失真
- rc_init_occupancy integer (编码,视频)
设置解码开始前应加载到 rc 缓冲区中的比特数。
- flags2 flags (解码/编码,音频,视频,字幕)
-
可能的值:
- ‘fast’
允许不符合规范的加速技巧。
- ‘noout’
跳过比特流编码。
- ‘ignorecrop’
忽略 SPS 中的裁剪信息。
- ‘local_header’
将全局标头放置在每个关键帧而不是 extradata 中。
- ‘chunks’
帧数据可能被分成多个块。
- ‘showall’
显示第一个关键帧之前的所有帧。
- ‘export_mvs’
将运动矢量导出到帧边数据 (请参阅
AV_FRAME_DATA_MOTION_VECTORS
),以供支持的编解码器使用。另请参阅 doc/examples/export_mvs.c。- ‘skip_manual’
不要跳过样本,并将跳过信息导出为帧边数据。
- ‘ass_ro_flush_noop’
刷新时不要重置 ASS ReadOrder 字段。
- ‘icc_profiles’
从/向色度标签生成/解析嵌入的 ICC 配置文件。
- export_side_data flags (解码/编码,音频,视频,字幕)
-
可能的值:
- ‘mvs’
将运动矢量导出到帧边数据 (请参阅
AV_FRAME_DATA_MOTION_VECTORS
),以供支持的编解码器使用。另请参阅 doc/examples/export_mvs.c。- ‘prft’
将编码器生产者参考时间导出到数据包边数据(请参阅
AV_PKT_DATA_PRFT
),以供支持的编解码器使用。- ‘venc_params’
通过帧边数据(请参阅
AV_FRAME_DATA_VIDEO_ENC_PARAMS
)导出视频编码参数,以供支持的编解码器使用。目前支持 H.264 和 VP9。- ‘film_grain’
通过帧边数据(请参阅
AV_FRAME_DATA_FILM_GRAIN_PARAMS
)导出胶片颗粒参数。目前 AV1 解码器支持此功能。- ‘enhancements’
通过帧边数据导出图像增强元数据,例如 LCEVC(请参阅
AV_FRAME_DATA_LCEVC
)。
- threads integer (解码/编码,视频)
设置要使用的线程数,如果所选的编解码器实现支持多线程。
可能的值:
- ‘auto, 0’
自动选择要设置的线程数
默认值为 ‘auto’。
- dc integer (编码,视频)
设置 intra_dc_precision。
- nssew integer (编码,视频)
设置 nsse 权重。
- skip_top integer (解码,视频)
设置顶部要跳过的宏块行数。
- skip_bottom integer (解码,视频)
设置底部要跳过的宏块行数。
- profile integer (编码,音频,视频)
-
设置编码器编解码器配置文件。默认值为 ‘unknown’。编码器特定的配置文件在相关的编码器文档中记录。
- level integer (编码,音频,视频)
-
设置编码器级别。此级别取决于特定的编解码器,并且可能与配置文件级别相对应。默认设置为 ‘unknown’。
可能的值:
- ‘unknown’
- lowres integer (解码,音频,视频)
以 1= 1/2、2=1/4、3=1/8 的分辨率解码。
- mblmin integer (编码,视频)
设置最小宏块拉格朗日因子 (VBR)。
- mblmax integer (编码,视频)
设置最大宏块拉格朗日因子 (VBR)。
- skip_loop_filter integer (解码,视频)
- skip_idct integer (解码,视频)
- skip_frame integer (解码,视频)
-
使解码器根据选项值选择的帧类型丢弃处理。
skip_loop_filter 跳过帧循环滤波,skip_idct 跳过帧 IDCT/反量化,skip_frame 跳过解码。
可能的值:
- ‘none’
不丢弃任何帧。
- ‘default’
丢弃像 0 大小的帧这样的无用帧。
- ‘noref’
丢弃所有非参考帧。
- ‘bidir’
丢弃所有双向帧。
- ‘nokey’
丢弃所有帧,但关键帧除外。
- ‘nointra’
丢弃除了 I 帧之外的所有帧。
- ‘all’
丢弃所有帧。
默认值为 ‘default’。
- bidir_refine integer (编码,视频)
优化双向宏块中使用的两个运动矢量。
- keyint_min integer (编码,视频)
设置 IDR 帧之间的最小间隔。
- refs integer (编码,视频)
设置用于运动补偿的参考帧。
- trellis integer (编码,音频,视频)
设置速率失真最优量化。
- mv0_threshold integer (编码,视频)
- compression_level integer (编码,音频,视频)
- bits_per_raw_sample integer
- channel_layout integer (解码/编码,音频)
有关所需语法,请参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的“通道布局”部分。
- rc_max_vbv_use float (编码,视频)
- rc_min_vbv_use float (编码,视频)
- color_primaries integer (解码/编码,视频)
可能的值:
- ‘bt709’
BT.709
- ‘bt470m’
BT.470 M
- ‘bt470bg’
BT.470 BG
- ‘smpte170m’
SMPTE 170 M
- ‘smpte240m’
SMPTE 240 M
- ‘film’
胶片
- ‘bt2020’
BT.2020
- ‘smpte428’
- ‘smpte428_1’
SMPTE ST 428-1
- ‘smpte431’
SMPTE 431-2
- ‘smpte432’
SMPTE 432-1
- ‘jedec-p22’
JEDEC P22
- color_trc integer (解码/编码,视频)
可能的值:
- ‘bt709’
BT.709
- ‘gamma22’
BT.470 M
- ‘gamma28’
BT.470 BG
- ‘smpte170m’
SMPTE 170 M
- ‘smpte240m’
SMPTE 240 M
- ‘linear’
线性
- ‘log’
- ‘log100’
对数
- ‘log_sqrt’
- ‘log316’
对数平方根
- ‘iec61966_2_4’
- ‘iec61966-2-4’
IEC 61966-2-4
- ‘bt1361’
- ‘bt1361e’
BT.1361
- ‘iec61966_2_1’
- ‘iec61966-2-1’
IEC 61966-2-1
- ‘bt2020_10’
- ‘bt2020_10bit’
BT.2020 - 10 位
- ‘bt2020_12’
- ‘bt2020_12bit’
BT.2020 - 12 位
- ‘smpte2084’
SMPTE ST 2084
- ‘smpte428’
- ‘smpte428_1’
SMPTE ST 428-1
- ‘arib-std-b67’
ARIB STD-B67
- colorspace integer (解码/编码,视频)
可能的值:
- ‘rgb’
RGB
- ‘bt709’
BT.709
- ‘fcc’
FCC
- ‘bt470bg’
BT.470 BG
- ‘smpte170m’
SMPTE 170 M
- ‘smpte240m’
SMPTE 240 M
- ‘ycocg’
YCOCG
- ‘bt2020nc’
- ‘bt2020_ncl’
BT.2020 NCL
- ‘bt2020c’
- ‘bt2020_cl’
BT.2020 CL
- ‘smpte2085’
SMPTE 2085
- ‘chroma-derived-nc’
色度推导的 NCL
- ‘chroma-derived-c’
色度推导的 CL
- ‘ictcp’
ICtCp
- color_range integer (解码/编码,视频)
如果用作输入参数,它会作为解码器的提示,提示输入具有的 color_range。可能的值
- ‘tv’
- ‘mpeg’
- ‘limited’
MPEG (219*2^(n-8))
- ‘pc’
- ‘jpeg’
- ‘full’
JPEG (2^n-1)
- chroma_sample_location integer (解码/编码,视频)
可能的值:
- ‘left’
- ‘center’
- ‘topleft’
- ‘top’
- ‘bottomleft’
- ‘bottom’
- log_level_offset integer
设置日志级别偏移量。
- slices integer (编码,视频)
切片数量,用于并行编码。
- thread_type flags (解码/编码,视频)
选择要使用的多线程方法。
使用 ‘frame’ 将使每个线程的解码延迟增加一帧,因此无法提供未来帧的客户端不应使用它。
可能的值:
- ‘slice’
一次解码单个帧的多个部分。
仅当视频使用切片编码时,使用切片的多线程才起作用。
- ‘frame’
一次解码多个帧。
默认值为 ‘slice+frame’。
- audio_service_type integer (编码,音频)
设置音频服务类型。
可能的值:
- ‘ma’
主要音频服务
- ‘ef’
效果
- ‘vi’
视觉障碍
- ‘hi’
听力障碍
- ‘di’
对话
- ‘co’
评论
- ‘em’
紧急情况
- ‘vo’
画外音
- ‘ka’
卡拉 OK
- request_sample_fmt sample_fmt (解码,音频)
设置音频解码器应首选的采样格式。默认值为
none
。- pkt_timebase 有理数
- sub_charenc encoding (解码,字幕)
设置输入字幕字符编码。
- field_order field_order (视频)
设置/覆盖视频的场序。可能的值
- ‘progressive’
逐行扫描视频
- ‘tt’
隔行扫描视频,首先编码和显示顶场
- ‘bb’
隔行扫描视频,首先编码和显示底场
- ‘tb’
隔行扫描视频,先编码顶场,先显示底场
- ‘bt’
隔行扫描视频,先编码底场,先显示顶场
- skip_alpha bool (解码,视频)
设置为 1 可禁用处理 alpha(透明度)。这类似于 flags 选项中的 ‘gray’ 标志,该标志跳过色度信息而不是 alpha。默认为 0。
- codec_whitelist list (输入)
允许的解码器的逗号分隔列表。默认情况下,允许所有解码器。
- dump_separator 字符串 (输入)
用于分隔在命令行上打印的关于流参数的字段的分隔符。例如,用换行符和缩进分隔字段
ffprobe -dump_separator " " -i ~/videos/matrixbench_mpeg2.mpg
- max_pixels 整数 (解码/编码,视频)
每张图像的最大像素数。此值可用于避免因大图像导致的内存不足错误。
- apply_cropping 布尔值 (解码,视频)
如果裁剪参数是左侧和顶部参数所需对齐的倍数,则启用裁剪。如果未满足对齐要求,则将部分应用裁剪以保持对齐。默认值为 1(启用)。注意:所需的对齐取决于是否设置了
AV_CODEC_FLAG_UNALIGNED
以及 CPU。无法从命令行更改AV_CODEC_FLAG_UNALIGNED
。此外,硬件解码器不会应用左/上裁剪。
10 解码器
解码器是 FFmpeg 中配置的元素,允许解码多媒体流。
配置 FFmpeg 构建时,默认启用所有受支持的本机解码器。需要外部库的解码器必须通过相应的 --enable-lib
选项手动启用。可以使用配置选项 --list-decoders
列出所有可用的解码器。
可以使用配置选项 --disable-decoders
禁用所有解码器,并使用选项 --enable-decoder=解码器
/ --disable-decoder=解码器
选择性地启用/禁用单个解码器。
ff* 工具的选项 -decoders
将显示已启用解码器的列表。
11 视频解码器
下面是一些当前可用的视频解码器的描述。
11.1 av1
AOMedia Video 1 (AV1) 解码器。
11.1.1 选项
- operating_point
选择可伸缩 AV1 比特流的操作点 (0 - 31)。默认值为 0。
11.2 hevc
HEVC (又名 ITU-T H.265 或 ISO/IEC 23008-2) 解码器。
解码器支持最多具有两个视图的 MV-HEVC 多视图流。要输出的视图通过向解码器提供视图 ID 列表来选择(view_ids 选项)。此选项可以在解码器初始化之前静态设置,也可以从 get_format()
回调中设置 - 当视图计数或 ID 在解码期间动态更改时很有用。
默认情况下仅解码基本层。
请注意,如果您正在使用 ffmpeg
CLI 工具,您应该使用其手册中记录的视图说明符,而不是此处记录的选项。
11.2.1 选项
- view_ids (MV-HEVC)
指定应输出的视图 ID 列表。此选项也可以设置为单个“-1”,这将导致解码和输出 VPS 中定义的所有视图。
- view_ids_available (MV-HEVC)
调用者可以读取此选项,以检索活动 VPS 中可用的视图 ID 数组。对于单层视频,该数组为空。
从
get_format()
回调读取时,此选项的值保证是准确的。它也可以在其他时间设置(例如,在打开解码器之后),但该值仅供参考,并且可能不正确(例如,当流包含多个不同的 VPS NALU 时)。- view_pos_available (MV-HEVC)
调用者可以读取此选项,以检索活动 VPS 中可用的视图位置(左、右或未指定)数组,作为
AVStereo3DView
值。当数组可用时,其元素适用于 view_ids_available 的相应元素,即view_pos_available[i]
包含 ID 为view_ids_available[i]
的视图的位置。与 view_ids_available 相同的有效性限制适用于此选项。
11.3 rawvideo
原始视频解码器。
此解码器解码 rawvideo 流。
11.3.1 选项
- top top_field_first
指定输入视频的假定场类型。
- -1
假定视频是逐行的(默认)
- 0
假定为底场优先
- 1
假定为顶场优先
11.4 libdav1d
dav1d AV1 解码器。
libdav1d 允许 libavcodec 解码 AOMedia Video 1 (AV1) 编解码器。在配置期间需要存在 libdav1d 标头和库。您需要使用 --enable-libdav1d
显式配置构建。
11.4.1 选项
libdav1d 包装器支持以下选项。
- framethreads
设置解码期间要使用的帧线程数。默认值为 0(自动检测)。此选项在 libdav1d >= 1.0 中已弃用,并且将在未来删除。请改为使用选项
max_frame_delay
和全局选项threads
。- tilethreads
设置解码期间要使用的瓦片线程数。默认值为 0(自动检测)。此选项在 libdav1d >= 1.0 中已弃用,并且将在未来删除。请改为使用全局选项
threads
。- max_frame_delay
设置解码器内部可能缓冲的最大帧数。默认值为 0(自动检测)。
- filmgrain
如果比特流中存在胶片颗粒,则将其应用于解码的视频。默认为库的内部默认值。此选项已弃用,将在未来删除。请参阅全局选项
export_side_data
以导出胶片颗粒参数,而不是应用它。- oppoint
选择可伸缩 AV1 比特流的操作点 (0 - 31)。默认为库的内部默认值。
- alllayers
输出可伸缩 AV1 比特流的所有空间层。默认值为 false。
11.5 libdavs2
AVS2-P2/IEEE1857.4 视频解码器包装器。
此解码器允许 libavcodec 使用 davs2 库解码 AVS2 流。
11.6 libuavs3d
AVS3-P2/IEEE1857.10 视频解码器。
libuavs3d 允许 libavcodec 解码 AVS3 流。在配置期间需要存在 libuavs3d 标头和库。您需要使用 --enable-libuavs3d
显式配置构建。
11.6.1 选项
libuavs3d 包装器支持以下选项。
- frame_threads
设置解码期间要使用的帧线程数。默认值为 0(自动检测)。
11.7 libxevd
超快速基本视频解码器 (XEVD) MPEG-5 EVC 解码器包装器。
此解码器在配置期间需要存在 libxevd 标头和库。您需要使用 --enable-libxevd 显式配置构建。
xevd 项目网站位于 https://github.com/mpeg5/xevd。
11.7.1 选项
libxevd 包装器支持以下选项。为了便于迁移,括号中列出了 xevd 等效选项或值。
要获得更准确和广泛的 libxevd 选项文档,请调用命令 xevd_app --help
或查阅 libxevd 文档。
- threads (线程)
强制使用特定数量的线程
11.8 QSV 解码器
Intel QuickSync 视频解码器系列(VC1、MPEG-2、H.264、HEVC、JPEG/MJPEG、VP8、VP9、AV1、VVC)。
11.8.1 通用选项
所有 qsv 解码器都支持以下选项。
- async_depth
内部并行化深度,值越高,延迟越高。
- gpu_copy
视频和系统内存之间的 GPU 加速复制
- ‘default’
- ‘on’
- ‘off’
11.8.2 HEVC 选项
hevc_qsv 的额外选项。
- load_plugin
要在内部会话中加载的用户插件
- ‘none’
- ‘hevc_sw’
- ‘hevc_hw’
- load_plugins
要在内部会话中加载的以 :- 分隔的十六进制插件 UID 列表
11.9 v210
未压缩 4:2:2 10 位解码器。
11.9.1 选项
- custom_stride
设置 v210 数据中每行的字节大小。默认值为 0(自动检测)。对于 BOXX 文件中看到的无跨度的 v210,您可以使用特殊的 -1 值。
12 音频解码器
下面是一些当前可用的音频解码器的描述。
12.1 ac3
AC-3 音频解码器。
此解码器实现 ATSC A/52:2010 和 ETSI TS 102 366 的一部分,以及未记录的 RealAudio 3(又名 dnet)。
12.1.1 AC-3 解码器选项
- -drc_scale 值
动态范围缩放因子。应用于 AC-3 流中的动态范围值的因子。此因子以指数方式应用。默认值为 1。有 3 个重要的缩放因子范围
- drc_scale == 0
禁用 DRC。产生全范围音频。
- 0 < drc_scale <= 1
启用 DRC。应用一部分流 DRC 值。音频再现介于全范围和全压缩之间。
- drc_scale > 1
启用 DRC。非对称应用 drc_scale。响亮的声音会被完全压缩,而柔和的声音会被增强。
12.2 flac
FLAC 音频解码器。
此解码器的目标是实现 Xiph 发布的完整 FLAC 规范。
12.2.1 FLAC 解码器选项
- -use_buggy_lpc
lavc FLAC 编码器过去会生成具有高 lpc 值(如默认值)的错误流。此选项可以通过使用 lavc 旧的错误 lpc 逻辑进行解码,从而正确解码此类流。
12.3 ffwavesynth
内部波形合成器。
此解码器根据预定义的序列生成波形模式。它的使用纯粹是内部的,它接受的数据格式没有公开文档。
12.4 libcelt
libcelt 解码器封装器。
libcelt 允许 libavcodec 解码 Xiph CELT 超低延迟音频编解码器。需要在配置期间存在 libcelt 标头和库。您需要使用 --enable-libcelt
显式配置构建。
12.5 libgsm
libgsm 解码器封装器。
libgsm 允许 libavcodec 解码 GSM 全速率音频编解码器。需要在配置期间存在 libgsm 标头和库。您需要使用 --enable-libgsm
显式配置构建。
此解码器支持普通的 GSM 和 Microsoft 变体。
12.6 libilbc
libilbc 解码器封装器。
libilbc 允许 libavcodec 解码 Internet 低比特率编解码器 (iLBC) 音频编解码器。需要在配置期间存在 libilbc 标头和库。您需要使用 --enable-libilbc
显式配置构建。
12.6.1 选项
libilbc 封装器支持以下选项。
- enhance
-
设置为 1 时,启用解码音频的增强。默认值为 0(禁用)。
12.7 libopencore-amrnb
libopencore-amrnb 解码器封装器。
libopencore-amrnb 允许 libavcodec 解码自适应多速率窄带音频编解码器。使用它需要在配置期间存在 libopencore-amrnb 标头和库。您需要使用 --enable-libopencore-amrnb
显式配置构建。
存在一个用于 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 标准的 A 和 C 配置文件,巴西 ABNT NBR 15606-1 以及菲律宾版本的 ISDB-T。
需要在配置期间存在 libaribcaption 标头和库(https://github.com/xqq/libaribcaption)。您需要使用 --enable-libaribcaption
显式配置构建。如果同时启用 libaribb24 和 libaribcaption,则 libaribcaption 解码器优先。
13.2.1 libaribcaption 解码器选项
- -sub_type subtitle_type
指定解码字幕的格式。
- ‘bitmap’
图形图像。
- ‘ass’
ASS 格式的文本。
- ‘text’
不带格式的简单文本输出。
默认值为 ass,与 libaribb24 解码器相同。一些现有的播放器(例如,mpv)期望 ARIB 字幕使用 ASS 格式。
- -caption_encoding encoding_scheme
指定输入字幕文本的编码方案。
- ‘auto’
自动检测文本编码(默认)。
- ‘jis’
ARIB STD B24 中定义的 8 位字符 JIS 编码。这种编码在日本用于 ISDB 字幕。
- ‘utf8’
ARIB STD B24 中定义的 UTF-8 编码。这种编码在菲律宾用于 ISDB-T 字幕。
- ‘latin’
ABNT NBR 15606-1 中定义的拉丁字符编码。这种编码在南美用于 SBTVD / ISDB-Tb 字幕。
- -font font_name[,font_name2,...]
指定用于 bitmap 或 ass 类型字幕渲染的逗号分隔的字体系列名称列表。仅第一个字体名称用于 ass 类型字幕。
如果未指定,则使用内部定义的默认字体系列。
- -ass_single_rect boolean
ARIB STD-B24 规定某些字幕可能一次显示在不同的位置(多矩形字幕)。由于某些播放器(例如,旧的 mpv)无法处理单个 AVSubtitle 中的多个 ASS 矩形,或者无法处理具有相同开始时间戳的多个不确定持续时间的 ASS 矩形,因此此选项可以更改行为,以便所有文本都显示在单个 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
指定是否忽略 ruby 式(假名)字符的渲染。
默认值为 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 解码器使用示例
使用 ffplay
工具显示带有 ARIB 字幕的 MPEG-TS 文件
ffplay -sub_type bitmap MPEG.TS
使用 ffplay
工具显示输入帧大小为 1920x1080 的 MPEG-TS 文件
ffplay -sub_type bitmap -canvas_size 1920x1080 MPEG.TS
将 ARIB 字幕嵌入到转码后的视频中
ffmpeg -sub_type bitmap -i src.m2t -filter_complex "[0:v][0:s]overlay" -vcodec h264 dest.mp4
13.3 dvbsub
13.3.1 选项
- compute_clut
- -2
如果流中没有匹配的 CLUT,则计算一次 CLUT。
- -1
如果流中没有匹配的 CLUT,则计算 CLUT。
- 0
从不计算 CLUT
- 1
始终计算 CLUT 并覆盖流中提供的 CLUT。
- dvb_substream
选择 DVB 子流,如果为 -1,则选择所有子流,这是默认值。
13.4 dvdsub
此编解码器解码 DVD 中使用的位图字幕;相同的字幕也可以在 VobSub 文件对和一些 Matroska 文件中找到。
13.4.1 选项
- palette
指定位图使用的全局调色板。当存储在 VobSub 中时,调色板通常在索引文件中指定;在 Matroska 中,调色板以与 VobSub 相同的格式存储在编解码器额外数据中。在 DVD 中,调色板存储在 IFO 文件中,因此从转储的 VOB 文件读取时不可用。
此选项的格式是一个字符串,包含 16 个 24 位十六进制数字(不带 0x 前缀),用逗号分隔,例如
0d00ee, ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1, 7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b
。- ifo_palette
指定从中获取全局调色板的 IFO 文件。(实验性功能)
- forced_subs_only
仅解码标记为强制的字幕条目。某些标题在同一轨道中具有强制和非强制字幕。将此标志设置为
1
将仅保留强制字幕。默认值为0
。
13.5 libzvbi-teletext
Libzvbi 允许 libavcodec 解码 DVB 图文电视页面和 DVB 图文电视字幕。需要在配置期间存在 libzvbi 标头和库。您需要使用 --enable-libzvbi
显式配置构建。
13.5.1 选项
- txt_page
要解码的图文电视页码列表。不匹配指定列表的页面将被删除。您可以使用特殊的
*
字符串来匹配所有页面,或使用subtitle
来匹配所有字幕页面。默认值为 *。- txt_default_region
设置用于解码的默认字符集,一个介于 0 和 87 之间的值(参见 ETS 300 706,第 15 节,表 32)。默认值为 -1,它不会覆盖 libzvbi 默认值。对于某些无法发出正确字符集的传统 1.0 级传输,需要此选项。
- txt_chop_top
丢弃顶部的图文电视行。默认值为 1。
- txt_format
指定解码字幕的格式。
- bitmap
默认格式,您应该将其用于图文电视页面,因为某些图形和颜色无法用简单的文本甚至 ASS 来表达。
- text
不带格式的简单文本输出。
- ass
格式化的 ASS 输出,字幕页面和图文电视页面以不同的样式返回,字幕页面被简化为文本,但会尽力保留文本对齐和格式。
- txt_left
生成的位图的 X 偏移量,默认为 0。
- txt_top
生成的位图的 Y 偏移量,默认为 0。
- txt_chop_spaces
从生成的文本中删除前导和尾随空格以及空行。此选项对于基于图文电视的字幕很有用,其中空行可能出现在行的开头或结尾,或者由于双尺寸图文电视字符,字幕行之间可能存在空行。默认值为 1。
- txt_duration
设置解码的图文电视页面或字幕的显示持续时间,以毫秒为单位。默认值为 -1,表示无限期或直到下一个字幕事件发生。
- txt_transparent
强制生成的图文电视位图的背景透明。默认值为 0,表示不透明背景。
- txt_opacity
设置图文电视背景的不透明度(0-255)。如果未设置 txt_transparent,则仅影响开始框和结束框之间的字符,通常是字幕。如果设置了 txt_transparent,则默认值为 0,否则为 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
命令行工具时有效。对于库接口用户,请使用 global_quality。- cutoff
设置截止频率。如果未指定,将允许编码器动态调整截止频率,以提高低比特率下的清晰度。
- aac_coder
设置 AAC 编码器编码方法。可能的值
- ‘twoloop’
双循环搜索 (TLS) 方法。这是默认方法。
此方法首先根据频段阈值设置量化器,然后尝试通过在所有量化器中加或减特定值并稍微调整一些单独的量化器来找到最佳组合。将根据是否启用了 aac_is、aac_ms 和 aac_pns 来进行调整。
- ‘anmr’
平均噪声掩蔽比 (ANMR) 基于网格的解决方案。
这是一个实验性编码器,目前产生的质量较低,更不稳定,并且比默认的 twoloop 编码器慢,但具有潜力。目前不支持 aac_is 或 aac_pns 选项。目前不推荐使用。
- ‘fast’
恒定量化器方法。
使用更便宜的 twoloop 算法版本,该算法不尝试进行许多巧妙的调整。在低比特率(小于 64kbps)下效果较差,但在高比特率下更好且更快。
- aac_ms
设置中/侧编码模式。默认值 "auto" 将自动对将受益于此类编码的频段使用 M/S。可以使用值 "enable" 强制所有频段使用 M/S,这主要用于调试,或者使用 "disable" 禁用 M/S。
- aac_is
设置强度立体声编码工具的使用。默认情况下,它是启用的,如果对类似的立体声频段有利,它将自动切换 IS。可以通过将值设置为 "disable" 来禁用它以进行调试。
- aac_pns
在解码过程中,使用感知噪声替换技术,将低熵的高频带替换为不可感知的白噪声。默认情况下启用,但可以使用“disable”禁用以进行调试。
- aac_tns
启用多抽头 FIR 滤波器,该滤波器跨越高频带,以隐藏编码过程中的量化噪声,并通过解码器还原。除了减少高频段中令人不快的伪像外,这还降低了高频段的熵,并允许中低频段使用更多的比特。默认情况下启用,但可以通过将选项设置为“disable”来禁用以进行调试。
- aac_ltp
启用长期预测扩展,通过扩展帧中各频段的恒定谐波峰值,提高极低带宽情况下的编码效率,例如语音或独奏钢琴音乐的编码。此选项由 profile:a aac_low 隐含,并且与 aac_pred 不兼容。请与 -ar 结合使用以降低采样率。
- aac_pred
启用更传统的预测方式,其中传输的频谱系数被当前系数减去先前“预测”系数的差值替换。理论上,有时在实践中,这可以提高低到中比特率音频的质量。此选项隐含 aac_main profile 并且与 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 和 ac3_fixed
AC-3 音频编码器。
这些编码器实现了 ATSC A/52:2010 和 ETSI TS 102 366 的一部分。
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
杜比环绕模式。指定立体声信号是否使用杜比环绕(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 模式。指示流是否使用杜比环绕 EX(将 7.1 矩阵化为 5.1)。使用此选项不意味着编码器将实际应用杜比环绕 EX 处理。
- 0
- notindicated
未指示(默认)
- 1
- on
杜比环绕 EX 关闭
- 2
- off
杜比环绕 EX 开启
- -dheadphone_mode mode
杜比耳机模式。指示流是否使用杜比耳机编码(将多声道矩阵化为 2.0 以用于耳机)。使用此选项不意味着编码器将实际应用杜比耳机处理。
- 0
- notindicated
未指示(默认)
- 1
- on
杜比耳机关闭
- 2
- off
杜比耳机开启
- -ad_conv_type type
A/D 转换器类型。指示音频是否已通过 HDCD A/D 转换。
- 0
- 标准
标准 A/D 转换器(默认)
- 1
- hdcd
HDCD A/D 转换器
15.2.3 其他 AC-3 编码选项
- -stereo_rematrixing boolean
立体声重矩阵化。启用/禁用对立体声输入使用重矩阵化。这是一个可选的 AC-3 功能,通过选择性地将左右声道编码为中/侧来提高质量。默认情况下启用此选项,强烈建议保持启用状态,除非用于测试目的。
- 截止频率 frequency
设置低通截止频率。如果未指定,编码器会根据其他各种编码参数选择默认值。
15.2.4 仅限浮点 AC-3 编码选项
这些选项仅对浮点编码器有效,并且由于相应的特性未在定点中实现,因此定点编码器不存在这些选项。
- -channel_coupling boolean
启用/禁用通道耦合的使用,这是一个可选的 AC-3 功能,通过将来自多个通道的高频信息组合成单个通道来提高质量。每个通道的高频信息在频率和时域中的精度都较低。这允许使用更多位来处理较低的频率,同时保留足够的信息来重建高频。默认情况下,对于浮点编码器启用此选项,通常应保持启用状态,除非用于测试目的或提高编码速度。
- -1
- auto
由编码器选择(默认)
- 0
- off
禁用通道耦合
- 1
- on
启用通道耦合
- -cpl_start_band number
耦合起始频带。设置通道耦合起始频带,从 1 到 15。如果使用的值高于带宽,它将被减小到小于耦合结束频带 1 的值。如果使用 auto,起始频带将由编码器根据比特率、采样率和通道布局确定。如果禁用通道耦合,此选项无效。
- -1
- auto
由编码器选择(默认)
15.3 ffv1
FFv1 编码器
15.3.1 选项
FFmpeg 的 FFv1 编码器支持以下选项。
- 上下文
设置上下文大小,0(默认)为小,1 为大。
- 编码器
设置编码器,
- ‘rice’
Golomb Rice 编码器
- ‘range_def’
带有默认表的范围编码器
- ‘range_tab’
带有自定义表的范围编码器
- slicecrc
-1(默认,自动),1 使用 CRC,初始和最终状态为零,2 使用 CRC,初始和最终状态为非零
- qtable
- ‘default’
默认,自动
- ‘8bit’
使用 8 位默认值
- ‘greater8bit’
使用 >8 位默认值
15.4 flac
FLAC (Free Lossless Audio Codec) 编码器
15.4.1 选项
FFmpeg 的 flac 编码器支持以下选项。
- 压缩级别
设置压缩级别,如果未显式设置,它会为许多其他选项选择默认值。有效值从 0 到 12,5 是默认值。
- 帧大小
设置每通道样本的帧大小。
- lpc_coeff_precision
设置 LPC 系数精度,有效值从 1 到 15,15 是默认值。
- lpc_type
设置第一阶段 LPC 算法
- ‘none’
不使用 LPC
- ‘fixed’
固定 LPC 系数
- ‘levinson’
- ‘cholesky’
- lpc_passes
在 LPC 分析期间用于 Cholesky 分解的传递次数
- min_partition_order
最小分区顺序
- max_partition_order
最大分区顺序
- prediction_order_method
- ‘estimation’
- ‘2level’
- ‘4level’
- ‘8level’
- ‘search’
暴力搜索
- ‘log’
- ch_mode
通道模式
- ‘auto’
为每个帧自动选择模式
- ‘indep’
通道独立编码
- ‘left_side’
- ‘right_side’
- ‘mid_side’
- exact_rice_parameters
选择是精确还是近似计算 Rice 参数。如果设置为 1,则会精确选择它们,这会稍微减慢代码速度并稍微提高压缩率。
- multi_dim_quant
多维量化。如果设置为 1,则在第一阶段之后应用第二阶段 LPC 算法来微调系数。这非常慢,并且稍微提高了压缩率。
15.5 opus
Opus 编码器。
这是 Opus 格式的原生 FFmpeg 编码器。目前,它正在开发中,仅实现了编解码器的 CELT 部分。它的质量通常较差,最好与 libopus 编码器相同。
15.5.1 选项
- b
以比特/秒为单位设置比特率。如果未指定,它将使用通道数和布局进行良好的猜测。
- opus_delay
以毫秒为单位设置最大延迟。低于 20 毫秒的延迟会非常迅速地降低质量。
15.6 libfdk_aac
libfdk-aac AAC(高级音频编码)编码器包装器。
libfdk-aac 库基于 Android 项目中的 Fraunhofer FDK AAC 代码。
在配置期间需要存在 libfdk-aac 标头和库。您需要使用 --enable-libfdk-aac
显式配置构建。该库也与 GPL 不兼容,因此如果您允许使用 GPL,则应使用 --enable-gpl --enable-nonfree --enable-libfdk-aac
进行配置。
此编码器支持 AAC-HE 配置文件。
VBR 编码,通过 vbr 或 flags +qscale 选项启用,是实验性的,并且仅适用于某些参数组合。
仅当使用 libfdk-aac 0.1.3 或更高版本时,才支持 7.1 音频编码。
有关更多信息,请参阅 fdk-aac 项目:http://sourceforge.net/p/opencore-amr/fdk-aac/。
15.6.1 选项
以下选项映射到共享的 FFmpeg 编解码器选项。
- b
设置比特率,单位为比特/秒。如果未明确指定比特率,则会根据所选配置文件自动设置为合适的值。
如果启用了 VBR 模式,则此选项将被忽略。
- ar
设置音频采样率(单位为赫兹)。
- channels
设置音频通道的数量。
- flags +qscale
启用固定质量的 VBR(可变比特率)模式。请注意,当 vbr 值大于零时,将隐式启用 VBR。
- cutoff
设置截止频率。如果未指定(或明确设置为 0),它将使用库自动计算的值。默认值为 0。
- profile
设置音频配置文件。
可识别以下配置文件
- ‘aac_low’
低复杂度 AAC (LC)
- ‘aac_he’
高效率 AAC (HE-AAC)
- ‘aac_he_v2’
高效率 AAC 版本 2 (HE-AACv2)
- ‘aac_ld’
低延迟 AAC (LD)
- ‘aac_eld’
增强型低延迟 AAC (ELD)
如果未指定,则设置为 ‘aac_low’。
以下是 libfdk_aac 编码器的私有选项。
- afterburner
如果设置为 1,则启用 afterburner 功能;如果设置为 0,则禁用。这可以提高质量,但也需要更多的处理能力。
默认值为 1。
- eld_sbr
如果设置为 1,则为 ELD 启用 SBR(频谱带复制);如果设置为 0,则禁用。
默认值为 0。
- eld_v2
如果设置为 1,则为 ELDv2 启用 ELDv2(针对 ELD 立体声信号的 LD-MPS 扩展);如果设置为 0,则禁用。
请注意,当 fdk-aac 版本 (AACENCODER_LIB_VL0.AACENCODER_LIB_VL1.AACENCODER_LIB_VL2) > (4.0.0) 时,此选项可用。
默认值为 0。
- signaling
设置 SBR/PS 信令样式。
它可以采用以下值之一
- ‘default’
隐式选择信令(默认情况下为显式分层,如果禁用全局标头则为隐式)
- ‘implicit’
隐式向后兼容信令
- ‘explicit_sbr’
显式 SBR,隐式 PS 信令
- ‘explicit_hierarchical’
显式分层信令
默认值为 ‘default’。
- latm
如果设置为 1,则输出 LATM/LOAS 封装数据;如果设置为 0,则禁用。
默认值为 0。
- header_period
设置 StreamMuxConfig 和 PCE 重复周期(以帧为单位),以便在 LATM/LOAS 传输层中发送带内配置缓冲区。
必须为 16 位非负整数。
默认值为 0。
- vbr
设置 VBR 模式,范围为 1 到 5。1 为最低质量(尽管仍然相当好),而 5 为最高质量。值为 0 将禁用 VBR,并且启用 CBR(恒定比特率)。
目前只有 ‘aac_low’ 配置文件支持 VBR 编码。
VBR 模式 1-5 大致对应于以下平均比特率
- ‘1’
32 kbps/通道
- ‘2’
40 kbps/通道
- ‘3’
48-56 kbps/通道
- ‘4’
64 kbps/通道
- ‘5’
约 80-96 kbps/通道
默认值为 0。
- frame_length
以采样数为单位设置音频帧长度。默认值是库的内部默认值。有关支持的值的信息,请参阅库的文档。
15.6.2 示例
- 使用
ffmpeg
将音频文件转换为 M4A (MP4) 容器中的 VBR AACffmpeg -i input.wav -codec:a libfdk_aac -vbr 3 output.m4a
- 使用
ffmpeg
将音频文件转换为 CBR 64k kbps AAC,使用高效率 AAC 配置文件ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he -b:a 64k output.m4a
15.7 liblc3
liblc3 LC3(低复杂度通信编解码器)编码器包装器。
在配置期间需要存在 liblc3 标头和库。您需要使用 --enable-liblc3
显式配置构建。
此编码器支持 LE Audio 协议的蓝牙 SIG LC3 编解码器,以及 LC3plus 的以下功能
- 2.5 毫秒和 5 毫秒的帧时长。
- 高分辨率模式、48 kHz 和 96 kHz 采样率。
有关更多信息,请参阅 liblc3 项目:https://github.com/google/liblc3。
15.7.1 选项
以下选项映射到共享的 FFmpeg 编解码器选项。
- b bitrate
设置比特率,单位为比特/秒。这将为选定的帧时长确定编码帧的固定大小。
- ar frequency
设置音频采样率(以 Hz 为单位)。
- channels
设置音频通道的数量。
- frame_duration
以毫秒为单位设置音频帧时长。默认值为 10 毫秒。允许的帧时长为 2.5 毫秒、5 毫秒、7.5 毫秒和 10 毫秒。LC3(蓝牙 LE 音频)允许 7.5 毫秒和 10 毫秒;LC3plus 允许 2.5 毫秒、5 毫秒和 10 毫秒。
10 毫秒的帧时长在 LC3 和 LC3 plus 标准中都可用。在此模式下,生成的比特流可以被引用为 LC3 或 LC3plus。
- high_resolution boolean
如果设置为 1,则启用高分辨率模式。高分辨率模式适用于所有 LC3plus 帧时长,以及 48 kHz 和 96 kHz 的采样率。
编码器在较低采样率下会自动关闭此模式,并在 96 kHz 时激活它。
在高比特率下应首选此模式。在此模式下,音频带宽始终达到奈奎斯特频率,而 48 kHz 的 LC3 则将带宽限制为 20 kHz。
15.8 libmp3lame
LAME (Lame Ain't an MP3 Encoder) MP3 编码器包装器。
在配置期间需要存在 libmp3lame 标头和库。您需要使用 --enable-libmp3lame
显式配置构建。
有关固定点 MP3 编码器,请参阅 libshine,尽管质量较低。
15.8.1 选项
libmp3lame 包装器支持以下选项。选项的 lame
等效项列在括号中。
- b (-b)
设置 CBR 或 ABR 的比特率,单位为比特/秒。LAME
bitrate
以千比特/秒表示。- q (-V)
为 VBR 设置恒定质量设置。此选项仅在使用
ffmpeg
命令行工具时有效。对于库接口用户,请使用 global_quality。- compression_level (-q)
设置算法质量。有效参数是 0-9 范围内的整数,其中 0 表示最高质量但最慢,而 9 表示最快但产生最差的质量。
- cutoff (--lowpass)
设置低通截止频率。如果未指定,则编码器会动态调整截止频率。
- reservoir
如果设置为 1,则启用比特率池的使用。默认值为 1。LAME 默认启用此功能,但可以使用 --nores 选项覆盖它。
- joint_stereo (-m j)
使编码器能够(逐帧)使用 L/R 立体声或中间/侧面立体声。默认值为 1。
- abr (--abr)
如果设置为 1,则使编码器能够使用 ABR。
lame
--abr 设置目标比特率,而此选项仅告诉 FFmpeg 使用 ABR,仍依赖于 b 设置比特率。- copyright (-c)
如果设置为 1,则设置 MPEG 音频版权标志。默认值为 0(禁用)。
- original (-o)
如果设置为 1,则设置 MPEG 音频原始标志。默认值为 1(启用)。
15.9 libopencore-amrnb
OpenCORE 自适应多速率窄带编码器。
在配置期间需要存在 libopencore-amrnb 标头和库。您需要使用 --enable-libopencore-amrnb --enable-version3
显式配置构建。
这是一个仅支持单声道的编码器。官方只支持 8000Hz 采样率,但您可以通过将 strict 设置为 ‘unofficial’ 或更低的值来覆盖它。
15.9.1 选项
- b
设置比特率,单位为比特/秒。仅支持以下比特率,否则 libavcodec 将舍入到最接近的有效比特率。
- 4750
- 5150
- 5900
- 6700
- 7400
- 7950
- 10200
- 12200
- dtx
如果设置为 1,则允许不连续传输(生成舒适噪声)。默认值为 0(禁用)。
15.10 libopus
libopus Opus 交互式音频编解码器编码器包装器。
配置时需要 libopus 头文件和库。 你需要使用 --enable-libopus
显式配置构建。
15.10.1 选项映射
大多数 libopus 选项都模仿自 opus-tools 中的 opusenc
工具。 以下是选项映射表,描述了 libopus 封装器支持的选项,以及它们在 opusenc
中对应的选项(括号内)。
- b (bitrate)
设置比特率,单位为比特/秒。FFmpeg 的 b 选项以比特/秒表示,而
opusenc
的 bitrate 则以千比特/秒表示。- vbr (vbr, hard-cbr 和 cvbr)
设置 VBR 模式。 FFmpeg 的 vbr 选项有以下有效参数,括号内为
opusenc
的等效选项- ‘off (hard-cbr)’
使用恒定比特率编码。
- ‘on (vbr)’
使用可变比特率编码(默认)。
- ‘constrained (cvbr)’
使用约束可变比特率编码。
- compression_level (comp)
设置编码算法复杂度。 有效选项是 0-10 范围内的整数。 0 提供最快的编码但质量较低,而 10 提供最高的质量但最慢的编码。 默认值为 10。
- frame_duration (framesize)
设置最大帧大小,或帧的持续时间,单位为毫秒。 参数必须是以下值之一:2.5、5、10、20、40、60。 较小的帧大小可实现较低的延迟,但在给定的比特率下质量较低。 大于 20 毫秒的尺寸仅在相当低的比特率下才有用。 默认值为 20 毫秒。
- packet_loss (expect-loss)
设置预期的丢包百分比。 默认值为 0。
- fec (n/a)
启用带内前向纠错。 packet_loss 必须为非零才能利用此功能 - FEC“边数据”的频率与预期的丢包成正比。 默认情况下禁用。
- application (N.A.)
设置预期应用程序类型。 以下是有效选项
- ‘voip’
偏好提高语音清晰度。
- ‘audio’
偏好对输入的保真度(默认)。
- ‘lowdelay’
通过禁用语音优化模式,限制为仅使用最低延迟模式。
- cutoff (N.A.)
设置截止带宽,单位为赫兹。 参数必须是以下值之一:4000、6000、8000、12000 或 20000,分别对应窄带、中频带、宽带、超宽带和全频带。 默认值为 0(禁用截止)。 请注意,除非使用仅 CELT 模式(application 设置为“lowdelay”),否则 libopus 会强制将比特率 < 15 kbps 的情况设为宽带截止。
- mapping_family (mapping_family)
设置编码器使用的通道映射族。 默认值 -1 为单声道和立体声输入使用映射族 0,否则使用映射族 1。 默认值还禁用 libopus 中的环绕声屏蔽和 LFE 带宽优化,并且要求输入包含 8 个或更少的通道。
其他值包括 0(用于单声道和立体声)、1(用于具有屏蔽和 LFE 带宽优化的环绕声)和 255(用于具有未指定通道布局的独立流)。
- apply_phase_inv (N.A.)(需要 libopus >= 1.2)
如果设置为 0,则禁用强度立体声的相位反转,从而提高单声道下混的质量,但会稍微降低正常的立体声质量。 默认值为 1(启用相位反转)。
15.11 libshine
Shine 定点 MP3 编码器封装器。
Shine 是一个定点 MP3 编码器。 它在没有 FPU 的平台(例如 armel CPU)以及某些手机和平板电脑上具有更好的性能。 但是,由于它更注重性能而不是质量,因此在质量方面无法与 LAME 和其他生产级编码器相提并论。 此外,根据该项目的主页,此编码器可能没有错误,因为代码是在很久以前编写的,并且该项目至少已停止 5 年。
此编码器仅支持立体声和单声道输入。 这也是仅 CBR 编码器。
原始项目(上次更新于 2007 年初)位于 http://sourceforge.net/projects/libshine-fxp/。 我们仅支持 Savonet/Liquidsoap 项目在 https://github.com/savonet/shine 上更新的分支。
配置时需要 libshine 头文件和库。 你需要使用 --enable-libshine
显式配置构建。
另请参阅 libmp3lame。
15.11.1 选项
libshine 封装器支持以下选项。 这些选项的 shineenc
等效选项在括号中列出。
- b (-b)
为 CBR 设置比特率,单位为比特/秒。
shineenc
的 -b 选项以千比特/秒表示。
15.12 libtwolame
TwoLAME MP2 编码器封装器。
配置时需要 libtwolame 头文件和库。 你需要使用 --enable-libtwolame
显式配置构建。
15.12.1 选项
libtwolame 封装器支持以下选项。 这些选项的 twolame
等效选项跟在 FFmpeg 选项之后,并用括号括起来。
- b (-b)
为 CBR 设置比特率,单位为比特/秒。
twolame
的 b 选项以千比特/秒表示。 默认值为 128k。- q (-V)
设置用于实验性 VBR 支持的质量。 最大值范围为 -50 到 50,有用范围为 -10 到 10。 值越高,质量越好。 此选项仅在使用
ffmpeg
命令行工具时有效。 对于库接口用户,请使用 global_quality。- mode (--mode)
设置生成音频的模式。 可能的值
- ‘auto’
根据输入自动选择模式。 这是默认设置。
- ‘立体声’
立体声
- ‘joint_stereo’
联合立体声
- ‘dual_channel’
双通道
- ‘单声道’
单声道
- 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.13 libvo-amrwbenc
VisualOn 自适应多速率宽带编码器。
配置时需要 libvo-amrwbenc 头文件和库。 你需要使用 --enable-libvo-amrwbenc --enable-version3
显式配置构建。
这是一个仅单声道的编码器。 官方上它仅支持 16000Hz 采样率,但是你可以通过将 strict 设置为 ‘unofficial’ 或更低的值来覆盖它。
15.13.1 选项
- b
设置比特率,单位为比特/秒。 仅支持以下比特率,否则 libavcodec 将舍入到最近的有效比特率。
- ‘6600’
- ‘8850’
- ‘12650’
- ‘14250’
- ‘15850’
- ‘18250’
- ‘19850’
- ‘23050’
- ‘23850’
- dtx
如果设置为 1,则允许不连续传输(生成舒适噪声)。默认值为 0(禁用)。
15.14 libvorbis
libvorbis 编码器封装器。
配置过程中需要 libvorbisenc 头文件和库文件的存在。你需要使用 --enable-libvorbis
显式配置构建。
15.14.1 选项
libvorbis 封装器支持以下选项。选项的 oggenc
等效项列在括号中。
要获得关于 libvorbis 选项的更准确和全面的文档,请查阅 libvorbisenc 和 oggenc
的文档。请参阅 http://xiph.org/vorbis/、http://wiki.xiph.org/Vorbis-tools 和 oggenc(1)。
- b (-b)
设置 ABR 的比特率,单位为比特/秒。
oggenc
的 -b 选项单位为千比特/秒。- q (-q)
设置 VBR 的恒定质量设置。该值应为 -1.0 到 10.0 范围内的浮点数。值越高,质量越好。默认值为 '3.0'。
此选项仅在使用
ffmpeg
命令行工具时有效。对于库接口用户,请使用 global_quality。- cutoff (--advanced-encode-option lowpass_frequency=N)
设置截止带宽,单位为 Hz,值为 0 时禁用截止。
oggenc
的相关选项单位为 kHz。默认值为 '0'(禁用截止)。- minrate (-m)
设置最小比特率,单位为比特/秒。
oggenc
的 -m 选项单位为千比特/秒。- maxrate (-M)
设置最大比特率,单位为比特/秒。
oggenc
的 -M 选项单位为千比特/秒。此选项仅在 ABR 模式下有效。- iblock (--advanced-encode-option impulse_noisetune=N)
设置脉冲块的噪声基底偏差。该值是一个从 -15.0 到 0.0 的浮点数。负偏差指示编码器特别注意编码音频中瞬态的清晰度。更好的瞬态响应的代价是更高的比特率。
15.15 mjpeg
Motion JPEG 编码器。
15.15.1 选项
- huffman
设置霍夫曼编码策略。可能的值为
- ‘default’
使用默认的霍夫曼表。这是默认策略。
- ‘optimal’
计算并使用最佳霍夫曼表。
15.16 wavpack
WavPack 无损音频编码器。
15.16.1 选项
wavpack
命令行实用程序的等效选项列在括号中。
15.16.1.1 共享选项
以下共享选项对此编码器有效。此处仅记录关于此特定编码器的特殊注意事项。有关选项的一般含义,请参阅 编解码器选项章节。
- frame_size (--blocksize)
对于此编码器,此选项的范围在 128 到 131072 之间。默认值根据采样率和通道数自动决定。
有关计算默认值的完整公式,请参阅 libavcodec/wavpackenc.c。
- compression_level (-f, -h, -hh 和 -x)
15.16.1.2 私有选项
- joint_stereo (-j)
设置是否启用联合立体声。有效值为
- ‘on (1)’
强制使用中/侧音频编码。
- ‘off (0)’
强制使用左/右音频编码。
- ‘auto’
让编码器自动决定。
- optimize_mono
设置是否启用单声道优化。此选项仅对非单声道流有效。可用值为
- ‘on’
enabled
- ‘off’
disabled
16 视频编码器
以下是一些当前可用的视频编码器的描述。
16.1 a64_multi, a64_multi5
A64 / Commodore 64 多色字符集编码器。a64_multi5
扩展了第 5 种颜色 (colram)。
16.2 Cinepak
Cinepak 又名 CVID 编码器。与 Windows 3.1 和老式 MacOS 兼容。
16.2.1 选项
- g integer
关键帧间隔。关键帧至少每
-g
帧插入一次,有时会更快。- q:v integer
质量因子。值越低越好。值越高,比特率越低。下表列出了使用
-g 100
对 akiyo_cif.y4m 进行编码时,-q:v
不同值的比特率-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
默认值为 hap。
- chunks integer
指定将帧分割成的块数,介于 1 和 64 之间。这允许对大型帧进行多线程解码,可能会以数据速率为代价。编码器可能会修改此值以均匀地分割帧。
默认值为 1。
- compressor integer
指定要使用的第二阶段压缩器。如果设置为 none,则 chunks 将被限制为 1,因为分块的未压缩帧没有任何好处。
- none
- snappy
默认值为 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 (有损)
- dwt53 (无损)
默认值为
dwt97int
- sop boolean
启用此项可在每个数据包的开头添加 SOP 标记。默认禁用。
- eph boolean
启用此选项可在每个数据包头末尾添加 EPH 标记。默认禁用。
- prog 整数
设置编码器使用的渐进顺序。可能的值有:
- lrcp
- rlcp
- rpcl
- pcrl
- cprl
默认设置为
lrcp
。- layer_rates 字符串
默认情况下,当不使用此选项时,压缩将使用质量指标完成。此选项允许使用压缩比进行压缩。可以指定每个级别的压缩比。图层
l
的压缩比表示前l
个图层中包含的总文件大小的比例。使用示例
ffmpeg -i input.bmp -c:v jpeg2000 -layer_rates "100,10,1" output.j2k
这将把图像压缩为包含 3 个图层,其中第一个图层中包含的数据将压缩 1000 倍,前两个图层压缩 100 倍,并且在使用所有 3 个图层时应包含所有数据。
16.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
。例如,要使用 -rav1e-params 指定 librav1e 编码选项
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
设置目标比特率,单位为比特/秒。默认情况下,这将使用可变比特率模式。如果 maxrate 和 minrate 也设置为相同的值,则它将使用恒定比特率模式,否则如果也设置了 crf,则它将使用受约束质量模式。
- g keyint_min
设置关键帧位置。GOP 大小设置关键帧之间的最大距离;如果为零,则输出流将仅为帧内。除非最小距离与 GOP 大小相同,否则将忽略最小距离,在这种情况下,关键帧将始终以固定间隔出现。默认情况下未设置,因此如果没有此选项,库可以完全自由地选择放置关键帧的位置。
- qmin qmax
设置最小/最大量化值。有效范围是 0 到 63(警告:这与 AV1 实际使用的量化值不匹配 - 除以四可将实际量化值映射到此范围)。默认为最小/最大值(无约束)。
- minrate maxrate bufsize rc_init_occupancy
设置速率控制缓冲参数。如果未设置则不使用 - 默认为无约束可变比特率。
- threads
设置编码时使用的线程数。这可能需要同时设置 tiles 或 row-mt 选项才能真正充分使用指定的线程数。默认为主机支持的硬件线程数。
- profile
设置编码配置文件。默认为使用与输入的位深度和色度子采样匹配的配置文件。
该包装器还有一些特定选项
- cpu-used
设置质量/编码速度的权衡。有效范围为 0 到 8,数字越大表示速度越快,质量越低。默认值为 1,这将很慢且高质量。
- auto-alt-ref
启用备用参考帧的使用。默认为库的内部默认值。
- arnr-max-frames (帧数)
设置 altref 降噪最大帧数。默认值为 -1。
- arnr-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
启用错误恢复功能
- 默认
提高对整帧丢失的恢复能力。
默认情况下未启用。
- crf
设置恒定质量(无比特率目标)和受约束质量(具有最大比特率目标)模式的质量/大小权衡。有效范围为 0 到 63,数字越大表示质量越低,输出大小越小。仅在设置时使用;默认情况下仅使用比特率目标。
- static-thresh
在块低于此阈值时,设置一个变化阈值,编码器将跳过这些块。以任意单位定义为非负整数,默认为零(不跳过任何块)。
- drop-threshold
当接近速率控制边界时,设置丢弃帧的阈值。定义为目标缓冲区百分比 - 当速率控制缓冲区低于此百分比时,将丢弃帧,直到它重新填充到阈值以上。默认为零(不丢弃任何帧)。
- denoise-noise-level (级别)
为生成颗粒而要去除的噪声量。如果未设置此选项或将其设置为 0,则禁用颗粒合成。
- denoise-block-size (像素)
用于生成颗粒的去噪块大小。如果未设置,AV1 编解码器将使用默认值 32。
- undershoot-pct (百分比)
设置数据速率下冲(最小)占目标比特率的百分比。范围是 -1 到 100。默认值为 -1。
- overshoot-pct (百分比)
设置数据速率过冲(最大)占目标比特率的百分比。范围是 -1 到 1000。默认值为 -1。
- minsection-pct (百分比)
GOP 比特率与目标比特率的最小百分比变化。如果未设置 minsection-pct,则 libaomenc 包装器按如下方式计算它:
(minrate * 100 / bitrate)
。范围是 -1 到 100。默认值为 -1(未设置)。- maxsection-pct (百分比)
GOP 比特率与目标比特率的最大百分比变化。如果未设置 maxsection-pct,则 libaomenc 包装器按如下方式计算它:
(maxrate * 100 / bitrate)
。范围是 -1 到 5000。默认值为 -1(未设置)。- frame-parallel (布尔值)
启用帧并行解码功能。默认为 true。
- tiles
设置用于编码输入视频的图块数量,格式为列 x 行。更大的数字允许在编码和解码中实现更大的并行性,但可能会降低编码效率。默认为输入视频大小所需的最小图块数量(对于最大 4K 的大小,这是一个 1x1(即单个图块))。
- tile-columns tile-rows
将图块数设置为图块行数和列数的以 2 为底的对数。为与 libvpx/VP9 的兼容性而提供。
- row-mt (需要 libaom >= 1.0.0-759-g90a15f4f2)
启用基于行的多线程。默认禁用。
- enable-cdef (布尔值)
启用约束方向增强滤波器。libaom-av1 编码器默认启用 CDEF。
- enable-restoration (布尔值)
启用环路恢复滤波器。对于 libaom-av1,默认值为 true。
- enable-global-motion (布尔值)
启用全局运动用于块预测。默认值为 true。
- enable-intrabc (布尔值)
启用帧内块预测的块复制模式。此模式对于屏幕内容很有用。默认值为 true。
- enable-rect-partitions (布尔值) (需要 libaom >= v2.0.0)
启用矩形分区。默认值为 true。
- enable-1to4-partitions (布尔值) (需要 libaom >= v2.0.0)
启用 1:4/4:1 分区。默认值为 true。
- enable-ab-partitions (布尔值) (需要 libaom >= v2.0.0)
启用 AB 形分区。默认值为 true。
- enable-angle-delta (布尔值) (需要 libaom >= v2.0.0)
启用角度增量帧内预测。默认值为 true。
- enable-cfl-intra (布尔值) (需要 libaom >= v2.0.0)
启用从亮度预测色度的帧内预测。默认值为 true。
- enable-filter-intra (布尔值) (需要 libaom >= v2.0.0)
启用滤波帧内预测器。默认值为 true。
- enable-intra-edge-filter (布尔值) (需要 libaom >= v2.0.0)
启用帧内边缘滤波器。默认值为 true。
- enable-smooth-intra (布尔值) (需要 libaom >= v2.0.0)
启用平滑帧内预测模式。默认值为 true。
- enable-paeth-intra (布尔值) (需要 libaom >= v2.0.0)
在帧内预测中启用 paeth 预测器。默认值为 true。
- enable-palette (布尔值) (需要 libaom >= v2.0.0)
启用调色板预测模式。默认值为 true。
- enable-flip-idtx (布尔值) (需要 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 (布尔值) (需要 libaom >= v2.0.0)
启用 64 点变换。默认值为 true。
- reduced-tx-type-set (布尔值) (需要 libaom >= v2.0.0)
使用缩减的变换类型集。默认值为 false。
- use-intra-dct-only (布尔值) (需要 libaom >= v2.0.0)
仅对 INTRA 模式使用 DCT。默认值为 false。
- use-inter-dct-only (布尔值) (需要 libaom >= v2.0.0)
仅对 INTER 模式使用 DCT。默认值为 false。
- use-intra-default-tx-only (布尔值) (需要 libaom >= v2.0.0)
仅对 INTRA 模式使用默认变换。默认值为 false。
- enable-ref-frame-mvs (布尔值) (需要 libaom >= v2.0.0)
启用时间运动矢量预测。默认值为 true。
- enable-reduced-reference-set (布尔值) (需要 libaom >= v2.0.0)
使用缩减的单参考和复合参考集。默认值为 false。
- enable-obmc (布尔值) (需要 libaom >= v2.0.0)
启用 OBMC。默认值为 true。
- enable-dual-filter (布尔值) (需要 libaom >= v2.0.0)
启用双滤波器。默认值为 true。
- enable-diff-wtd-comp (布尔值) (需要 libaom >= v2.0.0)
启用差异加权复合。默认值为 true。
- enable-dist-wtd-comp (布尔值) (需要 libaom >= v2.0.0)
启用距离加权复合。默认值为 true。
- enable-onesided-comp (布尔值) (需要 libaom >= v2.0.0)
启用单侧复合。默认值为 true。
- enable-interinter-wedge (布尔值) (需要 libaom >= v2.0.0)
启用帧间楔形复合。默认值为 true。
- enable-interintra-wedge (布尔值) (需要 libaom >= v2.0.0)
启用帧间帧内楔形复合。默认值为 true。
- enable-masked-comp (布尔值) (需要 libaom >= v2.0.0)
启用掩码复合。默认值为 true。
- enable-interintra-comp (布尔值) (需要 libaom >= v2.0.0)
启用帧间帧内复合。默认值为 true。
- enable-smooth-interintra (布尔值) (需要 libaom >= v2.0.0)
启用平滑帧间帧内模式。默认值为 true。
- aom-params
使用由“:”分隔的 key=value 对列表设置 libaom 选项。有关支持的选项列表,请参阅“AV1 Specific Options”部分下的
aomenc --help
。例如,要使用 -aom-params 指定 libaom 编码选项
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
使用由“:”分隔的 key=value 对列表设置 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,对无损编码使用模块化。对于有损编码,VarDCT 通常优于模块化,但不支持无损编码。
16.10 libkvazaar
Kvazaar H.265/HEVC 编码器。
需要在配置期间存在 libkvazaar 头文件和库。你需要使用 --enable-libkvazaar 显式配置构建。
16.10.1 选项
- b
以 bit/s 为单位设置目标视频比特率并启用速率控制。
- kvazaar-params
将 kvazaar 参数设置为以逗号 (,) 分隔的 name=value 对列表。有关选项列表,请参阅 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。这仅在 slice_mode 设置为 'fixed' 时使用。
- 环路滤波
启用环路滤波,如果设置为 1(自动启用)。要禁用,请设置为 0。
- profile
设置配置文件限制。如果设置为值 ‘main’,则启用 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
用于通过 qscale 标志启用恒定质量模式 (VBR) 编码,并启用
pass1
和pass2
模式。- g
设置 GOP 大小。
- global_quality
以 lambda 单位设置全局质量(整数)。
仅当通过
flags +qscale
启用 VBR 模式时才相关。该值通过除以FF_QP2LAMBDA
转换为 QP 单位,截断到 [0 - 10] 范围内,然后乘以 6.3 以获得本地 libtheora 范围 [0-63] 内的值。值越高,质量越高。- q
当设置为非负值时启用 VBR 模式,并将恒定质量值设置为 QP 单位的双精度浮点值。
该值被截断到 [0-10] 范围内,然后乘以 6.3 以获得本地 libtheora 范围 [0-63] 内的值。
此选项仅在使用
ffmpeg
命令行工具时有效。对于库接口用户,请使用 global_quality。
16.12.2 示例
- 使用
ffmpeg
设置最大恒定质量 (VBR) 编码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 (目标比特率)
设置比特率(以比特/秒为单位)。请注意,FFmpeg 的 b 选项以比特/秒为单位表示,而
vpxenc
的 target-bitrate 以千比特/秒为单位表示。- g (关键帧最大距离)
- keyint_min (关键帧最小距离)
- qmin (最小量化器)
最小(最佳质量)量化器。
- qmax (最大量化器)
最大(最差质量)量化器。可以按帧更改。
- bufsize (缓冲区大小, 缓冲区最佳大小)
设置速率控制缓冲区大小(以比特为单位)。请注意,
vpxenc
的选项以毫秒为单位指定,libvpx 封装器按如下方式转换此值:buf-sz = bufsize * 1000 / bitrate
,buf-optimal-sz = bufsize * 1000 / bitrate * 5 / 6
。- rc_init_occupancy (缓冲区初始大小)
设置解码开始前应加载到 rc 缓冲区中的比特数。请注意,
vpxenc
的选项以毫秒为单位指定,libvpx 封装器按如下方式转换此值:rc_init_occupancy * 1000 / bitrate
。- undershoot-pct
设置目标比特率的数据率下冲(最小)百分比。
- overshoot-pct
设置目标比特率的数据率过冲(最大)百分比。
- skip_threshold (丢帧)
- qcomp (偏差百分比)
- maxrate (最大片段百分比)
设置 GOP 最大比特率(以比特/秒为单位)。请注意,
vpxenc
的选项指定为目标比特率的百分比,libvpx 封装器按如下方式转换此值:(maxrate * 100 / bitrate)
。- minrate (最小片段百分比)
设置 GOP 最小比特率(以比特/秒为单位)。请注意,
vpxenc
的选项指定为目标比特率的百分比,libvpx 封装器按如下方式转换此值:(minrate * 100 / bitrate)
。- minrate, maxrate, b end-usage=cbr
(minrate == maxrate == 比特率)
.- crf (end-usage=cq, cq-level)
- tune (tune)
- ‘psnr (psnr)’
- ‘ssim (ssim)’
- quality, deadline (截止时间)
- ‘best’
使用最佳质量截止时间。命名不当且相当慢,应避免使用此选项,因为它可能会给出比好的质量更差的输出。
- ‘good’
使用良好质量截止时间。与 cpu-used 选项一起使用时,这是速度和质量之间的良好折衷。
- ‘realtime’
使用实时质量截止时间。
- speed, cpu-used (cpu-used)
设置质量/速度比率修改器。较高的值会以牺牲质量为代价来加快编码速度。
- nr (噪声敏感度)
- static-thresh
设置块的更改阈值,低于该阈值的块将被编码器跳过。
- slices (令牌部分)
请注意,FFmpeg 的 slices 选项给出了分区总数,而
vpxenc
的 token-parts 给定为log2(partitions)
。- max-intra-rate
设置最大 I 帧比特率,作为目标比特率的百分比。值为 0 表示无限制。
- force_key_frames
VPX_EFLAG_FORCE_KF
- 与备用参考帧相关
- auto-alt-ref
启用备用参考帧的使用(仅限 2 次传递)。大于 1 的值启用多层备用参考帧(仅限 VP9)。
- arnr-maxframes
设置 altref 噪声降低的最大帧计数。
- arnr-type
设置 altref 噪声降低滤波器类型:向后、向前、居中。
- arnr-strength
设置 altref 噪声降低滤波器强度。
- rc-lookahead, lag-in-frames (帧延迟)
设置用于帧类型和速率控制的向前查找的帧数。
- min-gf-interval
设置最小金/备用参考帧间隔(仅限 VP9)。
- error-resilient
启用错误恢复功能。
- sharpness 整数
以降低 PSNR 为代价来提高清晰度。有效范围是 [0, 7]。
- ts-parameters
使用以 :- 分隔的键=值对列表来设置时间可伸缩性配置。例如,要使用
ffmpeg
指定时间可伸缩性参数ffmpeg -i INPUT -c:v libvpx -ts-parameters ts_number_layers=3:\ ts_target_bitrate=250,500,1000:ts_rate_decimator=4,2,1:\ ts_periodicity=4:ts_layer_id=0,2,1,2:ts_layering_mode=3 OUTPUT
以下是每个参数的简要说明,有关更多详细信息,请参阅
vpx/vpx_encoder.h
中的struct vpx_codec_enc_cfg
。- ts_number_layers
时间编码层数。
- ts_target_bitrate
每个时间层(以 kbps 为单位)的目标比特率。(比特率应包含较低的时间层)。
- ts_rate_decimator
每个时间层的帧率抽取因子。
- ts_periodicity
定义帧时间层成员资格的序列长度。
- ts_layer_id
定义帧与时间层之间成员关系的模板。
- ts_layering_mode
(可选)从一组预定义的时间分层模式中选择时间结构。目前支持以下选项。
- 0
内部不提供时间层标志,依赖于使用
AVFrame
中的metadata
字段传递的标志,该字段具有以下键。- vp8-flags
设置传递给编码器的标志,以指示当前帧的参考方案。有关更多详细信息,请参阅
vpx/vpx_encoder.h
中的函数vpx_codec_encode
。- temporal_id
显式设置当前要编码的帧的时间 ID。
- 2
两个时间层。0-1...
- 3
三个时间层。0-2-1-2...;使用单个参考帧。
- 4
与选项“3”相同,但时间周期内两个时间层 2 的帧之间存在依赖关系。
- VP8 特定选项
- screen-content-mode
屏幕内容模式,以下之一:0(关闭),1(屏幕),2(屏幕,具有更激进的速率控制)。
- VP9 特定选项
- lossless
启用无损模式。
- tile-columns
设置要使用的图块列数。请注意,此值以
log2(tile_columns)
的形式给出。例如,请求 8 个图块列应将 tile-columns 选项设置为 3。- tile-rows
设置要使用的图块行数。请注意,此值以
log2(tile_rows)
的形式给出。例如,请求 4 个图块行应将 tile-rows 选项设置为 2。- frame-parallel
启用帧并行解码功能。
- aq-mode
设置自适应量化模式(0:关闭(默认),1:方差,2:复杂度,3:循环刷新,4:equator360)。
- colorspace 颜色空间
设置输入颜色空间。VP9 比特流支持以下颜色空间的信令:
- ‘rgb’ sRGB
- ‘bt709’ bt709
- ‘unspecified’ 未知
- ‘bt470bg’ bt601
- ‘smpte170m’ smpte170
- ‘smpte240m’ smpte240
- ‘bt2020_ncl’ bt2020
- row-mt 布尔值
启用基于行的多线程。
- tune-content
设置内容类型:默认 (0),屏幕 (1),电影 (2)。
- corpus-complexity
语料库 VBR 模式是标准 VBR 的一种变体,其中传递复杂性分布中点,而不是为特定片段或块计算。
有效范围是 [0, 10000]。0(默认)使用标准 VBR。
- enable-tpl 布尔值
启用时间依赖性模型。
- ref-frame-config
使用每帧元数据,设置
vpx/vp8cx.h
中结构体vpx_svc_ref_frame_config_t
的成员,以精细控制参考方案和帧缓冲区管理。
使用以 :- 分隔的键=值对列表。例如:av_dict_set(&av_frame->metadata, "ref-frame-config", \ "rfc_update_buffer_slot=7:rfc_lst_fb_idx=0:rfc_gld_fb_idx=1:rfc_alt_fb_idx=2:rfc_reference_last=0:rfc_reference_golden=0:rfc_reference_alt_ref=0");
- rfc_update_buffer_slot
指示要更新的缓冲区槽号
- rfc_update_last
指示是否更新 LAST 帧
- rfc_update_golden
指示是否更新 GOLDEN 帧
- rfc_update_alt_ref
指示是否更新 ALT_REF 帧
- rfc_lst_fb_idx
LAST 帧缓冲区索引
- rfc_gld_fb_idx
GOLDEN 帧缓冲区索引
- rfc_alt_fb_idx
ALT_REF 帧缓冲区索引
- rfc_reference_last
指示是否参考 LAST 帧
- rfc_reference_golden
指示是否参考 GOLDEN 帧
- rfc_reference_alt_ref
指示是否参考 ALT_REF 帧
- rfc_reference_duration
指示帧持续时间
有关 libvpx 的更多信息,请参阅:http://www.webmproject.org/
16.14 libvvenc
VVenC H.266/VVC 编码器封装。
此编码器需要在配置期间存在 libvvenc 头文件和库。您需要使用 --enable-libvvenc 显式配置构建。
VVenC 项目网站位于 https://github.com/fraunhoferhhi/vvenc。
16.14.1 支持的像素格式
VVenC 仅支持 10 位颜色空间作为输入。但是内部(编码的)位深度可以在运行时设置为 8 位或 10 位。
16.14.2 选项
- b
设置目标视频比特率。
- g
设置 GOP 大小。当前支持 g=1(仅 Intra)或默认。
- preset
设置 VVenC 预设。
- levelidc
设置 level idc。
- tier
设置 vvc 层级。
- qp
设置恒定量化参数。
- subopt 布尔值
设置主观(感知驱动的)优化。默认为 1(开启)。
- bitdepth8 布尔值
设置 8 位编码模式,而不是使用 10 位。默认为 0(关闭)。
- period
设置(帧内)刷新周期(以秒为单位)。
- vvenc-params
使用以 ":" 分隔的 键=值 对列表设置 vvenc 选项。有关选项列表,请参阅
vvencapp --fullhelp
或vvencFFapp --fullhelp
。例如,选项可以提供为:
intraperiod=64:decodingrefreshtype=idr:poc0idr=1:internalbitdepth=8
例如,可以使用 -vvenc-params 提供编码选项。
ffmpeg -i input -c:v libvvenc -b 1M -vvenc-params intraperiod=64:decodingrefreshtype=idr:poc0idr=1:internalbitdepth=8 output.mp4
16.15 libwebp
libwebp WebP 图像编码器封装
libwebp 是 Google 官方的 WebP 图像编码器。它可以以有损或无损模式编码。有损图像本质上是 VP8 帧的封装。无损图像是 Google 开发的单独编解码器。
16.15.1 像素格式
目前,由于格式和 libwebp 的限制,libwebp 仅支持有损的 YUV420 和无损的 RGB。两种模式都支持 Alpha。由于 API 的限制,如果在编码有损时传入 RGB 或在编码无损时传入 YUV,像素格式将自动使用 libwebp 的函数进行转换。这并不理想,只是为了方便起见。
16.15.2 选项
- -lossless 布尔值
启用/禁用无损模式的使用。默认为 0。
- -compression_level 整数
对于有损,这是一个质量/速度的权衡。对于给定的尺寸,较高的值会带来更好的质量,但代价是增加编码时间。对于无损,这是一个尺寸/速度的权衡。较高的值会带来较小的尺寸,但代价是增加编码时间。更具体地说,它控制使用的额外算法和压缩工具的数量,并改变这些工具的组合。这映射到 libwebp 中的 method 选项。有效范围是 0 到 6。默认为 4。
- -quality 浮点数
对于有损编码,这将控制图像质量。对于无损编码,这将控制压缩中花费的精力和时间。范围是 0 到 100。默认为 75。
- -preset 类型
配置预设。这会根据图像的一般类型进行一些自动设置。
- none
不使用预设。
- 默认
使用编码器默认值。
- picture
数码照片,如肖像、内景
- photo
带有自然光线的室外照片
- drawing
手绘或线条图,具有高对比度细节
- icon
小型彩色图像
- text
Text-like
16.16 libx264, libx264rgb
x264 H.264/MPEG-4 AVC 编码器封装。
此编码器需要在配置期间存在 libx264 头文件和库。您需要使用 --enable-libx264
显式配置构建。
libx264 支持大量功能,包括 8x8 和 4x4 自适应空间变换、自适应 B 帧放置、CAVLC/CABAC 熵编码、隔行扫描 (MBAFF)、无损模式、用于保留细节的心理视觉优化(自适应量化、psy-RD、psy-trellis)。
许多 libx264 编码器选项映射到 FFmpeg 全局编解码器选项,而独特的编码器选项通过私有选项提供。此外,x264opts 和 x264-params 私有选项允许传递 libx264 x264_param_parse
函数接受的键=值元组列表。
x264 项目网站位于 http://www.videolan.org/developers/x264.html。
libx264rgb 编码器与 libx264 相同,只是它接受打包的 RGB 像素格式作为输入,而不是 YUV。
16.16.1 支持的像素格式
x264 支持 8 到 10 位颜色空间。确切的位深度在 x264 的配置时控制。
16.16.2 选项
libx264 封装支持以下选项。为方便迁移,在括号中列出了 x264
等效选项或值。
为了减少文档重复,这里只记录私有选项和一些需要特别注意的其他选项。有关未记录的通用选项的文档,请参阅 编解码器选项章节。
要获得更准确和广泛的 libx264 选项文档,请调用命令 x264 --fullhelp
或查阅 libx264 文档。
在下面的列表中,请注意,x264
选项名称显示在 libavcodec 对应的名称之后的括号中,以防存在直接映射。
- b (bitrate)
设置比特率,单位为比特/秒 (bits/s)。请注意,FFmpeg 的 b 选项以比特/秒为单位,而
x264
的 bitrate 则以千比特/秒 (kilobits/s) 为单位。- bf (bframes)
I 帧和 P 帧之间 B 帧的数量
- g (keyint)
最大 GOP 大小
- qmin (qpmin)
最小量化器尺度
- qmax (qpmax)
最大量化器尺度
- qdiff (qpstep)
量化器尺度之间的最大差异
- qblur (qblur)
量化器曲线模糊
- qcomp (qcomp)
量化器曲线压缩因子
- refs (ref)
每个 P 帧可以使用的参考帧数量。范围是 0-16。
- level (level)
设置
x264_param_t.i_level_idc
的值。如果该值为正数,则会使用该值,否则将被忽略。此值可以使用
AVCodecContext
API 设置(例如,直接设置AVCodecContext
的值),并指定为映射到相应级别的整数(例如,值 31 映射到 H.264 级别 IDC “3.1”,如x264_levels
表中所定义)。当设置为非正值时,此值将被忽略。或者,可以将其设置为私有选项,覆盖
AVCodecContext
中设置的值,并且在这种情况下,必须将其指定为级别 IDC 标识符(例如,“3.1”),如 H.264 附件 A 所定义。- sc_threshold (scenecut)
设置场景切换检测的阈值。
- trellis (trellis)
执行网格量化以提高效率。默认启用。
- nr (nr)
降噪
- me_range (merange)
运动搜索的最大范围(以像素为单位)。
- me_method (me)
设置运动估计方法。可能的值,按速度降序排列:
- ‘dia (dia)’
- ‘epzs (dia)’
半径为 1 的菱形搜索(最快)。 ‘epzs’ 是 ‘dia’ 的别名。
- ‘hex (hex)’
半径为 2 的六边形搜索。
- ‘umh (umh)’
不均匀多六边形搜索。
- ‘esa (esa)’
穷举搜索。
- ‘tesa (tesa)’
Hadamard 穷举搜索(最慢)。
- forced-idr
通常,当强制使用 I 帧类型时,编码器可以选择任何类型的 I 帧。此选项强制它选择 IDR 帧。
- subq (subme)
子像素运动估计方法。
- b_strategy (b-adapt)
自适应 B 帧放置决策算法。仅在第一遍中使用。
- keyint_min (min-keyint)
最小 GOP 大小。
- 编码器
设置熵编码器。可能的值:
- ‘ac’
启用 CABAC。
- ‘vlc’
启用 CAVLC 并禁用 CABAC。它产生与
x264
的 --no-cabac 选项相同的效果。
- cmp
设置全像素运动估计比较算法。可能的值:
- ‘chroma’
在运动估计中启用色度。
- ‘sad’
在运动估计中忽略色度。它产生与
x264
的 --no-chroma-me 选项相同的效果。
- threads (线程)
编码线程数。
- thread_type
设置多线程技术。可能的值:
- ‘slice’
基于切片的多线程。它产生与
x264
的 --sliced-threads 选项相同的效果。- ‘frame’
基于帧的多线程。
- flags
设置编码标志。可以通过将其设置为
-cgop
来禁用闭合 GOP 并启用开放 GOP。结果类似于x264
的 --open-gop 选项的行为。- rc_init_occupancy (vbv-init)
初始 VBV 缓冲区占用率
- preset (preset)
设置编码预设。
- tune (tune)
设置编码参数的调整。
- profile (profile)
设置配置文件限制。
- fastfirstpass
当设置为 1 时,在编码第一遍时启用快速设置。当设置为 0 时,它产生与
x264
的 --slow-firstpass 选项相同的效果。- crf (crf)
设置恒定质量模式的质量。
- crf_max (crf-max)
在 CRF 模式下,防止 VBV 将质量降低到此点以下。
- qp (qp)
设置恒定量化率控制方法的参数。
- aq-mode (aq-mode)
设置 AQ 方法。可能的值:
- ‘none (0)’
已禁用。
- ‘variance (1)’
方差 AQ(复杂度掩码)。
- ‘autovariance (2)’
自动方差 AQ(实验性)。
- aq-strength (aq-strength)
设置 AQ 强度,减少平坦和纹理区域中的阻塞和模糊。
- psy
当设置为 1 时,使用心理视觉优化。当设置为 0 时,它产生与
x264
的 --no-psy 选项相同的效果。- psy-rd (psy-rd)
设置心理视觉优化的强度,格式为 psy-rd:psy-trellis。
- rc-lookahead (rc-lookahead)
设置用于帧类型和速率控制的向前查找的帧数。
- weightb
当设置为 1 时,启用 B 帧的加权预测。当设置为 0 时,它产生与
x264
的 --no-weightb 选项相同的效果。- weightp (weightp)
设置 P 帧的加权预测方法。可能的值:
- ‘none (0)’
已禁用
- ‘simple (1)’
仅启用加权参考
- ‘smart (2)’
同时启用加权参考和重复帧
- ssim (ssim)
启用在编码后计算和打印 SSIM 统计信息。
- intra-refresh (intra-refresh)
当设置为 1 时,启用使用周期性帧内刷新而不是 IDR 帧。
- avcintra-class (class)
配置编码器以生成 AVC-Intra。有效值为 50、100 和 200
- bluray-compat (bluray-compat)
配置编码器以与蓝光标准兼容。它是设置“bluray-compat=1 force-cfr=1”的简写形式。
- b-bias (b-bias)
设置 B 帧使用频率的影响。
- b-pyramid (b-pyramid)
设置将某些 B 帧保留为参考帧的方法。可能的值:
- ‘none (none)’
已禁用。
- ‘strict (strict)’
严格的分层金字塔。
- ‘normal (normal)’
非严格(不兼容蓝光)。
- mixed-refs
当设置为 1 时,启用每个分区使用一个参考,而不是每个宏块使用一个参考。当设置为 0 时,它产生与
x264
的 --no-mixed-refs 选项相同的效果。- 8x8dct
当设置为 1 时,启用自适应空间变换(高配置 8x8 变换)。当设置为 0 时,它产生与
x264
的 --no-8x8dct 选项相同的效果。- fast-pskip
当设置为 1 时,启用 P 帧上的早期 SKIP 检测。当设置为 0 时,它产生与
x264
的 --no-fast-pskip 选项相同的效果。- aud (aud)
当设置为 1 时,启用访问单元分隔符的使用。
- mbtree
当设置为 1 时,启用宏块树率控制。当设置为 0 时,它产生与
x264
的 --no-mbtree 选项相同的效果。- deblock (deblock)
以 alpha:beta 形式设置环路滤波器参数。
- cplxblur (cplxblur)
设置 QP 中的波动减少(曲线压缩之前)。
- 分区 (partitions)
设置要考虑的分区,作为逗号分隔的值列表。列表中可能的值
- ‘p8x8’
8x8 P 帧分区。
- ‘p4x4’
4x4 P 帧分区。
- ‘b8x8’
4x4 B 帧分区。
- ‘i8x8’
8x8 I 帧分区。
- ‘i4x4’
4x4 I 帧分区。(启用 ‘p4x4’ 需要启用 ‘p8x8’。启用 ‘i8x8’ 需要启用自适应空间变换(8x8dct 选项)。)
- ‘none (none)’
不考虑任何分区。
- ‘all (all)’
考虑每个分区。
- direct-pred (direct)
设置直接 MV 预测模式。可能的值
- ‘none (none)’
禁用 MV 预测。
- ‘spatial (spatial)’
启用空间预测。
- ‘temporal (temporal)’
启用时间预测。
- ‘auto (auto)’
自动决定。
- slice-max-size (slice-max-size)
设置每个切片的大小限制(以字节为单位)。如果未指定,但指定了 RTP 有效载荷大小 (ps),则使用该值。
- stats (stats)
设置多遍统计信息的文件名。
- nal-hrd (nal-hrd)
设置 HRD 信息信号(需要设置 vbv-bufsize)。可能的值
- ‘none (none)’
禁用 HRD 信息信号。
- ‘vbr (vbr)’
可变比特率。
- ‘cbr (cbr)’
恒定比特率(不允许在 MP4 容器中使用)。
- x264opts opts
- x264-params opts
使用以 “:” 分隔的 key=value 选项列表覆盖 x264 配置。
这两个选项的参数都是以 “:” 分隔的 key=value 对的列表。使用 x264opts 时,可以省略 value,此时 value 默认为
1
。对于 filter 和 psy-rd 选项,其值本身使用 “:” 作为分隔符,请改用 “,”。它们很久以前就接受了这种方式,但由于某些原因,这一点没有记录在文档中。
例如,选项可以提供为:
level=30:bframes=0:weightp=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1:subq=6:8x8dct=0:trellis=0
例如,使用
ffmpeg
指定 libx264 编码选项ffmpeg -i foo.mpg -c:v libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv
要获取 libx264 选项的完整列表,请调用命令
x264 --fullhelp
或查阅 libx264 文档。- a53cc boolean
将闭路字幕(必须是 ATSC 兼容格式)导入到输出中。只有 mpeg2 和 h264 解码器提供这些。默认值为 1 (开启)。
- udu_sei boolean
如果可用,将用户数据未注册的 SEI 导入到输出中。默认值为 0 (关闭)。
- mb_info boolean
通过 AVFrameSideData 设置 mb_info 数据,仅在从 API 使用时有用。默认值为 0 (关闭)。
提供了用于常见用法的编码 ffpresets,因此它们可以与通用预设系统一起使用(例如,传递 pre 选项)。
16.17 libx265
x265 H.265/HEVC 编码器包装器。
此编码器在配置期间需要 libx265 头文件和库的存在。您需要使用 --enable-libx265 显式配置构建。
16.17.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
使用以 “:” 分隔的 key=value 对列表设置 x265 选项。有关选项列表,请参阅
x265 --help
。例如,使用 -x265-params 指定 libx265 编码选项
ffmpeg -i input -c:v libx265 -x265-params crf=26:psy-rd=1 output.mp4
16.18 libxavs2
xavs2 AVS2-P2/IEEE1857.4 编码器包装器。
此编码器在配置期间需要 libxavs2 头文件和库的存在。您需要使用 --enable-libxavs2 显式配置构建。
使用以下标准 libavcodec 选项
- b / bit_rate
- g / gop_size
- bf / max_b_frames
编码器还有其自身的特定选项
16.18.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
使用以 “:” 分隔的 key=value 对列表设置 xavs2 选项。
例如,使用 -xavs2-params 指定 libxavs2 编码选项
ffmpeg -i input -c:v libxavs2 -xavs2-params RdoqLevel=0 output.avs2
16.19 libxeve
eXtra-fast Essential Video Encoder (XEVE) MPEG-5 EVC 编码器包装器。为方便迁移,xeve 等效选项或值在括号中列出。
此编码器在配置期间需要 libxeve 头文件和库的存在。您需要使用 --enable-libxeve 显式配置构建。
许多 libxeve 编码器选项映射到 FFmpeg 全局编解码器选项,而唯一的编码器选项通过私有选项提供。此外,xeve-params 私有选项允许传递 libxeve parse_xeve_params
函数接受的 key=value 元组列表。
xeve 项目网站位于 https://github.com/mpeg5/xeve。
16.19.1 选项
libxeve 包装器支持以下选项。为方便迁移,xeve 等效选项或值在括号中列出。
为了减少文档重复,这里只记录私有选项和一些需要特别注意的其他选项。有关未记录的通用选项的文档,请参阅 编解码器选项章节。
要获取有关 libxeve 选项的更准确和全面的文档,请调用命令 xeve_app --help
或查阅 libxeve 文档。
- b (bitrate)
设置目标视频比特率(以比特/秒为单位)。请注意,FFmpeg 的 b 选项以比特/秒表示,而 xeve 的比特率以千比特/秒表示。
- bf (bframes)
设置 B 帧的最大数量(1、3、7、15)。
- g (keyint)
设置 GOP 大小(I 图像周期)。
- preset (preset)
设置 xeve 预设。设置编码器预设值以确定编码速度 [fast, medium, slow, placebo]
- tune (tune)
设置编码器调优参数 [psnr, zerolatency]
- profile (profile)
设置编码器配置文件 [0: baseline; 1: main]
- crf (crf)
设置恒定质量模式的质量。恒定速率因子 <10..49> [默认值:32]
- qp (qp)
设置恒定量化率控制方法参数。量化参数 qp <0..51> [默认值:32]
- threads (线程)
强制使用特定数量的线程
16.20 libxvid
Xvid MPEG-4 第 2 部分编码器包装器。
此编码器在配置期间需要 libxvidcore 头文件和库的存在。您需要使用 --enable-libxvid --enable-gpl
显式配置构建。
原生 mpeg4
编码器支持 MPEG-4 第 2 部分格式,因此用户无需此库即可编码为该格式。
16.20.1 选项
libxvid 包装器支持以下选项。以下某些选项已列出但未记录,并且对应于共享编解码器选项。有关其文档,请参阅编解码器选项章节。未列出的其他共享选项对 libxvid 编码器无效。
- b
- g
- qmin
- qmax
- mpeg_quant
- threads
- bf
- b_qfactor
- b_qoffset
- flags
设置特定的编码标志。可能的值
- ‘mv4’
每个宏块使用四个运动向量。
- ‘aic’
启用高质量的交流预测。
- ‘gray’
仅编码灰度。
- ‘qpel’
启用四分之一像素运动补偿。
- ‘cgop’
启用封闭 GOP。
- ‘global_header’
将全局头放在 extradata 中,而不是每个关键帧中。
- gmc
启用全局运动补偿 (GMC)。默认为 0(禁用)。
- 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(禁用)。
当与 lumi_aq 结合使用时,最终的质量不会比单独指定的任何一个更好。换句话说,最终质量将是两种效果中较差的一种。
- trellis
设置速率失真最优量化。
- ssim
设置结构相似性 (SSIM) 显示方法。可能的值
- ‘off’
禁用 SSIM 信息的显示。
- ‘avg’
在编码结束时将平均 SSIM 输出到 stdout。显示平均 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.21 MediaFoundation
这为 MediaFoundation 框架中的编码器(音频和视频)提供了封装。它可以访问 SW 和 HW 编码器。视频编码器可以采用 nv12 或 yuv420p 形式的输入(某些编码器同时支持这两种形式,某些编码器仅支持其中一种 - 在实践中,nv12 是更安全的选择,尤其是在 HW 编码器中)。
16.22 Microsoft RLE
Microsoft RLE(又名 MSRLE)编码器。仅支持 8 位调色板模式。与 Windows 3.1 和 Windows 95 兼容。
16.22.1 选项
- g integer
关键帧间隔。关键帧至少每
-g
帧插入一次,有时会更快。
16.23 mpeg2
MPEG-2 视频编码器。
16.23.1 选项
- profile
选择要编码的 mpeg2 配置文件
- ‘422’
- ‘high’
- ‘ss’
空间可伸缩
- ‘snr’
SNR 可伸缩
- ‘main’
- ‘simple’
- level
选择要编码的 mpeg2 级别
- ‘high’
- ‘high1440’
- ‘main’
- ‘low’
- seq_disp_ext 整数
指定编码器是否应将 sequence_display_extension 写入输出。
- -1
- auto
通过检查要写入的数据是否与默认值或未指定的值不同,自动决定是否写入(这是默认值)。
- 0
- never
永远不要写入。
- 1
- always
始终写入。
- video_format 整数
指定写入序列显示扩展中的 video_format,指示视频图片的来源。默认值为 ‘unspecified’,可以是 ‘component’、‘pal’、‘ntsc’、‘secam’ 或 ‘mac’。为获得最大兼容性,请使用 ‘component’。
- a53cc boolean
将隐藏式字幕(必须是 ATSC 兼容格式)导入输出。默认为 1(启用)。
16.24 png
PNG 图像编码器。
16.24.1 私有选项
- dpi 整数
设置像素的物理密度,以每英寸点数为单位,默认情况下未设置
- dpm 整数
设置像素的物理密度,以每米点数为单位,默认情况下未设置
16.25 ProRes
Apple ProRes 编码器。
FFmpeg 包含 2 个 ProRes 编码器,prores-aw 和 prores-ks 编码器。可以使用 -vcodec
选项选择要使用的编码器。
16.25.1 prores-ks 的私有选项
- profile 整数
选择要编码的 ProRes 配置文件
- ‘proxy’
- ‘lt’
- ‘standard’
- ‘hq’
- ‘4444’
- ‘4444xq’
- quant_mat 整数
选择量化矩阵。
- ‘auto’
- ‘default’
- ‘proxy’
- ‘lt’
- ‘standard’
- ‘hq’
如果设置为 auto,将选择与配置文件匹配的矩阵。如果未设置,将选择提供最高质量的矩阵 default。
- bits_per_mb 整数
分配多少位用于编码一个宏块。不同的配置文件使用每个宏块 200 到 2400 位之间,最大值为 8000。
- mbs_per_slice 整数
每个切片中的宏块数 (1-8);默认值 (8) 在几乎所有情况下都应该足够好。
- vendor 字符串
覆盖 4 字节的供应商 ID。像 apl0 这样的自定义供应商 ID 会声明该流是由 Apple 编码器生成的。
- alpha_bits 整数
指定 alpha 分量的位数。可能的值为 0、8 和 16。使用 0 禁用 alpha 平面编码。
16.25.2 速度考虑
在默认操作模式下,编码器必须遵守帧约束(即,不要生成大于请求大小的帧),同时仍使输出图片尽可能好。包含大量小细节的帧更难压缩,并且编码器将花费更多时间搜索每个切片的适当量化器。
设置更高的 bits_per_mb 限制将提高速度。
为了获得最快的编码速度,请设置 qscale 参数(建议值为 4),并且不要设置大小约束。
16.26 QSV 编码器
英特尔 QuickSync 视频编码器系列(MPEG-2、H.264、HEVC、JPEG/MJPEG、VP9、AV1)
16.26.1 码率控制方法
速率控制方法按如下方式选择
- 当指定 global_quality 时,将使用基于质量的模式。具体来说,这意味着
- - CQP - 当也设置了 qscale 编解码器标志时(-qscale ffmpeg 选项),表示恒定量化器标度。
- - LA_ICQ - 当也设置了 look_ahead 选项时,表示具有前瞻的智能恒定质量。
- - ICQ – 否则表示智能恒定质量。对于 ICQ 模式,全局质量范围为 1 到 51,其中 1 为最佳质量。
- 否则,当使用 b 选项指定所需平均比特率时,将使用基于比特率的模式。
- - LA - 当指定 look_ahead 选项时,表示具有前瞻性的 VBR。
- - VCM - 当设置 vcm 选项时,表示视频会议模式。
- - CBR - 当指定 maxrate 并且等于平均比特率时,表示恒定比特率。
- - VBR - 当指定 maxrate 但高于平均比特率时,表示可变比特率。
- - AVBR - 当未指定 maxrate,并且 avbr_accuracy 和 avbr_convergence 都设置为非零时,表示平均 VBR 模式。此模式适用于 Windows 上的 H264 和 HEVC。
- 否则,将使用默认的速率控制方法 CQP。
请注意,根据您的系统,编码器可能会选择与您指定的模式不同的模式。将详细级别设置为 verbose 或更高,以查看 QSV 运行时使用的实际设置。
16.26.2 全局选项 -> MSDK 选项
其他 libavcodec 全局选项会按如下方式映射到 MSDK 选项
- g/gop_size -> GopPicSize
- bf/max_b_frames+1 -> GopRefDist
- rc_init_occupancy/rc_initial_buffer_occupancy -> InitialDelayInKB
- slices -> NumSlice
- refs -> NumRefFrame
- b_strategy/b_frame_strategy -> BRefType
- cgop/CLOSED_GOP 编解码器标志 -> GopOptFlag
- 对于 CQP 模式,i_qfactor/i_qoffset 和 b_qfactor/b_qoffset 分别设置 QPP 和 QPI,以及 QPP 和 QPB 之间的差异。
- 将 coder 选项设置为 vlc 值,将使 H.264 编码器使用 CAVLC 而不是 CABAC。
16.26.3 通用选项
以下选项被所有 qsv 编码器使用。
- async_depth
指定应用程序在显式同步结果之前执行的异步操作数量。如果为零,则不指定该值。
- preset
此选项列出了一系列选择,从 veryfast (最快速度) 到 veryslow (最佳质量)。
- ‘veryfast’
- ‘faster’
- ‘fast’
- ‘medium’
- ‘slow’
- ‘slower’
- ‘veryslow’
- forced_idr
强制 I 帧作为 IDR 帧。
- low_power
对于编码器,将此标志设置为 ON 以降低功耗和 GPU 使用率。
16.26.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 配置。
- qsv_params
将 QSV 编码器参数设置为以冒号分隔的键值对列表。
qsv_params 的格式应为
key1=value1:key2=value2:...
。这些参数使用 MFXSetParameter 函数直接传递到底层的 Intel Quick Sync Video (QSV) 编码器。
示例
ffmpeg -i input.mp4 -c:v h264_qsv -qsv_params "CodingOption1=1:CodingOption2=2" output.mp4
此选项允许对 QSV 编码器提供的各种特定于编码器的设置进行细粒度控制。
16.26.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
视频会议模式,请参阅 ratecontrol 方法。
- 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 差值。如果 luma 样本的目标编码位深度为 8,则此值为 [-51, 51] 范围内的有符号值,如果为 10 位深度则为 [-63, 63] 范围,如果为 12 位深度则为 [-75, 75] 范围。
- 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)算法。该算法专注于在满足指定的比特率 target_bitrate 的同时,在 avbr_convergence 周期后,将精度控制在 avbr_accuracy 范围内,以实现整体编码质量。此方法不遵循 HRD,并且瞬时比特率不受限制或填充。
- skip_frame
使用每帧元数据“qsv_skip_frame”在编码时跳过帧。此选项定义此元数据的使用方式。
- ‘no_skip’
禁用帧跳过。
- ‘insert_dummy’
编码器将所有宏块都编码为跳过的帧插入到比特流中。
- ‘insert_nothing’
与 insert_dummy 类似,但编码器不向比特流中插入任何内容。跳过的帧仍然在 BRC 中使用。例如,GOP 仍然包括跳过的帧,并且跳过的帧之后的帧大小会更大。
- ‘brc_only’
skip_frame 元数据指示当前帧之前丢失的帧数。
16.26.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 才能支持高层级)。此选项仅在指定了层级选项时生效。
- ‘main’
- ‘high’
- gpb
1: GPB (广义 P/B 帧)
0: 常规 P 帧。
- tile_cols
分块编码的列数。
- tile_rows
分块编码的行数。
- aud
插入访问单元分隔符 NAL。
- pic_timing_sei
插入带有 pic_struct_syntax 元素的图片定时 SEI。
- transform_skip
打开此选项以启用变换跳过。它在不低于 ICL 的平台上受支持。
- int_ref_type
指定帧内刷新类型。帧内刷新的主要目标是提高容错能力,而不会因 I 帧而对编码比特流大小产生显著影响。SDK 编码器通过使用帧内 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 差值。如果 luma 样本的目标编码位深度为 8,则此值为 [-51, 51] 范围内的有符号值,如果为 10 位深度则为 [-63, 63] 范围,如果为 12 位深度则为 [-75, 75] 范围。
- 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)算法。该算法专注于在满足指定的比特率 target_bitrate 的同时,在 avbr_convergence 周期后,将精度控制在 avbr_accuracy 范围内,以实现整体编码质量。此方法不遵循 HRD,并且瞬时比特率不受限制或填充。
- skip_frame
使用每帧元数据“qsv_skip_frame”在编码时跳过帧。此选项定义此元数据的使用方式。
- ‘no_skip’
禁用帧跳过。
- ‘insert_dummy’
编码器将所有宏块都编码为跳过的帧插入到比特流中。
- ‘insert_nothing’
与 insert_dummy 类似,但编码器不向比特流中插入任何内容。跳过的帧仍然在 BRC 中使用。例如,GOP 仍然包括跳过的帧,并且跳过的帧之后的帧大小会更大。
- ‘brc_only’
skip_frame 元数据指示当前帧之前丢失的帧数。
16.26.7 MPEG2 选项
这些选项由 mpeg2_qsv 使用
- profile
- ‘unknown’
- ‘simple’
- ‘main’
- ‘high’
16.26.8 VP9 选项
这些选项由 vp9_qsv 使用
- profile
- ‘unknown’
- ‘profile0’
- ‘profile1’
- ‘profile2’
- ‘profile3’
- tile_cols
分块编码的列数 (需要 libmfx >= 1.29)。
- tile_rows
分块编码的行数 (需要 libmfx >= 1.29)。
16.26.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 码率控制模式下无效。
- max_frame_size_i
I 帧的最大编码帧大小(以字节为单位)。如果此值设置为大于零,则对于 I 帧,将忽略 max_frame_size 设置的值。
- max_frame_size_p
P 帧的最大编码帧大小(以字节为单位)。如果此值设置为大于零,则对于 P 帧,将忽略 max_frame_size 设置的值。
16.27 snow
16.27.1 选项
- iterative_dia_size
迭代运动估计的 dia 大小
16.28 VAAPI 编码器
可通过 VAAPI 访问的硬件编码器的封装器。
这些编码器仅接受 VAAPI 硬件表面中的输入。如果你的输入是软件帧,请使用 hwupload 滤镜将它们上传到 GPU。
使用以下标准 libavcodec 选项
- g / gop_size
- bf / max_b_frames
- profile
如果未设置,这将根据输入帧的格式和驱动程序支持的配置文件自动确定。
- level
- b / bit_rate
- maxrate / rc_max_rate
- bufsize / rc_buffer_size
- rc_init_occupancy / rc_initial_buffer_occupancy
- 压缩级别
速度/质量权衡:值越高,速度越快/质量越差。
- q / global_quality
大小/质量权衡:值越高,大小越小/质量越差。
- qmin
- qmax
- i_qfactor / i_quant_factor
- i_qoffset / i_quant_offset
- b_qfactor / b_quant_factor
- b_qoffset / b_quant_offset
- slices
所有编码器都支持以下选项
- low_power
某些驱动程序/平台为某些编解码器提供了第二个编码器,旨在比默认编码器消耗更少的功率;设置此选项将尝试使用该编码器。请注意,它可能支持缩减的功能集,因此某些其他选项可能在此模式下不可用。
- idr_interval
在开放 GOP 模式下,设置两次完整刷新(IDR)帧之间的正常帧内帧数量。帧内帧仍然是 IRAP,但将不包括全局标头,并且可能具有不可解码的引导图片。
- b_depth
设置 B 帧参考深度。设置为 1 (默认值) 时,所有 B 帧将仅引用 P 帧或 I 帧。设置为更大值时,将存在多个 B 帧层,每一层的帧仅引用更高层的帧。
- async_depth
最大处理并行度。增加此值可以提高单通道性能。如果驱动程序未实现 vaSyncBuffer 函数,则此选项不起作用。如果使用大量的 async_depth,请确保分配了足够的 hw_frames。
- max_frame_size
设置每帧允许的最大大小(以字节为单位)。如果帧大小超过限制,编码器将调整 QP 值以控制帧大小。在 CQP 码率控制模式下无效。
- rc_mode
设置要使用的码率控制模式。给定的驱动程序可能只支持一部分模式。
可能的模式
- auto
根据驱动程序支持和其他选项自动选择模式。这是默认值。
- CQP
恒定质量。
- CBR
恒定比特率。
- VBR
可变比特率。
- ICQ
智能恒定质量。
- QVBR
质量定义的可变比特率。
- AVBR
平均可变比特率。
- blbrc
启用块级码率控制,它逐块分配不同的比特率。对于 CQP 模式无效。
每个编码器也有自己特定的选项
- av1_vaapi
profile 设置 seq_profile 的值。 tier 设置 seq_tier 的值。 level 设置 seq_level_idx 的值。
- tiles
设置用于编码输入视频的图块数,格式为 列 x 行。(默认值为 auto,表示使用最小图块列/行数)。
- tile_groups
设置图块组数量。所有图块将尽可能均匀地分配到每个图块组。(默认值为 1)。
- h264_vaapi
profile 设置 profile_idc 的值和 constraint_set*_flag。 level 设置 level_idc 的值。
- 编码器
设置熵编码器(默认为 cabac)。可能的值
- ‘ac’
- ‘cabac’
使用 CABAC。
- ‘vlc’
- ‘cavlc’
使用 CAVLC。
- aud
在流中包含访问单元分隔符(默认情况下不包括)。
- sei
设置要包含的 SEI 消息类型。以下值的某种组合
- ‘identifier’
包含一个 user_data_unregistered 消息,其中包含有关编码器的信息。
- ‘timing’
包括图片定时参数 (buffering_period 和 pic_timing 消息)。
- ‘recovery_point’
在适当的地方包含恢复点 (recovery_point 消息)。
- hevc_vaapi
profile 和 level 分别设置 general_profile_idc 和 general_level_idc 的值。
- aud
在流中包含访问单元分隔符(默认情况下不包括)。
- tier
设置 general_tier_flag。如果未明确指定,这可能会影响为流选择的层级。
- sei
设置要包含的 SEI 消息类型。以下值的某种组合
- ‘hdr’
如果输入帧具有 HDR 元数据,则包含 HDR 元数据 (mastering_display_colour_volume 和 content_light_level 消息)。
- tiles
设置用于编码输入视频的图块数,格式为 列 x 行。更大的数字允许在编码和解码中实现更大的并行性,但可能会降低编码效率。
- mjpeg_vaapi
仅支持基线 DCT 编码。编码器始终使用标准量化和霍夫曼表 - global_quality 缩放标准量化表(范围 1-100)。
对于 YUV,支持 4:2:0、4:2:2 和 4:4:4 子采样模式。也支持 RGB,并将创建 RGB JPEG。
- jfif
在每个帧中包含 JFIF 标头(默认情况下不包括)。
- huffman
包含标准霍夫曼表(默认启用)。关闭此项将节省每个输出帧中的几百个字节,但可能会失去与某些不完全处理 MJPEG 的 JPEG 解码器的兼容性。
- mpeg2_vaapi
profile 和 level 设置 profile_and_level_indication 的值。
- vp8_vaapi
不支持 B 帧。
global_quality 设置用于非关键帧的 q_idx(范围 0-127)。
- loop_filter_level
- loop_filter_sharpness
手动设置环路滤波器参数。
- vp9_vaapi
global_quality 设置用于 P 帧的 q_idx(范围 0-255)。
- loop_filter_level
- loop_filter_sharpness
手动设置环路滤波器参数。
支持 B 帧,但输出流始终为编码顺序而非显示顺序。 如果启用了 B 帧,可能需要使用 vp9_raw_reorder 比特流过滤器来修改输出流,以按正确的顺序显示帧。
仅生成普通帧 - 可能需要 vp9_superframe 比特流过滤器来生成可用于所有解码器的流。
16.29 vbn
Vizrt 二进制图像编码器。
此格式由广播供应商 Vizrt 用于快速纹理流传输。 不支持该格式的高级功能,如纹理数据的 LZW 压缩或 mipmap 的生成。
16.29.1 选项
- 格式 string
设置 VBN 文件使用的纹理压缩。 可以是 dxt1、dxt5 或 raw。 默认值为 dxt5。
16.30 vc2
SMPTE VC-2 (以前称为 BBC Dirac Pro)。 此编解码器主要面向专业广播,但由于它支持 8(有限范围或全范围)、10 或 12 位的 yuv420、yuv422 和 yuv444,因此它适合需要低开销和低压缩的其他任务(如屏幕录制)。
16.30.1 选项
- b
设置目标视频比特率。 通常约为未压缩视频比特率的 1:6(例如,对于 1920x1080 50fps yuv422p10,约为 400Mbps)。 更高的值(接近未压缩比特率)将启用无损压缩模式。
- field_order
设置后启用场编码(例如,对于隔行扫描输入,设置为 tt - 顶场优先)。 应该会通过拆分场并分别编码每个场来提高隔行扫描内容的压缩率。
- wavelet_depth
设置要应用的小波变换的总量,介于 1 到 5 之间(默认值)。 较低的值会降低压缩率和质量。 功能较弱的解码器可能无法处理 wavelet_depth 大于 3 的值。
- wavelet_type
设置变换类型。 目前仅实现了 5_3 (LeGall) 和 9_7 (Deslauriers-Dubuc),其中 9_7 具有更好的压缩率,因此是默认值。
- slice_width
- slice_height
设置每个切片的切片大小。 较大的值会带来更好的压缩率。 为了与其他更有限的解码器兼容,请使用 32 的 slice_width 和 8 的 slice_height。
- tolerance
设置速率控制系统在百分比中的下冲容差。 这是为了防止运行代价高昂的搜索。
- qm
设置默认使用的量化矩阵预设或 wavelet_depth 设置为 5 时使用的量化矩阵预设
- - default 使用规范中的默认量化矩阵,并扩展了第五级的值。 这在保持细节和省略伪影之间提供了良好的平衡。
- - flat 使用完全清零的量化矩阵。 这会提高 PSNR,但可能会降低感知。 在虚假基准测试中使用。
- - color 降低细节,但尝试在极低比特率下保留颜色。
17 字幕编码器
17.1 dvdsub
此编解码器对 DVD 中使用的位图字幕格式进行编码。 通常,它们存储在 VOBSUB 文件对 (*.idx + *.sub) 中,并且也可以在 Matroska 文件中使用。
17.1.1 选项
- palette
指定位图使用的全局调色板。
此选项的格式是一个字符串,包含 16 个 24 位十六进制数字(不带 0x 前缀),用逗号分隔,例如
0d00ee, ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1, 7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b
。- even_rows_fix
设置为 1 时,启用一个变通方法,使所有字幕中的像素行数均为偶数。 这修复了某些播放器在行数为奇数时会截断底部行的问题。 如果需要,此变通方法只会添加一个完全透明的行。 开销较低,通常平均每个字幕一个字节。
默认情况下,此变通方法处于禁用状态。
18 比特流过滤器
配置 FFmpeg 构建时,默认情况下会启用所有支持的比特流过滤器。 可以使用配置选项 --list-bsfs
列出所有可用的过滤器。
可以使用配置选项 --disable-bsfs
禁用所有比特流过滤器,并使用选项 --enable-bsf=BSF
选择性地启用任何比特流过滤器,或者可以使用选项 --disable-bsf=BSF
禁用特定的比特流过滤器。
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”
在每个尚无 TD 的 TU 的开头插入一个 TD。
- “remove”
从每个具有 TD 的 TU 的开头删除 TD。
- color_primaries
- transfer_characteristics
- matrix_coefficients
设置流中的颜色描述字段(请参阅 AV1 第 6.4.2 节)。
- color_range
设置流中的颜色范围(请参阅 AV1 第 6.4.2 节;请注意,对于使用 BT.709 原色、sRGB 传递特性和标识(RGB)矩阵系数的流,无法设置此值)。
- ‘tv’
有限范围。
- ‘pc’
全范围。
- chroma_sample_position
设置流中的色度采样位置(请参阅 AV1 第 6.4.2 节)。 只能为 4:2:0 流设置此值。
- “vertical”
左侧位置(与 MPEG-2 和 H.264 中的默认值匹配)。
- “colocated”
左上角位置。
- tick_rate
在序列标头的定时信息中设置滴答率(time_scale / num_units_in_display_tick)。
- num_ticks_per_picture
设置每个图片中的滴答数,以指示流具有固定的帧速率。 如果未同时设置 tick_rate,则忽略此设置。
- delete_padding
删除填充 OBU。
18.3 chomp
删除数据包末尾的零填充。
18.4 dca_core
从 DCA/DTS 流中提取核心,删除扩展,如 DTS-HD。
18.5 dovi_rpu
操作 HEVC/AV1 比特流中的杜比视界元数据,可以选择启用元数据压缩。
- strip
如果启用,则从流中删除所有杜比视界元数据(配置记录 + RPU 数据块)。
- compression
要启用的压缩级别。
- ‘none’
无元数据压缩。
- ‘limited’
有限元数据压缩方案。 应该与大多数设备兼容。 这是默认设置。
- “extended”
扩展的元数据压缩。 设备不需要支持此功能。 请注意,此级别在 libavcodec 中目前的行为与“limited”相同。
18.6 dump_extra
将附加数据添加到已过滤数据包的开头,除非所述数据包已经恰好以打算添加的附加数据开头。
- freq
附加参数指定应筛选哪些数据包。它接受以下值:
- ‘k’
- ‘keyframe’
将额外数据添加到所有关键帧数据包
- ‘e’
- ‘all’
将额外数据添加到所有数据包
如果未指定,则默认为‘k’。
例如,以下 ffmpeg
命令强制在 libx264
编码器生成的 H.264 数据包中使用全局头(从而禁用单个数据包头),但通过将存储在额外数据中的头添加到关键帧数据包来纠正它们
ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
18.7 dv_error_marker
DV 中标记为损坏的块将替换为指定颜色的块。
- 颜色
用于替换损坏块的颜色
- sta
一个 16 位掩码,指定 16 个可能的错误状态值中哪些值应替换为彩色块。0xFFFE 是默认值,它会替换所有非 0 的错误状态值。
- ‘ok’
无错误,无隐藏
- ‘err’
错误,无隐藏
- ‘res’
保留
- ‘notok’
错误或隐藏
- ‘notres’
未保留
- ‘Aa, Ba, Ca, Ab, Bb, Cb, A, B, C, a, b, erri, erru’
特定的错误状态代码
请参阅 http://web.archive.org/web/20060927044735/http://www.smpte.org/smpte_store/standards/pdf/s314m.pdf 的第 44-46 页或第 5.5 节
18.8 eac3_core
从 E-AC-3 流中提取核心,删除额外的通道。
18.9 extract_extradata
提取带内额外数据。
某些编解码器允许将长期头信息(例如,MPEG-2 序列头或 H.264/HEVC (VPS/)SPS/PPS)以“带内”(即,作为包含编码帧的比特流的一部分)或“带外”(例如,在容器级别)传输。在 FFmpeg 术语中,后一种形式称为“额外数据”。
此比特流过滤器检测带内头信息,并使其可用作额外数据。
- remove
启用此选项后,长期头信息将在提取后从比特流中删除。
18.10 filter_units
从流中删除给定集合中或不在给定集合中的单元。
- pass_types
要传递的单元类型或单元类型范围列表,同时删除所有其他单元类型。这被指定为用“|”分隔的单元类型值或带有“-”的值范围的列表。
- remove_types
与 pass_types 相同,只不过删除给定集合中的单元,并传递所有其他单元。
pass_types 和 remove_types 使用的类型对应于 H.264、HEVC 和 H.266 中的 NAL 单元类型 (nal_unit_type)(请参阅 H.264 和 HEVC 规范中的表 7-1 或 H.266 规范中的表 5),对应于 JPEG 的标记值(没有 0xFF 前缀),以及对应于 MPEG-2 的起始代码(不带起始代码前缀,即 0x000001 之后的字节)。对于 VP8 和 VP9,每个单元的类型都为零。
此转换不会更改额外数据,但请注意,如果流包含内联参数集,则如果删除它们,输出可能不可用。
例如,要从 H.264 流中删除所有非 VCL NAL 单元
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=pass_types=1-5' OUTPUT
要从 H.265 流中删除所有 AUD、SEI 和填充
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=35|38-40' OUTPUT
要从 MPEG-2 流中删除所有用户数据,包括隐藏式字幕
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=178' OUTPUT
要从 H264 流中删除所有 SEI,包括隐藏式字幕
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=6' OUTPUT
要从 HEVC 流中删除所有前缀和后缀 SEI,包括隐藏式字幕和动态 HDR
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=39|40' OUTPUT
18.11 hapqa_extract
为了创建 HAPQ 或 HAPAlphaOnly 文件,在不重新压缩的情况下,从 HAPQA 文件中提取 Rgb 或 Alpha 部分。
- texture
指定要保留的纹理。
- 颜色
- alpha
将 HAPQA 转换为 HAPQ
ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=color -tag:v HapY -metadata:s:v:0 encoder="HAPQ" hapq_file.mov
将 HAPQA 转换为 HAPAlphaOnly
ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=alpha -tag:v HapA -metadata:s:v:0 encoder="HAPAlpha Only" hapalphaonly_file.mov
18.12 h264_metadata
修改嵌入在 H.264 流中的元数据。
- aud
在流的所有访问单元中插入或删除 AUD NAL 单元。
- ‘pass’
- “insert”
- “remove”
默认值为 pass。
- sample_aspect_ratio
在 VUI 参数中设置流的样本纵横比。请参阅 H.264 表 E-1。
- overscan_appropriate_flag
设置该流是否适合使用过扫描显示(请参阅 H.264 第 E.2.1 节)。
- video_format
- video_full_range_flag
在流中设置视频格式(请参阅 H.264 第 E.2.1 节和表 E-2)。
- colour_primaries
- transfer_characteristics
- matrix_coefficients
在流中设置颜色描述(请参阅 H.264 第 E.2.1 节和表 E-3、E-4 和 E-5)。
- chroma_sample_loc_type
在流中设置色度采样位置(请参阅 H.264 第 E.2.1 节和图 E-1)。
- tick_rate
在 VUI 参数中设置刻度率(time_scale / num_units_in_tick)。这是流中可表示的最小时间单位,在许多情况下,它表示流的场频(帧频的两倍)。
- fixed_frame_rate_flag
设置流是否具有固定的帧率 - 通常这表示帧率正好是刻度率的一半,但确切含义取决于隔行扫描和图像结构(请参阅 H.264 第 E.2.1 节和表 E-6)。
- zero_new_constraint_set_flags
将 SPS 中的 constraint_set4_flag 和 constraint_set5_flag 置零。这些位在 H.264 规范的先前版本中是保留的,因此某些硬件解码器要求这些位为零。将此值置零的结果仍然是有效的比特流。
- crop_left
- crop_right
- crop_top
- crop_bottom
在 SPS 中设置帧裁剪偏移量。如果流已裁剪,这些值将替换当前值。
这些字段以像素为单位设置。请注意,如果对色度进行子采样或流是隔行扫描的,则某些大小可能无法表示(请参阅 H.264 第 7.4.2.1.1 节)。
- sei_user_data
插入一个字符串作为 SEI 未注册用户数据。参数必须是 UUID+string 的形式,其中 UUID 是十六进制数字(可能用连字符分隔),并且字符串可以是任何内容。
例如,‘086f3693-b7b3-4f2c-9653-21492feee5b8+hello’ 将插入与给定 UUID 关联的字符串“hello”。
- delete_filler
删除填充 NAL 单元和填充 SEI 消息。
- display_orientation
插入、提取或删除显示方向 SEI 消息。有关语法和语义,请参阅 H.264 第 D.1.27 和 D.2.27 节。
- ‘pass’
- “insert”
- “remove”
- ‘extract’
默认值为 pass。
插入模式与
rotate
和flip
选项结合使用。在插入或删除模式下,将删除任何预先存在的显示方向消息。提取模式将显示矩阵作为侧数据附加到数据包。- rotate
在显示方向 SEI 中设置旋转(逆时针角度,单位为度)。范围为 -360 到 +360。默认值为 NaN。
- flip
在显示方向 SEI 中设置翻转。
- ‘horizontal’
- “vertical”
默认值未设置。
- level
在 SPS 中设置级别。请参阅 H.264 第 A.3 节和表 A-1 到 A-5。
参数必须是级别的名称(例如,‘4.2’)、level_idc 值(例如,‘42’)或特殊名称 ‘auto’,表示过滤器应尝试从输入流属性猜测级别。
18.13 h264_mp4toannexb
将 H.264 比特流从长度前缀模式转换为起始代码前缀模式(如 ITU-T H.264 规范的附件 B 中定义)。
一些流媒体格式需要此功能,通常是 MPEG-2 传输流格式 (复用器 mpegts
)。
例如,要使用 ffmpeg
将包含 H.264 流的 MP4 文件重新复用为 mpegts 格式,可以使用以下命令:
ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
请注意,对于 MPEG-TS (复用器 mpegts
) 和原始 H.264 (复用器 h264
) 输出格式,此滤镜会自动插入。
18.14 h264_redundant_pps
此功能对某些包含冗余 PPS 的蓝光 BDMV H264 流应用特定的修复。这些 PPS 修改了流的不相关参数,导致需要正确 extradata 的其他转换出现混淆。
在这些受影响的流上使用的编码器会在整个流中添加额外的 PPS,从而改变初始 QP 以及是否启用了加权预测。这会导致在将流复制到全局头容器后出现问题,因为起始 PPS 不适用于流的其余部分。例如,一个副作用是,在出现新的 PPS 之前,搜索将返回乱码输出。
此 BSF 会删除额外的 PPS,并重写切片头,以便流在全局头中使用单个前导 PPS,从而解决此问题。
18.15 hevc_metadata
修改嵌入在 HEVC 流中的元数据。
- aud
在流的所有访问单元中插入或删除 AUD NAL 单元。
- “insert”
- “remove”
- sample_aspect_ratio
在 VUI 参数中设置流中的采样纵横比。
- video_format
- video_full_range_flag
设置流中的视频格式(请参阅 H.265 第 E.3.1 节和表 E.2)。
- colour_primaries
- transfer_characteristics
- matrix_coefficients
设置流中的颜色描述(请参阅 H.265 第 E.3.1 节和表 E.3、E.4 和 E.5)。
- chroma_sample_loc_type
设置流中的色度采样位置(请参阅 H.265 第 E.3.1 节和图 E.1)。
- tick_rate
在 VPS 和 VUI 参数中设置节拍率 (time_scale / num_units_in_tick)。与 num_ticks_poc_diff_one 结合使用,可以在流中设置恒定帧率。请注意,当流位于容器中时,它很可能会被容器参数覆盖。
- num_ticks_poc_diff_one
在 VPS 和 VUI 中设置 poc_proportional_to_timing_flag,并使用此值设置 num_ticks_poc_diff_one_minus1(请参阅 H.265 第 7.4.3.1 节和 E.3.1 节)。如果未同时设置 tick_rate,则忽略此项。
- crop_left
- crop_right
- crop_top
- crop_bottom
在 SPS 中设置一致性窗口裁剪偏移量。如果流已被裁剪,这些值将替换当前值。
这些字段以像素为单位设置。请注意,如果色度被二次采样(H.265 第 7.4.3.2.1 节),则某些大小可能无法表示。
- 宽度
- 高度
设置裁剪后的宽度和高度。
- level
在 VPS 和 SPS 中设置级别。请参阅 H.265 第 A.4 节以及表 A.6 和 A.7。
该参数必须是级别的名称(例如,“5.1”),general_level_idc 值(例如,级别 5.1 的“153”),或特殊名称“auto”,表示滤镜应尝试根据输入流属性猜测级别。
18.16 hevc_mp4toannexb
将 HEVC/H.265 比特流从长度前缀模式转换为起始码前缀模式(如 ITU-T H.265 规范的附件 B 中定义)。
一些流媒体格式需要此功能,通常是 MPEG-2 传输流格式 (复用器 mpegts
)。
例如,要使用 ffmpeg
将包含 HEVC 流的 MP4 文件重新复用为 mpegts 格式,可以使用以下命令:
ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts
请注意,对于 MPEG-TS (复用器 mpegts
) 和原始 HEVC/H.265 (复用器 h265
或 hevc
) 输出格式,此滤镜会自动插入。
18.17 imxdump
修改比特流以适应 MOV 并被 Final Cut Pro 解码器使用。此滤镜仅适用于 mpeg2video 编解码器,对于具有适当 -tag:v 的 Final Cut Pro 7 及更高版本,可能不需要此滤镜。
例如,要将 30 MB/秒的 NTSC IMX 重新复用为 MOV:
ffmpeg -i input.mxf -c copy -bsf:v imxdump -tag:v mx3n output.mov
18.18 mjpeg2jpeg
将 MJPEG/AVI1 数据包转换为完整的 JPEG/JFIF 数据包。
MJPEG 是一种视频编解码器,其中每个视频帧本质上都是一个 JPEG 图像。可以无损地提取各个帧,例如通过:
ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
不幸的是,这些块是不完整的 JPEG 图像,因为它们缺少解码所需的 DHT 段。引用 http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml:
Avery Lee 在 2001 年 rec.video.desktop 新闻组中写道,“MJPEG,或者至少是具有 MJPG fourcc 的 AVI 中的 MJPEG,是具有固定(且省略)的 Huffman 表的受限 JPEG。JPEG 必须是 YCbCr 色彩空间,必须是 4:2:2,并且必须使用基本 Huffman 编码,而不是算术或渐进编码……你确实可以提取 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.19 mjpegadump
向比特流添加 MJPEG A 头,以允许 Quicktime 进行解码。
18.20 mov2textsub
从 MOV 字幕中提取可表示的文本文件,并从每个字幕数据包中剥离元数据头。
另请参阅 text2movsub 滤镜。
18.21 mpeg2_metadata
修改嵌入在 MPEG-2 流中的元数据。
- display_aspect_ratio
设置流中的显示纵横比。
支持以下固定值:
- 4/3
- 16/9
- 221/100
任何其他值都将导致改为发出方形像素信号(请参阅 H.262 第 6.3.3 节和表 6-3)。
- frame_rate
设置流中的帧率。这是从已知值的表格与小的乘数和除数组合构建的 - 如果提供的值不能精确表示,则将使用最接近的可表示值(请参阅 H.262 第 6.3.3 节和表 6-4)。
- video_format
设置流中的视频格式(请参阅 H.262 第 6.3.6 节和表 6-6)。
- colour_primaries
- transfer_characteristics
- matrix_coefficients
设置流中的颜色描述(请参阅 H.262 第 6.3.6 节以及表 6-7、6-8 和 6-9)。
18.22 mpeg4_unpack_bframes
解包 DivX 样式的打包 B 帧。
DivX 样式的打包 B 帧不是有效的 MPEG-4,只是为了解决损坏的 Windows 视频子系统而采取的变通方案。它们占用更多空间,可能导致轻微的 AV 同步问题,需要更多的 CPU 功耗来解码(除非播放器有一些解码后的图片队列来补偿每个数据包 2,0,2,0 帧的样式),并且如果复制到 mp4 或 mpeg-ps/ts 等标准容器中,则会引起麻烦,因为 MPEG-4 解码器可能无法解码它们,因为它们不是有效的 MPEG-4。
例如,要使用 ffmpeg
修复包含带有 DivX 样式打包 B 帧的 MPEG-4 流的 AVI 文件,可以使用以下命令:
ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi
18.23 noise
损坏数据包的内容,或者直接丢弃它们,而不会损坏容器。可用于模糊测试或测试错误恢复/隐藏。
参数
- amount
接受一个表达式,其每次数据包的评估确定该数据包中的字节将被修改的频率。小于 0 的值将导致可变频率。默认值为 0,表示不修改。但是,如果未指定 amount 或 drop,则 amount 将设置为 -1。有关接受的变量,请参见下文。
- drop
接受一个表达式,该表达式在每次数据包评估时确定是否丢弃该数据包。评估为正值会导致数据包被丢弃。评估为负值会导致数据包被丢弃的几率发生变化,大致与值的幅度成反比。默认值为 0,表示不丢弃。有关接受的变量,请参见下文。
- dropamount
接受一个非负整数,该整数会为丢弃操作分配一个变量概率,该概率与该值大致成反比。默认值为 0,表示不丢弃任何数据包。保留此选项是为了向后兼容,它等效于将 drop 设置为具有相同大小的负值,即
dropamount=4
与drop=-4
相同。如果还指定了 drop,则忽略此选项。
amount
和 drop
都接受包含以下变量的表达式
- “n”
数据包的索引,从零开始。
- ‘tb’
数据包时间戳的时间基。
- “pts”
数据包显示时间戳。
- “dts”
数据包解码时间戳。
- “nopts”
表示 AV_NOPTS_VALUE 的常量。
- “startpts”
流中看到的第一个非 AV_NOPTS_VALUE 的 PTS。
- “startdts”
流中看到的第一个非 AV_NOPTS_VALUE 的 DTS。
- “duration”
- “d”
数据包持续时间,以时间基单位表示。
- “pos”
数据包在输入中的位置;当未知或未设置时,可能为 -1。
- “size”
数据包大小,以字节为单位。
- “key”
数据包是否标记为关键帧。
- “state”
一个伪随机整数,主要从数据包有效负载的内容派生而来。
18.23.1 示例
对每个字节应用修改,但不丢弃任何数据包。
ffmpeg -i INPUT -c copy -bsf noise=1 output.mkv
丢弃时间戳 30 秒后未标记为关键帧的每个视频数据包,但不会修改任何剩余的数据包。
ffmpeg -i INPUT -c copy -bsf:v noise=drop='gt(t\,30)*not(key)' output.mkv
每 10 秒丢弃一秒钟的音频,并在其余部分添加一些随机噪声。
ffmpeg -i INPUT -c copy -bsf:a noise=amount=-1:drop='between(mod(t\,10)\,9\,10)' output.mkv
18.24 null
此比特流过滤器将数据包原封不动地传递。
18.25 pcm_rechunk
将 PCM 音频重新打包为每个数据包固定数量的样本或每秒固定数据包速率。这类似于 (ffmpeg-filters)asetnsamples 音频过滤器,但它适用于音频数据包而不是音频帧。
- nb_out_samples,n
设置每个输出音频数据包的样本数。该数字表示每个声道的样本数。默认值为 1024。
- pad,p
如果设置为 1,则过滤器将用静音填充最后一个音频数据包,使其包含与前一个数据包相同数量的样本(或大致相同数量的样本,请参阅 frame_rate)。默认值为 1。
- frame_rate,r
此选项使过滤器每秒输出固定数量的数据包,而不是每个数据包固定数量的样本。如果音频采样率不能被帧速率整除,则样本数将不是恒定的,而是会略有变化,以便每个数据包尽可能靠近帧边界开始。使用此选项优先于 nb_out_samples。
您可以使用 frame_rate 选项为 NTSC 帧速率生成众所周知的 48kHz 音频的 1602-1601-1602-1601-1602 模式。
ffmpeg -f lavfi -i sine=r=48000:d=1 -c pcm_s16le -bsf pcm_rechunk=r=30000/1001 -f framecrc -
18.26 pgs_frame_merge
将以“显示集结束”段结尾的 PGS 字幕段序列合并到单个数据包中。
某些支持 PGS 字幕的容器(复用器 matroska
)需要这样做。
18.27 prores_metadata
修改嵌入在 prores 流中的颜色属性元数据。
- color_primaries
设置颜色原色。可用值为
- ‘auto’
保持相同的颜色原色属性(默认值)。
- ‘unknown’
- ‘bt709’
- ‘bt470bg’
BT601 625
- ‘smpte170m’
BT601 525
- ‘bt2020’
- ‘smpte431’
DCI P3
- ‘smpte432’
P3 D65
- transfer_characteristics
设置颜色传递。可用值为
- ‘auto’
保持相同的传输特性属性(默认值)。
- ‘unknown’
- ‘bt709’
BT 601、BT 709、BT 2020
- ‘smpte2084’
SMPTE ST 2084
- ‘arib-std-b67’
ARIB STD-B67
- matrix_coefficients
设置矩阵系数。可用值为
- ‘auto’
保持相同的色彩空间属性(默认值)。
- ‘unknown’
- ‘bt709’
- ‘smpte170m’
BT 601
- ‘bt2020nc’
为文件的每个帧设置 Rec709 色彩空间
ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt709:color_trc=bt709:colorspace=bt709 output.mov
为文件的每个帧设置混合对数伽马参数
ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt2020:color_trc=arib-std-b67:colorspace=bt2020nc output.mov
18.28 remove_extra
从数据包中删除额外数据。
它接受以下参数
- freq
设置要从中删除额外数据的帧类型。
- ‘k’
仅从非关键帧中删除额外数据。
- ‘keyframe’
仅从关键帧中删除额外数据。
- “e, all”
从所有帧中删除额外数据。
18.29 setts
在数据包中设置 PTS 和 DTS。
它接受以下参数
- ts
- pts
- dts
设置 PTS、DTS 或两者的表达式。
- duration
设置持续时间的表达式。
- time_base
设置输出时间基。
这些表达式通过 eval API 进行评估,并且可以包含以下常量
- N
输入数据包的计数。从 0 开始。
- TS
在
ts
或dts
选项的情况下,输入的解复用时间戳;在pts
选项的情况下,为演示时间戳。- POS
数据包在文件中的原始位置,如果当前数据包未定义,则为未定义
- DTS
输入的解复用时间戳。
- PTS
输入的演示时间戳。
- DURATION
输入的持续时间。
- STARTDTS
第一个数据包的 DTS。
- STARTPTS
第一个数据包的 PTS。
- PREV_INDTS
上一个输入 DTS。
- PREV_INPTS
上一个输入 PTS。
- PREV_INDURATION
上一个输入持续时间。
- PREV_OUTDTS
上一个输出 DTS。
- PREV_OUTPTS
上一个输出 PTS。
- PREV_OUTDURATION
上一个输出持续时间。
- NEXT_DTS
下一个输入 DTS。
- NEXT_PTS
下一个输入 PTS。
- NEXT_DURATION
下一个输入持续时间。
- TB
流数据包所属的时间基。
- TB_OUT
输出时间基。
- SR
流数据包所属的采样率。
- NOPTS
AV_NOPTS_VALUE 常量。
例如,要将 PTS 设置为等于 DTS(如果涉及 B 帧,则不建议这样做)
ffmpeg -i INPUT -c:a copy -bsf:a setts=pts=DTS out.mkv
18.30 showinfo
记录基本数据包信息。主要用于测试、调试和开发。
18.31 text2movsub
将文本字幕转换为带有元数据标头的 MOV 字幕(由 mov_text
编解码器使用)。
另请参阅 mov2textsub 过滤器。
18.32 trace_headers
记录包含编码流标头中所有语法元素的跟踪输出(所有内容都高于单个编码块的级别)。这对于调试低级别流问题很有用。
支持 AV1、H.264、H.265、(M)JPEG、MPEG-2 和 VP9,但根据构建版本,可能只有这些的子集可用。
18.33 truehd_core
从 TrueHD 流中提取核心,丢弃 ATMOS 数据。
18.34 vp9_metadata
修改嵌入在 VP9 流中的元数据。
- color_space
在帧标头中设置颜色空间值。请注意,任何设置为 RGB 的帧都将隐式设置为 PC 范围,并且 RGB 与配置文件 0 和 2 不兼容。
- ‘unknown’
- “bt601”
- ‘bt709’
- “smpte170”
- “smpte240”
- ‘bt2020’
- ‘rgb’
- color_range
在帧标头中设置颜色范围值。请注意,颜色空间施加的任何值都将优先于此值。
- ‘tv’
- ‘pc’
18.35 vp9_superframe
将 VP9 不可见(alt-ref)帧合并回 VP9 超级帧。这修复了分割/分段 VP9 流的合并,其中 alt-ref 帧从其可见的对应帧中分离出来。
18.36 vp9_superframe_split
将 VP9 超级帧分割为单个帧。
18.37 vp9_raw_reorder
给定一个具有正确时间戳但可能乱序的 VP9 流,插入额外的显示现有帧数据包以纠正顺序。
19 格式选项
libavformat 库提供了一些通用的全局选项,这些选项可以在所有复用器和解复用器上设置。此外,每个复用器或解复用器可能支持所谓的私有选项,这些选项是该组件特有的。
可以通过在 FFmpeg 工具中指定 -option value 来设置选项,或者通过在 AVFormatContext
选项中显式设置该值或使用 libavutil/opt.h API 进行编程使用。
支持的选项列表如下
- avioflags flags(输入/输出)
可能的值:
- “direct”
减少缓冲。
- probesize integer(输入)
设置探测大小(以字节为单位),即用于分析以获取流信息的数据大小。较高的值将能够在流中分散更多信息的情况下检测到更多信息,但会增加延迟。必须是不小于 32 的整数。默认值为 5000000。
- max_probe_packets integer(输入)
设置探测编解码器时缓冲的最大数据包数量。默认值为 2500 个数据包。
- packetsize integer (输出)
设置数据包大小。
- fflags flags
设置格式标志。某些标志仅在有限的几种格式中实现。
输入文件的可能值
- ‘discardcorrupt’
丢弃损坏的数据包。
- ‘fastseek’
为某些格式启用快速但不精确的搜索。
- ‘genpts’
如果存在 DTS,则生成缺失的 PTS。
- ‘igndts’
如果也设置了 PTS,则忽略 DTS。如果设置了 PTS,则 DTS 值将设置为 NOPTS。当设置了
nofillin
标志时,将忽略此项。- ‘ignidx’
忽略索引。
- ‘nobuffer’
减少初始输入流分析期间因缓冲而引入的延迟。
- ‘nofillin’
不要填充可以精确计算的数据包字段中的缺失值。
- ‘noparse’
禁用 AVParsers,这也需要
+nofillin
。- ‘sortdts’
尝试按 DTS 交错输出数据包。目前,仅适用于带有索引的 AVI。
输出文件的可能值
- ‘autobsf’
根据输出格式的需要自动应用比特流过滤器。默认启用。
- ‘bitexact’
仅写入平台、构建和时间无关的数据。这确保文件和数据校验和在平台之间是可重现且匹配的。它的主要用途是用于回归测试。
- ‘flush_packets’
立即写出数据包。
- ‘shortest’
在最短的流结束时停止复用。可能需要增加 max_interleave_delta 以避免在 EOF 之前刷新较长的流。
- seek2any integer (输入)
如果设置为 1,则允许在解复用器级别搜索非关键帧(如果支持)。默认为 0。
- analyzeduration integer (输入)
指定分析多少微秒来探测输入。较高的值将能够检测到更准确的信息,但会增加延迟。它默认为 5,000,000 微秒 = 5 秒。
- cryptokey 十六进制字符串 (输入)
设置解密密钥。
- indexmem integer (输入)
设置用于时间戳索引的最大内存(每个流)。
- rtbufsize integer (输入)
设置用于缓冲实时帧的最大内存。
- fdebug flags (输入/输出)
打印特定的调试信息。
可能的值:
- ‘ts’
- max_delay integer (输入/输出)
设置最大复用或解复用延迟(以微秒为单位)。
- fpsprobesize integer (输入)
设置用于探测 fps 的帧数。
- audio_preload integer (输出)
设置应提前交错音频数据包的微秒数。
- chunk_duration integer (输出)
设置每个块的微秒数。
- chunk_size integer (输出)
设置每个块的大小(以字节为单位)。
- err_detect, f_err_detect flags (输入)
设置错误检测标志。
f_err_detect
已弃用,应仅通过ffmpeg
工具使用。可能的值:
- ‘crccheck’
验证嵌入式 CRC。
- ‘bitstream’
检测比特流规范偏差。
- ‘buffer’
检测不正确的比特流长度。
- ‘explode’
在检测到轻微错误时中止解码。
- ‘careful’
将违反规范且在实际环境中未见过的事项视为错误。
- ‘compliant’
将所有规范不符视为错误。
- ‘aggressive’
将健全编码器不应执行的操作视为错误。
- max_interleave_delta integer (输出)
设置交错的最大缓冲持续时间。持续时间以微秒为单位表示,默认值为 10000000(10 秒)。
为了确保所有流都正确交错,libavformat 将等待直到每个流都至少有一个数据包,然后再将任何数据包实际写入输出文件。当某些流“稀疏”(即,连续数据包之间存在较大间隙)时,这可能会导致过度缓冲。
此字段指定复用队列中第一个和最后一个数据包的时间戳之间的最大差异,如果超出此差异,libavformat 将输出一个数据包,无论它是否已将所有流的数据包排队。
如果设置为 0,则 libavformat 将继续缓冲数据包,直到每个流都有一个数据包,而不管缓冲数据包之间的最大时间戳差异如何。
- use_wallclock_as_timestamps integer (输入)
如果设置为 1,则将墙上时钟用作时间戳。默认为 0。
- avoid_negative_ts integer (输出)
-
可能的值:
- ‘make_non_negative’
移动时间戳以使其变为非负数。另请注意,这仅影响前导负时间戳,而不影响非单调负时间戳。
- ‘make_zero’
移动时间戳,使第一个时间戳为 0。
- ‘auto (default)’
在目标格式需要时启用移动。
- ‘disabled’
禁用时间戳的移动。
启用移动后,所有输出时间戳都将移动相同的量。与不移动相比,音频、视频和字幕的同步和相对时间戳差异将得以保留。
- skip_initial_bytes integer (输入)
如果设置为 1,则设置在读取标头和帧之前要跳过的字节数。默认为 0。
- correct_ts_overflow integer (输入)
如果设置为 1,则更正单个时间戳溢出。默认为 1。
- flush_packets integer (输出)
在每个数据包之后刷新底层 I/O 流。默认为 -1(自动),这意味着底层协议将决定,1 启用它,并且具有降低延迟的效果,0 禁用它,并且在某些情况下可能会提高 IO 吞吐量。
- output_ts_offset offset (输出)
设置输出时间偏移量。
offset 必须是时间持续时间规范,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分。
复用器将偏移量添加到输出时间戳。
指定正偏移量意味着相应的流将延迟 offset 中指定的时间长度。默认值为
0
(表示不应用偏移量)。- format_whitelist list (输入)
允许的解复用器的“,”分隔列表。默认情况下,允许所有解复用器。
- dump_separator 字符串 (输入)
用于分隔在命令行上打印的关于流参数的字段的分隔符。例如,用换行符和缩进分隔字段
ffprobe -dump_separator " " -i ~/videos/matrixbench_mpeg2.mpg
- max_streams integer (输入)
指定最大流数。这可用于拒绝由于大量流而需要过多资源的文件。
- skip_estimate_duration_from_pts bool (输入)
如果需要为文件末尾的 PTS 进行额外的探测,则跳过对输入持续时间的估计。目前,适用于 MPEG-PS 和 MPEG-TS。
- duration_probesize integer (输入)
设置探测大小,以字节为单位,用于在实际需要对文件末尾的 PTS 进行额外探测时(目前:MPEG-PS 和 MPEG-TS)进行输入时长估计。它旨在帮助那些希望更好地探测时长或间接因为使用 concat 解复用器等的用户。典型的用例是具有高码率、高视频缓冲并且结尾清理视频和音频的 PTS 相似的 MPEG-TS CBR:在这种情况下,最后一个视频包和最后一个音频包之间的大物理间隙使得需要读取许多字节才能获得视频流时长。另一个用例是默认的探测行为仅到达单个视频帧,由于帧重排序,该帧不是流的最后一个帧,因此时长不准确。设置此选项会对性能产生影响,即使对于小文件也是如此,因为探测大小是固定的。默认行为是一种通用的折衷方案,具有很强的自适应性,但探测大小不会被扩展到不惜一切代价获取流时长。必须是大于等于 1 的整数,或 0 表示默认行为。
- strict, f_strict 整数 (输入/输出)
指定严格遵循标准的程度。
f_strict
已弃用,应仅通过ffmpeg
工具使用。可能的值:
- ‘very’
严格符合规范或参考软件的旧版本。
- ‘strict’
严格符合规范中的所有内容,无论后果如何。
- ‘normal’
- ‘unofficial’
允许非官方扩展。
- ‘experimental’
允许非标准化的实验性内容、实验性(未完成/正在进行/未经良好测试)的解码器和编码器。注意:实验性解码器可能存在安全风险,请勿将其用于解码不受信任的输入。
19.1 格式流指定符
格式流指定符允许选择一个或多个匹配特定属性的流。
流指定符的确切语义由 libavformat/avformat.h
头文件中声明的 avformat_match_stream_specifier()
函数定义,并在 ffmpeg(1) 手册的(ffmpeg)流指定符部分中进行了文档说明。
20 解复用器
解复用器是 FFmpeg 中配置的元素,可以从特定类型的文件中读取多媒体流。
当您配置 FFmpeg 构建时,默认情况下会启用所有受支持的解复用器。您可以使用配置选项 --list-demuxers
列出所有可用的解复用器。
您可以使用配置选项 --disable-demuxers
禁用所有解复用器,并使用选项 --enable-demuxer=DEMUXER
选择性地启用单个解复用器,或使用选项 --disable-demuxer=DEMUXER
禁用它。
ff* 工具的选项 -demuxers
将显示已启用的解复用器列表。使用 -formats
查看已启用的解复用器和复用器的组合列表。
下面介绍一些当前可用的解复用器。
20.1 aa
Audible Format 2、3 和 4 解复用器。
此解复用器用于解复用 Audible Format 2、3 和 4 (.aa) 文件。
20.2 aac
原始音频数据传输流 AAC 解复用器。
此解复用器用于解复用包含单个 AAC 流以及其中的任何 ID3v1/2 或 APE 标签的 ADTS 输入。
20.3 apng
动画便携式网络图形解复用器。
此解复用器用于解复用 APNG 文件。所有头部,除了 PNG 签名,直到(但不包括)第一个 fcTL 块都作为附加数据传输。然后,帧被分割为两个 fcTL 块之间,或最后一个 fcTL 和 IEND 块之间的所有块。
- -ignore_loop 布尔值
如果设置了该选项,则忽略文件中的循环变量。默认启用。
- -max_fps 整数
最大帧率,以每秒帧数为单位。默认值 0 表示不限制。
- -default_fps 整数
文件中未指定时的默认帧率,以每秒帧数为单位(0 表示尽可能快)。默认值为 15。
20.4 asf
高级系统格式解复用器。
此解复用器用于解复用 ASF 文件和 MMS 网络流。
- -no_resync_search 布尔值
不尝试通过查找某个可选的起始码来重新同步。
20.5 concat
虚拟连接脚本解复用器。
此解复用器从文本文件中读取文件列表和其他指令,并按顺序解复用它们,就像它们的所有数据包都被复用在一起一样。
文件中的时间戳经过调整,以便第一个文件从 0 开始,并且每个下一个文件从上一个文件结束的位置开始。请注意,它是全局完成的,如果所有流的长度不完全相同,则可能会导致间隙。
所有文件必须具有相同的流(相同的编解码器、相同的时间基准等)。
每个文件的持续时间用于调整下一个文件的时间戳:如果持续时间不正确(因为它使用比特率计算,或者因为文件被截断,例如),则可能会导致伪影。可以使用 duration
指令来覆盖存储在每个文件中的持续时间。
20.5.1 语法
脚本是一个扩展 ASCII 文本文件,每行一个指令。空行、前导空格和以“#”开头的行将被忽略。识别以下指令
file 路径
要读取的文件的路径;特殊字符和空格必须使用反斜杠或单引号进行转义。
所有后续的与文件相关的指令都适用于该文件。
ffconcat 版本 1.0
标识脚本类型和版本。
为了使 FFmpeg 自动识别格式,此指令必须完全按照原样(没有额外的空格或字节顺序标记)出现在脚本的第一行。
duration 时长
文件的持续时间。此信息可以从文件中指定;如果文件中的信息不可用或不准确,则在此处指定可能更有效或更有帮助。
如果为所有文件设置了持续时间,则可以在整个连接的视频中进行搜索。
inpoint 时间戳
文件的入点。当解复用器打开文件时,它会立即搜索到指定的时间戳。进行搜索是为了使所有流都可以成功地在入点呈现。
此指令最适合帧内编解码器,因为对于非帧内编解码器,您通常会在实际的入点之前获得额外的数据包,并且解码的内容很可能也会包含入点之前的帧。
对于每个文件,文件入点之前的数据包的时间戳将小于该文件的计算开始时间戳(在第一个文件的情况下为负数),并且文件的持续时间(如果未由
duration
指令指定)将根据其指定的入点而减少。由于入点之前可能存在数据包,因此两个连接文件之间的数据包时间戳可能会重叠。
outpoint 时间戳
文件的出点。当解复用器在任何流中达到指定的解码时间戳时,它会将其视为文件结束条件,并跳过当前和所有流中所有剩余的数据包。
出点是排他的,这意味着解复用器不会输出解码时间戳大于或等于出点的数据包。
此指令最适合帧内编解码器和所有流紧密交错的格式。对于非帧内编解码器,您通常会在出点之后获得具有呈现时间戳的额外数据包,因此解码的内容很可能也会包含出点之后的帧。如果您的流不是紧密交错的,您可能不会在出点之前获得所有流的所有数据包,您可能只能解码最早的流直到出点。
文件的持续时间(如果未由
duration
指令指定)将根据其指定的出点而减少。file_packet_metadata 键=值
文件数据包的元数据。将为每个文件数据包设置指定的元数据。您可以多次指定此指令以添加多个元数据条目。此指令已弃用,请改用
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 数据包元数据值,这些值是以微秒表示的连接输出中相应文件片段的开始时间和持续时间。只有在基于连接文件已知持续时间时才会设置持续时间元数据。默认值为 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。通过设置 AVStream 上的丢弃标志,调用者可以决定实际接收哪些流。每个流都将 <Representation>
中的 id
和 bandwidth
属性镜像为名为“id”和“variant_bitrate”的元数据键。
20.6.1 选项
此解复用器接受以下选项
- cenc_decryption_key
16 字节密钥,以十六进制表示,用于解密使用 ISO 通用加密 (CENC/AES-128 CTR; ISO/IEC 23001-7) 加密的文件。
20.7 dvdvideo
DVD-Video 解复用器,由 libdvdnav 和 libdvdread 提供支持。
可以直接将 DVD 标题,特别是顺序 PGC,导入转换管道。菜单资源,例如背景视频或音频,也可以在给定菜单坐标的情况下进行解复用(尽力而为)。
接受块设备(DVD 驱动器)、ISO 文件和目录结构。在其中一个输入前面使用 -f dvdvideo
激活。
此解复用器不具有任何类型的解密代码。您需要自行处理加密的 DVD,并且不应期望获得有关此问题的支持。
底层播放由 libdvdnav 处理,结构解析由 libdvdread 处理。FFmpeg 必须构建为支持 GPL 库,以及配置开关 --enable-libdvdnav
和 --enable-libdvdread
。
您需要提供所需的“标题编号”或确切的 PGC/PG 坐标。许多开源 DVD 播放器和工具可以帮助提供此信息。如果未指定,解复用器将默认为标题 1,这适用于许多光盘。但是,由于格式的灵活性,建议手动检查。许多光盘的创作方式很奇怪或具有无效的标头。
如果输入是真正的 DVD 驱动器,请注意,有些驱动器可能会在读取光盘中的坏扇区时静默失败,而是返回随机位,这实际上是损坏的数据。这在老化或腐烂的光盘上尤其突出。需要进行第二次传递和完整性检查才能检测到损坏。这不是 FFmpeg 的问题。
20.7.1 背景
DVD-Video 不是传统意义上可直接访问的线性容器格式。相反,它允许对存储在无标头 VOB 文件中的精心复用的 MPEG-PS 流进行复杂且程序化的播放。对于最终用户,这些流简称为“标题”,但实际的逻辑播放顺序是由标题内的一个或多个“PGC”,即程序组链定义的。PGC 又由多个“PG”,即“程序”组成,这些程序是实际的视频片段(对于典型的视频功能,按顺序排列)。PGC 结构以及流布局和元数据存储在需要解析的 IFO 文件中。PGC 可以被认为是更简单的播放列表。
实际的 DVD 播放器依赖于通过菜单的用户 GUI 交互和内部 VM 来驱动解复用的方向。通常,用户会导航(通过菜单)或自动重定向到他们选择的 PGC。在此过程和后续播放过程中,DVD 播放器的内部 VM 还维护一个状态并执行指令,这些指令可以在播放期间创建跳转到不同扇区的指令。这就是为什么需要 libdvdnav 的原因,因为线性读取光盘上的 MPEG-PS 数据块(VOB)不足以在许多情况下产生正确的顺序。
还有许多其他 DVD 结构(一个很长的主题)此处将不再讨论。特别是,此解复用器处理 NAV 数据包以构建准确的计时,但不会作为流发出。有关良好的高层次理解,请参阅:https://code.videolan.org/videolan/libdvdnav/-/blob/master/doc/dvd_structures
20.7.2 选项
此解复用器接受以下选项
- title int
要播放的标题编号。如果未设置 pgc 和 pg,则必须设置。不适用于菜单。默认值为 0(自动),目前仅选择第一个可用的标题(标题 1)并通知用户有关含义。
- chapter_start int
要开始的章节或 PTT(部分标题)编号。不适用于菜单。默认值为 1。
- chapter_end int
要结束的章节或 PTT(部分标题)编号。不适用于菜单。默认值为 0,这是一个特殊值,表示在最后一个可能的章节结束。
- angle int
视频角度编号,指的是由 VOB 中交错的备用帧组成的额外视频流。不适用于菜单。默认值为 1。
- region int
用于播放的区域代码。某些光盘可能会使用此代码,以便在不同区域中以特定角度进行默认播放。如果用作输入,此选项不会影响真实 DVD 驱动器的区域代码。不适用于菜单。默认值为 0,即“世界”。
- menu bool
解复用菜单资源而不是导航标题。需要菜单的确切坐标(menu_lu、menu_vts、pgc、pg)。默认值为 false。
- menu_lu int
要解复用的菜单语言。在 DVD 中,菜单按语言分组。默认值为 1,即第一个语言单元。
- menu_vts int
菜单所在的 VTS,如果它是 VMG 菜单(根级别),则为 0。默认值为 1,即第一个 VTS 的菜单。
- pgc int
与 pg 结合使用的起始播放 PGC 条目。它是设置 title 的替代方法。目前不支持章节标记。必须为菜单显式设置。默认值为 0,从 title 的值自动解析。
- pg int
与 pgc 结合使用的起始播放 PG 条目。它是设置 title 的替代方法。目前不支持章节标记。默认值为 1,即 PGC 的第一个 PG。
- preindex bool
启用此选项可获得准确的章节(PTT)标记和持续时间测量,这需要在第二遍读取时缓慢地从 NAV 数据包中索引章节标记时间戳。对于真实的光驱来说,这是一个不理想的额外工作。建议在硬盘上存储的 DVD 结构备份中使用此选项,它会更快。与 pgc 和 pg 不兼容。默认值为 0,即 false。
- trim bool
跳过开头处的填充单元(即小于 1 秒的单元)。许多光盘在 PGC 的开头存在填充片段,这些片段通常包含用于控制真实 DVD 播放器缓冲速度的垃圾数据,没有其他材料数据值。不适用于菜单。默认值为 1,即 true。
20.7.3 示例
- 从给定的 DVD 结构打开标题 3
ffmpeg -f dvdvideo -title 3 -i <path to DVD> ...
- 从给定的 DVD 结构打开标题 1 的第 3-6 章
ffmpeg -f dvdvideo -chapter_start 3 -chapter_end 6 -title 1 -i <path to DVD> ...
- 从给定的 DVD 结构仅打开标题 1 的第 5 章
ffmpeg -f dvdvideo -chapter_start 5 -chapter_end 5 -title 1 -i <path to DVD> ...
- 从 VTS 1、PGC 1 解复用语言 1 的菜单,从 PG 1 开始
ffmpeg -f dvdvideo -menu 1 -menu_lu 1 -menu_vts 1 -pgc 1 -pg 1 -i <path to DVD> ...
20.8 ea
Electronic Arts 多媒体格式解复用器。
此格式由各种 Electronic Arts 游戏使用。
20.8.1 选项
- merge_alpha bool
-
通常,VP6 alpha 通道(如果存在)将作为辅助视频流返回,通过设置此选项,您可以使解复用器返回一个包含 alpha 通道以及普通视频的单个视频流。
20.9 imf
可互操作主格式解复用器。
此解复用器呈现 IMF 合成中找到的音频和视频流,如 SMPTE ST 2067-2 中所指定。
ffmpeg [-assetmaps <path of ASSETMAP1>,<path of ASSETMAP2>,...] -i <path of CPL> ...
如果未指定 -assetmaps
,则解复用器会在 CPL 所在的同一目录中查找名为 ASSETMAP.xml 的文件。
20.10 flv, live_flv, kux
Adobe Flash 视频格式解复用器。
此解复用器用于解复用 FLV 文件和 RTMP 网络流。对于实时网络流,如果强制使用格式,则可以使用 live_flv 选项而不是 flv 以适应时间戳不连续的情况。KUX 是 Youku 平台上使用的 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.11 gif
动画 GIF 解复用器。
它接受以下选项
- min_delay
设置帧之间最小有效延迟(以百分之一秒为单位)。范围为 0 到 6000。默认值为 2。
- max_gif_delay
设置帧之间最大有效延迟(以百分之一秒为单位)。范围为 0 到 65535。默认值为 65535(近 11 分钟),这是规范允许的最大值。
- default_delay
设置帧之间默认延迟(以百分之一秒为单位)。范围为 0 到 6000。默认值为 10。
- ignore_loop
GIF 文件可以包含循环特定次数(或无限循环)的信息。如果将 ignore_loop 设置为 1,则会忽略输入的循环设置,并且不会发生循环。如果设置为 0,则会发生循环,并会根据 GIF 循环相应的次数。默认值为 1。
例如,使用 overlay 滤镜,将一个无限循环的 GIF 覆盖在另一个视频上
ffmpeg -i input.mp4 -ignore_loop 0 -i input.gif -filter_complex overlay=shortest=1 out.mkv
请注意,在上面的示例中,overlay 滤镜使用最短选项来在最短的输入文件长度处结束输出视频,在这种情况下,最短的输入文件是 input.mp4,因为此示例中的 GIF 会无限循环。
20.12 hls
HLS 解复用器
Apple HTTP Live Streaming 解复用器。
此解复用器呈现所有变体流中的所有 AVStream。id 字段设置为比特率变体索引号。通过在 AVStream 上设置丢弃标志(在 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 刷新但没有新段时加载 m3u8 的最大次数。默认值为 1000。
- http_persistent
使用持久 HTTP 连接。仅适用于 HTTP 流。默认情况下启用。
- http_multiple
使用多个 HTTP 连接下载 HTTP 段。对于 HTTP/1.1 服务器,默认情况下启用。
- http_seekable
使用 HTTP 部分请求下载 HTTP 段。0 = 禁用,1 = 启用,-1 = 自动,默认值为自动。
- seg_format_options
使用以
:
分隔的键值对列表为媒体段的解复用器设置选项。- seg_max_retry
在出错时重新加载段的最大次数,当不希望在网络错误时跳过段时很有用。默认值为 0。
20.13 image2
图像文件解复用器。
此解复用器从由模式指定的图像文件列表读取。模式的语法和含义由选项 pattern_type 指定。
该模式可能包含一个后缀,用于自动确定文件中包含的图像格式。
序列中所有文件的大小、像素格式和图像格式必须相同。
此解复用器接受以下选项
- framerate
设置视频流的帧率。默认值为 25。
- loop
如果设置为 1,则循环输入。默认值为 0。
- pattern_type
选择用于解释提供的文件名的模式类型。
pattern_type 接受以下值之一。
- none
禁用模式匹配,因此视频将仅包含指定的图像。 如果您不想从多个图像创建序列,并且您的文件名可能包含特殊的模式字符,则应使用此选项。
- 序列
选择一个序列模式类型,用于指定由连续数字索引的文件序列。
序列模式可能包含字符串“%d”或“%0Nd”,它指定模式匹配的每个文件名中表示连续数字的字符的位置。 如果使用“%0Nd”的形式,则每个文件名中表示数字的字符串将使用 0 填充,并且 N 是表示该数字的 0 填充的总位数。 可以在模式中使用字符串“%%”来指定字面字符“%”。
如果序列模式包含“%d”或“%0Nd”,则模式指定的文件列表的第一个文件名必须包含一个介于 start_number 和 start_number+start_number_range-1 之间的数字(包括边界值),并且所有后续数字都必须是连续的。
例如,模式“img-%03d.bmp”将匹配 img-001.bmp、img-002.bmp、...、img-010.bmp 等形式的文件名序列;模式“i%%m%%g-%d.jpg”将匹配 i%m%g-1.jpg、i%m%g-2.jpg、...、i%m%g-10.jpg 等形式的文件名序列。
请注意,模式不一定必须包含“%d”或“%0Nd”,例如,要转换单个图像文件 img.jpeg,您可以使用以下命令
ffmpeg -i img.jpeg img.png
- glob
选择一个 glob 通配符模式类型。
该模式像
glob()
模式一样进行解释。 只有在 libavformat 使用 globbing 支持编译时,此选项才是可选择的。- glob_sequence (已弃用,将被移除)
选择一个混合的 glob 通配符/序列模式。
如果您的 libavformat 版本使用 globbing 支持进行编译,并且提供的模式在
%*?[]{}
中至少包含一个未转义的“%”前导的 glob 元字符,则该模式将像glob()
模式一样进行解释,否则它将像序列模式一样进行解释。所有 glob 特殊字符
%*?[]{}
必须以“%”为前缀。 要转义字面“%”,您应使用“%%”。例如,模式
foo-%*.jpeg
将匹配所有以“foo-”为前缀并以“.jpeg”结尾的文件名,而foo-%?%?%?.jpeg
将匹配所有以“foo-”为前缀、后跟三个字符序列并以“.jpeg”结尾的文件名。此模式类型已被弃用,建议使用 glob 和 sequence。
默认值为 glob_sequence。
- pixel_format
设置要读取的图像的像素格式。 如果未指定,则像素格式将从序列中的第一个图像文件推断。
- start_number
设置要开始读取的与图像文件模式匹配的文件索引。 默认值为 0。
- start_number_range
设置从 start_number 开始查找序列中第一个图像文件时要检查的索引间隔范围。 默认值为 5。
- ts_from_file
如果设置为 1,则会将帧时间戳设置为图像文件的修改时间。 请注意,不保证时间戳的单调性:图像的顺序与不使用此选项时的顺序相同。 默认值为 0。 如果设置为 2,则会将帧时间戳设置为图像文件的修改时间(纳秒精度)。
- video_size
设置要读取的图像的视频大小。 如果未指定,则视频大小将从序列中的第一个图像文件推断。
- export_path_metadata
如果设置为 1,则会在输入中找到的元数据中添加两个额外的字段,使它们也可用于其他过滤器(有关示例,请参阅 drawtext 过滤器)。 默认值为 0。 额外字段如下所述
- lavf.image2dec.source_path
对应于正在读取的输入文件的完整路径。
- lavf.image2dec.source_basename
对应于正在读取的文件名。
20.13.1 示例
- 使用
ffmpeg
从文件序列 img-001.jpeg、img-002.jpeg、... 中的图像创建视频,假设输入帧率为每秒 10 帧ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv
- 与上面相同,但从序列中索引为 100 的文件开始读取
ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv
- 读取与“*.png” glob 模式匹配的图像,即所有以“.png”后缀结尾的文件
ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
20.14 libgme
Game Music Emu 库是电子游戏音乐文件模拟器的集合。
有关更多信息,请参阅 https://bitbucket.org/mpyne/game-music-emu/overview。
它接受以下选项
- track_index
设置要解复用的音轨索引。 解复用器只能导出一个音轨。 音轨索引从 0 开始。 默认是选择第一个音轨。 音轨数量导出为 tracks 元数据条目。
- sample_rate
设置导出的音轨的采样率。 范围是 1000 到 999999。 默认值为 44100。
- max_size (字节)
解复用器将整个文件缓冲到内存中。 调整此值以设置最大缓冲区大小,该大小反过来充当可以读取的文件大小的上限。 默认值为 50 MiB。
20.15 libmodplug
基于 ModPlug 的模块解复用器
请参阅 https://github.com/Konstanty/libmodplug
它将导出一个 2 通道 16 位 44.1 kHz 音频流。 或者,可以导出具有或不具有打印元数据的 pal8
16 色视频流。
它接受以下选项
- noise_reduction
应用简单的低通滤波器。 可以为 1(开)或 0(关)。 默认值为 0。
- reverb_depth
设置混响量。 范围 0-100。 默认值为 0。
- reverb_delay
设置延迟,单位为毫秒,限制为 40-250 毫秒。 默认值为 0。
- bass_amount
应用低音扩展,又称 XBass 或 megabass。 范围是 0(静音)到 100(响亮)。 默认值为 0。
- bass_range
设置截止频率,即低音频率的上限。 范围是 10-100 Hz。 默认值为 0。
- surround_depth
应用杜比定向逻辑环绕效果。 范围是 0(静音)到 100(强劲)。 默认值为 0。
- surround_delay
设置环绕延迟,单位为毫秒,限制为 5-40 毫秒。 默认值为 0。
- max_size
解复用器将整个文件缓冲到内存中。 调整此值以设置最大缓冲区大小,该大小反过来充当可以读取的文件大小的上限。 范围是 0 到 100 MiB。 0 将删除缓冲区大小限制(不建议)。 默认值为 5 MiB。
- video_stream_expr
使用 eval API 计算以将颜色分配给生成的视频流的字符串。 可以使用的变量有
x
、y
、w
、h
、t
、speed
、tempo
、order
、pattern
和row
。- video_stream
生成视频流。 可以为 1(开)或 0(关)。 默认值为 0。
- video_stream_w
设置视频帧宽度,单位为“字符”,其中一个字符表示 8 像素。范围是 20-512。默认值为 30。
- video_stream_h
设置视频帧高度,单位为“字符”,其中一个字符表示 8 像素。范围是 20-512。默认值为 30。
- video_stream_ptxt
打印视频流的元数据。包括
speed
、tempo
、order
、pattern
、row
和ts
(时间,单位为毫秒)。可以为 1(开启)或 0(关闭)。默认值为 1。
20.16 libopenmpt
基于 libopenmpt 的模块解复用器
有关更多信息,请参阅 https://lib.openmpt.org/libopenmpt/。
有些文件有多个子曲(音轨),可以使用 subsong 选项进行设置。
它接受以下选项
- subsong
设置子曲索引。可以是 “all”、“auto” 或子曲的索引。子曲索引从 0 开始。默认值为 “auto”。
默认值是让 libopenmpt 选择。
- layout
设置声道布局。有效值是 1、2 和 4 声道布局。默认值为 STEREO。
- sample_rate
设置 libopenmpt 输出的采样率。范围是 1000 到 INT_MAX。默认值为 48000。
20.17 mov/mp4/3gp
用于 Quicktime 文件格式和 ISO/IEC 基本媒体文件格式(ISO/IEC 14496-12 或 MPEG-4 第 12 部分,ISO/IEC 15444-12 或 JPEG 2000 第 12 部分)的解复用器。
注册的扩展名:mov、mp4、m4a、3gp、3g2、mj2、psp、m4b、ism、ismv、isma、f4v
20.17.1 选项
此解复用器接受以下选项
- enable_drefs
启用加载外部轨道,默认禁用。在某些用例中,启用此选项理论上可能会泄漏信息。
- use_absolute_path
允许通过绝对路径加载外部轨道,默认禁用。启用此选项存在安全风险。仅当已知源是非恶意时才应启用此选项。
- seek_streams_individually
在搜索时,分别识别每个流中最接近的点,并从识别的点开始解复用该流中的数据包。这可能会导致与从头开始线性解复用相比不同的数据包序列。默认值为 true。
- ignore_editlist
忽略任何编辑列表原子。默认情况下,解复用器会修改流索引以反映编辑列表描述的时间线。默认值为 false。
- advanced_editlist
修改流索引以反映编辑列表描述的时间线。必须将
ignore_editlist
设置为 false,此选项才能生效。如果ignore_editlist
和此选项都设置为 false,则仅修改流索引的起始位置以反映初始停留时间或编辑列表描述的起始时间戳。默认值为 true。- ignore_chapters
不解析章节。这包括 GoPro “HiLight” 标签/时刻。请注意,仅当输入可搜索时才解析章节。默认值为 false。
- use_mfra_for
对于可搜索的碎片化输入,如果存在媒体片段随机访问框,则从该框设置片段的起始时间戳。
以下选项可用
- ‘auto’
自动检测是否将 mfra 时间戳设置为 PTS 或 DTS (默认)
- “dts”
将 mfra 时间戳设置为 DTS
- “pts”
将 mfra 时间戳设置为 PTS
- ‘0’
不使用 mfra 框设置时间戳
- use_tfdt
对于碎片化输入,将片段的起始时间戳设置为来自
tfdt
框的baseMediaDecodeTime
。默认启用,这将优先使用tfdt
框来设置 DTS。禁用此选项以使用来自sidx
框的earliest_presentation_time
。在任何一种情况下,如果mfra
框可用且use_mfra_for
设置为 pts 或 dts,则将使用mfra
框中的时间戳。- export_all
将 udta 框中未识别的框导出为元数据条目。框类型的前四个字符设置为键。默认值为 false。
- export_xmp
将 XMP_ 框和 uuid 框的整个内容导出为键为
xmp
的字符串。请注意,如果设置了export_all
并且未设置此选项,则仍会导出 XMP_ 框的内容,但键为XMP_
。默认值为 false。- activation_bytes
解密 Audible AAX 和 AAX+ 文件所需的 4 字节密钥。请参阅下面的 Audible AAX 小节。
- audible_fixed_key
用于处理 Audible AAX/AAX+ 文件的固定密钥。它已预先设置,因此无需指定。
- decryption_key
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.17.2 Audible AAX
Audible AAX 文件是加密的 M4B 文件,可以通过指定 4 字节的激活密钥来解密它们。
ffmpeg -activation_bytes 1CEB00DA -i test.aax -vn -c:a copy output.mp4
20.18 mpegts
MPEG-2 传输流解复用器。
此解复用器接受以下选项
- resync_size
设置查找新同步的大小限制。默认值为 65536。
- skip_unknown_pmt
跳过 PAT 中未定义的程序的 PMT。默认值为 0。
- fix_teletext_pts
使用从 teletext 流所属且未丢弃的第一个程序的 PCR 计算的时间戳覆盖 teletext 数据包 PTS 和 DTS 值。默认值为 1,如果要保持 teletext 数据包 PTS 和 DTS 值不变,请将此选项设置为 0。
- ts_packetsize
输出选项,携带原始数据包大小(以字节为单位)。显示检测到的原始数据包大小,用户无法设置。
- scan_all_pmts
扫描并组合所有 PMT。该值是一个整数,其值从 -1 到 1(-1 表示自动设置,1 表示启用,0 表示禁用)。默认值为 -1。
- merge_pmt_versions
当 PMT 的版本更新并且基本流移动到不同的 PID 时,重用现有流。默认值为 0。
- max_packet_size
设置解复用器发出的数据包的最大大小(以字节为单位)。超出此大小的负载将拆分为多个数据包。范围是 1 到 INT_MAX/2。默认值为 204800 字节。
20.19 mpjpeg
封装在多部分 MIME 中的 MJPEG 解复用器。
此解复用器允许读取 MJPEG,其中每一帧都表示为 multipart/x-mixed-replace 流的一部分。
- strict_mime_boundary
默认实现对多部分 MIME 边界检测应用宽松的标准,以防止与众多现有端点未生成正确的 MIME MJPEG 流发生回归。通过将其设置为 1 来启用此选项将导致对边界值进行更严格的检查。
20.20 rawvideo
原始视频解复用器。
这个解复用器允许读取原始视频数据。由于没有指定假设的视频参数的头部,用户必须指定它们才能正确解码数据。
此解复用器接受以下选项
- framerate
设置输入视频帧率。默认值为 25。
- pixel_format
设置输入视频像素格式。默认值为
yuv420p
。- video_size
设置输入视频大小。必须显式指定此值。
例如,要使用 ffplay
读取像素格式为 rgb24
、视频大小为 320x240
、帧率为每秒 10 帧的原始视频文件 input.raw,请使用以下命令
ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw
20.21 rcwt
RCWT(带时间的原始字幕)是 ccextractor 的原生格式,ccextractor 是一个常用的开源工具,用于处理 608/708 隐藏式字幕 (CC) 源。有关此格式的更多信息,请参阅 (ffmpeg-formats)rcwtenc。
此解复用器实现了截至 2024 年 3 月的规范,该规范自 2014 年 4 月以来一直保持稳定且未更改。
20.21.1 示例
- 使用内置解码器将 CC 渲染为 ASS
ffmpeg -i CC.rcwt.bin CC.ass
请注意,如果您的输出显示为空,您可能需要手动设置解码器的 data_field 选项以选择所需的 CC 子流。
- 将 RCWT 备份转换为 Scenarist (SCC) 格式
ffmpeg -i CC.rcwt.bin -c:s copy CC.scc
请注意,SCC 格式不支持可以存储在 RCWT 中的所有可能的 CC 扩展(例如 EIA-708)。
20.22 sbg
SBaGen 脚本解复用器。
此解复用器读取 SBaGen http://uazu.net/sbagen/ 用于生成双耳节拍会话的脚本语言。一个 SBG 脚本看起来像这样
-SE a: 300-2.5/3 440+4.5/0 b: 300-2.5/0 440+4.5/3 off: - NOW == a +0:07:00 == b +0:14:00 == a +0:21:00 == b +0:30:00 off
SBG 脚本可以混合绝对和相对时间戳。如果脚本仅使用绝对时间戳(包括脚本开始时间)或仅使用相对时间戳,则其布局是固定的,并且转换很简单。另一方面,如果脚本混合使用两种类型的时间戳,则相对时间戳的 NOW 参考将取自读取脚本时的一天中的当前时间,并且脚本布局将根据该参考冻结。这意味着,如果直接播放脚本,则实际时间将与绝对时间戳匹配,直到声音控制器的时钟精度为止,但是如果用户以某种方式暂停播放或快进,则所有时间都会相应地偏移。
20.23 tedcaptions
用于 TED 演讲的 JSON 字幕。
TED 不提供字幕的链接,但可以从页面中猜测出来。FFmpeg 源代码树中的文件 tools/bookmarklets.html 包含一个用于公开它们的书签小程序。
此解复用器接受以下选项
- start_time
设置 TED 演讲的开始时间,以毫秒为单位。默认值为 15000 (15 秒)。它用于将字幕与可下载的视频同步,因为它们包含 15 秒的介绍。
示例:将字幕转换为大多数播放器可以理解的格式
ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt
20.24 vapoursynth
Vapoursynth 封装器。
由于安全问题,Vapoursynth 脚本不会被自动检测到,因此必须强制输入格式。对于 ff* CLI 工具,请在输入 -i yourscript.vpy
之前添加 -f vapoursynth
。
此解复用器接受以下选项
- max_script_size
解复用器将整个脚本缓冲到内存中。调整此值以设置最大缓冲区大小,这反过来又充当可以读取的脚本大小的上限。默认为 1 MiB。
20.25 w64
Sony Wave64 音频解复用器。
此解复用器接受以下选项
- max_size
请参阅 wav 解复用器的相同选项。
20.26 wav
RIFF Wave 音频解复用器。
此解复用器接受以下选项
- max_size
指定解复用数据包的最大数据包大小(以字节为单位)。默认情况下,此值设置为 0,这意味着根据输入格式选择一个合理的值。
21 封装器
复用器是 FFmpeg 中配置的元素,允许将多媒体流写入特定类型的文件。
当您配置 FFmpeg 构建时,默认情况下会启用所有支持的复用器。您可以使用配置选项 --list-muxers
列出所有可用的复用器。
您可以使用配置选项 --disable-muxers
禁用所有复用器,并使用选项 --enable-muxer=MUXER
/ --disable-muxer=MUXER
选择性地启用/禁用单个复用器。
ff* 工具的选项 -muxers
将显示已启用的复用器列表。使用 -formats
查看已启用的解复用器和复用器的组合列表。
下面是对一些当前可用复用器的描述。
21.1 原始封装器
本节介绍原始复用器。它们接受与指定编解码器匹配的单个流。它们不存储时间戳或元数据。除非另有说明,否则识别的扩展名与复用器名称相同。
它包含以下复用器。还显示了用于从输出扩展名自动选择复用器的媒体类型和最终扩展名。
- ‘ac3 audio’
杜比数字,也称为 AC-3。
- ‘adx audio’
CRI 中间件 ADX 音频。
当输出可搜索且计数可以存储在 32 位中时,此复用器将在第一个数据包的开头附近写出总采样计数。
- ‘aptx audio’
aptX(用于蓝牙的音频处理技术)
- ‘aptx_hd audio (aptxdh)’
aptX HD(用于蓝牙的音频处理技术)音频
- ‘avs2 video (avs, avs2)’
AVS2-P2(音频视频标准 - 第二代 - 第 2 部分)/ IEEE 1857.4 视频
- ‘avs3 video (avs3)’
AVS3-P2(音频视频标准 - 第三代 - 第 2 部分)/ IEEE 1857.10 视频
- ‘cavsvideo video (cavs)’
中国 AVS(音频视频标准 - 第一代)
- ‘codec2raw audio’
Codec 2 音频。
没有注册扩展名,因此必须提供格式名称,例如使用 ffmpeg CLI 工具
-f codec2raw
。- ‘data any’
通用数据复用器。
此复用器接受具有任何类型的任何编解码器的单个流。必须使用带有
ffmpeg
CLI 工具的-map
选项选择输入流。没有注册扩展名,因此必须提供格式名称,例如使用
ffmpeg
CLI 工具-f data
。- ‘dfpwm audio (dfpwm)’
原始 DFPWM1a(动态滤波器脉冲宽度调制)音频复用器。
- ‘dirac video (drc, vc2)’
BBC Dirac 视频。
Dirac Pro 编解码器是子集,并被标准化为 SMPTE VC-2。
- ‘dnxhd video (dnxhd, dnxhr)’
Avid DNxHD 视频。
它被标准化为 SMPTE VC-3。接受 DNxHR 流。
- ‘dts audio’
DTS 连贯声学 (DCA) 音频
- ‘eac3 audio’
杜比数字增强版,也称为增强型 AC-3
- ‘evc video (evc)’
MPEG-5 基本视频编码 (EVC) / EVC / MPEG-5 第 1 部分 EVC 视频
- ‘g722 audio’
ITU-T G.722 音频
- ‘g723_1 audio (tco, rco)’
ITU-T G.723.1 音频
- ‘g726 audio’
ITU-T G.726 大端(“左对齐”)音频。
没有注册扩展名,因此必须提供格式名称,例如使用
ffmpeg
CLI 工具-f g726
。- ‘g726le audio’
ITU-T G.726 小端序(“右对齐”)音频。
没有注册扩展名,因此必须提供格式名称,例如使用
ffmpeg
命令行工具时使用-f g726le
。- ‘gsm audio’
全球移动通信系统音频
- ‘h261 video’
ITU-T H.261 视频
- ‘h263 video’
ITU-T H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 版本 2 视频
- ‘h264 video (h264, 264)’
ITU-T H.264 / MPEG-4 Part 10 AVC 视频。如果码流采用长度前缀模式,则应将其转换为 Annex B 语法。
- ‘hevc video (hevc, h265, 265)’
ITU-T H.265 / MPEG-H Part 2 HEVC 视频。如果码流采用长度前缀模式,则应将其转换为 Annex B 语法。
- ‘m4v video’
MPEG-4 Part 2 视频
- ‘mjpeg video (mjpg, mjpeg)’
运动 JPEG 视频
- ‘mlp audio’
子午线无损封装,也称为打包 PCM
- ‘mp2 audio (mp2, m2a, mpa)’
MPEG-1 音频层 II 音频
- ‘mpeg1video video (mpg, mpeg, m1v)’
MPEG-1 Part 2 视频。
- ‘mpeg2video video (m2v)’
ITU-T H.262 / MPEG-2 Part 2 视频
- ‘obu video’
AV1 低开销开放比特流单元复用器。
时间分隔符 OBU 将插入流的所有时间单元中。
- ‘rawvideo video (yuv, rgb)’
原始未压缩视频。
- ‘sbc audio (sbc, msbc)’
蓝牙 SIG 低复杂度子带编解码器音频
- ‘truehd audio (thd)’
杜比 TrueHD 音频
- ‘vc1 video’
SMPTE 421M / VC-1 视频
21.1.1 示例
- 使用
ffmpeg
和 ‘rawvideo’ 复用器存储原始视频帧ffmpeg -f lavfi -i testsrc -t 10 -s hd1080p testsrc.yuv
由于 rawvideo 复用器不存储与大小和格式相关的信息,因此在解复用文件时必须提供此信息
ffplay -video_size 1920x1080 -pixel_format rgb24 -f rawvideo testsrc.rgb
21.2 原始 PCM 封装器
本节介绍原始 PCM(脉冲编码调制)音频复用器。
它们接受与指定编解码器匹配的单个流。它们不存储时间戳或元数据。识别的扩展名与复用器名称相同。
它包含以下复用器。用于从输出扩展名自动选择复用器的可选附加扩展名也显示在括号中。
- ‘alaw (al)’
PCM A-law
- ‘f32be’
PCM 32 位浮点大端序
- ‘f32le’
PCM 32 位浮点小端序
- ‘f64be’
PCM 64 位浮点大端序
- ‘f64le’
PCM 64 位浮点小端序
- ‘mulaw (ul)’
PCM mu-law
- ‘s16be’
PCM 有符号 16 位大端序
- ‘s16le’
PCM 有符号 16 位小端序
- ‘s24be’
PCM 有符号 24 位大端序
- ‘s24le’
PCM 有符号 24 位小端序
- ‘s32be’
PCM 有符号 32 位大端序
- ‘s32le’
PCM 有符号 32 位小端序
- ‘s8 (sb)’
PCM 有符号 8 位
- ‘u16be’
PCM 无符号 16 位大端序
- ‘u16le’
PCM 无符号 16 位小端序
- ‘u24be’
PCM 无符号 24 位大端序
- ‘u24le’
PCM 无符号 24 位小端序
- ‘u32be’
PCM 无符号 32 位大端序
- ‘u32le’
PCM 无符号 32 位小端序
- ‘u8 (ub)’
PCM 无符号 8 位
- ‘vidc’
PCM Archimedes VIDC
21.3 MPEG-1/MPEG-2 程序流封装器
本节介绍属于 MPEG-1 和 MPEG-2 系统系列的格式。
MPEG-1 系统格式(也称为 ISO/IEEC 11172-1 或 MPEG-1 程序流)已被 VCD(视频光盘)中存储的媒体轨道格式采用。
MPEG-2 系统标准(也称为 ISO/IEEC 13818-1)涵盖两种容器格式,一种称为传输流,另一种称为程序流;此处仅介绍后者。
MPEG-2 程序流格式(也称为 VOB,因为它对应的文件扩展名)是 MPEG-1 程序流的扩展:除了支持音频和视频流的不同编解码器之外,它还存储字幕和导航元数据。MPEG-2 程序流已被采用用于在 SVCD 和 DVD 存储设备中存储媒体流。
本节包含以下复用器。
- ‘mpeg (mpg,mpeg)’
MPEG-1 系统 / MPEG-1 程序流复用器。
- ‘vcd’
MPEG-1 系统 / MPEG-1 程序流 (VCD) 复用器。
此复用器可用于生成 VCD(视频光盘)存储设备可接受的格式的轨道。
它与 ‘mpeg’ 复用器相同,但有一些差异。
- ‘vob’
MPEG-2 程序流 (VOB) 复用器。
- ‘dvd’
MPEG-2 程序流 (DVD VOB) 复用器。
此复用器可用于生成 DVD(数字多功能光盘)存储设备可接受的格式的轨道。
这与 ‘vob’ 复用器相同,但有一些差异。
- ‘svcd (vob)’
MPEG-2 程序流 (SVCD VOB) 复用器。
此复用器可用于生成 SVCD(超级视频光盘)存储设备可接受的格式的轨道。
这与 ‘vob’ 复用器相同,但有一些差异。
21.3.1 选项
- muxrate rate
设置用户定义的复用率,表示为比特/秒。如果未指定,则采用自动计算的复用率。默认值为
0
。- preload delay
设置初始解复用-解码延迟(以微秒为单位)。默认值为
500000
。
21.4 MOV/MPEG-4/ISOMBFF 封装器
本节介绍属于 QuickTime / MOV 系列的格式,包括 MPEG-4 Part 14 格式和 ISO 基本媒体文件格式 (ISOBMFF)。这些格式共享基于 ISO 基本媒体文件格式 (ISOBMFF) 的通用结构。
MOV 格式最初是为 Apple QuickTime 开发的。后来,它被用作 MPEG-4 Part 1(后来的 Part 14)格式的基础,也称为 ISO/IEC 14496-1。该格式随后被推广到 ISOBMFF,也称为 MPEG-4 Part 12 格式,ISO/IEC 14496-12 或 ISO/IEC 15444-12。
它包含以下复用器。
- ‘3gp’
第三代合作伙伴计划 (3GPP) 格式,用于 3G UMTS 多媒体服务
- ‘3g2’
第三代合作伙伴计划 2 (3GP2 或 3GPP2) 格式,用于 3G CDMA2000 多媒体服务,类似于 ‘3gp’,但具有扩展和限制
- ‘f4v’
Adobe Flash 视频格式
- ‘ipod’
MPEG-4 音频文件格式,与 MOV/MP4 类似,但仅限于包含音频流,通常用 Apple ipod 设备播放
- ‘ismv’
Microsoft IIS(Internet 信息服务)平滑流式音频/视频(ISMV 或 ISMA)格式。它基于 MPEG-4 Part 14 格式,但有一些不兼容的变体,用于为 Microsoft IIS 服务器流式传输媒体文件。
- ‘mov’
QuickTime 播放器格式,由
.mov
扩展名标识- ‘mp4’
MP4 或 MPEG-4 第 14 部分格式
- ‘psp’
PlayStation Portable MP4/MPEG-4 第 14 部分格式变体。它基于 MPEG-4 第 14 部分格式,但有一些不兼容的变体,用于在 PlayStation 设备上播放文件。
21.4.1 分片
‘mov’、‘mp4’ 和 ‘ismv’ 复用器支持分段。通常,MOV/MP4 文件将所有数据包的元数据存储在一个位置。
这些数据通常写在文件末尾,但可以通过在 -movflags
中添加 +faststart
或使用 qt-faststart
工具将其移动到开头,以获得更好的播放效果。
一个分段文件由多个片段组成,其中数据包和有关这些数据包的元数据存储在一起。写入分段文件的优点是,即使写入中断,该文件仍然可解码(而普通的 MOV/MP4 文件如果未正确完成则无法解码),并且在写入非常长的文件时需要更少的内存(因为写入普通的 MOV/MP4 文件会在内存中存储有关每个数据包的信息,直到文件关闭)。缺点是它与其他应用程序的兼容性较差。
通过设置定义如何将文件切割成分段的选项之一来启用分段
- frag_duration
- frag_size
- min_frag_duration
- movflags +frag_keyframe
- movflags +frag_custom
如果指定了多个条件,则当满足其中一个指定条件时,就会切割片段。例外情况是选项 min_frag_duration,它必须满足才能应用任何其他条件。
21.4.2 选项
- brand brand_string
覆盖主要品牌。
- empty_hdlr_name bool
启用以跳过在
hdlr
框内写入名称。默认值为false
。- encryption_key key
以十六进制格式设置媒体加密密钥
- encryption_kid kid
以十六进制格式设置媒体加密密钥标识符
- encryption_scheme scheme
配置加密方案,允许的值为 ‘none’ 和 ‘cenc-aes-ctr’
- frag_duration duration
创建长度为 duration 微秒的片段。
- frag_interleave number
在片段内交错样本(最大连续样本数,数值越低交错越紧密,但开销更大。默认为
0
。)- frag_size size
创建最多包含 size 字节有效负载数据的片段
- iods_audio_profile profile
指定音频配置文件 atom 的 iods 编号(从 -1 到 255),默认值为
-1
- iods_video_profile profile
指定视频配置文件 atom 的 iods 编号(从 -1 到 255),默认值为
-1
- ism_lookahead num_entries
指定 ISM 文件的前瞻条目数(从 0 到 255),默认值为
0
- min_frag_duration duration
不创建短于 duration 微秒的片段
- moov_size bytes
在文件开头为 moov atom 保留空间,而不是将 moov atom 放在末尾。如果保留的空间不足,则复用将失败。
- mov_gamma gamma
指定 gama atom 的伽玛值(0 到 10 的十进制数),默认值为
0.0
,必须与+ movflags
一起设置- movflags flags
设置各种复用开关。可以使用以下标志
- ‘cmaf’
写入兼容 CMAF(通用媒体应用格式)的分段 MP4 输出
- ‘dash’
写入兼容 DASH(通过 HTTP 的动态自适应流)的分段 MP4 输出
- ‘default_base_moof’
与 ‘omit_tfhd_offset’ 标志类似,此标志避免在 tfhd atoms 中写入绝对的 base_data_offset 字段,而是使用新的 default-base-is-moof 标志来实现。此标志是 14496-12:2012 的新功能。这可能会使片段在某些情况下更容易解析(避免将轨道片段位置计算基于上一个轨道片段的隐式结尾)。
- ‘delay_moov’
延迟写入初始 moov,直到第一个片段被切割,或直到第一个片段刷新
- ‘disable_chpl’
禁用 Nero 章节标记(chpl atom)。通常,Nero 章节和 QuickTime 章节轨道都会写入文件。设置此选项后,只会写入 QuickTime 章节轨道。当使用某些标签程序(如 mp3Tag 2.61a 和 iTunes 11.3)重新处理文件时,Nero 章节可能会导致失败,很可能其他版本也受到影响。
- ‘faststart’
运行第二次传递,将索引(moov atom)移动到文件开头。此操作可能需要一段时间,并且在各种情况下(例如分段输出)将不起作用,因此默认情况下不启用。
- ‘frag_custom’
允许调用者通过调用
av_write_frame(ctx, NULL)
手动选择何时切割片段,以写入到目前为止写入的数据包的片段。(这仅在其他集成 libavformat 的应用程序中有用,而不是来自ffmpeg
。)- ‘frag_discont’
表示下一个片段与之前的片段不连续
- ‘frag_every_frame’
在每一帧处分割片段
- ‘frag_keyframe’
在每个视频关键帧处开始一个新片段
- ‘global_sidx’
在文件开头写入全局 sidx 索引
- ‘isml’
创建一个实时流畅流媒体馈送(用于推送到发布点)
- ‘negative_cts_offsets’
启用 CTTS 框的第 1 版的利用,其中 CTS 偏移量可以为负数。这使得初始样本的 DTS/CTS 为零,并减少了对某些情况(例如具有 B 帧的视频轨道)的编辑列表的需求。此外,还简化了与 DASH-IF 互操作性指南的一致性。
在写入 ‘ismv’(流畅流媒体)文件时,此选项是隐式设置的。
- ‘omit_tfhd_offset’
不在 tfhd atoms 中写入任何绝对的 base_data_offset。这避免了将片段绑定到文件/流中的绝对字节位置。
- ‘prefer_icc’
如果写入 colr atom,则优先使用流数据包边数据中存在的 ICC 配置文件。
- ‘rtphint’
将 RTP 提示轨道添加到输出文件
- ‘separate_moof’
为每个轨道写入单独的 moof(电影片段)原子。通常,所有轨道的包都写入一个 moof 原子(效率稍高),但设置此选项后,复用器会为每个轨道写入一个 moof/mdat 对,从而更容易分离轨道。
- ‘skip_sidx’
跳过 sidx atom 的写入。当 sidx atom 导致的比特率开销很高时,可以在不需要 sidx atom 的情况下使用此选项。启用 ‘global_sidx’ 标志时,将忽略此选项。
- ‘skip_trailer’
跳过为分段文件写入 mfra/tfra/mfro 预告片
- ‘use_metadata_tags’
使用 mdta atom 进行元数据
- ‘write_colr’
即使颜色信息未指定,也写入 colr atom。此标志是实验性的,可能会被重命名或更改,请勿在脚本中使用。
- ‘write_gama’
写入已弃用的 gama atom
- ‘hybrid_fragmented’
为了可恢复性 - 将输出文件写入为分段文件。这允许在写入时读取中间文件(特别是,如果写入过程不正常中止)。写入完成后,该文件将转换为常规的、非分段的文件,这种文件更兼容,并且允许更容易和更快速地进行查找。
如果写入中止,可以手动重新混合中间文件,以获得已写入到未完成文件中的内容的常规、非分段文件。
- movie_timescale scale
设置电影头框 (
mvhd
) 中写入的时间刻度。范围是 1 到 INT_MAX。默认值为1000
。- rtpflags flags
向输出文件添加 RTP 提示轨道。
可以使用以下标志
- ‘h264_mode0’
在 RTP 中对 H.264 使用模式 0
- ‘latm’
对 AAC 使用 MP4A-LATM 分包,而不是 MPEG4-GENERIC
- ‘rfc2190’
对 H.263 使用 RFC 2190 分包,而不是 RFC 4629
- ‘send_bye’
完成时发送 RTCP BYE 数据包
- ‘skip_rtcp’
不发送 RTCP 发送者报告
- skip_iods bool
跳过写入 iods atom(默认值为
true
)- use_editlist bool
使用编辑列表(默认值为
auto
)- use_stream_ids_as_track_ids bool
使用流 ID 作为轨道 ID(默认值为
false
)- video_track_timescale scale
设置用于视频轨道的时间刻度。范围是
0
到 INT_MAX。如果设置为0
,则时间刻度将根据原生流时基自动设置。默认值为0
。- write_btrt bool
强制或禁用在轨道的 stsd 框内写入比特率框。该框包含解码缓冲区大小(以字节为单位)、最大比特率和轨道的平均比特率。如果无法计算这些值中的任何一个,则将跳过该框。默认值为
-1
或auto
,仅在 MP4 模式下写入该框。- write_prft option
写入生产者时间参考框 (PRFT),其中指定 PRFT 框中 NTP 字段的时间源。将值设置为 ‘wallclock’ 以将时间源指定为挂钟时间,将值设置为 ‘pts’ 以将时间源指定为输入数据包的 PTS 值。
- write_tmcd bool
指定
on
以强制写入时间码轨道,off
以禁用它,auto
仅为 mov 和 mp4 输出写入时间码轨道(默认值)。将值设置为 ‘pts’ 仅适用于实时编码用例,其中 PTS 值在源处设置为挂钟时间。例如,一个使用 decklink 捕获源的编码用例,其中 video_pts 和 audio_pts 设置为 ‘abs_wallclock’。
21.4.3 示例
- 使用
ffmpeg
将 Smooth Streaming 内容实时推送到 IIS 上的发布点,使用 ‘ismv’ 复用器ffmpeg -re <normal input/transcoding options> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
21.5 a64
A64 Commodore 64 视频复用器。
此复用器接受单个 a64_multi
或 a64_multi5
编解码器视频流。
21.6 ac4
原始 AC-4 音频复用器。
此复用器接受单个 ac4
音频流。
21.6.1 选项
- write_crc bool
启用后,将每个数据包的 CRC 校验和写入输出,默认值为
false
21.7 adts
音频数据传输流复用器。
它接受单个 AAC 流。
21.7.1 选项
- write_id3v2 bool
启用以在流的开头写入 ID3v2.4 标签。默认情况下禁用。
- write_apetag bool
启用以在流的末尾写入 APE 标签。默认情况下禁用。
- write_mpeg2 bool
启用以将 ADTS 帧头中的 MPEG 版本位设置为 1,表示 MPEG-2。默认值为 0,表示 MPEG-4。
21.8 aea
MD STUDIO 音频复用器。
此复用器接受单个 ATRAC1 音频流,该音频流具有一个或两个声道,采样率为 44100Hz。
由于 AEA 支持存储轨道标题,因此此复用器还将流的元数据中的标题写入容器。
21.9 aiff
音频交换文件格式复用器。
21.9.1 选项
- write_id3v2 bool
设置为 1 时启用 ID3v2 标签写入。默认值为 0(禁用)。
- id3v2_version bool
选择要写入的 ID3v2 版本。当前仅支持版本 3 和 4(又名 ID3v2.3 和 ID3v2.4)。默认版本为 4。
21.10 alp
High Voltage Software 的乐高赛车游戏音频复用器。
它接受单个 ADPCM_IMA_ALP 流,该流具有不超过 2 个声道,且采样率不大于 44100 Hz。
扩展名:tun
,pcm
21.10.1 选项
- type type
设置文件类型。
type 接受以下值
- ‘tun’
将文件类型设置为音乐。必须具有 22050 Hz 的采样率。
- ‘pcm’
将文件类型设置为 sfx。
- ‘auto’
根据输出文件扩展名设置文件类型。
.pcm
导致类型为pcm
,否则设置为类型tun
。(默认)
21.11 amr
3GPP AMR (自适应多速率) 音频复用器。
它接受包含 AMR NB 流的单个音频流。
21.12 amv
AMV (动作媒体视频) 格式复用器。
21.13 apm
Ubisoft 雷曼 2 APM 音频复用器。
它接受单个 ADPCM IMA APM 音频流。
21.14 apng
动画便携式网络图形复用器。
它接受单个 APNG 视频流。
21.14.1 选项
- final_delay delay
在每次重复的最后一帧之后强制执行以秒为单位的延迟。默认值为
0.0
。- plays repetitions
指定播放内容的次数,
0
会导致无限循环,1
表示没有循环
21.14.2 示例
- 使用
ffmpeg
生成具有 2 次重复的 APNG 输出,并且在第一次重复后延迟半秒ffmpeg -i INPUT -final_delay 0.5 -plays 2 out.apng
21.15 argo_asf
Argonaut Games ASF 音频复用器。
它接受单个 ADPCM 音频流。
21.15.1 选项
- version_major version
覆盖文件主版本,指定为整数,默认值为
2
- version_minor version
覆盖文件次版本,指定为整数,默认值为
1
- name name
将文件名嵌入到文件中,如果未指定,则使用输出文件名。名称将被截断为 8 个字符。
21.16 argo_cvg
Argonaut Games CVG 音频复用器。
它接受单个单声道 ADPCM 22050Hz 音频流。
loop 和 reverb 选项在头中设置相应的标志,之后可以检索这些标志以相应地处理音频流。
21.16.1 选项
- skip_rate_check bool
跳过采样率检查(默认值为
false
)- loop bool
设置循环标志(默认值为
false
)- reverb boolean
设置混响标志(默认值为
true
)
21.17 asf, asf_stream
高级/活动系统(或流式)格式音频混合器。
对于流式传输,应选择“asf_stream”变体。
请注意,Windows Media Audio (wma) 和 Windows Media Video (wmv) 也使用此混合器。
21.17.1 选项
- packet_size size
设置混合器数据包大小(以字节为单位)。通过调整此设置,您可以根据源减少数据碎片或混合器开销。默认值为
3200
,最小值为100
,最大值为64Ki
。
21.18 ass
ASS/SSA(SubStation Alpha)字幕混合器。
它接受单个 ASS 字幕流。
21.18.1 选项
- ignore_readorder bool
立即写入对话事件,即使它们是乱序的,默认值为
false
,否则它们将被缓存,直到找到预期的时间事件。
21.19 ast
AST(音频流)混合器。
此格式用于在某些任天堂 Wii 游戏中播放音频。
它接受单个音频流。
loopstart 和 loopend 选项可用于定义文件中循环播放的部分,以供支持此类选项的播放器使用。
21.19.1 选项
- loopstart start
指定循环开始位置,以毫秒为单位,从
-1
到INT_MAX
,如果设置为-1
,则不指定循环(默认值-1),并且忽略loopend值。- loopend end
指定循环结束位置,以毫秒为单位,从
0
到INT_MAX
,默认值为0
,如果设置为0
,则假定为总流时长。
21.20 au
SUN AU 音频混合器。
它接受单个音频流。
21.21 avi
音频视频交错混合器。
AVI 是 Microsoft 开发的专有格式,后来通过 Open DML 规范正式指定。
由于播放器实现方式的差异,可能需要设置一些选项以确保生成的输出可以被目标播放器正确播放。
21.21.1 选项
- flipped_raw_rgb bool
如果设置为
true
,则为原始 RGB 位图存储正高度,表示位图是自下而上存储的。请注意,此选项不会翻转位图,必须事先手动完成,例如,通过使用“vflip”滤镜。默认值为false
,表示位图是自上而下存储的。- reserve_index_space size
为文件头中每个流的 OpenDML 主索引保留指定大小的字节数。默认情况下,如果第一个主索引中没有剩余空间,则其他主索引将嵌入到数据包中,并链接在一起作为索引链。这种索引结构可能会在某些用例中引起问题,例如,第三方软件严格依赖 OpenDML 索引规范或文件查找速度缓慢。在文件头中保留足够的索引空间可以避免这些问题。
所需的索引空间取决于输出文件的大小,并且大约应为每 GB 16 个字节。如果省略此选项或设置为零,则会猜测必要的索引空间。
默认值为
0
。- write_channel_mask bool
将声道布局掩码写入音频流头。
默认情况下启用此选项。禁用声道掩码在特定场景中可能很有用,例如,当将多个音频流合并为一个以兼容仅支持 AVI 中单个音频流的软件时(请参阅 (ffmpeg-filters)ffmpeg-filters 手册中的“amerge”部分)。
21.22 avif
AV1(开放媒体视频编解码器联盟 1)图像格式混合器。
此混合器存储使用 AV1 编解码器编码的图像。
它接受一个或两个视频流。如果提供两个视频流,则第二个视频流应包含一个存储 alpha 掩码的单平面。
如果提供多个图像,则生成的输出将被视为动画 AVIF,并且可以使用 loop 选项指定循环次数。
这基于开放媒体联盟在 URL https://aomediacodec.github.io/av1-avif 上的规范。
21.22.1 选项
- loop count
动画 AVIF 的循环播放次数,
0
表示无限循环,默认值为0
。- movie_timescale timescale
设置电影头框 (
mvhd
) 中写入的时间刻度。范围是 1 到 INT_MAX。默认值为1000
。
21.23 avm2
ShockWave Flash (SWF) / ActionScript 虚拟机 2 (AVM2) 格式混合器。
它接受一个音频流、一个视频流或两者。
21.24 bit
G.729 (.bit) 文件格式混合器。
它接受单个 G.729 音频流。
21.25 caf
Apple CAF(核心音频格式)混合器。
它接受单个音频流。
21.26 codec2
Codec2 音频混合器。
它接受单个 codec2 音频流。
21.27 chromaprint
Chromaprint 指纹混合器。
要启用此滤镜的编译,您需要使用 --enable-chromaprint
配置 FFmpeg。
此混合器将音频数据馈送到 Chromaprint 库,该库会为提供的音频数据生成指纹。请参阅:https://acoustid.org/chromaprint
它采用一个最多 2 个声道的有符号原生字节序 16 位原始音频流。
21.27.1 选项
- algorithm version
选择用于指纹识别的算法版本。范围为
0
到4
。版本3
启用静音检测。默认值为1
。- fp_format format
指纹的输出格式。接受以下选项
- ‘base64’
Base64 压缩指纹(默认)
- ‘compressed’
二进制压缩指纹
- ‘raw’
二进制原始指纹
- silence_threshold threshold
用于检测静音的阈值。范围为从
-1
到32767
,其中-1
禁用静音检测。静音检测只能与算法版本3
一起使用。对于与 AcoustID 服务一起使用,必须禁用静音检测。默认值为
-1
。
21.28 crc
CRC(循环冗余校验)混合器。
此混合器计算并打印所有输入音频和视频帧的 Adler-32 CRC。默认情况下,在计算 CRC 之前,音频帧将转换为有符号的 16 位原始音频,视频帧将转换为原始视频。
混合器的输出由一行组成,格式为:CRC=0xCRC,其中CRC是一个十六进制数字,用 0 填充到 8 位,其中包含所有解码的输入帧的 CRC。
另请参阅framecrc混合器。
21.28.1 示例
- 使用
ffmpeg
计算输入的 CRC,并将其存储在文件out.crc中。ffmpeg -i INPUT -f crc out.crc
- 使用
ffmpeg
使用以下命令将 CRC 打印到 stdoutffmpeg -i INPUT -f crc -
- 您可以通过指定音频和视频编解码器和格式,使用
ffmpeg
选择每个帧的输出格式。例如,要计算转换为 PCM 无符号 8 位 的输入音频和转换为 MPEG-2 视频 的输入视频的 CRC,请使用以下命令ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
21.29 dash
HTTP 上的动态自适应流式传输 (DASH) 混合器。
此混合器根据 MPEG-DASH 标准 ISO/IEC 23009-1:2014 和以下标准更新创建片段和清单文件。
有关更多信息,请参见
- ISO DASH 规范:http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip
- WebM DASH 规范:https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification
此混合器为每个流创建一个 MPD(媒体演示描述)清单文件和片段文件。片段文件放置在 MPD 清单文件的同一目录中。
片段文件名可能包含在标准第 5.3.9.4.4 节中定义的清单SegmentTemplate
部分中使用的预定义标识符。
可用的标识符为$RepresentationID$
、$Number$
、$Bandwidth$
和$Time$
。除了标准标识符之外,还支持 ffmpeg 特有的$ext$
标识符。指定后,ffmpeg
会将文件名中的$ext$
替换为混合格式的扩展名,例如mp4
、webm
等。
21.29.1 选项
- adaptation_sets adaptation_sets
将流分配给改编集,在 MPD 清单
AdaptationSets
部分中指定。改编集包含一组或多个流,作为单个子集访问,例如,以不同大小编码的相应流,用户可以根据可用带宽选择,或者具有不同语言的不同音频流。
每个自适应集都使用以下语法指定:
id=index,streams=streams
其中,index 必须是数字索引,而 streams 是以
,
分隔的流索引序列。可以指定多个自适应集,用空格分隔。要将所有视频(或音频)流映射到一个自适应集,可以使用
v
(或a
)作为流标识符,而不是 ID。如果未定义任何赋值,则默认情况下每个流都有一个自适应集。
还可以指定以下可选字段:
- descriptor
按照 ISO/IEC 23009-1:2014/Amd.2:2015 的定义设置描述符。
例如
<SupplementalProperty schemeIdUri=\"urn:mpeg:dash:srd:2014\" value=\"0,0,0,1,1,2,2\"/>
描述符字符串应为自闭合 XML 标记。
- frag_duration
覆盖使用 frag_duration 选项指定的全局片段持续时间。
- frag_type
覆盖使用 frag_type 选项指定的全局片段类型。
- seg_duration
覆盖使用 seg_duration 选项指定的全局分段持续时间。
- trick_id
将自适应集标记为包含用于引用自适应集的技巧模式的流。
以下是一些 adaptation_sets 选项的可能值示例:
id=0,seg_duration=2,frag_duration=1,frag_type=duration,streams=v id=1,seg_duration=2,frag_type=none,streams=a
id=0,seg_duration=2,frag_type=none,streams=0 id=1,seg_duration=10,frag_type=none,trick_id=0,streams=1
- dash_segment_type type
设置 DASH 分段文件类型。
可能的值:
- ‘auto’
将根据流编解码器选择 dash 分段文件格式。这是默认模式。
- ‘mp4’
dash 分段文件将采用 ISOBMFF/MP4 格式
- ‘webm’
dash 分段文件将采用 WebM 格式
- extra_window_size size
设置从磁盘删除之前,保留在清单之外的最大分段数。
- format_options options_list
使用以
:
分隔的键=值参数列表设置容器格式(mp4/webm)选项。包含:
特殊字符的值必须转义。- frag_duration duration
设置分段内片段的长度(秒),也可以设置小数值。
- frag_type type
设置分段的时间间隔类型。
可能的值:
- ‘auto’
每个分段设置一个片段
- ‘every_frame’
在每一帧处分割片段
- “duration”
按特定时间间隔进行分段
- ‘pframes’
在关键帧和随后的 P 帧重新排序处进行分段(仅限视频,实验性功能)
- global_sidx bool
写入全局
SIDX
atom。仅适用于单文件、mp4 输出、非流式传输模式。- hls_master_name file_name
HLS 主播放列表名称。默认为 master.m3u8。
- hls_playlist bool
生成 HLS 播放列表文件。主播放列表的文件名由 hls_master_name 选项指定。为每个流生成一个媒体播放列表文件,文件名分别为 media_0.m3u8、media_1.m3u8 等。
- http_opts http_opts
指定要传递给底层 HTTP 协议的以
:
分隔的键=值选项列表。仅适用于 HTTP 输出。- http_persistent bool
使用持久 HTTP 连接。仅适用于 HTTP 输出。
- http_user_agent user_agent
覆盖 HTTP 标头中的 User-Agent 字段。仅适用于 HTTP 输出。
- ignore_io_errors bool
在打开和写入期间忽略 IO 错误。对于具有网络输出的长时间运行非常有用。默认情况下禁用此选项。
- index_correction bool
启用或禁用分段索引校正逻辑。仅当启用 use_template 且禁用 use_timeline 时适用。默认情况下禁用此选项。
启用后,该逻辑会监视分段索引的流动。如果流的分段索引值不在预期的实时位置,则该逻辑会校正该索引值。
通常,这种逻辑在直播用例中是必需的。在长时间运行的流式传输过程中,网络带宽波动很常见。每次波动都可能导致分段索引落后于预期的实时位置。
- init_seg_name init_name
用于初始化分段的 DASH 模板化名称。默认为
init-stream$RepresentationID$.$ext$
。$ext$
将替换为分段格式特定的文件名扩展名。- ldash bool
通过限制某些元素的存在和值来启用低延迟 Dash。默认情况下禁用此选项。
- lhls bool
启用低延迟 HLS (LHLS)。添加包含当前分段 URI 的
#EXT-X-PREFETCH
标记。hls.js 播放器人员正在尝试标准化开放 LHLS 规范。该规范草案可在此处获取:https://github.com/video-dev/hlsjs-rfcs/blob/lhls-spec/proposals/0001-lhls.md。此选项尝试遵守上述开放规范。它会自动启用 streaming 和 hls_playlist 选项。这是一个实验性功能。
注意:这不是 Apple 版本的 LHLS。请参阅 https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis
- master_m3u8_publish_rate segment_intervals_count
在指定数量的分段间隔后,重复发布主播放列表。
- max_playback_rate rate
设置指示的最大播放速率,该速率适用于客户端在正常播放期间自动调整播放延迟和缓冲占用率。
- media_seg_name segment_name
用于媒体分段的 DASH 模板化名称。默认为
chunk-stream$RepresentationID$-$Number%05d$.$ext$
。$ext$
将替换为分段格式特定的文件名扩展名。- method method
使用给定的 HTTP 方法创建输出文件。通常设置为
PUT
或POST
。- min_playback_rate rate
设置指示的最小播放速率,该速率适用于客户端在正常播放期间自动调整播放延迟和缓冲占用率。
- mpd_profile flags
设置一个或多个 MPD 清单配置文件。
可能的值:
- ‘dash’
MPEG-DASH ISO 基本媒体文件格式实时配置文件
- ‘dvb_dash’
DVB-DASH 配置文件
默认值为
dash
。- remove_at_exit bool
启用或禁用在完成时删除所有分段。默认情况下禁用此选项。
- seg_duration duration
设置分段长度(秒)(可以设置小数)。当启用 use_template 选项且禁用 use_timeline 选项时,该值被视为平均分段持续时间,对于所有其他用例,该值被视为最小分段持续时间。
默认值为
5
。- single_file bool
启用或禁用将所有分段存储在一个文件中,并使用字节范围访问。默认情况下禁用此选项。
可以使用 single_file_name 选项指定单个文件的名称,如果未指定,则假定清单文件的基本名称带有输出格式扩展名。
- single_file_name file_name
用于清单
baseURL
元素的 DASH 模板化名称。暗示将 single_file 选项设置为 true。在模板中,$ext$
将替换为分段格式特定的文件名扩展名。- streaming bool
启用或禁用输出的块流模式。在块流模式下,每个帧都是一个形成块的
moof
片段。默认情况下禁用此选项。- target_latency target_latency
设置服务的目标延迟(秒)(可以设置小数)。仅当启用 streaming 和 write_prft 选项时适用。这是一个信息性字段,客户端可以使用该字段来测量服务的延迟。
- timeout timeout
设置套接字 I/O 操作的超时时间,以秒为单位表示(可以设置小数)。仅适用于 HTTP 输出。
- update_period period
设置动态内容的 MPD 更新周期,单位为秒。如果设置为
0
,则会自动计算周期。默认值为
0
。- use_template bool
启用或禁用在清单中使用
SegmentTemplate
而不是SegmentList
。默认启用此项。- use_timeline bool
启用或禁用在
SegmentTemplate
清单部分中使用SegmentTimeline
。默认启用此项。- utc_timing_url url
返回 ISO 格式 UTC 时间戳的页面 URL,例如
https://time.akamai.com/?iso
- window_size size
设置清单中保留的最大片段数量,丢弃最旧的片段。这对于直播很有用。
如果值为
0
,则所有片段都保留在清单中。默认值为0
。- write_prft write_prft
在支持的流上写入 Producer Reference Time 元素。这还会启用在底层混合器中写入 prft box。仅当启用 utc_url 选项时适用。默认设置为 auto,在这种情况下,混合器将尝试仅在需要它的模式下启用它。
21.29.2 示例
使用 ffmpeg
从实时输入源生成 DASH 输出。
从输入文件生成两个多媒体流,都包含通过 ‘libx264’ 编码的视频流和通过 ‘libfdk_aac’ 编码的音频流。第一个多媒体流包含比特率为 800k 的视频和默认速率的音频,第二个多媒体流包含缩放至 320x170 像素,比特率为 300k 的视频和重采样至 22005 Hz 的音频。
window_size 选项仅保留最新的 5 个片段,默认时长为 5 秒。
ffmpeg -re -i <input> -map 0 -map 0 -c:a libfdk_aac -c:v libx264 \ -b:v:0 800k -profile:v:0 main \ -b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline -ar:a:1 22050 \ -bf 1 -keyint_min 120 -g 120 -sc_threshold 0 -b_strategy 0 \ -use_timeline 1 -use_template 1 -window_size 5 \ -adaptation_sets "id=0,streams=v id=1,streams=a" \ -f dash /path/to/out.mpd
21.30 daud
D-Cinema 音频混合器。
它接受单个以 96000 Hz 重采样的 6 声道音频流,并使用 ‘pcm_24daud’ 编解码器进行编码。
21.30.1 示例
使用 ffmpeg
将输入音频混合为以 96000Hz 重采样的 ‘5.1’ 声道布局
ffmpeg -i INPUT -af aresample=96000,pan=5.1 slow.302
对于 7.0 之前的 ffmpeg 版本,您可能必须使用 ‘asetnsamples’ 过滤器来限制混合的数据包大小,因为此格式不支持混合大于 65535 字节(3640 个采样)的数据包。对于较新的 ffmpeg 版本,音频会自动打包成 36000 字节(2000 个采样)的数据包。
21.31 dv
DV(数字视频)混合器。
它接受恰好一个 ‘dvvideo’ 视频流和最多两个 ‘pcm_s16’ 音频流。视频的属性定义了更多的约束,该属性必须对应于受支持的 DV 视频配置文件,并对应于帧率。
21.31.1 示例
使用 ffmpeg
转换输入
ffmpeg -i INPUT -s:v 720x480 -pix_fmt yuv411p -r 29.97 -ac 2 -ar 48000 -y out.dv
21.32 ffmetadata
FFmpeg 元数据混合器。
此混合器以 ‘ffmetadata’ 格式写入流的元数据。
有关格式的信息,请参阅 (ffmpeg-formats)元数据章节。
21.32.1 示例
使用 ffmpeg
将输入文件中的元数据提取到 ‘ffmetadata’ 格式的 metadata.ffmeta 文件中
ffmpeg -i INPUT -f ffmetadata metadata.ffmeta
21.33 fifo
FIFO(先进先出)混合器。
‘fifo’ 伪混合器允许通过使用先进先出队列并在单独的线程中运行实际的混合器来分离编码和混合。
这在与 tee 混合器结合使用时尤其有用,并且可以用于将数据发送到具有不同可靠性/写入速度/延迟的多个目标。
目标混合器可以从输出名称中选择,也可以通过 fifo_format 选项指定。
可以选择 ‘fifo’ 混合器在队列已满或输出失败时(例如,如果无法将数据包写入输出)的行为
- 可以透明地重新启动输出,并且在重试之间可以基于实时或已处理的流的时间配置延迟。
- 编码可以在临时故障期间被阻止,或者在 FIFO 队列已满的情况下透明地继续丢弃数据包。
API 用户应该知道,在其 AVFormatContext
中使用的回调函数(interrupt_callback
、io_open
和 io_close
)必须是线程安全的。
21.33.1 选项
- attempt_recovery bool
如果发生故障,请尝试恢复输出。这在与网络输出一起使用时尤其有用,因为它使得可以透明地重新启动流。默认情况下,此选项设置为
false
。- drop_pkts_on_overflow bool
如果设置为
true
,则在 fifo 队列已满的情况下,将丢弃数据包而不是阻止编码器。这使得可以在不延迟输入的情况下继续流传输,但代价是省略了部分流。默认情况下,此选项设置为false
,因此在这种情况下,编码器将被阻止,直到混合器处理完一些数据包,并且不会丢失任何数据包。- fifo_format format_name
指定格式名称。如果无法从输出名称后缀中猜测,则很有用。
- format_opts options
为底层混合器指定格式选项。混合器选项可以指定为以 “:” 分隔的 key=value 对列表。
- max_recovery_attempts count
设置连续不成功的恢复尝试的最大次数,之后输出将永久失败。默认情况下,此选项设置为
0
(无限制)。- queue_size size
将队列的大小指定为数据包的数量。默认值为
60
。- recover_any_error bool
如果设置为
true
,则无论导致失败的错误类型如何,都将尝试恢复。默认情况下,此选项设置为false
,并且在发生某些(通常是永久性的)错误的情况下,即使将 attempt_recovery 选项设置为true
,也不会尝试恢复。- recovery_wait_streamtime bool
如果设置为
false
,则在等待恢复尝试时使用实时(即,将在 recovery_wait_time 选项指定的时间之后尝试恢复)。如果设置为
true
,则改为考虑已处理的流的时间(即,将在丢弃与 recovery_wait_time 选项对应的数据包后尝试恢复)。默认情况下,此选项设置为
false
。- recovery_wait_time duration
指定在前一次不成功的恢复尝试之后,在下一次恢复尝试之前等待的时间(以秒为单位)。默认值为
5
。- restart_with_keyframe bool
指定是否在从队列溢出或失败中恢复后等待关键帧。默认情况下,此选项设置为
false
。- timeshift duration
缓冲指定数量的数据包并延迟写入输出。请注意,queue_size 选项的值必须足够大,以存储用于时移的数据包。在输入结束时,fifo 缓冲区以实时速度刷新。
21.33.2 示例
使用 ffmpeg
流式传输到 RTMP 服务器,即使在临时故障(网络中断)的情况下也以实时速率继续处理流,并尝试每秒无限期地恢复流式传输
ffmpeg -re -i ... -c:v libx264 -c:a aac -f fifo -fifo_format flv \ -drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 \ -map 0:v -map 0:a rtmp://example.com/live/stream_name
21.34 film_cpk
Sega 电影 (.cpk) 混合器。
此格式用作多个 Sega 游戏的内部格式。
有关 Sega 电影文件格式的更多信息,请访问 http://wiki.multimedia.cx/index.php?title=Sega_FILM。
它最多接受一个 ‘cinepak’ 或原始视频流,以及最多一个音频流。
21.35 filmstrip
Adobe Filmstrip 混合器。
此格式由多个 Adobe 工具使用,用于存储生成的胶片条导出。它接受单个原始视频流。
21.36 fits
灵活图像传输系统 (FITS) 混合器。
此图像格式用于存储天文数据。
有关此格式的更多信息,请访问 https://fits.gsfc.nasa.gov。
21.37 flac
原始 FLAC 音频混合器。
此混合器接受恰好一个 FLAC 音频流。此外,还可以添加具有 “attached_pic” 配置的图像。
21.37.1 选项
- write_header bool
如果设置为
true
,则写入文件头,默认为true
21.37.2 示例
使用 ffmpeg
存储输入文件的音频流,以及多个使用 ‘attached_pic’ 处置方式的图片
ffmpeg -i INPUT -i pic1.png -i pic2.jpg -map 0:a -map 1 -map 2 -disposition:v attached_pic OUTPUT
21.38 flv
Adobe Flash 视频格式复用器。
21.38.1 选项
- flvflags 标志
可能的值:
- ‘aac_seq_header_detect’
根据音频流数据放置 AAC 序列头。
- ‘no_sequence_end’
禁用序列结束标签。
- ‘no_metadata’
禁用元数据标签。
- ‘no_duration_filesize’
当流结束时,如果时长和文件大小都为零,则禁用元数据中的时长和文件大小。(用于不可寻址的实时流)。
- ‘add_keyframe_index’
用于方便查找;特别是对于 HTTP 伪流。
21.39 framecrc
每包 CRC(循环冗余校验)测试格式。
此复用器计算并打印每个音频和视频包的 Adler-32 CRC。默认情况下,音频帧在计算 CRC 之前会转换为带符号的 16 位原始音频,而视频帧会转换为原始视频。
复用器的输出包含每行音频和视频数据包,格式如下:
stream_index, packet_dts, packet_pts, packet_duration, packet_size, 0xCRC
CRC 是一个十六进制数,用 0 填充到 8 位,包含数据包的 CRC。
21.39.1 示例
例如,要计算 INPUT 中音频和视频帧的 CRC,转换为原始音频和视频包,并将其存储在文件 out.crc 中,可以使用以下命令:
ffmpeg -i INPUT -f framecrc out.crc
要将信息打印到标准输出,请使用以下命令:
ffmpeg -i INPUT -f framecrc -
使用 ffmpeg
,您可以通过指定音频和视频编解码器来选择在计算每个数据包的 CRC 之前对音频和视频帧进行编码的输出格式。 例如,要计算每个解码的输入音频帧转换为 PCM 无符号 8 位以及每个解码的输入视频帧转换为 MPEG-2 视频的 CRC,请使用以下命令:
ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -
另请参阅 crc 复用器。
21.40 framehash
每包哈希测试格式。
此复用器计算并打印每个音频和视频数据包的加密哈希。这可用于逐包相等性检查,而无需对每个数据包单独进行二进制比较。
默认情况下,音频帧在计算哈希之前会转换为带符号的 16 位原始音频,而视频帧会转换为原始视频,但也可以使用显式转换为其他编解码器的输出。默认情况下它使用 SHA-256 加密哈希函数,但支持多种其他算法。
复用器的输出包含每行音频和视频数据包,格式如下:
stream_index, packet_dts, packet_pts, packet_duration, packet_size, hash
哈希 是一个十六进制数,表示数据包的计算哈希值。
- 哈希 算法
使用字符串 算法 指定的加密哈希函数。支持的值包括
MD5
、murmur3
、RIPEMD128
、RIPEMD160
、RIPEMD256
、RIPEMD320
、SHA160
、SHA224
、SHA256
(默认)、SHA512/224
、SHA512/256
、SHA384
、SHA512
、CRC32
和adler32
。
21.40.1 示例
要计算 INPUT 中音频和视频帧的 SHA-256 哈希值,转换为原始音频和视频数据包,并将其存储在文件 out.sha256 中,可以使用以下命令:
ffmpeg -i INPUT -f framehash out.sha256
要使用 MD5 哈希函数将信息打印到标准输出,请使用以下命令:
ffmpeg -i INPUT -f framehash -hash md5 -
另请参阅 hash 复用器。
21.41 framemd5
每包 MD5 测试格式。
这是 framehash 复用器的一个变体。与该复用器不同,它默认使用 MD5 哈希函数。
21.41.1 示例
要计算 INPUT 中音频和视频帧的 MD5 哈希值,转换为原始音频和视频数据包,并将其存储在文件 out.md5 中,可以使用以下命令:
ffmpeg -i INPUT -f framemd5 out.md5
要将信息打印到标准输出,请使用以下命令:
ffmpeg -i INPUT -f framemd5 -
21.42 gif
动画 GIF 复用器。
请注意,GIF 格式具有非常大的时间基:因此,两个帧之间的延迟不能小于百分之一秒。
21.42.1 选项
- loop bool
设置输出循环的次数。 使用
-1
表示不循环,0
表示无限循环(默认)。- final_delay delay
强制设置最后一帧后的延迟(以百分秒表示)。每一帧都以一个延迟结束,直到下一帧。默认值为
-1
,这是一个特殊值,用于告诉复用器重用之前的延迟。在循环的情况下,您可能需要自定义此值以标记一个暂停时间,例如。
21.42.2 示例
编码一个循环 10 次的 GIF,循环之间延迟 5 秒:
ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif
注意 1:如果您希望将帧提取到单独的 GIF 文件中,则需要强制使用 image2 复用器
ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif"
21.43 gxf
通用交换格式(GXF)复用器。
GXF 由 Grass Valley Group 开发,然后由 SMPTE 标准化为 SMPTE 360M,并在 SMPTE RDD 14-2007 中扩展以包括高清视频分辨率。
它最多接受一个编解码器为 ‘mjpeg’,或 ‘mpeg1video’,或 ‘mpeg2video’,或分辨率为 ‘512x480’ 或 ‘608x576’ 的 ‘dvvideo’ 的视频流,以及多个速率为 48000Hz 且编解码器为 ‘pcm16_le’ 的音频流。
21.44 hash
哈希测试格式。
此复用器计算并打印所有输入音频和视频帧的加密哈希。这可用于相等性检查,而无需进行完整的二进制比较。
默认情况下,音频帧在计算哈希之前会转换为带符号的 16 位原始音频,而视频帧会转换为原始视频,但也可以使用显式转换为其他编解码器的输出。时间戳将被忽略。默认情况下它使用 SHA-256 加密哈希函数,但支持多种其他算法。
复用器的输出由一行组成,格式为:算法=哈希,其中 算法 是一个表示所用哈希函数的短字符串,而 哈希 是表示计算哈希值的十六进制数。
- 哈希 算法
使用字符串 算法 指定的加密哈希函数。支持的值包括
MD5
、murmur3
、RIPEMD128
、RIPEMD160
、RIPEMD256
、RIPEMD320
、SHA160
、SHA224
、SHA256
(默认)、SHA512/224
、SHA512/256
、SHA384
、SHA512
、CRC32
和adler32
。
21.44.1 示例
要计算转换为原始音频和视频的输入的 SHA-256 哈希值,并将其存储在文件 out.sha256 中,可以使用以下命令:
ffmpeg -i INPUT -f hash out.sha256
要将 MD5 哈希打印到标准输出,请使用以下命令:
ffmpeg -i INPUT -f hash -hash md5 -
另请参阅 framehash 复用器。
21.45 hds
HTTP 动态流式传输(HDS)复用器。
HTTP 动态流式传输或 HDS 是由 Adobe 开发的自适应比特率流式传输方法。HDS 通过 HTTP 连接传递 MP4 视频内容。HDS 可用于按需流式传输或实时流式传输。
此复用器会创建一个 .f4m(Adobe Flash Media Manifest File)清单、每个流的 .abst(Adobe Bootstrap File)以及一个指定为输出的目录中的段文件。
这些需要通过 HTTPS 由 HDS 播放器访问,以便它能够在生成的流上执行播放。
21.45.1 选项
- extra_window_size 整数
从磁盘移除之前,保留在清单之外的片段数量
- min_frag_duration 微秒
最小片段时长(以微秒为单位),默认值为 1 秒(
10000000
)- remove_at_exit bool
当设置为
true
时,完成后移除所有片段- window_size 整数
清单中保留的片段数量,如果设置为非
0
的值。默认情况下,所有片段都保留在输出目录中。
21.45.2 示例
使用 ffmpeg
以实时速率将 HDS 文件生成到 output.hds 目录
ffmpeg -re -i INPUT -f hds -b:v 200k output.hds
21.46 hls
Apple HTTP 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
此示例将生成播放列表 out.m3u8 和片段文件:out0.ts、out1.ts、out2.ts 等。
另请参阅 segment 复用器,它提供了更通用和灵活的分段器实现,可用于执行 HLS 分段。
21.46.1 选项
- hls_init_time duration
设置初始目标片段长度。默认值为 0。
duration 必须是时间持续时间规范,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分。
在第一个 m3u8 列表经过此时间后,片段将在下一个关键帧处切割。在初始播放列表填充后,
ffmpeg
将在等于 hls_time 的持续时间处切割片段。- hls_time duration
设置目标片段长度。默认值为 2。
duration 必须是时间持续时间规范,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分。片段将在经过此时间后的下一个关键帧处切割。
- hls_list_size size
设置播放列表条目的最大数量。如果设置为 0,列表文件将包含所有片段。默认值为 5。
- hls_delete_threshold size
设置在
hls_flags delete_segments
删除它们之前,在磁盘上保留的未引用片段的数量。增加此值允许继续客户端下载最近在播放列表中引用的片段。默认值为 1,这意味着早于 hls_list_size+1 的片段将被删除。- hls_start_number_source source
根据指定的源启动播放列表序列号 (
#EXT-X-MEDIA-SEQUENCE
)。除非设置了 hls_flags single_file,否则它还指定片段和字幕文件名的起始序列号的来源。无论如何,如果设置了 hls_flags append_list 并且读取的播放列表序列号大于指定的起始序列号,则该值将用作起始值。它接受以下值
- generic(默认)
根据 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 时,从指定的 number 启动播放列表序列号 (
#EXT-X-MEDIA-SEQUENCE
)。(这是默认情况。)除非设置了 hls_flags single_file,否则它还指定片段和字幕文件名的起始序列号。默认值为 0。- hls_allow_cache bool
显式设置客户端是否可以 (1) 或必须不 (0) 缓存媒体片段。
- hls_base_url baseurl
将 baseurl 附加到播放列表中的每个条目。用于生成带有绝对路径的播放列表很有用。
请注意,播放列表序列号对于每个片段必须是唯一的,并且不要与片段文件名序列号混淆,后者可以是循环的,例如,如果指定了 wrap 选项。
- hls_segment_filename filename
设置片段文件名。除非使用 ‘single_file’ 设置了 hls_flags 选项,否则 filename 将用作字符串格式,并附加片段号。
例如
ffmpeg -i in.nut -hls_segment_filename 'file%03d.ts' out.m3u8
将生成播放列表 out.m3u8 和片段文件:file000.ts、file001.ts、file002.ts 等。
filename 可以包含完整路径或相对路径规范,但只有不带任何路径的文件名部分将包含在 m3u8 片段列表中。如果指定了相对路径,则创建的片段文件的路径将相对于当前工作目录。当设置了 strftime_mkdir 时,filename 的整个展开值将写入 m3u8 片段列表。
当使用两个或多个变体流设置 var_stream_map 时,filename 模式必须包含字符串“%v”,并且此字符串将展开为生成的片段文件名中变体流索引的位置。
例如
ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ -hls_segment_filename 'file_%v_%03d.ts' out_%v.m3u8
将生成播放列表片段文件集:file_0_000.ts、file_0_001.ts、file_0_002.ts 等,以及 file_1_000.ts、file_1_001.ts、file_1_002.ts 等。
字符串“%v”可以出现在文件名中,也可以出现在包含该文件的最后一个目录名称中,但只能出现在其中一个中。(此外,%v 可以在最后一个子目录或文件名中多次出现。)如果字符串 %v 出现在目录名称中,则在展开目录名称模式后创建子目录。这使得可以在子目录中创建与不同变体流相对应的片段。
例如
ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ -hls_segment_filename 'vs%v/file_%03d.ts' vs%v/out.m3u8
将生成播放列表片段文件集:vs0/file_000.ts、vs0/file_001.ts、vs0/file_002.ts 等,以及 vs1/file_000.ts、vs1/file_001.ts、vs1/file_002.ts 等。
- strftime bool
在 filename 上使用
strftime()
以使用本地时间扩展片段文件名。片段编号在此模式下也可用,但要使用它,需要在 hls_flag 中设置 ‘second_level_segment_index’,而 %%d 将是说明符。例如
ffmpeg -i in.nut -strftime 1 -hls_segment_filename 'file-%Y%m%d-%s.ts' out.m3u8
将生成播放列表 out.m3u8 和片段文件:file-20160215-1455569023.ts、file-20160215-1455569024.ts 等。注意:在某些系统/环境中,
%s
说明符不可用。请参阅strftime()
文档。例如
ffmpeg -i in.nut -strftime 1 -hls_flags second_level_segment_index -hls_segment_filename 'file-%Y%m%d-%%04d.ts' out.m3u8
将生成播放列表 out.m3u8 和片段文件:file-20160215-0001.ts、file-20160215-0002.ts 等。
- strftime_mkdir bool
与 strftime 一起使用,它将创建选项 hls_segment_filename 的展开值中存在的所有子目录。
例如
ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y%m%d/file-%Y%m%d-%s.ts' out.m3u8
将创建一个目录 201560215(如果它不存在),然后生成播放列表 out.m3u8 和片段文件:20160215/file-20160215-1455569023.ts、20160215/file-20160215-1455569024.ts 等。
例如
ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y/%m/%d/file-%Y%m%d-%s.ts' out.m3u8
将创建一个目录层次结构 2016/02/15(如果其中任何一个不存在),然后生成播放列表 out.m3u8 和片段文件:2016/02/15/file-20160215-1455569023.ts、2016/02/15/file-20160215-1455569024.ts 等。
- hls_segment_options options_list
使用 :-分隔的 key=value 参数列表设置输出格式选项。包含
:
特殊字符的值必须转义。- hls_key_info_file key_info_file
使用 key_info_file 中的信息进行片段加密。key_info_file 的第一行指定写入播放列表的密钥 URI。密钥 URL 用于在播放期间访问加密密钥。第二行指定用于在加密过程中获取密钥的密钥文件路径。密钥文件以二进制格式读取为单个 16 字节的打包数组。可选的第三行指定初始化向量 (IV) 作为十六进制字符串,用于加密,而不是片段序列号(默认)。如果启用了 hls_flags periodic_rekey,则对 key_info_file 的更改将导致使用新密钥/IV 进行片段加密,并在播放列表中添加新密钥 URI/IV 的条目。
密钥信息文件格式
key URI key file path IV (optional)
密钥 URI 示例
http://server/file.key /path/to/file.key file.key
密钥文件路径示例
file.key /path/to/file.key
IV 示例
0123456789ABCDEF0123456789ABCDEF
密钥信息文件示例
http://server/file.key /path/to/file.key 0123456789ABCDEF0123456789ABCDEF
Shell 脚本示例
#!/bin/sh BASE_URL=${1:-'.'} openssl rand 16 > file.key echo $BASE_URL/file.key > file.keyinfo echo file.key >> file.keyinfo echo $(openssl rand -hex 16) >> file.keyinfo ffmpeg -f lavfi -re -i testsrc -c:v h264 -hls_flags delete_segments \ -hls_key_info_file file.keyinfo out.m3u8
- hls_enc bool
启用 (1) 或禁用 (0) AES128 加密。启用后,生成的每个片段都会被加密,加密密钥将保存为 playlist name.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
设置片段文件头文件的文件名,默认文件名为 init.mp4。
当启用 strftime 时,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 bool
每次刷新 m3u8 文件后重新发送 init 文件,默认为 0。
当使用两个或多个变体流设置 var_stream_map 时,filename 模式必须包含字符串 "%v",此字符串指定生成的 init 文件名中变体流索引的位置。字符串 "%v" 可以出现在文件名或包含该文件的最后一个目录名称中。如果该字符串出现在目录名称中,则在扩展目录名称模式后会创建子目录。这使得可以在子目录中创建与不同变体流对应的 init 文件。
- hls_flags flags
可能的值:
- ‘single_file’
如果设置此标志,则多路复用器会将所有片段存储在单个 MPEG-TS 文件中,并在播放列表中使用字节范围。以此方式生成的 HLS 播放列表的版本号为 4。
例如
ffmpeg -i in.nut -hls_flags single_file out.m3u8
将生成播放列表 out.m3u8 和单个片段文件 out.ts。
- ‘delete_segments’
从播放列表中删除的片段文件,将在等于片段持续时间加上播放列表持续时间的时间段后被删除。
- ‘append_list’
将新片段附加到旧片段列表的末尾,并从旧片段列表中删除
#EXT-X-ENDLIST
。- ‘round_durations’
将播放列表文件片段信息中的持续时间信息舍入为整数值,而不是使用浮点数。如果没有其他需要使用更高 HLS 版本的功能,那么这将允许
ffmpeg
输出 HLS 版本 2 的 m3u8。- ‘discont_start’
在第一个片段的信息之前,将
#EXT-X-DISCONTINUITY
标签添加到播放列表。- ‘omit_endlist’
不要在播放列表末尾附加
EXT-X-ENDLIST
标签。- ‘periodic_rekey’
将定期检查
hls_key_info_file
指定的文件,并检测加密信息的更新。请务必原子地替换此文件,包括包含 AES 加密密钥的文件。- ‘independent_segments’
将
#EXT-X-INDEPENDENT-SEGMENTS
标签添加到包含视频片段的播放列表,并且当该播放列表的所有片段都保证以关键帧开始时。- ‘iframes_only’
将
#EXT-X-I-FRAMES-ONLY
标签添加到包含视频片段且只能在#EXT-X-BYTERANGE
模式下播放 I 帧的播放列表。- ‘split_by_time’
允许片段在关键帧以外的帧上开始。当关键帧之间的时间不一致时,这可以改善某些播放器上的行为,但也可能使其他播放器上的情况更糟,并可能在搜寻期间导致一些奇怪的问题。此标志应与 hls_time 选项一起使用。
- ‘program_date_time’
生成
EXT-X-PROGRAM-DATE-TIME
标签。- ‘second_level_segment_index’
当启用 strftime 选项时,除了日期/时间值之外,还可以在 hls_segment_filename 选项表达式中使用片段索引作为 %%d。要获取带有尾随零的固定宽度数字,可以使用 %%0xd 格式,其中 x 是所需的宽度。
- ‘second_level_segment_size’
当 strftime 启用时,除了日期/时间值之外,还可以在 hls_segment_filename 选项表达式中使用片段大小(以字节为单位计数)作为 %%s。要获取带有尾随零的固定宽度数字,可以使用 %%0xs 格式,其中 x 是所需的宽度。
- ‘second_level_segment_duration’
当 strftime 启用时,除了日期/时间值之外,还可以在 hls_segment_filename 选项表达式中使用片段持续时间(以微秒为单位计算)作为 %%t。要获取带有尾随零的固定宽度数字,可以使用 %%0xt 格式,其中 x 是所需的宽度。
例如
ffmpeg -i sample.mpeg \ -f hls -hls_time 3 -hls_list_size 5 \ -hls_flags second_level_segment_index+second_level_segment_size+second_level_segment_duration \ -strftime 1 -strftime_mkdir 1 -hls_segment_filename "segment_%Y%m%d%H%M%S_%%04d_%%08s_%%013t.ts" stream.m3u8
将生成如下片段:segment_20170102194334_0003_00122200_0000003000000.ts、segment_20170102194334_0004_00120072_0000003000000.ts 等。
- ‘temp_file’
将片段数据写入 filename.tmp,并在片段完成后重命名为文件名。
可以将提供片段的 Web 服务器配置为拒绝访问 *.tmp 的请求,以防止在将正在进行的片段添加到 m3u8 播放列表之前对其进行访问。
此标志还会影响 m3u8 播放列表文件的创建方式。如果设置此标志,则所有播放列表文件都将写入临时文件,并在完成后重命名,就像处理片段一样。但是,无论此标志如何,使用
file
协议且 hls_playlist_type 类型不是 ‘vod’ 的播放列表始终写入临时文件。如果 master_pl_publish_rate 值不为零,则使用
file
协议指定的 master_pl_name 主播放列表文件(如果有)始终写入临时文件,无论此标志如何。
- hls_playlist_type type
如果类型为 ‘event’,则在 m3u8 标头中发出
#EXT-X-PLAYLIST-TYPE:EVENT
。这将强制 hls_list_size 为 0;播放列表只能附加。如果类型为 ‘vod’,则在 m3u8 标头中发出
#EXT-X-PLAYLIST-TYPE:VOD
。这将强制 hls_list_size 为 0;播放列表不得更改。- method method
使用给定的 HTTP 方法创建 hls 文件。
例如
ffmpeg -re -i in.ts -f hls -method PUT http://example.com/live/out.m3u8
将使用 HTTP PUT 方法将所有 mpegts 片段文件上传到 HTTP 服务器,并每
refresh
次使用相同的方法更新 m3u8 文件。请注意,HTTP 服务器必须支持给定的文件上传方法。- http_user_agent agent
覆盖 HTTP 标头中的 User-Agent 字段。仅适用于 HTTP 输出。
- var_stream_map stream_map
指定一个映射字符串,定义如何将音频、视频和字幕流分组到不同的变体流中。变体流组之间用空格分隔。
预期的字符串格式如下:“a:0,v:0 a:1,v:1 ...”。其中,a:、v:、s: 分别是指定音频、视频和字幕流的键。允许的值为 0 到 9(仅基于实际使用情况限制)。
当存在两个或多个变体流时,输出文件名模式必须包含字符串“%v”:此字符串指定输出媒体播放列表文件名中变体流索引的位置。“%v”字符串可以出现在文件名中,也可以出现在包含该文件的最后一个目录名中。如果该字符串出现在目录名中,则在扩展目录名模式后会创建子目录。这使得可以在子目录中创建变体流。
以下是一些示例。
- 创建两个 hls 变体流。第一个变体流将包含比特率为 1000k 的视频流和比特率为 64k 的音频流,第二个变体流将包含比特率为 256k 的视频流和比特率为 32k 的音频流。这里,将创建两个名为 out_0.m3u8 和 out_1.m3u8 的媒体播放列表。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ http://example.com/live/out_%v.m3u8
- 如果你希望在结果名称中使用有意义的文本而不是索引,你可以为每个或某些变体指定名称。以下示例将创建两个与上一个示例相同的 hls 变体流。但在这里,将创建两个名为 out_my_hd.m3u8 和 out_my_sd.m3u8 的媒体播放列表。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0,name:my_hd v:1,a:1,name:my_sd" \ http://example.com/live/out_%v.m3u8
- 创建三个 hls 变体流。第一个变体流将是比特率为 1000k 的纯视频流,第二个变体流将是比特率为 64k 的纯音频流,第三个变体流将是比特率为 256k 的纯视频流。这里,将创建三个名为 out_0.m3u8、out_1.m3u8 和 out_2.m3u8 的媒体播放列表。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k \ -map 0:v -map 0:a -map 0:v -f hls -var_stream_map "v:0 a:0 v:1" \ http://example.com/live/out_%v.m3u8
- 在子目录中创建变体流。在这里,第一个媒体播放列表创建在 http://example.com/live/vs_0/out.m3u8,第二个媒体播放列表创建在 http://example.com/live/vs_1/out.m3u8。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ http://example.com/live/vs_%v/out.m3u8
- 创建两个纯音频和两个纯视频变体流。除了主播放列表中每个变体流的
#EXT-X-STREAM-INF
标签之外,还为两个纯音频变体流添加了#EXT-X-MEDIA
标签,它们使用音频组名称“aud_low”和“aud_high”映射到两个纯视频变体流。默认情况下,会创建一个包含所有编码流的单个 hls 变体。ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k -b:v:1 3000k \ -map 0:a -map 0:a -map 0:v -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low a:1,agroup:aud_high v:0,agroup:aud_low v:1,agroup:aud_high" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8
- 创建两个纯音频和一个纯视频变体流。除了主播放列表中每个变体流的
#EXT-X-STREAM-INF
标签之外,还为两个纯音频变体流添加了#EXT-X-MEDIA
标签,它们使用音频组名称“aud_low”映射到一个纯视频变体流,并且音频组的默认状态为 NO 或 YES。默认情况下,会创建一个包含所有编码流的单个 hls 变体。ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \ -map 0:a -map 0:a -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low,default:yes a:1,agroup:aud_low v:0,agroup:aud_low" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8
- 创建两个纯音频和一个纯视频变体流。除了主播放列表中每个变体流的
#EXT-X-STREAM-INF
标签之外,还为两个纯音频变体流添加了#EXT-X-MEDIA
标签,它们使用音频组名称“aud_low”映射到一个纯视频变体流,并且音频组的默认状态为 NO 或 YES,其中一个音频的语言名为 ENG,另一个音频的语言名为 CHN。默认情况下,会创建一个包含所有编码流的单个 hls 变体。ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \ -map 0:a -map 0:a -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low,default:yes,language:ENG a:1,agroup:aud_low,language:CHN v:0,agroup:aud_low" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8
- 创建一个单一变体流。在主播放列表中添加
#EXT-X-MEDIA
标签,其中TYPE=SUBTITLES
,字幕组名称为“subtitle”,以及可选的字幕名称,例如“English”。确保输入文件至少有一个文本字幕流。ffmpeg -y -i input_with_subtitle.mkv \ -b:v:0 5250k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 \ -b:a:0 256k \ -c:s webvtt -c:a mp2 -ar 48000 -ac 2 -map 0:v -map 0:a:0 -map 0:s:0 \ -f hls -var_stream_map "v:0,a:0,s:0,sgroup:subtitle,sname:English" \ -master_pl_name master.m3u8 -t 300 -hls_time 10 -hls_init_time 4 -hls_list_size \ 10 -master_pl_publish_rate 10 -hls_flags \ delete_segments+discont_start+split_by_time ./tmp/video.m3u8
- 创建两个 hls 变体流。第一个变体流将包含比特率为 1000k 的视频流和比特率为 64k 的音频流,第二个变体流将包含比特率为 256k 的视频流和比特率为 32k 的音频流。这里,将创建两个名为 out_0.m3u8 和 out_1.m3u8 的媒体播放列表。
- cc_stream_map cc_stream_map
映射字符串,指定不同的隐藏式字幕组及其属性。隐藏式字幕流组之间用空格分隔。
预期的字符串格式如下:“ccgroup:<group name>,instreamid:<INSTREAM-ID>,language:<language code> ....”。“ccgroup”和“instreamid”是强制属性。“language”是可选属性。
使用此选项配置的隐藏式字幕组通过在 var_stream_map 字符串中提供相同的“ccgroup”名称映射到不同的变体流。
例如
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -a53cc:0 1 -a53cc:1 1 \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls \ -cc_stream_map "ccgroup:cc,instreamid:CC1,language:en ccgroup:cc,instreamid:CC2,language:sp" \ -var_stream_map "v:0,a:0,ccgroup:cc v:1,a:1,ccgroup:cc" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8
将在主播放列表中为 INSTREAM-ID“CC1”和“CC2”添加两个带有
TYPE=CLOSED-CAPTIONS
的#EXT-X-MEDIA
标签。此外,还将为两个输出变体流添加组名为“cc”的CLOSED-CAPTIONS
属性。如果未设置 var_stream_map,则 cc_stream_map 中第一个可用的 ccgroup 会映射到输出变体流。
例如
ffmpeg -re -i in.ts -b:v 1000k -b:a 64k -a53cc 1 -f hls \ -cc_stream_map "ccgroup:cc,instreamid:CC1,language:en" \ -master_pl_name master.m3u8 \ http://example.com/live/out.m3u8
这将添加带有
TYPE=CLOSED-CAPTIONS
的#EXT-X-MEDIA
标签到主播放列表,组名称为“cc”,语言为“en”(英语),INSTREAM-ID 为“CC1”。此外,还将为输出变体流添加组名为“cc”的CLOSED-CAPTIONS
属性。- master_pl_name 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 count
在指定的片段间隔数之后重复发布主播放列表。
例如
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 bool
使用持久 HTTP 连接。仅适用于 HTTP 输出。
- timeout timeout
设置套接字 I/O 操作的超时时间。仅适用于 HTTP 输出。
- ignore_io_errors bool
忽略打开、写入和删除期间的 IO 错误。适用于具有网络输出的长时间运行。
- headers headers
设置自定义 HTTP 标头,可以覆盖内置的默认标头。仅适用于 HTTP 输出。
21.47 iamf
沉浸式音频模型和格式 (IAMF) 复用器。
IAMF 用于为各种设备上的流媒体和离线应用程序提供沉浸式音频内容。这些应用程序包括互联网音频流媒体、多播/广播服务、文件下载、游戏、通信、虚拟和增强现实等。在这些应用程序中,音频可以在各种设备上播放,例如耳机、手机、平板电脑、电视、条形音箱、家庭影院系统和大屏幕。
此格式由开放媒体联盟推广和设计。
有关此格式的更多信息,请参见 https://aomedia.org/iamf/。
21.48 ico
ICO 文件复用器。
微软的图标文件格式 (ICO) 有一些严格的限制,应该注意
- 任何维度的大小都不能超过 256 像素
- 只能存储 BMP 和 PNG 图像
- 如果使用 BMP 图像,则必须是以下像素格式之一
BMP Bit Depth FFmpeg Pixel Format 1bit pal8 4bit pal8 8bit pal8 16bit rgb555le 24bit bgr24 32bit bgra
- 如果使用 BMP 图像,则必须使用 BITMAPINFOHEADER DIB 标头
- 如果使用 PNG 图像,则必须使用 rgba 像素格式
21.49 ilbc
Internet 低比特率编解码器 (iLBC) 原始复用器。
它接受单个 “ilbc” 音频流。
21.50 image2, image2pipe
图像文件复用器。
‘image2’ 复用器将视频帧写入图像文件。
输出文件名由模式指定,该模式可用于生成按顺序编号的文件系列。模式可能包含字符串“%d”或“%0Nd”,此字符串指定文件名中表示编号的字符的位置。如果使用“%0Nd”形式,则每个文件名中表示数字的字符串将用 0 填充至 N 位数字。可以使用字符串“%%”在模式中指定字面字符“%”。
如果模式包含“%d”或“%0Nd”,则指定的文件列表中的第一个文件名将包含数字 1,所有后续数字将按顺序排列。
该模式可能包含一个后缀,该后缀用于自动确定要写入的图像文件的格式。
例如,模式“img-%03d.bmp”将指定 img-001.bmp、img-002.bmp、...、img-010.bmp 等形式的文件名序列。模式“img%%-%d.jpg”将指定 img%-1.jpg、img%-2.jpg、...、img%-10.jpg 等形式的文件名序列。
图像复用器支持 .Y.U.V 图像文件格式。此格式的特殊之处在于,每个图像帧都由三个文件组成,分别对应于 YUV420P 分量的每个分量。要读取或写入此图像文件格式,请指定“.’Y’ 文件名。复用器将根据需要自动打开‘.U’和‘.V’文件。
‘image2pipe’ 复用器接受与‘image2’复用器相同的选项,但它会忽略模式验证和扩展,因为它应该写入命令输出,而不是实际存储的文件。
21.50.1 选项
- frame_pts bool
如果设置为 1,则使用数据包 PTS(演示时间戳)扩展文件名。默认值为 0。
- start_number count
从指定的数字开始序列。默认值为 1。
- update bool
如果设置为 1,则文件名将始终被解释为仅是一个文件名,而不是模式,并且相应的文件将不断被新图像覆盖。默认值为 0。
- strftime bool
如果设置为 1,则使用
strftime()
中的日期和时间信息扩展文件名。默认值为 0。- atomic_writing bool
将输出写入临时文件,写入完成后将该文件重命名为目标文件名。默认禁用。
- protocol_opts options_list
将协议选项设置为以 : 分隔的键=值参数列表。包含
:
特殊字符的值必须转义。
21.50.2 示例
- 使用
ffmpeg
创建 img-001.jpeg、img-002.jpeg、... 文件序列,从输入视频中每秒提取一个图像ffmpeg -i in.avi -vsync cfr -r 1 -f image2 'img-%03d.jpeg'
请注意,对于
ffmpeg
,如果没有使用-f
选项指定格式,并且输出文件名指定了图像文件格式,则会自动选择 image2 复用器,因此可以将前面的命令写为ffmpeg -i in.avi -vsync cfr -r 1 'img-%03d.jpeg'
另请注意,该模式不一定必须包含“%d”或“%0Nd”,例如,要从输入视频的开头创建一个单独的图像文件 img.jpeg,您可以使用命令
ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
- strftime 选项允许您使用日期和时间信息扩展文件名。有关语法,请查看
strftime()
函数的文档。要从
strftime()
“%Y-%m-%d_%H-%M-%S” 模式生成图像文件,可以使用以下ffmpeg
命令ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"
- 使用当前帧的 PTS 设置文件名
ffmpeg -f v4l2 -r 1 -i /dev/video0 -copyts -f image2 -frame_pts true %d.jpg
- 每秒将桌面内容直接发布到 WebDAV 服务器
ffmpeg -f x11grab -framerate 1 -i :0.0 -q:v 6 -update 1 -protocol_opts method=PUT http://example.com/desktop.jpg
21.51 ircam
Berkeley / IRCAM / CARL Sound Filesystem (BICSF) 格式复用器。
Berkeley/IRCAM/CARL 声音格式,在 1980 年代开发,是多个不同的早期声音文件格式和系统的合并结果,包括加州大学圣地亚哥分校计算机音频研究实验室 (CARL) 的 Gareth Loy 博士开发的 csound 系统、巴黎声学/音乐研究所的 Rob Gross 和 Dan Timis 开发的 IRCAM 声音文件系统,以及伯克利快速文件系统。
它最初是作为伯克利/IRCAM/CARL 声音文件系统的一部分开发的,该系统是一套旨在为在伯克利 UNIX 下运行的音频应用程序实现文件系统的程序。它在学术音乐研究中心特别受欢迎,并在早期计算机生成的作品的创作中使用过多次。
此复用器接受包含 PCM 数据的单个音频流。
21.52 ivf
On2 IVF 复用器。
IVF 由 On2 Technologies(以前称为 Duck Corporation)开发,用于存储内部开发的编解码器。
此复用器接受单个“vp8”、“vp9”或“av1”视频流。
21.53 jacosub
JACOsub 字幕格式复用器。
此复用器接受单个‘jacosub’字幕流。
有关格式的更多信息,请参见 http://unicorn.us.com/jacosub/jscripts.html。
21.54 kvag
Simon & Schuster Interactive VAG 复用器。
此自定义 VAG 容器由一些 Simon & Schuster Interactive 游戏使用,例如“Real War”和“Real War: Rogue States”。
此复用器接受单个 ‘adpcm_ima_ssi’ 音频流。
21.55 lc3
蓝牙 SIG 低复杂度通信编解码器音频 (LC3) 或 ETSI TS 103 634 低复杂度通信编解码器增强版 (LC3plus)。
此复用器接受单个‘lc3’音频流。
21.56 lrc
LRC 歌词文件格式复用器。
LRC(LyRiCs 的缩写)是一种计算机文件格式,可将歌曲歌词与音频文件(例如 MP3、Vorbis 或 MIDI)同步。
此复用器接受单个‘subrip’或‘text’字幕流。
21.56.1 元数据
以下元数据标签将转换为与格式对应的元数据
- title
- album
- artist
- author
- creator
- encoder
- encoder_version
如果未显式设置‘encoder_version’,则会自动设置为 libavformat 版本。
21.57 matroska
Matroska 容器复用器。
此复用器实现 matroska 和 webm 容器规范。
21.57.1 元数据
此复用器中可识别的元数据设置是
- title
设置提供给单个轨道的标题名称。这将映射到作为附件写入的流的 FileDescription 元素。
- language
在 Matroska 语言形式中指定轨道的语言。
该语言可以是 3 个字母的参考文献 ISO-639-2 (ISO 639-2/B) 形式(如法语的“fre”),或混合了国家/地区代码的语言代码,用于表示语言中的特殊用法(如加拿大法语的“fre-ca”)。
- stereo_mode
在单个视频轨道中设置两个视图的立体 3D 视频布局。
以下值可识别
- ‘单声道’
视频不是立体的
- ‘left_right’
两个视图并排排列,左眼视图在左侧
- ‘bottom_top’
两个视图以自上而下的方向排列,左眼视图在底部
- ‘top_bottom’
两个视图以自上而下的方向排列,左眼视图在顶部
- ‘checkerboard_rl’
每个视图都以棋盘交错模式排列,左眼视图在前
- ‘checkerboard_lr’
每个视图都以棋盘交错模式排列,右眼视图在前
- ‘row_interleaved_rl’
每个视图都由基于行的交错构成,右眼视图是第一行
- ‘row_interleaved_lr’
每个视图都由基于行的交错构成,左眼视图是第一行
- ‘col_interleaved_rl’
两个视图以基于列的交错方式排列,右眼视图是第一列
- ‘col_interleaved_lr’
两个视图以基于列的交错方式排列,左眼视图是第一列
- ‘anaglyph_cyan_red’
所有帧都以可通过红青滤镜观看的浮雕格式
- ‘right_left’
两个视图并排排列,右眼视图在左侧
- ‘anaglyph_green_magenta’
所有帧均为红青格式,可通过绿-品红滤镜观看
- ‘block_lr’
双眼视图交织在一个块中,左眼视图在前
- ‘block_rl’
双眼视图交织在一个块中,右眼视图在前
例如,可以使用以下命令行创建一个3D WebM剪辑
ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm
21.57.2 选项
- reserve_index_space size
默认情况下,此混流器在文件末尾写入用于查找的索引(在Matroska术语中称为提示),因为它无法预先知道在文件开头为索引保留多少空间。但是,对于某些用例(例如,可查找但速度较慢的流媒体),将索引放在文件开头很有用。
如果此选项设置为非零值,则混流器将在文件头中保留size字节的空间,然后在混流完成后尝试将提示写入此处。如果保留的空间不足,则不会写入提示,文件将被最终化,写入尾部将返回错误。对于大多数用例,安全的尺寸应约为每小时视频50kB。
请注意,仅当输出可查找时才会写入提示,如果输出不可查找,则此选项无效。
- cues_to_front bool
如果设置,混流器将通过在必要时移动主数据来将索引写入文件开头。这可以与reserve_index_space结合使用,在这种情况下,仅当最初保留的空间不足时,才会移动数据。
如果输出不可查找,则忽略此选项。
- cluster_size_limit size
在群集中最多存储提供的字节数。
如果未指定,则将限制自动设置为合理的硬编码固定值。
- cluster_time_limit duration
在群集中最多存储提供的毫秒数。
如果未指定,则将限制自动设置为合理的硬编码固定值。
- dash bool
创建符合 WebM DASH 规范的 WebM 文件。默认设置为
false
。- dash_track_number index
DASH 流的轨道号。默认设置为
1
。- live bool
写入文件时假设它是一个实时流。默认设置为
false
。- allow_raw_vfw bool
允许原始 VFW 模式。默认设置为
false
。- flipped_raw_rgb bool
如果设置为
true
,则为原始 RGB 位图存储正高度,表示位图是自下而上存储的。请注意,此选项不会翻转位图,必须事先手动完成,例如,通过使用“vflip”滤镜。默认值为false
,表示位图是自上而下存储的。- write_crc32 bool
在每个 1 级元素内部写入 CRC32 元素。默认设置为
true
。此选项对于 WebM 无效。- default_mode mode
控制如何设置输出轨道的 FlagDefault。它会影响播放器默认应播放哪些轨道。默认模式为“passthrough”。
- ‘infer’
每个具有 disposition default 的轨道都将设置 FlagDefault。此外,对于每种类型的轨道(音频、视频或字幕),如果没有此类型的 disposition default 的轨道,则将此类型的第一个轨道标记为默认(如果存在)。即使输入来自缺少默认轨道概念的容器,这也确保以合理的方式设置默认标志。
- ‘infer_no_subs’
此模式与 infer 相同,只是如果没有 disposition default 的字幕轨道,则不会将任何字幕轨道标记为默认。
- ‘passthrough’
在此模式下,仅当相应流的 disposition 中设置了 AV_DISPOSITION_DEFAULT 标志时,才设置 FlagDefault。
21.58 md5
MD5 测试格式。
这是 hash 混流器的一种变体。与该混流器不同,它默认使用 MD5 哈希函数。
21.58.1 示例
- 要计算转换为原始音频和视频的输入的 MD5 哈希值,并将其存储在文件 out.md5 中
ffmpeg -i INPUT -f md5 out.md5
- 要将 MD5 哈希值打印到标准输出
ffmpeg -i INPUT -f md5 -
21.59 microdvd
MicroDVD 字幕格式混流器。
此混流器接受单个“microdvd”字幕流。
21.60 mmf
合成音乐移动应用格式 (SMAF) 格式混流器。
SMAF 是 Yamaha 为便携式电子设备(如手机和个人数字助理)指定的音乐数据格式。
此混流器接受单个“adpcm_yamaha”音频流。
21.61 mp3
MP3 混流器写入带有以下可选功能的原始 MP3 流
- 开头处的 ID3v2 元数据头(默认启用)。支持版本 2.3 和 2.4,
id3v2_version
私有选项控制使用哪个版本(3 或 4)。将id3v2_version
设置为 0 会完全禁用 ID3v2 标头。混流器支持将附加图片(APIC 帧)写入 ID3v2 标头。图片以单个数据包的视频流形式提供给混流器。可以有任意数量的这些流,每个流对应一个 APIC 帧。流元数据标签 title 和 comment 分别映射到 APIC description 和 picture type。有关允许的图片类型,请参见 http://id3.org/id3v2.4.0-frames。
请注意,APIC 帧必须在开头写入,因此混流器将缓冲音频帧,直到它获得所有图片。因此,建议尽快提供图片以避免过度缓冲。
- 紧接在 ID3v2 标头(如果存在)之后的 Xing/LAME 帧。默认情况下启用,但仅当输出可查找时才会写入。可以使用
write_xing
私有选项将其禁用。该帧包含对解码器可能有用的各种信息,例如音频持续时间或编码器延迟。 - 文件末尾的旧式 ID3v1 标签(默认禁用)。可以使用
write_id3v1
私有选项启用它,但由于其功能非常有限,因此不建议使用它。
示例
写入带有 ID3v2.3 标头和 ID3v1 尾部的 mp3
ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3
要将图片附加到 mp3 文件,请使用 map
选择音频和图片流
ffmpeg -i input.mp3 -i cover.png -c copy -map 0 -map 1 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3
写入不带任何额外功能的“干净”MP3
ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3
21.62 mpegts
MPEG 传输流混流器。
此混流器实现 ISO 13818-1 和 ETSI EN 300 468 的一部分。
mpegts 混流器中可识别的元数据设置为 service_provider
和 service_name
。如果未设置,则 service_provider
的默认值为“FFmpeg”,service_name
的默认值为“Service01”。
21.62.1 选项
混流器选项为
- mpegts_transport_stream_id integer
设置“transport_stream_id”。这标识 DVB 中的转发器。默认为
0x0001
。- mpegts_original_network_id integer
设置 ‘original_network_id’。这是 DVB 中网络的唯一标识符。它的主要用途是通过路径 ‘Original_Network_ID, Transport_Stream_ID’ 唯一标识服务。默认值为
0x0001
。- mpegts_service_id 整数
设置 ‘service_id’,在 DVB 中也称为节目。默认值为
0x0001
。- mpegts_service_type 整数
设置节目的 ‘service_type’。默认值为
digital_tv
。接受以下选项- ‘hex_value’
ETSI 300 468 中定义的
0x01
到0xff
之间的任何十六进制值。- ‘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 整数
设置 PMT 的第一个 PID。默认值为
0x1000
,最小值为0x0020
,最大值为0x1ffa
。此选项在 m2ts 模式下无效,此时 PMT PID 固定为0x0100
。- mpegts_start_pid 整数
设置基本流的第一个 PID。默认值为
0x0100
,最小值为0x0020
,最大值为0x1ffa
。此选项在 m2ts 模式下无效,此时基本流 PID 是固定的。- mpegts_m2ts_mode 布尔值
如果设置为
1
,则启用 m2ts 模式。默认值为-1
,禁用 m2ts 模式。- muxrate 整数
设置恒定复用率。默认值为 VBR。
- pes_payload_size 整数
设置 PES 数据包有效载荷的最小字节数。默认值为
2930
。- mpegts_flags 标志
设置 mpegts 标志。接受以下选项
- ‘resend_headers’
在写入下一个数据包之前重新发送 PAT/PMT。
- ‘latm’
使用 LATM 分包化 AAC。
- ‘pat_pmt_at_frames’
在每个视频帧处重新发送 PAT 和 PMT。
- ‘system_b’
符合 System B (DVB) 而不是 System A (ATSC)。
- ‘initial_discontinuity’
将每个流的初始数据包标记为不连续。
- ‘nit’
发送 NIT 表。
- ‘omit_rai’
禁用写入随机访问指示器。
- mpegts_copyts 布尔值
如果值设置为
1
,则保留原始时间戳。默认值为-1
,这将导致时间戳从 0 开始偏移。- omit_video_pes_length 布尔值
省略视频数据包的 PES 数据包长度。默认值为
1
(true)。- pcr_period 整数
覆盖默认的 PCR 重传时间(以毫秒为单位)。默认值为
-1
,这意味着 PCR 间隔将自动确定:CBR 流使用 20 毫秒,VBR 流使用小于 100 毫秒的帧持续时间的最大倍数。- pat_period 时长
PAT/PMT 表之间的最大时间(以秒为单位)。默认值为
0.1
。- sdt_period 时长
SDT 表之间的最大时间(以秒为单位)。默认值为
0.5
。- nit_period 时长
NIT 表之间的最大时间(以秒为单位)。默认值为
0.5
。- tables_version 整数
设置 PAT、PMT、SDT 和 NIT 版本(默认值为
0
,有效值包括 0 到 31)。此选项允许更新流结构,以便标准消费者可以检测到更改。为此,重新打开输出AVFormatContext
(在 API 使用的情况下)或重新启动ffmpeg
实例,循环更改 tables_version 值。ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111 ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111 ... ffmpeg -i source3.ts -codec copy -f mpegts -tables_version 31 udp://1.1.1.1:1111 ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111 ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111 ...
21.62.2 示例
ffmpeg -i file.mpg -c copy \ -mpegts_original_network_id 0x1122 \ -mpegts_transport_stream_id 0x3344 \ -mpegts_service_id 0x5566 \ -mpegts_pmt_start_pid 0x1500 \ -mpegts_start_pid 0x150 \ -metadata service_provider="Some provider" \ -metadata service_name="Some Channel" \ out.ts
21.63 mxf, mxf_d10, mxf_opatom
MXF 复用器。
21.63.1 选项
混流器选项为
- store_user_comments 布尔值
设置是否应存储用户注释(如果可用)或从不存储。IRT D-10 不允许用户注释。因此,默认情况下,为 mxf 和 mxf_opatom 写入用户注释,但不为 mxf_d10 写入。
21.64 null
Null 复用器。
此复用器不生成任何输出文件,主要用于测试或基准测试。
例如,要使用 ffmpeg
进行解码基准测试,可以使用以下命令
ffmpeg -benchmark -i INPUT -f null out.null
请注意,以上命令不会读取或写入 out.null 文件,但 ffmpeg
语法要求指定输出文件。
或者,您可以将命令写为
ffmpeg -benchmark -i INPUT -f null -
21.65 nut
- -syncpoints 标志
更改 nut 中的同步点用法
- default 使用正常的低开销寻道辅助。
- none 完全不使用同步点,降低开销,但使流不可寻道;
不建议使用此选项,因为生成的文件对损坏非常敏感,并且无法寻道。此外,通常同步点的开销可以忽略不计。请注意,可以使用 -
write_index
0 来禁用所有增长的数据表,从而允许复用内存有限且没有这些缺点的无尽流。- timestamped 使用 wallclock 字段扩展同步点。
none 和 timestamped 标志是实验性的。
- -write_index 布尔值
在末尾写入索引,默认情况下写入索引。
ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor
21.66 ogg
Ogg 容器复用器。
- -page_duration 时长
首选页面时长(以微秒为单位)。复用器将尝试创建大约 duration 微秒长的页面。这允许用户在寻道粒度和容器开销之间进行折衷。默认值为 1 秒。值为 0 将填充所有段,使页面尽可能大。值为 1 将在大多数情况下有效使用每个页面 1 个数据包,从而以额外的容器开销为代价提供较小的寻道粒度。
- -serial_offset 值
从中设置流序列号的序列值。将其设置为不同且足够大的值可确保生成的 ogg 文件可以安全地链接在一起。
21.67 rcwt
RCWT (Raw Captions With Time) 是 ccextractor 原生的格式,ccextractor 是一种常用的开源工具,用于处理 608/708 隐藏式字幕 (CC) 源。它可以用于存档原始提取的 CC 比特流,并生成一个源文件,以便稍后处理或转换。该格式允许 ccextractor 和 FFmpeg 之间的互操作性,易于解析,并且可以用于创建 CC 表示的备份。
此复用器实现了截至 2024 年 3 月的规范,该规范自 2014 年 4 月以来一直保持稳定且未更改。
此复用器与 ccextractor 复用 RCWT 的方式有一些细微差别。到目前为止,尚未观察到使用 ccextractor 处理输出时出现任何兼容性问题,但效果可能会有所不同,并且输出将不会完全匹配。
可以在这里找到 RCWT 的免费规范:https://github.com/CCExtractor/ccextractor/blob/master/docs/BINARY_FILE_FORMAT.TXT
21.67.1 示例
- 使用 lavfi 将隐藏式字幕提取到 RCWT
ffmpeg -f lavfi -i "movie=INPUT.mkv[out+subcc]" -map 0:s:0 -c:s copy -f rcwt CC.rcwt.bin
21.68 segment, stream_segment, ssegment
基本流分段器。
此复用器将流输出到多个持续时间几乎固定的单独文件中。可以使用类似于 image2 的方式设置输出文件名模式,或者如果启用了 strftime 选项,则可以使用 strftime
模板。
stream_segment
是一个用于写入流式输出格式的复用器变体,即不需要全局头信息的格式,建议用于输出例如 MPEG 传输流片段。ssegment
是 stream_segment
的较短别名。
每个片段都以所选参考流的关键帧开始,该参考流通过 reference_stream 选项设置。
请注意,如果要对视频文件进行精确分割,则需要使输入关键帧与分割器预期的确切分割时间相对应,否则片段复用器将从指定开始时间之后找到的下一个关键帧开始新片段。
片段复用器最适合处理单一恒定帧率的视频。
可以选择通过设置 segment_list 选项来生成已创建片段的列表。列表类型由 segment_list_type 选项指定。默认情况下,片段列表中的条目文件名设置为相应片段文件的基本名称。
另请参阅 hls 复用器,它为 HLS 分段提供了更具体的实现。
21.68.1 选项
片段复用器支持以下选项
- increment_tc 1|0
如果设置为
1
,则在每个片段之间递增时间码。如果选择此项,则输入需要在第一个视频流中具有时间码。默认值为0
。- reference_stream specifier
设置参考流,由字符串 specifier 指定。如果 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
在每个条目前添加 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"
的列表文件将自动选择此格式。‘ext’ 已弃用,推荐使用 ‘csv’。
- ‘ffconcat’
为创建的片段生成一个 ffconcat 文件。可以使用 FFmpeg concat 解复用器读取生成的文件。
带有后缀
".ffcat"
或".ffconcat"
的列表文件将自动选择此格式。- ‘m3u8’
生成符合 http://tools.ietf.org/id/draft-pantos-http-live-streaming 的扩展 M3U8 文件,版本 3。
带有后缀
".m3u8"
的列表文件将自动选择此格式。
如果未指定,则从列表文件名的后缀推测类型。
- segment_time time
将片段持续时间设置为 time,该值必须是持续时间规范。默认值为 "2"。另请参阅 segment_times 选项。
请注意,除非您在给定时间强制参考流关键帧,否则分割可能不准确。请参阅介绍性说明和下面的示例。
- min_seg_duration time
将最小片段持续时间设置为 time,该值必须是持续时间规范。这可以防止复用器以低于此值的持续时间结束片段。仅在
segment_time
中有效。默认值为 "0"。- segment_atclocktime 1|0
如果设置为 "1",则从 00:00 时钟开始,以规则的时钟时间间隔进行分割。 segment_time 中指定的 time 值用于设置分割间隔的长度。
例如,如果 segment_time 设置为 "900",则可以创建 12:00、12:15、12:30 等的文件。
默认值为 "0"。
- segment_clocktime_offset duration
在使用 segment_atclocktime 时,使用指定的持续时间延迟片段分割时间。
例如,如果 segment_time 设置为 "900",segment_clocktime_offset 设置为 "300",则可以创建 12:05、12:20、12:35 等的文件。
默认值为 "0"。
- segment_clocktime_wrap_duration duration
强制分段器仅在数据包在分段时钟时间之后的指定持续时间内到达复用器时才启动新片段。这样,您可以使分段器更能抵抗本地时间向后跳跃,例如闰秒或从夏令时过渡到标准时间。
默认值是最大可能持续时间,这意味着无论自上次时钟时间以来经过的时间如何,都将启动一个新片段。
- segment_time_delta delta
指定选择片段开始时间时的精度时间,表示为持续时间规范。默认值为 "0"。
当指定 delta 时,如果关键帧的 PTS 满足以下关系,则关键帧将开始一个新片段
PTS >= start_time - time_delta
当分割视频内容时,如果恰好在指定分割时间之前找到关键帧,则此选项很有用,因为视频内容始终在 GOP 边界分割。
特别是可以与 ffmpeg 选项 force_key_frames 结合使用。force_key_frames 指定的关键帧时间可能由于舍入问题而无法准确设置,结果可能导致关键帧时间设置在指定时间之前。对于恒定帧率视频,1/(2*frame_rate) 的值应解决指定时间和 force_key_frames 设置的时间之间的最坏情况不匹配。
- segment_times times
指定分割点列表。times 包含以逗号分隔的持续时间规范列表,按递增顺序排列。另请参阅 segment_time 选项。
- segment_frames frames
指定分割视频帧编号列表。frames 包含以逗号分隔的整数列表,按递增顺序排列。
此选项指定,当找到参考流关键帧并且该帧的序号(从 0 开始)大于或等于列表中的下一个值时,启动一个新的分段。
- segment_wrap limit
当分段索引达到 limit 时,回绕。
- segment_start_number number
设置第一个分段的序号。默认为
0
。- strftime 1|0
使用
strftime
函数定义要写入的新分段的名称。如果选择了此项,则输出分段名称必须包含strftime
函数模板。默认值为0
。- break_non_keyframes 1|0
如果启用,允许分段在关键帧以外的帧开始。当关键帧之间的时间不一致时,这可以改善某些播放器的行为,但可能会使其他播放器的情况更糟,并且可能在搜索期间导致一些奇怪的现象。默认为
0
。- reset_timestamps 1|0
在每个分段的开头重置时间戳,以便每个分段都以接近零的时间戳开始。这是为了方便播放生成的分段。可能不适用于某些复用器/编解码器的组合。默认设置为
0
。- initial_offset offset
指定要应用于输出数据包时间戳的时间戳偏移量。该参数必须是时间持续时间规范,默认为 0。
- write_empty_segments 1|0
如果启用,如果在通常跨越一个分段的期间内没有数据包,则写入一个空分段。否则,该分段将填充下一个写入的数据包。默认为
0
。
请确保在编码时要求闭合 GOP,并将 GOP 大小设置为适合您的片段时间约束。
21.68.2 示例
- 将文件 in.mkv 的内容重新复用为一系列分段 out-000.nut、out-001.nut 等,并将生成的分段列表写入 out.list
ffmpeg -i in.mkv -codec hevc -flags +cgop -g 60 -map 0 -f segment -segment_list out.list out%03d.nut
- 分段输入并为输出分段设置输出格式选项
ffmpeg -i in.mkv -f segment -segment_time 10 -segment_format_options movflags=+faststart out%03d.mp4
- 根据 segment_times 选项指定的分割点来分割输入文件
ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 out%03d.nut
- 使用
ffmpeg
的 force_key_frames 选项在指定的输入位置强制关键帧,同时使用分段选项 segment_time_delta 来考虑设置关键帧时间时可能出现的舍入。ffmpeg -i in.mkv -force_key_frames 1,2,3,5,8,13,21 -codec:v mpeg4 -codec:a pcm_s16le -map 0 \ -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 -segment_time_delta 0.05 out%03d.nut
为了在输入文件中强制关键帧,需要进行转码。
- 根据 segment_frames 选项指定的帧号序列来分割输入文件
ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut
- 使用
libx264
和aac
编码器将 in.mkv 转换为 TS 分段ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a aac -f ssegment -segment_list out.list out%03d.ts
- 分割输入文件,并创建 M3U8 直播播放列表(可用作直播 HLS 源)
ffmpeg -re -i in.mkv -codec copy -map 0 -f segment -segment_list playlist.m3u8 \ -segment_list_flags +live -segment_time 10 out%03d.mkv
21.69 smoothstreaming
Smooth Streaming 复用器生成一组文件(清单、块),适合使用传统 Web 服务器进行服务。
- window_size
指定清单中保留的片段数量。默认为 0(保留所有)。
- extra_window_size
指定在从磁盘删除之前,在清单外保留的片段数量。默认为 5。
- lookahead_count
指定前瞻片段的数量。默认为 2。
- min_frag_duration
指定最小片段持续时间(以微秒为单位)。默认为 5000000。
- remove_at_exit
指定完成后是否删除所有片段。默认为 0(不删除)。
21.70 streamhash
每个流的哈希测试格式。
此复用器计算并打印每个输入帧的加密哈希值,按流进行。这可用于相等性检查,而无需进行完整的二进制比较。
默认情况下,音频帧在计算哈希之前会转换为带符号的 16 位原始音频,而视频帧会转换为原始视频,但也可以使用显式转换为其他编解码器的输出。时间戳将被忽略。默认情况下它使用 SHA-256 加密哈希函数,但支持多种其他算法。
复用器的输出包括每行一个流,格式为:streamindex,streamtype,algo=hash,其中 streamindex 是映射流的索引,streamtype 是一个指示流类型的字符,algo 是一个表示所用哈希函数的短字符串,hash 是一个表示计算的哈希值的十六进制数字。
- 哈希 算法
使用字符串 算法 指定的加密哈希函数。支持的值包括
MD5
、murmur3
、RIPEMD128
、RIPEMD160
、RIPEMD256
、RIPEMD320
、SHA160
、SHA224
、SHA256
(默认)、SHA512/224
、SHA512/256
、SHA384
、SHA512
、CRC32
和adler32
。
21.70.1 示例
要计算转换为原始音频和视频的输入的 SHA-256 哈希值,并将其存储在文件 out.sha256 中,可以使用以下命令:
ffmpeg -i INPUT -f streamhash out.sha256
要将 MD5 哈希打印到标准输出,请使用以下命令:
ffmpeg -i INPUT -f streamhash -hash md5 -
21.71 tee
tee 复用器可用于将相同的数据写入多个输出,例如文件或流。例如,它可用于通过网络流式传输视频并同时将其保存到磁盘。
这与为 ffmpeg
命令行工具指定多个输出不同。使用 tee 复用器,音频和视频数据将只编码一次。对于传统的多个输出,将并行启动多个编码操作,这可能是一个非常昂贵的过程。当直接使用 libavformat API 时,tee 复用器没有用处,因为这样可以直接将相同的数据包馈送到多个复用器。
由于 tee 复用器不代表任何特定的输出格式,因此 ffmpeg 无法自动选择输出流。因此,所有预定的输出流都必须使用 -map
指定。请参阅以下示例。
某些编码器可能需要根据输出格式使用不同的选项;这种自动检测无法与 tee 复用器一起使用,因此需要显式指定。主要示例是 global_header 标志。
从机输出在给定复用器的文件名中指定,用“|”分隔。如果任何从机名称包含“|”分隔符、前导或尾随空格或任何特殊字符,则必须进行转义(请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“引号和转义”部分)。
21.71.1 选项
- use_fifo bool
如果设置为 1,则从机输出将使用 fifo 复用器在单独的线程中处理。这可以补偿输出的不同速度/延迟/可靠性并设置透明恢复。默认情况下,此功能已关闭。
- fifo_options
要传递给 fifo 伪复用器实例的选项。请参阅 fifo。
可以通过在方括号之间,以“:”分隔的 key=value 对列表的形式预先添加复用器选项来为每个从机指定这些选项。如果选项值包含特殊字符或“:”分隔符,则必须进行转义;请注意,这是第二级转义。
还识别以下特殊选项
- f
指定格式名称。如果无法从输出 URL 中猜测,则必须指定。
- bsfs[/spec]
指定要应用于指定输出的比特流过滤器列表。
可以通过将流指定符附加到用
/
分隔的选项来指定给定的比特流过滤器应用于哪个流。spec 必须是流指定符(请参阅格式流指定符)。如果未指定流指定符,则比特流过滤器将应用于输出中的所有流。如果输出包含比特流过滤器无法应用的流(例如,
h264_mp4toannexb
应用于包含音频流的输出),则将导致输出操作失败。比特流过滤器的选项必须以
opt=value
的形式指定。可以指定多个比特流过滤器,用“,”分隔。
- use_fifo bool
允许覆盖单个从机复用器的 tee 复用器 use_fifo 选项。
- fifo_options
允许覆盖单个从机复用器的 tee 复用器 fifo_options。请参阅 fifo。
- select
选择应映射到从机输出的流,通过流指定符指定。如果未指定,则默认为所有映射的流。如果输出格式不接受所有映射的流,则将导致输出操作失败。
可以使用多个用逗号 (
,
) 分隔的流指定符,例如:a:0,v
- onfail
指定输出失败时的行为。可以设置为
abort
(默认)或ignore
。如果此从机输出失败,abort
将导致整个进程失败。ignore
将忽略此输出的失败,因此其他输出将继续而不受影响。
21.71.2 示例
- 编码一些内容,并将其同时存档到 WebM 文件中,并通过 UDP 以 MPEG-TS 流式传输
ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a "archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"
- 如上所述,但即使本地文件输出失败(例如,本地驱动器已满)也继续流式传输
ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a "[onfail=ignore]archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"
- 使用
ffmpeg
编码输入,并将输出发送到三个不同的目标。dump_extra
比特流过滤器用于将额外数据信息添加到所有输出视频关键帧数据包,这是 MPEG-TS 格式要求的。选择选项应用于 out.aac,使其仅包含音频数据包。ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=a]out.aac"
- 与上面相同,但仅选择流
a:1
用于音频输出。请注意,必须执行第二级转义,因为“:”是用于分隔选项的特殊字符。ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=\'a:1\']out.aac"
21.72 webm_chunk
WebM 实时块复用器。
此复用器将 WebM 标头和块写入为单独的文件,这些文件可以被支持通过 DASH 的 WebM 实时流的客户端使用。
21.72.1 选项
此复用器支持以下选项
- chunk_start_index
第一个块的索引(默认为 0)。
- header
将写入初始化数据的标头的文件名。
- audio_chunk_duration
每个音频块的持续时间,以毫秒为单位(默认为 5000)。
21.72.2 示例
ffmpeg -f v4l2 -i /dev/video0 \ -f alsa -i hw:0 \ -map 0:0 \ -c:v libvpx-vp9 \ -s 640x360 -keyint_min 30 -g 30 \ -f webm_chunk \ -header webm_live_video_360.hdr \ -chunk_start_index 1 \ webm_live_video_360_%d.chk \ -map 1:0 \ -c:a libvorbis \ -b:a 128k \ -f webm_chunk \ -header webm_live_audio_128.hdr \ -chunk_start_index 1 \ -audio_chunk_duration 1000 \ webm_live_audio_128_%d.chk
21.73 webm_dash_manifest
WebM DASH 清单复用器。
此复用器实现 WebM DASH 清单规范以生成 DASH 清单 XML。它还支持 DASH 实时流的清单生成。
有关更多信息,请参见
- WebM DASH 规范:https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification
- ISO DASH 规范:http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip
21.73.1 选项
此复用器支持以下选项
- adaptation_sets
此选项具有以下语法:“id=x,streams=a,b,c id=y,streams=d,e”,其中 x 和 y 是自适应集的唯一标识符,a、b、c、d 和 e 是相应音频和视频流的索引。可以使用此选项添加任意数量的自适应集。
- live
将其设置为 1 以创建实时流 DASH 清单。默认值:0。
- chunk_start_index
第一个块的起始索引。这将进入清单中“SegmentTemplate”元素的“startNumber”属性。默认值:0。
- chunk_duration_ms
每个块的持续时间,以毫秒为单位。这将进入清单中“SegmentTemplate”元素的“duration”属性。默认值:1000。
- utc_timing_url
将返回 ISO 格式 UTC 时间戳的页面的 URL。这将进入清单中“UTCTiming”元素的“value”属性。默认值:无。
- time_shift_buffer_depth
保证任何 Representation 可用的最小时间(以秒为单位)的移位缓冲区。这将进入“MPD”元素的“timeShiftBufferDepth”属性。默认值:60。
- minimum_update_period
清单的最小更新周期(以秒为单位)。这将进入“MPD”元素的“minimumUpdatePeriod”属性。默认值:0。
21.73.2 示例
ffmpeg -f webm_dash_manifest -i video1.webm \ -f webm_dash_manifest -i video2.webm \ -f webm_dash_manifest -i audio1.webm \ -f webm_dash_manifest -i audio2.webm \ -map 0 -map 1 -map 2 -map 3 \ -c copy \ -f webm_dash_manifest \ -adaptation_sets "id=0,streams=0,1 id=1,streams=2,3" \ manifest.xml
22 元数据
FFmpeg 能够将媒体文件的元数据转储到简单的 UTF-8 编码的类 INI 文本文件中,然后使用元数据复用器/解复用器将其加载回来。
文件格式如下
- 文件由标头和多个元数据标签组成,这些标签分为多个部分,每个部分位于自己的行上。
- 标头是一个“;FFMETADATA”字符串,后跟一个版本号(现在是 1)。
- 元数据标签的形式为“key=value”
- 紧跟在标头之后的是全局元数据
- 全局元数据之后可能存在每个流/每个章节元数据部分。
- 一个部分以大写部分名称(即 STREAM 或 CHAPTER)在括号(“[”、“]”)中开始,并以下一个部分或文件结尾结束。
- 在章节部分的开头,可能有一个可选的时间基准用于开始/结束值。它必须采用“TIMEBASE=num/den”的形式,其中 num 和 den 是整数。如果缺少时间基准,则假定开始/结束时间以纳秒为单位。
接下来,章节部分必须包含章节的开始和结束时间,形式为“START=num”、“END=num”,其中 num 是正整数。
- 空行和以“;”或“#”开头的行将被忽略。
- 包含特殊字符(“=”、“;”、“#”、“\”和换行符)的元数据键或值必须使用反斜杠“\”进行转义。
- 请注意,元数据中的空格(例如“foo = bar”)被认为是标签的一部分(在上面的示例中,键是“foo ”,值是“ bar”)。
ffmetadata 文件可能如下所示
;FFMETADATA1 title=bike\\shed ;this is a comment artist=FFmpeg troll team [CHAPTER] TIMEBASE=1/1000 START=0 #chapter ends at 0:01:00 END=60000 title=chapter \#1 [STREAM] title=multi\ line
通过使用 ffmetadata 复用器和解复用器,可以将元数据从输入文件提取到 ffmetadata 文件,然后使用编辑过的 ffmetadata 文件将该文件转码为输出文件。
使用 ffmpeg 提取 ffmetadata 文件的方法如下
ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
从 FFMETADATAFILE 文件重新插入编辑过的元数据信息可以这样做
ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT
23 协议选项
libavformat 库提供了一些通用的全局选项,可以在所有协议上设置这些选项。此外,每个协议可能支持所谓的私有选项,这些选项是该组件特有的。
可以通过在 FFmpeg 工具中指定 -option value 来设置选项,或者通过在 AVFormatContext
选项中显式设置该值或使用 libavutil/opt.h API 进行编程使用。
支持的选项列表如下
- protocol_whitelist list (input)
设置一个以“,”分隔的允许协议列表。“ALL”匹配所有协议。以“-”为前缀的协议将被禁用。默认情况下允许所有协议,但另一个协议使用的协议(嵌套协议)被限制为每个协议的子集。
24 协议
协议是 FFmpeg 中配置的元素,可以访问需要特定协议的资源。
配置 FFmpeg 构建时,默认情况下会启用所有受支持的协议。您可以使用配置选项“–list-protocols”列出所有可用的协议。
您可以使用配置选项“–disable-protocols”禁用所有协议,并使用选项“–enable-protocol=PROTOCOL”选择性地启用协议,或者使用选项“–disable-protocol=PROTOCOL”禁用特定协议。
ff* 工具的选项“-protocols”将显示受支持的协议列表。
所有协议都接受以下选项
- rw_timeout
等待(网络)读取/写入操作完成的最长时间,以微秒为单位。
以下是当前可用协议的描述。
24.1 amqp
高级消息队列协议 (AMQP) 版本 0-9-1 是一种基于代理的发布-订阅通信协议。
FFmpeg 必须使用 –enable-librabbitmq 进行编译才能支持 AMQP。还必须运行单独的 AMQP 代理。一个开源的 AMQP 代理示例是 RabbitMQ。
启动代理后,FFmpeg 客户端可以使用以下命令将数据流式传输到代理
ffmpeg -re -i input -f mpegts amqp://[[user]:[password]@]hostname[:port][/vhost]
其中 hostname 和 port(默认为 5672)是代理的地址。客户端还可以设置用户/密码进行身份验证。这两个字段的默认值都是“guest”。可以使用 vhost 设置代理上的虚拟主机名称。默认值为“/”。
多个订阅者可以使用以下命令从代理流式传输数据
ffplay amqp://[[user]:[password]@]hostname[:port][/vhost]
在 RabbitMQ 中,发布到代理的所有数据都通过特定的交换,并且每个订阅客户端都有一个分配的队列/缓冲区。当数据包到达交换时,可能会根据交换和 routing_key 字段将其复制到客户端的队列。
支持以下选项
- exchange
设置在消息代理上使用的交换机。RabbitMQ有几个预定义的交换机:"amq.direct"是默认交换机,发布者和订阅者必须具有匹配的 routing_key;"amq.fanout"与广播操作相同(即,数据会被转发到 fanout 交换机上的所有队列,而与 routing_key 无关);"amq.topic"类似于 "amq.direct",但允许更复杂的模式匹配(请参考 RabbitMQ 文档)。
- routing_key
设置路由键。默认值为 "amqp"。路由键在 "amq.direct" 和 "amq.topic" 交换机上用于决定是否将数据包写入订阅者的队列。
- pkt_size
发送/接收到消息代理的每个数据包的最大大小。默认值为 131072。最小值为 4096,最大值可以是任何较大的值(可以用 int 表示)。接收数据包时,此设置会在 FFmpeg 中设置一个内部缓冲区大小。它应等于或大于发布到消息代理的数据包大小。否则,接收到的消息可能会被截断,从而导致解码错误。
- connection_timeout
在初始连接到消息代理期间的超时时间,以秒为单位。默认值为 rw_timeout,如果未设置 rw_timeout,则为 5 秒。
- delivery_mode mode
设置发送到消息代理的每个消息的传递模式。接受以下值
- ‘persistent’
传递模式设置为 "persistent" (2)。这是默认值。消息可能会根据其设置写入消息代理的磁盘。
- ‘non-persistent’
传递模式设置为 "non-persistent" (1)。消息将保留在消息代理的内存中,除非消息代理的内存压力过大。
24.2 async
用于输入流的异步数据填充包装器。
在后台线程中填充数据,以将 I/O 操作与解复用线程分离。
async:URL async:http://host/resource async:cache:http://host/resource
24.3 bluray
读取 BluRay 播放列表。
接受的选项有
- angle
BluRay 角度
- 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。
URL 语法是
cache:URL
24.5 concat
物理连接协议。
从多个资源按顺序读取和查找,就像它们是唯一的资源一样。
此协议接受的 URL 具有以下语法
concat:URL1|URL2|...|URLN
其中 URL1、URL2、...、URLN 是要连接的资源的 URL,每个 URL 可能指定不同的协议。
例如,要使用 ffplay
读取文件序列 split1.mpeg、split2.mpeg、split3.mpeg,请使用以下命令
ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg
请注意,您可能需要转义字符 "|",该字符对于许多 shell 来说是特殊的。
24.6 concatf
使用换行符分隔的资源列表的物理连接协议。
从多个资源按顺序读取和查找,就像它们是唯一的资源一样。
此协议接受的 URL 具有以下语法
concatf:URL
其中 URL 是包含换行符分隔的要连接的资源列表的 URL,每个 URL 可能指定不同的协议。特殊字符必须使用反斜杠或单引号进行转义。请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的“引用和转义”部分。
例如,要使用 ffplay
读取在文件 split.txt 中以单独行序列出的文件序列 split1.mpeg、split2.mpeg、split3.mpeg,请使用以下命令
ffplay concatf:split.txt
其中 split.txt 包含以下行
split1.mpeg split2.mpeg split3.mpeg
24.7 crypto
AES 加密流读取协议。
接受的选项有
- key
从给定的十六进制表示形式设置 AES 解密密钥二进制块。
- iv
从给定的十六进制表示形式设置 AES 解密初始化向量二进制块。
接受的 URL 格式
crypto:URL crypto+URL
24.8 data
URI 中的内联数据。请参阅 http://en.wikipedia.org/wiki/Data_URI_scheme。
例如,要使用 ffmpeg
转换内联给定的 GIF 文件
ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png
24.9 fd
文件描述符访问协议。
接受的语法是:
fd: -fd file_descriptor
如果未指定 fd,则默认情况下,stdout 文件描述符将用于写入,stdin 用于读取。与管道协议不同,如果 fd 对应于常规文件,则 fd 协议具有查找支持。fd 协议不支持通过 URL 传递文件描述符以确保安全性。
此协议接受以下选项
- blocksize
设置 I/O 操作的最大块大小(以字节为单位)。默认值为
INT_MAX
,这会导致不限制请求的块大小。合理地设置此值可以缩短用户终止请求的响应时间,如果数据传输速度较慢,这将非常有价值。- fd
设置文件描述符。
24.10 file
文件访问协议。
从文件读取或写入文件。
文件 URL 可以具有以下形式
file:filename
其中 filename 是要读取的文件路径。
不具有协议前缀的 URL 将被假定为文件 URL。根据构建情况,看起来像以驱动器号开头的 Windows 路径的 URL 也将被假定为文件 URL(通常在类 Unix 系统的构建中不是这种情况)。
例如,要使用 ffmpeg
从文件 input.mpeg 读取,请使用以下命令
ffmpeg -i file:input.mpeg output.mpeg
此协议接受以下选项
- truncate
如果在写入时设置为 1,则截断现有文件。值为 0 则阻止截断。默认值为 1。
- blocksize
设置 I/O 操作的最大块大小(以字节为单位)。默认值为
INT_MAX
,这会导致不限制请求的块大小。合理地设置此值可以缩短用户终止请求的响应时间,这对于慢速介质上的文件非常有价值。- follow
如果设置为 1,则协议将在文件末尾重试读取,从而允许读取仍在写入的文件。为了使其终止,您需要使用 rw_timeout 选项或使用中断回调(对于 API 用户)。
- seekable
控制是否在文件上声明可查找性。0 表示不可查找,-1 表示自动(对于普通文件可查找,对于命名管道不可查找)。
许多解复用器以不同的方式处理可查找和不可查找的资源,覆盖此设置可能会加速打开某些文件,但代价是失去某些功能(例如,准确查找)。
24.11 ftp
FTP(文件传输协议)。
使用 FTP 协议从远程资源读取或写入远程资源。
需要以下语法。
ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg
此协议接受以下选项。
- timeout
设置底层低级操作使用的套接字 I/O 操作的超时时间(以微秒为单位)。默认设置为 -1,这意味着未指定超时时间。
- ftp-user
设置用于向 FTP 服务器进行身份验证的用户。这会被 FTP URL 中的用户覆盖。
- ftp-password
设置用于 FTP 服务器身份验证的密码。此密码会被 FTP URL 中的密码覆盖,如果未设置用户,则会被 ftp-anonymous-password 覆盖。
- ftp-anonymous-password
以匿名用户身份登录时使用的密码。通常应使用电子邮件地址。
- ftp-write-seekable
控制编码期间连接的可寻址性。如果设置为 1,则认为资源是可寻址的;如果设置为 0,则认为资源不可寻址。默认值为 0。
注意:协议可以用作输出,但不建议这样做,除非采取特殊措施(测试、自定义服务器配置等)。不同的 FTP 服务器在寻址操作期间的行为方式不同。ff* 工具可能由于服务器限制而生成不完整的内容。
24.12 gopher
Gopher 协议。
24.13 gophers
Gophers 协议。
具有 TLS 封装的 Gopher 协议。
24.14 hls
将符合 Apple HTTP Live Streaming 的分段流读取为统一流。描述分段的 M3U8 播放列表可以是远程 HTTP 资源,也可以是使用标准文件协议访问的本地文件。通过在 hls URI 方案名称后指定 “+proto” 来声明嵌套协议,其中 proto 是 “file” 或 “http”。
hls+http://host/path/to/remote/resource.m3u8 hls+file://path/to/local/resource.m3u8
不建议使用此协议 - hls 解复用器应该也能正常工作(如果不能,请报告问题),并且更加完善。要改用 hls 解复用器,只需使用 m3u8 文件的直接 URL 即可。
24.15 http
HTTP(超文本传输协议)。
此协议接受以下选项
- seekable
控制连接的可寻址性。如果设置为 1,则认为资源是可寻址的;如果设置为 0,则认为资源不可寻址;如果设置为 -1,则会尝试自动检测它是否可寻址。默认值为 -1。
- chunked_post
如果设置为 1,则对 POST 使用分块传输编码,默认为 1。
- http_proxy
设置 HTTP 代理以通过隧道传输,例如 http://example.com:1234
- headers
设置自定义 HTTP 标头,可以覆盖内置的默认标头。该值必须是编码标头的字符串。
- content_type
为 POST 消息或侦听模式设置特定的内容类型。
- user_agent
覆盖 User-Agent 标头。如果未指定,协议将使用描述 libavformat 构建的字符串(“Lavf/<版本>”)。
- referer
设置 Referer 标头。在 HTTP 请求中包含 “Referer: URL” 标头。
- multiple_requests
如果设置为 1,则使用持久连接,默认为 0。
- post_data
设置自定义 HTTP post 数据。
- mime_type
导出 MIME 类型。
- http_version
导出 HTTP 响应版本号。通常为“1.0”或“1.1”。
- cookies
设置将在未来请求中发送的 cookie。每个 cookie 的格式与 Set-Cookie HTTP 响应字段的值相同。多个 cookie 可以用换行符分隔。
- icy
如果设置为 1,则从服务器请求 ICY (SHOUTcast) 元数据。如果服务器支持此功能,则应用程序必须通过读取 icy_metadata_headers 和 icy_metadata_packet 选项来检索元数据。默认为 1。
- icy_metadata_headers
如果服务器支持 ICY 元数据,则此项包含 ICY 特定的 HTTP 回复标头,以换行符分隔。
- icy_metadata_packet
如果服务器支持 ICY 元数据,并且 icy 设置为 1,则此项包含服务器发送的最后一个非空元数据包。应用程序应定期轮询此项,以获取流中元数据的更新。
- metadata
设置一个导出的字典,其中包含来自比特流的 Icecast 元数据(如果存在)。仅在使用 C API 时有用。
- auth_type
-
设置 HTTP 身份验证类型。没有摘要的选项,因为此方法需要首先从服务器获取 nonce 参数,并且不能像基本身份验证那样直接使用。
- none
自动选择 HTTP 身份验证类型。这是默认设置。
- basic
-
选择 HTTP 基本身份验证。
基本身份验证发送一个 Base64 编码的字符串,其中包含客户端的用户名和密码。Base64 不是一种加密形式,应视为与以纯文本形式发送用户名和密码相同(Base64 是一种可逆编码)。如果需要保护资源,请强烈考虑使用基本身份验证之外的身份验证方案。HTTPS/TLS 应与基本身份验证一起使用。如果没有这些额外的安全增强功能,则不应使用基本身份验证来保护敏感或有价值的信息。
- send_expect_100
为 POST 发送 Expect: 100-continue 标头。如果设置为 1,则会发送;如果设置为 0,则不会发送;如果设置为 -1,则会尝试在适用时发送。默认值为 -1。
- location
一个导出的字典,其中包含内容位置。仅在使用 C API 时有用。
- offset
设置初始字节偏移量。
- end_offset
尝试将请求限制为该偏移量之前的字节。
- method
当用作客户端选项时,它设置请求的 HTTP 方法。
当用作服务器选项时,它设置将从客户端接收的 HTTP 方法。如果预期和接收的 HTTP 方法不匹配,则会向客户端返回“错误请求”响应。如果未设置,则现在不会检查 HTTP 方法。将来会替换为自动检测。
- reconnect
在 EOF 之前断开连接时自动重新连接。
- reconnect_at_eof
如果设置,则将 eof 视为错误并导致重新连接,这对于实时/无限流很有用。
- reconnect_on_network_error
在连接期间发生 TCP/TLS 错误时自动重新连接。
- reconnect_on_http_error
用于重新连接的 HTTP 状态代码的逗号分隔列表。该列表可以包括特定的状态代码(例如“503”)或字符串“4xx”/“5xx”。
- reconnect_streamed
如果设置,即使是流式/不可寻址的流也会在发生错误时重新连接。
- reconnect_delay_max
设置放弃重新连接的最大延迟时间(以秒为单位)。
- reconnect_max_retries
设置重试连接的最大次数。默认未设置。
- reconnect_delay_total_max
设置放弃重新连接的最大总延迟时间(以秒为单位)。
- respect_retry_after
如果启用并且遇到 Retry-After 标头,则将遵循其请求的重新连接延迟,而不是使用指数退避。对于 429 和 503 错误很有用。默认启用。
- listen
如果设置为 1,则启用实验性 HTTP 服务器。这可以在用作输出选项时用于发送数据,或者在用作输入选项时用于读取来自客户端的 HTTP POST 数据。如果设置为 2,则启用实验性多客户端 HTTP 服务器。这尚未在 ffmpeg.c 中实现,因此不能用作命令行选项。
# Server side (sending): ffmpeg -i somefile.ogg -c copy -listen 1 -f ogg http://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
- resource
当使用实验性 HTTP 服务器时,客户端请求的资源。
- reply_code
当使用实验性 HTTP 服务器时,返回给客户端的 HTTP 代码。
- short_seek_size
设置一个阈值(以字节为单位),当读取操作应该优先选择预读取而不是查找和新的 HTTP 请求时。 例如,这对于确保使用同一连接读取大的视频数据包和中间的小音频数据包非常有用。
24.15.1 HTTP Cookies
某些 HTTP 请求会被拒绝,除非在请求中传递 cookie 值。 cookies 选项允许指定这些 cookie。 至少,每个 cookie 都必须指定一个值以及路径和域。 与域和路径都匹配的 HTTP 请求将自动在 HTTP Cookie 标头字段中包含 cookie 值。 可以使用换行符分隔多个 cookie。
使用 cookie 播放流所需的语法是
ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8
24.16 Icecast
Icecast 协议(将流传输到 Icecast 服务器)
此协议接受以下选项
- ice_genre
设置流派。
- ice_name
设置流名称。
- ice_description
设置流描述。
- ice_url
设置流网站 URL。
- ice_public
设置流是否应该公开。 默认值为 0(不公开)。
- user_agent
覆盖 User-Agent 标头。 如果未指定,将使用“Lavf/<版本>”形式的字符串。
- password
设置 Icecast 挂载点密码。
- content_type
设置流内容类型。 如果与 audio/mpeg 不同,则必须设置此项。
- legacy_icecast
启用对不支持 HTTP PUT 方法但支持 SOURCE 方法的 Icecast 版本 < 2.4.0 的支持。
- 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(微软媒体服务器)协议。
24.19 mmsh
基于 HTTP 的 MMS(微软媒体服务器)协议。
所需的语法是
mmsh://server[:port][/app][/playpath]
24.20 md5
MD5 输出协议。
计算要写入的数据的 MD5 哈希值,并在关闭时将其写入指定的输出或 stdout(如果未指定)。 它可用于在不写入实际文件的情况下测试混流器。
下面是一些示例。
# Write the MD5 hash of the encoded AVI file to the file output.avi.md5. ffmpeg -i input.flv -f avi -y md5:output.avi.md5 # Write the MD5 hash of the encoded AVI file to stdout. ffmpeg -i input.flv -f avi -y md5:
请注意,某些格式(通常是 MOV)要求输出协议是可查找的,因此它们在使用 MD5 输出协议时会失败。
24.21 pipe
UNIX 管道访问协议。
从 UNIX 管道读取和写入。
接受的语法是:
pipe:[number]
如果未指定 fd,则 number 是管道的文件描述符对应的数字(例如,0 代表 stdin,1 代表 stdout,2 代表 stderr)。 如果未指定 number,则默认情况下,stdout 文件描述符将用于写入,stdin 用于读取。
例如,要使用 ffmpeg
从 stdin 读取
cat test.wav | ffmpeg -i pipe:0 # ...this is the same as... cat test.wav | ffmpeg -i pipe:
使用 ffmpeg
写入 stdout
ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi # ...this is the same as... ffmpeg -i test.wav -f avi pipe: | cat > test.avi
此协议接受以下选项
- blocksize
设置 I/O 操作的最大块大小(以字节为单位)。默认值为
INT_MAX
,这会导致不限制请求的块大小。合理地设置此值可以缩短用户终止请求的响应时间,如果数据传输速度较慢,这将非常有价值。- fd
设置文件描述符。
请注意,某些格式(通常是 MOV)要求输出协议是可查找的,因此它们在使用管道输出协议时会失败。
24.22 prompeg
Pro-MPEG 代码实践 #3 版本 2 FEC 协议。
Pro-MPEG CoP#3 FEC 是一种用于通过 RTP 发送的 MPEG-2 传输流的二维奇偶校验前向纠错机制。
此协议必须与 rtp_mpegts
混流器和 rtp
协议一起使用。
所需的语法是
-f rtp_mpegts -fec prompeg=option=val... rtp://hostname:port
列 FEC 流的目标 UDP 端口是 port + 2
,行 FEC 流的目标 UDP 端口是 port + 4
。
此协议接受以下选项
- l=n
列数(4-20,L x D <= 100)
- d=n
行数(4-20,L x D <= 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 服务器上的路径(例如,/ondemand/、/flash/live/ 等)。 也可以通过
rtmp_app
选项覆盖从 URI 解析的值。- playpath
它是要播放的资源相对于 app 中指定的应用程序的路径或名称,可以以 "mp4:" 为前缀。 也可以通过
rtmp_playpath
选项覆盖从 URI 解析的值。- listen
充当服务器,侦听传入的连接。
- timeout
等待传入连接的最大时间。 意味着监听。
此外,可以通过命令行选项设置以下参数(或通过代码中的 AVOption
设置)
- rtmp_app
要在 RTMP 服务器上连接的应用程序名称。 此选项会覆盖 URI 中指定的参数。
- rtmp_buffer
设置客户端缓冲区时间(以毫秒为单位)。 默认值为 3000。
- rtmp_conn
额外的任意 AMF 连接参数,从字符串解析,例如
B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0
。 每个值都以表示类型的单个字符为前缀,B 表示布尔值,N 表示数字,S 表示字符串,O 表示对象,Z 表示 null,后跟一个冒号。 对于布尔值,数据必须分别为 0 或 1 表示 FALSE 或 TRUE。 同样,对于对象,数据必须分别为 0 或 1 表示结束或开始对象。 子对象中的数据项可以命名,方法是用“N”为类型添加前缀,并在值之前指定名称(即NB:myFlag:1
)。 此选项可以多次使用以构造任意 AMF 序列。- rtmp_enhanced_codecs
指定客户端在增强型 RTMP 流中声明支持的编解码器列表。 此选项应设置为以逗号分隔的 fourcc 值列表,例如
hvc1,av01,vp09
用于多个编解码器,或hvc1
用于仅一个编解码器。 指定的列表将显示在 Connect Command Message 的 "fourCcLive" 属性中。- rtmp_flashver
用于运行 SWF 播放器的 Flash 插件的版本。 默认值为 LNX 9,0,124,2。(发布时,默认值为 FMLE/3.0 (compatible; <libavformat version>)。)
- rtmp_flush_interval
在同一请求中刷新的数据包数(仅限 RTMPT)。 默认值为 10。
- rtmp_live
指定媒体为直播流。直播流无法恢复或定位。默认值为
any
,表示订阅者首先尝试播放 playpath 中指定的直播流。如果找不到该名称的直播流,则播放录制的流。其他可能的值为live
和recorded
。- rtmp_pageurl
嵌入媒体的网页 URL。默认情况下,不发送任何值。
- rtmp_playpath
要播放或发布的流标识符。此选项会覆盖 URI 中指定的参数。
- rtmp_subscribe
要订阅的直播流的名称。默认情况下,不发送任何值。仅当指定此选项或将 rtmp_live 设置为 live 时才会发送。
- rtmp_swfhash
解压缩的 SWF 文件的 SHA256 哈希值(32 字节)。
- rtmp_swfsize
解压缩的 SWF 文件的大小,SWFVerification 所必需。
- 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
要发布到受密码保护的服务器,请单独传递 playpath 和应用程序名称
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”、“rtmpt”、“rtmpe”、“rtmps”、“rtmpte”、“rtmpts” 之一,分别对应于每个 RTMP 变体,而 server、port、app 和 playpath 的含义与 RTMP 本机协议中指定的一致。options 包含空格分隔的 key=val 形式的选项列表。
有关更多信息,请参阅 librtmp 手册页(man 3 librtmp)。
例如,要使用 ffmpeg
将文件实时流式传输到 RTMP 服务器
ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream
要使用 ffplay
播放同一流
ffplay "rtmp://myserver/live/mystream live=1"
24.33 rtp
实时传输协议。
RTP URL 的必需语法为
rtp://hostname[:port][?options]
port 指定要使用的 RTP 端口。
options 包含 & 分隔的 key=val 形式的选项列表。
支持以下 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
在 UDP 套接字上执行
connect()
(如果设置为 1)或不执行(如果设置为 0)。- sources=ip[,ip]
列出允许的源 IP 地址。
- block=ip[,ip]
列出不允许的(阻止的)源 IP 地址。
- write_to_source=0|1
将数据包发送到最新接收的数据包的源地址(如果设置为 1)或发送到默认远程地址(如果设置为 0)。
- localport=n
将本地 RTP 端口设置为 n。
这是一个已弃用的选项。应改为使用 localrtpport。
- localaddr=addr
用于发送数据包或加入多播组的网络接口的本地 IP 地址。
- timeout=n
将套接字 I/O 操作的超时时间(以微秒为单位)设置为 n。
重要说明
- 如果未设置 rtcpport,则 RTCP 端口将设置为 RTP 端口值加 1。
- 如果未设置 localrtpport(本地 RTP 端口),则将使用任何可用端口作为本地 RTP 和 RTCP 端口。
- 如果未设置 localrtcpport(本地 RTCP 端口),则会将其设置为本地 RTP 端口值加 1。
24.34 rtsp
实时流协议。
从技术上讲,RTSP 不是 libavformat 中的协议处理程序,而是一个解复用器和复用器。解复用器支持普通的 RTSP(通过 RTP 传输数据;例如,Apple 和 Microsoft 使用此协议)和 Real-RTSP(通过 RDT 传输数据)。
复用器可用于使用 RTSP ANNOUNCE 将流发送到支持它的服务器(目前为 Darwin Streaming Server 和 Mischa Spiegelmock 的 RTSP 服务器)。
RTSP URL 的必需语法为
rtsp://hostname[:port]/path
可以在 ffmpeg
/ffplay
命令行中设置选项,或者通过 AVOption
或在 avformat_open_input
中以代码设置选项。
24.34.1 封装器
支持以下选项。
- rtsp_transport
设置 RTSP 传输协议。
它接受以下值
- ‘udp’
使用 UDP 作为较低的传输协议。
- ‘tcp’
使用 TCP(在 RTSP 控制通道内交错)作为较低的传输协议。
默认值为 ‘0’。
- rtsp_flags
设置 RTSP 标志。
接受以下值
- ‘latm’
对 AAC 使用 MP4A-LATM 分包,而不是 MPEG4-GENERIC。
- ‘rfc2190’
对 H.263 使用 RFC 2190 分包,而不是 RFC 4629。
- ‘skip_rtcp’
不发送 RTCP 发送方报告。
- ‘h264_mode0’
在 RTP 中对 H.264 使用模式 0。
- ‘send_bye’
完成时发送 RTCP BYE 数据包。
默认值为 ‘0’。
- min_port
设置最小本地 UDP 端口。默认值为 5000。
- max_port
设置最大本地 UDP 端口。默认值为 65000。
- buffer_size
设置最大套接字缓冲区大小(以字节为单位)。
- pkt_size
设置最大发送数据包大小(以字节为单位)。默认值为 1472。
24.34.2 解封装器
支持以下选项。
- initial_pause
如果设置为 1,则不立即开始播放流。默认值为 0。
- rtsp_transport
设置 RTSP 传输协议。
它接受以下值
- ‘udp’
使用 UDP 作为较低的传输协议。
- ‘tcp’
使用 TCP(在 RTSP 控制通道内交错)作为较低的传输协议。
- ‘udp_multicast’
使用 UDP 多播作为较低的传输协议。
- ‘http’
使用 HTTP 隧道作为底层传输协议,这对于穿透代理服务器很有用。
- ‘https’
使用 HTTPS 隧道作为底层传输协议,这对于穿透代理服务器很有用,并且出于安全考虑被广泛使用。
可以指定多个底层传输协议,在这种情况下,它们会逐个尝试(如果一个的设置失败,则尝试下一个)。对于复用器,仅支持 ‘tcp’ 和 ‘udp’ 选项。
- rtsp_flags
设置 RTSP 标志。
接受以下值
- ‘filter_src’
仅接受来自协商的对等地址和端口的数据包。
- ‘listen’
充当服务器,侦听传入的连接。
- ‘prefer_tcp’
如果 TCP 可用作 RTSP RTP 传输,则首先尝试 TCP 进行 RTP 传输。
- ‘satip_raw’
导出原始 MPEG-TS 流而不是解复用。该标志将简单地写出原始流,保留原始的 PAT/PMT/PID。
默认值为 ‘none’。
- allowed_media_types
设置要从服务器接受的媒体类型。
接受以下标志
- ‘video’
- ‘audio’
- ‘data’
- ‘subtitle’
默认情况下,它接受所有媒体类型。
- min_port
设置最小本地 UDP 端口。默认值为 5000。
- max_port
设置最大本地 UDP 端口。默认值为 65000。
- listen_timeout
设置建立初始连接的最大超时时间(以秒为单位)。设置 listen_timeout > 0 会将 rtsp_flags 设置为 ‘listen’。默认值为 -1,这意味着当设置 ‘listen’ 模式时,超时时间为无限。
- reorder_queue_size
设置用于处理重新排序的数据包的缓冲区中的数据包数量。
- timeout
以微秒为单位设置套接字 TCP I/O 超时。
- user_agent
覆盖 User-Agent 标头。如果未指定,则默认为 libavformat 标识符字符串。
- buffer_size
设置最大套接字缓冲区大小(以字节为单位)。
当通过 UDP 接收数据时,解复用器会尝试对接收到的数据包进行重新排序(因为它们可能以乱序到达,或者数据包可能完全丢失)。可以通过将最大解复用延迟设置为零(通过 AVFormatContext 的 max_delay
字段)来禁用此功能。
当使用 ffplay
观看多码率 Real-RTSP 流时,可以使用 -vst
n 和 -ast
n 分别选择要显示的视频和音频流,并且可以通过按 v
和 a
动态切换。
24.34.3 示例
以下示例都使用了 ffplay
和 ffmpeg
工具。
- 通过 UDP 观看流,最大重新排序延迟为 0.5 秒
ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
- 观看通过 HTTP 隧道传输的流
ffplay -rtsp_transport http rtsp://server/video.mp4
- 将流实时发送到 RTSP 服务器,供其他人观看
ffmpeg -re -i 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 中不是严格意义上的协议处理程序,而是一个复用器和解复用器。它用于 RTP 流的信令,通过定期在单独的端口上发布流的 SDP 来实现。
24.35.1 封装器
提供给复用器的 SAP URL 的语法为
sap://destination[:port][?options]
RTP 数据包被发送到端口 port 上的 destination,如果没有指定端口,则发送到端口 5004。options 是一个以 &
分隔的列表。支持以下选项
- announce_addr=address
指定用于发送公告的目标 IP 地址。如果省略,则公告将发送到常用的 SAP 公告多播地址 224.2.127.254 (sap.mcast.net),如果 destination 是 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
通过 libsrt 的 Haivision 安全可靠传输协议。
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 实际上是一个内部参数,您应将其设置为不小于 recv_buffer_size 和 mss。默认值相对较大,因此除非您设置非常大的接收器缓冲区,否则不需要更改此选项。默认值为 25600。
- inputbw=bytes/seconds
发送器标称输入速率,以字节/秒为单位。当 maxbw 设置为相对值 (0) 时,与 oheadbw 一起使用,以计算当与主媒体流一起发送恢复数据包时,最大发送速率:inputbw * (100 + oheadbw) / 100。如果未设置 inputbw,而 maxbw 设置为相对值 (0),则实际输入速率在库内部进行评估。默认值为 0。
- iptos=tos
IP 服务类型。仅适用于发送方。默认值为 0xB8。
- ipttl=ttl
IP 生存时间。仅适用于发送方。默认值为 64。
- latency=microseconds
基于时间戳的数据包传递延迟。用于吸收丢失数据包重传的突发。此标志将 rcvlatency 和 peerlatency 都设置为相同的值。请注意,在 1.3.0 之前的版本中,这是设置延迟的唯一标志,但当一方为发送方时,这实际上等同于设置 peerlatency,当一方为接收方时,则等同于设置 rcvlatency,并且不支持双向流发送。
- listen_timeout=microseconds
设置套接字侦听超时。
- maxbw=bytes/seconds
最大发送带宽,以字节/秒为单位。-1 无限(CSRTCC 限制为 30mbps)0 相对于输入速率(请参阅 inputbw)>0 绝对限制值。默认值为 0(相对)。
- mode=caller|listener|rendezvous
连接模式。caller 打开客户端连接。listener 启动服务器以侦听传入连接。rendezvous 使用会合连接模式。默认值为 caller。
- mss=bytes
最大分段大小,以字节为单位。用于缓冲区分配和速率计算,假设数据包已完全填充,使用数据包计数器。使用对等体之间最小的 MSS。在整个互联网中,默认值为 1500。这是 UDP 数据包的最大大小,只能减小,除非您有一些不寻常的专用网络设置。默认值为 1500。
- nakreport=1|0
如果设置为 1,接收方将定期发送“UMSG_LOSSREPORT”消息,直到丢失的数据包被重传或故意丢弃。默认值为 1。
- oheadbw=百分比
高于输入速率的恢复带宽开销,以百分比表示。请参阅 inputbw。默认值为 25%。
- passphrase=字符串
HaiCrypt 加密/解密密码字符串,长度为 10 到 79 个字符。密码是发送方和接收方之间的共享密钥。它用于使用 PBKDF2(基于密码的密钥派生函数)生成密钥加密密钥。仅当 pbkeylen 为非零时才使用。仅当接收到的数据已加密时,才在接收器上使用。配置的密码无法恢复(只写)。
- enforced_encryption=1|0
如果为 true,则连接双方必须设置相同的密码(包括空密码,即不加密)。如果密码不匹配或只有一方未加密,则连接将被拒绝。默认为 true。
- kmrefreshrate=数据包
传输数据包的数量,在此之后加密密钥将切换到新密钥。默认值为 -1。-1 表示自动(srt 库中的 0x1000000)。此选项的范围是 0 到
INT_MAX
之间的整数。- kmpreannounce=数据包
发送新加密密钥和发生切换之间的时间间隔。此值也适用于切换发生和旧加密密钥停用之间的后续间隔。默认值为 -1。-1 表示自动(srt 库中的 0x1000)。此选项的范围是 0 到
INT_MAX
之间的整数。- snddropdelay=微秒
发送方在丢弃数据包之前的额外延迟。此延迟将添加到默认的丢弃延迟时间间隔值。
特殊值 -1:完全不要在发送方丢弃数据包。
- payload_size=字节
设置在实时模式下,单次调用发送函数期间传输的数据包的最大声明大小。如果未使用此值(在文件模式下为默认值),则使用 0。默认值为 -1(自动),通常表示 MPEG-TS;如果要使用 SRT 发送任何其他类型的有效负载,例如,将实时流包装在非常小的帧中,则可以使用更大的最大帧大小,但不大于 1456 字节。
- pkt_size=字节
“payload_size”的别名。
- peerlatency=微秒
由发送方设置为接收方最小值的延迟值(如 rcvlatency 中所述)。
- pbkeylen=字节
发送方加密密钥长度,以字节为单位。只能设置为 0、16、24 和 32。如果不是 0,则启用发送方加密。接收方不需要(设置为 0),密钥大小从 HaiCrypt 握手中的发送方获取。默认值为 0。
- rcvlatency=微秒
自发送数据包时刻起,到在接收函数中将其传递给接收应用程序的时刻之间应经过的时间。此时间应为足够大的缓冲时间,以覆盖发送所花费的时间、意外延长的 RTT 时间以及重传丢失的 UDP 数据包所需的时间。有效延迟值将是此选项值和对等方设置的 peerlatency 值的最大值。在 1.3.0 版本之前,此选项仅作为 latency 可用。
- recv_buffer_size=字节
设置 UDP 接收缓冲区大小,以字节为单位。
- send_buffer_size=字节
设置 UDP 发送缓冲区大小,以字节为单位。
- timeout=微秒
设置读取、写入和连接操作的引发错误超时。请注意,SRT 库具有可以单独控制的内部超时,此处设置的值只是对这些超时的上限。
- tlpktdrop=1|0
过时数据包丢弃。在接收方启用后,它会跳过未及时送达的丢失数据包,并在其播放时间到来时将后续数据包传递给应用程序。它还会向发送方发送伪造的 ACK。在发送方启用并在接收对等方启用后,发送方会丢弃没有机会及时送达的较旧的数据包。如果接收方支持,则在发送方会自动启用。
- sndbuf=字节
设置发送缓冲区大小,以字节为单位。
- rcvbuf=字节
设置接收缓冲区大小,以字节为单位。
接收缓冲区不得大于 ffs。
- lossmaxttl=数据包
重排序容差可能增长到的值。当重排序容差 > 0 时,数据包丢失报告会延迟到该数量的数据包传入。每次出现“迟到”数据包时,重排序容差都会增加,但不是由于重传(即当 UDP 数据包倾向于乱序到达时),而是最新的序列和此数据包的序列之间的差,并且不超过此选项的值。默认情况下为 0,这意味着此机制已关闭,并且在序列中遇到“间隙”时始终立即发送丢失报告。
- minversion
对等体所需的最小 SRT 版本。与不满足最低版本要求的对等体的连接将被拒绝。
十六进制的版本格式为 0xXXYYZZ,对应于人类可读形式的 x.y.z。
- streamid=字符串
一个限制为 512 个字符的字符串,可以在连接之前在套接字上设置。侦听器端可以从 srt_accept 返回的套接字中检索此流 ID,该套接字是由具有该设置的流 ID 的套接字连接的。SRT 不强制对该字符串的内容进行任何特殊解释。此选项在 Rendezvous 连接中没有意义;结果可能是简单的一方会覆盖另一方的值,这取决于运气谁会赢。
- srt_streamid=字符串
“streamid”的别名,以避免与 ffmpeg 命令行选项冲突。
- smoother=live|file
用于该套接字传输的平滑器类型,该平滑器负责传输和拥塞控制。连接双方的平滑器类型必须完全相同,否则连接将被拒绝。
- messageapi=1|0
设置后,此套接字使用消息 API,否则使用缓冲区 API。请注意,在实时模式(请参阅 transtype)中,只有消息 API 可用。在文件模式下,您可以选择使用两种模式之一
流 API(默认,当此选项为 false 时)。在此模式下,您可以使用一个发送指令发送任意多的数据,甚至可以使用直接从文件读取的专用函数。内部工具将处理任何速度和拥塞控制。接收时,您也可以接收任意多的数据,未提取的数据将等待下一次调用。在流模式下,数据部分之间没有边界。
消息 API。在此模式下,您的单个发送指令将传递一个具有边界(消息)的数据片段。与实时模式相反,此消息可以跨越多个 UDP 数据包,唯一的尺寸限制是它应整体适合发送缓冲区。接收方应使用尽可能大的缓冲区来接收消息,否则将不会放弃消息。当消息不完整时(未收到所有数据包或存在数据包丢失),将不会放弃消息。
- transtype=live|file
设置套接字的传输类型,特别是,设置此选项会将多个其他参数设置为特定传输类型所需的默认值。
live: 设置为实时传输的选项。在此模式下,您应该仅使用一个发送指令发送适合一个 UDP 数据包的数据,并限制为 payload_size 中首先定义的值(在此模式下默认为 1316)。此模式下没有速度控制,只有带宽控制(如果已配置),以避免超出包含开销传输(重传和控制数据包)的带宽。
file: 设置为非实时传输的选项。有关更多解释,请参见 messageapi
- linger=秒数
套接字在关闭时等待未发送数据的秒数。默认值为 -1。-1 表示自动(在实时模式下为 0 秒关闭,在文件模式下为 180 秒打开)。此选项的范围是 0 到
INT_MAX
之间的整数。- tsbpd=1|0
如果为 true,则使用基于时间戳的数据包传递模式。默认行为取决于传输类型:在实时模式下启用,在文件模式下禁用。
更多信息请参见:https://github.com/Haivision/srt。
24.38 srtp
安全实时传输协议。
接受的选项有
- srtp_in_suite
- srtp_out_suite
选择输入和输出编码套件。
支持的值
- ‘AES_CM_128_HMAC_SHA1_80’
- ‘SRTP_AES128_CM_HMAC_SHA1_80’
- ‘AES_CM_128_HMAC_SHA1_32’
- ‘SRTP_AES128_CM_HMAC_SHA1_32’
- srtp_in_params
- srtp_out_params
设置输入和输出编码参数,这些参数由二进制块的 base64 编码表示。此二进制块的前 16 个字节用作主密钥,接下来的 14 个字节用作主盐。
24.39 subfile
虚拟提取文件或另一个流的片段。底层流必须是可查找的。
接受的选项
- start
提取片段的起始偏移量,以字节为单位。
- end
提取片段的结束偏移量,以字节为单位。如果设置为 0,则提取到文件末尾。
示例
从 DVD VOB 文件中提取章节(起始和结束扇区从外部获取并乘以 2048)
subfile,,start,153391104,end,268142592,,:/media/dvd/VIDEO_TS/VTS_08_1.VOB
直接从 TAR 存档播放 AVI 文件
subfile,,start,183241728,end,366490624,,:archive.tar
从起始偏移量到结尾播放 MPEG-TS 文件
subfile,,start,32815239,end,0,,:video.ts
24.40 tee
将输出写入多个协议。各个输出之间用 | 分隔
tee:file://path/to/local/this.avi|file://path/to/local/that.avi
24.41 tcp
传输控制协议。
TCP URL 的所需语法是
tcp://hostname:port[?options]
options 包含 & 分隔的 key=val 形式的选项列表。
以下是支持的选项列表。
- listen=2|1|0
侦听传入的连接。0 禁用侦听,1 在单客户端模式下启用侦听,2 在多客户端模式下启用侦听。默认值为 0。
- local_addr=addr
用于 TCP 套接字连接的网络接口的本地 IP 地址。
- local_port=port
用于 TCP 套接字连接的本地端口。
- timeout=微秒
设置引发错误超时,以微秒为单位表示。
此选项仅在读取模式下相关:如果在此时间间隔内没有数据到达,则引发错误。
- listen_timeout=毫秒数
设置侦听超时,以毫秒为单位表示。
- recv_buffer_size=字节
设置接收缓冲区大小,以字节为单位表示。
- send_buffer_size=字节
设置发送缓冲区大小,以字节为单位表示。
- tcp_nodelay=1|0
设置 TCP_NODELAY 以禁用 Nagle 算法。默认值为 0。
备注:当前写入套接字的操作未优化以最小化系统调用,这会降低 TCP_NODELAY 的效率/效果。
- tcp_mss=字节数
设置传出 TCP 数据包的最大段大小,以字节为单位表示。
以下示例显示如何使用 ffmpeg
设置侦听 TCP 连接,然后使用 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
设置)
- ca_file, cafile=文件名
包含要视为受信任的证书颁发机构 (CA) 根证书的文件。如果链接的 TLS 库包含默认值,则可能不需要指定此项即可进行验证,但并非所有库和设置都内置了默认值。该文件必须采用 OpenSSL PEM 格式。
- tls_verify=1|0
如果启用,则尝试验证我们正在与之通信的对等方。请注意,如果使用 OpenSSL,则当前仅确保对等证书由 CA 数据库中的根证书之一签名,但它不会验证该证书是否实际与我们尝试连接的主机名匹配。(对于其他后端,也会验证主机名。)
默认情况下禁用此选项,因为它在许多情况下需要调用者提供 CA 数据库。
- cert_file, cert=文件名
包含要在与对等方握手时使用的证书的文件。(在作为服务器运行时,在侦听模式下,对等方通常更需要此证书,而客户端证书仅在某些设置中是必需的。)
- key_file, key=文件名
包含证书私钥的文件。
- listen=1|0
如果启用,则侦听提供的端口上的连接,并在握手中承担服务器角色而不是客户端角色。
- http_proxy
要通过隧道传输的 HTTP 代理,例如
http://example.com:1234
。代理必须支持 CONNECT 方法。
命令行示例
创建提供输入流的 TLS/SSL 服务器。
ffmpeg -i input -f format tls://hostname:port?listen&cert=server.crt&key=server.key
使用 ffplay
从 TLS/SSL 服务器播放流
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=比特率
如果设置为非零值,如果输入有足够的包来维持它,则输出将具有指定的恒定比特率。
- burst_bits=比特数
当使用 bitrate 时,这将指定数据包突发中的最大比特数。
- localport=端口
覆盖要绑定的本地 UDP 端口。
- localaddr=addr
用于发送数据包或加入多播组的网络接口的本地 IP 地址。
- pkt_size=大小
设置 UDP 数据包的大小(以字节为单位)。
- reuse=1|0
显式允许或禁止重用 UDP 套接字。
- ttl=ttl
设置生存时间值(仅适用于多播)。
- connect=1|0
使用
connect()
初始化 UDP 套接字。在这种情况下,以后不能使用 ff_udp_set_remote_url 更改目标地址。如果开始时不知道目标地址,也可以在 ff_udp_set_remote_url 中指定此选项。这允许使用 getsockname 找出数据包的源地址,并且如果收到“目标不可达”,则使写入返回 AVERROR(ECONNREFUSED)。对于接收,这具有仅接收来自指定对等地址/端口的数据包的优点。- sources=地址[,地址]
仅接收从指定地址发送的数据包。在多播的情况下,也仅订阅来自这些地址的多播流量。
- block=地址[,地址]
忽略从指定地址发送的数据包。在多播的情况下,还会排除多播订阅中的源地址。
- fifo_size=单元
设置 UDP 接收循环缓冲区大小,以 188 字节的数据包数量表示。如果未指定,则默认为 7*4096。
- overrun_nonfatal=1|0
在 UDP 接收循环缓冲区溢出的情况下继续运行。默认值为 0。
- timeout=微秒
设置引发错误超时,以微秒为单位表示。
此选项仅在读取模式下相关:如果在此时间间隔内没有数据到达,则引发错误。
- broadcast=1|0
显式允许或禁止 UDP 广播。
请注意,在具有广播风暴保护的网络上,广播可能无法正常工作。
24.43.1 示例
- 使用
ffmpeg
通过 UDP 流式传输到远程端点ffmpeg -i input -f format udp://hostname:port
- 使用
ffmpeg
通过 UDP 以 mpegts 格式流式传输,使用 188 大小的 UDP 数据包,并使用大输入缓冲区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
设置)
- timeout
超时时间,单位为毫秒。
- listen
在监听模式下创建 Unix 套接字。
24.45 zmq
使用 libzmq 库的 ZeroMQ 异步消息传递。
该库支持单播流传输到多个客户端,而无需依赖外部服务器。
流式传输或连接到流的必需语法是
zmq:tcp://ip-address:port
示例:在端口 5555 上创建本地主机流
ffmpeg -re -i input -f mpegts zmq:tcp://127.0.0.1:5555
多个客户端可以使用以下方式连接到流
ffplay zmq:tcp://127.0.0.1:5555
使用 ZeroMQ 发布-订阅模式实现向多个客户端的流式传输。服务器端绑定到一个端口并发布数据。客户端连接到服务器(通过 IP 地址/端口)并订阅该流。服务器和客户端启动的顺序通常无关紧要。
必须使用 –enable-libzmq 选项编译 ffmpeg 才能支持此协议。
可以在 ffmpeg
/ffplay
命令行中设置选项。支持以下选项
- pkt_size
强制发送/接收数据的最大数据包大小。默认值为 131,072 字节。在服务器端,这将设置通过 ZeroMQ 发送的数据包的最大大小。在客户端,它设置一个用于接收数据包的内部缓冲区大小。请注意,客户端上的 pkt_size 应等于或大于服务器上的 pkt_size。否则,接收到的消息可能会被截断,从而导致解码错误。
25 设备选项
libavdevice 库提供与 libavformat 相同的接口。即,输入设备被视为解复用器,输出设备被视为复用器,并且 libavformat 提供的接口和通用设备选项相同(请参阅 ffmpeg-formats 手册)。
此外,每个输入或输出设备都可能支持所谓的私有选项,这些选项是该组件特有的。
可以通过在 FFmpeg 工具中指定 -option value 来设置选项,或者通过在设备 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/devices。
例如,要使用 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 <INDEX> 和/或 -audio_device_index <INDEX> 按索引选择视频和/或音频输入设备,从而覆盖输入文件名中给出的任何设备名称或索引。
可以使用 -list_devices true 枚举所有可用设备,列出所有设备名称和相应的索引。
有两个设备名称别名
默认
选择相应类型的 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
。- 标准
-
可用值为
- ‘pal’
- ‘ntsc’
- ‘secam’
- ‘paln’
- ‘palm’
- ‘ntscj’
26.5 decklink
decklink 输入设备为 Blackmagic DeckLink 设备提供采集功能。
要启用此输入设备,您需要 Blackmagic DeckLink SDK,并需要使用适当的 --extra-cflags
和 --extra-ldflags
进行配置。在 Windows 上,您需要通过 widl
运行 IDL 文件。
DeckLink 对其支持的格式非常挑剔。输入的像素格式可以使用 raw_format 设置。帧率和视频大小必须使用 -list_formats 1
为您的设备确定。音频采样率始终为 48 kHz,通道数可以是 2、8 或 16。请注意,所有音频通道都捆绑在一个音频轨道中。
26.5.1 选项
- list_devices
如果设置为 true,则打印设备列表并退出。默认为 false。此选项已弃用,请使用 ffmpeg 的
-sources
选项来列出可用的输入设备。- list_formats
如果设置为 true,则打印支持的格式列表并退出。默认为 false。
- format_code <FourCC>
此设置将输入视频格式设置为由 FourCC 给定的格式。要查看您的设备支持的值,请使用 list_formats。请注意,有一个 FourCC 'pal ' 也可以用作 pal (3 个字母)。默认行为是自动检测输入视频格式(如果硬件支持)。
- raw_format
设置捕获的视频的像素格式。可用值为
- ‘auto’
-
这是默认值,表示如果使用格式自动检测,则为 8 位 YUV 422 或 8 位 ARGB,否则为 8 位 YUV 422。
- ‘uyvy422’
-
8 位 YUV 422。
- ‘yuv422p10’
-
10 位 YUV 422。
- ‘argb’
-
8 位 RGB。
- ‘bgra’
-
8 位 RGB。
- ‘rgb10’
-
10 位 RGB。
- teletext_lines
如果设置为非零值,则将从垂直辅助数据中捕获额外的图文电视流。支持 SD PAL (576i) 和 HD (1080i 或 1080p) 源。对于高清源,将解码 OP47 数据包。
此选项是捕获的 SD PAL VBI 行的位掩码,具体来说是第 6 到 22 行和第 318 到 335 行。第 6 行是掩码中的 LSB。将忽略未包含图文电视信息的选定行。您可以使用特殊的 all 常量来选择所有可能的行,或者使用 standard 来跳过与所有接收器不兼容的第 6、318 和 319 行。
对于 SD 源,ffmpeg 需要使用
--enable-libzvbi
编译。对于高清源,在较旧的(4K 前)DeckLink 卡型号上,您必须以 10 位模式捕获。- channels
定义要捕获的音频通道数。必须为 ‘2’、‘8’ 或 ‘16’。默认为 ‘2’。
- duplex_mode
设置 decklink 设备的双工/配置文件模式。必须为 ‘unset’、‘half’、‘full’、‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’。默认为 ‘unset’。
注意:DeckLink SDK 11.0 已将双工属性替换为配置文件属性。对于 DeckLink Duo 2 和 DeckLink Quad 2,配置文件在任何 2 个使用相同连接器的子设备之间共享。对于 DeckLink 8K Pro,配置文件在所有 4 个子设备之间共享。因此,DeckLink 8K Pro 支持四个配置文件。
DeckLink 8K Pro(使用 DeckLink SDK >= 11.0)的有效配置文件模式:‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’
DeckLink Quad 2 和 DeckLink Duo 2 的有效配置文件模式:‘half’、‘full’
- timecode_format
要包含在帧和视频流元数据中的时间码类型。必须为 ‘none’、‘rp188vitc’、‘rp188vitc2’、‘rp188ltc’、‘rp188hfr’、‘rp188any’、‘vitc’、‘vitc2’ 或 ‘serial’。默认为 ‘none’(不包含)。
为了正确支持 50/60 fps 时间码,对于 >30 fps 的内容,查询 ‘rp188any’ 的时间码类型的顺序为 HFR、VITC1、VITC2 和 LTC。请注意,这与 DeckLink API 使用的顺序略有不同,后者为 HFR、VITC1、LTC、VITC2。
- video_input
设置视频输入源。必须为 ‘unset’、‘sdi’、‘hdmi’、‘optical_sdi’、‘component’、‘composite’ 或 ‘s_video’。默认为 ‘unset’。
- audio_input
设置音频输入源。必须为 ‘unset’、‘embedded’、‘aes_ebu’、‘analog’、‘analog_xlr’、‘analog_rca’ 或 ‘microphone’。默认为 ‘unset’。
- video_pts
设置视频数据包时间戳源。必须为 ‘video’、‘audio’、‘reference’、‘wallclock’ 或 ‘abs_wallclock’。默认为 ‘video’。
- audio_pts
设置音频数据包时间戳源。必须为 ‘video’、‘audio’、‘reference’、‘wallclock’ 或 ‘abs_wallclock’。默认为 ‘audio’。
- draw_bars
如果设置为 ‘true’,则在信号丢失时绘制彩色条。默认为 ‘true’。此选项已弃用,请使用
signal_loss_action
选项。- signal_loss_action
设置在信号丢失时要采取的操作。接受以下值之一
- 1, none
信号丢失时不做任何操作。这通常会导致黑帧。
- 2, bars
信号丢失时绘制彩色条。仅支持 8 位输入信号。
- 3, repeat
信号丢失时重复最后一个视频帧。
默认为 ‘bars’。
- queue_size
设置最大输入缓冲区大小(以字节为单位)。如果缓冲达到此值,则将丢弃传入的帧。默认为 ‘1073741824’。
- audio_depth
设置音频采样位深度。必须为 ‘16’ 或 ‘32’。默认为 ‘16’。
- decklink_copyts
如果设置为 true,则按原样转发时间戳,而不删除初始偏移量。默认为 false。
- timestamp_align
捕获起始时间对齐(以秒为单位)。如果设置为非零值,则会丢弃输入帧,直到系统时间戳与配置的值对齐。允许最大为一个帧时长的对齐差异。这对于在部署用于“N 路”冗余的 N 个不同硬件设备之间保持输入同步非常有用。在使用此选项之前,应使用 NTP 或 PTP 等协议同步不同硬件设备的系统时间。请注意,此方法并非万无一失。在某些边界情况下,由于操作系统中的线程调度抖动,可能无法实现输入同步。同步可能会出现 1 帧的错误,或者在更罕见的情况下,会出现 timestamp_align 秒的错误。默认为 ‘0’。
- wait_for_tc (bool)
丢弃帧,直到收到带有时间码的帧。有时,串行时间码不会与第一个输入帧一起接收。如果发生这种情况,存储的流时间码将不准确。如果此选项设置为 true,则会丢弃输入帧,直到收到带有时间码的帧。必须指定选项 timecode_format。默认为 false。
- enable_klv(bool)
如果设置为 true,则从 VANC 中提取 KLV 数据并输出 KLV 数据包。KLV VANC 数据包基于 MID 和 PSC 字段进行连接,并聚合到一个 KLV 数据包中。默认为 false。
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
如果设置为 true,则打印设备列表并退出。
- list_options
如果设置为 true,则打印所选设备的选项列表并退出。
- video_device_number
为具有相同名称的设备设置视频设备编号(从 0 开始,默认为 0)。
- audio_device_number
为具有相同名称的设备设置音频设备编号(从 0 开始,默认为 0)。
- pixel_format
选择 DirectShow 使用的像素格式。仅当未设置视频编解码器或设置为 rawvideo 时,才可以设置此项。
- audio_buffer_size
设置音频设备缓冲区大小(以毫秒为单位)(这会直接影响延迟,具体取决于设备)。默认为使用音频设备的默认缓冲区大小(通常是 500 毫秒的某个倍数)。将此值设置得太低可能会降低性能。另请参阅 http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx
- video_pin_name
按名称或备用名称选择要使用的视频捕获引脚。
- audio_pin_name
按名称或备用名称选择要使用的音频捕获引脚。
- crossbar_video_input_pin_number
选择交叉开关设备的视频输入引脚编号。这将路由到交叉开关设备的视频解码器输出引脚。请注意,更改此值可能会影响将来的调用(设置新的默认值),直到系统重新启动为止。
- crossbar_audio_input_pin_number
选择交叉开关设备的音频输入引脚编号。这将路由到交叉开关设备的音频解码器输出引脚。请注意,更改此值可能会影响将来的调用(设置新的默认值),直到系统重新启动为止。
- show_video_device_dialog
如果设置为 true,则在捕获开始之前,会向最终用户弹出一个显示对话框,允许他们手动更改视频过滤器属性和配置。请注意,对于交叉开关设备,有时可能需要在该对话框中调整值,以在 PAL (25 fps) 和 NTSC (29.97) 输入帧率、大小、隔行扫描等之间切换。更改这些值可以启用不同的扫描速率/帧率,并避免底部的绿色条、闪烁的扫描线等。请注意,对于某些设备,更改这些属性也可能会影响将来的调用(设置新的默认值),直到系统重新启动为止。
- show_audio_device_dialog
如果设置为 true,则在捕获开始之前,会向最终用户弹出一个显示对话框,允许他们手动更改音频过滤器属性和配置。
- show_video_crossbar_connection_dialog
如果设置为 true,则在打开视频设备时,在捕获开始之前,会向最终用户弹出一个显示对话框,允许他们手动修改交叉开关引脚路由。
- show_audio_crossbar_connection_dialog
如果设置为 true,则在打开音频设备时,在捕获开始之前,会向最终用户弹出一个显示对话框,允许他们手动修改交叉开关引脚路由。
- show_analog_tv_tuner_dialog
如果设置为 true,则在捕获开始之前,会向最终用户弹出一个显示对话框,允许他们手动修改电视频道和频率。
- show_analog_tv_tuner_audio_dialog
如果设置为 true,则在捕获开始之前,会向最终用户弹出一个显示对话框,允许他们手动修改电视音频(例如单声道与立体声,语言 A、B 或 C)。
- audio_device_load
从文件加载音频捕获过滤器设备,而不是按名称搜索。如果过滤器支持将其属性序列化,则也可以加载其他参数。要使用此功能,必须指定音频捕获源,但它可以是任何内容,甚至是假的。
- audio_device_save
将当前使用的音频捕获过滤器设备及其参数(如果过滤器支持)保存到文件。如果存在同名文件,则会覆盖该文件。
- video_device_load
从文件加载视频捕获过滤器设备,而不是按名称搜索。如果过滤器支持将其属性序列化,则也可以加载其他参数。要使用此功能,必须指定视频捕获源,但它可以是任何内容,甚至是假的。
- video_device_save
将当前使用的视频捕获过滤器设备及其参数(如果过滤器支持)保存到文件。如果存在同名文件,则会覆盖该文件。
- use_video_device_timestamps
如果设置为 false,视频帧的时间戳将从系统时钟获取,而不是由捕获设备提供的时间戳。这允许绕过提供不可靠时间戳的设备。
26.6.2 示例
- 打印 DirectShow 支持的设备列表并退出
$ ffmpeg -list_devices true -f dshow -i dummy
- 打开视频设备 Camera
$ ffmpeg -f dshow -i video="Camera"
- 打开第二个视频设备,名称为 Camera
$ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
- 打开视频设备 Camera 和音频设备 Microphone
$ 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)。
要使用 ffmpeg
从帧缓冲设备 /dev/fb0 录制
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
或者
hwnd=window_hwnd
第一个选项将捕获整个桌面或桌面的固定区域。第二个和第三个选项将改为捕获单个窗口的内容,而不管其在屏幕上的位置。
例如,要使用 ffmpeg
抓取整个桌面
ffmpeg -f gdigrab -framerate 6 -i desktop out.mpg
抓取位置 10,20
处的 640x480 区域
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
设置视频帧大小。如果选择 desktop,则默认捕获全屏;如果选择 title=window_title,则默认捕获完整窗口大小。
- 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 端口,或指定“auto”以选择连接的第一个端口。
26.9.1 选项
- dvtype
覆盖 DV/HDV 的自动检测。这仅应在自动检测不起作用或应禁止使用其他设备类型时使用。将 DV 设备视为 HDV(或反之亦然)将不起作用,并导致未定义的行为。支持的值为 auto、dv 和 hdv。
- dvbuffer
设置传入数据的最大缓冲区大小,以帧为单位。对于 DV,这是一个精确值。对于 HDV,它不是帧精确的,因为 HDV 没有固定的帧大小。
- dvguid
通过指定其 GUID 来选择捕获设备。捕获将仅从指定的设备执行,如果找不到具有给定 GUID 的设备,则会失败。如果同时连接了多个设备,则此方法可用于选择输入。查看 /sys/bus/firewire/devices 以查找 GUID。
26.9.2 示例
- 抓取并显示 FireWire DV/HDV 设备的输入。
ffplay -f iec61883 -i auto
- 抓取并记录 FireWire DV/HDV 设备的输入,如果源是 HDV,则使用 100000 个数据包的数据包缓冲区。
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
。
以下示例展示了如何使用 ffmpeg
捕获 JACK 可读客户端。
# 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 才能运行。
如果您不理解所有这些含义,则可能不需要此功能。请查看 x11grab。
26.11.1 选项
- device
要在其上捕获的 DRM 设备。默认为 /dev/dri/card0。
- format
帧缓冲的像素格式。如果您运行的是 Linux 5.7 或更高版本,则可以自动检测到该格式,但对于早期版本,则需要提供该格式。默认为 bgr0,这是 Linux 控制台和 Xorg X 服务器使用的最常用格式。
- format_modifier
在输出帧上发信号的格式修饰符。这对于正确导入某些 API 是必需的。如果您运行的是 Linux 5.7 或更高版本,则可以自动检测到该修饰符,但在早期版本中需要明确提供。有关可能的值,请参阅 libdrm 文档。
- crtc_id
用于定义捕获源的 KMS CRTC ID。将使用给定 CRTC 上的第一个活动平面。
- plane_id
KMS 平面 ID,用于定义捕获源。如果未指定 crtc_id 或 plane_id,则默认为找到的第一个活动平面。
- framerate
捕获帧率。这与任何页面翻转或帧缓冲区的更改不同步 - 它只定义了对帧缓冲区进行采样的间隔。采样速度快于帧缓冲区更新速度会生成内容相同的独立帧。默认为
30
。
26.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 滤镜图的打开的输出 pad 读取数据。
对于每个滤镜图打开的输出,输入设备将创建一个对应的流,该流映射到生成的输出。滤镜图通过选项 graph 指定。
26.12.1 选项
- graph
指定要用作输入的滤镜图。每个视频打开的输出必须用一个唯一的字符串标记,形式为 "outN",其中 N 是一个从 0 开始的数字,对应于设备生成的映射输入流。第一个未标记的输出会自动分配给 "out0" 标签,但所有其他输出都需要显式指定。
可以在输出标签后附加后缀 "+subcc",以创建一个额外的流,其中包含附加到该输出的隐藏字幕数据包(实验性的;目前仅适用于 EIA-608 / CEA-708)。子字幕流在所有正常流之后创建,顺序与相应的流相同。例如,如果有 "out19+subcc"、"out7+subcc" 和最多 "out42",则流 #43 是流 #7 的子字幕流,流 #44 是流 #19 的子字幕流。
如果未指定,则默认为为输入设备指定的文件名。
- graph_file
设置要读取并发送到其他滤镜的滤镜图的文件名。滤镜图的语法与选项 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]"
- 将解码的帧转储到图像,并将隐藏字幕转储到 RCWT 备份
ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map v frame%08d.png -map s -c copy -f rcwt subcc.bin
26.13 libcdio
基于 libcdio 的 Audio-CD 输入设备。
要在配置期间启用此输入设备,需要在系统上安装 libcdio。它需要配置选项 --enable-libcdio
。
此设备允许从 Audio-CD 播放和抓取。
例如,要使用 ffmpeg
复制 /dev/sr0 中的整个 Audio-CD,可以运行以下命令
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’
默认值为 ‘disable’。
有关可用恢复模式的更多信息,请查阅偏执项目文档。
26.14 libdc1394
基于 libdc1394 和 libraw1394 的 IIDC1394 输入设备。
需要配置选项 --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
配置 FFmpeg。
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 的一部分,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
如果设置为 true,则打印设备列表并退出。默认为 false。
26.15.2 示例
打印 OpenAL 支持的设备列表并退出
$ ffmpeg -list_devices true -f openal -i dummy out.ogg
从 OpenAL 设备 DR-BT101 via PulseAudio 捕获
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg
从默认设备捕获(注意文件名中的空字符串“)
$ ffmpeg -f openal -i '' out.ogg
在同一个 ffmpeg
命令中同时从两个设备捕获,写入两个不同的文件
$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg
注意:并非所有 OpenAL 实现都支持多个同时捕获 - 如果以上操作不起作用,请尝试最新的 OpenAL Soft。
26.16 oss
开放声音系统(Open Sound System)输入设备。
提供给输入设备的文件名是代表 OSS 输入设备的设备节点,通常设置为 /dev/dsp。
例如,要使用 ffmpeg
从 /dev/dsp 抓取,请使用以下命令:
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 输入设备。
要启用此输出设备,您需要使用 --enable-libpulse
配置 FFmpeg。
提供给输入设备的文件名是源设备或字符串“default”。
要列出 PulseAudio 源设备及其属性,您可以调用命令 pactl list sources
。
有关 PulseAudio 的更多信息,请访问 http://www.pulseaudio.org。
26.17.1 选项
- server
连接到由 IP 地址指定的特定 PulseAudio 服务器。如果未提供,则使用默认服务器。
- 名称
指定 PulseAudio 在显示活动客户端时将使用的应用程序名称,默认为
LIBAVFORMAT_IDENT
字符串。- 流名称
指定 PulseAudio 在显示活动流时将使用的流名称,默认为“record”。
- sample_rate
指定采样率(以 Hz 为单位),默认为 48kHz。
- channels
指定使用的声道数,默认为 2(立体声)。
- 帧大小
此选项不执行任何操作,已被弃用。
- 片段大小
指定 PulseAudio 中最小缓冲片段的大小(以字节为单位),它会影响音频延迟。默认设置为 50 毫秒的数据量。
- 壁钟
使用当前时间设置初始 PTS。默认为 1。
26.17.2 示例
从默认设备录制流
ffmpeg -f pulse -i default /tmp/pulse.wav
26.18 sndio
sndio 输入设备。
要在配置期间启用此输入设备,您需要在系统上安装 libsndio。
提供给输入设备的文件名是代表 sndio 输入设备的设备节点,通常设置为 /dev/audio0。
例如,要使用 ffmpeg
从 /dev/audio0 抓取,请使用以下命令:
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
输入设备选项。
要抓取的设备名称是一个文件设备节点,通常在设备(例如 USB 网络摄像头)插入系统时,Linux 系统会倾向于自动创建此类节点,并且具有类似于 /dev/videoN 的名称,其中 N 是与设备关联的数字。
Video4Linux2 设备通常支持有限的 widthxheight 大小和帧速率。您可以使用 -list_formats all
来检查 Video4Linux2 设备支持哪些。一些设备(如电视卡)支持一个或多个标准。可以使用 -list_standards all
列出所有支持的标准。
时间戳的时间基准是 1 微秒。根据内核版本和配置,时间戳可能来自实时时钟(原点在 Unix Epoch)或单调时钟(原点通常在启动时,不受 NTP 或手动更改时钟的影响)。可以使用 -timestamps abs 或 -ts abs 选项强制转换为实时时钟。
以下是一些使用 ffmpeg
和 ffplay
的 video4linux2 设备的使用示例
- 列出 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 选项
- 标准
设置标准。必须是受支持的标准的名称。要获取支持的标准列表,请使用 list_standards 选项。
- channel
设置输入通道号。默认为 -1,表示使用先前选择的通道。
- video_size
设置视频帧大小。参数必须是 WIDTHxHEIGHT 形式的字符串或有效的尺寸缩写。
- pixel_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]
hostname:display_number.screen_number 指定要从中抓取的屏幕的 X11 显示名称。hostname 可以省略,默认为 “localhost”。环境变量 DISPLAY
包含默认的显示名称。
x_offset 和 y_offset 指定抓取区域相对于 X11 屏幕左上角的偏移量。它们默认为 0。
有关更多详细信息,请查看 X11 文档(例如 man X
)。
使用 xdpyinfo
程序来获取有关 X11 显示属性的基本信息(例如,grep “name” 或 “dimensions”)。
例如,要使用 ffmpeg
从 :0.0 抓取:
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
如果使用了 -show_region 1,则设置区域边框的粗细。范围是 1 到 128,默认值为 3(仅限基于 XCB 的 x11grab)。
例如
ffmpeg -f x11grab -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpg
使用 follow_mouse
ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
- window_id
抓取此窗口,而不是整个屏幕。默认值为 0,它映射到整个屏幕(根窗口)。
可以使用
xwininfo
程序(可能带有 -tree 和 -root 选项)找到窗口的 ID。如果窗口稍后被放大,则不会记录新的区域。当窗口关闭、取消映射(即图标化)或缩小到小于视频尺寸(默认为初始窗口尺寸)时,视频结束。
此选项禁用 follow_mouse 和 select_region 选项。
- video_size
设置视频帧大小。默认为整个桌面或窗口。
- grab_x
- grab_y
设置抓取区域的坐标。它们表示为相对于 X11 窗口左上角的偏移量,对应于设备名称中的 x_offset 和 y_offset 参数。这两个选项的默认值均为 0。
27 输出设备
输出设备是 FFmpeg 中配置的元素,可以将多媒体数据写入连接到您系统的输出设备。
当您配置 FFmpeg 构建时,所有支持的输出设备默认情况下都会启用。您可以使用配置选项“–list-outdevs”列出所有可用的输出设备。
您可以使用配置选项“–disable-outdevs”禁用所有输出设备,并使用选项“–enable-outdev=OUTDEV”选择性地启用一个输出设备,或者使用选项“–disable-outdev=OUTDEV”禁用特定的输入设备。
ff* 工具的“-devices”选项将显示已启用的输出设备列表。
以下是当前可用输出设备的描述。
27.1 alsa
ALSA (Advanced Linux Sound Architecture) 输出设备。
27.1.1 示例
- 在默认 ALSA 设备上播放文件
ffmpeg -i INPUT -f alsa default
- 在声卡 1、音频设备 7 上播放文件
ffmpeg -i INPUT -f alsa hw:1,7
27.2 AudioToolbox
AudioToolbox 输出设备。
允许在 OSX 上本地输出到 CoreAudio 设备。
输出文件名可以为空(或 -
)以引用默认系统输出设备,或者是一个数字,该数字引用使用 -list_devices true
显示的设备索引。
或者,可以使用 -audio_device_index <INDEX> 按索引选择音频输入设备,从而覆盖在输入文件名中给出的任何设备名称或索引。
所有可用的设备都可以使用 -list_devices true 进行枚举,列出所有设备名称、UID 和相应的索引。
27.2.1 选项
AudioToolbox 支持以下选项
- -audio_device_index <INDEX>
按索引指定音频设备。覆盖输出文件名中给出的任何内容。
27.2.2 示例
- 打印支持的设备列表,并向默认设备输出正弦波
$ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -list_devices true -
- 向索引为 2 的设备输出正弦波,覆盖任何输出文件名
$ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -audio_device_index 2 -
27.3 caca
CACA 输出设备。
此输出设备允许在 CACA 窗口中显示视频流。每个应用程序只允许一个 CACA 窗口,因此一个应用程序中只能有一个此输出设备的实例。
要启用此输出设备,您需要使用 --enable-libcaca
配置 FFmpeg。libcaca 是一个图形库,输出文本而不是像素。
有关 libcaca 的更多信息,请查看:http://caca.zoy.org/wiki/libcaca
27.3.1 选项
- window_title
设置 CACA 窗口标题,如果未指定,则默认为为输出设备指定的文件名。
- window_size
设置 CACA 窗口大小,可以是 widthxheight 形式的字符串,也可以是视频大小缩写。如果未指定,则默认为输入视频的大小。
- driver
设置显示驱动程序。
- algorithm
设置抖动算法。抖动是必要的,因为渲染的图片通常比可用调色板的颜色要多得多。接受的值列在
-list_dither algorithms
中。- antialias
设置抗锯齿方法。抗锯齿可以平滑渲染的图像,并避免常见的阶梯效应。接受的值列在
-list_dither antialiases
中。- charset
设置渲染文本时将使用的字符。接受的值列在
-list_dither charsets
中。- 颜色
设置渲染文本时要使用的颜色。接受的值列在
-list_dither colors
中。- list_drivers
如果设置为 true,则打印可用驱动程序列表并退出。
- list_dither
列出与参数相关的可用抖动选项。参数必须是
algorithms
、antialiases
、charsets
、colors
之一。
27.3.2 示例
- 以下命令显示
ffmpeg
输出到 CACA 窗口,强制其大小为 80x25ffmpeg -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
运行 IDL 文件。
DeckLink 对其支持的格式非常挑剔。像素格式始终为 uyvy422,帧速率、场序和视频大小必须使用 -list_formats 1
为您的设备确定。音频采样率始终为 48 kHz。
27.4.1 选项
- list_devices
如果设置为 true,则打印设备列表并退出。默认为 false。此选项已弃用,请使用 ffmpeg 的
-sinks
选项列出可用的输出设备。- list_formats
如果设置为 true,则打印支持的格式列表并退出。默认为 false。
- preroll
视频预卷的时间量(以秒为单位)。默认为 0.5。
- duplex_mode
设置 decklink 设备的双工/配置文件模式。必须为 ‘unset’、‘half’、‘full’、‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’。默认为 ‘unset’。
注意:DeckLink SDK 11.0 已将双工属性替换为配置文件属性。对于 DeckLink Duo 2 和 DeckLink Quad 2,配置文件在任何 2 个使用相同连接器的子设备之间共享。对于 DeckLink 8K Pro,配置文件在所有 4 个子设备之间共享。因此,DeckLink 8K Pro 支持四个配置文件。
DeckLink 8K Pro(使用 DeckLink SDK >= 11.0)的有效配置文件模式:‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’
DeckLink Quad 2 和 DeckLink Duo 2 的有效配置文件模式:‘half’、‘full’
- timing_offset
设置所用输出上的同步锁定定时像素偏移。默认为“unset”。
- link
设置所用输出上的 SDI 视频链路配置。必须为“unset”、“single”链路 SDI、“dual”链路 SDI 或“quad”链路 SDI。默认为“unset”。
- sqd
启用四链路 SDI 输出的方形分割四分模式。必须为“unset”、“true”或“false”。默认为 unset。
- level_a
在所用输出上启用 SMPTE Level A 模式。必须为“unset”、“true”或“false”。默认为 unset。
- vanc_queue_size
设置 VANC 数据的最大输出缓冲区大小(以字节为单位)。如果缓冲达到此值,则将丢弃传出的 VANC 数据。默认为“1048576”。
27.4.2 示例
- 列出输出设备
ffmpeg -sinks decklink
- 列出支持的格式
ffmpeg -i test.avi -f decklink -list_formats 1 'DeckLink Mini Monitor'
- 播放视频剪辑
ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 'DeckLink Mini Monitor'
- 播放具有非标准帧速率或视频大小的视频剪辑
ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 -s 720x486 -r 24000/1001 'DeckLink Mini Monitor'
27.5 fbdev
Linux 帧缓冲区输出设备。
Linux 帧缓冲是图形硬件无关的抽象层,用于在计算机显示器上显示图形,通常在控制台上。它通过文件设备节点访问,通常是 /dev/fb0。
要获取更详细的信息,请阅读 Linux 源代码树中包含的 Documentation/fb/framebuffer.txt 文件。
27.5.1 选项
- xoffset
- yoffset
设置左上角的 x/y 坐标。默认值为 0。
27.5.2 示例
在帧缓冲设备 /dev/fb0 上播放文件。所需的像素格式取决于当前的帧缓冲设置。
ffmpeg -re -i INPUT -c:v rawvideo -pix_fmt bgra -f fbdev /dev/fb0
另请参阅 http://linux-fbdev.sourceforge.net/ 和 fbset(1)。
27.6 opengl
OpenGL 输出设备。已弃用,将被移除。
要启用此输出设备,您需要使用 --enable-opengl
配置 FFmpeg。
此输出设备允许渲染到 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 窗口标题,如果未指定,则默认为输出设备指定的文件名。当设置 no_window 时,此项将被忽略。
- window_size
设置首选窗口大小,可以是 "宽度x高度" 形式的字符串,也可以是视频尺寸缩写。如果未指定,则默认为输入视频的大小,并根据宽高比进行缩放。主要在未设置 no_window 时使用。
27.6.2 示例
使用 OpenGL 渲染在 SDL 窗口上播放文件
ffmpeg -i INPUT -f opengl "window title"
27.7 oss
OSS (Open Sound System) 输出设备。
27.8 pulse
PulseAudio 输出设备。
要启用此输出设备,您需要使用 --enable-libpulse
配置 FFmpeg。
有关 PulseAudio 的更多信息,请访问 http://www.pulseaudio.org
27.8.1 选项
- server
连接到由 IP 地址指定的特定 PulseAudio 服务器。如果未提供,则使用默认服务器。
- 名称
指定 PulseAudio 在显示活动客户端时将使用的应用程序名称,默认为
LIBAVFORMAT_IDENT
字符串。- 流名称
指定 PulseAudio 在显示活动流时使用的流名称,默认设置为指定的输出名称。
- device
指定要使用的设备。未提供时,使用默认设备。可以使用命令
pactl list sinks
获取输出设备列表。- buffer_size
- buffer_duration
控制 PulseAudio 缓冲区的大小和持续时间。小缓冲区提供更多控制,但需要更频繁的更新。
buffer_size 以字节为单位指定大小,而 buffer_duration 以毫秒为单位指定持续时间。
当同时提供这两个选项时,将使用最大值(持续时间根据流参数重新计算为字节)。如果它们设置为 0(默认值),则设备将使用默认的 PulseAudio 持续时间值。默认情况下,PulseAudio 将缓冲区持续时间设置为大约 2 秒。
- prebuf
以字节为单位指定预缓冲大小。服务器在缓冲区中至少有 prebuf 字节可用之前不会开始播放。默认情况下,此选项初始化为与 buffer_size 或 buffer_duration 相同的值(以较大者为准)。
- minreq
以字节为单位指定最小请求大小。服务器不会向客户端请求小于 minreq 字节的数据,而是等待缓冲区有足够的空闲空间以便一次请求更多字节。建议不要设置此选项,它将初始化为服务器认为合理的值。
27.8.2 示例
在默认服务器上的默认设备上播放文件
ffmpeg -i INPUT -f pulse "stream name"
27.9 sdl
SDL (Simple DirectMedia Layer) 输出设备。已弃用,将被移除。
为了在 FFmpeg 中进行监控,可以使用管道和视频播放器(例如 ffplay)
ffmpeg -i INPUT -f nut -c:v rawvideo - | ffplay -
"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 System 窗口中显示视频流。
27.12.1 选项
- display_name
指定硬件显示名称,它确定要使用的显示和通信域。
显示名称或 DISPLAY 环境变量可以是 主机名[:数字[.屏幕号]] 格式的字符串。
主机名 指定物理连接显示器的主机名。数字 指定该主机上的显示服务器的编号。屏幕号 指定该服务器上要使用的屏幕。
如果未指定,则默认为 DISPLAY 环境变量的值。
例如,
dual-headed:0.1
将指定名为“dual-headed”的机器上的显示 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)ffmpeg-utils(1) 手册中的“通道布局”部分。
- clev, center_mix_level
设置中心混音电平。该值以分贝表示,必须在区间 [-32,32] 内。
- slev, surround_mix_level
设置环绕混音电平。该值以分贝表示,必须在区间 [-32,32] 内。
- lfe_mix_level
设置 LFE 混入非 LFE 声道的电平。当存在 LFE 输入但没有 LFE 输出时使用。该值以分贝表示,必须在区间 [-32,32] 内。
- rmvol, rematrix_volume
设置重矩阵音量。默认值为 1.0。
- rematrix_maxval
设置重矩阵的最大输出值。这可以用于防止削波而不是防止音量降低。值为 1.0 可以防止削波。
- flags, swr_flags
设置转换器使用的标志。默认值为 0。
它支持以下单独的标志
- res
强制重采样,即使输入和输出采样率匹配,此标志也会强制使用重采样。
- dither_scale
设置抖动缩放。默认值为 1。
- dither_method
设置抖动方法。默认值为 0。
支持的值
- ‘rectangular’
选择矩形抖动
- ‘triangular’
选择三角抖动
- ‘triangular_hp’
选择带高通的三角抖动
- ‘lipshitz’
选择 Lipshitz 噪声整形抖动。
- ‘shibata’
选择 Shibata 噪声整形抖动。
- ‘low_shibata’
选择低 Shibata 噪声整形抖动。
- ‘high_shibata’
选择高 Shibata 噪声整形抖动。
- ‘f_weighted’
选择 f 加权噪声整形抖动
- ‘modified_e_weighted’
选择修改后的 e 加权噪声整形抖动
- ‘improved_e_weighted’
选择改进的 e 加权噪声整形抖动
- resampler
设置重采样引擎。默认值为 swr。
支持的值
- ‘swr’
选择原生 SW Resampler;在这种情况下,过滤器选项 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,选择通带滚降 none(切比雪夫) & “非理性”比率的更高精度近似。默认值为 0。
- async
仅针对 swr,使用拉伸、挤压、填充和修剪对时间戳进行简单的 1 参数音频同步。将此值设置为 1 将启用填充和修剪,较大的值表示每秒数据可能被拉伸或挤压的最大采样数。默认值为 0,因此不会应用任何补偿来使采样与音频时间戳匹配。
- first_pts
仅针对 swr,假设第一个 pts 应为此值。时间单位为 1 / 采样率。这允许在流的开头进行填充/修剪。默认情况下,不对第一个帧的预期 pts 做任何假设,因此不进行填充或修剪。例如,如果音频流在视频流之后开始,则可以将其设置为 0 以用静音填充开头,或者修剪由于编码器延迟而具有负 pts 的任何采样。
- min_comp
仅针对 swr,设置时间戳和音频数据之间触发拉伸/挤压/填充或修剪数据的最小差异(以秒为单位),以使其与时间戳匹配。默认情况下禁用拉伸/挤压/填充和修剪 (min_comp =
FLT_MAX
)。- min_hard_comp
仅针对 swr,设置时间戳和音频数据之间触发添加/删除采样以使其与时间戳匹配的最小差异(以秒为单位)。此选项实际上是选择硬补偿(修剪/填充)和软补偿(挤压/拉伸)之间的阈值。请注意,默认情况下,所有补偿都通过 min_comp 禁用。默认值为 0.1。
- comp_duration
仅针对 swr,设置拉伸/挤压数据以使其与时间戳匹配的持续时间(以秒为单位)。必须是非负双精度浮点值,默认值为 1.0。
- max_soft_comp
仅针对 swr,设置拉伸/挤压数据以使其与时间戳匹配的最大因子。必须是非负双精度浮点值,默认值为 0。
- matrix_encoding
选择矩阵立体声编码。
它接受以下值
- ‘none’
选择 none
- ‘dolby’
选择 Dolby
- ‘dplii’
选择 Dolby Pro Logic II
默认值为
none
。- filter_type
仅针对 swr,选择重采样过滤器类型。这只会影响重采样操作。
它接受以下值
- ‘cubic’
选择三次
- ‘blackman_nuttall’
选择 Blackman Nuttall 加窗 sinc
- ‘kaiser’
选择 Kaiser 加窗 sinc
- kaiser_beta
仅针对 swr,设置 Kaiser 窗口 beta 值。必须是区间 [2,16] 内的双精度浮点值,默认值为 9。
- output_sample_bits
仅针对 swr,设置用于抖动的输出采样位数。必须是区间 [0,64] 内的整数,默认值为 0,表示不使用。
29 缩放器选项
视频缩放器支持以下命名选项。
可以通过在 FFmpeg 工具中指定 -option value 来设置选项,但下面会指出一些仅限 API 的例外情况。对于编程使用,可以在 SwsContext
选项中显式设置它们,或者通过 libavutil/opt.h API 设置。
- sws_flags
设置缩放器标志。这也可用于设置缩放算法。只能选择单个算法。默认值为 ‘bicubic’。
它接受以下值
- ‘fast_bilinear’
选择快速双线性缩放算法。
- ‘bilinear’
选择双线性缩放算法。
- ‘bicubic’
选择双三次缩放算法。
- ‘experimental’
选择实验性缩放算法。
- ‘neighbor’
选择最近邻重缩放算法。
- ‘area’
选择平均区域重缩放算法。
- ‘bicublin’
选择对亮度分量使用双三次缩放算法,对色度分量使用双线性缩放算法。
- ‘gauss’
选择高斯重缩放算法。
- ‘sinc’
选择 sinc 重缩放算法。
- ‘lanczos’
选择 Lanczos 重缩放算法。默认宽度(alpha)为 3,可以通过设置
param0
来更改。- ‘spline’
选择自然双三次样条重缩放算法。
- ‘print_info’
启用打印/调试日志记录。
- ‘accurate_rnd’
启用精确舍入。
- ‘full_chroma_int’
启用全色度插值。
- ‘full_chroma_inp’
选择全色度输入。
- ‘bitexact’
启用比特精确输出。
- srcw (仅限 API)
设置源宽度。
- srch (仅限 API)
设置源高度。
- dstw (仅限 API)
设置目标宽度。
- dsth (仅限 API)
设置目标高度。
- src_format (仅限 API)
设置源像素格式(必须表示为整数)。
- dst_format (仅限 API)
设置目标像素格式(必须表示为整数)。
- src_range (布尔值)
如果值设置为
1
,则表示源是全范围。默认值为0
,表示源是有限范围。- dst_range (布尔值)
如果值设置为
1
,则为目标启用全范围。默认值为0
,这会启用有限范围。- param0, param1
设置缩放算法参数。指定的值对于某些缩放算法是特定的,而对于其他算法则会被忽略。指定的值是浮点数值。
- sws_dither
设置抖动算法。接受以下值之一。默认值为 ‘auto’。
- ‘auto’
自动选择
- ‘none’
无抖动
- ‘bayer’
拜耳抖动
- ‘ed’
误差扩散抖动
- ‘a_dither’
基于加法的算术抖动
- ‘x_dither’
基于异或的算术抖动(比 a_dither 具有更高的随机性/更不明显的模式)。
- alphablend
设置当输入具有 alpha 但输出不具有时要使用的 alpha 混合。默认值为 ‘none’。
- ‘uniform_color’
混合到统一的背景颜色
- ‘checkerboard’
混合到棋盘格
- ‘none’
不混合
30 滤波简介
FFmpeg 中的过滤通过 libavfilter 库启用。
在 libavfilter 中,一个过滤器可以有多个输入和多个输出。为了说明可能实现的事情类型,我们考虑以下滤镜图。
[main] input --> split ---------------------> overlay --> output | ^ |[tmp] [flip]| +-----> crop --> vflip -------+
此滤镜图将输入流拆分为两个流,然后将一个流通过 crop 过滤器和 vflip 过滤器,然后再通过将其叠加在顶部与另一个流合并。您可以使用以下命令来实现此目的
ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT
结果是视频的顶部一半将镜像到输出视频的底部一半。
同一线性链中的过滤器用逗号分隔,不同的线性过滤器链用分号分隔。在我们的示例中,crop,vflip在一个线性链中,split 和 overlay 分别在另一个线性链中。线性链连接的点用方括号括起来的名称标记。在示例中,split 过滤器生成两个与标签 [main] 和 [tmp] 关联的输出。
发送到 split 的第二个输出(标记为 [tmp])的流通过 crop 过滤器进行处理,该过滤器裁剪掉视频的下半部分,然后进行垂直翻转。overlay 过滤器输入 split 过滤器的第一个未更改的输出(标记为 [main]),并将其下半部分叠加在由 crop,vflip 过滤器链生成的输出上。
某些过滤器输入参数列表:它们在过滤器名称和一个等号后指定,并且彼此之间用冒号分隔。
存在所谓的 源过滤器,它们没有音频/视频输入,以及 宿过滤器,它们没有音频/视频输出。
31 graph2dot
FFmpeg tools 目录中包含的 graph2dot 程序可用于解析滤镜图描述并以 dot 语言发出相应的文本表示形式。
调用命令
graph2dot -h
查看如何使用 graph2dot。
然后,您可以将 dot 描述传递给 dot 程序(来自 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 参数并添加 format 过滤器,以模拟特定的输入文件。
32 滤镜图描述
滤镜图是有向连接过滤器图。它可以包含循环,并且一对过滤器之间可以有多个链接。每个链接在一侧都有一个输入端口,将其连接到从中获取输入的过滤器,另一侧有一个输出端口,将其连接到接受其输出的过滤器。
滤镜图中的每个过滤器都是在应用程序中注册的过滤器类的实例,该过滤器类定义了过滤器的功能以及输入和输出端口的数量。
没有输入端口的过滤器称为“源”,没有输出端口的过滤器称为“宿”。
32.1 滤镜图语法
滤镜图具有文本表示形式,该形式由 ffmpeg
中的 -filter/-vf/-af 和 -filter_complex 选项以及 ffplay
中的 -vf/-af 识别,并由 libavfilter/avfilter.h 中定义的 avfilter_graph_parse_ptr()
函数识别。
过滤器链由一系列连接的过滤器组成,每个过滤器都连接到序列中的前一个过滤器。过滤器链由以“,”分隔的过滤器描述列表表示。
滤镜图由一系列过滤器链组成。一系列过滤器链由以“;”分隔的过滤器链描述列表表示。
过滤器由以下形式的字符串表示:[in_link_1]...[in_link_N]filter_name@id=arguments[out_link_1]...[out_link_M]
filter_name 是所描述的过滤器是其一个实例的过滤器类的名称,并且必须是在程序中注册的过滤器类之一的名称,可以选择后跟 "@id"。过滤器类的名称可以选择后跟字符串 "=arguments"。
arguments 是一个字符串,其中包含用于初始化过滤器实例的参数。它可能具有以下两种形式之一
- 一个用“:”分隔的 key=value 对列表。
- 一个用“:”分隔的 value 列表。在这种情况下,键被认为是按照声明顺序排列的选项名称。例如,
fade
滤镜按此顺序声明了三个选项 - type, start_frame 和 nb_frames。那么参数列表 in:0:30 表示值 in 被分配给选项 type,0 被分配给 start_frame,30 被分配给 nb_frames。 - 一个用“:”分隔的混合直接 value 和长 key=value 对的列表。直接 value 必须在 key=value 对之前,并遵循前一点的相同约束顺序。 后面的 key=value 对可以按任何首选顺序设置。
如果选项值本身是一个项目列表(例如,format
滤镜接受像素格式列表),则列表中的项目通常用“|”分隔。
可以使用字符“'”作为起始和结束标记来引用参数列表,并使用字符“\”来转义引号文本中的字符;否则,当遇到下一个特殊字符(属于集合“[]=;,”)时,参数字符串将被视为已终止。
在 ffmpeg
CLI 工具中实现了一种特殊的语法,允许从文件中加载选项值。这是通过在选项名称前添加斜杠“/”来完成的,然后将提供的值解释为从中加载实际值的路径。例如:
ffmpeg -i <INPUT> -vf drawtext=/text=/tmp/some_text <OUTPUT>
将从 /tmp/some_text 加载要绘制的文本。 希望实现类似功能的 API 用户应将 avfilter_graph_segment_*()
函数与自定义 IO 代码一起使用。
滤镜的名称和参数可以选择地以链接标签列表开头和结尾。链接标签允许您命名一个链接,并将其与滤镜的输出或输入衬垫相关联。前面的标签 in_link_1 ... in_link_N 与滤镜的输入衬垫相关联,后面的标签 out_link_1 ... out_link_M 与输出衬垫相关联。
如果在滤镜图中找到两个具有相同名称的链接标签,则会在相应的输入和输出衬垫之间创建链接。
如果未标记输出衬垫,则默认情况下会将其链接到滤镜链中下一个滤镜的第一个未标记输入衬垫。 例如,在滤镜链中
nullsrc, split[L1], [L2]overlay, nullsink
split 滤镜实例有两个输出衬垫,overlay 滤镜实例有两个输入衬垫。split 的第一个输出衬垫标记为“L1”,overlay 的第一个输入衬垫标记为“L2”,split 的第二个输出衬垫链接到 overlay 的第二个输入衬垫,这两个衬垫都未标记。
在滤镜描述中,如果未指定第一个滤镜的输入标签,则假定为“in”;如果未指定最后一个滤镜的输出标签,则假定为“out”。
在完整的滤镜链中,必须连接所有未标记的滤镜输入和输出衬垫。如果所有滤镜链的所有滤镜输入和输出衬垫都已连接,则认为滤镜图有效。
忽略滤镜图规范中分隔标记的前导和尾随空格(空格,制表符或换行符)。这意味着可以使用空行和空格来表达滤镜图,以提高可读性。
例如,滤镜图
testsrc,split[L1],hflip[L2];[L1][L2] hstack
可以表示为
testsrc, split [L1], hflip [L2]; [L1][L2] hstack
Libavfilter 将在需要格式转换的地方自动插入 scale 滤镜。可以通过在滤镜图描述前加上 sws_flags=flags;
来为那些自动插入的缩放器指定 swscale 标志。
这是滤镜图语法的 BNF 描述
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 关于滤镜图转义的说明
滤镜图描述的组成需要多个级别的转义。有关所采用的转义过程的更多信息,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的“引用和转义”部分。
第一级转义会影响每个滤镜选项值的内容,其中可能包含用于分隔值的特殊字符 :
或其中一个转义字符 \'
。
第二级转义会影响整个滤镜描述,其中可能包含转义字符 \'
或滤镜图描述使用的特殊字符 [],;
。
最后,当您在 shell 命令行上指定滤镜图时,您需要为其中包含的 shell 特殊字符执行第三级转义。
例如,考虑以下要嵌入到 drawtext 滤镜描述的 text 值中的字符串
this is a 'string': may contain one, or more, special characters
此字符串包含 '
特殊转义字符和 :
特殊字符,因此需要以这种方式转义
text=this is a \'string\'\: may contain one, or more, special characters
在将滤镜描述嵌入到滤镜图描述中时,需要进行第二级转义,以转义所有滤镜图特殊字符。因此,上面的示例变为
drawtext=text=this is a \\\'string\\\'\\: may contain one\, or more\, special characters
(请注意,除了 \'
转义特殊字符外,还需要转义 ,
)。
最后,在 shell 命令中编写滤镜图描述时,需要额外的转义级别,这取决于所采用的 shell 的转义规则。例如,假设 \
是特殊的,需要用另一个 \
来转义,则之前的字符串最终将导致
-vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters"
为了避免在使用接受滤镜规范作为输入的命令行工具时出现繁琐的转义,建议避免直接将滤镜或选项规范包含在 shell 中。
例如,对于 drawtext 滤镜,您可能更喜欢使用 textfile 选项代替 text 来指定要渲染的文本。
33 时间线编辑
一些滤镜支持通用的 enable 选项。对于支持时间线编辑的滤镜,可以将此选项设置为在将帧发送到滤镜之前评估的表达式。如果评估为非零值,则将启用滤镜,否则该帧将保持不变地发送到滤镜图中的下一个滤镜。
该表达式接受以下值
- “t”
时间戳,以秒为单位表示,如果输入时间戳未知,则为 NAN
- “n”
输入帧的顺序号,从 0 开始
- “pos”
输入帧在文件中的位置,如果未知则为 NAN;已弃用,请勿使用
- “w”
- “h”
如果输入为视频,则为输入帧的宽度和高度
此外,这些滤镜还支持可以用于重新定义表达式的 enable 命令。
像任何其他滤镜选项一样,enable 选项遵循相同的规则。
例如,要从 10 秒到 3 分钟启用模糊滤镜(smartblur),并从 3 秒开始启用 curves 滤镜
smartblur = enable='between(t,10,3*60)', curves = enable='gte(t,3)' : preset=cross_process
请参阅 ffmpeg -filters
,查看哪些滤镜支持时间线。
34 使用命令在运行时更改选项
某些选项可以在滤镜操作期间使用命令进行更改。这些选项在 ffmpeg
-h filter=<滤镜名称> 的输出中标记为“T”。命令的名称是选项的名称,参数是新值。
35 具有多个输入的滤镜的选项 (framesync)
某些具有多个输入的滤镜支持一组通用选项。这些选项只能按名称设置,而不能使用简短表示法。
- eof_action
在辅助输入上遇到 EOF 时要执行的操作;它接受以下值之一
- repeat
重复最后一帧(默认值)。
- endall
结束两个流。
- pass
通过主输入。
- shortest
如果设置为 1,则强制在最短输入终止时终止输出。默认值为 0。
- repeatlast
如果设置为 1,则强制滤镜扩展辅助流的最后一帧,直到主流结束。值为 0 时禁用此行为。默认值为 1。
- ts_sync_mode
基于辅助输入时间戳严格同步流的方式;它接受以下值之一
- 默认
从辅助输入中选取时间戳小于等于主输入帧时间戳的最接近帧。
- 最近的
从辅助输入中选取时间戳与主输入帧时间戳绝对值最接近的帧。
36 音频滤镜
配置 FFmpeg 构建时,您可以使用 --disable-filters
禁用任何现有滤镜。配置输出将显示构建中包含的音频滤镜。
以下是当前可用音频滤镜的说明。
36.1 aap
使用第二个音频流将仿射投影算法应用于第一个音频流。
此自适应滤波器用于根据多个输入音频样本估计未知音频。仿射投影算法可以在计算复杂度和收敛速度之间进行权衡。
以下是对接受选项的描述。
- order
设置滤波器阶数。
- projection
设置投影阶数。
- mu
设置滤波器 mu。
- delta
设置初始化内部协方差矩阵的系数。
- out_mode
设置滤波器输出样本。它接受以下值
- i
传递第一个输入。
- d
传递第二个输入。
- o
传递期望信号(即第二个输入)和误差信号估计值之间的差值。
- n
传递输入信号(即第一个输入)和误差信号估计值之间的差值。
- e
传递误差信号的估计样本。
默认值为 o。
- precision
设置处理样本时要使用的精度。
- auto
根据其他滤波器自动选择内部样本格式。
- float
始终使用单精度浮点样本格式。
- double
始终使用双精度浮点样本格式。
36.2 acompressor
压缩器主要用于减少信号的动态范围。特别是现代音乐大多以高比例压缩,以提高整体响度。这样做是为了获得听众的最大关注度,“使”声音更“饱满”,并为音轨带来更多“力量”。如果信号压缩过多,可能会听起来沉闷或“死板”,或者它可能会开始“抽动”(这可能是一种强大的效果,但也可能完全毁掉音轨)。正确的压缩是达到专业声音的关键,是混音和母带制作的高级艺术。由于其复杂的设置,可能需要很长时间才能对此类效果有正确的感觉。
压缩是通过检测超过选定级别threshold
的音量,并将其除以ratio
设置的因子来完成的。因此,如果将阈值设置为 -12dB,而您的信号达到 -6dB,则 2:1 的比率将导致信号为 -9dB。因为精确地操纵信号会导致波形失真,所以可以在一段时间内使衰减变平。这是通过设置“Attack”和“Release”来完成的。attack
确定信号在开始任何衰减之前必须高于阈值的时间长度,而release
设置信号必须低于阈值以再次减少衰减的时间。比所选攻击时间短的信号将保持不变。信号的整体衰减可以使用makeup
设置在之后进行补偿。因此,将信号的峰值压缩约 6dB,并将增益补偿提高到此水平会导致信号比源响亮两倍。为了在压缩中获得更柔和的进入,knee
在所选分贝范围内平滑阈值处的硬边缘。
该滤波器接受以下选项
- level_in
设置输入增益。默认值为 1。范围在 0.015625 到 64 之间。
- mode
设置压缩器操作模式。可以是
upward
或downward
。默认值为downward
。- threshold
如果流的信号上升到此级别以上,它将影响增益衰减。默认情况下为 0.125。范围在 0.00097563 和 1 之间。
- ratio
设置信号衰减的比率。1:2 表示如果电平高于阈值 4dB,则衰减后仅高于 2dB。默认值为 2。范围在 1 到 20 之间。
- attack
信号必须高于阈值才能开始增益衰减的毫秒数。默认值为 20。范围在 0.01 到 2000 之间。
- release
信号必须低于阈值才能再次降低衰减的毫秒数。默认值为 250。范围在 0.01 到 9000 之间。
- makeup
设置处理后信号将被放大多少。默认值为 1。范围在 1 到 64 之间。
- knee
弯曲阈值周围的尖锐拐点,以便更柔和地进入增益衰减。默认值为 2.82843。范围在 1 到 8 之间。
- link
选择输入流的所有通道之间的
average
级别或输入流的较响(maximum
)通道是否会影响衰减。默认值为average
。- detection
在
peak
的情况下,是否应采用精确信号,而在rms
的情况下应采用 RMS 信号。默认值为rms
,它通常更平滑。- mix
在输出中使用压缩信号的程度。默认值为 1。范围在 0 和 1 之间。
36.2.1 命令
此滤波器支持上述所有选项作为命令。
36.3 acontrast
简单的音频动态范围压缩/扩展滤波器。
该滤波器接受以下选项
- contrast
设置对比度。默认值为 33。允许的范围在 0 到 100 之间。
36.4 acopy
将输入的音频源不变地复制到输出。这主要用于测试目的。
36.5 acrossfade
将交叉淡入淡出效果从一个输入音频流应用于另一个输入音频流。交叉淡入淡出效果在第一个流末尾附近的指定持续时间内应用。
该滤波器接受以下选项
- nb_samples,ns
指定交叉淡入淡出效果必须持续的样本数。在交叉淡入淡出效果结束时,第一个输入音频将完全静音。默认值为 44100。
- duration,d
指定交叉淡入淡出效果的持续时间。有关接受的语法,请参阅(ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分。默认情况下,持续时间由 nb_samples 确定。如果设置了此选项,则使用此选项而不是 nb_samples。
- overlap,o
第一个流结束是否应与第二个流开始重叠。默认情况下启用。
- curve1
设置第一个流的交叉淡入淡出转换曲线。
- curve2
设置第二个流的交叉淡入淡出转换曲线。
有关可用曲线类型的说明,请参阅afade 过滤器说明。
36.5.1 示例
- 从一个输入交叉淡入淡出到另一个输入
ffmpeg -i first.flac -i second.flac -filter_complex acrossfade=d=10:c1=exp:c2=exp output.flac
- 从一个输入交叉淡入淡出到另一个输入,但没有重叠
ffmpeg -i first.flac -i second.flac -filter_complex acrossfade=d=10:o=0:c1=exp:c2=exp output.flac
36.6 acrossover
将音频流分割成多个频段。
此滤波器将音频流分割成两个或多个频率范围。将所有流加回将产生平坦的输出。
该滤波器接受以下选项
- split
设置分割频率。它们必须是正数且递增。
- order
为每个频段分割设置滤波器阶数。 这控制滤波器的滚降或滤波器传递函数的陡峭度。 可用值为
- ‘2nd’
每倍频程 12 分贝。
- ‘4th’
每倍频程 24 分贝。
- ‘6th’
每倍频程 36 分贝。
- ‘8th’
每倍频程 48 分贝。
- ‘10th’
每倍频程 60 分贝。
- ‘12th’
每倍频程 72 分贝。
- ‘14th’
每倍频程 84 分贝。
- ‘16th’
每倍频程 96 分贝。
- ‘18th’
每倍频程 108 分贝。
- ‘20th’
每倍频程 120 分贝。
默认值为 4th。
- level
设置输入增益电平。 允许范围为 0 到 1。默认值为 1。
- gains
设置每个频段的输出增益。所有频段的默认值为 1。
- precision
设置处理样本时要使用的精度。
- auto
根据其他滤波器自动选择内部样本格式。
- float
始终使用单精度浮点样本格式。
- double
始终使用双精度浮点样本格式。
默认值为
auto
。
36.6.1 示例
- 将输入音频流以 1500 Hz 的分割频率分割成两个频段(低频和高频),每个频段都将在单独的流中。
ffmpeg -i in.flac -filter_complex 'acrossover=split=1500[LOW][HIGH]' -map '[LOW]' low.wav -map '[HIGH]' high.wav
- 与上面相同,但具有更高的滤波器阶数。
ffmpeg -i in.flac -filter_complex 'acrossover=split=1500:order=8th[LOW][HIGH]' -map '[LOW]' low.wav -map '[HIGH]' high.wav
- 与上面相同,但还带有额外的中频段(1500 到 8000 之间的频率)。
ffmpeg -i in.flac -filter_complex 'acrossover=split=1500 8000:order=8th[LOW][MID][HIGH]' -map '[LOW]' low.wav -map '[MID]' mid.wav -map '[HIGH]' high.wav
36.7 acrusher
降低音频位分辨率。
此滤波器是具有增强功能的位破碎器。 位破碎器用于明显减少音频信号采样的位数。 这根本不会改变位深度,它只是产生效果。 位深度降低的素材听起来更加刺耳和“数字化”。 此滤波器甚至能够舍入到连续值,而不是离散的位深度。 此外,它还具有直流偏移,这会导致信号的下半部分和上半部分出现不同的破碎。 抗锯齿设置能够产生“柔和”的破碎声音。
此滤波器的另一个特点是对数模式。 此设置从位之间的线性距离切换到对数距离。 结果是一个听起来更“自然”的破碎器,例如,它不会对低信号进行门控。人耳具有对数感知,因此这种破碎方式更加令人愉悦。 对数破碎也能够进行抗锯齿处理。
该滤波器接受以下选项
- level_in
设置输入电平。
- level_out
设置输出电平。
- bits
设置位减少量。
- mix
设置混合量。
- mode
可以是线性的:
lin
或对数的:log
。- dc
设置直流。
- aa
设置抗锯齿。
- samples
设置采样减少量。
- lfo
启用 LFO。 默认情况下禁用。
- lforange
设置 LFO 范围。
- lforate
设置 LFO 速率。
36.7.1 命令
此滤波器支持上述所有选项作为命令。
36.8 acue
将音频滤波延迟到给定的挂钟时间戳。 请参阅 cue 滤波器。
36.9 adeclick
消除输入音频中的冲击噪声。
使用自回归建模,用插值样本替换检测为冲击噪声的样本。
- window, w
设置窗口大小,以毫秒为单位。 允许范围为
10
到100
。默认值为55
毫秒。 这设置一次处理的窗口大小。- overlap,o
设置窗口重叠,占窗口大小的百分比。 允许范围为
50
到95
。默认值为75
%。 将此值设置为非常高的值会增加冲击噪声消除,但会使整个过程慢得多。- arorder, a
设置自回归阶数,占窗口大小的百分比。 允许范围为
0
到25
。默认值为2
%。 此选项还使用相邻的好样本控制插值样本的质量。- threshold, t
设置阈值。 允许范围为
1
到100
。默认值为2
。 这控制将要消除的冲击噪声的强度。 值越低,检测为冲击噪声的样本就越多。- burst, b
设置突发融合,占窗口大小的百分比。 允许范围为
0
到10
。默认值为2
。 如果检测为噪声的任何两个样本之间的间隔小于此值,则这两个样本之间的任何样本也将被检测为噪声。- method, m
设置重叠方法。
它接受以下值
- add, a
选择重叠相加方法。即使未插值的样本也使用此方法略有更改。
- save, s
选择重叠保存方法。 未插值的样本保持不变。
默认值为
a
。
36.10 adeclip
从输入音频中消除削波的样本。
使用自回归建模,用插值样本替换检测为削波的样本。
- window, w
设置窗口大小,以毫秒为单位。 允许范围为
10
到100
。默认值为55
毫秒。 这设置一次处理的窗口大小。- overlap,o
设置窗口重叠,占窗口大小的百分比。 允许范围为
50
到95
。默认值为75
%。- arorder, a
设置自回归阶数,占窗口大小的百分比。 允许范围为
0
到25
。默认值为8
%。 此选项还使用相邻的好样本控制插值样本的质量。- threshold, t
设置阈值。 允许范围为
1
到100
。默认值为10
。 值越高,削波检测的攻击性就越小。- hsize, n
设置用于检测削波的直方图大小。 允许范围为
100
到9999
。默认值为1000
。 值越高,削波检测的攻击性就越小。- method, m
设置重叠方法。
它接受以下值
- add, a
选择重叠相加方法。即使未插值的样本也使用此方法略有更改。
- save, s
选择重叠保存方法。 未插值的样本保持不变。
默认值为
a
。
36.11 adecorrelate
将去相关应用于输入音频流。
该滤波器接受以下选项
- stages
设置滤波的去相关级数。 允许范围为 1 到 16。默认值为 6。
- seed
设置用于设置跨通道样本延迟的随机种子。
36.12 adelay
延迟一个或多个音频通道。
延迟通道中的样本用静音填充。
该滤波器接受以下选项
- delays
设置每个通道的延迟列表,以毫秒为单位,用“|”分隔。 未使用的延迟将被静默忽略。 如果给定的延迟数小于通道数,则所有剩余通道将不会延迟。 如果要延迟精确的样本数,请在数字后附加“S”。 如果要以秒为单位延迟,请在数字后附加“s”。
- all
对所有剩余通道使用最后设置的延迟。 默认情况下禁用。 如果启用此选项,将更改选项
delays
的解释方式。
36.12.1 示例
- 将第一个通道延迟 1.5 秒,将第三个通道延迟 0.5 秒,并使第二个通道(和可能存在的任何其他通道)保持不变。
adelay=1500|0|500
- 将第二个通道延迟 500 个样本,将第三个通道延迟 700 个样本,并使第一个通道(和可能存在的任何其他通道)保持不变。
adelay=0|500S|700S
- 将所有通道延迟相同的样本数
adelay=delays=64S:all=1
36.13 adenorm
通过添加极低级别的噪声来纠正音频中的非正规值。
此滤波器应放置在任何可能产生非正规值的滤波器之前。
以下是对接受参数的描述。
- level
设置添加噪声的电平,以分贝为单位。 默认值为
-351
。允许范围为 -451 到 -90。- type
设置添加噪声的类型。
- dc
添加直流信号。
- ac
添加交流信号。
- square
添加方波信号。
- pulse
添加脉冲信号。
默认值为
dc
。
36.13.1 命令
此滤波器支持上述所有选项作为命令。
36.14 aderivative, aintegral
计算音频流的导数/积分。
依次应用两个滤波器会产生原始音频。
36.15 adrc
将频谱动态范围控制器滤波器应用于输入音频流。
以下是对接受选项的描述。
- transfer
设置传递表达式。
表达式可以包含以下常量
- ch
当前通道号
- sn
当前样本号
- nb_channels
通道数
- t
以秒表示的时间戳
- sr
采样率
- p
当前频率功率值,以分贝为单位
- f
当前频率,以赫兹为单位
默认值为
p
。- attack
设置以毫秒为单位的启动时间。默认值为
50
毫秒。 允许范围为 1 到 1000 毫秒。- release
设置以毫秒为单位的释放时间。默认值为
100
毫秒。 允许范围为 5 到 2000 毫秒。- channels
设置要筛选的通道,默认情况下,音频流中的
all
通道会被筛选。
36.15.1 命令
此滤波器支持上述所有选项作为命令。
36.15.2 示例
- 对所有频率应用频谱压缩,阈值为 -50 分贝,比率为 1:6
adrc=transfer='if(gt(p,-50),-50+(p-(-50))/6,p)':attack=50:release=100
- 与上面类似,但比率为 1:2,并且仅筛选前中央通道
adrc=transfer='if(gt(p,-50),-50+(p-(-50))/2,p)':attack=50:release=100:channels=FC
- 对所有频率应用频谱噪声门,阈值为 -85 dB,并具有短启动时间和短释放时间
adrc=transfer='if(lte(p,-85),p-800,p)':attack=1:release=5
- 对所有频率应用频谱扩展,阈值为 -10 dB,比例为 1:2
adrc=transfer='if(lt(p,-10),-10+(p-(-10))*2,p)':attack=50:release=100
- 对所有频率应用限幅器,最大值为 -60 dB,启动时间为 2 毫秒,释放时间为 10 毫秒
adrc=transfer='min(p,-60)':attack=2:release=10
36.16 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’
提升高于检测阈值的频率。
默认模式为 ‘cutbelow’。
- dftype
设置检测滤波器的类型,可以是以下之一
- ‘bandpass’
- ‘lowpass’
- ‘highpass’
- ‘peak’
默认类型为 ‘bandpass’。
- tftype
设置目标滤波器的类型,可以是以下之一
- ‘bell’
- ‘lowshelf’
- ‘highshelf’
默认类型为 ‘bell’。
- auto
自动从检测滤波器收集阈值。默认情况下为‘disabled’。此选项对于在输入音频流的特定时间范围内检测阈值很有用,在这种情况下,选项值会在运行时更改。
可用值为
- ‘disabled’
禁用使用自动收集的阈值。
- ‘off’
停止选取阈值。
- ‘on’
开始选取阈值。
- ‘adaptive’
通过计算滑动窗口熵自适应地选取阈值。
- precision
设置处理样本时要使用的精度。
- auto
根据其他滤波器自动选择内部样本格式。
- float
始终使用单精度浮点样本格式。
- double
始终使用双精度浮点样本格式。
36.16.1 命令
此滤波器支持上述所有选项作为命令。
36.17 adynamicsmooth
对输入音频流应用动态平滑。
以下是对接受选项的描述。
- sensitivity
设置对频率波动的灵敏度量。默认值为 2。允许范围为 0 到 1e+06。
- basefreq
设置平滑的基准频率。默认值为 22050。允许范围为 2 到 1e+06。
36.17.1 命令
此滤波器支持上述所有选项作为命令。
36.18 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.18.1 示例
- 使其听起来好像实际演奏的乐器数量是两倍
aecho=0.8:0.88:60:0.4
- 如果延迟非常短,那么听起来就像一个(金属)机器人正在播放音乐
aecho=0.8:0.88:6:0.4
- 较长的延迟听起来像是在山上的露天音乐会
aecho=0.8:0.9:1000:0.3
- 与上面相同,但多了一座山
aecho=0.8:0.9:1000|1800:0.3|0.25
36.19 aemphasis
音频加重滤波器创建或恢复直接从 LP 或加重 CD 中提取的素材,这些素材具有不同的滤波曲线。例如,为了将音乐存储在黑胶唱片上,必须首先通过滤波器改变信号,以消除这种录音介质的缺点。一旦播放素材,必须应用反向滤波器以恢复频率响应的失真。
该滤波器接受以下选项
- level_in
设置输入增益。
- level_out
设置输出增益。
- mode
设置滤波模式。要恢复素材,请使用
reproduction
模式,否则使用production
模式。默认模式为reproduction
模式。- type
设置滤波器类型。选择介质。可以是以下之一
- col
选择哥伦比亚。
- emi
选择 EMI。
- bsi
选择 BSI (78RPM)。
- riaa
选择 RIAA。
- cd
选择光盘 (CD)。
- 50fm
选择 50µs (FM)。
- 75fm
选择 75µs (FM)。
- 50kf
选择 50µs (FM-KF)。
- 75kf
选择 75µs (FM-KF)。
36.19.1 命令
此滤波器支持上述所有选项作为命令。
36.20 aeval
根据指定的表达式修改音频信号。
此滤波器接受一个或多个表达式(每个通道一个),这些表达式将被评估并用于修改相应的音频信号。
它接受以下参数
- exprs
为每个单独的通道设置以“|”分隔的表达式列表。如果输入通道数大于表达式的数量,则最后一个指定的表达式将用于其余的输出通道。
- channel_layout, c
设置输出通道布局。如果未指定,则通道布局由表达式的数量指定。如果设置为 ‘same’,则默认情况下将使用相同的输入通道布局。
exprs中的每个表达式都可以包含以下常量和函数
- ch
当前表达式的通道号
- n
评估的样本数,从 0 开始
- s
采样率
- t
以秒为单位表示的评估样本的时间
- nb_in_channels
- nb_out_channels
输入和输出通道数
- val(CH)
通道号为 CH 的输入通道的值
注意:此滤波器速度较慢。为了更快地处理,您应该使用专用的滤波器。
36.20.1 示例
- 一半音量
aeval=val(ch)/2:c=same
- 反转第二个通道的相位
aeval=val(0)|-val(1)
36.21 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 Hz。
- 上限 (ceil)
设置产生谐波的最高频率限制。允许的范围是 9999 到 20000 Hz。如果值低于 10000 Hz,则不应用限制。
- listen
静音原始信号,仅输出添加的谐波。默认情况下禁用。
36.21.1 命令
此滤波器支持上述所有选项作为命令。
36.22 afade
对输入音频应用淡入/淡出效果。
以下是对接受参数的描述。
- 类型 (type), t
指定效果类型,可以是
in
表示淡入,也可以是out
表示淡出效果。默认值为in
。- 起始采样 (start_sample), ss
指定开始应用淡化效果的起始采样数。默认值为 0。
- nb_samples,ns
指定淡化效果必须持续的采样数。在淡入效果结束时,输出音频将与输入音频具有相同的音量,在淡出过渡结束时,输出音频将为静音。默认值为 44100。
- 起始时间 (start_time), st
指定淡化效果的起始时间。默认值为 0。该值必须指定为持续时间;有关接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的时间持续时间部分。如果设置此选项,则使用此选项代替 start_sample。
- duration,d
指定淡化效果的持续时间。有关接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的时间持续时间部分。在淡入效果结束时,输出音频将与输入音频具有相同的音量,在淡出过渡结束时,输出音频将为静音。默认情况下,持续时间由 nb_samples 确定。如果设置此选项,则使用此选项代替 nb_samples。
- 曲线 (curve)
设置淡化过渡的曲线。
它接受以下值
- 三角 (tri)
选择三角形,线性斜率(默认)。
- 四分之一正弦波 (qsin)
选择四分之一正弦波。
- 半正弦波 (hsin)
选择半正弦波。
- 指数正弦波 (esin)
选择指数正弦波。
- 对数 (log)
选择对数。
- 反抛物线 (ipar)
选择反抛物线。
- 二次 (qua)
选择二次。
- 三次 (cub)
选择三次
- 平方根 (squ)
选择平方根。
- 立方根 (cbr)
选择立方根。
- 抛物线 (par)
选择抛物线。
- 指数 (exp)
选择指数。
- 反四分之一正弦波 (iqsin)
选择反四分之一正弦波。
- 反半正弦波 (ihsin)
选择反半正弦波。
- 双指数座椅 (dese)
选择双指数座椅。
- 双指数 S 型 (desi)
选择双指数 S 型。
- 逻辑 S 型 (losi)
选择逻辑 S 型。
- 辛克 (sinc)
选择正弦基函数。
- 反辛克 (isinc)
选择反正弦基函数。
- 四次 (quat)
选择四次函数。
- 四次根 (quatr)
选择四次根。
- 四分之一正弦波平方 (qsin2)
选择四分之一正弦波的平方。
- 半正弦波平方 (hsin2)
选择半正弦波的平方。
- 无淡化 (nofade)
不应用淡化。
- 静音 (silence)
设置淡入的初始增益或淡出的最终增益。默认值为
0.0
。- 统一 (unity)
设置淡出的初始增益或淡入的最终增益。默认值为
1.0
。
36.22.1 命令
此滤波器支持上述所有选项作为命令。
36.22.2 示例
- 淡入音频的前 15 秒。
afade=t=in:ss=0:d=15
- 淡出一个 900 秒音频的最后 25 秒。
afade=t=out:st=875:d=25
36.23 afftdn
使用 FFT 对音频样本进行去噪。
以下是对接受参数的描述。
- 降噪 (noise_reduction), nr
以 dB 为单位设置降噪量,允许的范围是 0.01 到 97。默认值为 12 dB。
- 噪声基底 (noise_floor), nf
以 dB 为单位设置噪声基底,允许的范围是 -80 到 -20。默认值为 -50 dB。
- 噪声类型 (noise_type), nt
设置噪声类型。
它接受以下值
- 白噪声 (white), w
选择白噪声。
- 黑胶噪声 (vinyl), v
选择黑胶噪声。
- 虫胶噪声 (shellac), s
选择虫胶噪声。
- 自定义 (custom), c
选择自定义噪声,在
bn
选项中定义。默认值为白噪声。
- 频带噪声 (band_noise), bn
为 15 个频段中的每一个设置自定义频带噪声配置文件。频段之间用“ ”或“|”分隔。
- 残留基底 (residual_floor), rf
以 dB 为单位设置残留基底,允许的范围是 -80 到 -20。默认值为 -38 dB。
- 跟踪噪声 (track_noise), tn
启用噪声基底跟踪。默认情况下禁用。启用此选项后,会自动调整噪声基底。
- 跟踪残留 (track_residual), tr
启用残留跟踪。默认情况下禁用。
- 输出模式 (output_mode), om
设置输出模式。
它接受以下值
- 输入 (input), i
保持输入不变。
- 输出 (output), o
传递已过滤掉的噪声。
- 噪声 (noise), n
仅传递噪声。
默认值为 output。
- 自适应性 (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.23.1 命令
此滤波器支持上述某些选项作为命令。
36.23.2 示例
- 将白噪声降低 10dB,并使用之前测量的 -40dB 的噪声基底。
afftdn=nr=10:nf=-40
- 将白噪声降低 10dB,还将初始噪声基底设置为 -80dB,并启用噪声基底的自动跟踪,以便噪声基底在处理过程中逐渐变化。
afftdn=nr=10:nf=-80:tn=1
- 使用 -40dB 的噪声基底将噪声降低 20dB,并使用命令获取输入音频前 0.4 秒的噪声配置文件。
asendcmd=0.0 afftdn sn start,asendcmd=0.4 afftdn sn stop,afftdn=nr=20:nf=-40
36.24 afftfilt
将任意表达式应用于频域中的样本。
- 实部 (real)
为每个独立的声道设置频域实部表达式,用“|”分隔。默认为“re”。如果输入通道的数量大于表达式的数量,则最后一个指定的表达式将用于其余的输出通道。
- imag
为每个独立的声道设置频域虚部表达式,用“|”分隔。默认为“im”。
real 和 imag 中的每个表达式都可以包含以下常量和函数
- sr
采样率
- b
当前频率 bin 的编号
- nb
可用 bin 的数量
- ch
当前表达式的通道号
- chs
通道数
- pts
当前帧的采样点数
- re
当前声道当前频率 bin 的实部
- im
当前声道当前频率 bin 的虚部
- 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.24.1 示例
- 只保留音频中的低频
afftfilt="'real=re * (1-clip((b/nb)*b,0,1))':imag='im * (1-clip((b/nb)*b,0,1))'"
- 应用机器人效果
afftfilt="real='hypot(re,im)*sin(0)':imag='hypot(re,im)*cos(0)':win_size=512:overlap=0.75"
- 应用耳语效果
afftfilt="real='hypot(re,im)*cos((random(0)*2-1)*2*3.14)':imag='hypot(re,im)*sin((random(1)*2-1)*2*3.14)':win_size=128:overlap=0.8"
- 应用相位偏移
afftfilt="real=re*cos(1)-im*sin(1):imag=re*sin(1)+im*cos(1)"
36.25 afir
应用任意有限脉冲响应滤波器。
此滤波器设计用于应用长达 60 秒的 FIR 滤波器。
它可以用作数字分频滤波器、房间均衡、串扰消除、波场合成、听觉化、环境声学、环境立体声和空间化的组件。
此滤波器使用高于第一个流的流作为 FIR 系数。如果非第一个流持有单通道,它将被用于第一个流中的所有输入通道,否则非第一个流中的通道数量必须与第一个流中的通道数量相同。
它接受以下参数
- dry
设置干信号增益。这将设置输入增益。
- wet
设置湿信号增益。这将设置最终输出增益。
- length
设置脉冲响应滤波器的长度。默认为 1,这意味着处理整个 IR。
- gtype
此选项已弃用,不执行任何操作。
- irnorm
设置在滤波之前应用于 IR 系数的范数。允许的范围是 -1 到 2。IR 系数通过此选项设置的计算向量范数进行归一化。对于负值,不计算范数,并且 IR 系数根本不被修改。默认为 1。
- irlink
对于多通道 IR,如果此选项设置为 true,则所有 IR 通道将通过所有 IR 通道系数的最大测量增益进行归一化,如
irnorm
选项所设置。禁用时,每个 IR 通道中的所有 IR 系数将独立归一化。默认为 true。- irgain
设置在滤波之前应用于 IR 系数的增益。允许的范围是 0 到 1。此增益在通过 irnorm 选项应用的任何增益之后应用。
- irfmt
设置 IR 流的格式。可以是
mono
或input
。默认为input
。- maxir
设置允许的最大脉冲响应滤波器持续时间(以秒为单位)。默认为 30 秒。允许的范围是 0.1 到 60 秒。
- response
此选项已弃用,不执行任何操作。
- channel
此选项已弃用,不执行任何操作。
- size
此选项已弃用,不执行任何操作。
- rate
此选项已弃用,不执行任何操作。
- minp
设置用于卷积的最小分区大小。默认为 8192。允许的范围是 1 到 65536。较低的值会降低延迟,但会增加 CPU 使用率。
- maxp
设置用于卷积的最大分区大小。默认为 8192。允许的范围是 8 到 65536。较低的值可能会增加 CPU 使用率。
- nbirs
设置将在运行时可切换的输入脉冲响应流的数量。允许的范围是 1 到 32。默认为 1。
- ir
设置将用于卷积的 IR 流,从 0 开始,应始终低于
nbirs
选项提供的值。默认为 0。此选项可以在运行时通过 命令更改。- precision
设置处理样本时要使用的精度。
- auto
根据其他滤波器自动选择内部样本格式。
- float
始终使用单精度浮点样本格式。
- double
始终使用双精度浮点样本格式。
默认值为 auto。
- irload
设置何时加载 IR 流。可以是
init
或access
。第一个在初始化时加载并准备所有 IR,第二个在首次访问特定 IR 时加载。默认为init
。
36.25.1 示例
- 使用单声道 IR 文件作为第二个输入将混响应用于流,使用 ffmpeg 完成命令
ffmpeg -i input.wav -i middle_tunnel_1way_mono.wav -lavfi afir output.wav
- 给定输入立体声流和左右声道的两个立体声脉冲响应,应用真立体声处理,脉冲响应文件是名为 l_ir.wav 和 r_ir.wav 的文件,并设置 irnorm 选项值
"pan=4C|c0=FL|c1=FL|c2=FR|c3=FR[a];amovie=l_ir.wav[LIR];amovie=r_ir.wav[RIR];[LIR][RIR]amerge[ir];[a][ir]afir=irfmt=input:irnorm=1.2,pan=stereo|FL<c0+c2|FR<c1+c3"
- 与上面的示例类似,但显式设置
irgain
为估计值,并禁用irnorm
"pan=4C|c0=FL|c1=FL|c2=FR|c3=FR[a];amovie=l_ir.wav[LIR];amovie=r_ir.wav[RIR];[LIR][RIR]amerge[ir];[a][ir]afir=irfmt=input:irgain=-5dB:irnom=-1,pan=stereo|FL<c0+c2|FR<c1+c3"
36.26 aformat
为输入音频设置输出格式约束。框架将协商最合适的格式以尽量减少转换。
它接受以下参数
- sample_fmts, f
请求的采样格式的“|”分隔列表。
- sample_rates, r
请求的采样率的“|”分隔列表。
- channel_layouts, cl
请求的通道布局的“|”分隔列表。
有关所需语法,请参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的“通道布局”部分。
如果省略参数,则允许所有值。
强制输出为无符号 8 位或有符号 16 位立体声
aformat=sample_fmts=u8|s16:channel_layouts=stereo
36.27 afreqshift
对输入音频样本应用频率偏移。
该滤波器接受以下选项
- shift
指定频率偏移。允许的范围是 -INT_MAX 到 INT_MAX。默认值为 0.0。
- level
设置应用于最终输出的输出增益。允许的范围是 0.0 到 1.0。默认值为 1.0。
- order
设置用于滤波的滤波器阶数。允许的范围是 1 到 16。默认值为 8。
36.27.1 命令
此滤波器支持上述所有选项作为命令。
36.28 afwtdn
使用小波减少输入样本中的宽带噪声。
以下是对接受选项的描述。
- sigma
设置噪声 sigma,允许的范围是 0 到 1。默认值为 0。此选项控制应用于输入样本的降噪强度。设置此选项最有效的方法是通过分贝,例如 -45dB。
- levels
设置小波分解的层数。允许的范围是 1 到 12。默认值为 10。将此值设置得太低会使降噪性能非常差。
- wavet
为输入帧的分解设置小波类型。它们按系数数量排序,从最低到最高。更多系数意味着滤波速度更慢,但总体质量更好。可用的小波有
- ‘sym2’
- ‘sym4’
- ‘rbior68’
- ‘deb10’
- ‘sym10’
- ‘coif5’
- ‘bl3’
- percent
设置完全降噪的百分比。允许的范围是 0 到 100%。默认值为 85% 或部分降噪。
- profile
如果启用,第一个输入帧将用作噪声配置文件。如果第一个帧样本包含非噪声数据,性能将非常差。
- 自适应
如果启用,将分析输入帧是否存在噪声。如果检测到高概率的噪声,则输入帧配置文件将用于处理后续帧,直到检测到新的噪声帧。
- samples
设置单个帧的大小,以样本数为单位。允许的范围是 512 到 65536。默认帧大小为 8192 个样本。
- 柔和度
设置在阈值函数内部应用的柔和度。允许的范围是 0 到 10。默认柔和度为 1。
36.28.1 命令
此滤波器支持上述所有选项作为命令。
36.29 agate
门限主要用于减少信号的较低部分。这种信号处理方式可以减少有用信号之间的干扰噪声。
门限处理是通过检测低于选定电平 threshold 的音量,并将其除以 ratio 设置的因子来完成的。噪声基底的底部通过 range 设置。由于精确地操作信号会导致波形失真,因此可以随时间调整衰减量。这可以通过设置 attack 和 release 来完成。
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.29.1 命令
此滤波器支持上述所有选项作为命令。
36.30 aiir
应用任意无限脉冲响应滤波器。
它接受以下参数
- 零点,z
设置 B/分子/零点/反射系数。
- 极点,p
设置 A/分母/极点/梯形系数。
- 增益,k
设置通道增益。
- 干信号增益
设置输入增益。
- 湿信号增益
设置输出增益。
- 格式,f
设置系数格式。
- ‘ll’
格形-梯形函数
- ‘sf’
模拟传递函数
- ‘tf’
数字传递函数
- ‘zp’
Z 平面零点/极点,笛卡尔坐标系(默认)
- ‘pr’
Z 平面零点/极点,极坐标弧度
- ‘pd’
Z 平面零点/极点,极坐标度数
- ‘sp’
S 平面零点/极点
- 处理,r
设置处理类型。
- “d”
直接处理
- ‘s’
串行处理
- ‘p’
并行处理
- 精度,e
设置滤波精度。
- ‘dbl’
双精度浮点数(默认)
- ‘flt’
单精度浮点数
- ‘i32’
32 位整数
- ‘i16’
16 位整数
- 归一化,n
归一化滤波器系数,默认情况下启用。启用它会将直流处的幅度响应归一化为 0dB。
- mix
在输出中使用滤波信号的程度。默认值为 1。范围在 0 到 1 之间。
- response
在额外的视频流中显示 IR 频率响应,幅度(洋红色)、相位(绿色)和群延迟(黄色)。默认情况下禁用。
- channel
设置要显示频率响应的 IR 通道。默认情况下,显示第一个通道。此选项仅在启用 response 时使用。
- size
设置视频流大小。此选项仅在启用 response 时使用。
tf
和 sf
格式的系数以空格分隔,并且按升序排列。
zp
格式的系数以空格分隔,并且系数的顺序无关紧要。zp
格式的系数是具有 i 虚数单位的复数。
可以为每个通道提供不同的系数和增益,在这种情况下,使用“|”分隔系数或增益。最后提供的系数将用于所有剩余的通道。
36.30.1 示例
- 在 48000 Hz 采样率下,在 5000Hz 左右应用 2 极椭圆陷波器
aiir=k=1:z=7.957584807809675810E-1 -2.575128568908332300 3.674839853930788710 -2.57512875289799137 7.957586296317130880E-1:p=1 -2.86950072432325953 3.63022088054647218 -2.28075678147272232 6.361362326477423500E-1:f=tf:r=d
- 与上面相同,但使用
zp
格式aiir=k=0.79575848078096756:z=0.80918701+0.58773007i 0.80918701-0.58773007i 0.80884700+0.58784055i 0.80884700-0.58784055i:p=0.63892345+0.59951235i 0.63892345-0.59951235i 0.79582691+0.44198673i 0.79582691-0.44198673i:f=zp:r=s
- 应用 3 阶模拟归一化巴特沃斯低通滤波器,使用模拟传递函数格式
aiir=z=1.3057 0 0 0:p=1.3057 2.3892 2.1860 1:f=sf:r=d
36.31 alimiter
限幅器防止输入信号上升到期望的阈值之上。此限幅器使用前瞻技术来防止信号失真。这意味着在处理信号后会有一个小延迟。请记住,它产生的延迟是您设置的起音时间。
该滤波器接受以下选项
- level_in
设置输入增益。默认值为 1。
- level_out
设置输出增益。默认值为 1。
- 限制
不要让高于此电平的信号通过限幅器。默认值为 1。
- attack
限幅器将在该时间量(以毫秒为单位)内达到其衰减级别。默认值为 5 毫秒。
- release
在该时间量(以毫秒为单位)内从限幅恢复到衰减 1.0。默认值为 50 毫秒。
- asc
当始终需要增益衰减时,ASC 负责释放到平均衰减级别,而不是在释放时间内达到 0 的衰减。
- asc_level
选择 ASC 对释放时间的影响程度,0 表示释放时间几乎没有变化,而 1 会产生更高的释放时间。
- level
自动均衡输出信号。默认情况下启用。如果启用,这会将音频标准化回 0dB。
- 延迟
补偿使用带有 attack 参数的先行缓冲器引入的延迟。当流到达 EOF 时,也刷新先行缓冲器中的有效音频数据。
根据所选设置,建议在使用此滤波器之前使用 aresample 将输入上采样 2 倍或 4 倍。
36.32 allpass
应用一个中心频率(以 Hz 为单位)为 frequency,滤波器宽度为 width 的双极全通滤波器。全通滤波器会改变音频的频率与相位关系,而不改变其频率与幅度关系。
该滤波器接受以下选项
- 频率,f
设置频率,单位为 Hz。
- 宽度类型,t
设置指定滤波器带宽的方法。
- h
Hz
- q
Q因子
- o
倍频程
- s
斜率
- k
kHz
- 宽度,w
以 width_type 单位指定滤波器的带宽。
- 混合,m
在输出中使用滤波信号的程度。默认值为 1。范围在 0 到 1 之间。
- 通道,c
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- 归一化,n
归一化双二阶系数,默认情况下禁用。启用它会将直流的幅度响应归一化为 0dB。
- 阶数,o
设置滤波器阶数,可以是 1 或 2。默认为 2。
- 变换,a
设置 IIR 滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- 精度,r
设置滤波精度。
- auto
根据环绕滤波器选择自动采样格式。
- s16
始终使用有符号 16 位。
- s32
始终使用有符号 32 位。
- f32
始终使用浮点 32 位。
- f64
始终使用浮点 64 位。
36.32.1 命令
此滤波器支持以下命令
- 频率,f
更改全通频率。命令的语法为:“frequency”
- 宽度类型,t
更改全通 width_type。命令的语法为:“width_type”
- 宽度,w
更改全通宽度。命令的语法为:“width”
- 混合,m
更改全通混合。命令的语法为:“mix”
36.33 aloop
循环音频样本。
该滤波器接受以下选项
- loop
设置循环次数。将此值设置为 -1 将导致无限循环。默认为 0。
- size
设置最大样本数。默认为 0。
- start
设置循环的第一个样本。默认为 0。
- time
设置循环开始时间,以秒为单位。仅当名为 start 的选项设置为
-1
时使用。
36.34 amerge
将两个或多个音频流合并为单个多通道流。
该滤波器接受以下选项
- 输入
设置输入数量。默认为 2。
如果输入的通道布局是不相交的,因此是兼容的,则将相应地设置输出的通道布局,并根据需要重新排序通道。如果输入的通道布局不相交,则输出将具有第一个输入的所有通道,然后是第二个输入的所有通道,依此类推,并且输出的通道布局将是与通道总数对应的默认值。
例如,如果第一个输入是 2.1 (FL+FR+LF),第二个输入是 FC+BL+BR,则输出将是 5.1,通道顺序如下:a1、a2、b1、a3、b2、b3(a1 是第一个输入的第一个通道,b1 是第二个输入的第一个通道)。
另一方面,如果两个输入都是立体声,则输出通道将按默认顺序排列:a1、a2、b1、b2,并且通道布局将任意设置为 4.0,这可能是也可能不是预期值。
所有输入必须具有相同的采样率和格式。
如果输入的持续时间不同,则输出将以最短的持续时间停止。
36.34.1 示例
- 将两个单声道文件合并为立体声流
amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
- 假设 input.mkv 中有 1 个视频流和 6 个音频流的多个合并
ffmpeg -i input.mkv -filter_complex "[0:1][0:2][0:3][0:4][0:5][0:6] amerge=inputs=6" -c:a pcm_s16le output.mkv
36.35 amix
将多个音频输入混合到单个输出中。
请注意,此滤波器仅支持浮点样本(amerge 和 pan 音频滤波器支持多种格式)。如果 amix 输入具有整数样本,则将自动插入 aresample 以执行到浮点样本的转换。
它接受以下参数
- 输入
输入数量。如果未指定,则默认为 2。
- duration
如何确定流的结束。
- 最长
最长输入的持续时间。(默认)
- shortest
最短输入的持续时间。
- 第一个
第一个输入的持续时间。
- dropout_transition
当输入流结束时,用于音量重新归一化的过渡时间(以秒为单位)。默认值为 2 秒。
- 权重
以空格分隔的数字序列形式指定每个输入音频流的权重。如果指定的权重少于输入数量,则最后一个权重将分配给剩余的输入。每个输入的默认权重为 1。
- 归一化
始终缩放输入,而不是仅执行样本求和。如果此选项被禁用,请注意,如果输入在被此滤波器过滤之前或之后未被归一化,则会出现严重的削波。默认情况下启用。
36.35.1 示例
- 这会将 3 个输入音频流混合到单个输出,其持续时间与第一个输入相同,并且 dropout 过渡时间为 3 秒
ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT
- 这会将一个人声和一个音乐输入音频流混合到单个输出,其持续时间与最长输入相同。音乐的权重是人声的四分之一,并且输入未被归一化
ffmpeg -i VOCALS -i MUSIC -filter_complex amix=inputs=2:duration=longest:dropout_transition=0:weights="1 0.25":normalize=0 OUTPUT
36.35.2 命令
此滤波器支持以下命令
- 权重
- 归一化
语法与同名选项相同。
36.36 amultiply
将第一个音频流与第二个音频流相乘,并将结果存储在输出音频流中。乘法是通过将第一个流中的每个样本与第二个流中相同位置的样本相乘来完成的。
通过这种逐元素乘法,可以创建幅度淡化和幅度调制。
36.37 anequalizer
每个通道的高阶参数多频段均衡器。
它接受以下参数
- 参数
-
此选项字符串的格式为:“cchn f=cf w=w g=g t=f | ...” 每个均衡器频段由“|”分隔。
- chn
设置将应用均衡的通道号。如果输入没有该通道,则忽略该条目。
- f
设置频段的中心频率。如果输入没有该频率,则忽略该条目。
- w
以赫兹为单位设置频段宽度。
- g
以 dB 为单位设置频段增益。
- t
设置频段的滤波器类型,可选,可以是
- ‘0’
巴特沃斯,这是默认值。
- ‘1’
切比雪夫 1 型。
- ‘2’
切比雪夫 2 型。
- 曲线
启用此选项后,均衡器的频率响应将显示在视频流中。
- size
设置视频流大小。仅当激活曲线选项时才有用。
- mgain
设置将显示的最大增益。仅当激活曲线选项时才有用。将其设置为合理的值可以显示从彼此太靠近的邻近频段导出的增益,因此当两者都激活时会产生更高的增益。
- fscale
设置用于在视频输出中绘制频率响应的频率刻度。可以是线性或对数的。默认为对数。
- 颜色
设置将显示在视频流中的每个通道曲线的颜色。这是由空格或“|”分隔的颜色名称列表。无法识别或缺失的颜色将替换为白色。
36.37.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.37.2 命令
此滤波器支持以下命令
- 更改
更改现有滤波器参数。命令的语法为:“fN|f=freq|w=width|g=gain”
fN 是现有的滤波器编号,从 0 开始,如果没有这样的滤波器可用,则返回错误。freq 设置新的频率参数。width 设置以赫兹为单位的新宽度参数。gain 设置以 dB 为单位的新增益参数。
使用 asendcmd 的完整滤波器调用可能如下所示:asendcmd=c='4.0 anequalizer change 0|f=200|w=50|g=1',anequalizer=...
36.38 anlmdn
使用非局部均值算法降低音频样本中的宽带噪声。
每个采样点都会通过查找具有相似上下文的其他采样点进行调整。这种上下文相似性是通过比较它们周围大小为 p 的邻近区域来定义的。在采样点周围 r 的区域内搜索邻近区域。
该滤波器接受以下选项
- 强度,s
设置去噪强度。允许范围为 0.00001 到 10000。默认值为 0.00001。
- 邻近区域,p
设置邻近区域半径持续时间。允许范围为 1 到 100 毫秒。默认值为 2 毫秒。
- 搜索半径,r
设置搜索半径持续时间。允许范围为 2 到 300 毫秒。默认值为 6 毫秒。
- 输出 (output), o
设置输出模式。
它接受以下值
- i
保持输入不变。
- o
传递已过滤掉的噪声。
- n
仅传递噪声。
默认值为 o。
- 平滑,m
设置平滑因子。默认值为 11。允许范围为 1 到 1000。
36.38.1 命令
此滤波器支持上述所有选项作为命令。
36.39 anlmf, anlms
将归一化最小均方(Squares|Fourth)算法应用于使用第二个音频流的第一个音频流。
此自适应滤波器用于通过查找与产生误差信号的最小均方值(期望的第二个输入音频流与实际信号,第一个输入音频流之间的差异)相关的滤波器系数来模拟所需的滤波器。
以下是对接受选项的描述。
- order
设置滤波器阶数。
- mu
设置滤波器 mu。
- eps
设置滤波器 eps。
- 泄漏
设置滤波器泄漏。
- out_mode
它接受以下值
- i
传递第一个输入。
- d
传递第二个输入。
- o
传递期望信号(即第二个输入)和误差信号估计值之间的差值。
- n
传递输入信号(即第一个输入)和误差信号估计值之间的差值。
- e
传递误差信号的估计样本。
默认值为 o。
- precision
设置处理样本时要使用的精度。
- auto
根据其他滤波器自动选择内部样本格式。
- float
始终使用单精度浮点样本格式。
- double
始终使用双精度浮点样本格式。
36.39.1 示例
- 此滤波器的许多用途之一是降噪,输入音频会使用延迟固定量的相同采样进行滤波,例如立体声音频的一个例子是
asplit[a][b],[a]adelay=32S|32S[a],[b][a]anlms=order=128:leakage=0.0005:mu=.5:out_mode=o
36.39.2 命令
此滤波器支持与选项相同的命令,不包括 order
选项。
36.40 anull
将音频源原封不动地传递到输出。
36.41 apad
在音频流的末尾填充静音。
这可以与 ffmpeg
的 -shortest 一起使用,将音频流扩展到与视频流相同的长度。
以下是对接受选项的描述。
- packet_size
设置静音数据包大小。默认值为 4096。
- pad_len
设置要添加到末尾的静音采样数。达到该值后,流将终止。此选项与 whole_len 互斥。
- whole_len
设置输出音频流中的最小总采样数。如果该值大于输入音频长度,则会在末尾添加静音,直到达到该值。此选项与 pad_len 互斥。
- pad_dur
指定要添加的静音采样的持续时间。有关接受的语法,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的“时间持续时间”部分。仅在设置为非负值时使用。
- whole_dur
指定输出音频流中的最小总持续时间。有关接受的语法,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的“时间持续时间”部分。仅在设置为非负值时使用。如果该值大于输入音频长度,则会在末尾添加静音,直到达到该值。此选项与 pad_dur 互斥。
如果未设置 pad_len、whole_len、pad_dur 或 whole_dur 选项,则滤波器将无限期地在输入流的末尾添加静音。
请注意,对于 ffmpeg 4.4 及更早版本,零值 pad_dur 或 whole_dur 也会导致滤波器无限期地添加静音。
36.41.1 示例
- 在输入末尾添加 1024 个静音采样点
apad=pad_len=1024
- 确保音频输出至少包含 10000 个采样点,如果需要,用静音填充输入
apad=whole_len=10000
- 使用
ffmpeg
用静音填充音频输入,这样在使用 shortest 选项时,视频流始终是最短的,并且将在输出文件中转换到结尾ffmpeg -i VIDEO -i AUDIO -filter_complex "[1:0]apad" -shortest OUTPUT
36.42 aphaser
向输入音频添加相位效果。
移相器滤波器在频谱中创建一系列峰和谷。峰和谷的位置被调制,使其随时间变化,从而产生扫频效果。
以下是对接受参数的描述。
- in_gain
设置输入增益。默认为 0.4。
- out_gain
设置输出增益。默认为 0.74。
- 延迟
设置延迟(以毫秒为单位)。默认为 3.0。
- 衰减
设置衰减。默认为 0.4。
- speed
设置调制速度(以 Hz 为单位)。默认为 0.5。
- type
设置调制类型。默认为三角形。
它接受以下值
- “三角形,t”
- “正弦波,s”
36.43 aphaseshift
对输入音频采样应用相移。
该滤波器接受以下选项
- shift
指定相移。允许范围为 -1.0 到 1.0。默认值为 0.0。
- level
设置应用于最终输出的输出增益。允许的范围是 0.0 到 1.0。默认值为 1.0。
- order
设置用于滤波的滤波器阶数。允许的范围是 1 到 16。默认值为 8。
36.43.1 命令
此滤波器支持上述所有选项作为命令。
36.44 apsnr
测量音频峰值信噪比。
此滤波器需要两个音频流作为输入,并输出第一个音频流。结果以 dB 为单位,在每个输入的末尾按通道显示。
36.45 apsyclip
将心理声学削波器应用于输入音频流。
该滤波器接受以下选项
- level_in
设置输入增益。默认值为 1。范围为 [0.015625 - 64]。
- level_out
设置输出增益。默认值为 1。范围为 [0.015625 - 64]。
- 削波
设置削波开始值。默认值为 0dBFS 或 1。
- 差异
仅输出差异采样,有助于听到引入的失真。默认情况下禁用。
- 自适应
设置应用的自适应失真强度。默认值为 0.5。允许范围为 0 到 1。
- 迭代
设置心理声学削波器的迭代次数。允许范围为 1 到 20。默认值为 10。
- level
自动调整输出信号电平。默认情况下禁用。如果启用,此功能会将音频标准化回 0dBFS。
36.45.1 命令
此滤波器支持上述所有选项作为命令。
36.46 apulsator
音频脉冲器是自动平移器和颤音之间的某种东西。但它也可以产生有趣的立体声效果。脉冲器基于具有不同波形和移相的 LFO(低频振荡器)改变左右声道的音量。此滤波器能够定义左右声道之间的偏移量。偏移量为 0 表示两个 LFO 形状彼此匹配。左右声道被均匀地改变 - 一个传统的颤音。偏移量为 50% 表示右声道的形状在相位上正好偏移(或向后移动约一半频率) - 脉冲器充当自动平移器。在 1 处,两条曲线再次匹配。介于两者之间的每个设置在所有阶段之间无缝地移动相移,并产生带有正弦波和三角波的“旁路”声音。您设置的偏移量越接近 1(从 0.5 开始),信号从左扬声器传递到右扬声器的速度就越快。
该滤波器接受以下选项
- level_in
设置输入增益。默认值为 1。范围为 [0.015625 - 64]。
- level_out
设置输出增益。默认值为 1。范围为 [0.015625 - 64]。
- mode
设置 LFO 将使用的波形形状。可以是以下之一:正弦波、三角形波、方波、锯齿波或锯齿波下行。默认为正弦波。
- amount
设置调制。定义原始信号受 LFO 影响的程度。
- offset_l
设置左声道偏移量。默认为 0。允许范围为 [0 - 1]。
- offset_r
设置右声道偏移量。默认为 0.5。允许范围为 [0 - 1]。
- 宽度
设置脉冲宽度。默认为 1。允许范围为 [0 - 2]。
- timing
设置可能的定时模式。可以是以下之一:bpm、ms 或 hz。默认为 hz。
- bpm
设置 bpm。默认为 120。允许范围为 [30 - 300]。仅当定时设置为 bpm 时使用。
- ms
设置毫秒数。默认值为 500。允许范围为 [10 - 2000]。仅当时间单位设置为毫秒时使用。
- 赫兹
设置频率,单位为赫兹。默认值为 2。允许范围为 [0.01 - 100]。仅当时间单位设置为赫兹时使用。
36.47 aresample
使用 libswresample 库将输入音频重采样到指定的参数。如果未指定任何参数,则过滤器将在其输入和输出之间自动转换。
此过滤器还能够拉伸/压缩音频数据以使其与时间戳匹配,或者注入静音/切除音频以使其与时间戳匹配,或者两者兼而有之,或者都不进行操作。
该过滤器接受语法 [sample_rate:]resampler_options,其中 sample_rate 表示采样率,而 resampler_options 是 key=value 对的列表,用 ":" 分隔。有关支持的选项的完整列表,请参阅 ffmpeg-resampler(1) 手册中的“重采样器选项”部分。
36.47.1 示例
- 将输入音频重采样到 44100Hz
aresample=44100
- 将样本拉伸/压缩到给定的时间戳,每秒最大补偿 1000 个样本
aresample=async=1000
36.48 areverse
反转音频剪辑。
警告:此过滤器需要内存来缓冲整个剪辑,因此建议进行修剪。
36.48.1 示例
- 获取剪辑的前 5 秒,并将其反转。
atrim=end=5,areverse
36.49 arls
使用第二个音频流将递归最小二乘算法应用于第一个音频流。
此自适应滤波器用于通过递归查找与产生误差信号(期望的第二个输入音频流与实际信号(第一个输入音频流)之间的差值)的最小加权线性最小二乘成本函数相关的滤波器系数来模拟所需的滤波器。
以下是对接受选项的描述。
- order
设置滤波器阶数。
- lambda
设置遗忘因子。
- delta
设置初始化内部协方差矩阵的系数。
- out_mode
设置滤波器输出样本。它接受以下值
- i
传递第一个输入。
- d
传递第二个输入。
- o
传递期望信号(即第二个输入)和误差信号估计值之间的差值。
- n
传递输入信号(即第一个输入)和误差信号估计值之间的差值。
- e
传递误差信号的估计样本。
默认值为 o。
- precision
设置处理样本时要使用的精度。
- auto
根据其他滤波器自动选择内部样本格式。
- float
始终使用单精度浮点样本格式。
- double
始终使用双精度浮点样本格式。
36.50 arnndn
使用循环神经网络减少语音中的噪声。
此过滤器接受以下选项
- model, m
设置要加载的训练模型文件。此选项始终是必需的。
- mix
设置将滤波后的样本混合到最终输出的程度。允许范围为 -1 到 1。默认值为 1。负值是特殊的,它们设置在最终滤波器输出中保留滤波后的噪声的程度。将此选项设置为 -1 可以听到从输入信号中实际去除的噪声。
36.50.1 命令
此滤波器支持上述所有选项作为命令。
36.51 asdr
测量音频信号失真比。
此滤波器需要两个音频流作为输入,并输出第一个音频流。结果以 dB 为单位,在每个输入的末尾按通道显示。
36.52 asetnsamples
设置每个输出音频帧的样本数。
最后一个输出数据包可能包含不同数量的样本,因为当输入音频发出结束信号时,过滤器将刷新所有剩余的样本。
该滤波器接受以下选项
- nb_out_samples,n
设置每个输出音频帧的帧数。该数字是指每个通道的样本数。默认值为 1024。
- pad,p
如果设置为 1,过滤器将用零填充最后一个音频帧,以便最后一个帧包含与前一个帧相同的样本数。默认值为 1。
例如,要将每帧样本数设置为 1234 并禁用最后一帧的填充,请使用
asetnsamples=n=1234:p=0
36.53 asetrate
设置采样率,而不更改 PCM 数据。这将导致速度和音调的变化。
该滤波器接受以下选项
- sample_rate, r
设置输出采样率。默认值为 44100 Hz。
36.54 ashowinfo
显示一行包含每个输入音频帧的各种信息。输入音频不会被修改。
显示的行包含 key:value 形式的键/值对序列。
输出中显示以下值
- n
输入帧的(顺序)编号,从 0 开始。
- pts
输入帧的表示时间戳,以时间基准单位表示;时间基准取决于过滤器输入填充,通常为 1/sample_rate。
- pts_time
输入帧的表示时间戳,以秒为单位。
- fmt
样本格式。
- chlayout
通道布局。
- rate
音频帧的采样率。
- nb_samples
帧中样本数(每个通道)。
- checksum
音频数据的 Adler-32 校验和(以十六进制打印)。对于平面音频,数据被视为所有平面都已连接。
- plane_checksums
每个数据平面的 Adler-32 校验和的列表。
36.55 asisdr
测量音频缩放不变的信号失真比。
此滤波器需要两个音频流作为输入,并输出第一个音频流。结果以 dB 为单位,在每个输入的末尾按通道显示。
36.56 asoftclip
应用音频软削波。
软削波是一种失真效果,其中信号的幅度沿着平滑曲线饱和,而不是硬削波的突兀形状。
此过滤器接受以下选项
- type
设置软削波的类型。
它接受以下值
- hard
- tanh
- atan
- cubic
- 指数 (exp)
- alg
- quintic
- sin
- erf
- threshold
设置开始削波的阈值。默认值为 0dB 或 1。
- output
设置应用于输出的增益。默认值为 0dB 或 1。
- param
设置控制 sigmoid 函数的附加参数。
- oversample
设置过采样因子。
36.56.1 命令
此滤波器支持上述所有选项作为命令。
36.57 aspectralstats
显示有关音频通道的频域统计信息。统计信息被计算并存储为每个音频通道和每个音频帧的元数据。
它接受以下选项
- win_size
设置窗口长度,单位为样本。默认值为 2048。允许范围为 32 到 65536。
- win_func
设置窗口函数。
它接受以下值
- ‘rect’
- ‘bartlett’
- ‘hann, hanning’
- ‘hamming’
- ‘blackman’
- ‘welch’
- ‘flattop’
- ‘bharris’
- ‘bnuttall’
- ‘bhann’
- ‘sine’
- ‘nuttall’
- ‘lanczos’
- ‘gauss’
- ‘tukey’
- ‘dolph’
- ‘cauchy’
- ‘parzen’
- ‘poisson’
- ‘bohman’
- ‘kaiser’
默认为
hann
。- overlap
设置窗口重叠。允许范围为
0
到1
。默认值为0.5
。- measure
选择要测量的参数。元数据键可以用作标志,默认为 all,它测量所有内容。none 禁用所有测量。
以下是每个元数据键的列表
- mean
- variance
- centroid
- spread
- skewness
- kurtosis
- entropy
- flatness
- crest
- flux
- 斜率
- decrease
- rolloff
36.58 asr
自动语音识别
此过滤器使用 PocketSphinx 进行语音识别。要启用此过滤器的编译,您需要使用 --enable-pocketsphinx
配置 FFmpeg。
它接受以下选项
- rate
设置输入音频的采样率。默认值为
16000
。这需要与语音模型匹配,否则会得到较差的结果。- hmm
设置包含声学模型文件的字典。
- dict
设置发音字典。
- lm
设置语言模型文件。
- lmctl
设置语言模型集。
- lmname
设置要使用的语言模型。
- logfn
设置日志消息的输出。
该过滤器将识别出的语音作为帧元数据 lavfi.asr.text
导出。
36.59 astats
显示有关音频通道的时域统计信息。统计信息针对每个音频通道计算和显示,并且在适用的情况下,还会给出总体数据。
它接受以下选项
- length
短窗口长度,以秒为单位,用于峰值和谷值 RMS 测量。默认值为
0.05
(50 毫秒)。允许范围为[0 - 10]
。- metadata
-
设置元数据注入。所有元数据键都以
lavfi.astats.X
为前缀,其中X
是从 1 开始的通道号或字符串Overall
。默认情况下禁用。每个通道的可用键为: Bit_depth Crest_factor DC_offset Dynamic_range Entropy Flat_factor Max_difference Max_level Mean_difference Min_difference Min_level Noise_floor Noise_floor_count Number_of_Infs Number_of_NaNs Number_of_denormals Peak_count Abs_Peak_count Peak_level RMS_difference RMS_peak RMS_trough Zero_crossings Zero_crossings_rate
对于
Overall
:Bit_depth DC_offset Entropy Flat_factor Max_difference Max_level Mean_difference Min_difference Min_level Noise_floor Noise_floor_count Number_of_Infs Number_of_NaNs Number_of_denormals Number_of_samples Peak_count Abs_Peak_count Peak_level RMS_difference RMS_level RMS_peak RMS_trough例如,完整的键值看起来像
lavfi.astats.1.DC_offset
或lavfi.astats.Overall.Peak_count
。请阅读以下键值的描述。
- reset
设置在重置前计算累积统计信息的帧数。默认情况下禁用。
- measure_perchannel
选择按通道测量的参数。元数据键可以用作标志,默认值为 all,表示测量所有参数。none 表示禁用所有按通道测量。
- measure_overall
选择整体测量的参数。元数据键可以用作标志,默认值为 all,表示测量所有参数。none 表示禁用所有整体测量。
以下是测量键值的描述
- none
不测量
- all
测量所有
- Bit_depth
音频的整体位深度,即每个样本使用的位数
- Crest_factor
峰值与 RMS 值的标准比率(注意:不是 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
信号达到 Noise floor 的次数(不是样本数)
- 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.60 asubboost
增强低音炮频率。
该滤波器接受以下选项
- dry
设置干声增益,保留原始信号的量。允许范围为 0 到 1。默认值为 1.0。
- wet
设置湿声增益,保留滤波信号的量。允许范围为 0 到 1。默认值为 1.0。
- boost
设置最大增强因子。允许范围为 1 到 12。默认值为 2。
- 衰减
设置延迟线衰减增益值。允许范围为 0 到 1。默认值为 0.0。
- feedback
设置延迟线反馈增益值。允许范围为 0 到 1。默认值为 0.9。
- cutoff
设置截止频率,单位为赫兹。允许范围为 50 到 900。默认值为 100。
- 斜率
设置截止频率的斜率量。允许范围为 0.0001 到 1。默认值为 0.5。
- 延迟
设置延迟。允许范围为 1 到 100。默认值为 20。
- channels
设置要处理的通道。默认值为所有可用通道。
36.60.1 命令
此滤波器支持上述所有选项作为命令。
36.61 asubcut
削减低音炮频率。
此滤波器允许设置比高通滤波器更陡峭的滚降,因此能够更多地衰减阻带中的频率内容。
该滤波器接受以下选项
- cutoff
设置截止频率,单位为赫兹。允许范围为 2 到 200。默认值为 20。
- order
设置滤波器阶数。可用值为 3 到 20。默认值为 10。
- level
设置输入增益电平。 允许范围为 0 到 1。默认值为 1。
36.61.1 命令
此滤波器支持上述所有选项作为命令。
36.62 asupercut
削减超高频率。
该滤波器接受以下选项
- cutoff
设置截止频率,单位为赫兹。允许范围为 20000 到 192000。默认值为 20000。
- order
设置滤波器阶数。可用值为 3 到 20。默认值为 10。
- level
设置输入增益电平。 允许范围为 0 到 1。默认值为 1。
36.62.1 命令
此滤波器支持上述所有选项作为命令。
36.63 asuperpass
应用高阶巴特沃斯带通滤波器。
该滤波器接受以下选项
- centerf
设置中心频率,单位为赫兹。允许范围为 2 到 999999。默认值为 1000。
- order
设置滤波器阶数。可用值为 4 到 20。默认值为 4。
- qfactor
设置 Q 因子。允许范围为 0.01 到 100。默认值为 1。
- level
设置输入增益电平。允许范围为 0 到 2。默认值为 1。
36.63.1 命令
此滤波器支持上述所有选项作为命令。
36.64 asuperstop
应用高阶巴特沃斯带阻滤波器。
该滤波器接受以下选项
- centerf
设置中心频率,单位为赫兹。允许范围为 2 到 999999。默认值为 1000。
- order
设置滤波器阶数。可用值为 4 到 20。默认值为 4。
- qfactor
设置 Q 因子。允许范围为 0.01 到 100。默认值为 1。
- level
设置输入增益电平。允许范围为 0 到 2。默认值为 1。
36.64.1 命令
此滤波器支持上述所有选项作为命令。
36.65 atempo
调整音频节奏。
该滤波器只接受一个参数,即音频节奏。如果未指定,则滤波器将假设名义节奏为 1.0。节奏必须在 [0.5, 100.0] 范围内。
请注意,大于 2 的节奏将跳过一些样本,而不是将它们混合在一起。如果出于任何原因对此感到担忧,始终可以串联几个 atempo 实例来实现所需的输出节奏。
36.65.1 示例
- 将音频速度减慢至 80% 节奏
atempo=0.8
- 将音频速度加快至 300% 节奏
atempo=3
- 通过串联两个 atempo 实例将音频速度加快至 300% 节奏
atempo=sqrt(3),atempo=sqrt(3)
36.65.2 命令
此滤波器支持以下命令
- tempo
更改滤波器节奏缩放因子。命令的语法为:“tempo”
36.66 atilt
将频谱倾斜滤波器应用于音频流。
此滤波器在任何指定的频段上应用任何频谱滚降斜率。
该滤波器接受以下选项
- freq
设置倾斜的中心频率,单位为 Hz。默认值为 10000 Hz。
- 斜率
设置倾斜的斜率方向。默认值为 0。允许范围为 -1 到 1。
- 宽度
设置倾斜的宽度。默认值为 1000。允许范围为 100 到 10000。
- order
设置倾斜滤波器的阶数。
- level
设置输入音量电平。允许范围为 0 到 4。默认值为 1。
36.66.1 命令
此滤波器支持上述所有选项作为命令。
36.67 atrim
修剪输入,使输出包含输入的一个连续子部分。
它接受以下参数
- start
要保留的起始部分的起始时间戳(以秒为单位)。即,时间戳为 start 的音频样本将是输出中的第一个样本。
- end
指定要丢弃的第一个音频样本的时间,即,紧接在时间戳为 end 的样本之前的音频样本将是输出中的最后一个样本。
- start_pts
与 start 相同,不同之处在于此选项以样本而不是秒为单位设置起始时间戳。
- end_pts
与 end 相同,不同之处在于此选项以样本而不是秒为单位设置结束时间戳。
- duration
输出的最大持续时间(以秒为单位)。
- start_sample
应输出的第一个样本的编号。
- end_sample
应丢弃的第一个样本的编号。
start、end 和 duration 以时间持续时间规范表示;请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分。
请注意,前两组起始/结束选项和 duration 选项是基于帧时间戳的,而 _sample 选项则仅仅计算通过滤波器的采样点数量。因此,当时间戳错误、不准确或不是从零开始时,start/end_pts 和 start/end_sample 会给出不同的结果。还要注意,此滤波器不会修改时间戳。如果您希望输出时间戳从零开始,请在 atrim 滤波器之后插入 asetpts 滤波器。
如果设置了多个起始或结束选项,此滤波器会尝试“贪婪”地保留至少匹配其中一个指定约束的所有采样点。要仅保留同时匹配所有约束的部分,请链式使用多个 atrim 滤波器。
默认设置是保留所有输入。因此,可以仅设置例如结束值,以保留指定时间之前的所有内容。
示例
- 丢弃除输入的第二分钟之外的所有内容
ffmpeg -i INPUT -af atrim=60:120
- 仅保留前 1000 个采样点
ffmpeg -i INPUT -af atrim=end_sample=1000
36.68 axcorrelate
计算两个输入音频流之间归一化的窗口交叉相关性。
结果采样点始终在 -1 和 1 之间(包括 -1 和 1)。如果结果为 1,则表示两个输入采样点在该选定片段中高度相关。结果为 0 表示它们根本不相关。如果结果为 -1,则表示两个输入采样点异相,这意味着它们会相互抵消。
该滤波器接受以下选项
- size
设置计算交叉相关性的片段大小。默认值为 256。允许范围为 2 到 131072。
- algo
设置交叉相关算法。可以是
slow
、fast
或best
。默认值为best
。快速算法假定任何给定片段的平均值始终为零,因此需要的计算量要少得多。这通常不是真的,但对于典型的音频流是有效的。
36.68.1 示例
- 计算立体声音频流中通道之间的相关性
ffmpeg -i stereo.wav -af channelsplit,axcorrelate=size=1024:algo=fast correlation.wav
36.69 bandpass
应用一个双极巴特沃斯带通滤波器,其中心频率为 frequency,(3dB 点)带宽为 width。 csg 选项选择恒定裙边增益(峰值增益 = Q)而不是默认值:恒定 0dB 峰值增益。滤波器的滚降为每倍频程 6dB(每十倍频程 20dB)。
该滤波器接受以下选项
- 频率,f
设置滤波器的中心频率。默认值为
3000
。- csg
如果设置为 1,则为恒定裙边增益。默认为 0。
- 宽度类型,t
设置指定滤波器带宽的方法。
- h
Hz
- q
Q因子
- o
倍频程
- s
斜率
- k
kHz
- 宽度,w
以 width_type 单位指定滤波器的带宽。
- 混合,m
在输出中使用滤波信号的程度。默认值为 1。范围在 0 到 1 之间。
- 通道,c
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- 归一化,n
归一化双二阶系数,默认情况下禁用。启用它会将直流的幅度响应归一化为 0dB。
- 变换,a
设置 IIR 滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- 精度,r
设置滤波精度。
- auto
根据环绕滤波器选择自动采样格式。
- s16
始终使用有符号 16 位。
- s32
始终使用有符号 32 位。
- f32
始终使用浮点 32 位。
- f64
始终使用浮点 64 位。
- block_size, b
设置用于反向 IIR 处理的块大小。如果此值设置得足够高(高于达到接近零值的截断脉冲响应长度),滤波将变为线性相位,否则如果不够大,只会产生令人讨厌的伪影。
请注意,当设置为非零值时,滤波器延迟将正好是这么多采样点。
36.69.1 命令
此滤波器支持以下命令
- 频率,f
更改带通频率。命令语法为:"frequency"
- 宽度类型,t
更改带通 width_type。命令语法为:"width_type"
- 宽度,w
更改带通宽度。命令语法为:"width"
- 混合,m
更改带通混合。命令语法为:"mix"
36.70 bandreject
应用一个双极巴特沃斯带阻滤波器,其中心频率为 frequency,(3dB 点)带宽为 width。滤波器的滚降为每倍频程 6dB(每十倍频程 20dB)。
该滤波器接受以下选项
- 频率,f
设置滤波器的中心频率。默认值为
3000
。- 宽度类型,t
设置指定滤波器带宽的方法。
- h
Hz
- q
Q因子
- o
倍频程
- s
斜率
- k
kHz
- 宽度,w
以 width_type 单位指定滤波器的带宽。
- 混合,m
在输出中使用滤波信号的程度。默认值为 1。范围在 0 到 1 之间。
- 通道,c
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- 归一化,n
归一化双二阶系数,默认情况下禁用。启用它会将直流的幅度响应归一化为 0dB。
- 变换,a
设置 IIR 滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- 精度,r
设置滤波精度。
- auto
根据环绕滤波器选择自动采样格式。
- s16
始终使用有符号 16 位。
- s32
始终使用有符号 32 位。
- f32
始终使用浮点 32 位。
- f64
始终使用浮点 64 位。
- block_size, b
设置用于反向 IIR 处理的块大小。如果此值设置得足够高(高于达到接近零值的截断脉冲响应长度),滤波将变为线性相位,否则如果不够大,只会产生令人讨厌的伪影。
请注意,当设置为非零值时,滤波器延迟将正好是这么多采样点。
36.70.1 命令
此滤波器支持以下命令
- 频率,f
更改带阻频率。命令语法为:"frequency"
- 宽度类型,t
更改带阻 width_type。命令语法为:"width_type"
- 宽度,w
更改带阻宽度。命令语法为:"width"
- 混合,m
更改带阻混合。命令语法为:"mix"
36.71 bass, lowshelf
使用双极搁架滤波器提升或削减音频的低频(较低)频率,该滤波器的响应类似于标准高保真音调控制。这也称为搁架均衡 (EQ)。
该滤波器接受以下选项
- gain, g
给出 0 Hz 的增益。其有用范围约为 -20(用于大幅削减)到 +20(用于大幅提升)。使用正增益时请注意削波。
- 频率,f
设置滤波器的中心频率,因此可用于扩展或缩小要提升或削减的频率范围。默认值为
100
Hz。- 宽度类型,t
设置指定滤波器带宽的方法。
- h
Hz
- q
Q因子
- o
倍频程
- s
斜率
- k
kHz
- 宽度,w
确定滤波器搁架过渡的陡峭程度。
- 极点,p
设置极点数。默认值为 2。
- 混合,m
在输出中使用滤波信号的程度。默认值为 1。范围在 0 到 1 之间。
- 通道,c
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- 归一化,n
归一化双二阶系数,默认情况下禁用。启用它会将直流的幅度响应归一化为 0dB。
- 变换,a
设置 IIR 滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- 精度,r
设置滤波精度。
- auto
根据环绕滤波器选择自动采样格式。
- s16
始终使用有符号 16 位。
- s32
始终使用有符号 32 位。
- f32
始终使用浮点 32 位。
- f64
始终使用浮点 64 位。
- block_size, b
设置用于反向 IIR 处理的块大小。如果此值设置得足够高(高于达到接近零值的截断脉冲响应长度),滤波将变为线性相位,否则如果不够大,只会产生令人讨厌的伪影。
请注意,当设置为非零值时,滤波器延迟将正好是这么多采样点。
36.71.1 命令
此滤波器支持以下命令
- 频率,f
更改低音频率。命令语法为:"frequency"
- 宽度类型,t
更改低音 width_type。命令语法为:"width_type"
- 宽度,w
更改低音宽度。命令语法为:"width"
- gain, g
更改低音增益。命令语法为:"gain"
- 混合,m
更改低音混合。命令语法为:"mix"
36.72 biquad
应用具有给定系数的双二阶 IIR 滤波器。其中 b0、b1、b2 和 a0、a1、a2 分别是分子和分母系数。而 channels、c 指定要滤波的通道,默认情况下会滤波所有可用通道。
36.72.1 命令
此滤波器支持以下命令
- a0
- a1
- a2
- b0
- b1
- b2
更改双二阶参数。命令语法为:"value"
- 混合,m
在输出中使用滤波信号的程度。默认值为 1。范围在 0 到 1 之间。
- 通道,c
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- 归一化,n
归一化双二阶系数,默认情况下禁用。启用它会将直流的幅度响应归一化为 0dB。
- 变换,a
设置 IIR 滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- 精度,r
设置滤波精度。
- auto
根据环绕滤波器选择自动采样格式。
- s16
始终使用有符号 16 位。
- s32
始终使用有符号 32 位。
- f32
始终使用浮点 32 位。
- f64
始终使用浮点 64 位。
- block_size, b
设置用于反向 IIR 处理的块大小。如果此值设置得足够高(高于达到接近零值的截断脉冲响应长度),滤波将变为线性相位,否则如果不够大,只会产生令人讨厌的伪影。
请注意,当设置为非零值时,滤波器延迟将正好是这么多采样点。
36.73 bs2b
Bauer 立体声到双耳转换,可改善立体声音频记录的耳机收听效果。
要启用此滤波器的编译,您需要使用 --enable-libbs2b
配置 FFmpeg。
它接受以下参数
- profile
预定义的串扰级别。
- 默认
默认级别 (fcut=700, feed=50)。
- cmoy
Chu Moy 电路 (fcut=700, feed=60)。
- jmeier
Jan Meier 电路 (fcut=650, feed=95)。
- fcut
截止频率(以 Hz 为单位)。
- feed
馈送级别(以 Hz 为单位)。
36.74 channelmap
将输入通道重新映射到新的位置。
它接受以下参数
- map
将输入通道映射到输出通道。参数是以“|”分隔的映射列表,每个映射采用
in_channel-out_channel
或in_channel
形式。in_channel 可以是输入通道的名称(例如 FL 表示前左),也可以是其在输入通道布局中的索引。out_channel 是输出通道的名称或其在输出通道布局中的索引。如果未给出 out_channel,则它隐式地是一个索引,从零开始,并且每个映射增加一。不允许混合使用不同类型的映射,否则会导致解析错误。- channel_layout
输出流的通道布局。如果未指定,则滤波器将基于 out_channel 名称或映射数量来猜测。猜测的布局不一定会按映射的顺序包含通道。
如果没有映射,滤波器将隐式地将输入通道映射到输出通道,从而保留索引。
36.74.1 示例
- 例如,假设有一个 5.1+降混输入的 MOV 文件,
ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
将从输入的降混通道创建一个标记为立体的输出 WAV 文件。
- 要修复以 AAC 的原生通道顺序不正确编码的 5.1 WAV
ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:5.1' out.wav
36.75 channelsplit
将输入音频流中的每个通道拆分为单独的输出流。
它接受以下参数
- channel_layout
输入流的通道布局。默认为“stereo”。
- channels
描述要提取为单独输出流的通道的通道布局,或者使用 “all” 将每个输入通道提取为单独的流。默认值为“all”。
选择输入通道布局中不存在的通道将导致错误。
36.75.1 示例
- 例如,假设输入的是一个立体声 MP3 文件,
ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv
将创建一个包含两个音频流的 Matroska 输出文件,一个只包含左声道,另一个只包含右声道。
- 将 5.1 WAV 文件拆分为每个通道的文件
ffmpeg -i in.wav -filter_complex 'channelsplit=channel_layout=5.1[FL][FR][FC][LFE][SL][SR]' -map '[FL]' front_left.wav -map '[FR]' front_right.wav -map '[FC]' front_center.wav -map '[LFE]' lfe.wav -map '[SL]' side_left.wav -map '[SR]' side_right.wav
- 仅从 5.1 WAV 文件中提取 LFE
ffmpeg -i in.wav -filter_complex 'channelsplit=channel_layout=5.1:channels=LFE[LFE]' -map '[LFE]' lfe.wav
36.76 chorus
向音频添加合唱效果。
可以使单一人声听起来像合唱,但也可以应用于乐器。
合唱效果类似于具有短延迟的回声效果,但与回声的延迟是恒定的不同,合唱效果使用正弦或三角形调制来改变延迟。调制深度定义了调制后的延迟在延迟之前或之后播放的范围。因此,延迟的声音听起来会更慢或更快,也就是说,延迟的声音围绕原始声音进行调整,就像合唱中一些人声略微走调一样。
它接受以下参数
- in_gain
设置输入增益。默认为 0.4。
- out_gain
设置输出增益。默认值为 0.4。
- delays
设置延迟。典型的延迟约为 40 毫秒到 60 毫秒。
- decays
设置衰减。
- 速度
设置速度。
- 深度
设置深度。
36.76.1 示例
- 单个延迟
chorus=0.7:0.9:55:0.4:0.25:2
- 两个延迟
chorus=0.6:0.9:50|60:0.4|0.32:0.25|0.4:2|1.3
- 具有三个延迟的更饱满的合唱效果
chorus=0.5:0.9:50|60|40:0.4|0.32|0.3:0.25|0.4|0.3:2|2.3|1.3
36.77 compand
压缩或扩展音频的动态范围。
它接受以下参数
- 启动时间
- decays
每个通道的输入信号瞬时电平进行平均以确定其音量的秒数列表。启动时间 指的是音量增加,而 衰减时间 指的是音量减少。在大多数情况下,启动时间(对音频变大的响应)应短于衰减时间,因为人耳对突然变大的音频比突然变小的音频更敏感。启动时间的典型值为 0.3 秒,衰减时间的典型值为 0.8 秒。如果指定的启动和衰减次数少于通道数,则最后一组启动/衰减将用于所有剩余的通道。
- 点
传递函数的点列表,以相对于最大可能信号幅度的 dB 为单位指定。每个关键点列表必须使用以下语法定义:
x0/y0|x1/y1|x2/y2|....
或x0/y0 x1/y1 x2/y2 ....
输入值必须严格递增,但传递函数不必单调递增。假定点
0/0
,但可以被覆盖 (通过0/out-dBn
)。传递函数的典型值为-70/-70|-60/-20|1/0
。- 软拐点
设置所有连接点的曲线半径(以 dB 为单位)。默认值为 0.01。
- 增益
设置在传递函数的所有点上应用的额外增益(以 dB 为单位)。这可以轻松调整整体增益。默认值为 0。
- 音量
设置每个通道在开始滤波时假定的初始音量(以 dB 为单位)。这允许用户最初提供一个标称电平,例如,在压扩开始工作之前,不会对初始信号电平应用非常大的增益。对于最初很安静的音频,典型值为 -90 dB。默认值为 0。
- 延迟
设置延迟,以秒为单位。立即分析输入音频,但音频在馈送到音量调节器之前会延迟。指定一个大致等于启动/衰减时间的延迟可以使滤波器有效地以预测模式而不是反应模式工作。默认值为 0。
36.77.1 示例
- 制作适合在嘈杂环境中收听的、既有安静段落又有响亮段落的音乐
compand=.3|.3:1|1:-90/-60|-60/-40|-40/-30|-20/-20:6:0:-90:0.2
另一个包含耳语和爆炸声部分的音频示例
compand=0|0:1|1:-90/-900|-70/-70|-30/-9|0/-3:6:0:0:0
- 当噪声电平低于信号电平时使用的噪声门
compand=.1|.1:.2|.2:-900/-900|-50.1/-900|-50/-50:.01:0:-90:.1
- 这是另一个噪声门,这次是当噪声电平高于信号电平时使用的(在某些方面,使其类似于静噪)
compand=.1|.1:.1|.1:-45.1/-45.1|-45/-900|0/-900:.01:45:-90:.1
- 从 -6dB 开始的 2:1 压缩
compand=points=-80/-80|-6/-6|0/-3.8|20/3.5
- 从 -9dB 开始的 2:1 压缩
compand=points=-80/-80|-9/-9|0/-5.3|20/2.9
- 从 -12dB 开始的 2:1 压缩
compand=points=-80/-80|-12/-12|0/-6.8|20/1.9
- 从 -18dB 开始的 2:1 压缩
compand=points=-80/-80|-18/-18|0/-9.8|20/0.7
- 从 -15dB 开始的 3:1 压缩
compand=points=-80/-80|-15/-15|0/-10.8|20/-5.2
- 压缩器/门限器
compand=points=-80/-105|-62/-80|-15.4/-15.4|0/-12|20/-7.6
- 扩展器
compand=attacks=0:points=-80/-169|-54/-80|-49.5/-64.6|-41.1/-41.1|-25.8/-15|-10.8/-4.5|0/0|20/8.3
- 硬限幅器,-6dB
compand=attacks=0:points=-80/-80|-6/-6|20/-6
- 硬限幅器,-12dB
compand=attacks=0:points=-80/-80|-12/-12|20/-12
- 硬噪声门,-35 dB
compand=attacks=0:points=-80/-115|-35.1/-80|-35/-35|20/20
- 软限幅器
compand=attacks=0:points=-80/-80|-12.4/-12.4|-6/-8|0/-6.8|20/-2.8
36.78 compensationdelay
补偿延迟线是一种基于度量的延迟,用于补偿麦克风或扬声器的不同位置。
例如,您使用两个放置在不同位置的麦克风录制了吉他。由于声波的前端在正常条件下具有固定的速度,麦克风的相位可能会发生变化,并且取决于它们的位置和相互位置。当这些麦克风同相(同步)时,可以实现最佳的混音效果。请注意,麦克风之间约 30 厘米的距离会使一个麦克风捕获的信号与另一个麦克风反相。这会使最终的混音听起来很郁闷。此滤波器通过为每个麦克风轨道添加不同的延迟并使它们同步来帮助解决相位问题。
当您将一个轨道作为基础并将其与其他轨道逐个同步时,可以获得最佳效果。请记住,同步/延迟容差也取决于采样率。较高的采样率将提供更高的容差。
此滤波器接受以下参数
- 毫米
设置毫米距离。这是用于微调的补偿距离。默认值为 0。
- 厘米
设置厘米距离。这是用于收紧距离设置的补偿距离。默认值为 0。
- m
设置米距离。这是用于硬距离设置的补偿距离。默认值为 0。
- dry
设置干音量。未处理(干)信号的量。默认值为 0。
- wet
设置湿音量。处理后(湿)信号的量。默认值为 1。
- 温度
设置温度(以摄氏度为单位)。这是环境温度。默认值为 20。
36.78.1 命令
此滤波器支持上述所有选项作为命令。
36.79 crossfeed
应用耳机串音滤波器。
串音是混合立体声音频录音的左右声道的过程。它主要用于减少低频的极端立体声分离。
目的是为听众产生更像扬声器的声音。
该滤波器接受以下选项
- 强度
设置串音强度。默认值为 0.2。允许的范围是 0 到 1。这将设置立体声图像侧部分的低架式滤波器的增益。默认值为 -6dB。当强度设置为 1 时,最大允许值为 -30db。
- range
设置声场宽度。默认值为 0.5。允许的范围是 0 到 1。这将设置低架式滤波器的截止频率。默认情况下,截止频率接近 1550 Hz。当范围设置为 1 时,截止频率设置为 2100 Hz。
- 斜率
设置低架式滤波器的曲线斜率。默认值为 0.5。允许的范围是 0.01 到 1。
- level_in
设置输入增益。默认值为 0.9。
- level_out
设置输出增益。默认值为 1。
- 块大小
设置用于反向 IIR 处理的块大小。如果此值设置得足够高(高于达到接近零值的截断脉冲响应长度),滤波将变为线性相位,否则如果不够大,只会产生令人讨厌的伪影。
请注意,当设置为非零值时,滤波器延迟将正好是这么多采样点。
36.79.1 命令
此滤波器支持上述所有选项作为命令。
36.80 crystalizer
用于音频噪声锐化的简单算法。
此滤波器线性地增加每个音频样本之间的差异。
该滤波器接受以下选项
- i
设置效果强度(默认值:2.0)。必须在 -10.0(声音不变)到 10.0(最大效果)的范围内。要进行反向滤波,请使用负值。
- c
启用削波。默认情况下启用。
36.80.1 命令
此滤波器支持上述所有选项作为命令。
36.81 dcshift
对音频应用直流偏移。
这对于去除音频中的直流偏移(可能是录音链中的硬件问题导致的)非常有用。直流偏移的影响是降低动态余量,从而降低音量。可以使用 astats 滤波器来确定信号是否存在直流偏移。
- shift
设置直流偏移量,允许范围为 [-1, 1]。它表示音频的偏移量。
- 限幅器增益
可选。它的值应该远小于 1(例如 0.05 或 0.02),用于防止削波。
36.82 deesser
对音频样本应用齿音消除。
- i
设置触发齿音消除的强度。允许范围为 0 到 1。默认值为 0。
- m
设置对声音高音部分进行压制的程度。允许范围为 0 到 1。默认值为 0.5。
- f
在齿音消除时保留多少原始频率内容。允许范围为 0 到 1。默认值为 0.5。
- s
设置输出模式。
它接受以下值
- i
保持输入不变。
- o
传递过滤掉的齿音。
- e
仅传递齿音。
默认值为 o。
36.83 dialoguenhance
增强立体声音频中的对话。
此滤波器接受立体声输入并产生环绕声(3.0)通道输出。新生成的前置中置通道增强了原始在两个立体声通道中可用的语音对话。此滤波器输出的前置左声道和前置右声道与立体声输入中的相同。
该滤波器接受以下选项
- 原始
设置在输出前置中置声道中保留的原始中心因子。允许范围为 0 到 1。默认值为 1。
- enhance
设置在输出前置中置声道中放置的对话增强因子。允许范围为 0 到 3。默认值为 1。
- 语音
设置语音检测因子。允许范围为 2 到 32。默认值为 2。
36.83.1 命令
此滤波器支持上述所有选项作为命令。
36.84 drmeter
测量音频动态范围。
在动态范围很大的素材中发现的 DR 值在 14 或更高。在过渡素材中发现的 DR 值为 8 到 13。任何低于 8 的值都具有非常差的动态范围,并且被高度压缩。
该滤波器接受以下选项
- length
设置用于将音频分割成等长片段的窗口长度(以秒为单位)。默认值为 3 秒。
36.85 dynaudnorm
动态音频归一化器。
此滤波器对输入音频应用一定的增益,以使其峰值幅度达到目标水平(例如 0 dBFS)。然而,与更“简单”的归一化算法相比,动态音频归一化器 *动态地* 重新调整输入音频的增益因子。这允许对音频的“安静”部分应用额外的增益,同时避免“响亮”部分出现失真或削波。换句话说:动态音频归一化器将“均匀化”安静和响亮部分的音量,即每个部分的音量都被带到相同的目标水平。然而,请注意,动态音频归一化器在实现此目标时 *不* 应用“动态范围压缩”。它将保留音频文件每个部分 *内部* 的 100% 动态范围。
- 帧长,f
设置帧长度(以毫秒为单位)。范围为 10 到 8000 毫秒。默认值为 500 毫秒。动态音频归一化器将输入音频分成小块进行处理,这些小块称为帧。这是必需的,因为峰值幅度对于单个采样值没有意义。相反,我们需要确定连续采样值序列的峰值幅度。虽然“标准”归一化器将简单地使用完整文件的峰值幅度,但动态音频归一化器会单独确定每个帧的峰值幅度。帧的长度以毫秒为单位指定。默认情况下,动态音频归一化器使用 500 毫秒的帧长度,这已被发现对大多数文件都有效。请注意,确切的帧长度(以样本数量为单位)将根据单个输入音频文件的采样率自动确定。
- 高斯大小,g
设置高斯滤波器窗口大小。范围为 3 到 301,必须是奇数。默认值为 31。动态音频归一化器最重要的参数可能是高斯平滑滤波器的
窗口大小
。滤波器的窗口大小以帧为单位指定,以当前帧为中心。为了简单起见,这必须是一个奇数。因此,默认值 31 将考虑当前帧以及前 15 帧和后 15 帧。使用较大的窗口会导致更强的平滑效果,从而导致较小的增益变化,即较慢的增益自适应。相反,使用较小的窗口会导致较弱的平滑效果,从而导致更大的增益变化,即更快的增益自适应。换句话说,您增加此值的越多,动态音频归一化器的行为就越像“传统”归一化滤波器。相反,您减少此值的越多,动态音频归一化器的行为就越像动态范围压缩器。- 峰值,p
设置目标峰值。这指定了归一化音频输入的最大允许幅度水平。此滤波器将尝试尽可能接近目标峰值幅度,但同时也确保归一化信号永远不会超过峰值幅度。帧的最大局部增益因子直接由目标峰值幅度决定。默认值为 0.95,因此留下 5%* 的动态余量。不建议高于此值。
- 最大增益,m
设置最大增益因子。范围为 1.0 到 100.0。默认值为 10.0。动态音频归一化器确定每个输入帧的最大可能(局部)增益因子,即不会导致削波或失真的最大增益因子。最大增益因子由帧的最高幅度样本确定。但是,动态音频归一化器还会通过预定的(全局)最大增益因子来限制帧的最大增益因子。这样做是为了避免在“静音”或几乎静音的帧中出现过大的增益因子。默认情况下,最大增益因子为 10.0。对于大多数输入,默认值应该足够,并且通常不建议增加此值。但是,对于整体音量水平极低的输入,可能需要允许更高的增益因子。请注意,动态音频归一化器不会简单地应用“硬”阈值(即,切断高于阈值的值)。相反,将应用“S 形”阈值函数。这样,增益因子将平滑地接近阈值,但永远不会超过该值。
- 目标 RMS,r
设置目标 RMS。范围从 0.0 到 1.0。默认值为 0.0 - 禁用。默认情况下,动态音频归一化器执行“峰值”归一化。这意味着每个帧的最大局部增益因子仅由该帧的最高幅度样本定义。这样,样本可以尽可能地放大而不会超过最大信号电平,即不会发生削波。然而,可选地,动态音频归一化器也可以考虑帧的均方根值,缩写为 RMS。在电气工程中,RMS 通常用于确定时变信号的功率。因此,人们认为 RMS 比仅查看信号的峰值幅度更能近似地表示“感知响度”。因此,通过将所有帧调整到恒定的 RMS 值,可以建立统一的“感知响度”。如果已指定目标 RMS 值,则帧的局部增益因子定义为恰好导致该 RMS 值的因子。但请注意,最大局部增益因子仍然受限于帧的最高幅度样本,以防止削波。
- 耦合,n
启用通道耦合。默认情况下启用。默认情况下,动态音频归一化器将以相同的量放大所有通道。这意味着将相同的增益因子应用于所有通道,即最大可能的增益因子由“最响”的通道决定。然而,在某些录音中,可能会出现不同通道的音量不均匀的情况,例如一个通道可能比其他通道“安静”。在这种情况下,可以使用此选项禁用通道耦合。这样,增益因子将为每个通道独立确定,仅取决于各个通道的最高幅度样本。这允许协调不同通道的音量。
- 校正直流偏移,c
启用直流偏置校正。默认情况下禁用。音频信号(在时域中)是一系列样本值。在动态音频归一化器中,这些样本值以 -1.0 到 1.0 的范围表示,无论原始输入格式如何。通常,音频信号或“波形”应以零点为中心。这意味着如果我们计算文件中或单个帧中所有样本的平均值,则结果应为 0.0 或至少非常接近该值。但是,如果平均值与 0.0 存在显著偏差,无论是正方向还是负方向,则称为直流偏置或直流偏移。由于直流偏置显然是不可取的,因此动态音频归一化器提供可选的直流偏置校正。启用直流偏置校正后,动态音频归一化器将确定每个输入帧的平均值或“直流校正”偏移量,并从该帧的所有样本值中减去该值,以确保这些样本再次以 0.0 为中心。此外,为了避免帧边界处的“间隙”,直流校正偏移值将在相邻帧之间平滑插值。
- 备用边界,b
启用备用边界模式。默认情况下禁用。动态音频归一化器会考虑每个帧周围的特定邻域。这包括前面的帧以及后续的帧。但是,对于位于音频文件开头和结尾的“边界”帧,并非所有相邻帧都可用。特别是,对于音频文件中的前几个帧,前面的帧是未知的。同样,对于音频文件中的最后几个帧,后续的帧是未知的。因此,问题出现了,对于“边界”区域中缺失的帧应该假设哪些增益因子。动态音频归一化器实现了两种模式来处理这种情况。默认边界模式假定缺失帧的增益因子正好为 1.0,从而在输入开始和结束时分别产生平滑的“淡入”和“淡出”。
- 压缩,s
设置压缩因子。范围从 0.0 到 30.0。默认值为 0.0。默认情况下,动态音频归一化器不应用“传统”压缩。这意味着信号峰值不会被修剪,因此每个局部邻域内将保留完整的动态范围。但是,在某些情况下,可能需要将动态音频归一化器的归一化算法与更“传统”的压缩相结合。为此,动态音频归一化器提供了可选的压缩(阈值)功能。如果(且仅当)启用压缩功能,则所有输入帧将在实际归一化过程之前由软拐点阈值函数处理。简而言之,阈值函数将修剪所有幅度超过特定阈值的样本。但是,动态音频归一化器不会简单地应用固定的阈值。相反,将为每个单独的帧调整阈值。一般来说,较小的参数会导致较强的压缩,反之亦然。不建议使用低于 3.0 的值,因为可能会出现可听到的失真。
- threshold, t
设置目标阈值。这指定了将被归一化的音频输入的最低允许幅度级别。如果输入帧音量高于此值,则将对帧进行归一化。否则,可能根本不会对帧进行归一化。默认值设置为 0,这意味着将对所有输入帧进行归一化。如果不想放大数字噪声,此选项非常有用。
- 通道,h
指定要过滤的通道,默认情况下会过滤所有可用通道。
- overlap,o
指定帧的重叠。如果设置为 0(默认),则不进行帧重叠。使用 >0 和 <1 的值将进行不太保守的增益调整,就像将 framelen 选项设置为较小值时一样,如果 framelen 选项值针对非零重叠进行补偿,则与零重叠情况相比,增益调整在时间上会更平滑。
- 曲线,v
指定在计算应用于帧的增益时将使用的峰值映射曲线表达式。最大输出帧增益仍将受到此过滤器之前提到的其他选项的限制。
表达式可以包含以下常量
- ch
当前通道号
- sn
当前样本号
- nb_channels
通道数
- t
以秒表示的时间戳
- sr
采样率
- p
当前帧峰值
36.85.1 命令
此滤波器支持上述所有选项作为命令。
36.86 earwax
让音频在耳机上更容易聆听。
此滤波器向 44.1kHz 立体声(即音频 CD 格式)音频添加“提示”,以便在耳机上收听时,立体声图像从头部内部(耳机的标准)移动到外部和听众前方(扬声器的标准)。
从 SoX 移植。
36.87 equalizer
应用双极峰值均衡 (EQ) 滤波器。使用此滤波器,可以在选定频率及其周围增加或减少信号电平,同时(与带通和带阻滤波器不同)所有其他频率的信号电平保持不变。
为了产生复杂的均衡曲线,可以多次给出此滤波器,每次具有不同的中心频率。
该滤波器接受以下选项
- 频率,f
设置滤波器的中心频率(以 Hz 为单位)。
- 宽度类型,t
设置指定滤波器带宽的方法。
- h
Hz
- q
Q因子
- o
倍频程
- s
斜率
- k
kHz
- 宽度,w
以 width_type 单位指定滤波器的带宽。
- gain, g
设置所需的增益或衰减(以 dB 为单位)。使用正增益时请注意削波。
- 混合,m
在输出中使用滤波信号的程度。默认值为 1。范围在 0 到 1 之间。
- 通道,c
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- 归一化,n
归一化双二阶系数,默认情况下禁用。启用它会将直流的幅度响应归一化为 0dB。
- 变换,a
设置 IIR 滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- 精度,r
设置滤波精度。
- auto
根据环绕滤波器选择自动采样格式。
- s16
始终使用有符号 16 位。
- s32
始终使用有符号 32 位。
- f32
始终使用浮点 32 位。
- f64
始终使用浮点 64 位。
- block_size, b
设置用于反向 IIR 处理的块大小。如果此值设置得足够高(高于达到接近零值的截断脉冲响应长度),滤波将变为线性相位,否则如果不够大,只会产生令人讨厌的伪影。
请注意,当设置为非零值时,滤波器延迟将正好是这么多采样点。
36.87.1 示例
- 在 1000 Hz 处衰减 10 dB,带宽为 200 Hz
equalizer=f=1000:t=h:width=200:g=-10
- 在 1000 Hz 处应用 2 dB 增益,Q 为 1,在 100 Hz 处衰减 5 dB,Q 为 2
equalizer=f=1000:t=q:w=1:g=2,equalizer=f=100:t=q:w=2:g=-5
36.87.2 命令
此滤波器支持以下命令
- 频率,f
更改均衡器频率。命令语法为:“frequency”
- 宽度类型,t
更改均衡器宽度类型。命令语法为:“width_type”
- 宽度,w
更改均衡器宽度。命令语法为:“width”
- gain, g
更改均衡器增益。命令语法为:“gain”
- 混合,m
更改均衡器混合。命令语法为:“mix”
36.88 extrastereo
线性增加左右声道之间的差异,从而为回放添加某种“现场”效果。
该滤波器接受以下选项
- m
设置差异系数(默认值:2.5)。0.0 表示单声道声音(两个声道的平均值),1.0 表示声音不变,-1.0 表示左右声道互换。
- c
启用削波。默认情况下启用。
36.88.1 命令
此滤波器支持上述所有选项作为命令。
36.89 firequalizer
使用任意频率响应应用 FIR 均衡。
该滤波器接受以下选项
- 增益
设置增益曲线方程(以分贝为单位)。表达式可以包含变量
- f
评估的频率
- sr
采样率
- ch
声道号,当禁用多声道评估时设置为 0
- chid
声道 ID,请参阅 libavutil/channel_layout.h,当禁用多声道评估时设置为第一个声道 ID
- chs
通道数
- chlayout
channel_layout,请参阅 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)
以值 g 将增益条目存储在频率 f 处
此选项也可作为命令使用。
- 延迟
设置滤波器延迟,以秒为单位。值越高表示越精确。默认值为
0.01
。- accuracy
设置滤波器精度,以 Hz 为单位。值越低表示越精确。默认值为
5
。- wfunc
设置窗口函数。可接受的值为
- rectangular
矩形窗口,当增益曲线已经平滑时很有用
- hann
汉宁窗口(默认)
- hamming
海明窗口
- blackman
布莱克曼窗口
- nuttall3
三项连续一阶导数纳托尔窗口
- mnuttall3
最小三项不连续纳托尔窗口
- nuttall
四项连续一阶导数纳托尔窗口
- bnuttall
最小四项不连续纳托尔(布莱克曼-纳托尔)窗口
- bharris
布莱克曼-哈里斯窗口
- tukey
图基窗口
- fixed
如果启用,则使用固定数量的音频样本。这提高了使用大延迟进行滤波时的速度。默认情况下禁用。
- multi
在增益上启用多声道评估。默认情况下禁用。
- zero_phase
通过减去时间戳来补偿延迟,从而启用零相位模式。默认情况下禁用。
- scale
设置增益使用的比例。可接受的值为
- linlin
线性频率,线性增益
- linlog
线性频率,对数(以分贝为单位)增益(默认)
- loglin
对数(以 20 Hz 为 0 的倍频程比例)频率,线性增益
- loglog
对数频率,对数增益
- dumpfile
设置用于转储的文件,适用于 gnuplot。
- dumpscale
设置转储文件的比例。可接受的值与 scale 选项相同。默认值为 linlog。
- fft2
使用复数 FFT 启用双通道卷积。这可以显着提高速度。默认情况下禁用。
- min_phase
启用最小相位脉冲响应。默认情况下禁用。
36.89.1 示例
- 在 1000 Hz 处的低通
firequalizer=gain='if(lt(f,1000), 0, -INF)'
- 在 1000 Hz 处使用 gain_entry 的低通
firequalizer=gain_entry='entry(1000,0); entry(1001, -INF)'
- 自定义均衡
firequalizer=gain_entry='entry(100,0); entry(400, -4); entry(1000, -6); entry(2000, 0)'
- 具有零相位的更高延迟以补偿延迟
firequalizer=delay=0.1:fixed=on:zero_phase=on
- 左声道上的低通,右声道上的高通
firequalizer=gain='if(eq(chid,1), gain_interpolate(f), if(eq(chid,2), gain_interpolate(1e6+f), 0))' :gain_entry='entry(1000, 0); entry(1001,-INF); entry(1e6+1000,0)':multi=on
36.90 flanger
将镶边效果应用于音频。
该滤波器接受以下选项
- 延迟
设置以毫秒为单位的基本延迟。范围为 0 到 30。默认值为 0。
- depth
设置以毫秒为单位的附加扫描延迟。范围为 0 到 10。默认值为 2。
- regen
设置再生百分比(延迟信号反馈)。范围为 -95 到 95。默认值为 0。
- 宽度
设置与原始信号混合的延迟信号的百分比。范围为 0 到 100。默认值为 71。
- speed
设置每秒扫描次数 (Hz)。范围为 0.1 到 10。默认值为 0.5。
- shape
设置扫描波形,可以是 triangular 或 sinusoidal。默认值为 sinusoidal。
- phase
设置多声道的扫描波形百分比偏移。范围为 0 到 100。默认值为 25。
- interp
设置延迟线插值,linear 或 quadratic。默认值为 linear。
36.91 haas
将哈斯效应应用于音频。
请注意,这对于应用于单声道信号最有意义。将此滤波器应用于单声道信号时,它会产生一定的方向性并扩展其立体声图像。
该滤波器接受以下选项
- level_in
设置输入电平。默认情况下为 1,或 0dB
- level_out
设置输出电平。默认情况下为 1,或 0dB。
- side_gain
设置应用于信号侧部分的增益。默认情况下为 1。
- middle_source
设置中间源的类型。可以是以下之一
- ‘left’
选择左声道。
- ‘right’
选择右声道。
- ‘mid’
选择立体声图像的中间部分信号。
- ‘side’
选择立体声图像的侧面部分信号。
- middle_phase
更改中间相位。默认情况下禁用。
- left_delay
设置左声道延迟。默认情况下为 2.05 毫秒。
- left_balance
设置左声道平衡。默认情况下为 -1。
- left_gain
设置左声道增益。默认情况下为 1。
- left_phase
更改左相位。默认情况下禁用。
- right_delay
设置右声道延迟。默认情况下为 2.12 毫秒。
- right_balance
设置右声道平衡。默认情况下为 1。
- right_gain
设置右声道增益。默认情况下为 1。
- right_phase
更改右相位。默认情况下启用。
36.92 hdcd
解码高清兼容数字 (HDCD) 数据。具有嵌入式 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, 关闭’
已禁用
- ‘1, lle’
每个采样的增益调整级别
- ‘2, pe’
发生峰值扩展的采样
- ‘3, cdt’
代码检测计时器处于活动状态的采样
- ‘4, tgm’
通道之间的目标增益不匹配的采样
36.93 headphone
应用头部相关传输函数 (HRTF) 为用户创建虚拟扬声器,以便通过耳机进行双耳收听。 HRIR 通过额外的流提供,每个通道需要一个立体声输入流。
该滤波器接受以下选项
- map
设置用于卷积的输入流的映射。参数是以“|”分隔的通道名称列表,其顺序与作为滤波器附加流输入的顺序相同。 这也指定了输入流的数量。输入流的数量必须不少于第一个流中的通道数加一。
- 增益
设置应用于音频的增益。值以分贝 (dB) 为单位。默认值为 0。
- type
设置处理类型。可以是 time 或 freq。time 是在时域中处理音频,速度较慢。freq 是在频域中处理音频,速度较快。默认值为 freq。
- lfe
为 LFE 通道设置自定义增益。值以分贝 (dB) 为单位。默认值为 0。
- size
设置一次处理的帧大小,以采样数为单位。默认值为 1024。允许的范围是 1024 到 96000。
- hrir
设置 hrir 流的格式。默认值为 stereo。备选值为 multich。如果值设置为 stereo,则附加流的数量应大于或等于第一个输入流中的输入通道数。此外,每个附加流都应具有立体声通道数。如果值设置为 multich,则附加流的数量应恰好为一个。此外,附加流的输入通道数应等于或大于第一个输入流的通道数的两倍。
36.93.1 示例
- 完整示例,使用 wav 文件作为系数,并使用 amovie 滤波器进行 7.1 声道下混,每个 amovie 滤波器都使用包含 IR 系数的立体声文件作为输入。这些文件给出了虚拟扬声器每个位置的系数
ffmpeg -i input.wav -filter_complex "amovie=azi_270_ele_0_DFC.wav[sr];amovie=azi_90_ele_0_DFC.wav[sl];amovie=azi_225_ele_0_DFC.wav[br];amovie=azi_135_ele_0_DFC.wav[bl];amovie=azi_0_ele_0_DFC.wav,asplit[fc][lfe];amovie=azi_35_ele_0_DFC.wav[fl];amovie=azi_325_ele_0_DFC.wav[fr];[0:a][fl][fr][fc][lfe][bl][br][sl][sr]headphone=FL|FR|FC|LFE|BL|BR|SL|SR" output.wav
- 完整示例,使用 wav 文件作为系数,并使用 amovie 滤波器进行 7.1 声道下混,但现在使用 multich hrir 格式。
ffmpeg -i input.wav -filter_complex "amovie=minp.wav[hrirs];[0:a][hrirs]headphone=map=FL|FR|FC|LFE|BL|BR|SL|SR:hrir=multich" output.wav
36.94 highpass
应用 3dB 点频率的高通滤波器。该滤波器可以是单极或双极(默认)。滤波器以每倍频程每极 6dB(每十年每极 20dB)的速度滚降。
该滤波器接受以下选项
- 频率,f
设置频率,单位为 Hz。默认值为 3000。
- 极点,p
设置极点数。默认值为 2。
- 宽度类型,t
设置指定滤波器带宽的方法。
- h
Hz
- q
Q因子
- o
倍频程
- s
斜率
- k
kHz
- 宽度,w
以 width_type 单位指定滤波器的带宽。仅适用于双极滤波器。默认值为 0.707q,并给出巴特沃斯响应。
- 混合,m
在输出中使用滤波信号的程度。默认值为 1。范围在 0 到 1 之间。
- 通道,c
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- 归一化,n
归一化双二阶系数,默认情况下禁用。启用它会将直流的幅度响应归一化为 0dB。
- 变换,a
设置 IIR 滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- 精度,r
设置滤波精度。
- auto
根据环绕滤波器选择自动采样格式。
- s16
始终使用有符号 16 位。
- s32
始终使用有符号 32 位。
- f32
始终使用浮点 32 位。
- f64
始终使用浮点 64 位。
- block_size, b
设置用于反向 IIR 处理的块大小。如果此值设置得足够高(高于达到接近零值的截断脉冲响应长度),滤波将变为线性相位,否则如果不够大,只会产生令人讨厌的伪影。
请注意,当设置为非零值时,滤波器延迟将正好是这么多采样点。
36.94.1 命令
此滤波器支持以下命令
- 频率,f
更改高通频率。命令语法为:“频率”
- 宽度类型,t
更改高通 width_type。命令语法为:“width_type”
- 宽度,w
更改高通宽度。命令语法为:“宽度”
- 混合,m
更改高通混合。命令语法为:“混合”
36.95 join
将多个输入流连接成一个多通道流。
它接受以下参数
- 输入
输入流的数量。默认为 2。
- channel_layout
所需的输出通道布局。默认为立体声。
- map
将通道从输入映射到输出。参数是以“|”分隔的映射列表,每个映射的格式为
输入索引.输入通道-输出通道
。输入索引 是输入流的从 0 开始的索引。输入通道 可以是输入通道的名称(例如 FL 代表前左)或其在指定输入流中的索引。输出通道 是输出通道的名称。
当未明确指定映射时,滤波器将尝试猜测映射。它首先尝试查找未使用的匹配输入通道,如果失败,则选择第一个未使用的输入通道。
连接 3 个输入(具有正确设置的通道布局)
ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT
从 6 个单通道流构建一个 5.1 输出
ffmpeg -i fl -i fr -i fc -i sl -i sr -i lfe -filter_complex 'join=inputs=6:channel_layout=5.1:map=0.0-FL|1.0-FR|2.0-FC|3.0-SL|4.0-SR|5.0-LFE' out
36.96 ladspa
加载 LADSPA (Linux Audio Developer’s Simple Plugin API) 插件。
要启用此滤波器的编译,您需要使用 --enable-ladspa
配置 FFmpeg。
- 文件,f
指定要加载的 LADSPA 插件库的名称。如果定义了环境变量
LADSPA_PATH
,则会在LADSPA_PATH
中冒号分隔的列表中指定的每个目录中搜索 LADSPA 插件,否则在标准 LADSPA 路径中搜索,顺序为:HOME/.ladspa/lib/、/usr/local/lib/ladspa/、/usr/lib/ladspa/。- 插件,p
指定库中的插件。某些库只包含一个插件,而其他库包含许多插件。如果未设置此项,滤波器将列出指定库中的所有可用插件。
- 控件,c
设置“|”分隔的控件列表,这些控件是零个或多个浮点值,用于确定加载的插件的行为(例如延迟、阈值或增益)。需要使用以下语法定义控件:c0=值0|c1=值1|c2=值2|...,其中 值i 是设置在第 i 个控件上的值。或者,它们也可以使用以下语法定义:值0|值1|值2|...,其中 值i 是设置在第 i 个控件上的值。如果 控件 设置为
help
,则会打印所有可用的控件及其有效范围。- 采样率,s
指定采样率,默认为 44100。仅在插件没有输入时使用。
- 采样数,n
设置每个输出帧的每个通道的采样数,默认值为 1024。仅在插件没有输入时使用。
- duration,d
设置源音频的最小持续时间。有关接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分。请注意,生成的音频的持续时间可能大于指定的持续时间,因为生成的音频始终在完整帧的末尾处被剪切。如果未指定或表示的持续时间为负,则音频应永久生成。仅在插件没有输入时使用。
- 延迟,l
启用延迟补偿,默认情况下禁用。仅在插件有输入时使用。
36.96.1 示例
- 列出 amp(LADSPA 示例插件)库中的所有可用插件
ladspa=file=amp
- 列出
VCF
库中vcf_notch
插件的所有可用控件及其有效范围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-plugins(Tom 的音频处理插件)向音频添加混响
ladspa=file=tap_reverb:tap_reverb
- 生成白噪声,幅度为 0.2
ladspa=file=cmt:noise_source_white:c=c0=.2
- 使用
C* Audio Plugin Suite
(CAPS) 库中的插件C* Click - Metronome
生成 20 bpm 的咔嗒声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
SWH Plugins
系列中的快速前瞻限制器将音量增加 20dBladspa=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
- 使用
C* Audio Plugin Suite
(CAPS) 库中的Narrower
缩小立体声图像ladspa=caps:Narrower
- 另一个白噪声,现在使用
C* Audio Plugin Suite
(CAPS) 库ladspa=caps:White:.2
- 一些分形噪声,使用
C* Audio Plugin Suite
(CAPS) 库ladspa=caps:Fractal:c=c1=1
- 使用
VLevel
插件进行动态音量标准化ladspa=vlevel-ladspa:vlevel_mono
36.96.2 命令
此滤波器支持以下命令
- cN
修改第 N 个控件的值。
如果指定的值无效,则会将其忽略并保留先前的值。
36.97 loudnorm
EBU R128响度归一化。包括动态和线性归一化模式。支持单次(直播、文件)和双次(文件)模式。此算法可以针对综合响度 (IL)、响度范围 (LRA) 和最大真峰值。在动态模式下,为了准确检测真峰值,音频流将被上采样到 192 kHz。使用 -ar
选项或 aresample
过滤器来显式设置输出采样率。
该滤波器接受以下选项
- I,i
设置综合响度目标。范围是 -70.0 - -5.0。默认值是 -24.0。
- LRA,lra
设置响度范围目标。范围是 1.0 - 50.0。默认值是 7.0。
- TP,tp
设置最大真峰值。范围是 -9.0 - +0.0。默认值是 -2.0。
- measured_I,measured_i
输入文件的测量 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。如果未满足这些条件中的任何一个,归一化模式将恢复为 dynamic。选项为true
或false
。默认值为true
。- dual_mono
将单声道输入文件视为“双单声道”。如果单声道文件打算在立体声系统上播放,则其 EBU R128 测量在感知上是不正确的。如果设置为
true
,此选项将补偿此影响。多通道输入文件不受此选项的影响。选项为 true 或 false。默认值为 false。- print_format
设置统计信息的打印格式。选项为 summary、json 或 none。默认值为 none。
36.98 lowpass
应用具有 3dB 截止频率的低通滤波器。该滤波器可以是单极点或双极点(默认值)。滤波器的滚降为每极点每八度 6dB(每极点每十年 20dB)。
该滤波器接受以下选项
- 频率,f
以 Hz 为单位设置频率。默认值为 500。
- 极点,p
设置极点数。默认值为 2。
- 宽度类型,t
设置指定滤波器带宽的方法。
- h
Hz
- q
Q因子
- o
倍频程
- s
斜率
- k
kHz
- 宽度,w
以 width_type 单位指定滤波器的带宽。仅适用于双极滤波器。默认值为 0.707q,并给出巴特沃斯响应。
- 混合,m
在输出中使用滤波信号的程度。默认值为 1。范围在 0 到 1 之间。
- 通道,c
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- 归一化,n
归一化双二阶系数,默认情况下禁用。启用它会将直流的幅度响应归一化为 0dB。
- 变换,a
设置 IIR 滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- 精度,r
设置滤波精度。
- auto
根据环绕滤波器选择自动采样格式。
- s16
始终使用有符号 16 位。
- s32
始终使用有符号 32 位。
- f32
始终使用浮点 32 位。
- f64
始终使用浮点 64 位。
- block_size, b
设置用于反向 IIR 处理的块大小。如果此值设置得足够高(高于达到接近零值的截断脉冲响应长度),滤波将变为线性相位,否则如果不够大,只会产生令人讨厌的伪影。
请注意,当设置为非零值时,滤波器延迟将正好是这么多采样点。
36.98.1 示例
- 仅对 LFE 通道进行低通滤波,如果 LFE 不存在,则不执行任何操作
lowpass=c=LFE
36.98.2 命令
此滤波器支持以下命令
- 频率,f
更改低通频率。命令的语法为:“频率”
- 宽度类型,t
更改低通宽度类型。命令的语法为:“宽度类型”
- 宽度,w
更改低通宽度。命令的语法为:“宽度”
- 混合,m
更改低通混合。命令的语法为:“混合”
36.99 lv2
加载 LV2(LADSPA 版本 2)插件。
要启用此过滤器的编译,你需要使用 --enable-lv2
配置 FFmpeg。
- 插件,p
指定插件 URI。你可能需要转义“:”。
- 控件,c
设置“|”分隔的控件列表,这些控件是零个或多个浮点值,用于确定加载的插件的行为(例如,延迟、阈值或增益)。如果 controls 设置为
help
,则会打印所有可用的控件及其有效范围。- 采样率,s
指定采样率,默认为 44100。仅在插件没有输入时使用。
- 采样数,n
设置每个输出帧的每个通道的采样数,默认值为 1024。仅在插件没有输入时使用。
- duration,d
设置源音频的最小持续时间。有关接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分。请注意,生成的音频的持续时间可能大于指定的持续时间,因为生成的音频始终在完整帧的末尾处被剪切。如果未指定或表示的持续时间为负,则音频应永久生成。仅在插件没有输入时使用。
36.99.1 示例
- 应用来自 Calf 的低音增强插件
lv2=p=http\\\\://calf.sourceforge.net/plugins/BassEnhancer:c=amount=2
- 应用来自 Calf 的黑胶唱片插件
lv2=p=http\\\\://calf.sourceforge.net/plugins/Vinyl:c=drone=0.2|aging=0.5
- 应用来自 ArtyFX 的位粉碎器插件
lv2=p=http\\\\://www.openavproductions.com/artyfx#bitta:c=crush=0.3
36.99.2 命令
此过滤器支持插件作为命令导出的所有选项。
36.100 mcompand
多频段压缩或扩展音频的动态范围。
输入音频使用四阶 Linkwitz-Riley IIR 分为多个频段。这类似于扬声器的分频器,在没有压扩动作时会导致平坦的频率响应。
它接受以下参数
- args
此选项的语法为:attack,decay,[attack,decay..] soft-knee points crossover_frequency [delay [initial_volume [gain]]] | attack,decay ... 有关每个项目的说明,请参阅 compand 过滤器文档。
36.101 pan
以特定的增益级别混合通道。该过滤器接受输出通道布局,后跟一组通道定义。
此过滤器还旨在有效地重新映射音频流的通道。
过滤器接受以下形式的参数:“l|outdef|outdef|...”
- l
输出通道布局或通道数
- outdef
输出通道规范,格式为:“out_name=[gain*]in_name[(+-)[gain*]in_name...]”
- out_name
要定义的输出通道,可以是通道名称(FL、FR 等)或通道编号(c0、c1 等)
- 增益
通道的乘法系数,1 表示音量不变
- in_name
要使用的输入通道,有关详细信息,请参阅 out_name;无法混合命名和编号的输入通道
如果在通道规范中的“=”被“<”替换,则该规范的增益将被重新归一化,以使总和为 1,从而避免削波噪声。
36.101.1 混音示例
例如,如果你想从立体声下混音到单声道,但左声道的因子更大
pan=1c|c0=0.9*c0+0.1*c1
自定义的立体声下混音,可自动用于 3 通道、4 通道、5 通道和 7 通道环绕声
pan=stereo| FL < FL + 0.5*FC + 0.6*BL + 0.6*SL | FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
请注意,ffmpeg
集成了默认的下混音(和上混音)系统,除非你有非常具体的需求,否则应首选该系统(请参阅“-ac”选项)。
36.101.2 重映射示例
只有在满足以下条件时,通道重新映射才会生效
- 增益系数为零或一,
- 每个通道输出只有一个输入,
如果满足所有这些条件,过滤器将通知用户(“检测到纯通道映射”),并使用优化且无损的方法进行重新映射。
例如,如果你有一个 5.1 声源,并且想通过删除额外的通道来获得立体声音频流
pan="stereo| c0=FL | c1=FR"
给定相同的源,你还可以切换前左声道和前右声道,并保持输入通道布局
pan="5.1| c0=c1 | c1=c0 | c2=c2 | c3=c3 | c4=c4 | c5=c5"
如果输入是立体声音频流,你可以使前左声道静音(并且仍然保持立体声通道布局),使用
pan="stereo|c1=c1"
仍然使用立体声音频流输入,你可以将右声道复制到前左声道和前右声道
pan="stereo| c0=FR | c1=FR"
36.102 replaygain
ReplayGain 扫描仪过滤器。此过滤器将音频流作为输入,并保持不变地输出。在过滤结束时,它会显示 track_gain
和 track_peak
。
过滤器接受以下导出的只读选项
- track_gain
在流末尾导出的以 dB 为单位的音轨增益。
- track_peak
在流末尾导出的音轨峰值。
36.103 resample
转换音频样本格式、采样率和通道布局。不应直接使用。
36.104 rubberband
使用 librubberband 应用时间伸缩和音调移位。
要启用此过滤器的编译,你需要使用 --enable-librubberband
配置 FFmpeg。
该滤波器接受以下选项
- tempo
设置节奏缩放因子。
- pitch
设置音调缩放因子。
- transients
设置瞬态检测器。可能的值为
- crisp
- mixed
- smooth
- detector
设置检测器。可能的值为
- compound
- percussive
- soft
- phase
设置相位。可能的值为
- laminar
- independent
- window
设置处理窗口大小。可能的值为
- 标准
- short
- long
- smoothing
设置平滑处理。可能的值为
- off
- on
- formant
在音调移位时启用共振峰保留。可能的值为
- shifted
- preserved
- pitchq
设置音调质量。可能的值为
- quality
- speed
- consistency
- channels
设置通道。可能的值为
- apart
- together
36.104.1 命令
此滤波器支持以下命令
- tempo
更改滤波器节奏缩放因子。命令的语法为:“tempo”
- pitch
更改过滤器音调缩放因子。命令的语法为:“音调”
36.105 sidechaincompress
此过滤器的作用类似于普通压缩器,但能够使用第二个输入信号压缩检测到的信号。它需要两个输入流并返回一个输出流。第一个输入流将根据第二个流信号进行处理。然后,过滤后的信号可以在处理的后期阶段使用其他过滤器进行过滤。请参阅 pan 和 amerge 过滤器。
该滤波器接受以下选项
- 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
选择是使用侧链流所有通道的
平均
电平,还是使用侧链流中较响的(最大
)通道来影响衰减。默认为平均
。- detection
在
峰值
情况下,是应采用精确信号,还是在均方根
情况下采用 RMS 信号。默认为均方根
,它主要更平滑。- level_sc
设置侧链增益。默认为 1。范围为 0.015625 到 64。
- mix
在输出中使用压缩信号的程度。默认值为 1。范围在 0 和 1 之间。
36.105.1 命令
此滤波器支持上述所有选项作为命令。
36.105.2 示例
- 完整的 ffmpeg 示例,使用 2 个音频输入,第一个输入根据第二个输入的信号进行压缩,之后将压缩后的信号与第二个输入合并
ffmpeg -i main.flac -i sidechain.flac -filter_complex "[1:a]asplit=2[sc][mix];[0:a][sc]sidechaincompress[compr];[compr][mix]amerge"
36.106 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.106.1 命令
此滤波器支持上述所有选项作为命令。
36.107 silencedetect
检测音频流中的静音。
此过滤器会在检测到输入音频音量小于或等于噪声容限值的时间长度大于或等于最小检测噪声持续时间时记录一条消息。
打印的时间和持续时间以秒表示。lavfi.silence_start
或 lavfi.silence_start.X
元数据键设置在时间戳等于或超过检测持续时间的第一个帧上,其中包含静音的第一个帧的时间戳。
lavfi.silence_duration
或 lavfi.silence_duration.X
和 lavfi.silence_end
或 lavfi.silence_end.X
元数据键设置在静音后的第一个帧上。如果启用 mono,并且分别评估每个通道,则使用带有 .X
后缀的键,其中 X
对应于通道号。
该滤波器接受以下选项
- 噪声 (noise), n
设置噪声容限。可以以 dB 为单位(如果指定的值附加了“dB”)或振幅比率来指定。默认为 -60dB 或 0.001。
- duration,d
设置静音持续时间直到通知(默认为 2 秒)。有关接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的时间持续时间部分。
- 单声道, m
分别处理每个通道,而不是组合处理。默认情况下禁用。
36.107.1 示例
- 检测 5 秒的静音,噪声容限为 -50dB
silencedetect=n=-50dB:d=5
- 使用
ffmpeg
的完整示例,以 0.0001 的噪声容限检测 silence.mp3 中的静音ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
36.108 silenceremove
删除音频开头、中间或结尾的静音。
该滤波器接受以下选项
- start_periods
此值用于指示是否应在音频开头修剪音频。值为零表示不应从开头修剪静音。当指定一个非零值时,它会修剪音频,直到找到非静音为止。通常,当从音频开头修剪静音时,start_periods 将为
1
,但可以增加到更高的值,以修剪所有音频,直到达到特定数量的非静音周期。默认值为0
。- start_duration
指定必须检测到非静音的时间长度,之后才会停止修剪音频。通过增加持续时间,可以将噪声突发视为静音并修剪掉。默认值为
0
。- start_threshold
这表示应将哪个样本值视为静音。对于数字音频,
0
的值可能没问题,但对于从模拟录制的音频,您可能希望增加该值以考虑背景噪声。可以以 dB 为单位(如果指定的值附加了“dB”)或振幅比率来指定。默认值为0
。- start_silence
指定修剪后在开头保留的最大静音持续时间。默认为 0,这等于修剪所有检测为静音的样本。
- start_mode
指定在多通道音频开始时检测静音结束的模式。可以是 any 或 all。默认为 any。使用 any,如果从任何通道检测到任何非静音的样本,都将触发音频流开始时静音修剪的结束。使用 all,只有在从每个通道检测到每个样本都为非静音时,才会触发音频流开始时静音修剪的结束,使用有限。
- stop_periods
设置从音频结尾修剪静音的计数。当指定一个正值时,它会在找到指定的静音周期后修剪音频。要删除文件中间的静音,请指定一个为负值的 stop_periods。然后将此值视为正值,并用于指示效果应按照 stop_periods 指定的那样重新开始处理,使其适合删除音频中间的静音周期。默认值为
0
。- stop_duration
指定在不再复制音频之前必须存在的静音持续时间。通过指定更高的持续时间,可以将所需的静音留在音频中。默认值为
0
。- stop_threshold
这与 start_threshold 相同,但用于从音频结尾修剪静音。可以以 dB 为单位(如果指定的值附加了“dB”)或振幅比率来指定。默认值为
0
。- stop_silence
指定修剪后在结尾保留的最大静音持续时间。默认为 0,这等于修剪所有检测为静音的样本。
- stop_mode
指定在多通道音频开始后检测静音开始的模式。可以是 any 或 all。默认为 all。使用 any,如果从任何通道检测到任何静音样本,都将触发音频流开始后静音修剪的开始,使用有限。使用 all,只有在从每个通道检测到每个样本都为静音时,才会触发音频流开始后静音修剪的开始。
- detection
设置如何检测静音。
- avg
移动窗口中样本绝对值的平均值。
- rms
移动窗口中样本绝对值的均方根值。
- peak
移动窗口中样本绝对值的最大值。
- median
移动窗口中样本绝对值的中位数。
- ptp
移动窗口中样本最大峰值到最小峰值差的绝对值。
- dev
移动窗口中样本值的标准偏差。
默认值为
rms
。- window
设置用于计算静音检测样本数量窗口大小的持续时间(以秒为单位)。使用
0
将有效地禁用任何窗口化,并且仅对每个通道使用单个样本进行静音检测。在这种情况下,可能还需要将 start_silence 和/或 stop_silence 设置为非零值,同时也将 start_duration 和/或 stop_duration 设置为非零值。默认值为0.02
。允许的范围是0
到10
。- timestamp
设置每个音频帧输出时间戳的处理模式。
- write
完全重写时间戳,仅保留第一个输出帧的开始时间。
- 复制
未丢弃的帧保留与输入音频帧相同的时间戳。
默认值为
write
。
36.108.1 示例
- 以下示例展示了如何使用此滤镜开始录制,录制内容不包含通常在按下录制按钮和表演开始之间出现的延迟
silenceremove=start_periods=1:start_duration=5:start_threshold=0.02
- 从头到尾修剪音频中所有超过 1 秒的静音
silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-90dB
- 使用峰值检测,从头到尾修剪音频中所有超过 0 个采样点的数字静音,且数字静音在所有声道中的位置都相同
silenceremove=window=0:detection=peak:stop_mode=all:start_mode=all:stop_periods=-1:stop_threshold=0
- 从头到尾修剪每个遇到的第二个静音期,音频中每个静音期超过 1 秒
silenceremove=stop_periods=-2:stop_duration=1:stop_threshold=-90dB
- 与上述类似,但保留每个修剪期间最多 0.5 秒的静音
silenceremove=stop_periods=-2:stop_duration=1:stop_threshold=-90dB:stop_silence=0.5
- 与上述类似,但保留音频开始处最多 1.5 秒的静音
silenceremove=stop_periods=-2:stop_duration=1:stop_threshold=-90dB:stop_silence=0.5:start_periods=1:start_duration=1:start_silence=1.5:stop_threshold=-90dB
36.108.2 命令
此滤镜支持一些上述选项作为命令。
36.109 sofalizer
SOFAlizer 使用头部相关传输函数 (HRTF) 为用户在耳机中创建虚拟扬声器,以实现双耳聆听(支持最多 9 个声道的音频格式)。HRTF 存储在 SOFA 文件中(有关数据库,请参阅http://www.sofacoustics.org/)。SOFAlizer 由奥地利科学院声学研究所 (ARI) 开发。
要启用此滤镜的编译,您需要使用 --enable-libmysofa
配置 FFmpeg。
该滤波器接受以下选项
- sofa
设置用于渲染的 SOFA 文件。
- 增益
设置应用于音频的增益。值以分贝 (dB) 为单位。默认值为 0。
- rotation
设置虚拟扬声器的旋转角度,单位为度。默认值为 0。
- elevation
设置虚拟扬声器的高度角度,单位为度。默认值为 0。
- radius
设置扬声器和听者之间的距离,单位为米,用于近场 HRTF。默认值为 1。
- type
设置处理类型。可以是 time 或 freq。time 是在时域中处理音频,速度较慢。freq 是在频域中处理音频,速度较快。默认值为 freq。
- speakers
设置虚拟扬声器的自定义位置。此选项的语法为:<CH> <AZIM> <ELEV>[|<CH> <AZIM> <ELEV>|...]。每个虚拟扬声器都使用简短的声道名称描述,后跟方位角和高度角(单位为度)。每个虚拟扬声器描述用“|”分隔。例如,要覆盖前左和前右声道位置,请使用:’speakers=FL 45 15|FR 345 15’。带有无法识别的声道名称的描述将被忽略。
- lfegain
为 LFE 通道设置自定义增益。值以分贝 (dB) 为单位。默认值为 0。
- framesize
设置自定义帧大小,单位为采样数。默认值为 1024。允许的范围是 1024 到 96000。仅当选项 ‘type’ 设置为 freq 时才使用。
- 归一化
是否在导入 SOFA 文件时对所有 IR 进行归一化。默认情况下启用。
- interpolate
如果精确位置不匹配,是否应使用相邻 IR 对最近的 IR 进行插值。默认情况下禁用。
- minphase
在加载 SOFA 文件时对所有 IR 进行最小相位处理。默认情况下禁用。
- anglestep
设置邻居搜索角度步长。仅当启用选项 interpolate 时才使用。
- radstep
设置邻居搜索半径步长。仅当启用选项 interpolate 时才使用。
36.109.1 示例
- 使用 ClubFritz6 sofa 文件
sofalizer=sofa=/path/to/ClubFritz6.sofa:type=freq:radius=1
- 使用 ClubFritz12 sofa 文件,更大的半径和小旋转
sofalizer=sofa=/path/to/ClubFritz12.sofa:type=freq:radius=2:rotation=5
- 与上述类似,但使用前左、前右、后左和后右的自定义扬声器位置,以及自定义增益
"sofalizer=sofa=/path/to/ClubFritz6.sofa:type=freq:radius=2:speakers=FL 45|FR 315|BL 135|BR 225:gain=28"
36.110 speechnorm
语音归一化器。
此滤镜根据阈值扩展或压缩音频采样的每个半周期(局部的一组采样,全部高于或低于零,并且在两个最近的过零点之间),以便音频在以下选项控制的条件下达到目标峰值。
该滤波器接受以下选项
- 峰值,p
设置扩展目标峰值。这指定归一化音频输入允许的最高绝对幅度电平。默认值为 0.95。允许的范围是 0.0 到 1.0。
- expansion, e
设置最大扩展因子。允许的范围是 1.0 到 50.0。默认值为 2.0。此选项控制采样的最大局部半周期的扩展。最大扩展应该是这样的,即局部峰值达到目标峰值,但永远不会超过它,并且新的峰值与之前的峰值之间的比率不超过此选项值。
- compression, c
设置最大压缩因子。允许的范围是 1.0 到 50.0。默认值为 2.0。此选项控制采样的最大局部半周期的压缩。仅当 threshold 选项设置为大于 0.0 的值时才使用此选项,在这种情况下,当局部峰值低于或等于 threshold 设置的值时,属于该峰值半周期的所有采样都将按当前压缩因子压缩。
- threshold, t
设置阈值。默认值为 0.0。允许的范围是 0.0 到 1.0。此选项指定将压缩哪些采样半周期和将扩展哪些采样半周期。任何局部峰值低于或等于此选项值的半周期采样都将按当前压缩因子压缩,否则,如果大于阈值,它们将以扩展因子扩展,以便它可以达到峰值目标值,但永远不会超过它。
- raise, r
设置每个采样半周期的扩展提升量。默认值为 0.001。允许的范围是 0.0 到 1.0。这控制着每个新的半周期扩展因子增长的速度,直到达到 expansion 值。将此选项设置得太高可能会导致失真。
- fall, f
设置每个采样半周期的压缩提升量。默认值为 0.001。允许的范围是 0.0 到 1.0。这控制着每个新的半周期压缩因子增长的速度,直到达到 compression 值。
- 通道,h
指定要过滤的通道,默认情况下会过滤所有可用通道。
- invert, i
启用反向滤波,默认情况下禁用。这将反转 threshold 选项的解释。启用后,任何局部峰值低于或等于 threshold 选项的半周期采样都将被扩展,否则将被压缩。
- link, l
在计算应用于每个过滤声道采样的增益时链接声道,默认情况下禁用。禁用后,每个过滤声道的增益计算是独立的,否则,启用此选项时,将使用每个过滤声道的所有可能增益中的最小值。
- rms, m
设置扩展目标 RMS 值。这指定归一化音频输入允许的最高 RMS 电平。默认值为 0.0,因此禁用。允许的范围是 0.0 到 1.0。
36.110.1 命令
此滤波器支持上述所有选项作为命令。
36.110.2 示例
- 弱而慢的放大
speechnorm=e=3:r=0.00001:l=1
- 适度和慢的放大
speechnorm=e=6.25:r=0.00001:l=1
- 强而快的放大
speechnorm=e=12.5:r=0.0001:l=1
- 非常强而快的放大
speechnorm=e=25:r=0.0001:l=1
- 极端而快的放大
speechnorm=e=50:r=0.0001:l=1
36.111 stereotools
此滤镜具有一些方便的实用程序来管理立体声信号,用于将 M/S 立体声录音转换为 L/R 信号,同时控制参数或扩展主轨的立体声图像。
该滤波器接受以下选项
- level_in
设置滤波前两个声道的输入电平。默认值为 1。允许的范围是 0.015625 到 64。
- level_out
设置滤波后两个声道的输出电平。默认值为 1。允许的范围是 0.015625 到 64。
- balance_in
设置两个声道之间的输入平衡。默认值为 0。允许的范围是 -1 到 1。
- balance_out
设置两个声道之间的输出平衡。默认值为 0。允许的范围是 -1 到 1。
- softclip
启用软削波。导致模拟失真而不是刺耳的数字 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。
- 延迟
设置左声道相对于右声道以及反之的延迟,单位为毫秒。默认值为 0。允许范围为 -20 到 20。
- sclevel
设置 S/C 电平。默认值为 1。允许范围为 1 到 100。
- phase
设置立体声相位,单位为度。默认值为 0。允许范围为 0 到 360。
- bmode_in, bmode_out
为 balance_in/balance_out 选项设置平衡模式。
可以是以下之一
- ‘balance’
经典平衡模式。一次衰减一个声道。增益最高提升到 1。
- ‘amplitude’
与上述经典模式类似,但增益最高提升到 2。
- ‘power’
等功率分布,范围从 -6dB 到 +6dB。
36.111.1 命令
此滤波器支持上述所有选项作为命令。
36.111.2 示例
- 应用卡拉 OK 效果
stereotools=mlev=0.015625
- 将 M/S 信号转换为 L/R 信号
"stereotools=mode=ms>lr"
36.112 stereowiden
此滤波器通过抑制两个声道共有的信号,并将左声道的信号延迟到右声道,反之亦然,从而增强立体声效果,从而加宽立体声效果。
该滤波器接受以下选项
- 延迟
左声道信号延迟到右声道,反之亦然的时间,单位为毫秒。默认值为 20 毫秒。
- feedback
延迟信号进入右声道和反之亦然的增益量。产生左声道信号在右输出中的延迟效果,反之亦然,从而产生加宽效果。默认值为 0.3。
- crossfeed
左声道以反相相位串扰到右声道。这有助于抑制单声道。如果值为 1,则会消除两个声道共有的所有信号。默认值为 0.3。
- drymix
设置原始声道输入信号的电平。默认值为 0.8。
36.112.1 命令
此滤波器支持除 delay
之外的所有上述选项,作为命令。
36.113 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.114 surround
应用音频环绕上混滤波器。
此滤波器允许从音频流产生多声道输出。
该滤波器接受以下选项
- chl_out
设置输出声道布局。默认情况下,这是 5.1。
有关所需语法,请参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的“通道布局”部分。
- chl_in
设置输入声道布局。默认情况下,这是 立体声。
有关所需语法,请参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的“通道布局”部分。
- level_in
设置输入音量电平。默认情况下,这是 1。
- level_out
设置输出音量电平。默认情况下,这是 1。
- lfe
如果输出声道布局有 LFE 声道,则启用它。默认情况下,此项已启用。
- lfe_low
设置 LFE 低截止频率。默认情况下,这是 128 Hz。
- lfe_high
设置 LFE 高截止频率。默认情况下,这是 256 Hz。
- lfe_mode
设置 LFE 模式,可以是 add 或 sub。默认值为 add。在 add 模式下,LFE 声道从输入音频创建并添加到输出。在 sub 模式下,LFE 声道从输入音频创建并添加到输出,但所有非 LFE 输出声道都会减去输出 LFE 声道。
- smooth
设置时间平滑强度,用于在时间上转换立体声时逐步更改因子。允许范围为 0.0 到 1.0。对于 focus 选项值大于 0.0 时,有助于提高输出质量。默认值为 0.0。仅此范围内的值且无边缘的值有效。
- angle
设置立体声环绕转换的角度,允许范围为 0 到 360。默认值为 90。
- focus
设置立体声环绕转换的焦点,允许范围为 -1 到 1。默认值为 0。
- fc_in
设置前中输入音量。默认情况下,这是 1。
- fc_out
设置前中输出音量。默认情况下,这是 1。
- fl_in
设置前左输入音量。默认情况下,这是 1。
- fl_out
设置前左输出音量。默认情况下,这是 1。
- fr_in
设置前右输入音量。默认情况下,这是 1。
- fr_out
设置前右输出音量。默认情况下,这是 1。
- sl_in
设置侧左输入音量。默认情况下,这是 1。
- sl_out
设置侧左输出音量。默认情况下,这是 1。
- sr_in
设置侧右输入音量。默认情况下,这是 1。
- sr_out
设置侧右输出音量。默认情况下,这是 1。
- bl_in
设置后左输入音量。默认情况下,这是 1。
- bl_out
设置后左输出音量。默认情况下,这是 1。
- br_in
设置后右输入音量。默认情况下,这是 1。
- br_out
设置后右输出音量。默认情况下,这是 1。
- bc_in
设置后中输入音量。默认情况下,这是 1。
- bc_out
设置后中输出音量。默认情况下,这是 1。
- lfe_in
设置 LFE 输入音量。默认情况下,这是 1。
- lfe_out
设置 LFE 输出音量。默认情况下,这是 1。
- allx
设置所有声道在 X 轴上的立体声图像的扩展使用。允许范围为 -1 到 15。默认情况下,此值为负 -1,因此未使用。
- ally
设置所有声道在 Y 轴上的立体声图像的扩展使用。允许范围为 -1 到 15。默认情况下,此值为负 -1,因此未使用。
- fcx, flx, frx, blx, brx, slx, srx, bcx
设置每个声道在 X 轴上的立体声图像的扩展使用。允许范围为 0.06 到 15。默认情况下,此值为 0.5。
- fcy, fly, fry, bly, bry, sly, sry, bcy
设置每个声道在 Y 轴上的立体声图像的扩展使用。允许范围为 0.06 到 15。默认情况下,此值为 0.5。
- win_size
设置窗口大小。允许的范围是 1024 到 65536。默认大小为 4096。
- win_func
设置窗口函数。
它接受以下值
- ‘rect’
- ‘bartlett’
- ‘hann, hanning’
- ‘hamming’
- ‘blackman’
- ‘welch’
- ‘flattop’
- ‘bharris’
- ‘bnuttall’
- ‘bhann’
- ‘sine’
- ‘nuttall’
- ‘lanczos’
- ‘gauss’
- ‘tukey’
- ‘dolph’
- ‘cauchy’
- ‘parzen’
- ‘poisson’
- ‘bohman’
- ‘kaiser’
默认为
hann
。- overlap
设置窗口重叠。如果设置为 1,将选择所选窗口函数的推荐重叠值。默认为
0.5
。
36.115 tiltshelf
使用双极搁架滤波器增强或削减音频的低频,并削减或增强高频,该滤波器的响应类似于标准高保真音调控制。这也被称为搁架均衡 (EQ)。
该滤波器接受以下选项
- gain, g
给出 0 Hz 的增益。其有用范围约为 -20(用于大幅削减)到 +20(用于大幅提升)。使用正增益时请注意削波。
- 频率,f
设置滤波器的中心频率,因此可用于扩展或减少要增强或削减的频率范围。默认值为
3000
Hz。- 宽度类型,t
设置指定滤波器带宽的方法。
- h
Hz
- q
Q因子
- o
倍频程
- s
斜率
- k
kHz
- 宽度,w
确定滤波器搁架过渡的陡峭程度。
- 极点,p
设置极点数。默认值为 2。
- 混合,m
在输出中使用滤波信号的程度。默认值为 1。范围在 0 到 1 之间。
- 通道,c
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- 归一化,n
归一化双二阶系数,默认情况下禁用。启用它会将直流的幅度响应归一化为 0dB。
- 变换,a
设置 IIR 滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- 精度,r
设置滤波精度。
- auto
根据环绕滤波器选择自动采样格式。
- s16
始终使用有符号 16 位。
- s32
始终使用有符号 32 位。
- f32
始终使用浮点 32 位。
- f64
始终使用浮点 64 位。
- block_size, b
设置用于反向 IIR 处理的块大小。如果此值设置得足够高(高于达到接近零值的截断脉冲响应长度),滤波将变为线性相位,否则如果不够大,只会产生令人讨厌的伪影。
请注意,当设置为非零值时,滤波器延迟将正好是这么多采样点。
36.115.1 命令
此滤波器支持一些选项,如 命令。
36.116 treble, highshelf
使用双极搁架滤波器增强或削减音频的高音(高频),该滤波器的响应类似于标准高保真音调控制。这也被称为搁架均衡 (EQ)。
该滤波器接受以下选项
- gain, g
给出 ~22 kHz 和奈奎斯特频率中较低者的增益。其有用范围约为 -20(大幅削减)到 +20(大幅增强)。使用正增益时请注意削波。
- 频率,f
设置滤波器的中心频率,因此可用于扩展或减少要增强或削减的频率范围。默认值为
3000
Hz。- 宽度类型,t
设置指定滤波器带宽的方法。
- h
Hz
- q
Q因子
- o
倍频程
- s
斜率
- k
kHz
- 宽度,w
确定滤波器搁架过渡的陡峭程度。
- 极点,p
设置极点数。默认值为 2。
- 混合,m
在输出中使用滤波信号的程度。默认值为 1。范围在 0 到 1 之间。
- 通道,c
指定要过滤的通道,默认情况下会过滤所有可用的通道。
- 归一化,n
归一化双二阶系数,默认情况下禁用。启用它会将直流的幅度响应归一化为 0dB。
- 变换,a
设置 IIR 滤波器的变换类型。
- di
- dii
- tdi
- tdii
- latt
- svf
- zdf
- 精度,r
设置滤波精度。
- auto
根据环绕滤波器选择自动采样格式。
- s16
始终使用有符号 16 位。
- s32
始终使用有符号 32 位。
- f32
始终使用浮点 32 位。
- f64
始终使用浮点 64 位。
- block_size, b
设置用于反向 IIR 处理的块大小。如果此值设置得足够高(高于达到接近零值的截断脉冲响应长度),滤波将变为线性相位,否则如果不够大,只会产生令人讨厌的伪影。
请注意,当设置为非零值时,滤波器延迟将正好是这么多采样点。
36.116.1 命令
此滤波器支持以下命令
- 频率,f
更改高音频率。命令语法为:“频率”
- 宽度类型,t
更改高音宽度类型。命令语法为:“宽度类型”
- 宽度,w
更改高音宽度。命令语法为:“宽度”
- gain, g
更改高音增益。命令语法为:“增益”
- 混合,m
更改高音混合。命令语法为:“混合”
36.117 tremolo
正弦幅度调制。
该滤波器接受以下选项
- f
调制频率,单位为赫兹。次谐波范围(20 Hz 或更低)内的调制频率将产生颤音效果。通过指定高于 20 Hz 的调制频率,此滤波器也可以用作环形调制器。范围是 0.1 - 20000.0。默认值为 5.0 Hz。
- d
调制深度,以百分比表示。范围是 0.0 - 1.0。默认值为 0.5。
36.118 vibrato
正弦相位调制。
该滤波器接受以下选项
- f
调制频率,单位为赫兹。范围是 0.1 - 20000.0。默认值为 5.0 Hz。
- d
调制深度,以百分比表示。范围是 0.0 - 1.0。默认值为 0.5。
36.119 virtualbass
应用音频虚拟低音滤波器。
此滤波器接受立体声输入并产生带有 LFE (2.1) 声道输出的立体声。新生成的 LFE 声道具有增强的虚拟低音,最初从两个立体声声道获得。此滤波器输出的左右前声道与立体声输入中提供的声道保持不变。
该滤波器接受以下选项
- cutoff
设置虚拟低音截止频率。默认值为 250 Hz。允许的范围是 100 到 500 Hz。
- 强度
设置虚拟低音强度。允许的范围是 0.5 到 3。默认值为 3。
36.120 volume
调整输入音频音量。
它接受以下参数
- 音量
设置音频音量表达式。
输出值将被裁剪到最大值。
输出音频音量由以下关系给出
output_volume = volume * input_volume
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 增益的预放大增益。
replaygain_preamp 的默认值为 0.0。
- replaygain_noclip
通过限制应用的增益来防止削波。
replaygain_noclip 的默认值为 1。
- eval
设置何时评估音量表达式。
它接受以下值
- ‘once’
仅在滤波器初始化期间或发送 ‘volume’ 命令时评估表达式一次
- ‘frame’
为每个传入帧评估表达式
默认值为 ‘once’。
音量表达式可以包含以下参数。
- n
帧号(从零开始)
- nb_channels
通道数
- nb_consumed_samples
滤波器消耗的采样数
- nb_samples
当前帧中的采样数
- pos
文件中原始帧的位置;已弃用,请勿使用
- pts
帧 PTS
- sample_rate
采样率
- startpts
流开始时的 PTS
- startt
流开始时的时间
- t
帧时间
- tb
时间戳时基
- 音量
上次设置的音量值
请注意,当 eval 设置为 ‘once’ 时,只有 sample_rate 和 tb 变量可用,所有其他变量都将评估为 NAN。
36.120.1 命令
此滤波器支持以下命令
- 音量
修改音量表达式。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
36.120.2 示例
- 将输入音频音量减半
volume=volume=0.5 volume=volume=1/2 volume=volume=-6.0206dB
在以上所有示例中,可以省略 volume 的命名键,例如
volume=0.5
- 使用定点精度将输入音频功率增加 6 分贝
volume=volume=6dB:precision=fixed
- 在时间 10 之后淡化音量,湮灭周期为 5 秒
volume='if(lt(t,10),1,max(1-(t-10)/5,0))':eval=frame
36.121 volumedetect
检测输入视频的音量。
该滤波器没有参数。它仅支持 16 位有符号整数采样,因此在需要时将转换输入。当到达输入流末尾时,有关音量的统计信息将打印在日志中。
特别是,它将显示平均音量(均方根)、最大音量(基于每个采样)以及已注册音量值直方图的开头(从最大值到累积的 1/1000 采样)。
所有音量均以分贝为单位,相对于最大 PCM 值。
36.121.1 示例
以下是输出的摘录
[Parsed_volumedetect_0 0xa23120] mean_volume: -27 dB [Parsed_volumedetect_0 0xa23120] max_volume: -4 dB [Parsed_volumedetect_0 0xa23120] histogram_4db: 6 [Parsed_volumedetect_0 0xa23120] histogram_5db: 62 [Parsed_volumedetect_0 0xa23120] histogram_6db: 286 [Parsed_volumedetect_0 0xa23120] histogram_7db: 1042 [Parsed_volumedetect_0 0xa23120] histogram_8db: 2551 [Parsed_volumedetect_0 0xa23120] histogram_9db: 4609 [Parsed_volumedetect_0 0xa23120] histogram_10db: 8409
这意味着
- 均方能量约为 -27 dB,或 10^-2.7。
- 最大的采样位于 -4 dB,或者更准确地说,位于 -4 dB 和 -5 dB 之间。
- 有 6 个采样位于 -4 dB,62 个采样位于 -5 dB,286 个采样位于 -6 dB 等等。
换句话说,将音量提高 +4 dB 不会导致任何削波,将音量提高 +5 dB 会导致 6 个采样出现削波等等。
37 音频源
以下是对当前可用音频源的描述。
37.1 abuffer
缓冲音频帧,并使其可用于滤波器链。
此源主要用于编程用途,特别是通过 libavfilter/buffersrc.h 中定义的接口。
它接受以下参数
- time_base
将用于提交帧的时间戳的时基。它必须是浮点数或 numerator/denominator 形式。
- sample_rate
传入音频缓冲区的采样率。
- sample_fmt
传入音频缓冲区的采样格式。采样格式名称或其在 libavutil/samplefmt.h 中的枚举 AVSampleFormat 中对应的整数表示形式。
- channel_layout
传入音频缓冲区的声道布局。来自 libavutil/channel_layout.c 中 channel_layout_map 的声道布局名称或其在 libavutil/channel_layout.h 中 AV_CH_LAYOUT_* 宏中的相应整数表示形式。
- channels
传入音频缓冲区的通道数。如果同时指定了 channels 和 channel_layout,则它们必须保持一致。
37.1.1 示例
abuffer=sample_rate=44100:sample_fmt=s16p:channel_layout=stereo
将指示源接受 44100Hz 的平面 16 位有符号立体声音频。由于名为“s16p”的采样格式对应数字 6,“stereo”通道布局对应值 0x3,这等效于
abuffer=sample_rate=44100:sample_fmt=6:channel_layout=0x3
37.2 aevalsrc
生成由表达式指定的音频信号。
此源接受一个或多个表达式(每个通道一个)作为输入,这些表达式将被评估并用于生成相应的音频信号。
此源接受以下选项
- exprs
为每个单独的通道设置以“|”分隔的表达式列表。如果未指定 channel_layout 选项,则选择的通道布局取决于提供的表达式的数量。否则,最后指定的表达式将应用于其余的输出通道。
- channel_layout, c
设置通道布局。指定布局中的通道数必须等于指定表达式的数量。
- duration,d
设置源音频的最小持续时间。有关接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分。请注意,最终持续时间可能大于指定的持续时间,因为生成的音频始终在完整帧的末尾被截断。
如果未指定或表示的持续时间为负,则音频应被视为永久生成。
- 采样数,n
设置每个输出帧中每个通道的样本数,默认为 1024。
- 采样率,s
指定采样率,默认为 44100。
exprs 中的每个表达式都可以包含以下常量
- n
评估的样本数,从 0 开始
- t
评估的样本的时间(以秒为单位),从 0 开始
- s
采样率
37.2.1 示例
- 生成静音
aevalsrc=0
- 生成频率为 440 Hz 的正弦信号,并将采样率设置为 8000 Hz
aevalsrc="sin(440*2*PI*t):s=8000"
- 生成一个双通道信号,显式指定通道布局(前中 + 后中)
aevalsrc="sin(420*2*PI*t)|cos(430*2*PI*t):c=FC|BC"
- 生成白噪声
aevalsrc="-2+random(0)"
- 生成幅度调制信号
aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
- 在 360 Hz 载波上生成 2.5 Hz 的双耳节拍
aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)"
37.3 afdelaysrc
生成分数延迟 FIR 系数。
结果流可以与 afir 滤波器一起使用,用于滤波音频信号。
该滤波器接受以下选项
- 延迟,d
设置分数延迟。默认为 0。
- sample_rate, r
设置采样率,默认为 44100。
- 采样数,n
设置每个帧的样本数。默认为 1024。
- 抽头数,t
设置输出音频流中滤波器系数的数量。默认值为 0。
- channel_layout, c
指定通道布局,可以是表示通道布局的字符串。 channel_layout 的默认值为“stereo”。
37.4 afireqsrc
生成 FIR 均衡器系数。
结果流可以与 afir 滤波器一起使用,用于滤波音频信号。
该滤波器接受以下选项
- 预设,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’
- 增益,g
为每个频段设置自定义增益。仅当预设选项设置为
custom
时使用。增益以空格分隔,每个增益以 dBFS 设置。默认值为0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
。- 频段,b
设置设置自定义均衡器增益的自定义频段。这必须严格按升序排列。仅当预设选项设置为
custom
时使用。频段以空格分隔,每个频段表示频率(以 Hz 为单位)。默认值为25 40 63 100 160 250 400 630 1000 1600 2500 4000 6300 10000 16000 24000
。- 抽头数,t
设置输出音频流中滤波器系数的数量。默认值为
4096
。- sample_rate, r
设置输出音频流的采样率,默认为
44100
。- 采样数,n
设置输出音频流中每个帧的样本数。默认为
1024
。- 插值,i
设置 FIR 均衡器系数的插值方法。可以是
linear
或cubic
。- 相位,h
设置 FIR 滤波器的相位类型。可以是
linear
或min
:最小相位。默认是最小相位滤波器。
37.5 afirsrc
使用频率采样方法生成 FIR 系数。
结果流可以与 afir 滤波器一起使用,用于滤波音频信号。
该滤波器接受以下选项
- 抽头数,t
设置输出音频流中滤波器系数的数量。默认值为 1025。
- 频率,f
设置从中设置幅度和相位的频率点。这必须是非递减顺序,第一个元素必须为 0,而最后一个元素必须为 1。元素以空格分隔。
- 幅度,m
为 frequency 设置的每个频率点设置幅度值。值的数量必须与频率点的数量相同。值以空格分隔。
- 相位,p
为 frequency 设置的每个频率点设置相位值。值的数量必须与频率点的数量相同。值以空格分隔。
- sample_rate, r
设置采样率,默认为 44100。
- 采样数,n
设置每个帧的样本数。默认为 1024。
- 窗函数,w
设置窗函数。默认值为 blackman。
37.6 anullsrc
空音频源,返回未处理的音频帧。它主要用作模板,用于分析/调试工具中,或者用作忽略输入数据的滤波器的源(例如,sox synth 滤波器)。
此源接受以下选项
- 通道布局,cl
-
指定通道布局,可以是整数或表示通道布局的字符串。channel_layout 的默认值为“stereo”。
检查 libavutil/channel_layout.c 中的 channel_layout_map 定义,了解字符串和通道布局值之间的映射。
- sample_rate, r
指定采样率,默认为 44100。
- 采样数,n
设置每个请求帧的样本数。
- duration,d
设置源音频的持续时间。有关接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分。
如果未指定或表示的持续时间为负,则音频应被视为永久生成。
37.6.1 示例
- 将采样率设置为 48000 Hz,并将通道布局设置为 AV_CH_LAYOUT_MONO。
anullsrc=r=48000:cl=4
- 使用更明显的语法执行相同的操作
anullsrc=r=48000:cl=mono
所有参数都需要明确定义。
37.7 flite
使用 libflite 库合成语音。
要启用此滤波器的编译,您需要使用 --enable-libflite
配置 FFmpeg。
请注意,2.0 之前的 flite 库版本不是线程安全的。
该滤波器接受以下选项
- list_voices
如果设置为 1,则列出可用语音的名称并立即退出。默认值为 0。
- 采样数,n
设置每个帧的最大样本数。默认值为 512。
- textfile
设置包含要说的文本的文件名。
- text
设置要说的文本。
- 语音,v
设置用于语音合成的语音。默认值为
kal
。另请参阅 list_voices 选项。
37.7.1 示例
- 从文件 speech.txt 读取,并使用标准 flite 语音合成文本
flite=textfile=speech.txt
- 选择
slt
语音读取指定的文本flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
- 输入文本到 ffmpeg
ffmpeg -f lavfi -i flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
- 让 ffplay 使用
flite
和lavfi
设备说出指定的文本ffplay -f lavfi flite=text='No more be grieved for which that thou hast done.'
有关 libflite 的更多信息,请查看:http://www.festvox.org/flite/
37.8 anoisesrc
生成噪声音频信号。
该滤波器接受以下选项
- sample_rate, r
指定采样率。默认值为 48000 Hz。
- 幅度,a
指定生成的音频流的幅度 (0.0 - 1.0)。默认值为 1.0。
- duration,d
指定生成的音频流的持续时间。不指定此选项会导致产生无限长度的噪声。
- 颜色,colour,c
指定噪声的颜色。可用的噪声颜色有白色、粉色、棕色、蓝色、紫色和天鹅绒色。默认颜色为白色。
- 种子,s
指定用于播种 PRNG 的值。
- 采样数,n
设置每个输出帧的采样数,默认值为 1024。
- 密度
设置绒噪声生成器的密度 (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),即虚数单位。
该滤波器接受以下选项
- 采样率,s
设置采样率,默认为 44100。
- 抽头数,t
设置 FIR 滤波器的长度,默认值为 22051。
- 采样数,n
设置每帧的采样数。
- 窗函数,w
设置生成 FIR 系数时使用的窗函数。
37.10 sinc
生成一个 sinc kaiser 加窗的低通、高通、带通或带阻 FIR 系数。
结果流可以与 afir 滤波器一起使用,用于滤波音频信号。
该滤波器接受以下选项
- sample_rate, r
设置采样率,默认为 44100。
- 采样数,n
设置每个帧的样本数。默认为 1024。
- hp
设置高通频率。默认值为 0。
- lp
设置低通频率。默认值为 0。如果高通频率低于低通频率,且低通频率高于 0,则滤波器将创建带通滤波器系数,否则创建带阻滤波器系数。
- phase
设置滤波器相位响应。默认值为 50。允许范围为 0 到 100。
- beta
设置 Kaiser 窗的 beta 值。
- att
设置阻带衰减。默认值为 120dB,允许范围为 40 到 180 dB。
- round
启用舍入,默认情况下禁用。
- hptaps
设置高通滤波器的抽头数。
- lptaps
设置低通滤波器的抽头数。
37.11 sine
生成一个由幅度为 1/8 的正弦波组成的音频信号。
音频信号是位精确的。
该滤波器接受以下选项
- 频率,f
设置载波频率。默认值为 440 Hz。
- beep_factor, b
启用每秒发出一次周期性蜂鸣声,频率为 beep_factor 倍的载波频率。默认值为 0,表示禁用蜂鸣声。
- sample_rate, r
指定采样率,默认值为 44100。
- duration,d
指定生成的音频流的持续时间。
- samples_per_frame
设置每个输出帧的采样数。
表达式可以包含以下常量
- n
输出音频帧的(顺序)编号,从 0 开始。
- pts
输出音频帧的 PTS(演示时间戳),以 TB 单位表示。
- t
输出音频帧的 PTS,以秒表示。
- TB
输出音频帧的时间基准。
默认值为
1024
。
37.11.1 示例
- 生成一个简单的 440 Hz 正弦波
sine
- 生成一个 220 Hz 正弦波,每秒发出一个 880 Hz 的蜂鸣声,持续 5 秒
sine=220:4:d=5 sine=f=220:b=4:d=5 sine=frequency=220:beep_factor=4:duration=5
- 生成一个 1 kHz 的正弦波,遵循
1602,1601,1602,1601,1602
NTSC 模式sine=1000:samples_per_frame='st(0,mod(n,5)); 1602-not(not(eq(ld(0),1)+eq(ld(0),3)))'
38 音频接收器
以下是当前可用音频接收器的描述。
38.1 abuffersink
缓冲音频帧,并使其可用于过滤器链的末端。
此接收器主要用于编程,特别是通过 libavfilter/buffersink.h 中定义的接口或选项系统。
它接受指向 AVABufferSinkContext 结构的指针,该结构定义传入缓冲区的格式,作为不透明参数传递给 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
与 subtitles 过滤器相同,只是它不需要 libavcodec 和 libavformat 才能工作。另一方面,它仅限于 ASS (高级 Substation Alpha) 字幕文件。
除了 subtitles 过滤器的通用选项外,此过滤器还接受以下选项
- shaping
设置 shaping 引擎
可用值为
- ‘auto’
默认的 libass shaping 引擎,这是最好的可用引擎。
- ‘simple’
快速、不依赖字体的塑形器,只能进行替换操作
- “复杂”
较慢的塑形器,使用 OpenType 进行替换和定位
默认值为
auto
。
39.6 atadenoise
将自适应时域平均降噪器应用于视频输入。
该滤波器接受以下选项
- 0a
设置第一平面的阈值 A。默认值为 0.02。有效范围为 0 到 0.3。
- 0b
设置第一平面的阈值 B。默认值为 0.04。有效范围为 0 到 5。
- 1a
设置第二平面的阈值 A。默认值为 0.02。有效范围为 0 到 0.3。
- 1b
设置第二平面的阈值 B。默认值为 0.04。有效范围为 0 到 5。
- 2a
设置第三平面的阈值 A。默认值为 0.02。有效范围为 0 到 0.3。
- 2b
设置第三平面的阈值 B。默认值为 0.04。有效范围为 0 到 5。
阈值 A 用于响应输入信号的突变,阈值 B 用于响应输入信号的连续变化。
- s
设置滤波器用于平均的帧数。默认值为 9。必须是范围 [5, 129] 中的奇数。
- p
设置滤波器将用于平均的帧的哪些平面。默认为全部。
- a
设置滤波器将用于平均的算法变体。默认值为
p
(并行)。或者可以设置为s
(串行)。并行可能比串行更快,反之则不然。并行会在第一个变化大于阈值时提前中止,而串行会继续处理帧的另一侧,如果它们等于或低于阈值。
- 0s
- 1s
- 2s
设置第一平面、第二平面或第三平面的 sigma 值。默认值为 32767。有效范围为 0 到 32767。此选项控制由 size 定义的半径内每个像素的权重。默认值表示每个像素具有相同的权重。将此选项设置为 0 会有效地禁用过滤。
39.6.1 命令
此滤波器支持与选项相同的命令,但选项 s
除外。该命令接受与相应选项相同的语法。
39.7 avgblur
应用平均模糊滤镜。
该滤波器接受以下选项
- sizeX
设置水平半径大小。
- planes
设置要过滤的平面。默认情况下,会过滤所有平面。
- sizeY
设置垂直半径大小,如果为零,则与
sizeX
相同。默认值为0
。
39.7.1 命令
此滤波器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.8 backgroundkey
将静态背景转换为透明。
该滤波器接受以下选项
- threshold
场景变化检测的阈值。
- 相似度
与背景的相似度百分比。
- 混合 (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 到 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
,显示该帧检测到的黑色量。
滤波器还将元数据附加到黑色片段的第一帧,键为 lavfi.black_start
,并附加到黑色片段结束后第一帧,键为 lavfi.black_end
。该值为帧的时间戳。无论指定的最小持续时间如何,都会添加此元数据。
该滤波器接受以下选项
- black_min_duration,d
设置以秒为单位表示的检测到的最小黑色持续时间。它必须是非负浮点数。
默认值为 2.0。
- picture_black_ratio_th,pic_th
设置将图片视为“黑色”的阈值。表示比率的最小值
nb_black_pixels / nb_pixels
对于该比率,图片被视为黑色。默认值为 0.98。
- pixel_black_th,pix_th
设置将像素视为“黑色”的阈值。
该阈值表示将像素视为“黑色”的最大像素亮度值。提供的值根据以下等式进行缩放
absolute_threshold = luma_minimum_value + pixel_black_th * luma_range_size
luma_range_size 和 luma_minimum_value 取决于输入视频格式,对于 YUV 全范围格式,范围为 [0-255],对于 YUV 非全范围格式,范围为 [16-235]。
默认值为 0.10。
以下示例将最大像素阈值设置为最小值,并且仅检测 2 秒或更长时间的黑色间隔
blackdetect=d=2:pix_th=0.00
39.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
滤镜还支持framesync选项。
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 连接性与低阈值选择的“弱”边缘像素连接。
low 和 high 阈值必须在 [0,1] 范围内选择,并且 low 应小于或等于 high。
low 的默认值为
20/255
,high 的默认值为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
设置局部补丁大小。这以 2D 形式设置尺寸。
- 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
如果启用,则滤镜将使用第二个流进行块匹配。如果 estim 选项的值为
basic
,则默认禁用;如果 estim 的值为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
为用于模糊相应输入平面的盒子半径(以像素为单位)设置表达式。
半径值必须是非负数,且对于亮度 (luma) 和 alpha 平面,不得大于表达式
min(w,h)/2
的值;对于色度 (chroma) 平面,不得大于min(cw,ch)/2
的值。luma_radius 的默认值为“2”。如果未指定,则 chroma_radius 和 alpha_radius 默认使用为 luma_radius 设置的对应值。
表达式可以包含以下常量
- w
- h
输入图像的宽度和高度,单位为像素。
- cw
- ch
输入色度图像的宽度和高度,单位为像素。
- hsub
- vsub
水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。
- luma_power, lp
- chroma_power, cp
- alpha_power, ap
指定对相应平面应用盒状模糊滤镜的次数。
luma_power 的默认值为 2。如果未指定,则 chroma_power 和 alpha_power 默认使用为 luma_power 设置的对应值。
值为 0 将禁用该效果。
39.19.1 示例
- 对亮度、色度和 alpha 半径设置为 2 的图像应用盒状模糊滤镜
boxblur=luma_radius=2:luma_power=1 boxblur=2:1
- 将亮度半径设置为 2,alpha 和色度半径设置为 0
boxblur=2:1:cr=0:ar=0
- 将亮度和色度半径设置为视频尺寸的一部分
boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
39.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
将对比度自适应锐化滤镜应用于视频流。
该滤波器接受以下选项
- 强度
设置锐化强度。默认值为 0。
- planes
设置要过滤的平面。默认值是过滤除 alpha 平面之外的所有平面。
39.23.1 命令
此滤镜支持与选项相同的命令。
39.24 chromahold
删除除某个特定颜色之外的所有颜色的所有颜色信息。
该滤波器接受以下选项
- 颜色
不会被中性色度替换的颜色。
- 相似度
与上述颜色的相似度百分比。0.01 仅匹配确切的键颜色,而 1.0 匹配所有内容。
- 混合 (blend)
混合百分比。0.0 使像素要么完全灰色,要么根本不灰色。较高的值会导致保留更多颜色。
- yuv
表示传递的颜色已经是 YUV 而不是 RGB。
启用此功能后,诸如“绿色”或“红色”之类的文字颜色不再有意义。这可用于以十六进制数字形式传递精确的 YUV 值。
39.24.1 命令
此滤镜支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.25 chromakey
YUV 色彩空间颜色/色度键控。
该滤波器接受以下选项
- 颜色
将被透明度替换的颜色。
- 相似度
与键颜色的相似度百分比。
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(默认)或 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
设置色域显示范围的大小,默认设置为 512。
- intensity, i
设置用于将输入像素值映射到 CIE 图的强度。
- contrast
设置用于绘制超出活动色彩系统色域的舌形颜色的对比度。
- corrgamma
校正显示在示波器上的伽玛值,默认启用。
- showwhite
在 CIE 图上显示白点,默认禁用。
- gamma
设置输入 gamma 值。仅用于 XYZ 输入色彩空间。
- fill
用 CIE 颜色填充。默认启用。
39.30 codecview
可视化某些编解码器导出的信息。
一些编解码器可以通过边数据或其他方式,使用帧导出信息。例如,一些基于 MPEG 的编解码器通过编解码器 flags2 选项中的 export_mvs 标志导出运动矢量。
该滤波器接受以下选项
- block
使用亮度平面显示块分区结构。
- mv
设置要可视化的运动矢量。
mv 的可用标志为
- ‘pf’
P 帧的前向预测运动矢量
- ‘bf’
B 帧的前向预测运动矢量
- ‘bb’
B 帧的后向预测运动矢量
- qp
使用色度平面显示量化参数。
- mv_type, mvt
设置要可视化的运动矢量类型。包括所有帧的运动矢量,除非通过 frame_type 选项指定。
mv_type 的可用标志为
- ‘fp’
前向预测运动矢量
- ‘bp’
后向预测运动矢量
- frame_type, ft
设置要可视化运动矢量的帧类型。
frame_type 的可用标志为
- ‘if’
帧内编码帧(I 帧)
- ‘pf’
预测帧(P 帧)
- ‘bf’
双向预测帧(B 帧)
39.30.1 示例
- 使用
ffplay
可视化所有帧的前向预测运动矢量ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv_type=fp
- 使用
ffplay
可视化 P 帧和 B 帧的多方向运动矢量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
rh
- 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 通道对输出红色通道的贡献。 rr 的默认值为
1
,rg、rb 和 ra 的默认值为0
。- gr
- gg
- gb
- ga
调整输入红色、绿色、蓝色和 alpha 通道对输出绿色通道的贡献。 gg 的默认值为
1
,gr、gb 和 ga 的默认值为0
。- br
- br
- bg
- bb
ba
- ar
- 调整输入红色、绿色、蓝色和 alpha 通道对输出蓝色通道的贡献。 bb 的默认值为
1
,br、bg 和 ba 的默认值为0
。 - ar
- aa
调整输入红色、绿色、蓝色和 alpha 通道对输出 alpha 通道的贡献。 aa 的默认值为
1
,ar、ag 和 ab 的默认值为0
。选项的允许范围是
[-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 值取决于 blend 选项的值。
该滤波器接受以下选项
- 颜色
设置 alpha 将设置为 0(完全透明)的颜色。请参阅 ffmpeg-utils 手册中 “Color” 部分。默认值为
black
。- 相似度
设置从关键颜色开始,其他颜色也具有完全透明度的半径。计算出的距离与关键颜色和像素颜色的 RGB 值之间在 3D 空间中的单位分数距离有关。范围为 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 颜色的所有颜色信息。
该滤波器接受以下选项
- 颜色
不被中性灰替换的颜色。
- 相似度
与上述颜色的相似度百分比。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’
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-6 525
- ‘bt601-6-625’
BT.601-6 625
- ‘bt709’
BT.709
- ‘smpte170m’
SMPTE-170M
- ‘smpte240m’
SMPTE-240M
- ‘bt2020’
BT.2020
- space
指定输出色彩空间。
接受的值是
- ‘bt709’
BT.709
- ‘fcc’
FCC
- ‘bt470bg’
BT.470BG 或 BT.601-6 625
- ‘smpte170m’
SMPTE-170M 或 BT.601-6 525
- ‘smpte240m’
SMPTE-240M
- ‘ycgco’
YCgCo
- ‘bt2020ncl’
具有非恒定亮度的 BT.2020
- trc
指定输出传递特性。
接受的值是
- ‘bt709’
BT.709
- ‘bt470m’
BT.470M
- ‘bt470bg’
BT.470BG
- ‘gamma22’
恒定伽马 2.2
- ‘gamma28’
恒定伽马 2.8
- ‘smpte170m’
SMPTE-170M、BT.601-6 625 或 BT.601-6 525
- ‘smpte240m’
SMPTE-240M
- ‘srgb’
SRGB
- ‘iec61966-2-1’
iec61966-2-1
- ‘iec61966-2-4’
iec61966-2-4
- ‘xvycc’
xvycc
- ‘bt2020-10’
用于 10 位内容的 BT.2020
- ‘bt2020-12’
用于 12 位内容的 BT.2020
- primaries
指定输出原色。
接受的值是
- ‘bt709’
BT.709
- ‘bt470m’
BT.470M
- ‘bt470bg’
BT.470BG 或 BT.601-6 625
- ‘smpte170m’
SMPTE-170M 或 BT.601-6 525
- ‘smpte240m’
SMPTE-240M
- ‘film’
film
- ‘smpte431’
SMPTE-431
- ‘smpte432’
SMPTE-432
- ‘bt2020’
BT.2020
- ‘jedec-p22’
JEDEC P22 荧光粉
- range
指定输出颜色范围。
接受的值是
- ‘tv’
TV(受限)范围
- ‘mpeg’
MPEG(受限)范围
- ‘pc’
PC(全)范围
- ‘jpeg’
JPEG(全)范围
- format
指定输出颜色格式。
接受的值是
- ‘yuv420p’
YUV 4:2:0 平面 8 位
- ‘yuv420p10’
YUV 4:2:0 平面 10 位
- ‘yuv420p12’
YUV 4:2:0 平面 12 位
- ‘yuv422p’
YUV 4:2:2 平面 8 位
- ‘yuv422p10’
YUV 4:2:2 平面 10 位
- ‘yuv422p12’
YUV 4:2:2 平面 12 位
- ‘yuv444p’
YUV 4:4:4 平面 8 位
- ‘yuv444p10’
YUV 4:4:4 平面 10 位
- ‘yuv444p12’
YUV 4:4:4 平面 12 位
- fast
进行快速转换,跳过伽马/原色校正。这将占用更少的 CPU,但数学上是不正确的。要获得与 colormatrix 滤镜产生的输出兼容的输出,请使用 fast=1。
- dither
指定抖动模式。
接受的值是
- ‘none’
无抖动
- ‘fsb’
Floyd-Steinberg 抖动
- wpadapt
白点自适应模式。
接受的值是
- ‘bradford’
布拉德福德白点自适应
- ‘vonkries’
von Kries 白点自适应
- ‘identity’
恒等白点自适应(即,无白点自适应)
- iall
一次性覆盖所有输入属性。与 all 接受的值相同。
- ispace
覆盖输入色彩空间。与 space 接受的值相同。
- iprimaries
覆盖输入原色。与 primaries 接受的值相同。
- itrc
覆盖输入传递特性。与 trc 接受的值相同。
- irange
覆盖输入颜色范围。与 range 接受的值相同。
该滤镜将传递特性、色彩空间和原色转换为指定的用户值。如果未指定输出值,则会根据“all”属性将其设置为默认值。如果也未指定该属性,则滤镜将记录错误。输出颜色范围和格式默认为与输入颜色范围和格式相同的值。输入传递特性、色彩空间、原色和颜色范围应在输入数据中设置。如果缺少这些项中的任何一项,则滤镜将记录错误,并且不会进行任何转换。
例如,要将输入转换为 SMPTE-240M,请使用以下命令
colorspace=smpte240m
39.42 colorspace_cuda
colorspace 滤镜的 CUDA 加速实现。
与软件色彩空间滤镜相比,它绝不是功能完备的,并且目前仅支持 jpeg/全范围和 mpeg/有限范围之间的颜色范围转换。
该滤波器接受以下选项
- range
指定输出颜色范围。
接受的值是
- ‘tv’
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
设置每个平面的矩阵。矩阵是在 square 模式下为 9、25 或 49 个有符号整数的序列,在 row 模式下为 1 到 49 个奇数个有符号整数的序列。
- 0rdiv
- 1rdiv
- 2rdiv
- 3rdiv
为每个平面的计算值设置乘数。如果未设置或为 0,则它将为所有矩阵元素之和的 1/。
- 0bias
- 1bias
- 2bias
- 3bias
设置每个平面的偏移量。此值将添加到乘法的结果中。有助于使整体图像更亮或更暗。默认值为 0.0。
- 0mode
- 1mode
- 2mode
- 3mode
设置每个平面的矩阵模式。可以是 square、row 或 column。默认值为 square。
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。默认值为 all。
convolve
滤镜还支持 framesync 选项。
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 传输,从而可以快速处理复杂的滤镜链。目前,仅支持具有零个(生成器)或恰好一个(滤镜)输入图像和一个输出图像的滤镜。此外,过渡滤镜尚不能按预期使用。
一些滤镜会根据各自的滤镜内核生成带有额外填充的输出图像。填充会自动删除,以确保滤镜输出与输入图像具有相同的大小。
对于图像生成器,输出图像的大小由滤镜链的上一个输出图像或整个滤镜链的输入图像确定。生成器不使用此图像的像素信息来生成其输出。但是,生成的输出会混合到此图像上,从而导致输出图像的部分或全部覆盖。
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 主页创建一个二维码,以 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
获取两个输入视频之间的相关性。
此滤镜需要两个输入视频。
为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。此外,它还假设两个输入具有相同数量的帧,这些帧会逐个进行比较。
通过日志系统打印获得的每个分量、平均值、最小值和最大值的相关性。
该滤镜将每帧的计算相关性存储在帧元数据中。
此滤镜还支持 framesync 选项。
在下面的示例中,正在处理的输入文件 main.mpg 与参考文件 ref.mpg 进行比较。
ffmpeg -i main.mpg -i ref.mpg -lavfi corr -f null -
39.49 cover_rect
覆盖矩形对象
它接受以下选项
- cover
可选覆盖图像的文件路径,需要为 yuv420 格式。
- mode
设置覆盖模式。
它接受以下值
- ‘cover’
使用提供的图像覆盖它
- ‘blur’
通过插值周围的像素来覆盖它
默认值为 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’或‘out_w’命令时计算一次。- h, out_h
输出视频的高度。默认为
ih
。此表达式仅在滤镜配置期间或发送‘h’或‘out_h’命令时计算一次。- x
输出视频左边缘在输入视频中的水平位置。默认为
(in_w-out_w)/2
。此表达式逐帧计算。- y
输出视频上边缘在输入视频中的垂直位置。默认为
(in_h-out_h)/2
。此表达式逐帧计算。- keep_aspect
如果设置为 1,将通过更改输出样本的纵横比来强制输出显示纵横比与输入的纵横比相同。默认为 0。
- exact
启用精确裁剪。如果启用,则子采样的视频将按照指定的精确宽度/高度/x/y 进行裁剪,而不会四舍五入到最近的较小值。默认为 0。
out_w、out_h、x、y 参数是包含以下常数的表达式
- x
- y
为 x 和 y 计算的值。它们针对每个新帧进行计算。
- 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
根据 mode,裁剪检测基于周围像素的纯黑色值,或者基于运动矢量和边缘像素的组合。
- ‘black’
检测播放视频周围的黑色像素。要进行精细控制,请使用选项 limit。
- ‘mvedges’
通过视频内的运动矢量和扫描通常构成播放视频边界的边缘像素来检测播放视频。
- 限制
设置更高的黑色值阈值,可以选择从无 (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 连接性与低阈值选择的“弱”边缘像素连接。
low 和 high 阈值必须在 [0,1] 范围内选择,并且 low 应小于或等于 high。
low 的默认值为
5/255
,high 的默认值为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 命令
此滤波器支持以下命令
- 限制
该命令接受与相应选项相同的语法。如果指定的表达式无效,则会保持其当前值。
39.52 cue
将视频过滤延迟到给定的挂钟时间戳。该过滤器首先传递 preroll 数量的帧,然后缓冲最多 buffer 数量的帧并等待提示。到达提示后,它会转发缓冲的帧以及随后输入的所有帧。
该过滤器可用于同步多个 ffmpeg 进程的输出,以用于诸如 decklink 之类的实时输出设备。通过将延迟置于过滤链中并预先缓冲帧,该进程可以在达到目标挂钟时间戳后几乎立即将数据传递到输出。
不能保证完美的帧精度,但结果对于某些用例来说已经足够好。
- 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、b 参数之外,还可以使用此选项;在这种情况下,后面的选项优先于预设值。可用的预设为
- ‘none’
- ‘color_negative’
- ‘cross_process’
- ‘darker’
- ‘increase_contrast’
- ‘lighter’
- ‘linear_contrast’
- ‘medium_contrast’
- ‘negative’
- ‘strong_contrast’
- ‘vintage’
默认值为
none
。- master, m
设置主关键点。这些点将定义第二次映射。它有时被称为“亮度”或“值”映射。它可以与 r、g、b 或 all 一起使用,因为它类似于后处理 LUT。
- red, r
设置红色组件的关键点。
- green, g
设置绿色组件的关键点。
- blue, b
设置蓝色组件的关键点。
- all
设置所有组件的关键点(不包括主关键点)。除了其他关键点组件选项之外,还可以使用此选项。在这种情况下,未设置的组件将回退到此 all 设置。
- psfile
指定一个 Photoshop 曲线文件 (
.acv
),从中导入设置。- plot
将曲线的 Gnuplot 脚本保存在指定的文件中。
- interp
指定插值的类型。可用的算法为
- ‘natural’
使用分段三次多项式的自然三次样条,该多项式是两次连续可微的。
- ‘pchip’
使用分段三次 Hermite 插值多项式 (PCHIP) 的单调三次样条。
为避免某些 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'
这里我们获得每个组件的以下坐标
- 红色
(0;0.11) (0.42;0.51) (1;0.95)
- 绿色
(0;0) (0.50;0.48) (1;1)
- 蓝色
(0;0.22) (0.49;0.44) (1;0.80)
- 前面的示例也可以使用相关的内置预设来实现
curves=preset=vintage
- 或者简单地
curves=vintage
- 使用 Photoshop 预设并重新定义绿色组件的点
curves=psfile='MyCurvesPresets/purple.acv':green='0/0 0.45/0.53 1/1'
- 使用
ffmpeg
和gnuplot
检查cross_process
配置文件的曲线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
设置范围模式,可以是以下之一
- ‘单声道’
在黑色背景上用白色绘制十六进制像素值。
- ‘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
设置噪声 sigma 常数。
此 sigma 定义了一个
3 * sigma
的硬阈值;低于此阈值的每个 DCT 系数(绝对值)都将被丢弃。如果需要更高级的滤波,请参阅 expr。
默认值为
0
。- overlap
设置每个块的重叠像素数。由于滤镜速度可能较慢,您可以降低此值,但代价是滤波效果较差,并可能出现各种伪影。
如果重叠值不允许处理整个输入宽度或高度,则会显示警告,并且不会对相应的边界进行去噪。
默认值为 blocksize-1,这是最佳设置。
- expr, e
设置系数量表达式。
对于 DCT 块的每个系数,此表达式将被评估为该系数的乘数值。
如果设置此选项,则将忽略 sigma 选项。
可以通过 c 变量访问系数的绝对值。
- n
使用位数设置 blocksize。
1<<n
定义了 blocksize,它是处理块的宽度和高度。默认值为 3 (8x8),可以提高到 4,以获得 16x16 的 blocksize。请注意,更改此设置会对处理速度产生巨大影响。此外,更大的块大小并不一定意味着更好的去噪效果。
39.56.1 示例
应用 sigma 为 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
设置滤镜类型,可以是 weak 或 strong。默认值为 strong。这控制应用哪种类型的去块。
- 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 轴块的大小。较大的块可以更好地抑制噪声,但也使小运动的检测效果更差。必须是 2 的幂。默认值为
32
。- ppsrc
将主输入标记为预处理输入,并激活干净的源输入流。这允许使用各种滤镜预处理输入,以帮助度量计算,同时保持帧选择无损。当设置为
1
时,第一个流用于预处理的输入,第二个流是干净的源,从中选择保留的帧。默认值为0
。- chroma
设置在度量计算中是否考虑色度。默认值为
1
。- mixed
设置输入是否仅部分包含要抽取的内容。默认值为
false
。如果启用,视频输出流将使用可变帧率。
39.60 deconvolve
使用第二个流作为脉冲,在频域中对视频流应用 2D 反卷积。
该滤波器接受以下选项
- planes
设置要处理的平面。
- impulse
设置将处理哪些脉冲视频帧,可以是 first 或 all。默认值为 all。
- noise
在进行除法运算时设置噪声。默认值为 0.0000001。当宽度和高度不相同且不是 2 的幂,或者如果卷积之前的流有噪声时,此项很有用。
deconvolve
滤镜还支持 framesync 选项。
39.61 dedot
减少视频中的交叉亮度(点爬)和交叉颜色(彩虹)。
它接受以下选项
- m
设置操作模式。可以是 dotcrawl(用于减少交叉亮度)和/或 rainbows(用于减少交叉颜色)的组合。
- 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’
中位数
- 旁路
实际上不修改帧。当只需要元数据时很有用。
39.64 dejudder
消除部分隔行扫描电影内容产生的抖动。
例如,抖动可以由pullup滤波器引入。如果原始源是部分电影内容,那么pullup,dejudder
的输出将具有可变的帧率。可能会更改容器的记录帧率。除了这种变化之外,此滤波器不会影响恒定帧率的视频。
此滤波器中的可用选项是
- cycle
指定抖动重复的窗口长度。
接受任何大于 1 的整数。有用的值是
- ‘4’
如果原始内容是从 24 fps 电影转换为 30 fps(电影到 NTSC)。
- ‘5’
如果原始内容是从 25 fps PAL 转换为 30 fps(PAL 到 NTSC)。
- “20”
如果两者混合使用。
默认值为“4”。
39.65 delogo
通过简单地插值周围的像素来抑制电视台徽标。只需设置一个覆盖徽标的矩形,然后看着它消失(有时会出现更丑陋的东西 - 结果可能因情况而异)。
它接受以下参数
- x
- y
指定徽标的左上角坐标。必须指定它们。
- w
- h
指定要清除的徽标的宽度和高度。必须指定它们。
- 显示
设置为 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-Excitation_Context_ECCV_2018_paper.pdf。
训练和模型生成脚本在 https://github.com/XueweiMeng/derain_filter.git 存储库中提供。
该滤波器接受以下选项
- filter_type
指定要使用的过滤器。此选项接受以下值
- “derain”
去雨过滤器。要执行去雨过滤,您需要使用去雨模型。
- “dehaze”
去雾过滤器。要执行去雾过滤,您需要使用去雾模型。
默认值为“derain”。
- dnn_backend
指定用于模型加载和执行的 DNN 后端。此选项接受以下值
- “tensorflow”
TensorFlow 后端。要启用此后端,您需要安装 TensorFlow for C 库(请参阅 https://tensorflowcn.cn/install/lang_c),并使用
--enable-libtensorflow
配置 FFmpeg
- 模型
设置模型文件的路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。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”
空白位置的镜像边缘
默认值为“mirror”。
- blocksize
指定用于运动搜索的块大小。范围 4-128 像素,默认值为 8。
- contrast
指定块的对比度阈值。只会考虑对比度高于指定对比度(最暗像素和最亮像素之间的差异)的块。范围为 1-255,默认值为 125。
- 搜索
指定搜索策略。可用值为
- “exhaustive, 0”
设置穷举搜索
- “less, 1”
设置较少穷举的搜索。
默认值为“exhaustive”。
- 文件名
如果设置,则会将运动搜索的详细日志写入指定的文件。
39.68 despill
消除由于绿屏或蓝屏的反射颜色引起的对前景颜色的不必要污染。
此过滤器接受以下选项
- type
设置要使用的消除溢出类型。
- mix
设置如何生成溢出图。
- 扩展
设置要消除的剩余溢出量。
- 红色
控制溢出区域中红色量。
- 绿色
控制溢出区域中绿色量。对于绿屏,应为 -1。
- 蓝色
控制溢出区域中蓝色量。对于蓝屏,应为 -1。
- 亮度
控制溢出区域的亮度,保留颜色。
- alpha
修改从生成的溢出图中获取的 alpha 值。
39.68.1 命令
此滤波器支持上述所有选项作为命令。
39.69 detelecine
应用电影操作的精确逆运算。它需要使用模式选项指定的预定义模式,该模式必须与传递给电影过滤器的模式相同。
此过滤器接受以下选项
- first_field
- “top, t”
先顶部场
- “bottom, b”
先底部场。默认值为
top
。
- 模式
一个表示要应用的下拉模式的数字字符串。默认值为
23
。- start_frame
表示第一帧相对于电影模式的位置的数字。如果流被剪切,则使用此选项。默认值为
0
。
39.70 dilation
将膨胀效果应用于视频。
此过滤器用局部 (3x3) 最大值替换像素。
它接受以下选项
- threshold0
- threshold1
- threshold2
- threshold3
限制每个平面的最大更改,默认值为 65535。如果为 0,则平面将保持不变。
- 坐标
指定要引用的像素的标志。默认值为 255,即使用所有八个像素。
到局部 3x3 坐标的标志映射如下
1 2 3 4 5 6 7 8
39.70.1 命令
此滤波器支持上述所有选项作为命令。
39.71 displace
按照第二个和第三个输入流的指示来移动像素。
它接收三个输入流并输出一个流,第一个输入是源,第二个和第三个输入是位移图。
第二个输入指定沿 x 轴移动像素的量,而第三个输入指定沿 y 轴移动像素的量。如果其中一个位移图流终止,则将使用该位移图的最后一帧。
请注意,一旦生成,位移图可以反复重用。
以下是对接受选项的描述。
- edge
设置超出范围的像素的位移行为。
可用值为
- “blank”
缺失像素将被黑色像素替换。
- ‘smear’
相邻像素将扩散以替换缺失的像素。
- ‘wrap’
超出范围的像素将被包裹,使其指向另一侧的像素。
- ‘mirror’
超出范围的像素将被镜像像素替换。
默认值为 ‘smear’。
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 后端。
- 模型
设置模型文件的路径,该文件指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。
- 输入
设置 dnn 网络的输入名称。
- output
设置 dnn 网络的输出名称。
- 置信度
设置置信度阈值(默认值:0.5)。
- 标签
设置标签文件的路径,该文件指定标签 ID 和名称之间的映射。每个标签名称写在一行,跳过尾随空格和空行。第一行是标签 ID 0 的名称,第二行是标签 ID 1 的名称,依此类推。如果未提供标签文件,则标签 ID 将被视为名称。
- 后端配置
设置要传递到后端的配置。
对于 tensorflow 后端,您可以使用 sess_config 选项设置其配置,请使用 tools/python/tf_sess_config.py 获取您系统的配置。
39.73 dnn_detect
使用深度神经网络进行目标检测。
该滤波器接受以下选项
- dnn_backend
指定用于模型加载和执行的 DNN 后端。此选项现在只接受 openvino,将来会添加 tensorflow 后端。
- 模型
设置模型文件的路径,该文件指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。
- 输入
设置 dnn 网络的输入名称。
- output
设置 dnn 网络的输出名称。
- 置信度
设置置信度阈值(默认值:0.5)。
- 标签
设置标签文件的路径,该文件指定标签 ID 和名称之间的映射。每个标签名称写在一行,跳过尾随空格和空行。第一行是标签 ID 0 的名称(通常是“背景”),第二行是标签 ID 1 的名称,依此类推。如果未提供标签文件,则标签 ID 将被视为名称。
- 后端配置
设置要传递到后端的配置。要使用异步执行,请设置 async(默认:设置)。如果后端不支持异步,则回滚到同步执行。
39.74 dnn_processing
使用深度神经网络进行图像处理。它与另一个将帧的像素格式转换为 dnn 网络所需的格式的滤镜一起工作。
该滤波器接受以下选项
- dnn_backend
指定用于模型加载和执行的 DNN 后端。此选项接受以下值
- “tensorflow”
TensorFlow 后端。要启用此后端,您需要安装 TensorFlow for C 库(请参阅 https://tensorflowcn.cn/install/lang_c),并使用
--enable-libtensorflow
配置 FFmpeg- ‘openvino’
OpenVINO 后端。要启用此后端,您需要构建并安装 OpenVINO for C 库(请参阅 https://github.com/openvinotoolkit/openvino/blob/master/build-instruction.md)并使用
--enable-libopenvino
配置 FFmpeg(如果头文件和库未安装到系统路径中,则可能需要 --extra-cflags=-I... --extra-ldflags=-L...)。- ‘torch’
Libtorch 后端。要启用此后端,您需要构建并安装 Libtroch for C++ 库。请下载 cxx11 ABI 版本(请参阅 https://pytorch.ac.cn/get-started/locally)并使用
--enable-libtorch --extra-cflags=-I/libtorch_root/libtorch/include --extra-cflags=-I/libtorch_root/libtorch/include/torch/csrc/api/include --extra-ldflags=-L/libtorch_root/libtorch/lib/
配置 FFmpeg。
- 模型
设置模型文件的路径,该文件指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow、OpenVINO 和 Libtorch 后端只能加载其格式的文件。
- 输入
设置 dnn 网络的输入名称。
- output
设置 dnn 网络的输出名称。
- 后端配置
设置要传递到后端的配置。要使用异步执行,请设置 async(默认:设置)。如果后端不支持异步,则回滚到同步执行。
对于 tensorflow 后端,您可以使用 sess_config 选项设置其配置,请使用 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 处理 yuv420p 格式(支持平面 YUV 格式)的帧的 Y 通道(请参阅 sr 滤镜)。
./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 处理 yuv420p 格式(支持平面 YUV 格式)的帧的 Y 通道,这将改变帧大小(请参阅 sr 滤镜),请使用 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。
- 宽度,w
- 高度,h
指定框的宽度和高度的表达式;如果为 0,则解释为输入宽度和高度。默认为 0。
- 颜色,c
指定要绘制的框的颜色。有关此选项的通用语法,请查看 ffmpeg-utils 手册中的“颜色”部分。如果使用特殊值
invert
,则框边缘颜色与具有反转亮度的视频相同。- 厚度,t
设置框边缘厚度的表达式。值
fill
将创建一个填充框。默认值为3
。请参阅下文,了解接受的常量列表。
- 替换
如果输入具有 alpha,则适用。值为
1
时,绘制框的像素将覆盖视频的颜色和 alpha 像素。默认值为0
,这会将框合成到输入上,保持视频的 alpha 不变。
x、y、w、h 和 t 的参数是包含以下常量的表达式
- dar
输入显示宽高比,它与 (w / h) * sar 相同。
- hsub
- vsub
水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。
- 输入高度,ih
- 输入宽度,iw
输入宽度和高度。
- sar
输入采样宽高比。
- x
- y
绘制框的 x 和 y 偏移坐标。
- w
- h
绘制的框的宽度和高度。
- box_source
如果要使用边数据检测边界框中的框数据,则可以将框源设置为 side_data_detection_bboxes。
如果设置了 box_source,则将忽略 x、y、width 和 height,并且仍然使用边数据检测边界框中的框数据。因此,如果您不确定框源,请不要使用此参数。
- t
绘制框的厚度。
这些常量允许 x、y、w、h 和 t 表达式相互引用,因此您可以例如指定
y=x/dar
或h=w/dar
。
39.75.1 示例
- 在输入图像的边缘周围绘制一个黑色框。
drawbox
- 绘制一个红色且不透明度为 50% 的框。
drawbox=10:20:200:60:[email protected]
前一个示例可以指定为
drawbox=x=10:y=20:w=200:h=60:[email protected]
- 用粉红色填充框。
drawbox=x=10:y=10:w=100:h=100:[email protected]: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)
设置元数据值的最大值。
- br
设置图形背景颜色。默认为白色。
- mode
设置图形模式。
模式的可用值为
- ‘bar’
- ‘dot’
- ‘line’
默认值为
line
。- 滑动
设置滑动模式。
滑动的可用值为
- ‘frame’
当到达右边界时绘制新帧。
- ‘replace’
用新列替换旧列。
- ‘scroll’
从右向左滚动。
- ‘rscroll’
从左向右滚动。
- ‘picture’
绘制单个图片。
默认值为
frame
。- size
设置图形视频的大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。默认值为
900x256
。- 速率,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。
- 宽度,w
- 高度,h
指定网格单元格宽度和高度的表达式,如果为 0,则分别解释为输入宽度和高度减去
thickness
,以便图像被框起来。默认为 0。- 颜色,c
指定网格的颜色。有关此选项的常规语法,请查阅 ffmpeg-utils 手册中的“Color”部分。如果使用特殊值
invert
,则网格颜色与具有反转亮度的视频相同。- 厚度,t
设置网格线粗细的表达式。默认值为
1
。请参阅下文,了解接受的常量列表。
- 替换
如果输入有 alpha 通道,则适用。如果设置为
1
,则绘制的网格像素将覆盖视频的颜色和 alpha 像素。默认值为0
,这将网格合成到输入上,保持视频的 alpha 通道不变。
x、y、w、h 和 t 的参数是包含以下常量的表达式
- dar
输入显示宽高比,它与 (w / h) * sar 相同。
- hsub
- vsub
水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。
- 输入高度,ih
- 输入宽度,iw
输入网格单元的宽度和高度。
- sar
输入采样宽高比。
- x
- y
网格交叉点的某些坐标的 x 和 y 坐标(用于配置偏移量)。
- w
- h
绘制的单元格的宽度和高度。
- t
绘制的单元格的粗细。
这些常量允许 x、y、w、h 和 t 表达式相互引用,因此您可以例如指定
y=x/dar
或h=w/dar
。
39.77.1 示例
- 绘制一个 100x100 像素的单元格网格,粗细为 2 像素,颜色为红色,不透明度为 50%
drawgrid=width=100:height=100:thickness=2:[email protected]
- 绘制一个白色 3x3 网格,不透明度为 50%
drawgrid=w=iw/3:h=ih/3:t=2:[email protected]
39.77.2 命令
此滤波器支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.78 drawtext
使用 libfreetype 库在视频顶部绘制文本字符串或来自指定文件的文本。
要启用此过滤器的编译,您需要使用 --enable-libfreetype
和 --enable-libharfbuzz
配置 FFmpeg。要启用默认字体回退和 font 选项,您需要使用 --enable-libfontconfig
配置 FFmpeg。要启用 text_shaping 选项,您需要使用 --enable-libfribidi
配置 FFmpeg。
39.78.1 语法
它接受以下参数
- box
用于使用背景颜色在文本周围绘制一个框。该值必须为 1(启用)或 0(禁用)。box 的默认值为 0。
- boxborderw
设置使用 boxcolor 绘制的框周围边框的宽度。该值必须使用以下格式之一指定
-
boxborderw=10
将所有边框的宽度设置为 10 -
boxborderw=10|20
将顶部和底部边框的宽度设置为 10,左右边框的宽度设置为 20 -
boxborderw=10|20|30
将顶部边框的宽度设置为 10,底部边框的宽度设置为 30,左右边框的宽度设置为 20 -
boxborderw=10|20|30|40
将边框宽度设置为 10(上)、20(右)、30(下)、40(左)
boxborderw 的默认值为 “0”。
-
- boxcolor
用于在文本周围绘制框的颜色。有关此选项的语法,请查阅 ffmpeg-utils 手册中的“Color”部分。
boxcolor 的默认值为“白色”。
- line_spacing
设置行间距,以像素为单位。line_spacing 的默认值为 0。
- text_align
设置文本相对于框边界的垂直和水平对齐方式。该值是标志的组合,一个用于垂直对齐(T=顶部,M=中间,B=底部),一个用于水平对齐(L=左,C=居中,R=右)。请注意,仅当水平对齐方式为左对齐时才支持制表符。
- y_align
指定 y 值所引用的内容。可能的值为
-
text
将第一行文本的最高字形的顶部放置在 y 处 -
baseline
将第一行文本的基线放置在 y 处 -
font
将第一行文本的基线放置在 y 加上字体度量中定义的上升高度(以像素为单位)处
为了向后兼容,y_align 的默认值为“text”。
-
- borderw
设置使用 bordercolor 绘制的文本周围边框的宽度。borderw 的默认值为 0。
- bordercolor
设置用于在文本周围绘制边框的颜色。有关此选项的语法,请查阅 ffmpeg-utils 手册中的“Color”部分。
bordercolor 的默认值为“黑色”。
- expansion
选择 text 的扩展方式。可以是
none
、strftime
(已弃用) 或normal
(默认)。有关详细信息,请参阅下面的 文本扩展 部分。- basetime
设置计数的开始时间。值以微秒为单位。仅在已弃用的
strftime
扩展模式下应用。要在正常扩展模式下模拟,请使用pts
函数,将开始时间(以秒为单位)作为第二个参数提供。- fix_bounds
如果为 true,则检查并修复文本坐标以避免裁剪。
- fontcolor
用于绘制字体的颜色。有关此选项的语法,请查阅 ffmpeg-utils 手册中的“Color”部分。
fontcolor 的默认值为“黑色”。
- fontcolor_expr
以与 text 相同的方式扩展的字符串,以获取动态 fontcolor 值。默认情况下,此选项具有空值,并且不进行处理。设置此选项时,它会覆盖 fontcolor 选项。
- font
用于绘制文本的字体系列。默认为 Sans。
- fontfile
用于绘制文本的字体文件。必须包含路径。如果禁用 fontconfig 支持,则此参数是必需的。
- alpha
绘制文本时应用 alpha 混合。该值可以是 0.0 到 1.0 之间的数字。表达式也接受相同的变量 x, y。默认值为 1。请参阅 fontcolor_expr。
- fontsize
用于绘制文本的字体大小。fontsize 的默认值为 16。
- text_shaping
如果设置为 1,则尝试在绘制文本之前调整文本的形状(例如,反转从右到左的文本的顺序并连接阿拉伯字符)。否则,只需按给定内容绘制文本。默认为 1(如果支持)。
- ft_load_flags
用于加载字体的标志。
这些标志映射到 libfreetype 支持的相应标志,并且是以下值的组合
- 默认
- no_scale
- no_hinting
- render
- no_bitmap
- vertical_layout
- force_autohint
- crop_bitmap
- pedantic
- ignore_global_advance_width
- 不递归
- 忽略变换
- 单色
- 线性设计
- 不自动微调
默认值为“default”。
更多信息请参考FT_LOAD_* libfreetype标志的文档。
- 阴影颜色
用于在绘制的文本后面绘制阴影的颜色。有关此选项的语法,请查看ffmpeg-utils 手册中的“Color”部分。
shadowcolor 的默认值为“black”。
- 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
如果要使用边数据的检测边界框中的文本数据,则应将文本源设置为 side_data_detection_bboxes。
如果设置了文本源,则会忽略 text 和 textfile,并且仍然使用边数据的检测边界框中的文本数据。因此,如果您不确定文本源,请不要使用此参数。
- reload
将在指定的帧间隔重新加载 textfile。请确保原子更新 textfile,否则可能会部分读取甚至失败。范围是 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 - descent。
- max_glyph_w
最大字形宽度,即渲染文本中包含的所有字形的最大宽度
- font_a
在字体指标中定义的上升大小
- font_d
在字体指标中定义的下降大小
- top_a
第一行文本字形的最大上升器
- bottom_d
最后一行文本字形的最大下降器
- n
输入帧数,从 0 开始
- rand(min, max)
返回 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 文本扩展
如果 expansion 设置为 strftime
,则过滤器会识别提供的文本中 strftime
C 函数接受的序列并相应地展开它们。请查看 strftime
的文档。此功能已弃用,建议使用 normal
展开以及 gmtime
或 localtime
展开函数。
如果 expansion 设置为 none
,则文本将按原样打印。
如果 expansion 设置为 normal
(默认值),则使用以下展开机制。
反斜杠字符“\”后跟任何字符,始终展开为第二个字符。
形式为 %{...}
的序列将被展开。大括号之间的文本是函数名称,后面可能跟有以“:”分隔的参数。如果参数包含特殊字符或分隔符(“:”或“}”),则应将其转义。
请注意,它们可能还必须转义为过滤器参数字符串中 text 选项的值,以及过滤器图描述中的过滤器参数,可能还需要转义外壳,这最多构成四个级别的转义;使用带有 textfile 选项的文本文件可以避免这些问题。
以下函数可用
expr, e
表达式求值结果。
它必须接受一个参数,指定要计算的表达式,该表达式接受与 x 和 y 值相同的常量和函数。请注意,并非所有常量都应该使用,例如,在计算表达式时文本大小是未知的,因此常量 text_w 和 text_h 将具有未定义的值。
expr_int_format,eif
计算表达式的值并以格式化的整数输出。
第一个参数是要计算的表达式,与 expr 函数相同。第二个参数指定输出格式。允许的值为 ‘x’、‘X’、‘d’ 和 ‘u’。它们的使用方式与
printf
函数中完全相同。第三个参数是可选的,用于设置输出占用的位置数。它可用于从左侧添加零填充。gmtime
滤波器运行的时间,以 UTC 表示。它可以接受一个参数:一个
strftime
C 函数格式字符串。格式字符串被扩展为支持变量 %[1-6]N,它打印秒的小数部分,并可选择指定位数。localtime
滤波器运行的时间,以本地时区表示。它可以接受一个参数:一个
strftime
C 函数格式字符串。格式字符串被扩展为支持变量 %[1-6]N,它打印秒的小数部分,并可选择指定位数。metadata
帧元数据。接受一个或两个参数。
第一个参数是必需的,指定元数据键。
第二个参数是可选的,指定一个默认值,当找不到元数据键或元数据键为空时使用。
可通过检查运行
ffprobe -show_frames
打印的每个帧部分中以 TAG 开头的条目来识别可用的元数据。在引向 drawtext 滤波器的过滤器中生成的字符串元数据也可用。
n,frame_num
帧号,从 0 开始。
pict_type
当前图像类型的单字符描述。
pts
当前帧的时间戳。它可以接受最多三个参数。
第一个参数是时间戳的格式;它默认为
flt
,表示以微秒精度表示的十进制秒数;hms
表示格式化的 [-]HH:MM:SS.mmm 时间戳,精度为毫秒。gmtime
表示格式化为 UTC 时间的帧的时间戳;localtime
表示格式化为本地时区时间的帧的时间戳。第二个参数是添加到时间戳的偏移量。
如果格式设置为
hms
,则可以提供第三个参数24HH
,以 24 小时格式 (00-23) 显示格式化时间戳的小时部分。如果格式设置为
localtime
或gmtime
,则可以提供第三个参数:一个strftime
C 函数格式字符串。默认情况下,将使用 YYYY-MM-DD HH:MM:SS 格式。
39.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
- alpha
- fontsize
- fontcolor
- boxcolor
- bordercolor
- 阴影颜色
- box
- boxw
- boxh
- boxborderw
- line_spacing
- text_align
- shadowx
- shadowy
- borderw
39.78.4 示例
- 使用字体 FreeSerif 绘制“Test Text”,使用可选参数的默认值。
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
- 使用大小为 24 的字体 FreeSerif 在位置 x=100 和 y=50(从屏幕左上角开始计数)绘制“Test Text”,文本为黄色,周围有一个红色框。文本和框的不透明度均为 20%。
drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\ x=100: y=50: fontsize=24: [email protected]: box=1: [email protected]"
请注意,如果参数列表中未使用空格,则不需要双引号。
- 在视频帧的中心显示文本
drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h)/2"
- 在随机位置显示文本,每 30 秒切换到新位置
drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=if(eq(mod(t\,30)\,0)\,rand(0\,(w-text_w))\,x):y=if(eq(mod(t\,30)\,0)\,rand(0\,(h-text_h))\,y)"
- 在视频帧的最后一行中显示从右向左滑动的文本行。假设文件 LONG_LINE 包含一个没有换行符的单行。
drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
- 在帧底部显示文件 CREDITS 的内容并向上滚动。
drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
- 在输入视频的中心绘制一个绿色的字母“g”。字形基线放置在屏幕高度的一半处。
drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
- 每 3 秒显示文本 1 秒
drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
- 使用 fontconfig 设置字体。请注意,冒号需要转义。
drawtext='fontfile=Linux Libertine O-40\\:style=Semibold:text=FFmpeg'
- 绘制“Test Text”,字体大小取决于视频的高度。
drawtext="text='Test Text': fontsize=h/30: x=(w-text_w)/2: y=(h-text_h*2)"
- 打印实时编码的日期(请参阅
strftime
C 函数的文档)drawtext='fontfile=FreeSans.ttf:text=%{localtime\:%a %b %d %Y}'
- 显示文本淡入和淡出(出现/消失)
#!/bin/sh DS=1.0 # display start DE=10.0 # display end FID=1.5 # fade in duration FOD=5 # fade out duration ffplay -f lavfi "color,drawtext=text=TEST:fontsize=50:fontfile=FreeSerif.ttf:fontcolor_expr=ff0000%{eif\\\\: clip(255*(1*between(t\\, $DS + $FID\\, $DE - $FOD) + ((t - $DS)/$FID)*between(t\\, $DS\\, $DS + $FID) + (-(t - $DE)/$FOD)*between(t\\, $DE - $FOD\\, $DE) )\\, 0\\, 255) \\\\: x\\\\: 2 }"
- 水平对齐多个单独的文本。请注意,max_glyph_a 和 fontsize 值包含在 y 偏移量中。
drawtext=fontfile=FreeSans.ttf:text=DOG:fontsize=24:x=10:y=20+24-max_glyph_a, drawtext=fontfile=FreeSans.ttf:text=cow:fontsize=24:x=80:y=20+24-max_glyph_a
- 如果存在此类元数据,则将特殊的 lavf.image2dec.source_basename 元数据绘制到每个帧上。否则,绘制字符串“NA”。请注意,image2 解复用器必须具有选项 -export_path_metadata 1,特殊元数据字段才能用于过滤器。
drawtext="fontsize=20:fontcolor=white:fontfile=FreeSans.ttf:text='%{metadata\:lavf.image2dec.source_basename\:NA}':x=10:y=10"
有关 libfreetype 的更多信息,请访问:http://www.freetype.org/。
有关 fontconfig 的更多信息,请访问:http://freedesktop.org/software/fontconfig/fontconfig-user.html。
有关 libfribidi 的更多信息,请访问:http://fribidi.org/。
有关 libharfbuzz 的更多信息,请访问:https://github.com/harfbuzz/harfbuzz。
39.79 edgedetect
检测并绘制边缘。该过滤器使用 Canny 边缘检测算法。
该滤波器接受以下选项
- low
- high
设置 Canny 阈值算法使用的低阈值和高阈值。
高阈值选择“强”边缘像素,然后通过 8 连接性与低阈值选择的“弱”边缘像素连接。
low 和 high 阈值必须在 [0,1] 范围内选择,并且 low 应小于或等于 high。
low 的默认值为
20/255
,high 的默认值为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。
- 种子,s
设置随机种子,必须是介于 0 和 UINT32_MAX 之间的整数。如果未指定,或显式设置为 -1,则过滤器将尝试尽力使用良好的随机种子。
- pal8
设置 pal8 输出像素格式。此选项不适用于码本长度大于 256 的情况。默认禁用。
- use_alpha
在量化计算中包含 alpha 值。允许创建具有多个 alpha 平滑混合的调色板输出图像(例如 PNG8)。
39.81 entropy
测量视频帧颜色通道直方图中的灰度熵。
它接受以下参数
- mode
可以是 normal 或 diff。默认为 normal。
diff 模式测量直方图差值的熵,即相邻直方图值之间的绝对差值。
39.82 epx
应用专为像素艺术设计的 EPX 放大滤镜。
它接受以下选项
- n
设置缩放维度:
2
表示2xEPX
,3
表示3xEPX
。默认值为3
。
39.83 eq
设置亮度、对比度、饱和度和近似伽马调整。
该滤波器接受以下选项
- contrast
设置对比度表达式。该值必须是
-1000.0
到1000.0
范围内的浮点数。默认值为 "1"。- 亮度
设置亮度表达式。该值必须是
-1.0
到1.0
范围内的浮点数。默认值为 "0"。- saturation
设置饱和度表达式。该值必须是
0.0
到3.0
范围内的浮点数。默认值为 "1"。- gamma
设置伽马表达式。该值必须是
0.1
到10.0
范围内的浮点数。默认值为 "1"。- gamma_r
设置红色的伽马表达式。该值必须是
0.1
到10.0
范围内的浮点数。默认值为 "1"。- gamma_g
设置绿色的伽马表达式。该值必须是
0.1
到10.0
范围内的浮点数。默认值为 "1"。- gamma_b
设置蓝色的伽马表达式。该值必须是
0.1
到10.0
范围内的浮点数。默认值为 "1"。- gamma_weight
设置伽马权重表达式。它可以用来减少高伽马值对明亮图像区域的影响,例如防止它们被过度放大而变成纯白色。该值必须是
0.0
到1.0
范围内的浮点数。值为0.0
将完全关闭伽马校正,而1.0
将使其保持全强度。默认值为 "1"。- eval
设置何时评估亮度、对比度、饱和度和伽马表达式。
它接受以下值
- ‘init’
仅在过滤器初始化期间或处理命令时评估表达式一次
- ‘frame’
为每个传入的帧评估表达式
默认值为 ‘init’。
表达式接受以下参数
- n
输入帧的帧计数,从 0 开始
- pos
输入文件中相应数据包的字节位置,如果未指定则为 NAN;已弃用,请勿使用
- r
输入视频的帧率,如果输入帧率未知则为 NAN
- t
时间戳,以秒为单位表示,如果输入时间戳未知,则为 NAN
39.83.1 命令
该过滤器支持以下命令
- contrast
设置对比度表达式。
- 亮度
设置亮度表达式。
- 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,则平面将保持不变。
- 坐标
指定要引用的像素的标志。默认值为 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’
选择输入中不可用的平面将导致错误。这意味着您不能同时选择带有
y
、u
、v
平面的r
、g
、b
平面。
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
淡入效果持续的帧数。在淡入效果结束时,输出视频将具有与输入视频相同的强度。在淡出过渡结束时,输出视频将填充选定的 color。默认值为 25。
- alpha
如果设置为 1,则仅淡化 alpha 通道(如果输入中存在)。默认值为 0。
- 起始时间 (start_time), st
指定开始应用淡入效果的帧的时间戳(以秒为单位)。如果同时指定 start_frame 和 start_time,则淡入将在最后发生的时间开始。默认值为 0。
- duration,d
淡入效果必须持续的秒数。在淡入效果结束时,输出视频将具有与输入视频相同的强度,在淡出过渡结束时,输出视频将填充选定的 color。如果同时指定 duration 和 nb_frames,则使用 duration。默认值为 0(默认使用 nb_frames)。
- 颜色,c
指定淡入的颜色。默认值为“black”。
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]
- 使用 drawbox 过滤器在视频帧左上角大小为 100x100 的部分绘制黑色方框。
[in][blurin]feedback=x=0:y=0:w=100:h=100[out][blurout];[blurout]drawbox=x=0:y=0:w=100:h=100:t=100[blurin]
- 使用 pixelize 过滤器像素化视频帧大小为 100x100 的矩形部分。
[in][blurin]feedback=x=320:y=240:w=100:h=100[out][blurout];[blurout]pixelize[blurin]
39.90 fftdnoiz
使用 3D FFT(频域滤波)对帧进行降噪。
该滤波器接受以下选项
- sigma
设置噪声 sigma 常数。这将设置降噪强度。默认值为 1。允许范围为 0 到 30。在低重叠下使用非常高的 sigma 可能会产生阻塞伪影。
- 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
调整图像亮度平面的直流值(增益)。滤波器接受
0
到1000
范围内的整数值。默认值设置为0
。- dc_U
调整图像第一个色度平面的直流值(增益)。滤波器接受
0
到1000
范围内的整数值。默认值设置为0
。- dc_V
调整图像第二个色度平面的直流值(增益)。滤波器接受
0
到1000
范围内的整数值。默认值设置为0
。- weight_Y
设置亮度平面的频域权重表达式。
- weight_U
设置第一个色度平面的频域权重表达式。
- weight_V
设置第二个色度平面的频域权重表达式。
- eval
设置表达式的求值时机。
它接受以下值
- ‘init’
仅在滤波器初始化期间对表达式求值一次。
- ‘frame’
为每个传入帧对表达式求值。
默认值为 ‘init’。
该滤波器接受以下变量
- X
- Y
当前样本的坐标。
- W
- H
图像的宽度和高度。
- N
输入帧的编号,从 0 开始。
- WS
- HS
水平和垂直处理的 FFT 数组大小。
39.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
可以是
absolute
或relative
或pattern
。 默认为absolute
。pattern
模式与relative
模式相同,只是如果存在比hint
文件要处理的帧多,则在文件最后条目处会返回到起始位置。
relative
模式的 hint
文件前几行的示例
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
需要后面跟一个抽取滤波器,例如过滤器图中的 decimate。
场匹配和抽取的分离主要是受在两者之间插入反交错滤波器回退的可能性所驱动的。如果源具有混合的电视电影和真正的隔行扫描内容,则 fieldmatch
将无法为隔行扫描部分匹配场。但是这些剩余的梳状帧将被标记为隔行扫描,因此可以在抽取之前被稍后的滤波器(例如 yadif)反交错。
除了各种配置选项外,fieldmatch
还可以采用可选的第二个流,通过 ppsrc 选项激活。如果启用,帧重建将基于此第二个流中的场和帧。这允许预处理第一个输入,以帮助过滤器的各种算法,同时保持输出无损(假设场匹配正确)。通常,场感知降噪器或亮度/对比度调整会有所帮助。
请注意,此滤波器使用与 TIVTC/TFM(AviSynth 项目)和 VIVTC/VFM(VapourSynth 项目)相同的算法。后者是 TFM 的轻量克隆,fieldmatch
基于它。虽然语义和用法非常接近,但某些行为和选项名称可能会有所不同。
decimate 滤波器目前仅适用于恒定帧率输入。如果您的输入具有混合的电视电影 (30fps) 和较低帧率(如 24fps)的逐行扫描内容,请使用以下过滤器链生成必要的 cfr 流:dejudder,fps=30000/1001,fieldmatch,decimate
。
该滤波器接受以下选项
- order
指定输入流的假定场序。 可用值如下
- ‘auto’
自动检测奇偶性(使用 FFmpeg 的内部奇偶性值)。
- ‘bff’
假设底场优先。
- ‘tff’
假设顶场优先。
请注意,有时建议不要信任流声明的奇偶性。
默认值为 auto。
- mode
设置要使用的匹配模式或策略。 pc 模式是最安全的,因为它不会在可能的情况下冒着由于重复帧而产生抖动的风险,但是如果存在不良编辑或混合场,它将在实际可能存在良好匹配的情况下最终输出梳状帧。另一方面,pcn_ub 模式在产生抖动方面风险最大,但如果存在好帧,它几乎总是会找到好帧。就冒着抖动和创建重复帧的风险与在具有不良编辑、孤立场、混合场等的部分中查找良好匹配而言,其他值都介于 pc 和 pcn_ub 之间。
有关 p/c/n/u/b 的更多详细信息,请参见 p/c/n/u/b 含义部分。
可用值为
- ‘pc’
双向匹配 (p/c)
- ‘pc_n’
双向匹配,如果仍然是梳状则尝试第三次匹配 (p/c + n)
- ‘pc_u’
双向匹配,如果仍然是梳状则尝试第三次匹配(相同顺序)(p/c + u)
- ‘pc_n_ub’
双向匹配,如果仍然是梳状则尝试第三次匹配,如果仍然是梳状则尝试第四次/第五次匹配 (p/c + n + u/b)
- ‘pcn’
三向匹配 (p/c/n)
- ‘pcn_ub’
3路匹配,如果原始的3路匹配都被检测为梳状(p/c/n + u/b),则尝试进行第4/5路匹配。
末尾的括号表示假设order=tff (且field为auto或top) 时,该模式将使用的匹配项。
在速度方面,pc模式是最快的,而pcn_ub是最慢的。
默认值为pc_n。
- ppsrc
将主输入流标记为预处理输入,并启用辅助输入流作为干净的源,从中选取场。有关更多详细信息,请参见过滤器简介。它类似于VFM/TFM中的clip2功能。
默认值为
0
(禁用)。- field
设置要匹配的场。建议将其设置为与order相同的值,除非您在该设置下遇到匹配失败。在某些情况下,更改用于匹配的场会对匹配性能产生很大影响。可用的值有
- ‘auto’
自动(与order相同的值)。
- ‘bottom’
从底场匹配。
- ‘top’
从顶场匹配。
默认值为 auto。
- mchroma
设置在匹配比较期间是否包含色度。在大多数情况下,建议保持启用状态。仅当您的剪辑有不良的色度问题(例如严重的彩虹效应或其他伪影)时,才应将其设置为
0
。将此设置为0
也可以加快速度,但会牺牲一些准确性。默认值为
1
。- y0
- y1
这些定义了一个排除带,该排除带将y0和y1之间的行排除在场匹配决策之外。可以使用排除带来忽略字幕、徽标或其他可能干扰匹配的事物。y0设置起始扫描线,y1设置结束线;y0和y1之间的所有行(包括y0和y1)都将被忽略。将y0和y1设置为相同的值将禁用该功能。y0和y1默认为
0
。- scthresh
将场景变化检测阈值设置为亮度平面上最大变化的百分比。较好的值在
[8.0, 14.0]
范围内。仅在combmatch=sc的情况下,场景变化检测才相关。scthresh的范围是[0.0, 100.0]
。默认值为
12.0
。- combmatch
当combatch不为none时,
fieldmatch
在决定使用哪个匹配项作为最终匹配项时,将考虑匹配项的梳状得分。可用的值有- ‘none’
不基于梳状分数进行最终匹配。
- ‘sc’
仅在检测到场景变化时才使用梳状分数。
- ‘full’
始终使用梳状分数。
默认值为sc。
- combdbg
强制
fieldmatch
计算某些匹配项的梳状指标并打印出来。此设置在TFM/VFM词汇中称为micout。可用的值有- ‘none’
不进行强制计算。
- ‘pcn’
强制计算p/c/n。
- ‘pcnub’
强制计算p/c/n/u/b。
默认值为none。
- cthresh
这是用于梳状帧检测的区域梳状阈值。它主要控制检测到梳状的“强度”或“可见性”。较大的值意味着梳状必须更可见,而较小的值意味着梳状可以不那么可见或不那么强烈,仍然可以被检测到。有效设置范围为
-1
(每个像素都将被检测为梳状)到255
(没有像素将被检测为梳状)。这基本上是一个像素差值。一个好的范围是[8, 12]
。默认值为
9
。- chroma
设置是否在梳状帧决策中考虑色度。仅当您的源具有色度问题(彩虹效应等)导致启用色度的梳状帧检测出现问题时才禁用此选项。实际上,使用chroma=0通常更可靠,除非源中存在仅限色度的梳状。
默认值为
0
。- blockx
- blocky
分别设置梳状帧检测期间使用的窗口的x轴和y轴大小。这与combpel像素需要在多大的区域中被检测为梳状才能将帧声明为梳状有关。有关更多信息,请参见combpel参数说明。可能的值是从4开始且向上到512的任何2的幂。
默认值为
16
。- combpel
帧上任何blocky乘以blockx大小的块中,被检测为梳状的梳状像素数,该帧才会被检测为梳状。虽然cthresh控制梳状必须“可见”的程度,但此设置控制帧上任何局部区域(由blockx和blocky设置定义的窗口)中必须存在“多少”梳状。最小值是
0
,最大值是blocky x blockx
(此时,永远不会检测到任何帧为梳状)。此设置在TFM/VFM词汇中称为MI。默认值为
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
数字对应于场相关的逐行帧。此处,前两个帧是逐行的,第3和第4帧是梳状的,依此类推。
当fieldmatch
配置为从底场运行匹配(field=bottom)时,此输入流的转换方式如下
Input stream: T 1 2 2 3 4 B 1 2 3 4 4 <-- matching reference Matches: c c n n c Output stream: T 1 2 3 4 4 B 1 2 3 4 4
由于场匹配的结果,我们可以看到某些帧被复制。要执行完整的逆电视电影转换,您需要在此操作后依赖于抽取过滤器。例如,请参见decimate过滤器。
现在,从顶场匹配(field=top)的相同操作如下所示
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.2 u/b
u和b匹配有点特殊,因为它们从相反的奇偶校验标志进行匹配。在以下示例中,我们假设当前正在匹配第二个帧(顶:2,底:2)。根据匹配,在每个匹配场的上方和下方放置一个“x”。
使用底部匹配(field=bottom)
Match: c p n b u x x x x x Top 1 2 2 1 2 2 1 2 2 1 2 2 1 2 2 Bottom 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 x x x x x Output frames: 2 1 2 2 2 2 2 2 1 3
使用顶部匹配(field=top)
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表示底场优先。
默认值为‘tff’。
此变换通过将图像内容向上或向下移动一行,并用适当的图像内容填充剩余行来完成。此方法与大多数广播场序转换器一致。
如果输入视频未标记为隔行扫描,或者已标记为所需的输出场序,则此滤镜不会更改传入的视频。
当转换到或从 PAL DV 素材(它是底场优先)时,这非常有用。
例如
ffmpeg -i in.vob -vf "fieldorder=bff" out.dv
39.96 fillborders
填充输入视频的边框,而不更改视频流的尺寸。有时视频的四个边缘可能有垃圾数据,您可能不想裁剪视频输入以保持大小是某个数字的倍数。
此过滤器接受以下选项
- 左
从左边框填充的像素数。
- 右
从右边框填充的像素数。
- 上
从上边框填充的像素数。
- 下
从下边框填充的像素数。
- mode
设置填充模式。
它接受以下值
- ‘smear’
使用最外侧的像素填充像素
- ‘mirror’
使用镜像(半样本对称)填充像素
- ‘fixed’
使用常量值填充像素
- ‘reflect’
使用反射(全样本对称)填充像素
- ‘wrap’
使用环绕填充像素
- ‘fade’
将像素淡化为常量值
- ‘margins’
用边框附近像素的加权平均值填充顶部和底部的像素
默认值为 smear。
- 颜色
设置固定或淡化模式下像素的颜色。默认值为 black。
39.96.1 命令
此滤镜支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.97 find_rect
在输入视频中查找矩形对象。
要搜索的对象必须指定为使用 object 选项指定的 gray8 图像。
对于每个可能的匹配项,都会计算一个分数。如果分数达到指定的阈值,则认为已找到该对象。
如果输入视频包含对象的多个实例,则过滤器将仅找到其中一个。
找到对象后,会在匹配帧中设置以下元数据条目
- lavfi.rect.w
对象的宽度
- lavfi.rect.h
对象的高度
- lavfi.rect.x
对象的 x 位置
- lavfi.rect.y
对象的 y 位置
- lavfi.rect.score
找到的对象的匹配分数
它接受以下选项
- object
对象图像的文件路径,需要是 gray8 格式。
- threshold
检测阈值,表示为 0-1 范围内的十进制数。
阈值为 0.01 表示仅精确匹配,阈值为 0.99 表示几乎所有内容都匹配。
默认值为 0.5。
- mipmaps
mipmap 的数量,默认值为 3。
- xmin, ymin, xmax, ymax
指定要搜索的矩形。
- discard
丢弃未检测到对象的帧。默认情况下禁用。
39.97.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.98 floodfill
用相同像素分量的值填充区域,使其具有其他值。
它接受以下选项
- x
设置像素 x 坐标。
- y
设置像素 y 坐标。
- s0
设置源 #0 分量的值。
- s1
设置源 #1 分量的值。
- s2
设置源 #2 分量的值。
- s3
设置源 #3 分量的值。
- d0
设置目标 #0 分量的值。
- d1
设置目标 #1 分量的值。
- d2
设置目标 #2 分量的值。
- d3
设置目标 #3 分量的值。
39.99 format
将输入视频转换为指定的像素格式之一。Libavfilter 将尝试选择一个适合作为下一个过滤器的输入的格式。
它接受以下参数
- pix_fmts
像素格式名称的“|”分隔列表,例如“pix_fmts=yuv420p|monow|rgb24”。
- color_spaces
颜色空间名称的“|”分隔列表,例如“color_spaces=bt709|bt470bg|bt2020nc”。
- color_ranges
颜色范围名称的“|”分隔列表,例如“color_spaces=tv|pc”。
39.99.1 示例
- 将输入视频转换为 yuv420p 格式
format=pix_fmts=yuv420p
将输入视频转换为列表中的任何格式
format=pix_fmts=yuv420p|yuv444p|yuv410p
39.100 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.100.1 示例
- 为了将 fps 设置为 25 的典型用法
fps=fps=25
- 使用缩写和舍入方法将 fps 设置为 24,四舍五入到最近
fps=fps=film:round=near
39.101 framepack
将两个不同的视频流打包成一个立体视频,并在支持的编解码器上设置正确的元数据。这两个视图应具有相同的大小和帧速率,并且当较短的视频结束时,处理将停止。请注意,您可以使用 scale 和 fps 过滤器方便地调整视图属性。
它接受以下参数
- format
所需的打包格式。支持的值包括
- sbs
视图彼此相邻(默认)。
- tab
视图彼此上下排列。
- lines
视图按行打包。
- columns
视图按列打包。
- frameseq
视图在时间上交错。
一些示例
# Convert left and right views into a frame-sequential video ffmpeg -i LEFT -i RIGHT -filter_complex framepack=frameseq OUTPUT # Convert views into a side-by-side video with the same output resolution as the input ffmpeg -i LEFT -i RIGHT -filter_complex [0:v]scale=w=iw/2[left],[1:v]scale=w=iw/2[right],[left][right]framepack=sbs OUTPUT
39.102 framerate
通过从源帧插值新的视频输出帧来更改帧速率。
此过滤器并非旨在与隔行扫描媒体正确配合使用。如果您希望更改隔行扫描媒体的帧速率,则需要在使用此过滤器之前进行去隔行扫描,并在使用此过滤器之后重新进行隔行扫描。
以下是对接受选项的描述。
- fps
指定每秒输出帧数。此选项也可以单独指定为一个值。默认值为
50
。- interp_start
指定输出帧将创建为两个帧的线性插值的范围的开始。范围为 [
0
-255
],默认值为15
。- interp_end
指定输出帧将创建为两个帧的线性插值的范围的结束。范围为 [
0
-255
],默认值为240
。- scene
指定场景切换的检测级别,取值范围为 0 到 100,用于指示新场景;较低的值表示当前帧引入新场景的可能性较低,而较高的值表示当前帧更可能是一个新场景。默认值为
8.2
。- flags
指定影响滤镜过程的标志。
flags 的可用值为:
- scene_change_detect, scd
使用选项 scene 的值启用场景切换检测。默认情况下启用此标志。
39.103 framestep
每 N 帧选择一帧。
此滤镜接受以下选项:
- step
每
step
帧后选择一帧。允许的值是大于 0 的正整数。默认值为1
。
39.104 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.105 freezeframes
冻结视频帧。
此滤镜使用第二个输入的帧来冻结视频帧。
该滤波器接受以下选项
- 第一个
设置开始冻结的第一个帧的编号。
- last
设置结束冻结的最后一个帧的编号。
- 替换
设置第二个输入中将用于替换帧的帧的编号。
39.106 frei0r
将 frei0r 效果应用于输入视频。
要启用此滤镜的编译,您需要安装 frei0r 头文件,并使用 --enable-frei0r
配置 FFmpeg。
它接受以下参数
- filter_name
要加载的 frei0r 效果的名称。如果定义了环境变量
FREI0R_PATH
,则会在FREI0R_PATH
中由冒号分隔的列表中指定的每个目录中搜索 frei0r 效果。否则,将按以下顺序搜索标准 frei0r 路径:HOME/.frei0r-1/lib/、/usr/local/lib/frei0r-1/、/usr/lib/frei0r-1/。- filter_params
传递给 frei0r 效果的参数,以“|”分隔的列表。
frei0r 效果参数可以是布尔值(其值为 "y" 或 "n")、双精度浮点数、颜色(指定为 R/G/B,其中 R、G 和 B 是 0.0 到 1.0 之间的浮点数,包括 0.0 和 1.0)或 ffmpeg-utils 手册中“Color”部分指定的颜色描述、位置(指定为 X/Y,其中 X 和 Y 是浮点数)和/或字符串。
参数的数量和类型取决于加载的效果。如果未指定效果参数,则会设置默认值。
39.106.1 示例
- 应用 distort0r 效果,设置前两个双精度浮点数参数
frei0r=filter_name=distort0r:filter_params=0.5|0.01
- 应用 colordistance 效果,将颜色作为第一个参数
frei0r=colordistance:0.2/0.3/0.4 frei0r=colordistance:violet frei0r=colordistance:0x112233
- 应用 perspective 效果,指定左上角和右上角的图像位置
frei0r=perspective:0.2/0.2|0.8/0.2
有关更多信息,请参阅 http://frei0r.dyne.org
39.106.2 命令
此滤镜支持 filter_params 选项作为 命令。
39.107 fspp
应用快速简单的后处理。它是 spp 的更快版本。
它将 (I)DCT 分解为水平/垂直通道。与简单的后处理滤镜不同,其中一个通道每个块执行一次,而不是每个像素执行一次。这允许更高的速度。
该滤波器接受以下选项
- quality
设置质量。此选项定义平均级别的数量。它接受 4-5 范围内的整数。默认值为
4
。- qp
强制一个恒定的量化参数。它接受 0-63 范围内的整数。如果未设置,则滤镜将使用视频流中的 QP(如果可用)。
- 强度
设置滤镜强度。它接受 -15 到 32 范围内的整数。较低的值意味着更多的细节,但也意味着更多的伪影,而较高的值会使图像更平滑,但也更模糊。默认值为
0
- PSNR 最佳。- use_bframe_qp
如果设置为
1
,则启用使用 B 帧的 QP。使用此选项可能会导致闪烁,因为 B 帧通常具有更大的 QP。默认值为0
(未启用)。
39.108 fsync
将视频帧与来自文件的外部映射同步。
对于映射文件中给出的每个输入 PTS,它会删除或创建尽可能多的帧,以重新创建映射文件中给出的输出帧序列。
此滤镜对于重新创建 fps 滤镜的帧率转换的输出帧非常有用,这些输出帧使用 ffmpeg 选项 -stats_mux_pre
记录到映射文件中,并对相应的帧进行进一步处理,例如质量比较。
映射文件的每一行必须包含每个输入帧的三个项目:输入 PTS(十进制)、输出 PTS(十进制)和输出 TIMEBASE(十进制/十进制),以空格分隔。此文件格式与 -stats_mux_pre_fmt="{ptsi} {pts} {tb}"
的输出相对应。
滤镜假定映射文件按递增的输入 PTS 排序。
该滤波器接受以下选项
- 文件,f
要使用的映射文件的文件名。
示例
# Convert a video to 25 fps and record a MAP_FILE file with the default format of this filter ffmpeg -i INPUT -vf fps=fps=25 -stats_mux_pre MAP_FILE -stats_mux_pre_fmt "{ptsi} {pts} {tb}" OUTPUT # Sort MAP_FILE by increasing input PTS sort -n MAP_FILE # Use INPUT, OUTPUT and the MAP_FILE from above to compare the corresponding frames in INPUT and OUTPUT via SSIM ffmpeg -i INPUT -i OUTPUT -filter_complex '[0:v]fsync=file=MAP_FILE[ref];[1:v][ref]ssim' -f null -
39.109 gblur
应用高斯模糊滤镜。
该滤波器接受以下选项
- sigma
设置水平 sigma,即高斯模糊的标准偏差。默认值为
0.5
。- steps
设置高斯近似的步数。默认值为
1
。- planes
设置要过滤的平面。默认情况下,会过滤所有平面。
- sigmaV
设置垂直 sigma,如果为负数,则与
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_expr 或 cr_expr 选项之一,则滤镜会自动选择 YCbCr 颜色空间。如果指定了 red_expr、green_expr 或 blue_expr 选项之一,则它将选择 RGB 颜色空间。
如果未定义色度表达式之一,则会回退到另一个。如果没有指定 alpha 表达式,它将计算为不透明值。如果没有指定色度表达式,它们将计算为亮度表达式。
表达式可以使用以下变量和函数
- N
已过滤帧的序列号,从
0
开始。- X
- Y
当前样本的坐标。
- W
- H
图像的宽度和高度。
- SW
- SH
宽度和高度缩放取决于当前筛选的平面。它是相应亮度平面像素数与当前平面像素数之间的比率。例如,对于YUV4:2:0,亮度平面的值为
1,1
,色度平面的值为0.5,0.5
。- T
当前帧的时间,以秒为单位表示。
- p(x, y)
返回当前平面位置(x,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)'
- 创建一个与输入大小相同的径向渐变(另请参阅 vignette 滤镜)
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 位颜色深度而有时在接近平坦的区域中引入的条带伪影。插值应该出现在条带位置的渐变,并对其进行抖动。
它仅设计用于播放。请勿在有损压缩之前使用它,因为压缩往往会丢失抖动并带回条带。
它接受以下参数
- 强度
滤镜将更改任何一个像素的最大幅度。这也是检测接近平坦区域的阈值。可接受的值范围为 .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。
- ‘pts_delta’
显示当前帧与上一帧之间的 pts 差值。
- ‘time’
显示当前已筛选的帧时间。
- ‘time_delta’
显示当前帧与上一帧之间的时间差。
- ‘timebase’
显示滤镜链接的时间基准。
- ‘format’
显示滤镜链接使用的格式。
- “size”
显示滤镜链接使用的视频大小或音频通道数(如果使用音频)。
- ‘rate’
显示滤镜链接使用的视频帧速率或音频采样率。
- ‘eof’
显示链接输出状态。
- ‘sample_count_in’
显示从滤镜获取的样本数。
- ‘sample_count_out’
显示从滤镜输出的样本数。
- ‘sample_count_delta’
显示上述两个值之间的样本数差值。
- ‘disabled’
显示时间线滤镜状态。
- 速率,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
用于计算闵可夫斯基距离的闵可夫斯基参数。必须在 [0,20] 范围内选择,默认值为 1。设置为 0 以获取最大值而不是计算闵可夫斯基距离。
- 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
。- 子采样
为
fast
模式设置子采样率。范围为 2 到 64。默认值为 4。在basic
模式下不会发生子采样。- 引导
设置引导模式。可以是
off
或on
。默认值为off
。如果为off
,则需要单个输入。如果为on
,则需要两个具有相同分辨率和像素格式的输入。第二个输入用作引导。- planes
设置要过滤的平面。默认值仅为第一个。
39.115.1 命令
此滤波器支持上述所有选项作为命令。
39.115.2 示例
- 使用导向滤波进行保边平滑
ffmpeg -i in.png -vf guided out.png
- 使用导向滤波进行去雾、结构转移滤波、细节增强。有关引导图像的生成,请参阅论文“导向图像滤波”。请参阅:http://kaiminghe.com/publications/pami12guidedfilter.pdf。
ffmpeg -i in.png -i guidance.png -filter_complex guided=guidance=on out.png
39.116 haldclut
将 Hald CLUT 应用于视频流。
第一个输入是要处理的视频流,第二个输入是 Hald CLUT。Hald CLUT 输入可以是简单的图片或完整的视频流。
该滤波器接受以下选项
- clut
设置将从第二个输入流处理哪些 CLUT 视频帧,可以是 first 或 all。默认值为 all。
- shortest
当最短的输入终止时强制终止。默认值为
0
。- repeatlast
在流结束后继续应用最后一个 CLUT。值为
0
将在到达 CLUT 的最后一帧后禁用滤波器。默认值为1
。
haldclut
还具有与 lut3d 相同的插值选项(两个滤波器共享相同的内部结构)。
此滤镜还支持 framesync 选项。
有关 Hald CLUT 的更多信息,可以在 Eskil Steenberg 的网站(Hald CLUT 作者)上找到:http://www.quelsolaar.com/technology/clut.html。
39.116.1 命令
此滤波器支持 命令中的 interp
选项。
39.116.2 工作流程示例
39.116.2.1 Hald CLUT 视频流
生成一个具有各种效果的身份 Hald CLUT 流
ffmpeg -f lavfi -i haldclutsrc=8 -vf "hue=H=2*PI*t:s=sin(2*PI*t)+1, curves=cross_process" -t 10 -c:v ffv1 clut.nut
注意:请确保使用无损编解码器。
然后将其与 haldclut
一起使用,以将其应用于一些随机流
ffmpeg -f lavfi -i mandelbrot -i clut.nut -filter_complex '[0][1] haldclut' -t 20 mandelclut.mkv
Hald CLUT 将应用于前 10 秒(clut.nut 的持续时间),然后该 CLUT 流的最新图片将应用于 mandelbrot
流的剩余帧。
39.116.2.2 带有预览的 Hald CLUT
Hald CLUT 应该是 Level*Level*Level
乘以 Level*Level*Level
像素的正方形图像。对于给定的 Hald CLUT,FFmpeg 将选择从图片左上角开始的最大可能正方形。剩余的填充像素(底部或右侧)将被忽略。此区域可用于添加 Hald CLUT 的预览。
通常,以下生成的 Hald CLUT 将受 haldclut
滤波器的支持
ffmpeg -f lavfi -i haldclutsrc=8 -vf " pad=iw+320 [padded_clut]; smptebars=s=320x256, split [a][b]; [padded_clut][a] overlay=W-320:h, curves=color_negative [main]; [main][b] overlay=W-320" -frames:v 1 clut.png
它包含原始图像和 CLUT 效果的预览:SMPTE 彩条显示在右上方,下方是经过颜色更改处理的相同彩条。
然后,可以使用以下方式可视化此 Hald CLUT 的效果
ffplay input.mkv -vf "movie=clut.png, [in] haldclut"
39.117 hflip
水平翻转输入视频。
例如,使用 ffmpeg
水平翻转输入视频
ffmpeg -i in.avi -vf "hflip" out.avi
39.118 histeq
此滤波器在逐帧的基础上应用全局颜色直方图均衡。
它可以用于校正具有压缩像素强度范围的视频。滤波器重新分配像素强度,以均衡它们在整个强度范围内的分布。它可以被视为“自动调整对比度滤波器”。此滤波器仅对于校正降级或捕获不良的源视频有用。
该滤波器接受以下选项
- 强度
确定要应用的均衡量。随着强度的降低,像素强度的分布越来越接近输入帧的分布。该值必须是 [0,1] 范围内的浮点数,默认值为 0.200。
- 强度
设置可以生成的最大强度,并适当地缩放输出值。应根据需要设置强度,然后可以限制强度(如果需要),以避免冲刷效果。该值必须是 [0,1] 范围内的浮点数,默认值为 0.210。
- 抗条带
设置抗条带级别。如果启用,滤波器将随机地稍微改变输出像素的亮度,以避免直方图出现条带。可能的值为
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
将硬件帧下载到系统内存。
输入必须是硬件帧,输出是非硬件格式。并非所有格式都支持输出 - 可能需要在图中紧接着插入一个额外的 format 滤镜,以获得支持的输出格式。
39.122 hwmap
将硬件帧映射到系统内存或其他设备。
此滤镜有几种不同的操作模式;具体使用哪种模式取决于输入和输出格式。
- 硬件帧输入,普通帧输出
将输入帧映射到系统内存并传递给输出。如果稍后需要原始硬件帧(例如,在将其他内容叠加到其一部分之后),则可以在下一个模式中再次使用 hwmap 滤镜来检索它。
- 普通帧输入,硬件帧输出
如果输入实际上是软件映射的硬件帧,则将其取消映射 - 即,返回原始硬件帧。
否则,必须提供一个设备。在该设备上创建新的硬件表面用于输出,然后将其映射回输入的软件格式,并将这些帧提供给前面的滤镜。这将像 hwupload 滤镜一样工作,但是当输入已经是兼容格式时,可能会避免额外的复制。
- 硬件帧输入和输出
必须为输出提供一个设备,可以直接提供,也可以使用 derive_device 选项。输入和输出设备必须是不同类型且兼容的 - 其确切含义取决于系统,但通常意味着它们必须引用相同的底层硬件上下文(例如,引用同一张显卡)。
如果输入帧最初是在输出设备上创建的,则取消映射以检索原始帧。
否则,将帧映射到输出设备 - 在输出上创建与输入帧对应的新硬件帧。
接受以下附加参数
- mode
设置帧映射模式。以下选项的某种组合:
- read
映射的帧应该是可读的。
- write
write
- 映射的帧应该是可写的。
overwrite
映射将始终覆盖整个帧。
- 这可能在某些情况下提高性能,因为不需要加载帧的原始内容。
direct
映射不得涉及任何复制。
在某些情况下,如果直接映射不可能或会产生意外属性,则会创建到帧副本的间接映射。设置此标志可确保映射是直接的,如果不可能,则会失败。
- 如果未指定,则默认为 read+write。
derive_device type
- 不是使用初始化时提供的设备,而是从输入帧所在的设备派生一个类型为 type 的新设备。
reverse
在硬件到硬件的映射中,反向映射 - 在接收器中创建帧并将其映射回源。在某些情况下,如果需要单向映射,但使用的设备仅支持反向映射,则可能需要这样做。
39.123 hwupload
此选项很危险 - 如果该滤镜的输出有任何其他约束,则可能会以未定义的方式破坏前面的滤镜。请在完全理解其使用含义的情况下使用它。
将系统内存帧上传到硬件表面。
接受以下附加参数
- 如果未指定,则默认为 read+write。
derive_device type
39.124 hwupload_cuda
初始化滤镜时必须提供要上传到的设备。如果使用 ffmpeg,请使用 -filter_hw_device 选项或 derive_device 选项选择合适的设备。输入和输出设备必须是不同类型且兼容的 - 其确切含义取决于系统,但通常意味着它们必须引用相同的底层硬件上下文(例如,引用同一张显卡)。
它接受以下可选参数
- device
将系统内存帧上传到 CUDA 设备。
39.125 hqx
要使用的 CUDA 设备的编号
它接受以下选项
- n
应用为像素艺术设计的高质量放大滤镜。此滤镜最初由 Maxim Stepin 创建。
39.126 hstack
设置缩放维度:2
表示 hq2x
,3
表示 hq3x
,4
表示 hq4x
。默认为 3
。
水平堆叠输入视频。
所有流必须具有相同的像素格式和相同的高度。
该滤波器接受以下选项
39.127 hsvhold
设置输入流的数量。默认为 2。
将特定的 HSV 范围转换为灰度值。
该滤波器接受以下选项
- hue
此滤镜测量选项中设置的 HSV 颜色与视频流中测量的颜色之间的色差。根据选项,输出颜色可以更改为灰色或不更改。
- 设置将在颜色差异计算中使用的色调值。允许范围为 -360 到 360。默认值为 0。
sat
- 设置将在颜色差异计算中使用的饱和度值。允许范围为 -1 到 1。默认值为 0。
val
- 相似度
设置将在颜色差异计算中使用的亮度值。允许范围为 -1 到 1。默认值为 0。
设置与关键颜色的相似百分比。允许范围为 0 到 1。默认值为 0.01。
- 混合 (blend)
0.00001 仅匹配精确的关键颜色,而 1.0 匹配所有内容。
混合百分比。允许范围为 0 到 1。默认值为 0。
0.0 使像素完全为灰色,或完全不为灰色。
39.128 hsvkey
更高的值会导致更多的灰色像素,像素的颜色与关键颜色越相似,灰色像素越高。
将特定的 HSV 范围转换为透明度。
该滤波器接受以下选项
- hue
此滤镜测量选项中设置的 HSV 颜色与视频流中测量的颜色之间的色差。根据选项,输出颜色可以更改为灰色或不更改。
- 设置将在颜色差异计算中使用的色调值。允许范围为 -360 到 360。默认值为 0。
sat
- 设置将在颜色差异计算中使用的饱和度值。允许范围为 -1 到 1。默认值为 0。
val
- 相似度
设置将在颜色差异计算中使用的亮度值。允许范围为 -1 到 1。默认值为 0。
设置与关键颜色的相似百分比。允许范围为 0 到 1。默认值为 0.01。
- 混合 (blend)
0.00001 仅匹配精确的关键颜色,而 1.0 匹配所有内容。
0.0 使像素要么完全透明,要么根本不透明。
较高的值会导致半透明像素,像素颜色与键颜色越相似,透明度越高。
39.129 hue
此滤镜测量选项中设置的 HSV 颜色与视频流中测量的颜色之间的色差。根据选项,可以通过添加 alpha 通道将输出颜色更改为透明。
它接受以下参数
- h
修改输入的色调和/或饱和度。
- s
将色调角度指定为度数。它接受表达式,默认值为“0”。
- H
在 [-10,10] 范围内指定饱和度。它接受表达式,默认值为“1”。
- b
将色调角度指定为弧度数。它接受表达式,默认值为“0”。
在 [-10,10] 范围内指定亮度。它接受表达式,默认值为“0”。
h 和 H 是互斥的,不能同时指定。
- n
输入帧的帧计数,从 0 开始
- pts
b、h、H 和 s 选项值是包含以下常量的表达式
- r
输入视频的帧率,如果输入帧率未知则为 NAN
- t
时间戳,以秒为单位表示,如果输入时间戳未知,则为 NAN
- tb
以时间基准单位表示的输入帧的演示时间戳
39.129.1 示例
- 输入视频的时间基准
hue=h=90:s=1
- 将色调设置为 90 度,将饱和度设置为 1.0
hue=H=PI/2:s=1
- 相同的命令,但以弧度表示色调
hue="H=2*PI*t: s=sin(2*PI*t)+1"
- 旋转色调并使饱和度在 1 秒的时间内在 0 和 2 之间摆动
hue="s=min(t/3\,1)"
应用从 0 开始的 3 秒饱和度淡入效果
hue="s=min(0\, max((t-START)/DURATION\, 1))"
- 通用的淡入表达式可以写成
hue="s=max(0\, min(1\, (8-t)/3))"
应用从 5 秒开始的 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。
- 强度
设置强度偏移量。默认值为 0。允许的范围是 -1 到 1。
- 颜色
设置要调整的原色和互补色。此选项通过提供一个或多个值来设置。可以一次选择多种颜色。默认情况下,选择所有颜色。
- ‘r’
调整红色。
- ‘y’
调整黄色。
- ‘g’
调整绿色。
- ‘c’
调整青色。
- ‘b’
调整蓝色。
- ‘m’
调整洋红色。
- ‘a’
调整所有颜色。
- 强度
设置滤波强度。允许的范围是 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
滤镜还支持 framesync 选项。
39.132 iccdetect
从嵌入的 ICC 配置文件(如果存在)检测颜色空间,并相应地更新帧的标签。
此过滤器接受以下选项
- 强制
如果为 true,帧的现有颜色空间标签将始终被从 ICC 配置文件检测到的值覆盖。否则,仅当它们包含
unknown
时才会分配这些标签。默认情况下启用。
39.133 iccgen
生成 ICC 配置文件并将其附加到帧。
此过滤器接受以下选项
- color_primaries
- color_trc
配置将为其生成 ICC 配置文件的颜色空间。
auto
的默认值从输入帧的元数据推断值,并在适当情况下默认为 BT.709/sRGB。请参阅 setparams 滤镜,了解可能值的列表,但请注意,
unknown
不是此滤镜的有效值。- 强制
如果为 true,即使它将覆盖已存在的 ICC 配置文件,也会生成 ICC 配置文件。默认情况下禁用。
39.134 identity
获取两个输入视频之间的同一性得分。
此滤镜需要两个输入视频。
为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。此外,它还假设两个输入具有相同数量的帧,这些帧会逐个进行比较。
通过日志系统打印获得的每个分量、平均值、最小值和最大值的同一性得分。
该滤镜将每个帧的计算出的同一性得分存储在帧元数据中。
此滤镜还支持 framesync 选项。
在下面的示例中,正在处理的输入文件 main.mpg 与参考文件 ref.mpg 进行比较。
ffmpeg -i main.mpg -i ref.mpg -lavfi identity -f null -
39.135 idet
检测视频隔行扫描类型。
此滤镜尝试检测输入帧是隔行扫描、逐行扫描、顶场优先还是底场优先。它还将尝试检测相邻帧之间重复的场(电视电影的标志)。
单帧检测在对每个帧进行分类时仅考虑紧邻的帧。多帧检测结合了先前帧的分类历史。
该滤镜将记录以下元数据值
- single.current_frame
使用单帧检测检测到的当前帧的类型。选项之一:“tff”(顶场优先)、“bff”(底场优先)、“progressive”或“undetermined”
- single.tff
使用单帧检测检测为顶场优先的帧的累积数量。
- multiple.tff
使用多帧检测检测为顶场优先的帧的累积数量。
- single.bff
使用单帧检测检测为底场优先的帧的累积数量。
- multiple.current_frame
使用多帧检测检测到的当前帧的类型。选项之一:“tff”(顶场优先)、“bff”(底场优先)、“progressive”或“undetermined”
- multiple.bff
使用多帧检测检测为底场优先的帧的累积数量。
- single.progressive
使用单帧检测检测为逐行扫描的帧的累积数量。
- multiple.progressive
使用多帧检测检测为逐行扫描的帧的累积数量。
- single.undetermined
使用单帧检测无法分类的帧的累积数量。
- multiple.undetermined
使用多帧检测无法分类的帧的累积数量。
- repeated.current_frame
当前帧中哪个场是从最后一个场重复的。选项之一:“neither”、“top”或“bottom”。
- 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.135.1 示例
详细检查视频中前 360 帧的场序
ffmpeg -i INPUT -filter:v idet,metadata=mode=print -frames:v 360 -an -f null -
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
垂直低通滤波器,以避免推文隔行扫描并减少波纹图案。
- ‘0, 关闭’
禁用垂直低通滤波器
- ‘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
缓慢更新较暗的像素。
此滤镜使短暂的闪光看起来更长。此滤镜接受以下选项
- 衰减
设置衰减因子。默认为 0.95。允许的范围是 0 到 1。
- planes
设置要过滤的平面。默认值是全部。允许范围为 0 到 15。
39.141.1 命令
此滤波器支持上述所有选项作为命令。
39.142 lenscorrection
校正径向镜头失真
此滤镜可用于校正广角镜头使用可能导致的径向失真,从而重新校正图像。要找到正确的参数,可以使用例如 opencv 中的工具,或者简单地进行试错。要使用 opencv,请使用 opencv 源代码中的校准示例(在 samples/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
选项中的一个或两个。该滤镜会将完整列表以 INFO
级别发送到日志。第一列是制造商,第二列是型号。要获取可用镜头的列表,请为制造商和型号设置任何值,并省略 lens_model
选项。该滤镜会将镜头完整列表以 INFO
级别发送到日志。ffmpeg 工具将在打印列表后退出。
该滤波器接受以下选项
- make
相机的制造商(例如,“Canon”)。此选项为必填项。
- 模型
相机的型号(例如,“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 表示不进行额外的缩放。较低的值可能会使更多校正后的图像可见,而较高的值可能会避免输出中出现未映射的区域。
- 目标几何形状
输出图像/视频的目标几何形状。以下值是有效选项
- ‘rectilinear (默认)’ (直线)
- ‘fisheye’ (鱼眼)
- ‘panoramic’ (全景)
- ‘equirectangular’ (等距柱状投影)
- ‘fisheye_orthographic’ (鱼眼正交投影)
- ‘fisheye_stereographic’ (鱼眼立体投影)
- ‘fisheye_equisolid’ (鱼眼等立体角投影)
- ‘fisheye_thoby’ (鱼眼 Thoby 投影)
- 不是使用初始化时提供的设备,而是从输入帧所在的设备派生一个类型为 type 的新设备。
应用图像校正的反向操作(不是校正失真,而是应用失真)。
- interpolation
校正失真时使用的插值类型。以下值是有效选项
- ‘nearest’ (最近邻)
- ‘linear (默认)’ (线性)
- ‘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 lcevc
基于 liblcevc_dec 的低复杂度增强视频编解码器滤镜 (https://github.com/v-novaltd/LCEVCdec)。
39.145 libplacebo
基于 libplacebo 的灵活 GPU 加速处理滤镜 (https://code.videolan.org/videolan/libplacebo)。
39.145.1 选项
此滤镜的选项分为以下几个部分
39.145.1.1 输出模式
这些选项控制整体输出模式。默认情况下,libplacebo 会尽力保留源色彩和大小,但会应用源帧中存在的任何嵌入的胶片颗粒、杜比视界元数据或变形 SAR。
- 输入
设置输入数量。可以与 `idx` 变量一起使用,以允许在输出帧内放置/混合多个输入。这有效地启用了类似于 hstack, overlay 等的功能。
- w
- h
设置输出视频尺寸表达式。默认值是 `iw` 和 `ih`。
允许与 scale 滤镜相同的表达式。
- crop_x
- crop_y
设置输入裁剪 x/y 表达式,默认值是 `(iw-cw)/2` 和 `(ih-ch)/2`。
- crop_w
- crop_h
设置输入裁剪宽度/高度表达式,默认值是 `iw` 和 `ih`。
- pos_x
- pos_y
设置输出放置 x/y 表达式,默认值是 `(ow-pw)/2` 和 `(oh-ph)/2`。
- pos_w
- pos_h
设置输出放置宽度/高度表达式,默认值是 `ow` 和 `oh`。
- fps
设置输出帧速率。这可以是合理的,例如 `60000/1001`。如果设置为特殊字符串 `none`(默认值),则输入时间戳将保持不变地传递到输出。否则,将根据 `frame_mixer` 选项确定的方式,对输入视频帧进行插值,以将视频缩放到指定的目标帧速率。
- format
设置输出格式覆盖。如果未设置(默认),则帧将以与各自输入帧相同的格式输出。否则,将执行格式转换。
- force_original_aspect_ratio
- force_divisible_by
与相同的 scale 滤镜选项工作方式相同。
- normalize_sar
如果启用,输出帧将始终具有 1:1 的像素宽高比。这将根据需要引入额外的填充/裁剪。如果禁用(默认),任何宽高比不匹配(包括来自例如变形视频源的宽高比不匹配)都将转发到输出像素宽高比。
- pad_crop_ratio
指定当输入宽高比与输出宽高比不匹配且 `normalize_sar` 生效时,填充和裁剪之间的比率(介于 `0.0` 和 `1.0` 之间)。默认值 `0.0` 始终用黑色边框填充内容,而值 `1.0` 始终裁剪掉部分内容。中间值是可能的,从而导致两种方法的混合。
- fillcolor
设置用于填充未被输出图像覆盖的输出区域的颜色,例如,由于 `normalize_sar` 的结果。有关此选项的常规语法,请查看 (ffmpeg-utils) 手册中的"Color" 部分。默认为 `black`。
- corner_rounding
渲染具有圆角的帧。该值以浮点数形式给出,范围从 `0.0` 到 `1.0`,表示圆角的相对程度,从完全方形到完全圆形。换句话说,它给出了半径除以较小边长的一半。默认为 `0.0`。
- extra_opts
传递额外的 libplacebo 内部配置选项。这些选项可以指定为以 ’:’ 分隔的 key=value 对列表。以下示例说明如何配置自定义滤镜内核 (“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
如果源帧中存在杜比视界 RPU 元数据,则应用杜比视界 RPU 元数据,并将其从输出中去除。默认情况下启用。请注意,杜比视界将始终输出 BT.2020+PQ,从而覆盖通常的输入帧元数据。这些也将被选为相应帧输出选项的 `auto` 值。
除了 scale 滤镜文档中记录的表达式常量之外,`crop_w`,`crop_h`,`crop_x`,`crop_y`,`pos_w`,`pos_h`,`pos_x` 和 `pos_y` 选项还可以包含以下常量
- in_idx, idx
当前活动输入流的(从 0 开始的)数字索引。
- crop_w, cw
- crop_h, ch
计算出的 `crop_w` 和 `crop_h` 的值。
- pos_w, pw
- pos_h, ph
计算出的 `pos_w` 和 `pos_h` 的值。
- in_t, t
输入帧时间戳,以秒为单位。如果输入时间戳未知,则为 NAN。
- out_t, ot
输入帧时间戳,以秒为单位。如果输入时间戳未知,则为 NAN。
- n
输入帧编号,从 0 开始。
39.145.1.2 缩放
本节中的选项控制 libplacebo 如何执行放大和(如果必要)缩小。请注意,libplacebo 将始终在内部以 4:4:4 内容运行,因此任何子采样的色度格式(例如 `yuv420p`)都必须作为渲染过程的一部分进行上采样和下采样。这意味着即使源分辨率和目标分辨率相同,缩放也可能有效。
- upscaler
- downscaler
配置用于放大和缩小的滤镜内核。相应的默认值是 `spline36` 和 `mitchell`。有关可能值的完整列表,请将 `help` 传递给这些选项。最重要的值是
- ‘none’
强制使用内置 GPU 纹理采样(通常为双线性)。速度极快,但质量较差,尤其是在缩小比例时。
- ‘bilinear’
双线性插值。通常可以在 GPU 上免费完成,除非这样做会导致混叠。速度快,质量低。
- ‘nearest’ (最近邻)
最近邻插值。锐利但高度混叠。
- ‘oversample’ (过采样)
算法在视觉上类似于最近邻插值,但试图保持像素宽高比。适用于像素艺术,因为它能最大程度地减少艺术外观的失真。
- ‘lanczos’
标准 sinc-sinc 插值内核。
- ‘spline36’
lanczos 的三次样条近似。性能上没有差异,但振铃效应略小。
- ‘ewa_lanczos’
基于 jinc-sinc 内核的 lanczos 的椭圆加权平均版本。通常也被简称为“Jinc 缩放”。速度较慢,但质量非常高。
- ‘gaussian’
高斯内核。具有某些理想的数学特性,但主观上非常模糊。
- ‘mitchell’
Mitchell 和 Netravali 推荐的参数的立方 BC 样条。振铃效应非常小。
- frame_mixer
控制用于时间混合帧的内核。默认值为
none
,禁用帧混合。要获取所有可能值的完整列表,请将help
传递给此选项。最重要的值是- ‘none’
禁用帧混合,产生与“最近邻”语义等效的结果。
- ‘oversample’ (过采样)
对输入视频进行过采样,以创建“平滑运动”类型效果:如果输出帧正好落在两个视频帧之间的过渡处,则会根据相对重叠进行混合。如果希望保留原始主观外观,则建议使用此选项。
- ‘mitchell_clamp’
更大的滤波器内核,可以平滑地插值多个帧,其设计目的是尽可能消除振铃和其他伪影。在需要最大视觉平滑度的任何地方,都建议使用此选项。
- ‘linear’
帧之间的线性混合/淡入淡出。特别适用于构建例如幻灯片。
- lut_entries
配置缩放器 LUT 的大小,范围从
1
到256
。默认值0
将选择 libplacebo 的内部默认值,通常为64
。- antiringing
启用抗振铃(对于非 EWA 滤波器)。值(介于
0.0
和1.0
之间)配置抗振铃算法的强度。如果设置得太高,可能会增加混叠。默认情况下禁用。- sigmoid
在放大过程中启用 Sigmoid 压缩。稍微减少振铃。默认情况下启用。
39.145.1.3 去带
Libplacebo 带有内置的去带状滤波器,可以很好地抵消许多常见的带状和块状伪影。只要需要高质量,强烈建议启用此功能。
- deband
启用(快速)去带状算法。默认情况下禁用。
- deband_iterations
去带状算法的迭代次数。每次迭代都会以逐渐增加的半径(和减小的阈值)执行。建议的值在
1
到4
的范围内。默认为1
。- deband_threshold
去带状滤波器的强度。数字越高,去带状效果越强。默认为
4.0
。- deband_radius
去带状滤波器的半径。较大的半径更适合慢梯度,而较小的半径更适合陡峭梯度。默认为
16.0
。- deband_grain
要添加的额外输出颗粒量。有助于隐藏瑕疵。默认为
6.0
。
39.145.1.4 颜色调整
一组主观颜色控制。不是很严格,因此确切的效果会因输入原色和色彩空间而略有不同。
- 亮度
亮度增强,介于
-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’
Deuteranomaly / 红色盲(影响 3%-4% 的人口)
- ‘l’
Protanomaly / 绿色盲(影响 1%-2% 的人口)
- ‘l+m’
单色视觉(非常罕见)
- ‘l+m+s’
全色盲(完全丧失白天视觉,极其罕见)
- cone-strength
由
cones
指定的锥体的增益因子,介于0.0
和10.0
之间。值1.0
不会对色觉产生任何影响。值0.0
(默认值)模拟完全丧失这些锥体。大于1.0
的值会导致夸大锥体之间的差异,这可能有助于补偿色觉降低。
39.145.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.145.1.6 色调映射
本节中的选项控制 libplacebo 在处理宽色域或 HDR 内容之间的不匹配时如何执行色调映射和色域映射。通常,libplacebo 依赖于精确的源标记和母版显示色域信息,以产生最佳效果。
- gamut_mode
如何处理由于比色色域映射而可能出现的超出色域的颜色。
- ‘clip’
不执行任何操作,只是将超出范围的颜色剪切到 RGB 体积。质量低但速度极快。
- ‘perceptual’
将颜色感知软剪切到色域体积。这是默认值。
- ‘relative’
相对比色硬剪切。类似于
perceptual
,但不包括软拐点。- ‘saturation’
饱和度映射,将原色直接映射到 RGB 空间中的原色。除了需要明亮、饱和的显示的计算机人工图形外,不建议使用。
- ‘absolute’
绝对比色硬剪切。不调整白点。
- ‘desaturate’
将超出色域的颜色硬性去饱和到白色,同时保持亮度。往往会扭曲明亮物体的视觉外观。
- ‘darken’
线性降低内容亮度以保留饱和细节,然后剪切其余超出色域的颜色。
- ‘warn’
突出显示超出色域的像素(通过反转/标记它们)。
- ‘linear’
线性降低整个图像的色度,使其适合目标颜色体积。在没有适当的母版元数据的情况下在 BT.2020 源上使用此功能时请小心,因为这样做会导致过度去饱和。
- tonemapping
要使用的色调映射算法。可用值为
- ‘auto’
基于内部启发式的自动选择。这是默认值。
- ‘clip’
不执行任何色调映射,只是剪切超出范围的颜色。为范围内的颜色保留完美的色彩精度,但完全破坏范围外的信息。不执行任何黑点自适应。不可配置。
- ‘st2094-40’
来自 SMPTE ST 2094-40 附件 B 的 EETF,它应用来自 HDR10+ 动态元数据的贝塞尔曲线进行色调映射。所使用的 OOTF 根据目标显示峰值亮度和实际显示峰值亮度之间的比率进行调整。
- ‘st2094-10’
来自 SMPTE ST 2094-10 附件 B.2 的 EETF,除了最大/最小值外,还考虑了输入信号的平均亮度。可配置的对比度参数会影响线性输出段的斜率,默认为
1.0
,表示对比度没有增加/减少。请注意,目前不包括附件 B.3 中定义的主观增益/偏移/伽玛控制。- ‘bt.2390’
来自 ITU-R 报告 BT.2390 的 EETF,这是一个具有线性段的埃尔米特样条滚降。膝点偏移量是可配置的。请注意,此参数默认为
1.0
,而不是 ITU-R 规范中的值0.5
。- ‘bt.2446a’
来自 ITU-R 报告 BT.2446 的 EETF,方法 A。专为制作精良的 HDR 源设计。可用于前向和反向色调映射。不可配置。
- ‘spline’
简单的样条曲线,由两个多项式组成,通过一个支点连接。该参数给出支点(在 PQ 空间中),默认为
0.30
。可用于前向和反向色调映射。- ‘reinhard’
简单的非线性全局色调映射算法。该参数指定显示峰值处的局部对比度系数。本质上,参数为
0.5
意味着参考白色将比剪切时亮大约一半。默认为0.5
,这会产生此函数的最简单形式。- ‘mobius’
reinhard 色调映射算法的推广,以支持黑色附近的附加线性斜率。色调映射参数表示线性部分和非线性部分之间的权衡。本质上,对于给定的参数 x,低于 x 的每个颜色值都将线性映射,而更高的值将进行非线性色调映射。接近
1.0
的值使此曲线的行为类似于clip
,而接近0.0
的值使此曲线的行为类似于reinhard
。默认值为0.3
,它在色度准确性和保留超出色域的细节之间提供了良好的平衡。- ‘hable’
John Hable 开发的用于 Uncharted 2 的分段电影色调映射算法,灵感来自柯达使用的类似色调映射算法。因其在具有 HDR 渲染的视频游戏中的使用而广受欢迎。它能很好地保留暗部和亮部细节,但缺点是会显着改变平均亮度。这有点类似于参数为
0.24
的reinhard
。- ‘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.145.1.7 抖动
默认情况下,libplacebo 会在必要时进行抖动,包括渲染到任何低于 16 位精度的整数格式。建议始终保持启用状态,因为不这样做可能会导致输出中出现可见的条带,即使启用了 debanding
滤镜也是如此。如果需要最大性能,请使用 ordered_fixed
而不是禁用抖动。
- dithering
要使用的抖动方法。接受以下值
- ‘none’
完全禁用抖动。可能会导致出现可见的条带。
- ‘blue’
使用伪蓝噪声进行抖动。这是默认值。
- ‘ordered’
可调有序抖动模式。
- ‘ordered_fixed’
具有固定大小
6
的更快有序抖动。无纹理。- ‘white’
使用白噪声进行抖动。无纹理。
- dither_lut_size
抖动 LUT 大小,为
1
到8
之间的以 2 为底的对数。默认为6
,对应于64x64
的 LUT 大小。- dither_temporal
启用时间抖动。默认情况下禁用。
39.145.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.145.1.9 调试/性能
本节中的所有选项默认为关闭。当试图以牺牲质量为代价来挤出最大性能时,它们可能会有所帮助。
- skip_aa
在缩小比例时禁用抗锯齿。
- polar_cutoff
将极坐标 (EWA) 缩放器内核截断到低于此绝对大小,介于
0.0
和1.0
之间。- disable_linear
禁用线性光缩放。
- disable_builtin
禁用内置 GPU 采样(强制使用 LUT)。
- disable_fbos
强制禁用 FBO,导致几乎所有功能都丢失,但提供尽可能快的速度。
39.145.2 命令
此滤镜几乎支持上述所有选项作为命令。
39.145.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.146 libvmaf
计算参考/失真输入视频对的 VMAF(视频多方法评估融合)分数。
第一个输入是失真视频,第二个输入是参考视频。
获得的 VMAF 分数通过日志系统打印。
它需要 Netflix 的 vmaf 库 (libvmaf) 作为先决条件。安装库后,可以使用以下命令启用:./configure --enable-libvmaf
。
该滤镜具有以下选项
- 模型
一个以 ‘|’ 分隔的 vmaf 模型列表。每个模型都可以配置多个参数。默认值:
"version=vmaf_v0.6.1"
- feature
一个以 ‘|’ 分隔的特征列表。每个特征都可以配置多个参数。
- log_path
设置用于存储日志文件的文件路径。
- log_fmt
设置日志文件的格式(xml、json、csv 或 sub)。
- pool
设置用于计算 vmaf 的池化方法。选项为
min
、harmonic_mean
或mean
(默认)。- n_threads
设置初始化 libvmaf 时要使用的线程数。默认值:
0
,不使用线程。- n_subsample
设置要使用的帧子采样间隔。
此滤镜还支持 framesync 选项。
39.146.1 示例
- 在下面的示例中,失真视频 distorted.mpg 与参考文件 reference.mpg 进行比较。
- 基本用法
ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf=log_path=output.xml -f null -
- 使用多个模型的示例
ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf='model=version=vmaf_v0.6.1\\:name=vmaf|version=vmaf_v0.6.1neg\\:name=vmaf_neg' -f null -
- 使用多个附加特征的示例
ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf='feature=name=psnr|name=ciede' -f null -
- 使用选项和不同容器的示例
ffmpeg -i distorted.mpg -i reference.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]libvmaf=log_fmt=json:log_path=output.json" -f null -
39.147 libvmaf_cuda
这是 libvmaf 滤镜的 CUDA 变体。它只接受 CUDA 帧。
它需要 Netflix 的 vmaf 库 (libvmaf) 作为先决条件。安装库后,可以使用以下命令启用:./configure --enable-nonfree --enable-ffnvcodec --enable-libvmaf
。
39.147.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[dis]; \ [1:v]scale_cuda=format=yuv420p[ref]; \ [dis][ref]libvmaf_cuda=log_fmt=json:log_path=output.json " \ -f null -
39.148 limitdiff
使用第二个和可选的第三个视频流应用有限差异滤镜。
该滤波器接受以下选项
- threshold
设置在允许视频流之间存在特定差异时使用的阈值。任何绝对差异值小于或等于此阈值时,将从第一个视频流中选取像素分量。
- elasticity
设置处理视频流时软阈值的弹性。此值与第一个值相乘得到第二个阈值。任何绝对差异值大于或等于第二个阈值时,将从第二个视频流中选取像素分量。对于这两个阈值之间的值,将使用第一个和第二个视频流之间的线性插值。
- reference
启用参考(第三个)视频流处理。默认情况下禁用。如果设置,此视频流将用于计算与第一个视频流的绝对差异。
- planes
指定将要处理的平面。默认为所有可用平面。
39.148.1 命令
此滤镜支持以上所有选项作为 命令,除了选项 ‘reference’。
39.149 limiter
将像素分量值限制在指定的范围 [min, max] 内。
该滤波器接受以下选项
- 最小值 (min)
下限。默认为输入的最低允许值。
- 最大值 (max)
上限。默认为输入的最高允许值。
- planes
指定将要处理的平面。默认为所有可用平面。
39.149.1 命令
此滤波器支持上述所有选项作为命令。
39.150 loop
循环播放视频帧。
该滤波器接受以下选项
- loop
设置循环次数。将此值设置为 -1 将导致无限循环。默认为 0。
- size
设置最大帧数。默认值为 0。
- start
设置循环的第一帧。默认值为 0。
- time
设置循环开始时间,以秒为单位。仅当名为 start 的选项设置为
-1
时使用。
39.150.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.151 lut1d
将 1D LUT 应用于输入视频。
该滤波器接受以下选项
- file
设置 1D LUT 文件名。
当前支持的格式
- ‘立方体’
Iridas
- ‘csp’
cineSpace
- interp
选择插值模式。
可用值为
- ‘nearest’ (最近邻)
使用最近定义的点的值。
- ‘linear’
使用线性插值来插值值。
- ‘cosine’
使用余弦插值来插值值。
- ‘cubic’
使用三次插值来插值值。
- ‘spline’
使用样条插值来插值值。
39.151.1 命令
此滤波器支持上述所有选项作为命令。
39.152 lut3d
将 3D LUT 应用于输入视频。
该滤波器接受以下选项
- file
设置 3D LUT 文件名。
当前支持的格式
- ‘3dl’
AfterEffects
- ‘立方体’
Iridas
- ‘dat’
DaVinci
- ‘m3d’
Pandora
- ‘csp’
cineSpace
- interp
选择插值模式。
可用值为
- ‘nearest’ (最近邻)
使用最近定义的点的值。
- ‘trilinear’
使用定义立方体的 8 个点插值值。
- ‘tetrahedral’
使用四面体插值值。
- ‘pyramid’
使用金字塔插值值。
- ‘prism’
使用棱柱插值值。
39.152.1 命令
此滤波器支持 命令中的 interp
选项。
39.153 lumakey
将某些亮度值转换为透明度。
该滤波器接受以下选项
- threshold
设置将用作透明度基础的亮度。默认值为
0
。- tolerance
设置要被剔除的亮度值范围。默认值为
0.01
。- 柔和度
设置柔和度范围。默认值为
0
。使用此项来控制从零到完全透明的渐变过渡。
39.153.1 命令
此滤镜支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.154 lut, lutrgb, lutyuv
计算一个查找表,用于将每个像素分量输入值绑定到一个输出值,并将其应用于输入视频。
lutyuv 将查找表应用于 YUV 输入视频,lutrgb 应用于 RGB 输入视频。
这些滤镜接受以下参数
- c0
设置第一个像素分量表达式
- c1
设置第二个像素分量表达式
- c2
设置第三个像素分量表达式
- c3
设置第四个像素分量表达式,对应于 alpha 分量
- r
设置红色分量表达式
- g
设置绿色分量表达式
- b
设置蓝色分量表达式
- a
alpha 分量表达式
- y
设置 Y/亮度分量表达式
- u
设置 U/Cb 分量表达式
- v
设置 V/Cr 分量表达式
它们中的每一个都指定用于计算相应像素分量值的查找表的表达式。
与每个 c* 选项关联的确切分量取决于输入格式。
lut 滤镜需要 YUV 或 RGB 像素格式输入,lutrgb 需要 RGB 像素格式输入,而 lutyuv 需要 YUV。
表达式可以包含以下常量和函数
- w
- h
输入宽度和高度。
- 设置将在颜色差异计算中使用的饱和度值。允许范围为 -1 到 1。默认值为 0。
像素分量的输入值。
- 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.154.1 命令
此滤镜支持与选项相同的命令。
39.154.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.155 lut2, tlut2
lut2
滤镜接收两个输入流并输出一个流。
tlut2
(时间 lut2) 滤镜从一个单独的流中接收两个连续的帧。
此滤镜接受以下参数
- c0
设置第一个像素分量表达式
- c1
设置第二个像素分量表达式
- c2
设置第三个像素分量表达式
- c3
设置第四个像素分量表达式,对应于 alpha 分量
- d
设置输出位深度,仅适用于
lut2
滤镜。默认值为 0,这意味着位深度自动从第一个输入格式中选取。
lut2
滤镜还支持 framesync 选项。
它们中的每一个都指定用于计算相应像素分量值的查找表的表达式。
与每个 c* 选项关联的确切分量取决于输入格式。
表达式可以包含以下常量
- w
- h
输入宽度和高度。
- x
像素分量的第一个输入值。
- y
像素分量的第二个输入值。
- bdx
第一个输入视频位深度。
- bdy
第二个输入视频位深度。
所有表达式默认值为 "x"。
39.155.1 命令
此滤镜支持以上所有选项作为 命令,除了选项 d
。
39.155.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.156 maskedclamp
使用第二个和第三个输入流来钳制第一个输入流。
返回第一个流的值,使其介于第二个输入流 - undershoot
和第三个输入流 + overshoot
之间。
此过滤器接受以下选项
- 欠调
默认值为
0
。- 过调
默认值为
0
。- planes
设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,将处理所有平面。
39.156.1 命令
此滤波器支持上述所有选项作为命令。
39.157 maskedmax
使用第二个输入流与第一个输入流之间的绝对差异以及第三个输入流与第一个输入流之间的绝对差异,将第二个和第三个输入流合并到输出流中。如果第二个绝对差异大于第一个绝对差异,则选择的值将来自第二个输入流,否则来自第三个输入流。
此过滤器接受以下选项
- planes
设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,将处理所有平面。
39.157.1 命令
此滤波器支持上述所有选项作为命令。
39.158 maskedmerge
使用第三个输入流中的每个像素权重,将第一个输入流与第二个输入流合并。
第三个流像素分量中的值 0 表示第一个流的像素分量保持不变,而最大值(例如,8 位视频的 255)表示第二个流的像素分量保持不变。中间值定义两个输入流的像素分量之间的合并量。
此过滤器接受以下选项
- planes
设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,将处理所有平面。
39.158.1 命令
此滤波器支持上述所有选项作为命令。
39.159 maskedmin
使用第二个输入流与第一个输入流之间的绝对差异以及第三个输入流与第一个输入流之间的绝对差异,将第二个和第三个输入流合并到输出流中。如果第二个绝对差异小于第一个绝对差异,则选择的值将来自第二个输入流,否则来自第三个输入流。
此过滤器接受以下选项
- planes
设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,将处理所有平面。
39.159.1 命令
此滤波器支持上述所有选项作为命令。
39.160 maskedthreshold
通过比较两个视频流的绝对差异与固定阈值来选择像素。
如果第一个和第二个视频流的像素分量之间的绝对差异等于或小于用户提供的阈值,则选择第一个视频流的像素分量,否则选择第二个视频流的像素分量。
此过滤器接受以下选项
- threshold
设置从两个输入视频流的绝对差异中选择像素时使用的阈值。
- planes
设置哪些平面将作为位图处理,未处理的平面将从第二个流复制。默认值为 0xf,将处理所有平面。
- mode
设置过滤器操作的模式。可以是
abs
或diff
。默认值为abs
。
39.160.1 命令
此滤波器支持上述所有选项作为命令。
39.161 maskfun
从输入视频创建掩码。
例如,在 tblend
过滤器之后创建运动掩码很有用。
此过滤器接受以下选项
- low
设置低阈值。任何低于或等于此值的像素分量都将被设置为 0。
- high
设置高阈值。任何高于此值的像素分量都将被设置为当前像素格式允许的最大值。
- planes
设置要过滤的平面,默认情况下会过滤所有可用的平面。
- fill
用此值填充所有帧像素。
- 总和
设置帧的最大平均像素值。如果所有像素分量的总和高于此平均值,则输出帧将完全填充由 fill 选项设置的值。当与
tblend
过滤器结合使用时,通常对场景更改很有用。
39.161.1 命令
此滤波器支持上述所有选项作为命令。
39.162 mcdeint
应用运动补偿去隔行。
它需要每个帧一个场作为输入,因此必须与 yadif=1/3 或等效项一起使用。
此过滤器接受以下选项
- mode
设置去隔行模式。
它接受以下值之一
- ‘fast’
- ‘medium’
- ‘slow’
使用迭代运动估计
- ‘extra_slow’
与‘slow’类似,但使用多个参考帧。
默认值为 ‘fast’。
- parity
设置假设输入视频的图像场奇偶性。它必须是以下值之一
- ‘0, tff’
假设顶场优先
- ‘1, bff’
假设底场优先
默认值为‘bff’。
- qp
设置内部编码器使用的每个块量化参数(QP)。
较高的值应产生更平滑的运动矢量场,但单个矢量不太理想。默认值为 1。
39.163 median
从由半径定义的特定矩形中选择中值像素。
此过滤器接受以下选项
- radius
设置水平半径大小。默认值为
1
。允许的范围是 1 到 127 的整数。- planes
设置要处理的平面。默认值为
15
,即所有可用平面。- radiusV
设置垂直半径大小。默认值为
0
。允许的范围是 0 到 127 的整数。如果为 0,则将从水平radius
选项中选择值。- percentile
设置中值百分位数。默认值为
0.5
。默认值0.5
将始终选择中值,而0
将选择最小值,1
将选择最大值。
39.163.1 命令
此滤镜支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.164 mergeplanes
合并来自多个视频流的颜色通道分量。
该过滤器最多接受 4 个输入流,并将选定的输入平面合并到输出视频中。
此过滤器接受以下选项
- 映射
设置输入到输出平面的映射。默认值为
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.164.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.165 mestimate
使用块匹配算法估计和导出运动矢量。运动矢量存储在帧侧数据中,以供其他过滤器使用。
此过滤器接受以下选项
- method
指定运动估计方法。接受以下值之一
- ‘esa’
穷举搜索算法。
- ‘tss’
三步搜索算法。
- ‘tdls’
二维对数搜索算法。
- ‘ntss’
新的三步搜索算法。
- ‘fss’
四步搜索算法。
- ‘ds’
菱形搜索算法。
- ‘hexbs’
基于六边形的搜索算法。
- ‘epzs’
增强型预测区域搜索算法。
- ‘umh’
不均匀多六边形搜索算法。
默认值为‘esa’。
- mb_size
宏块大小。默认为
16
。- search_param
搜索参数。默认为
7
。
39.166 midequalizer
使用两个视频流应用中间图像均衡效果。
中间图像均衡调整一对图像以具有相同的直方图,同时尽可能保持其动态。它对于例如匹配来自一对立体相机的曝光很有用。
此过滤器具有两个输入和一个输出,它们必须具有相同的像素格式,但大小可能不同。过滤器的输出是第一个输入,它使用两个输入的中间直方图进行调整。
此滤镜接受以下选项:
- planes
设置要处理的平面。默认值为
15
,即所有可用平面。
39.167 minterpolate
使用运动插值将视频转换为指定的帧率。
此过滤器接受以下选项
- fps
指定输出帧率。这可以是合理的,例如
60000/1001
。如果 fps 低于源 fps,则会丢弃帧。默认值60
。- mi_mode
运动插值模式。接受以下值
- ‘dup’
复制前一帧或下一帧以插值新帧。
- ‘blend’
混合源帧。插值帧是前一帧和下一帧的平均值。
- ‘mci’
运动补偿插值。选择此模式时,以下选项有效
- ‘mc_mode’
运动补偿模式。接受以下值
- ‘obmc’
重叠块运动补偿。
- ‘aobmc’
自适应重叠块运动补偿。根据相邻运动矢量的可靠性自适应地控制窗口加权系数,以减少过度平滑。
默认模式为 ‘obmc’。
- ‘me_mode’
运动估计模式。接受以下值
- ‘bidir’
双向运动估计。为每个源帧在向前和向后方向估计运动矢量。
- ‘bilat’
双边运动估计。直接为插值帧估计运动矢量。
默认模式为 ‘bilat’。
- ‘me’
用于运动估计的算法。接受以下值
- ‘esa’
穷举搜索算法。
- ‘tss’
三步搜索算法。
- ‘tdls’
二维对数搜索算法。
- ‘ntss’
新的三步搜索算法。
- ‘fss’
四步搜索算法。
- ‘ds’
菱形搜索算法。
- ‘hexbs’
基于六边形的搜索算法。
- ‘epzs’
增强型预测区域搜索算法。
- ‘umh’
不均匀多六边形搜索算法。
默认算法为 ‘epzs’。
- ‘mb_size’
宏块大小。默认为
16
。- ‘search_param’
运动估计搜索参数。默认为
32
。- ‘vsbmc’
启用可变大小块运动补偿。在对象边界处应用较小的块大小进行运动估计,以减少模糊。默认为
0
(禁用)。
- scd
场景切换检测方法。场景切换会导致运动矢量朝随机方向移动。场景切换检测会将插值帧替换为重复帧。其他模式可能不需要此功能。接受以下值
- ‘none’
禁用场景切换检测。
- ‘fdiff’
帧差异。比较对应的像素值,如果满足scd_threshold,则检测到场景切换。
默认方法为 ‘fdiff’。
- scd_threshold
场景切换检测阈值。默认为
10.
。
39.168 mix
将多个视频输入流混合成一个视频流。
以下是对接受选项的描述。
- 输入
输入数量。如果未指定,则默认为 2。
- 权重
以序列形式指定每个输入视频流的权重。每个权重用空格分隔。如果权重的数量小于frames的数量,则最后指定的权重将用于所有剩余的未设置权重。
- scale
指定比例,如果设置,则将与每个权重乘以像素值的总和相乘,以给出最终的目标像素值。默认情况下,scale会自动缩放到权重的总和。
- planes
设置要过滤的平面。默认值是全部。允许范围为 0 到 15。
- duration
指定如何确定流的结束。
- ‘longest’
最长输入的持续时间。(默认)
- ‘shortest’
最短输入的持续时间。
- ‘first’
第一个输入的持续时间。
39.168.1 命令
此滤波器支持以下命令
- 权重
- scale
- planes
语法与同名选项相同。
39.169 monochrome
使用自定义颜色滤镜将视频转换为灰度。
以下是对接受选项的描述。
- cb
设置色度蓝色点。允许的范围是从 -1 到 1。默认值为 0。
- cr
设置色度红色点。允许的范围是从 -1 到 1。默认值为 0。
- size
设置颜色滤镜的大小。允许的范围是从 0.1 到 10。默认值为 1。
- high
设置高光强度。允许的范围是从 0 到 1。默认值为 0。
39.169.1 命令
此滤波器支持上述所有选项作为命令。
39.170 morpho
此滤镜允许应用主要的形态学灰度变换,腐蚀和膨胀,并在第二个输入流中设置任意结构。
与腐蚀和膨胀滤镜中的朴素实现和较慢的性能不同,当速度至关重要时,应改用morpho
滤镜。
接受的选项的说明如下,
- mode
设置要应用的形态学变换,可以是
- ‘erode’
- ‘dilate’
- ‘open’
- ‘close’
- ‘gradient’
- ‘tophat’
- ‘blackhat’
默认为
erode
。- planes
设置要过滤的平面,默认情况下,除 alpha 外的所有平面都会被过滤。
- structure
设置将从第二个输入流处理哪个结构视频帧,可以是 first 或 all。默认为 all。
morpho
滤镜还支持 framesync 选项。
39.170.1 命令
此滤镜支持与选项相同的命令。
39.171 mpdecimate
丢弃与上一帧差异不大的帧,以降低帧率。
此滤镜的主要用途是用于非常低比特率的编码(例如,通过拨号调制解调器进行流式传输),但理论上也可以用于修复错误地反向电视电影的电影。
以下是对接受选项的描述。
- 最大值 (max)
设置可以丢弃的最大连续帧数(如果为正数),或丢弃帧之间的最小间隔(如果为负数)。如果值为0,则会丢弃该帧,而不管之前连续丢弃的帧数。
默认值为 0。
- keep
设置在开始丢弃之前要忽略的最大连续相似帧数。如果值为0,则会丢弃该帧,而不管之前连续相似的帧数。
默认值为 0。
- hi
- lo
- frac
设置丢弃阈值。
hi 和 lo 的值适用于 8x8 像素块,并表示实际的像素值差异,因此 64 的阈值对应于每个像素 1 个单位的差异,或者在块上以不同的方式分散相同的值。
如果没有任何 8x8 块的差异超过 hi 的阈值,并且不超过 frac 个块(1 表示整个图像)的差异超过 lo 的阈值,则该帧是丢弃的候选帧。
hi 的默认值为 64*12,lo 的默认值为 64*5,frac 的默认值为 0.33。
39.172 msad
获取两个输入视频之间的 MSAD(平均绝对差异之和)。
此滤镜需要两个输入视频。
为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。此外,它还假设两个输入具有相同数量的帧,这些帧会逐个进行比较。
通过日志系统打印获得的每个分量、平均值、最小值和最大值 MSAD。
该滤镜将每帧计算的 MSAD 存储在帧元数据中。
此滤镜还支持 framesync 选项。
在下面的示例中,正在处理的输入文件 main.mpg 与参考文件 ref.mpg 进行比较。
ffmpeg -i main.mpg -i ref.mpg -lavfi msad -f null -
39.173 multiply
将第一个视频流的像素值与第二个视频流的像素值相乘。
该滤波器接受以下选项
- scale
设置应用于第二个视频流的比例。默认为
1
。允许的范围是从0
到9
。- offset
设置应用于第二个视频流的偏移量。默认为
0.5
。允许的范围是从-1
到1
。- planes
指定将要处理的输入视频流的平面。默认情况下,所有平面都会被处理。
39.173.1 命令
此滤镜支持与选项相同的命令。
39.174 negate
对输入视频进行取反(反转)。
它接受以下选项
- components
设置要取反的分量。
分量的可用值为
- ‘y’
- ‘u’
- ‘v’
- ‘a’
- ‘r’
- ‘g’
- ‘b’
- negate_alpha
值为 1 时,如果存在,则对 alpha 分量取反。默认值为 0。
39.174.1 命令
此滤镜支持与选项相同的命令。
39.175 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.176 nnedi
使用神经网络边缘定向插值对视频进行去隔行。
此过滤器接受以下选项
- 权重
强制性选项,如果没有二进制文件,滤镜将无法工作。当前可以在此处找到该文件: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
,default
或slow
。- etype
设置在预测器中使用的权重集。可以是以下之一
- ‘a, abs’
训练权重以最小化绝对误差
- ‘s, mse’
训练权重以最小化均方误差
- pscrn
控制是否使用预筛选器神经网络来决定哪些像素应由预测器神经网络处理,哪些像素可以由简单的三次插值处理。预筛选器经过训练,可以知道三次插值对于像素是否足够,或者是否应由预测器神经网络预测。预筛选器神经网络的计算复杂度远低于预测器神经网络。由于大多数像素都可以由三次插值处理,因此使用预筛选器通常会大大加快处理速度。预筛选器非常准确,因此使用与不使用它之间的差异几乎总是难以察觉。
可以是以下之一
- ‘none’
- ‘original’
- ‘new’
- ‘new2’
- ‘new3’
默认值为
new
。
39.176.1 命令
此滤镜支持与选项相同的 命令,但不包括 weights 选项。
39.177 noformat
强制 libavfilter 不使用任何指定的像素格式作为下一个滤镜的输入。
它接受以下参数
- pix_fmts
一个以“|”分隔的像素格式名称列表,例如 pix_fmts=yuv420p|monow|rgb24”。
39.177.1 示例
- 强制 libavfilter 对 vflip 滤镜的输入使用与 yuv420p 不同的格式
noformat=pix_fmts=yuv420p,vflip
- 将输入视频转换为列表中未包含的任何格式
noformat=yuv420p|yuv444p|yuv410p
39.178 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.178.1 示例
向输入视频添加时间和均匀噪声
noise=alls=20:allf=t+u
39.179 normalize
规范化 RGB 视频(也称为直方图拉伸,对比度拉伸)。请参阅:https://en.wikipedia.org/wiki/Normalization_(image_processing)
对于每一帧的每个通道,滤镜计算输入范围,并将其线性映射到用户指定的输出范围。输出范围默认为从纯黑到纯白的完整动态范围。
时间平滑可用于输入范围,以减少当小的黑暗或明亮物体进入或离开场景时引起的闪烁(亮度快速变化)。这类似于摄像机上的自动曝光(自动增益控制),并且像摄像机一样,它可能会导致视频出现一段时间的过度曝光或曝光不足。
R、G、B 通道可以独立标准化,这可能会导致一些颜色偏移,或者可以作为单个通道链接在一起,从而防止颜色偏移。链接的标准化保留色调。独立的标准化不会保留色调,因此可用于消除某些色偏。独立和链接的标准化可以以任何比例组合。
normalize 滤镜接受以下选项
- blackpt
- whitept
定义输出范围的颜色。最小输入值映射到 blackpt。最大输入值映射到 whitept。默认值分别为黑色和白色。为 blackpt 指定白色,为 whitept 指定黑色将给出颜色反转、标准化的视频。可以使用灰色阴影来减小动态范围(对比度)。在此处指定饱和颜色可以创建一些有趣的效果。
- smoothing
用于时间平滑的先前帧数。使用当前帧和 smoothing 个先前帧的滚动平均值来平滑每个通道的输入范围。默认值为 0(无时间平滑)。
- independence
控制独立(颜色偏移)通道标准化与链接(颜色保留)标准化的比率。0.0 为完全链接,1.0 为完全独立。默认为 1.0(完全独立)。
- 强度
滤镜的整体强度。1.0 为全强度。0.0 是一个相当昂贵的无操作。默认为 1.0(全强度)。
39.179.1 命令
此滤镜支持与选项相同的 命令,但不包括 smoothing 选项。该命令接受相应选项的相同语法。
如果指定的表达式无效,则保持其当前值。
39.179.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.180 null
将视频源不变地传递到输出。
39.181 ocr
光学字符识别
此滤镜使用 Tesseract 进行光学字符识别。要启用此滤镜的编译,您需要使用 --enable-libtesseract
配置 FFmpeg。
它接受以下选项
- datapath
设置 tesseract 数据的 datapath。默认值是使用安装时设置的任何值。
- language
设置语言,默认为“eng”。
- whitelist
设置字符白名单。
- blacklist
设置字符黑名单。
此滤镜将识别出的文本作为帧元数据 lavfi.ocr.text
导出。该滤镜将识别出的单词的置信度作为帧元数据 lavfi.ocr.confidence
导出。
39.182 ocv
使用 libopencv 应用视频转换。
要启用此滤镜,请安装 libopencv 库和头文件,并使用 --enable-libopencv
配置 FFmpeg。
它接受以下参数
- filter_name
要应用的 libopencv 滤镜的名称。
- filter_params
传递给 libopencv 滤镜的参数。如果未指定,则假定为默认值。
有关更精确的信息,请参阅官方 libopencv 文档:https://docs.opencv.ac.cn/master/modules/imgproc/doc/filtering.html
支持多个 libopencv 滤镜;请参阅以下小节。
39.182.1 膨胀
使用特定的结构元素膨胀图像。它对应于 libopencv 函数 cvDilate
。
它接受以下参数:struct_el|nb_iterations。
struct_el 表示结构元素,其语法为:colsxrows+anchor_xxanchor_y/shape
cols 和 rows 表示结构元素的列数和行数,anchor_x 和 anchor_y 表示锚点,shape 表示结构元素的形状。shape 必须为 "rect"、"cross"、"ellipse" 或 "custom"。
如果 shape 的值为 "custom",则必须后跟一个形式为 "=filename" 的字符串。名称为 filename 的文件假定为表示二进制图像,其中每个可打印字符都对应于一个亮像素。当使用自定义 shape 时,将忽略 cols 和 rows,而假定读取的文件的列数和行数。
struct_el 的默认值为 "3x3+0x0/rect"。
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.182.2 腐蚀
使用特定的结构元素腐蚀图像。它对应于 libopencv 函数 cvErode
。
它接受以下参数:struct_el:nb_iterations,其语法和语义与 膨胀 滤镜相同。
39.182.3 平滑
平滑输入视频。
此滤镜采用以下参数:type|param1|param2|param3|param4。
type 是要应用的平滑滤波器类型,必须是以下值之一:"blur"、"blur_no_scale"、"median"、"gaussian" 或 "bilateral"。默认值为 "gaussian"。
param1、param2、param3 和 param4 的含义取决于平滑类型。param1 和 param2 接受整数正值或 0。param3 和 param4 接受浮点数值。
param1 的默认值为 3。其他参数的默认值为 0。
这些参数对应于分配给 libopencv 函数 cvSmooth
的参数。
39.183 oscilloscope
2D 视频示波器。
可用于测量空间脉冲、阶跃响应、色度延迟等。
它接受以下参数
- x
设置示波器中心 x 坐标。
- y
设置示波器中心 y 坐标。
- s
设置示波器大小,相对于帧对角线。
- t
设置示波器倾斜/旋转。
- o
设置轨迹不透明度。
- tx
设置轨迹中心 x 坐标。
- ty
设置轨迹中心 y 坐标。
- tw
设置轨迹宽度,相对于帧宽度。
- th
设置轨迹高度,相对于帧高度。
- c
设置要跟踪的组件。默认情况下,它会跟踪前三个组件。
- g
绘制轨迹网格。默认情况下启用。
- st
绘制一些统计信息。默认情况下启用。
- sc
绘制示波器。默认情况下启用。
39.183.1 命令
此滤镜支持与选项相同的命令。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.183.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.184 overlay
将一个视频叠加在另一个视频之上。
它接收两个输入并产生一个输出。第一个输入是“主”视频,第二个输入叠加在其上。
它接受以下参数
以下是对接受选项的描述。
- x
- y
设置叠加视频在主视频上的 x 和 y 坐标的表达式。两个表达式的默认值均为“0”。如果表达式无效,则将其设置为一个很大的值(这意味着叠加将不会在输出可见区域内显示)。
- eof_action
请参阅 framesync。
- eval
设置何时评估 x 和 y 的表达式。
它接受以下值
- ‘init’
仅在过滤器初始化期间或处理命令时评估表达式一次
- ‘frame’
为每个传入的帧评估表达式
默认值为 ‘frame’。
- shortest
请参阅 framesync。
- format
设置输出视频的格式。
它接受以下值
- ‘yuv420’
强制 YUV 4:2:0 8 位平面输出
- ‘yuv420p10’
强制 YUV 4:2:0 10 位平面输出
- ‘yuv422’
强制 YUV 4:2:2 8 位平面输出
- ‘yuv422p10’
强制 YUV 4:2:2 10 位平面输出
- ‘yuv444’
强制 YUV 4:4:4 8 位平面输出
- ‘yuv444p10’
强制 YUV 4:4:4 10 位平面输出
- ‘rgb’
强制 RGB 8 位打包输出
- ‘gbrp’
强制 RGB 8 位平面输出
- ‘auto’
自动选择格式
默认值为 ‘yuv420’。
- repeatlast
请参阅 framesync。
- alpha
设置叠加视频的 alpha 格式,可以是 straight 或 premultiplied。默认为 straight。
x 和 y 表达式可以包含以下参数。
- main_w, W
- main_h, H
主输入宽度和高度。
- overlay_w, w
- overlay_h, h
叠加输入宽度和高度。
- x
- y
为 x 和 y 计算的值。它们针对每个新帧进行计算。
- hsub
- vsub
输出格式的水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。
- n
输入帧数,从 0 开始
- pos
输入帧在文件中的位置,如果未知则为 NAN;已弃用,请勿使用
- t
时间戳,以秒为单位表示。如果输入时间戳未知,则为 NAN。
此滤镜还支持 framesync 选项。
请注意,n、t 变量仅在每帧进行评估时可用,并且当 eval 设置为 ‘init’ 时将评估为 NAN。
请注意,帧是按时间戳顺序从每个输入视频中提取的,因此,如果它们的初始时间戳不同,最好将两个输入都传递给 setpts=PTS-STARTPTS 过滤器,使它们从相同的时间戳 0 开始,就像 movie 过滤器的示例一样。
您可以将更多叠加链接在一起,但应测试这种方法的效率。
39.184.1 命令
此滤波器支持以下命令
- x
- y
修改叠加输入的 x 和 y 坐标。该命令接受相应选项的相同语法。
如果指定的表达式无效,则保持其当前值。
39.184.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
- 使用带有
-filter_complex
选项的ffmpeg
工具,在输入的左下角插入透明 PNG 徽标ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
- 使用
ffmpeg
工具插入 2 个不同的透明 PNG 徽标(第二个徽标在右下角)ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
- 在主视频顶部添加透明颜色层;
WxH
必须指定叠加过滤器主输入的尺寸[email protected]:size=WxH [over]; [in][over] overlay [out]
- 使用
ffplay
工具并排播放原始视频和过滤后的版本(此处使用 deshake 过滤器)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.185 overlay_cuda
将一个视频叠加在另一个视频之上。
这是 overlay 过滤器的 CUDA 变体。它仅接受 CUDA 帧。底层输入像素格式必须匹配。
它接收两个输入并产生一个输出。第一个输入是“主”视频,第二个输入叠加在其上。
它接受以下参数
- x
- y
设置叠加视频在主视频上的 x 和 y 坐标的表达式。
它们可以包含以下参数
- main_w, W
- main_h, H
主输入宽度和高度。
- overlay_w, w
- overlay_h, h
叠加输入宽度和高度。
- x
- y
为 x 和 y 计算的值。它们针对每个新帧进行计算。
- n
主输入帧的序号索引,从 0 开始。
- pos
主输入帧在文件中的字节偏移位置,如果未知则为 NAN。已弃用,请勿使用。
- t
主输入帧的时间戳,以秒为单位表示,如果未知则为 NAN。
两个表达式的默认值均为 "0"。
- eval
设置何时评估 x 和 y 的表达式。
它接受以下值
- init
在过滤器初始化期间或处理命令时评估表达式一次。
- frame
为每个传入的帧评估表达式
默认值为 frame。
- eof_action
请参阅 framesync。
- shortest
请参阅 framesync。
- repeatlast
请参阅 framesync。
此滤镜还支持 framesync 选项。
39.186 owdenoise
应用过完备小波去噪器。
该滤波器接受以下选项
- depth
设置深度。
较大的深度值将更多地去除低频分量的噪声,但会减慢滤波速度。
必须是 8-16 范围内的整数,默认值为
8
。- luma_strength, ls
设置亮度强度。
必须是 0-1000 范围内的双精度值,默认值为
1.0
。- chroma_strength, cs
设置色度强度。
必须是 0-1000 范围内的双精度值,默认值为
1.0
。
39.187 pad
向输入图像添加填充,并将原始输入放置在提供的 x、y 坐标处。
它接受以下参数
- 宽度,w
- 高度,h
指定添加填充后的输出图像大小的表达式。如果 width 或 height 的值为 0,则输出将使用相应的输入尺寸。
width 表达式可以引用 height 表达式设置的值,反之亦然。
width 和 height 的默认值为 0。
- x
- y
指定将输入图像放置在填充区域内的偏移量,相对于输出图像的顶部/左侧边框。
x 表达式可以引用 y 表达式设置的值,反之亦然。
x 和 y 的默认值为 0。
如果 x 或 y 的评估结果为负数,它们将被更改,以便输入图像在填充区域中居中。
- 颜色
指定填充区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的 “颜色” 部分。
color 的默认值为“黑色”。
- eval
指定何时评估 width、height、x 和 y 表达式。
它接受以下值
- ‘init’
仅在过滤器初始化期间或处理命令时评估表达式一次。
- ‘frame’
为每个传入帧对表达式求值。
默认值为 ‘init’。
- aspect
填充到宽高比而不是分辨率。
width、height、x 和 y 选项的值是包含以下常量的表达式
- in_w
- in_h
输入视频的宽度和高度。
- iw
- ih
这些与 in_w 和 in_h 相同。
- out_w
- out_h
输出的宽度和高度(填充区域的大小),由 width 和 height 表达式指定。
- 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.187.1 示例
- 将颜色为 "violet" 的填充添加到输入视频。输出视频大小为 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.188 palettegen
为整个视频流生成一个调色板。
它接受以下选项
- max_colors
设置调色板中要量化的最大颜色数。注意:调色板仍将包含 256 种颜色;未使用的调色板条目将为黑色。
- reserve_transparent
创建一个最多包含 255 种颜色的调色板,并将最后一个颜色保留为透明色。保留透明色对于 GIF 优化非常有用。如果未设置,则调色板中的最大颜色数为 256。您可能希望为独立图像禁用此选项。默认情况下设置。
- transparency_color
设置将用作透明背景的颜色。
- stats_mode
设置统计模式。
它接受以下值
- ‘full’
计算完整帧的直方图。
- ‘diff’
仅计算与上一帧不同的部分的直方图。如果背景是静态的,这可能与更加重视输入的移动部分有关。
- ‘single’
为每一帧计算新的直方图。
默认值为 full。
该过滤器还会导出帧元数据 lavfi.color_quant_ratio
(nb_color_in / nb_color_out
),您可以使用它来评估调色板的颜色量化程度。此信息在 info 日志级别也可见。
39.188.1 示例
- 使用
ffmpeg
生成给定视频的代表性调色板ffmpeg -i input.mkv -vf palettegen palette.png
39.189 paletteuse
使用调色板来降采样输入视频流。
该过滤器接受两个输入:一个视频流和一个调色板。调色板必须是 256 像素的图像。
它接受以下选项
- dither
选择抖动模式。可用的算法有
- ‘bayer’
有序 8x8 拜耳抖动(确定性的)
- ‘heckbert’
由 Paul Heckbert 在 1982 年定义的抖动(简单错误扩散)。注意:这种抖动有时被认为是“错误”的,因此仅作为参考。
- ‘floyd_steinberg’
Floyd 和 Steingberg 抖动(错误扩散)
- ‘sierra2’
Frankie Sierra 抖动 v2(错误扩散)
- ‘sierra2_4a’
Frankie Sierra 抖动 v2 “精简版”(错误扩散)
- ‘sierra3’
Frankie Sierra 抖动 v3(错误扩散)
- ‘burkes’
Burkes 抖动(错误扩散)
- ‘atkinson’
Apple Computer 的 Bill Atkinson 抖动(错误扩散)
- ‘none’
禁用抖动。
默认值为 sierra2_4a。
- bayer_scale
当选择 bayer 抖动时,此选项定义图案的比例(网格图案的可见程度)。低值意味着网格图案更可见,条带更少,而高值意味着网格图案不太可见,但代价是条带更多。
该选项必须是 [0,5] 范围内的整数值。默认值为 2。
- diff_mode
如果设置,定义要处理的区域
- ‘rectangle’
仅重新处理变化的矩形。这类似于 GIF 裁剪/偏移压缩机制。如果只有图像的一部分在变化,此选项对于速度可能很有用,并且具有诸如将错误扩散 dither 的范围限制在移动场景边界的矩形之类的用例(如果场景变化不大,则会导致更确定的输出,从而减少移动噪声和更好的 GIF 压缩)。
默认值为 none。
- new
为每个输出帧采用新的调色板。
- alpha_threshold
设置透明度的 Alpha 阈值。高于此阈值的 Alpha 值将被视为完全不透明,而低于此阈值的值将被视为完全透明。
该选项必须是 [0,255] 范围内的整数值。默认值为 128。
39.189.1 示例
- 使用调色板(例如使用 palettegen 生成的)使用
ffmpeg
编码 GIFffmpeg -i input.mkv -i palette.png -lavfi paletteuse output.gif
39.190 perspective
校正未垂直于屏幕录制的视频的透视。
以下是对接受参数的描述。
- x0
- y0
- x1
- y1
- x2
- y2
- x3
- y3
设置左上角、右上角、左下角和右下角的坐标表达式。默认值为
0:0:W:0:0:H:W:H
,透视将保持不变。如果sense
选项设置为source
,则指定的点将发送到目标角的点。如果sense
选项设置为destination
,则源的角将发送到指定的坐标。表达式可以使用以下变量
- W
- H
视频帧的宽度和高度。
- in
输入帧计数。
- on
输出帧计数。
- interpolation
设置透视校正的插值。
它接受以下值
- ‘linear’
- ‘cubic’
默认值为 ‘linear’。
- sense
设置坐标选项的解释。
它接受以下值
- ‘0, source’
-
将给定坐标指定的源中的点发送到目标的角。
- ‘1, destination’
-
将源的角发送到给定坐标指定的目标中的点。
默认值为 ‘source’。
- eval
设置何时评估坐标 x0,y0,...x3,y3 的表达式。
它接受以下值
- ‘init’
仅在过滤器初始化期间或处理命令时评估表达式一次
- ‘frame’
为每个传入的帧评估表达式
默认值为 ‘init’。
39.191 phase
将隔行视频延迟一个场时间,以便更改场顺序。
预期用途是修复以与电影到视频传输相反的场顺序捕获的 PAL 电影。
以下是对接受参数的描述。
- mode
设置相位模式。
它接受以下值
- “t”
捕获场顺序为顶场优先,传输底场优先。过滤器将延迟底场。
- ‘b’
捕获场顺序为底场优先,传输顶场优先。过滤器将延迟顶场。
- ‘p’
以相同的场顺序捕获和传输。此模式仅用于文档说明其他选项,但如果您实际选择它,则过滤器将忠实地不执行任何操作。
- ‘a’
捕获场顺序由场标志自动确定,传输顺序相反。过滤器根据场标志在逐帧的基础上选择 ‘t’ 和 ‘b’ 模式。如果没有可用的场信息,则此模式的工作方式与 ‘u’ 相同。
- ‘u’
捕获未知或变化的场序,传输相反的场序。滤镜通过逐帧分析图像,并在 ‘t’ 和 ‘b’ 之间选择,以选择产生最佳场匹配的选项。
- ‘T’
捕获顶场优先,传输未知或变化的场序。滤镜使用图像分析在 ‘t’ 和 ‘p’ 之间选择。
- ‘B’
捕获底场优先,传输未知或变化的场序。滤镜使用图像分析在 ‘b’ 和 ‘p’ 之间选择。
- ‘A’
根据场标记确定捕获场序,传输未知或变化的场序。滤镜使用场标记和图像分析在 ‘t’、‘b’ 和 ‘p’ 之间选择。如果没有场信息,则此选项的工作方式与 ‘U’ 相同。这是默认模式。
- ‘U’
捕获和传输的场序均为未知或变化的。滤镜仅使用图像分析在 ‘t’、‘b’ 和 ‘p’ 之间选择。
39.191.1 命令
此滤波器支持上述所有选项作为命令。
39.192 photosensitivity
减少视频中的各种闪烁,以帮助癫痫患者。
它接受以下选项
- 帧数,f
设置过滤时使用的帧数。默认值为 30。
- threshold, t
设置检测阈值因子。默认值为 1。值越低越严格。
- skip
设置采样帧时跳过的像素数。默认值为 1。允许的范围是 1 到 1024。
- 旁路
保持帧不变。默认禁用。
39.193 pixdesctest
像素格式描述符测试滤镜,主要用于内部测试。输出视频应与输入视频相同。
例如
format=monow, pixdesctest
可用于测试单色白像素格式描述符定义。
39.194 pixelize
对视频流应用像素化。
该滤波器接受以下选项
- 宽度,w
- 高度,h
设置用于像素化的块维度。默认值为
16
。- mode, m
设置使用的像素化模式。
可能的值为
- ‘avg’
- ‘min’
- ‘max’
默认值为
avg
。- 平面,p
设置要过滤的平面。默认是过滤所有平面。
39.194.1 命令
此滤镜支持所有选项作为命令。
39.195 pixscope
显示颜色通道的采样值。主要用于检查颜色和色阶。支持的最小分辨率为 640x480。
这些滤镜接受以下选项
- x
设置示波器 X 位置,X 轴上的相对偏移量。
- y
设置示波器 Y 位置,Y 轴上的相对偏移量。
- w
设置示波器宽度。
- h
设置示波器高度。
- o
设置窗口不透明度。此窗口还包含有关像素区域的统计信息。
- wx
设置窗口 X 位置,X 轴上的相对偏移量。
- wy
设置窗口 Y 位置,Y 轴上的相对偏移量。
39.195.1 命令
此滤镜支持与选项相同的命令。
39.196 pp
使用 libpostproc 启用指定的后处理子滤镜链。此库应使用 GPL 版本(--enable-gpl
)自动选择。子滤镜必须用 “/” 分隔,并且可以通过添加 “-” 来禁用。每个子滤镜和某些选项都有一个短名称和一个长名称,可以互换使用,即 dr/dering 是相同的。
这些滤镜接受以下选项
- 子滤镜
设置后处理子滤镜字符串。
所有子滤镜都共享用于确定其范围的通用选项
- 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]]], 时间噪声降低器
- threshold1
值越大 -> 过滤越强
- threshold2
值越大 -> 过滤越强
- threshold3
值越大 -> 过滤越强
- al/autolevels[:f/fullyrange], 自动亮度/对比度校正
- 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.196.1 示例
- 应用水平和垂直去块、去振铃以及自动亮度/对比度
pp=hb/vb/dr/al
- 应用默认滤镜,但不进行亮度/对比度校正
pp=de/-al
- 应用默认滤镜和时间去噪器
pp=default/tmpnoise|1|2|3
- 仅对亮度应用去块,并根据可用的 CPU 时间自动打开或关闭垂直去块
pp=hb|y/vb|a
39.197 pp7
应用后处理滤镜 7。它是 spp 滤镜的变体,类似于 spp = 6 和 7 点 DCT,其中 IDCT 后仅使用中心样本。
该滤波器接受以下选项
- qp
强制使用恒定的量化参数。它接受 0 到 63 范围内的整数。如果未设置,则滤镜将使用视频流中的 QP(如果可用)。
- mode
设置阈值模式。可用的模式有
- ‘hard’
设置硬阈值。
- ‘soft’
设置软阈值(去振铃效果更好,但可能更模糊)。
- ‘medium’
设置中等阈值(效果良好,默认)。
39.198 premultiply
使用第二流的第一个平面作为 alpha,对输入视频流应用 alpha 预乘效果。
两个流必须具有相同的尺寸和相同的像素格式。
该滤波器接受以下选项
- planes
设置将要处理的平面,未处理的平面将被复制。默认值为 0xf,将处理所有平面。
- inplace
不需要第二个输入进行处理,而是使用输入流中的 alpha 平面。
39.199 prewitt
对输入视频流应用 Prewitt 算子。
该滤波器接受以下选项
- planes
设置将要处理的平面,未处理的平面将被复制。默认值为 0xf,将处理所有平面。
- scale
设置将与滤波结果相乘的值。
- delta
设置将添加到滤波结果的值。
39.199.1 命令
此滤波器支持上述所有选项作为命令。
39.200 pseudocolor
使用伪色更改视频中的帧颜色。
此过滤器接受以下选项
- c0
设置像素的第一个分量表达式
- c1
设置像素第二分量表达式
- c2
设置像素第三分量表达式
- c3
设置像素第四分量表达式,对应于 alpha 分量
- 索引,i
设置用于更改颜色的基础分量
- 预设,p
选择一个内置的 LUT。默认设置为 none。
可用的 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
输入宽度和高度。
- 设置将在颜色差异计算中使用的饱和度值。允许范围为 -1 到 1。默认值为 0。
像素分量的输入值。
- ymin, umin, vmin, amin
允许的最小分量值。
- ymax, umax, vmax, amax
允许的最大分量值。
所有表达式默认值为 "val"。
39.200.1 命令
此滤波器支持上述所有选项作为命令。
39.200.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.201 psnr
获取两个输入视频之间的平均、最大和最小 PSNR(峰值信噪比)。
此滤镜接收两个输入视频,第一个输入被视为“主”源,并按原样传递到输出。第二个输入用作计算 PSNR 的“参考”视频。
为了使此滤镜正常工作,两个视频输入必须具有相同的分辨率和像素格式。它还假设两个输入具有相同数量的帧,并且逐帧进行比较。
获得的平均 PSNR 通过日志系统打印出来。
该滤镜存储每帧累积的 MSE(均方误差),在处理结束时,它在所有帧上平均分配,并应用以下公式以获得 PSNR
PSNR = 10*log10(MAX^2/MSE)
其中 MAX 是图像每个分量的最大值的平均值。
以下是对接受参数的描述。
- stats_file, f
如果指定,滤镜将使用指定的文件来保存每个单独帧的 PSNR。当文件名等于“-”时,数据将发送到标准输出。
- stats_version
指定要使用的统计文件格式的版本。每个格式的详细信息写在下面。默认值为 1。
- stats_add_max
确定是否将最大值输出到统计日志。默认值为 0。需要 stats_version >= 2。如果设置了此项且 stats_version < 2,则滤镜将返回错误。
此滤镜还支持 framesync 选项。
如果选择 stats_file,则打印的文件包含每个比较的帧对的 key:value 形式的键/值对序列。
如果指定了大于 1 的 stats_version,则在每个帧对统计信息列表之前,会有一个标题行,其中包含具有以下参数的帧格式的键值对
- 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.201.1 示例
- 例如
movie=ref_movie.mpg, setpts=PTS-STARTPTS [main]; [main][ref] psnr="stats_file=stats.log" [out]
在此示例中,正在处理的输入文件与参考文件 ref_movie.mpg 进行比较。每个单独帧的 PSNR 存储在 stats.log 中。
- 另一个具有不同容器的示例
ffmpeg -i main.mpg -i ref.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]psnr" -f null -
39.202 pullup
下拉反转(反向电视电影)滤镜,能够处理混合的硬电视电影、24000/1001 fps 逐行和 30000/1001 fps 逐行内容。
上拉滤镜旨在利用未来上下文来做出决策。此滤镜是无状态的,因为它不会锁定要遵循的模式,而是向前查看以下场以识别匹配项并重建逐行帧。
要生成具有均匀帧率的内容,请在 pullup 之后插入 fps 滤镜,如果输入帧率为 29.97fps,则使用 fps=24000/1001
,对于 30fps 和(罕见的)电视电影 25fps 输入,则使用 fps=24
。
该滤波器接受以下选项
- jl
- jr
- jt
- jb
这些选项分别设置要忽略的图像左侧、右侧、顶部和底部的“垃圾”量。左侧和右侧以 8 像素为单位,而顶部和底部以 2 行为单位。默认值为每边 8 像素。
- sb
设置严格中断。将此选项设置为 1 将减少滤镜生成偶尔不匹配帧的机会,但这也可能导致在高运动序列期间丢弃过多的帧。相反,将其设置为 -1 将使滤镜更容易匹配场。这可能有助于处理场之间存在轻微模糊的视频,但也可能导致输出中出现隔行扫描帧。默认值为
0
。- mp
设置要使用的度量平面。它接受以下值
- ‘l’
使用亮度平面。
- ‘u’
使用色度蓝色平面。
- ‘v’
使用色度红色平面。
可以设置此选项以使用色度平面而不是默认亮度平面进行滤镜的计算。这可能会提高非常干净的源材料的准确性,但更可能会降低准确性,尤其是在存在色度噪声(彩虹效应)或任何灰度视频的情况下。将 mp 设置为色度平面的主要目的是减少 CPU 负载,并使 pullup 可以在慢速机器上实时使用。
为了获得最佳结果(在输出文件中没有重复帧),有必要更改输出帧率。例如,要反向电视电影 NTSC 输入
ffmpeg -i input -vf pullup -r 24000/1001 ...
39.203 qp
更改视频量化参数 (QP)。
该滤波器接受以下选项
- qp
设置量化参数的表达式。
该表达式通过 eval API 进行评估,并且可以包含以下常量,等等
- known
如果索引不是 129,则为 1,否则为 0。
- qp
从 -129 到 128 的顺序索引。
39.203.1 示例
- 类似的一些等式
qp=2+2*sin(PI*qp)
39.204 qrencode
使用 libqrencode 库(请参阅 https://fukuchi.org/works/qrencode/)生成 QR 码,并将其覆盖在当前帧的顶部。
要启用此滤镜的编译,您需要使用 --enable-libqrencode
配置 FFmpeg。
QR 码是根据提供的文本或文本模式生成的。相应的 QR 码根据指定的选项缩放并覆盖到视频输出中。
如果未指定文本,则不会覆盖 QR 码。
此过滤器接受以下选项
- qrcode_width, q
- padded_qrcode_width, Q
指定渲染的 QR 码的宽度表达式,带有和不带有填充。 qrcode_width 表达式可以引用 padded_qrcode_width 表达式设置的值,反之亦然。默认情况下,padded_qrcode_width 设置为 qrcode_width,这意味着没有填充。
这些表达式针对每个新帧进行评估。
有关详细信息,请参阅 qrencode 表达式 部分。
- x
- y
指定用于定位填充的 QR 码左上角的表达式。x 表达式可以引用 y 表达式设置的值,反之亦然。
默认情况下,x 和 y 都设置为 0,这意味着 QR 码放置在输入的左上角。
这些表达式针对每个新帧进行评估。
有关详细信息,请参阅 qrencode 表达式 部分。
- case_sensitive, cs
指示 libqrencode 使用区分大小写的编码。默认启用此功能。可以禁用此功能以减小 QR 编码的大小。
- level, l
指定 QR 编码的纠错级别。纠错级别越高,编码尺寸越大,但代码对损坏的鲁棒性更强。最低级别为 L。
它接受以下值
- ‘L’
- ‘M’
- ‘Q’
- ‘H’
- expansion
选择如何扩展输入文本。可以是
none
或normal
(默认)。有关详细信息,请参阅下面的 qrencode 文本扩展部分。- text
- textfile
定义要渲染的文本。如果两者都未指定,则不进行 QR 编码(仅为一个空的彩色边框)。
如果启用了扩展,则该文本将被视为文本模板,使用 qrencode 扩展机制。有关详细信息,请参阅下面的 qrencode 文本扩展部分。
- background_color, bc
- foreground_color, fc
设置 QR 代码和背景颜色。foreground_color 的默认值为“黑色”,background_color 的默认值为“白色”。
有关颜色选项的语法,请查看 (ffmpeg-utils) 手册中的“颜色”部分。
39.204.1 qrencode 表达式
选项设置的表达式包含以下常量和函数。
- dar
输入显示宽高比,与 (w / h) * sar 相同
- duration
当前帧的持续时间,以秒为单位
- hsub
- vsub
水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。
- main_h, H
输入高度
- main_w, W
输入宽度
- n
输入帧数,从 0 开始
- pict_type
表示图片类型的数字
- qr_w, w
编码的 QR 代码的宽度
- rendered_qr_w, q
- rendered_padded_qr_w, Q
渲染的 QR 代码的宽度,不带和带有填充。
这些参数允许 q 和 Q 表达式相互引用,例如,您可以指定
q=3/4*Q
。- rand(min, max)
返回 min 和 max 之间的随机数
- sar
输入样本的宽高比
- t
时间戳,以秒为单位表示,如果输入时间戳未知,则为 NAN
- x
- y
绘制文本的 x 和 y 偏移坐标。
这些参数允许 x 和 y 表达式相互引用,因此您可以例如指定
y=x/dar
。
39.204.2 qrencode 文本扩展
如果 expansion 设置为 none
,则文本将按原样打印。
如果 expansion 设置为 normal
(默认值),则使用以下展开机制。
反斜杠字符“\”后跟任何字符,始终展开为第二个字符。
形式为 %{...}
的序列将被展开。大括号之间的文本是函数名称,后面可能跟有以“:”分隔的参数。如果参数包含特殊字符或分隔符(“:”或“}”),则应将其转义。
请注意,它们可能还必须转义为过滤器参数字符串中 text 选项的值,以及过滤器图描述中的过滤器参数,可能还需要转义外壳,这最多构成四个级别的转义;使用带有 textfile 选项的文本文件可以避免这些问题。
以下函数可用
n,frame_num
返回帧号
pts
返回当前帧的呈现时间戳。
它最多可以接受两个参数。
第一个参数是时间戳的格式;它默认为
flt
,表示以微秒精度表示的十进制秒数;hms
表示格式为 [-]HH:MM:SS.mmm 的毫秒精度时间戳。gmtime
表示格式化为 UTC 时间的帧的时间戳;localtime
表示格式化为本地时区时间的帧的时间戳。如果格式设置为hms24hh
,则时间将以 24 小时格式 (00-23) 格式化。第二个参数是添加到时间戳的偏移量。
如果格式设置为
localtime
或gmtime
,则可以提供第三个参数:一个strftime
C 函数格式字符串。默认情况下,将使用 YYYY-MM-DD HH:MM:SS 格式。expr, e
评估表达式的值并以双精度形式输出。
它必须接受一个参数,指定要评估的表达式,接受 qrencode_expressions 中定义的常量和函数。
expr_formatted, ef
评估表达式的值并以格式化的字符串输出。
第一个参数是要计算的表达式,与 expr 函数相同。第二个参数指定输出格式。允许的值为 ‘x’、‘X’、‘d’ 和 ‘u’。它们的使用方式与
printf
函数中完全相同。第三个参数是可选的,用于设置输出占用的位置数。它可用于从左侧添加零填充。gmtime
滤波器运行的时间,以 UTC 表示。它可以接受一个参数:一个
strftime
C 函数格式字符串。格式字符串被扩展为支持变量 %[1-6]N,它打印秒的小数部分,并可选择指定位数。localtime
滤波器运行的时间,以本地时区表示。它可以接受一个参数:一个
strftime
C 函数格式字符串。格式字符串被扩展为支持变量 %[1-6]N,它打印秒的小数部分,并可选择指定位数。metadata
帧元数据。接受一个或两个参数。
第一个参数是必需的,指定元数据键。
第二个参数是可选的,指定一个默认值,当找不到元数据键或元数据键为空时使用。
可通过检查运行
ffprobe -show_frames
打印的每个帧部分中以 TAG 开头的条目来识别可用的元数据。在导致 qrencode 过滤器的过滤器中生成的字符串元数据也可用。
rand(min, max)
返回 min 和 max 之间的随机数
39.204.3 示例
- 生成一个使用默认大小编码指定文本的 QR 代码,以默认大小叠加在输入视频的左上角。
qrencode=text=www.ffmpeg.org
- 与下面相同,但选择蓝色和粉红色
qrencode=text=www.ffmpeg.org:[email protected]:fc=blue
- 将 QR 代码放置在输入视频的右下角
qrencode=text=www.ffmpeg.org:x=W-Q:y=H-Q
- 生成一个宽度为 200 像素且带填充的 QR 代码,使填充后的宽度为 QR 代码宽度的 4/3。
qrencode=text=www.ffmpeg.org:q=200:Q=4/3*q
- 生成一个填充宽度为 200 像素且带填充的 QR 代码,使 QR 代码的宽度为填充宽度的 3/4。
qrencode=text=www.ffmpeg.org:Q=200:q=3/4*Q
- 使 QR 代码为输入视频宽度的一部分
qrencode=text=www.ffmpeg.org:q=W/5
- 生成一个编码帧号的 QR 代码
qrencode=text=%{n}
- 生成一个编码 GMT 时间戳的 QR 代码
qrencode=text=%{gmtime}
- 生成一个以浮点数表示的时间戳的 QR 代码
qrencode=text=%{pts}
39.205 quirc
使用 libquirc 库(请参阅 https://github.com/dlbeer/quirc/)识别和解码 QR 代码,并将识别出的 QR 代码的位置和有效负载作为元数据打印出来。
要启用此过滤器的编译,您需要使用 --enable-libquirc
配置 FFmpeg。
对于输入视频中找到的每个 QR 代码,都会添加一些带有前缀 lavfi.quirc.N 的元数据条目,其中 N 是与 QR 代码关联的索引,从 0 开始。
下面是每个元数据值的描述
- lavfi.quirc.count
找到的 QR 代码的数量,如果没有找到任何 QR 代码,则不会设置此值
- lavfi.quirc.N.corner.M.x
- lavfi.quirc.N.coreer.M.y
包含 QR 代码的正方形的四个角的 x/y 位置,其中 M 是从 0 开始的角的索引
- lavfi.quirc.N.payload
QR 代码的有效负载
39.206 random
将视频帧从内部帧缓存区以随机顺序刷新出来。不会丢弃任何帧。灵感来自 frei0r nervous 滤镜。
- frames
设置内部缓存的帧数大小,范围从
2
到512
。默认值为30
。- seed
为随机数生成器设置种子,必须是包含在
0
和UINT32_MAX
之间的整数。如果未指定,或者显式设置为小于0
,则过滤器将尽最大努力尝试使用良好的随机种子。
39.207 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.207.1 命令
此滤波器支持上述所有选项作为命令。
39.207.2 示例
- 输出一个 csv 文件,其中包含呈现时间和前两行识别出的 EIA-608 字幕数据。
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.208 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.208.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.209 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) 手册中的“颜色”部分。默认颜色为
black
。
39.210 removegrain
removegrain 滤镜是用于逐行视频的空间去噪器。
- m0
设置第一个平面的模式。
- m1
设置第二个平面的模式。
- m2
设置第三个平面的模式。
- m3
设置第四个平面的模式。
模式范围为 0 到 24。每个模式的描述如下
- 0
保持输入平面不变。默认值。
- 1
使用 8 个相邻像素的最小值和最大值剪切像素。
- 2
使用 8 个相邻像素的第二最小值和最大值剪切像素。
- 3
使用 8 个相邻像素的第三最小值和最大值剪切像素。
- 4
使用 8 个相邻像素的第四最小值和最大值剪切像素。这等效于中值滤波器。
- 5
线敏感剪切,给出最小的变化。
- 6
线敏感剪切,中间值。
- 7
线敏感剪切,中间值。
- 8
线敏感剪切,中间值。
- 9
在相邻像素最接近的线上进行线敏感剪切。
- 10
用最接近的相邻像素替换目标像素。
- 11
[1 2 1] 水平和垂直内核模糊。
- 12
与模式 11 相同。
- 13
Bob 模式,从相邻像素最接近的行插值顶部场。
- 14
Bob 模式,从相邻像素最接近的行插值底部场。
- 15
Bob 模式,插值顶部场。与 13 相同,但具有更复杂的插值公式。
- 16
Bob 模式,插值底部场。与 14 相同,但具有更复杂的插值公式。
- 17
使用每对相反相邻像素的最大值和最小值剪切像素,分别取最小值和最大值。
- 18
使用与当前像素距离最小的相反相邻像素进行线敏感剪切。
- 19
用 8 个相邻像素的平均值替换该像素。
- 20
平均 9 个像素([1 1 1] 水平和垂直模糊)。
- 21
使用相反相邻像素的平均值剪切像素。
- 22
与模式 21 相同,但更简单、更快。
- 23
小的边缘和光晕去除,但据说是无用的。
- 24
与 23 类似。
39.211 removelogo
使用图像文件确定哪些像素组成徽标,从而抑制电视台徽标。它通过用相邻像素填充构成徽标的像素来实现。
该滤波器接受以下选项
- filename, f
设置滤镜位图文件,该文件可以是 libavformat 支持的任何图像格式。图像文件的宽度和高度必须与正在处理的视频流的宽度和高度相匹配。
提供的位图图像中值为零的像素不被视为徽标的一部分,非零像素被视为徽标的一部分。如果对徽标使用白色 (255),对其余部分使用黑色 (0),则您将是安全的。要制作滤镜位图,建议使用徽标可见的黑色帧进行屏幕捕获,然后使用阈值滤镜,然后使用侵蚀滤镜一到两次。
如果需要,可以手动修复小的斑点。请记住,如果徽标像素未被覆盖,则滤镜质量将大大降低。将太多像素标记为徽标的一部分不会造成太大损害,但会增加覆盖图像所需的模糊量,并且会破坏比必要更多的信息,并且额外的像素会减慢大型徽标的速度。
39.212 repeatfields
此滤镜使用来自视频 ES 标头的 repeat_field 标志,并根据其值硬重复场。
39.213 reverse
反转视频剪辑。
警告:此过滤器需要内存来缓冲整个剪辑,因此建议进行修剪。
39.213.1 示例
- 获取剪辑的前 5 秒,并将其反转。
trim=end=5,reverse
39.214 rgbashift
水平和/或垂直移动 R/G/B/A 像素。
该滤波器接受以下选项
- rh
设置红色水平移动量。
- rv
设置红色垂直移动量。
- gh
设置绿色水平移动量。
- gv
设置绿色垂直移动量。
- bh
设置蓝色水平移动量。
- bv
设置蓝色垂直移动量。
- ah
设置 alpha 水平移动量。
- av
设置 alpha 垂直移动量。
- edge
设置边缘模式,可以是 smear(默认)或 warp。
39.214.1 命令
此滤波器支持上述所有选项作为命令。
39.215 roberts
将罗伯茨交叉算子应用于输入视频流。
该滤波器接受以下选项
- planes
设置将要处理的平面,未处理的平面将被复制。默认值为 0xf,将处理所有平面。
- scale
设置将与滤波结果相乘的值。
- delta
设置将添加到滤波结果的值。
39.215.1 命令
此滤波器支持上述所有选项作为命令。
39.216 rotate
将视频按任意角度(以弧度表示)旋转。
该滤波器接受以下选项
以下是对可选参数的描述。
- angle, a
设置用于旋转输入视频的表达式,以顺时针方向的弧度数表示。负值将导致逆时针旋转。默认情况下,它设置为“0”。
此表达式针对每一帧进行评估。
- out_w, ow
设置输出宽度表达式,默认值为“iw”。此表达式在配置期间仅评估一次。
- out_h, oh
设置输出高度表达式,默认值为“ih”。此表达式在配置期间仅评估一次。
- bilinear
如果设置为 1,则启用双线性插值,值为 0 则禁用它。默认值为 1。
- fillcolor, c
设置用于填充旋转图像未覆盖的输出区域的颜色。有关此选项的一般语法,请查看 (ffmpeg-utils) 手册中的“颜色”部分。如果选择特殊值“none”,则不打印背景(例如,如果从不显示背景,则很有用)。
默认值为“black”。
角度和输出大小的表达式可以包含以下常量和函数
- n
输入帧的顺序号,从 0 开始。在过滤第一帧之前,它始终为 NAN。
- t
输入帧的时间(以秒为单位),在配置滤镜时设置为 0。在过滤第一帧之前,它始终为 NAN。
- hsub
- vsub
水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。
- 输入宽度,iw
- 输入高度,ih
输入视频的宽度和高度
- out_w, ow
- out_h, oh
输出宽度和高度,即由 width 和 height 表达式指定的填充区域的大小
- rotw(a)
- roth(a)
完全包含按 a 弧度旋转的输入视频所需的最小宽度/高度。
这些仅在计算 out_w 和 out_h 表达式时可用。
39.216.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.216.2 命令
该过滤器支持以下命令
- a, angle
设置角度表达式。该命令接受相应选项的相同语法。
如果指定的表达式无效,则保持其当前值。
39.217 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.218 scale
使用 libswscale 库缩放(调整大小)输入视频。
缩放滤镜通过更改输出采样宽高比,强制输出显示宽高比与输入相同。
如果输入图像格式与下一个滤镜要求的格式不同,则缩放滤镜会将输入转换为要求的格式。
39.218.1 选项
该滤镜接受以下选项,libswscale 缩放器支持的任何选项,以及任何 framesync 选项。
有关缩放器选项的完整列表,请参阅 (ffmpeg-scaler)ffmpeg-scaler 手册。
- 宽度,w
- 高度,h
设置输出视频尺寸表达式。默认值为输入尺寸。
如果 width 或 w 值是 0,则输出使用输入宽度。如果 height 或 h 值是 0,则输出使用输入高度。
如果只有一个值是 -n 且 n >= 1,则缩放滤镜将使用一个值来保持输入图像的宽高比,该值从另一个指定的维度计算得出。之后,它会确保计算出的维度可以被 n 整除,并在必要时调整该值。
如果两个值都是 -n 且 n >= 1,则行为与之前详细说明的两个值都设置为 0 时相同。
请参阅下面列表中可用于尺寸表达式的常量。
- eval
指定何时评估 width 和 height 表达式。它接受以下值
- ‘init’
仅在过滤器初始化期间或处理命令时评估表达式一次。
- ‘frame’
为每个传入帧对表达式求值。
默认值为 ‘init’。
- interl
设置隔行扫描模式。它接受以下值
- ‘1’
强制进行隔行扫描感知缩放。
- ‘0’
不应用隔行扫描缩放。
- ‘-1’
根据源帧是否标记为隔行扫描来选择隔行扫描感知缩放。
默认值为 ‘0’。
- flags
设置 libswscale 缩放标志。有关完整的值列表,请参阅 (ffmpeg-scaler)ffmpeg-scaler 手册。如果未显式指定,则滤镜应用默认标志。
- param0, param1
设置 libswscale 输入参数,用于需要这些参数的缩放算法。有关完整文档,请参阅 (ffmpeg-scaler)ffmpeg-scaler 手册。如果未显式指定,则滤镜应用空参数。
- intent
设置在不同颜色空间之间转换时要使用的 ICC 渲染意图。它接受以下值
- ‘perceptual’
使用感知引导的色调和色域映射曲线。使用的映射的具体细节可能会随时更改,不应将其视为稳定。建议在典型观看设置中最终观看图像/视频内容时使用此意图。
- ‘relative_colorimetric’
使用色度裁剪曲线静态裁剪超出色域的颜色,该曲线尝试找到色度上最不相似的在色域内的颜色。此意图执行白点适应和黑点适应。这是默认设置。建议在忠实颜色再现至关重要时使用此意图,即使以裁剪为代价。
- ‘absolute_colorimetric’
硬裁剪超出色域的颜色,而不尝试进行白点或黑点再现。此意图将在输出显示器上以 1:1 的比例再现色域内的颜色,就像它们在参考显示器上显示的一样,前提是输出显示器已适当校准。
- ‘saturation’
执行饱和度映射 - 即,以非线性方式将输入颜色体积直接拉伸到输出颜色体积上,尽可能保留原始信号外观。建议用于信号内容评估,因为它不会导致任何裁剪。它大致类似于不执行任何颜色映射,尽管它仍然会考虑母版显示器的原色和编码 TRC 的任何差异。
- size, s
设置视频大小。有关此选项的语法,请查看 (ffmpeg-utils)ffmpeg-utils 手册中的“视频大小”部分。
- in_color_matrix
- out_color_matrix
设置输入/输出 YCbCr 色彩空间类型。
这允许覆盖自动检测到的值,并允许强制用于输出和编码器的特定值。
如果未指定,则色彩空间类型取决于像素格式。
可能的值:
- ‘auto’
自动选择。
- ‘bt709’
符合国际电信联盟(ITU)建议 BT.709 的格式。
- ‘fcc’
设置符合美国联邦通信委员会(FCC)联邦法规(CFR)第 47 篇(2003)73.682(a)规定的色彩空间。
- “bt601”
- ‘bt470’
- ‘smpte170m’
设置符合
- 国际电信联盟无线电通信部门(ITU-R)建议 BT.601 的色彩空间
- ITU-R Rec. BT.470-6(1998)系统 B、B1 和 G
- 电影与电视工程师学会(SMPTE)ST 170:2004
- ‘smpte240m’
设置符合 SMPTE ST 240:1999 的色彩空间。
- ‘bt2020’
设置符合 ITU-R BT.2020 非恒定亮度系统的色彩空间。
- in_range
- out_range
设置输入/输出 YCbCr 采样范围。
这允许覆盖自动检测到的值,并允许强制用于输出和编码器的特定值。如果未指定,则范围取决于像素格式。可能的值
- ‘auto/unknown’
自动选择。
- ‘jpeg/full/pc’
设置全范围(在 8 位亮度的情况下为 0-255)。
- ‘mpeg/limited/tv’
设置“MPEG”范围(在 8 位亮度的情况下为 16-235)。
- in_chroma_loc
- out_chroma_loc
设置输入/输出色度采样位置。如果未指定,默认使用中心色度。可能的值
- ‘auto, unknown’
- ‘left’
- ‘center’
- ‘topleft’
- ‘top’
- ‘bottomleft’
- ‘bottom’
- in_primaries
- out_primaries
设置输入/输出 RGB 原色。
这允许覆盖自动检测到的值,并允许强制用于输出和编码器的特定值。可能的值
- ‘auto’
自动选择。这是默认设置。
- ‘bt709’
- ‘bt470m’
- ‘bt470bg’
- ‘smpte170m’
- ‘smpte240m’
- ‘film’
- ‘bt2020’
- ‘smpte428’
- ‘smpte431’
- ‘smpte432’
- ‘jedec-p22’
- ‘ebu3213’
- in_transfer
- out_transfer
设置输入/输出传输响应曲线(TRC)。
这允许覆盖自动检测到的值,并允许强制用于输出和编码器的特定值。可能的值
- ‘auto’
自动选择。这是默认设置。
- ‘bt709’
- ‘bt470m’
- ‘gamma22’
- ‘bt470bg’
- ‘gamma28’
- ‘smpte170m’
- ‘smpte240m’
- ‘linear’
- ‘iec61966-2-1’
- ‘srgb’
- ‘iec61966-2-4’
- ‘xvycc’
- ‘bt1361e’
- ‘bt2020-10’
- ‘bt2020-12’
- ‘smpte2084’
- ‘smpte428’
- ‘arib-std-b67’
- force_original_aspect_ratio
启用在必要时减小或增加输出视频宽度或高度以保持原始宽高比。可能的值
- ‘disable’
按指定缩放视频并禁用此功能。
- ‘decrease’
如果需要,将自动减小输出视频尺寸。
- ‘increase’
如果需要,将自动增加输出视频尺寸。
此选项的一个有用实例是,当您知道特定设备允许的最大分辨率时,您可以使用此选项将输出视频限制在该分辨率,同时保持宽高比。例如,设备 A 允许 1280x720 播放,而您的视频是 1920x800。使用此选项(将其设置为减小)并在命令行中指定 1280x720,则输出为 1280x533。
请注意,这与为 w 或 h 指定 -1 是不同的,您仍然需要指定输出分辨率才能使此选项生效。
- force_divisible_by
当与 force_original_aspect_ratio 一起使用时,确保输出尺寸(宽度和高度)都可以被给定的整数整除。这与在 w 和 h 选项中使用
-n
类似。此选项会遵守为 force_original_aspect_ratio 设置的值,从而相应地增加或减少分辨率。视频的宽高比可能会略有修改。
如果需要在使用 force_original_aspect_ratio 时使视频适合或超出定义的分辨率,但同时编码器对宽度或高度的可除性有限制,则此选项会非常方便。
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
中可用。已弃用,请勿使用。- ref_w, rw
- ref_h, rh
- ref_a
- ref_dar, rdar
- ref_n
- ref_t
- ref_pos
与上述等效,但用于第二个参考输入。如果存在任何这些变量,则此过滤器接受两个输入。
39.218.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
- 缩放字幕流 (sub) 以匹配主视频 (main) 的大小,然后再进行叠加。(“scale2ref”)
'[main]split[a][b]; [ref][a]scale=rw:rh[c]; [b][c]overlay'
- 将徽标缩放到视频高度的 1/10,同时保留其显示宽高比。
[logo-in][video-in]scale=w=oh*dar:h=rh/10[logo-out]
39.218.3 命令
此滤波器支持以下命令
- 宽度,w
- 高度,h
设置输出视频尺寸表达式。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
39.219 scale_cuda
使用加速的 CUDA 内核缩放(调整大小)和转换(像素格式)输入视频。设置输出宽度和高度的方式与 scale 滤镜相同。
该滤波器接受以下选项
- w
- h
设置输出视频尺寸表达式。默认值为输入尺寸。
允许与 scale 滤镜相同的表达式。
- interp_algo
设置用于缩放的算法
- 最近的
最近邻
如果输入参数与所需的输出匹配,则默认使用。
- bilinear
双线性
- 双三次
双三次
这是默认值。
- lanczos
Lanczos
- format
控制输出像素格式。默认情况下,或者如果未指定,则使用输入像素格式。
该过滤器不支持在 YUV 和 RGB 像素格式之间进行转换。
- passthrough
如果设置为 0,则会处理每个帧,即使不需要转换也是如此。此模式对于将过滤器用作下游帧消费者的缓冲区非常有用,该消费者会耗尽有限的解码器帧池。
如果设置为 1,则如果帧与所需的输出参数匹配,则按原样传递。这是默认行为。
- param
算法特定的参数。
影响双三次算法的曲线。
- force_original_aspect_ratio
- force_divisible_by
与相同的 scale 滤镜选项工作方式相同。
39.219.1 示例
- 将输入缩放到 720p,保持宽高比并确保输出为 yuv420p。
scale_cuda=-2:720:format=yuv420p
- 使用最近邻算法放大到 4K。
scale_cuda=4096:2160:interp_algo=nearest
- 不进行任何转换或缩放,而是将所有输入帧复制到新分配的帧中。这对于处理过滤器和编码链非常有用,否则会耗尽解码器的帧池。
scale_cuda=passthrough=0
39.220 scale_npp
使用 NVIDIA Performance Primitives (libnpp) 在 CUDA 视频帧上执行缩放和/或像素格式转换。设置输出宽度和高度的方式与 scale 滤镜相同。
接受以下其他选项
- 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。
请注意,这与为 w 或 h 指定 -1 是不同的,您仍然需要指定输出分辨率才能使此选项生效。
- force_divisible_by
当与 force_original_aspect_ratio 一起使用时,确保输出尺寸(宽度和高度)都可以被给定的整数整除。这与在 w 和 h 选项中使用
-n
类似。此选项会遵守为 force_original_aspect_ratio 设置的值,从而相应地增加或减少分辨率。视频的宽高比可能会略有修改。
如果需要在使用 force_original_aspect_ratio 时使视频适合或超出定义的分辨率,但同时编码器对宽度或高度的可除性有限制,则此选项会非常方便。
- eval
指定何时评估 width 和 height 表达式。它接受以下值
- ‘init’
仅在过滤器初始化期间或处理命令时评估表达式一次。
- ‘frame’
为每个传入帧对表达式求值。
w 和 h 选项的值是包含以下常量的表达式
- in_w
- in_h
输入宽度和高度
- iw
- ih
这些与 in_w 和 in_h 相同。
- out_w
- out_h
输出(缩放)宽度和高度
- ow
- oh
这些与 out_w 和 out_h 相同
- a
与 iw / ih 相同
- sar
输入样本纵横比
- dar
输入显示宽高比。从
(iw / ih) * sar
计算得出。- n
输入帧的(顺序)编号,从 0 开始。仅在
eval=frame
中可用。- t
输入帧的显示时间戳,以秒为单位表示。仅在
eval=frame
中可用。- pos
帧在输入流中的位置(字节偏移量),如果此信息不可用和/或无意义(例如,对于合成视频),则为 NaN。仅在
eval=frame
中可用。已弃用,请勿使用。
39.221 scale2ref_npp
使用 NVIDIA Performance Primitives (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.221.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.222 scale_vt
使用 VTPixelTransferSession 缩放和转换颜色参数。
该滤波器接受以下选项
- w
- h
设置输出视频尺寸表达式。默认值为输入尺寸。
- color_matrix
设置输出颜色空间矩阵。
- color_primaries
设置输出颜色原色。
- color_transfer
设置输出传输特性。
39.223 scharr
将 scharr 算子应用于输入视频流。
该滤波器接受以下选项
- planes
设置将要处理的平面,未处理的平面将被复制。默认值为 0xf,将处理所有平面。
- scale
设置将与滤波结果相乘的值。
- delta
设置将添加到滤波结果的值。
39.223.1 命令
此滤波器支持上述所有选项作为命令。
39.224 scroll
以恒定速度水平和/或垂直滚动输入视频。
该滤波器接受以下选项
- horizontal, h
设置水平滚动速度。默认值为 0。允许的范围为 -1 到 1。负值会改变滚动方向。
- vertical, v
设置垂直滚动速度。默认值为 0。允许的范围为 -1 到 1。负值会改变滚动方向。
- hpos
设置初始水平滚动位置。默认值为 0。允许的范围为 0 到 1。
- vpos
设置初始垂直滚动位置。默认值为 0。允许的范围为 0 到 1。
39.224.1 命令
此滤镜支持以下命令
- horizontal, h
设置水平滚动速度。
- vertical, v
设置垂直滚动速度。
39.225 scdet
检测视频场景变化。
此滤镜设置帧元数据,包括帧之间的 mafd、场景得分,并将帧转发到下一个滤镜,以便它们可以使用这些元数据来检测场景变化或其他。
此外,当此滤镜通过 threshold 检测到场景变化时,它会记录一条消息并设置帧元数据。
lavfi.scd.mafd
元数据键会为每一帧设置 mafd。
lavfi.scd.score
元数据键会为每一帧设置场景变化得分,用于检测场景变化。
lavfi.scd.time
元数据键会设置当前检测到场景变化的帧的时间,并通过 threshold 检测。
该滤波器接受以下选项
- threshold, t
设置场景变化检测阈值,作为最大变化的百分比。较好的值在
[8.0, 14.0]
范围内。threshold 的范围为[0., 100.]
。默认值为
10.
。- sc_pass, s
设置标志以将场景变化帧传递到下一个滤镜。默认值为
0
。 如果您只想获取场景变化帧的快照,则可以启用它。
39.226 selectivecolor
将青色、洋红色、黄色和黑色 (CMYK) 调整到特定颜色范围(例如“红色”、“黄色”、“绿色”、“青色”等)。调整范围由颜色的“纯度”(即,它已经饱和的程度)定义。
此滤镜类似于 Adobe Photoshop 的“可选颜色”工具。
该滤波器接受以下选项
- correction_method
选择颜色校正方法。
可用值为
- ‘absolute’
指定的调整会“按原样”应用(添加到/减去原始像素组件值)。
- ‘relative’
指定的调整相对于原始组件值。
默认值为
absolute
。- reds
调整红色像素(红色分量最大的像素)
- yellows
调整黄色像素(蓝色分量最小的像素)
- greens
调整绿色像素(绿色分量最大的像素)
- cyans
调整青色像素(红色分量最小的像素)
- blues
调整蓝色像素(蓝色分量最大的像素)
- magentas
调整洋红色像素(绿色分量最小的像素)
- whites
调整白色像素(所有分量都大于 128 的像素)
- neutrals
调整所有像素,但纯黑色和纯白色除外
- blacks
调整黑色像素(所有分量都小于 128 的像素)
- psfile
指定一个 Photoshop 可选颜色文件 (
.asv
),从中导入设置。
所有调整设置(reds、yellows 等)最多接受 4 个空格分隔的浮点调整值,范围为 [-1,1],分别用于调整其范围像素的青色、洋红色、黄色和黑色的量。
39.226.1 示例
- 在每个绿色区域中将青色增加 50%,将黄色减少 33%,并在蓝色区域中将洋红色增加 27%
selectivecolor=greens=.5 0 -.33 0:blues=0 .27
- 使用 Photoshop 可选颜色预设
selectivecolor=psfile=MySelectiveColorPresets/Misty.asv
39.227 separatefields
separatefields
接受基于帧的视频输入,并将每个帧拆分为其组成场,从而产生一个帧速率和帧计数翻倍的新半高剪辑。
此滤镜使用帧中的场优势信息来决定每个场对中的哪个场先放置在输出中。如果它弄错了,请在 separatefields
滤镜之前使用 setfield 滤镜。
39.228 setdar, setsar
setdar
滤镜设置滤镜输出视频的显示宽高比。
这是通过根据以下等式更改指定的采样(也称为像素)宽高比来实现的
DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR
请记住,setdar
滤镜不会修改视频帧的像素尺寸。此外,此滤镜设置的显示宽高比可能会被滤镜链中后面的滤镜更改,例如在缩放或应用另一个“setdar”或“setsar”滤镜的情况下。
setsar
滤镜设置滤镜输出视频的采样(也称为像素)宽高比。
请注意,由于此滤镜的应用,输出显示宽高比将根据上述等式更改。
请记住,setsar
滤镜设置的采样宽高比可能会被滤镜链中后面的滤镜更改,例如,如果应用了另一个“setsar”或“setdar”滤镜。
它接受以下参数
- r、ratio、dar (仅
setdar
)、sar (仅setsar
) 设置滤镜使用的宽高比。
该参数可以是浮点数字符串或表达式。如果未指定参数,则假定值为“0”,这意味着使用相同的输入值。
- 最大值 (max)
设置在将表示的宽高比减少为有理数时用于表示分子和分母的最大整数值。默认值为
100
。
参数 sar 是一个包含以下常量的表达式
- w、h
输入宽度和高度。
- a
与 w / h 相同。
- sar
输入采样宽高比。
- dar
输入显示宽高比。它与 (w / h) * sar 相同。
- hsub、vsub
水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。
39.228.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.229 setfield
强制输出视频帧的场。
setfield
滤镜标记输出帧的隔行扫描类型场。它不会更改输入帧,而只是设置相应的属性,这会影响后续滤镜(例如 fieldorder
或 yadif
)如何处理帧。
该滤波器接受以下选项
- mode
可用值为
- ‘auto’
保持相同的场属性。
- ‘bff’
将帧标记为 bottom-field-first。
- ‘tff’
将帧标记为 top-field-first。
- ‘prog’
将帧标记为逐行扫描。
39.230 setparams
强制输出视频帧的帧参数。
setparams
滤镜标记输出帧的隔行扫描和颜色范围。它不会更改输入帧,而只是设置相应的属性,这会影响滤镜/编码器如何处理帧。
- field_mode
可用值为
- ‘auto’
保持相同的场属性(默认)。
- ‘bff’
将帧标记为 bottom-field-first。
- ‘tff’
将帧标记为 top-field-first。
- ‘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’
- chroma_location
设置色度采样位置。可用值为
- ‘auto’
保持相同的色度位置(默认)。
- ‘unspecified, unknown’
- ‘left’
- ‘center’
- ‘topleft’
- ‘top’
- ‘bottomleft’
- ‘bottom’
39.231 sharpen_npp
使用 NVIDIA Performance Primitives (libnpp) 执行带有边界控制的图像锐化。
接受以下其他选项
- border_type
要在帧边界使用的采样类型。以下之一
- replicate
复制像素值。
39.232 shear
对输入视频应用剪切变换。
此滤镜支持以下选项
- shx
X 方向的剪切因子。默认值为 0。允许的范围为 -2 到 2。
- shy
Y 方向的剪切因子。默认值为 0。允许的范围为 -2 到 2。
- fillcolor, c
设置用于填充未被变换视频覆盖的输出区域的颜色。有关此选项的常规语法,请查看 ffmpeg-utils 手册中的“颜色”部分。如果选择特殊值“none”,则不会打印背景(例如,如果背景永远不会显示,则很有用)。
默认值为“black”。
- interp
设置插值类型。可以是
bilinear
或nearest
。默认值为bilinear
。
39.232.1 命令
此滤波器支持上述所有选项作为命令。
39.233 showinfo
显示包含每个输入视频帧的各种信息的行。输入视频不会被修改。
此滤镜支持以下选项
- checksum
计算每个平面的校验和。默认情况下启用。
- udu_sei_as_ascii
如果可能,尝试将用户数据未注册 SEI 作为 ASCII 字符打印,否则以十六进制格式打印。
显示的行包含 key:value 形式的键/值对序列。
输出中显示以下值
- n
输入帧的(顺序)编号,从 0 开始。
- pts
输入帧的演示时间戳,表示为时间基准单位的数量。时间基准单位取决于滤镜输入填充。
- pts_time
输入帧的演示时间戳,表示为秒数。
- fmt
像素格式名称。
- sar
输入帧的采样纵横比,以 num/den 的形式表示。
- s
输入帧的大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。
- i
隔行扫描模式的类型(“P”表示“逐行扫描”,“T”表示顶场优先,“B”表示底场优先)。
- iskey
如果帧是关键帧,则为 1,否则为 0。
- type
输入帧的图片类型(“I”表示 I 帧,“P”表示 P 帧,“B”表示 B 帧,或“?”表示未知类型)。另请参阅 libavutil/avutil.h 中定义的
AVPictureType
枚举和av_get_picture_type_char
函数的文档。- checksum
输入帧的所有平面的 Adler-32 校验和(以十六进制打印)。
- plane_checksum
输入帧的每个平面的 Adler-32 校验和(以十六进制打印),以“c0 c1 c2 c3”的形式表示。
- mean
输入帧的每个平面中像素的平均值,以“mean0 mean1 mean2 mean3”的形式表示。
- stdev
输入帧的每个平面中像素值的标准偏差,以“stdev0 stdev1 stdev2 stdev3”的形式表示。
39.234 showpalette
显示每个帧的 256 色调色板。此滤镜仅与 pal8 像素格式的帧相关。
它接受以下选项
- s
设置用于表示一个调色板颜色条目的框的大小。默认值为
30
(对于30x30
像素的框)。
39.235 shuffleframes
重新排序和/或复制和/或删除视频帧。
它接受以下参数
- 映射
设置输入帧的目标索引。这是以空格或“|”分隔的索引列表,用于将输入帧映射到输出帧。索引的数量也设置了每个索引可能具有的最大值。“-1”索引具有特殊含义,即删除帧。
第一帧的索引为 0。默认设置是保持输入不变。
39.235.1 示例
- 交换输入中每三个帧的第二帧和第三帧
ffmpeg -i INPUT -vf "shuffleframes=0 2 1" OUTPUT
- 交换输入中每十个帧的第十帧和第一帧
ffmpeg -i INPUT -vf "shuffleframes=9 1 2 3 4 5 6 7 8 0" OUTPUT
39.236 shufflepixels
重新排序视频帧中的像素。
此过滤器接受以下选项
- direction, d
设置洗牌方向。可以是正向或反向。默认方向是正向。
- mode, m
设置洗牌模式。可以是水平、垂直或块模式。
- 宽度,w
- 高度,h
设置洗牌块大小。在水平洗牌模式下,仅使用大小的宽度部分;在垂直洗牌模式下,仅使用大小的高度部分。
- 种子,s
设置用于洗牌像素的随机种子。主要用于设置以便能够反转过滤过程以获取原始输入。例如,要反转正向洗牌,您需要使用相同的参数和完全相同的种子,并将方向设置为反向。
39.237 shuffleplanes
重新排序和/或复制视频平面。
它接受以下参数
- map0
用作第一个输出平面的输入平面的索引。
- map1
用作第二个输出平面的输入平面的索引。
- map2
用作第三个输出平面的输入平面的索引。
- map3
用作第四个输出平面的输入平面的索引。
第一个平面的索引为 0。默认设置是保持输入不变。
39.237.1 示例
- 交换输入的第二和第三个平面
ffmpeg -i INPUT -vf shuffleplanes=0:2:1:3 OUTPUT
39.238 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
-
stat 指定一种额外的图像分析形式。out 输出带有指定类型像素高亮的视频。
两个选项都接受以下值
- ‘tout’
识别时间异常值像素。时间异常值是指与同一场中相邻像素不同的像素。时间异常值的例子包括视频丢失、磁头堵塞或磁带跟踪问题导致的结果。
- ‘vrep’
识别垂直线重复。垂直线重复包括帧内相似的像素行。在原生数字视频中,垂直线重复很常见,但在从模拟源数字化的视频中,这种模式并不常见。当它出现在从模拟源数字化产生的视频中时,它可能表示来自丢失补偿器的隐藏。
- ‘brng’
识别超出合法广播范围的像素。
- 颜色,c
设置 out 选项的高亮颜色。默认颜色为黄色。
39.238.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.239 signature
计算 MPEG-7 视频签名。该过滤器可以处理多个输入。在这种情况下,还可以计算输入之间的匹配度。该过滤器始终传递第一个输入。每个流的签名可以写入一个文件。
它接受以下选项
- detectmode
启用或禁用匹配过程。
可用值为
- ‘off’
禁用匹配计算(默认)。
- ‘full’
计算整个视频的匹配度,并输出整个视频是否匹配,或仅部分匹配。
- ‘fast’
只计算直到找到匹配项或视频结束。在某些情况下应该更快。
- nb_inputs
设置输入数量。选项值必须是非负整数。默认值为 1。
- 文件名
设置输出写入的路径。如果有多个输入,则路径必须是原型,即必须包含 %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.239.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.240 siti
计算视频的空间信息 (SI) 和时间信息 (TI) 分数,如 ITU-T Rec. P.910 (11/21) 中定义:多媒体应用的主观视频质量评估方法。可在 https://www.itu.int/rec/T-REC-P.910-202111-S/en 获取 PDF 文件。请注意,这是一个与被取代的建议相对应的遗留实现。有关最新版本,请参阅 ITU-T Rec. P.910 (07/22):https://www.itu.int/rec/T-REC-P.910-202207-I/en
它接受以下选项
- print_summary
如果设置为 1,则将摘要统计信息打印到控制台。默认为 0。
39.240.1 示例
- 要计算 SI/TI 指标并打印摘要
ffmpeg -i input.mp4 -vf siti=print_summary=1 -f null -
39.241 smartblur
模糊输入视频,而不影响轮廓。
它接受以下选项
- luma_radius, lr
设置亮度半径。选项值必须是 [0.1,5.0] 范围内的浮点数,指定用于模糊图像的高斯滤波器的方差(越大越慢)。默认值为 1.0。
- luma_strength, ls
设置亮度强度。选项值必须是 [-1.0,1.0] 范围内的浮点数,用于配置模糊。包含在 [0.0,1.0] 中的值将模糊图像,而包含在 [-1.0,0.0] 中的值将锐化图像。默认值为 1.0。
- luma_threshold, lt
设置用作系数以确定是否应模糊像素的亮度阈值。选项值必须是 [-30,30] 范围内的整数。值为 0 将过滤所有图像,包含在 [0,30] 中的值将过滤平坦区域,包含在 [-30,0] 中的值将过滤边缘。默认值为 0。
- chroma_radius, cr
设置色度半径。选项值必须是 [0.1,5.0] 范围内的浮点数,指定用于模糊图像的高斯滤波器的方差(越大越慢)。默认值为 luma_radius。
- chroma_strength, cs
设置色度强度。选项值必须是 [-1.0,1.0] 范围内的浮点数,用于配置模糊。包含在 [0.0,1.0] 中的值将模糊图像,而包含在 [-1.0,0.0] 中的值将锐化图像。默认值为 luma_strength。
- chroma_threshold, ct
设置用作系数以确定是否应模糊像素的色度阈值。选项值必须是 [-30,30] 范围内的整数。值为 0 将过滤所有图像,包含在 [0,30] 中的值将过滤平坦区域,包含在 [-30,0] 中的值将过滤边缘。默认值为 luma_threshold。
- alpha_radius, ar
设置 Alpha 半径。选项值必须是 [0.1,5.0] 范围内的浮点数,指定用于模糊图像的高斯滤波器的方差(越大越慢)。默认值为 luma_radius。
- alpha_strength, as
设置 Alpha 强度。选项值必须是 [-1.0,1.0] 范围内的浮点数,用于配置模糊。包含在 [0.0,1.0] 中的值将模糊图像,而包含在 [-1.0,0.0] 中的值将锐化图像。默认值为 luma_strength。
- alpha_threshold, at
设置用作系数的 alpha 阈值,以确定是否应模糊像素。选项值必须是 [-30,30] 范围内的整数。值为 0 将过滤整个图像,[0,30] 范围内的值将过滤平坦区域,[-30,0] 范围内的值将过滤边缘。默认值为 luma_threshold。
如果未显式设置色度或 alpha 选项,则会设置相应的亮度值。
39.242 sobel
将 sobel 算子应用于输入视频流。
该滤波器接受以下选项
- planes
设置将要处理的平面,未处理的平面将被复制。默认值为 0xf,将处理所有平面。
- scale
设置将与滤波结果相乘的值。
- delta
设置将添加到滤波结果的值。
39.242.1 命令
此滤波器支持上述所有选项作为命令。
39.243 spp
应用一个简单的后处理过滤器,该过滤器在几个(或在 quality 级别为 6
的情况下,所有)偏移处压缩和解压缩图像,并对结果取平均值。
该滤波器接受以下选项
- quality
设置质量。此选项定义平均的级别数。它接受 0-6 范围内的整数。如果设置为
0
,则过滤器将不起作用。值6
表示最高质量。对于该值的每次递增,速度将下降大约 2 倍。默认值为3
。- qp
强制使用恒定的量化参数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。
- mode
设置阈值模式。可用的模式有
- ‘hard’
设置硬阈值(默认)。
- ‘soft’
设置软阈值(去振铃效果更好,但可能更模糊)。
- use_bframe_qp
如果设置为
1
,则启用使用 B 帧的 QP。使用此选项可能会导致闪烁,因为 B 帧通常具有更大的 QP。默认值为0
(未启用)。
39.243.1 命令
此滤波器支持以下命令
- quality, level
设置质量级别。可以使用值
max
来设置最大级别,当前为6
。
39.244 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://tensorflowcn.cn/install/lang_c),并使用
--enable-libtensorflow
配置 FFmpeg
- 模型
设置模型文件的路径,该文件指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow、OpenVINO 后端只能加载其格式的文件。
- scale_factor
为 SRCNN 模型设置缩放因子。允许的值为
2
、3
和4
。默认值为2
。缩放因子对于 SRCNN 模型是必要的,因为它接受使用双三次上采样和适当缩放因子进行上采样的输入。
要获得完整的功能(例如异步执行),请使用 dnn_processing 过滤器。
39.245 ssim
获取两个输入视频之间的 SSIM(结构相似性度量)。
此过滤器接收两个输入视频,第一个输入被视为“主”源,并保持不变地传递到输出。第二个输入用作计算 SSIM 的“参考”视频。
为了使此滤镜正常工作,两个视频输入必须具有相同的分辨率和像素格式。它还假设两个输入具有相同数量的帧,并且逐帧进行比较。
过滤器存储计算出的每一帧的 SSIM。
以下是对接受参数的描述。
- stats_file, f
如果指定,过滤器将使用指定的文件来保存每一帧的 SSIM。当文件名等于“-”时,数据将发送到标准输出。
如果选择 stats_file,则打印的文件包含每个比较的帧对的 key:value 形式的键/值对序列。
下面是对显示的每个参数的描述
- n
输入帧的顺序号,从 1 开始
- Y、U、V、R、G、B
由后缀指定的组件的比较帧的 SSIM。
- 全部
整个帧的比较帧的 SSIM。
- dB
与上述相同,但以 dB 表示。
此滤镜还支持 framesync 选项。
39.245.1 示例
- 例如
movie=ref_movie.mpg, setpts=PTS-STARTPTS [main]; [main][ref] ssim="stats_file=stats.log" [out]
在此示例中,正在处理的输入文件与参考文件 ref_movie.mpg 进行比较。每一帧的 SSIM 都存储在 stats.log 中。
- 另一个同时具有 psnr 和 ssim 的示例
ffmpeg -i main.mpg -i ref.mpg -lavfi "ssim;[0:v][1:v]psnr" -f null -
- 另一个具有不同容器的示例
ffmpeg -i main.mpg -i ref.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]ssim" -f null -
39.246 stereo3d
在不同的立体图像格式之间转换。
这些滤镜接受以下选项
- in
设置输入的立体图像格式。
输入图像格式的可用值为
- ‘sbsl’
并排平行(左眼在左,右眼在右)
- ‘sbsr’
并排交叉眼(右眼在左,左眼在右)
- ‘sbs2l’
并排平行,具有一半宽度分辨率(左眼在左,右眼在右)
- ‘sbs2r’
并排交叉眼,具有一半宽度分辨率(右眼在左,左眼在右)
- ‘abl’
- ‘tbl’
上下(左眼在上,右眼在下)
- ‘abr’
- ‘tbr’
上下(右眼在上,左眼在下)
- ‘ab2l’
- ‘tb2l’
上下,具有一半高度分辨率(左眼在上,右眼在下)
- ‘ab2r’
- ‘tb2r’
上下,具有一半高度分辨率(右眼在上,左眼在下)
- ‘al’
交替帧(左眼在前,右眼在后)
- ‘ar’
交替帧(右眼在前,左眼在后)
- ‘irl’
交错行(左眼具有顶部行,右眼从下一行开始)
- ‘irr’
交错行(右眼具有顶部行,左眼从下一行开始)
- ‘icl’
交错列,左眼在前
- ‘icr’
交错列,右眼在前
默认值为 ‘sbsl’。
- out
设置输出的立体图像格式。
- ‘sbsl’
并排平行(左眼在左,右眼在右)
- ‘sbsr’
并排交叉眼(右眼在左,左眼在右)
- ‘sbs2l’
并排平行,具有一半宽度分辨率(左眼在左,右眼在右)
- ‘sbs2r’
并排交叉眼,具有一半宽度分辨率(右眼在左,左眼在右)
- ‘abl’
- ‘tbl’
上下(左眼在上,右眼在下)
- ‘abr’
- ‘tbr’
上下(右眼在上,左眼在下)
- ‘ab2l’
- ‘tb2l’
上下,具有一半高度分辨率(左眼在上,右眼在下)
- ‘ab2r’
- ‘tb2r’
上下,具有一半高度分辨率(右眼在上,左眼在下)
- ‘al’
交替帧(左眼在前,右眼在后)
- ‘ar’
交替帧(右眼在前,左眼在后)
- ‘irl’
交错行(左眼具有顶部行,右眼从下一行开始)
- ‘irr’
交错行(右眼具有顶部行,左眼从下一行开始)
- ‘arbg’
浮雕红/蓝灰度(左眼红色滤镜,右眼蓝色滤镜)
- ‘argg’
浮雕红/绿灰度(左眼红色滤镜,右眼绿色滤镜)
- ‘arcg’
浮雕红/青灰度(左眼红色滤镜,右眼青色滤镜)
- ‘arch’
浮雕红/青色半彩色(左眼红色滤镜,右眼青色滤镜)
- ‘arcc’
浮雕红/青色(左眼红色滤镜,右眼青色滤镜)
- ‘arcd’
浮雕红/青色,使用杜波瓦最小二乘投影进行优化(左眼红色滤镜,右眼青色滤镜)
- ‘agmg’
浮雕绿/洋红灰度(左眼绿色滤镜,右眼洋红滤镜)
- ‘agmh’
浮雕绿/洋红半彩色(左眼绿色滤镜,右眼洋红滤镜)
- ‘agmc’
浮雕绿/洋红色(左眼绿色滤镜,右眼洋红滤镜)
- ‘agmd’
浮雕绿/洋红色,使用杜波瓦最小二乘投影进行优化(左眼绿色滤镜,右眼洋红滤镜)
- ‘aybg’
浮雕黄/蓝灰度(左眼黄色滤镜,右眼蓝色滤镜)
- ‘aybh’
浮雕黄/蓝半彩色(左眼黄色滤镜,右眼蓝色滤镜)
- ‘aybc’
浮雕黄/蓝色(左眼黄色滤镜,右眼蓝色滤镜)
- ‘aybd’
浮雕黄/蓝色,使用杜波瓦最小二乘投影进行优化(左眼黄色滤镜,右眼蓝色滤镜)
- ‘ml’
单声道输出(仅左眼)
- ‘mr’
单声道输出(仅右眼)
- ‘chl’
棋盘格,左眼在前
- ‘chr’
棋盘格,右眼在前
- ‘icl’
交错列,左眼在前
- ‘icr’
交错列,右眼在前
- ‘hdmi’
HDMI 帧打包
默认值为 ‘arcd’。
39.246.1 示例
- 将输入视频从并排平行转换为浮雕黄/蓝杜波瓦
stereo3d=sbsl:aybd
- 将输入视频从上下(左眼在上,右眼在下)转换为并排交叉眼。
stereo3d=abl:sbsr
39.247 streamselect, astreamselect
选择视频或音频流。
该滤波器接受以下选项
- 输入
设置输入数量。默认为 2。
- map
设置要重新映射到输出的输入索引。
39.247.1 命令
streamselect
和 astreamselect
过滤器支持以下命令
- map
设置要重新映射到输出的输入索引。
39.247.2 示例
- 选择前 5 秒的第 1 个流和剩余时间的第 2 个流
sendcmd='5.0 streamselect map 1',streamselect=inputs=2:map=0
- 与上述相同,但用于音频
asendcmd='5.0 astreamselect map 1',astreamselect=inputs=2:map=0
39.248 subtitles
使用 libass 库在输入视频顶部绘制字幕。
要启用此过滤器的编译,您需要使用 --enable-libass
配置 FFmpeg。此过滤器还需要使用 libavcodec 和 libavformat 构建,以将传递的字幕文件转换为 ASS(高级字幕 Alpha)字幕格式。
该滤波器接受以下选项
- filename, f
设置要读取的字幕文件的文件名。必须指定。
- original_size
指定原始视频的大小,即 ASS 文件所针对的视频。有关此选项的语法,请查看 (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 除外。
如果未指定第一个键,则假定第一个值指定 filename。
例如,要在输入视频之上渲染文件 sub.srt,请使用以下命令
subtitles=sub.srt
这等效于
subtitles=filename=sub.srt
要渲染文件 video.mkv 中的默认字幕流,请使用
subtitles=video.mkv
要渲染该文件中的第二个字幕流,请使用
subtitles=video.mkv:si=1
要使来自 sub.srt 的字幕流以 80% 透明的蓝色 DejaVu Serif
字体显示,请使用
subtitles=sub.srt:force_style='Fontname=DejaVu Serif,PrimaryColour=&HCCFF0000'
39.249 super2xsai
使用 Super2xSaI(缩放和插值)像素艺术缩放算法将输入放大 2 倍并进行平滑处理。
适用于放大像素艺术图像而不会降低清晰度。
39.250 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.250.1 命令
此滤波器支持上述所有选项作为命令。
39.251 swapuv
交换 U 和 V 平面。
39.252 tblend
混合连续的视频帧。
请参阅 blend
39.253 telecine
将电视电影处理应用于视频。
此过滤器接受以下选项
- first_field
- “top, t”
先顶部场
- “bottom, b”
先底部场。默认值为
top
。
- 模式
一个表示要应用的下拉模式的数字字符串。默认值为
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.254 thistogram
计算并绘制输入视频随时间的颜色分布直方图。
与仅显示特定时间的单个输入帧的直方图的 histogram 视频过滤器不同,此过滤器还显示由 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
。- 滑动
设置滑动模式。
滑动的可用值为
- ‘frame’
当到达右边界时绘制新帧。
- ‘replace’
用新列替换旧列。
- ‘scroll’
从右向左滚动。
- ‘rscroll’
从左向右滚动。
- ‘picture’
绘制单个图片。
默认为
replace
。
39.255 threshold
将阈值效果应用于视频流。
此过滤器需要四个视频流来执行阈值处理。第一个流是我们正在过滤的流。第二个流保存阈值,第三个流保存最小值,最后一个第四个流保存最大值。
该滤波器接受以下选项
- planes
设置将要处理的平面,未处理的平面将被复制。默认值为 0xf,将处理所有平面。
例如,如果第一个流像素的分量值小于第二个阈值流的像素分量阈值,则将选择第三个流值,否则将选择第四个流像素分量值。
使用颜色源过滤器可以执行各种类型的阈值处理
39.255.1 命令
此过滤器支持 commands 中的所有选项。
39.255.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.256 thumbnail
在给定的连续帧序列中选择最具代表性的帧。
该滤波器接受以下选项
- n
设置要分析的帧批次大小;在一组 n 个帧中,过滤器将选择其中一个,然后处理下一批 n 个帧,直到结束。默认为
100
。- 对数 (log)
设置要显示所选帧统计信息的日志级别。默认为
info
。
由于过滤器会跟踪整个帧序列,因此较大的 n 值将导致更高的内存使用率,因此不建议使用较高的值。
39.256.1 示例
- 每 50 帧提取一张图片
thumbnail=50
- 使用
ffmpeg
创建缩略图的完整示例ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
39.257 tile
将多个连续帧平铺在一起。
untile 过滤器可以执行相反的操作。
该滤波器接受以下选项
- layout
以
COLUMNSxROWS
的形式设置网格大小。范围高达 UINT_MAX 个单元格。默认为6x5
。- nb_frames
设置在给定区域中渲染的最大帧数。它必须小于或等于 wxh。默认值为
0
,表示将使用所有区域。- margin
以像素为单位设置外边框边距。范围为 0 到 1024。默认为
0
。- padding
设置内边框厚度(即帧之间的像素数)。有关更高级的填充选项(例如,边缘具有不同的值),请参阅 pad 视频过滤器。范围为 0 到 1024。默认为
0
。- 颜色
指定未使用区域的颜色。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“颜色”部分。color 的默认值为“黑色”。
- overlap
设置平铺多个连续帧时要重叠的帧数。该值必须介于
0
和 nb_frames - 1 之间。默认为0
。- init_padding
设置在显示第一个输出帧之前最初为空的帧数。这控制着何时获得第一个输出帧。该值必须介于
0
和 nb_frames - 1 之间。默认为0
。
39.257.1 示例
- 生成电影中所有关键帧 (-skip_frame nokey) 的 8x8 PNG 瓦片
ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
-vsync 0 对于防止
ffmpeg
复制每个输出帧以适应最初检测到的帧率是必要的。 - 在
3x2
帧的区域中显示5
张图片,它们之间有7
个像素,初始边距为2
个像素,使用混合的扁平和命名选项tile=3x2:nb_frames=5:padding=7:margin=2
39.258 tiltandshift
应用倾斜移位效果。
当您反转时间和空间时会发生什么?
通常,视频由多个帧组成,这些帧表示不同的时间瞬间,并显示在帧捕获的空间中演变的场景。此过滤器与该概念相反,灵感来自倾斜移位摄影。
一个经过滤的帧包含构成序列的整个事件时间线,这是通过将每个帧的像素切片放入单个帧中获得的。 然而,由于没有无限宽度的帧,所以这个过程会一直进行到输入帧的宽度,并且通过为每个后续帧移开一列来重新组合视频。 为了将空间映射到时间,过滤器也会倾斜每个输入帧,以便保留运动。 这是通过逐步从每个输入帧中选择不同的列来实现的。
最终结果是一种反向视差,因此远处的物体比前面的物体移动得快得多。这种视频效果的理想条件是,当运动非常少且背景是静态的,或者当运动很多且景深很宽时(例如,在火车上移动时的广阔全景)。
此滤波器接受以下参数
- 倾斜
在移动时倾斜视频(默认)。如果未设置,视频将滑动一个静态图像,该图像由每个帧的第一列组成。
- start
在开始过滤时要执行的操作(请参见下文)。
- end
在过滤结束时要执行的操作(请参见下文)。
- 保持
在开始过滤之前应经过多少列。
- 填充
在过滤结束之前应插入多少列。
通常,过滤器从第一个帧开始移动和倾斜,并在收到最后一个帧时停止。 但是,在开始过滤之前,可以保留正常的视频,以便效果缓慢地移动到位。 类似地,最后一个视频帧可以在末尾重建。 或者,也可以只从黑色开始和结束。
- ‘none’
过滤立即开始,并在收到最后一个帧时结束。
- ‘frame’
在处理过程中,保留第一个帧或最后一个帧的完整性。
- ‘black’
在过滤的开始或结尾填充黑色。
39.259 tinterlace
执行各种类型的时间场交错。
帧从 1 开始计数,因此第一个输入帧被认为是奇数。
该滤波器接受以下选项
- mode
指定交错模式。此选项也可以单独指定为一个值。请参见下文,获取此选项的值列表。
可用值为
- “merge, 0”
将奇数帧移动到上场,偶数帧移动到下场,以一半的帧速率生成双高度帧。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 Output: 11111 33333 22222 44444 11111 33333 22222 44444 11111 33333 22222 44444 11111 33333 22222 44444
- “drop_even, 1”
仅输出奇数帧,丢弃偶数帧,以一半的帧速率生成高度不变的帧。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 Output: 11111 33333 11111 33333 11111 33333 11111 33333
- “drop_odd, 2”
仅输出偶数帧,丢弃奇数帧,以一半的帧速率生成高度不变的帧。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 Output: 22222 44444 22222 44444 22222 44444 22222 44444
- “pad, 3”
将每个帧扩展到全高度,但用黑色填充交替的行,以相同的输入帧速率生成双高度帧。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 Output: 11111 ..... 33333 ..... ..... 22222 ..... 44444 11111 ..... 33333 ..... ..... 22222 ..... 44444 11111 ..... 33333 ..... ..... 22222 ..... 44444 11111 ..... 33333 ..... ..... 22222 ..... 44444
- “interleave_top, 4”
将奇数帧的上场与偶数帧的下场交错,以一半的帧速率生成高度不变的帧。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111<- 22222 33333<- 44444 11111 22222<- 33333 44444<- 11111<- 22222 33333<- 44444 11111 22222<- 33333 44444<- Output: 11111 33333 22222 44444 11111 33333 22222 44444
- “interleave_bottom, 5”
将奇数帧的下场与偶数帧的上场交错,以一半的帧速率生成高度不变的帧。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222<- 33333 44444<- 11111<- 22222 33333<- 44444 11111 22222<- 33333 44444<- 11111<- 22222 33333<- 44444 Output: 22222 44444 11111 33333 22222 44444 11111 33333
- “interlacex2, 6”
以不变的高度使帧速率加倍。插入的每个帧都包含来自上一个输入帧的第二个时间场和来自下一个输入帧的第一个时间场。此模式依赖于 top_field_first 标志。对于没有场同步的隔行扫描视频显示很有用。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 Output: 11111 22222 22222 33333 33333 44444 44444 11111 11111 22222 22222 33333 33333 44444 11111 22222 22222 33333 33333 44444 44444 11111 11111 22222 22222 33333 33333 44444
- “mergex2, 7”
将奇数帧移动到上场,偶数帧移动到下场,以相同的帧速率生成双高度帧。
------> time Input: Frame 1 Frame 2 Frame 3 Frame 4 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 11111 22222 33333 44444 Output: 11111 33333 33333 55555 22222 22222 44444 44444 11111 33333 33333 55555 22222 22222 44444 44444 11111 33333 33333 55555 22222 22222 44444 44444 11111 33333 33333 55555 22222 22222 44444 44444
数值已弃用,但出于向后兼容的原因而接受。
默认模式为
merge
。- flags
指定影响滤镜过程的标志。
flags 的可用值为:
- 低通滤波器,vlpf
在滤波器中启用线性垂直低通滤波。当从包含高频垂直细节的逐行源创建隔行扫描目标时,需要垂直低通滤波。滤波将减少隔行扫描“颤动”和莫尔图案。
- 复杂滤波器,cvlpf
启用复杂的垂直低通滤波。这将稍微减少隔行扫描“颤动”和莫尔图案,但更好地保留细节和主观清晰度印象。
- bypass_il
绕过已经隔行扫描的帧,仅调整帧速率。
垂直低通滤波和绕过已经隔行扫描的帧只能为 mode interleave_top 和 interleave_bottom 启用。
39.260 tmedian
从几个连续的输入视频帧中选取中值像素。
该滤波器接受以下选项
- radius
设置中值滤波器的半径。默认值为 1。允许的范围为 1 到 127。
- planes
设置要过滤的平面。默认值为
15
,表示处理所有平面。- percentile
设置中值百分位数。默认值为
0.5
。默认值0.5
将始终选择中值,而0
将选择最小值,1
将选择最大值。
39.260.1 命令
此过滤器支持上述所有选项作为命令,但不包括选项 radius
。
39.261 tmidequalizer
应用时间中途视频均衡化效果。
中途视频均衡化调整一系列视频帧,使其具有相同的直方图,同时尽可能地保持它们的动态性。它对于匹配视频帧序列中的曝光很有用。
此滤镜接受以下选项:
- radius
设置滤波半径。默认值为
5
。允许的范围为 1 到 127。- sigma
设置滤波西格玛值。默认值为
0.5
。这控制滤波强度。将此选项设置为 0 实际上不起任何作用。- planes
设置要处理的平面。默认值为
15
,即所有可用平面。
39.262 tmix
混合连续的视频帧。
以下是对接受选项的描述。
- frames
要混合的连续帧数。如果未指定,则默认为 3。
- 权重
指定每个输入视频帧的权重。每个权重用空格分隔。如果权重的数量小于帧的数量,则最后一个指定的权重将用于所有剩余的未设置权重。
- scale
指定比例,如果设置,则将与每个权重乘以像素值的总和相乘,以给出最终的目标像素值。默认情况下,scale会自动缩放到权重的总和。
- planes
设置要过滤的平面。默认值是全部。允许范围为 0 到 15。
39.262.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.262.2 命令
此滤波器支持以下命令
- 权重
- scale
- planes
语法与同名选项相同。
39.263 tonemap
将不同动态范围的颜色进行色调映射。
此过滤器期望数据为单精度浮点数,因为它需要在(并且可以输出)超出范围的值上操作。需要另一个过滤器(例如zscale)将结果帧转换为可用格式。
实现的色调映射算法仅在线性光上工作,因此应预先线性化输入数据(并可能正确标记)。
ffmpeg -i INPUT -vf zscale=transfer=linear,tonemap=clip,zscale=transfer=bt709,format=yuv420p OUTPUT
39.263.1 选项
滤镜接受以下选项。
- 色调映射
设置要使用的色调映射算法。
可能的值为
- none
不应用任何色调映射,仅对过亮的像素进行去饱和处理。
- 削波
硬剪切任何超出范围的值。使用它以获得范围内的值的完美颜色精度,同时扭曲超出范围的值。
- linear
将整个参考色域拉伸到显示的线性倍数。
- gamma
在色调曲线之间拟合对数传递。
- reinhard
使用简单的曲线保留整体图像亮度,使用非线性对比度,这会导致细节变平并降低颜色精度。
- hable
比 reinhard 更好地保留暗部和亮部细节,但代价是使一切略微变暗。当保留细节比颜色和亮度精度更重要时使用它。
- mobius
平滑地映射超出范围的值,同时尽可能保留范围内材料的对比度和颜色。当颜色精度比保留细节更重要时使用它。
默认为 none。
- param
调整色调映射算法。
这会影响以下算法
- none
已忽略。
- linear
指定拉伸时使用的缩放因子。默认为 1.0。
- gamma
指定函数的指数。默认为 1.8。
- 削波
指定一个额外的线性系数,在裁剪之前乘以信号。默认为 1.0。
- reinhard
指定显示峰值的局部对比度系数。默认为 0.5,这意味着范围内值大约是裁剪时的亮度的一半。
- hable
已忽略。
- mobius
指定从线性变换到 mobius 变换的过渡点。保证低于此点的每个值都将 1:1 映射。值越高,结果越准确,但代价是丢失亮部细节。默认为 0.3,由于初始斜率陡峭,因此仍然可以相当准确地保留范围内的颜色。
- 去饱和度
对亮度超过此级别的高光应用去饱和。参数越高,保留的颜色信息就越多。此设置通过(平滑地)变为白色,有助于防止超高光出现不自然的过曝颜色。这使得图像感觉更自然,但代价是减少了超出范围的颜色信息。
默认值 2.0 相对保守,主要应用于天空或阳光直射的表面。设置为 0.0 则禁用此选项。
此选项仅在输入帧具有支持的颜色标签时才有效。
- peak
使用此值覆盖信号/标称/参考峰值。当显示元数据中嵌入的峰值信息不可靠或从较低范围映射到较高范围时很有用。
39.264 tpad
临时填充视频帧。
该滤波器接受以下选项
- start
指定输入视频流之前的延迟帧数。默认值为 0。
- 停止
指定输入视频流之后的填充帧数。设置为 -1 以无限期填充。默认值为 0。
- start_mode
设置添加到流开头的帧类型。可以是 add 或 clone。使用 add 时,会添加纯色帧。使用 clone 时,帧是第一帧的克隆。默认值为 add。
- stop_mode
设置添加到流末尾的帧类型。可以是 add 或 clone。使用 add 时,会添加纯色帧。使用 clone 时,帧是最后一帧的克隆。默认值为 add。
- start_duration, stop_duration
指定开始/停止延迟的持续时间。有关接受的语法,请参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分。这些选项会覆盖 start 和 stop。默认值为 0。
- 颜色
指定填充区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的 “颜色” 部分。
color 的默认值为“黑色”。
39.265 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.266 transpose_npp
转置输入视频中的行和列,并可选择翻转它。有关更深入的示例,请参阅 transpose 视频滤镜,它与此处具有大部分相同的选项。
它接受以下参数
- dir
指定转置方向。
可以假设以下值
- ‘cclock_flip’
逆时针旋转 90 度并垂直翻转。(默认)
- ‘clock’
顺时针旋转 90 度。
- ‘cclock’
逆时针旋转 90 度。
- ‘clock_flip’
顺时针旋转 90 度并垂直翻转。
- passthrough
如果输入几何形状与指定值指定的形状匹配,则不应用转置。它接受以下值
- ‘none’
始终应用转置。(默认)
- ‘portrait’
保留纵向几何形状(当 height >= width 时)。
- ‘landscape’
保留横向几何形状(当 width >= height 时)。
39.267 trim
修剪输入,使输出包含输入的一个连续子部分。
它接受以下参数
- start
指定保留部分的开始时间,即时间戳为 start 的帧将是输出中的第一帧。
- end
指定将要丢弃的第一帧的时间,即紧接时间戳为 end 的帧之前的帧将是输出中的最后一帧。
- start_pts
这与 start 相同,只是此选项以时间基准单位而不是秒为单位设置开始时间戳。
- end_pts
这与 end 相同,只是此选项以时间基准单位而不是秒为单位设置结束时间戳。
- duration
输出的最大持续时间(以秒为单位)。
- start_frame
应传递到输出的第一帧的编号。
- end_frame
应丢弃的第一帧的编号。
start、end 和 duration 表示为时间持续时间规范;有关接受的语法,请参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分。
请注意,前两组开始/结束选项和 duration 选项查看帧时间戳,而 _frame 变体仅计算通过滤镜的帧。另请注意,此滤镜不会修改时间戳。如果希望输出时间戳从零开始,请在 trim 滤镜之后插入一个 setpts 滤镜。
如果设置了多个开始或结束选项,此滤镜会尝试贪婪地保留所有至少匹配一个指定约束的帧。要仅保留一次匹配所有约束的部分,请链接多个 trim 滤镜。
默认设置是保留所有输入。因此,可以仅设置例如结束值,以保留指定时间之前的所有内容。
示例
- 丢弃除输入的第二分钟之外的所有内容
ffmpeg -i INPUT -vf trim=60:120
- 仅保留第一秒
ffmpeg -i INPUT -vf trim=duration=1
39.268 unpremultiply
使用第二个流的第一平面作为 alpha,对输入视频流应用 alpha 预乘效果。
两个流必须具有相同的尺寸和相同的像素格式。
该滤波器接受以下选项
- planes
设置将要处理的平面,未处理的平面将被复制。默认值为 0xf,将处理所有平面。
如果格式有 1 或 2 个分量,则亮度为位 0。如果格式有 3 或 4 个分量:对于 RGB 格式,位 0 为绿色,位 1 为蓝色,位 2 为红色;对于 YUV 格式,位 0 为亮度,位 1 为色度-U,位 2 为色度-V。如果存在,则 alpha 通道始终为最后一位。
- inplace
不需要第二个输入进行处理,而是使用输入流中的 alpha 平面。
39.269 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.269.1 示例
- 应用强烈的亮度锐化效果
unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
- 对亮度和色度参数应用强烈的模糊
unsharp=7:7:-2:7:7:-2
39.270 untile
将由平铺图像组成的视频分解为单独的图像。
输出视频的帧速率是输入视频的帧速率乘以平铺的数量。
此滤镜执行与 tile 相反的操作。
该滤波器接受以下选项
- layout
设置网格大小(即行数和列数)。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。
39.270.1 示例
- 从一个静止图像文件生成一个 1 秒的视频,该文件由 25 帧垂直堆叠而成,类似于模拟胶片卷。
ffmpeg -r 1 -i image.jpg -vf untile=1x25 movie.mkv
39.271 uspp
应用超慢/简单的后处理滤镜,该滤镜在多个(或在 quality 级别为 8
的情况下为所有)偏移处压缩和解压缩图像,并对结果进行平均。
它与 spp 行为的不同之处在于,uspp 实际上使用 libavcodec Snow 编码和解码每种情况,而 spp 使用类似于 MJPEG 的简化的仅帧内 8x8 DCT。
此滤镜在 5.0 到 6.0 之间的 ffmpeg 版本中不可用。
该滤波器接受以下选项
- quality
设置质量。此选项定义平均的级别数。它接受 0-8 范围内的整数。如果设置为
0
,则滤镜将不起作用。值8
表示最高质量。对于该值的每次递增,速度大约下降 2 倍。默认值为3
。- qp
强制使用恒定的量化参数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。
- 编解码器
使用指定的编解码器而不是 snow。
39.272 v360
在各种格式之间转换 360 视频。
该滤波器接受以下选项
- 输入
- 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’
up
- “d”
down
- ‘f’
向前
- ‘b’
向后
默认值为 ‘rludfb’。
- in_frot
- out_frot
设置输入/输出立方体贴图的面的旋转。为每个位置选择一个角度。
角度的指定
- ‘0’
顺时针旋转 0 度
- ‘1’
顺时针旋转 90 度
- ‘2’
顺时针旋转 180 度
- ‘3’
顺时针旋转 270 度
默认值为 ‘000000’。
- ‘eac’
等角立方体贴图。
- ‘flat’
- ‘gnomonic’
- ‘rectilinear’
常规视频。
格式特定选项
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角视野。值为度。
如果设置了对角视野,则它会覆盖水平和垂直视野。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角视野。值为度。
如果设置了对角视野,则它会覆盖水平和垂直视野。
- ‘dfisheye’
双鱼眼。
格式特定选项
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角视野。值为度。
如果设置了对角视野,则它会覆盖水平和垂直视野。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角视野。值为度。
如果设置了对角视野,则它会覆盖水平和垂直视野。
- ‘barrel’
- ‘fb’
- ‘barrelsplit’
Facebook 的 360 格式。
- ‘sg’
立体投影格式。
格式特定选项
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角视野。值为度。
如果设置了对角视野,则它会覆盖水平和垂直视野。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角视野。值为度。
如果设置了对角视野,则它会覆盖水平和垂直视野。
- ‘mercator’
墨卡托格式。
- ‘ball’
球形格式,向后方提供明显的失真。
- ‘hammer’
汉默-艾托夫地图投影格式。
- ‘sinusoidal’
正弦地图投影格式。
- ‘fisheye’ (鱼眼)
鱼眼投影。
格式特定选项
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角视野。值为度。
如果设置了对角视野,则它会覆盖水平和垂直视野。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角视野。值为度。
如果设置了对角视野,则它会覆盖水平和垂直视野。
- ‘pannini’
潘尼尼投影。
格式特定选项
- h_fov
设置输出潘尼尼参数。
- ih_fov
设置输入潘尼尼参数。
- ‘cylindrical’
圆柱投影。
格式特定选项
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角视野。值为度。
如果设置了对角视野,则它会覆盖水平和垂直视野。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角视野。值为度。
如果设置了对角视野,则它会覆盖水平和垂直视野。
- ‘perspective’
透视投影。(仅输出)
格式特定选项
- v_fov
设置透视参数。
- ‘tetrahedron’
四面体投影。
- ‘tsp’
截断的方锥体投影。
- ‘he’
- ‘hequirect’
半等距柱状投影。
- ‘equisolid’
等立体角格式。
格式特定选项
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角视野。值为度。
如果设置了对角视野,则它会覆盖水平和垂直视野。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角视野。值为度。
如果设置了对角视野,则它会覆盖水平和垂直视野。
- ‘og’
正交格式。
格式特定选项
- h_fov
- v_fov
- d_fov
设置输出水平/垂直/对角视野。值为度。
如果设置了对角视野,则它会覆盖水平和垂直视野。
- ih_fov
- iv_fov
- id_fov
设置输入水平/垂直/对角视野。值为度。
如果设置了对角视野,则它会覆盖水平和垂直视野。
- ‘octahedron’
八面体投影。
- ‘cylindricalea’
圆柱等面积投影。
- interp
设置插值方法。
注意:更复杂的插值方法需要更多的内存才能运行。可用方法
- ‘near’
- ‘nearest’ (最近邻)
最近邻。
- ‘line’
- ‘linear’
双线性插值。
- ‘lagrange9’
拉格朗日 9 插值。
- ‘立方体’
- ‘cubic’
双三次插值。
- ‘lanc’
- ‘lanczos’
兰索斯插值。
- ‘sp16’
- ‘spline16’
样条 16 插值。
- ‘gauss’
- ‘gaussian’
高斯插值。
- ‘mitchell’
米切尔插值。
默认值为 ‘line’。
- w
- h
设置输出视频分辨率。
默认分辨率取决于格式。
- in_stereo
- out_stereo
设置输入/输出立体格式。
- ‘2d’
2D 单声道
- ‘sbs’
并排
- ‘tb’
上下
输入和输出格式的默认值为 ‘2d’。
- yaw
- pitch
- roll
设置输出视频的旋转。值为度。
- rorder
设置输出视频的旋转顺序。为每个位置选择一个项目。
- ‘y, Y’
yaw
- ‘p, P’
pitch
- ‘r, R’
roll
默认值为 ‘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.272.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.272.2 命令
此滤镜支持上述选项的子集,作为命令。
39.273 vaguedenoiser
应用基于小波的降噪器。
它使用 Cohen-Daubechies-Feauveau 9/7 将来自视频输入的每个帧转换到小波域。然后,它对获得的系数应用一些滤波。之后进行反小波变换。由于小波的特性,它应该会给出良好的平滑结果,并减少噪声,而不会模糊图片特征。
此过滤器接受以下选项
- threshold
滤波强度。越高,视频过滤得越多。在视频看起来过度过滤之前,硬阈值可以使用比软阈值更高的阈值。默认值为 2。
- method
滤镜将使用的滤波方法。
它接受以下值
- ‘hard’
阈值以下的所有值都将归零。
- ‘soft’
阈值以下的所有值都将归零。以上的所有值将按阈值减小。
- ‘garrote’
缩放或使系数无效 - 介于(更)软阈值和(更少)硬阈值之间。
默认为 garrote。
- nsteps
小波分解图片的次数。图片不能分解超过特定点(通常,对于 640x480 帧为 8 - 因为 2^9 = 512 > 480)。有效值是 1 到 32 之间的整数。默认值为 6。
- percent
部分或完全降噪(有限的系数收缩),从 0 到 100。默认值为 85。
- planes
要处理的平面的列表。默认情况下,处理所有平面。
- type
滤镜将使用的阈值类型。
它接受以下值
- ‘universal’
所有分解使用相同的阈值。
- ‘bayes’
使用的阈值也取决于每个分解系数。
默认值为通用。
39.274 varblur
使用第二个视频流设置模糊半径,应用可变模糊滤镜。第二个流必须具有相同的尺寸。
此过滤器接受以下选项
- min_r
设置允许的最小半径。允许的范围是 0 到 254。默认值为 0。
- max_r
设置允许的最大半径。允许的范围是 1 到 255。默认值为 8。
- planes
设置要处理的平面。默认情况下,使用所有平面。
varblur
滤镜也支持 framesync 选项。
39.274.1 命令
此滤镜支持以上所有选项作为 命令。
39.275 vectorscope
在二维图(称为矢量示波器)中显示两个颜色分量值。
此过滤器接受以下选项
- mode, m
设置矢量示波器模式。
它接受以下值
- ‘gray’
- ‘tint’
灰度值显示在图表上,亮度越高表示在图表上相同位置具有相同分量颜色的像素越多。这是默认模式。
- ‘color’
灰度值显示在图表上。视频帧中不存在的周围像素值以选项
x
和y
设置的两个颜色分量的渐变绘制。第三个颜色分量是静态的。- ‘color2’
视频帧中存在的实际颜色分量值显示在图表上。
- ‘color3’
与 color2 类似,但图表上相同值
x
和y
的频率越高,另一个颜色分量的值就越高,默认情况下,当x
和y
的值时为亮度。- ‘color4’
视频帧中存在的实际颜色显示在图表上。如果两种不同的颜色映射到图表上的相同位置,则会选择在图表中不存在的颜色分量值较高的颜色。
- ‘color5’
灰度值显示在图表上。与
color
类似,但第三个颜色分量从径向渐变中选取。
- x
设置将在 X 轴上表示的颜色分量。默认值为
1
。- y
设置将在 Y 轴上表示的颜色分量。默认值为
2
。- intensity, i
设置强度,用于模式:gray、color、color3 和 color5,以增加表示图表中 (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’
默认值为 auto。
- tint0, t0
- tint1, t1
设置灰度/色调矢量示波器模式的颜色色调。默认情况下,两个选项都为零。这意味着没有色调,输出将保持为灰色。
39.276 vidstabdetect
分析视频稳定/防抖动。执行 2 次传递中的第 1 次,有关第 2 次传递,请参阅 vidstabtransform。
此滤镜会生成一个文件,其中包含有关后续帧的相对平移和旋转变换信息,该信息随后由 vidstabtransform 滤镜使用。
要启用此滤镜的编译,您需要使用 --enable-libvidstab
配置 FFmpeg。
此过滤器接受以下选项
- result
设置用于写入变换信息的文件路径。默认值为 transforms.trf。
- shakiness
设置视频的抖动程度和摄像机的快速程度。它接受 1-10 范围内的整数,值 1 表示轻微抖动,值 10 表示强烈抖动。默认值为 5。
- accuracy
设置检测过程的准确性。它必须是 1-15 范围内的值。值 1 表示低精度,值 15 表示高精度。默认值为 15。
- stepsize
设置搜索过程的步长。以 1 像素分辨率扫描最小值周围的区域。默认值为 6。
- mincontrast
设置最小对比度。低于此值将丢弃局部测量字段。必须是 0-1 范围内的浮点值。默认值为 0.3。
- tripod
设置三脚架模式的参考帧编号。
如果启用,则将帧的运动与已过滤流中的参考帧进行比较,并通过指定的数字标识。其思想是补偿或多或少静态场景中的所有运动,并保持相机视图绝对静止。
如果设置为 0,则禁用。帧计数从 1 开始。
- 显示
在结果帧中显示字段和变换。它接受 0-2 范围内的整数。默认值为 0,这将禁用任何可视化。
- fileformat
要写入的变换数据文件的格式。可接受的值为
- ‘ascii’
人类可读的纯文本
- ‘binary’
二进制格式,比
ascii
小约 40%。(默认)
39.276.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.277 vidstabtransform
视频稳定/防抖动:2 次传递中的第 2 次,有关第 1 次传递,请参阅 vidstabdetect。
读取每个帧的变换信息文件并应用/补偿它们。与 vidstabdetect 滤镜一起使用,这可用于防抖动视频。另请参阅 http://public.hronopik.de/vid.stab。同样重要的是使用 unsharp 滤镜,请参见下文。
要启用此滤镜的编译,您需要使用 --enable-libvidstab
配置 FFmpeg。
39.277.1 选项
- 输入
设置用于读取变换信息的文件路径。默认值为 transforms.trf。
- smoothing
设置用于低通滤波相机运动的帧数(值 * 2 + 1)。默认值为 10。
例如,数值 10 表示使用 21 帧(过去 10 帧和未来 10 帧)来平滑视频中的运动。较大的值会使视频更平滑,但会限制摄像机的加速度(平移/倾斜运动)。0 是一个特殊情况,表示模拟静态摄像机。
- optalgo
设置摄像机路径优化算法。
接受的值为
- ‘gauss’
对摄像机运动进行高斯核低通滤波(默认)
- ‘avg’
对变换进行平均
- maxshift
设置帧平移的最大像素数。默认值为 -1,表示无限制。
- maxangle
设置帧旋转的最大角度(弧度,角度*PI/180)。默认值为 -1,表示无限制。
- crop
指定如何处理由于运动补偿而可能出现的可见边界。
可用值为
- ‘keep’
保留上一帧的图像信息(默认)
- ‘black’
用黑色填充边界
- invert
如果设置为 1,则反转变换。默认值为 0。
- relative
如果设置为 1,则将变换视为相对于前一帧,如果设置为 0,则视为绝对变换。默认值为 0。
- zoom
设置缩放百分比。正值会导致放大效果,负值会导致缩小效果。默认值为 0(不缩放)。
- optzoom
设置最佳缩放以避免边界。
接受的值为
- ‘0’
disabled
- ‘1’
确定最佳静态缩放值(只有非常强烈的运动才会导致可见边界)(默认)
- ‘2’
确定最佳自适应缩放值(不会出现可见边界),请参见 zoomspeed
请注意,此处计算的值将添加到 zoom 给定的值。
- zoomspeed
设置每帧最大缩放百分比(当 optzoom 设置为 2 时启用)。范围是 0 到 5,默认值为 0.25。
- interpol
指定插值类型。
可用值为
- ‘no’
不插值
- ‘linear’
仅水平线性插值
- ‘bilinear’
两个方向都进行线性插值(默认)
- ‘bicubic’
两个方向都进行立方插值(慢)
- tripod
如果设置为 1,则启用虚拟三脚架模式,这等效于
relative=0:smoothing=0
。默认值为 0。也可以使用 vidstabdetect 的
tripod
选项。- debug
如果设置为 1,则增加日志详细程度。检测到的全局运动也会写入临时文件 global_motions.trf。默认值为 0。
39.277.2 示例
- 使用
ffmpeg
进行具有默认值的典型稳定ffmpeg -i inp.mpeg -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 inp_stabilized.mpeg
请注意使用始终推荐的 unsharp 滤镜。
- 稍微放大并从给定文件加载变换数据
vidstabtransform=zoom=5:input="mytransforms.trf"
- 使视频更平滑
vidstabtransform=smoothing=30
39.278 vflip
垂直翻转输入视频。
例如,要使用 ffmpeg
垂直翻转视频
ffmpeg -i in.avi -vf "vflip" out.avi
39.279 vfrdet
检测可变帧率视频。
此滤镜尝试检测输入是可变帧率还是恒定帧率。
最后,它将输出检测为具有可变 delta pts 的帧数,以及具有恒定 delta pts 的帧数。如果存在具有可变 delta 的帧,则还会显示遇到的最小、最大和平均 delta。
39.280 vibrance
增强或改变饱和度。
该滤波器接受以下选项
- 强度
如果为正值,则设置增强强度,如果为负值,则设置改变强度。默认值为 0。允许的范围是 -2 到 2。
- rbal
设置红色平衡。默认值为 1。允许的范围是 -10 到 10。
- gbal
设置绿色平衡。默认值为 1。允许的范围是 -10 到 10。
- bbal
设置蓝色平衡。默认值为 1。允许的范围是 -10 到 10。
- rlum
设置红色亮度系数。
- glum
设置绿色亮度系数。
- blum
设置蓝色亮度系数。
- alternate
如果
intensity
为负值,并且此值设置为 1,则颜色将改变,否则颜色将不太饱和,更接近灰色。
39.280.1 命令
此滤波器支持上述所有选项作为命令。
39.281 vif
获取两个输入视频之间的平均 VIF(视觉信息保真度)。
此滤镜需要两个输入视频。
为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。此外,它还假设两个输入具有相同数量的帧,这些帧会逐个进行比较。
获得的平均 VIF 分数通过日志系统打印。
该滤镜存储每帧计算的 VIF 分数。
此滤镜还支持 framesync 选项。
在下面的示例中,正在处理的输入文件 main.mpg 与参考文件 ref.mpg 进行比较。
ffmpeg -i main.mpg -i ref.mpg -lavfi vif -f null -
39.282 vignette
创建或反转自然晕影效果。
该滤波器接受以下选项
- angle, a
将镜头角度表达式设置为弧度数。
该值被裁剪在
[0,PI/2]
范围内。默认值:
"PI/5"
- x0
- y0
设置中心坐标表达式。默认分别为
"w/2"
和"h/2"
。- mode
设置向前/向后模式。
可用模式为
- ‘forward’
距离中心点越远,图像变得越暗。
- ‘backward’
距离中心点越远,图像变得越亮。这可以用来反转晕影效果,尽管没有自动检测来提取镜头 angle 和其他设置(尚未)。它也可以用来创建燃烧效果。
默认值为 ‘forward’。
- eval
设置表达式的评估模式(angle、x0、y0)。
它接受以下值
- ‘init’
仅在滤镜初始化期间评估表达式一次。
- ‘frame’
评估每个传入帧的表达式。这比 ‘init’ 模式慢得多,因为它需要重新计算所有缩放器,但它允许高级动态表达式。
默认值为 ‘init’。
- dither
设置抖动以减少圆形条带效果。默认值为
1
(启用)。- aspect
设置晕影纵横比。此设置允许调整晕影的形状。将此值设置为输入的 SAR 将使晕影跟随视频的尺寸呈矩形。
默认值为
1/1
。
39.282.1 表达式
alpha、x0 和 y0 表达式可以包含以下参数。
- w
- h
输入宽度和高度
- n
输入帧数,从 0 开始
- pts
过滤视频帧的 PTS(表示时间戳)时间,以 TB 单位表示,如果未定义,则为 NAN
- r
输入视频的帧率,如果输入帧率未知则为 NAN
- t
过滤视频帧的 PTS(表示时间戳),以秒为单位表示,如果未定义,则为 NAN
- tb
以时间基准单位表示的输入帧的演示时间戳
39.282.2 示例
- 应用简单的强晕影效果
vignette=PI/4
- 制作闪烁的晕影
vignette='PI/4+random(1)*PI/50':eval=frame
39.283 vmafmotion
获取视频的平均 VMAF 运动得分。它是 VMAF 的组成指标之一。
获得的平均运动得分通过日志系统打印。
该滤波器接受以下选项
- stats_file
如果指定,滤镜将使用指定的文件来保存每一帧相对于前一帧的运动得分。当文件名等于“ - ”时,数据将发送到标准输出。
示例
ffmpeg -i ref.mpg -vf vmafmotion -f null -
39.284 vstack
垂直堆叠输入视频。
所有流必须具有相同的像素格式和相同的宽度。
所有流必须具有相同的像素格式和相同的高度。
该滤波器接受以下选项
39.285 w3fdif
对输入视频进行去隔行扫描(“w3fdif” 代表 “Weston 3 Field Deinterlacing Filter”)。
基于 Martin Weston 为 BBC R&D 描述的过程,并基于 Jim Easterbrook 为 BBC R&D 编写的去隔行算法实现,Weston 3 场去隔行滤镜使用 BBC R&D 计算的滤镜系数。
此滤镜使用帧中的场主导信息来决定在输出中先放置每对场中的哪一个。如果它弄错了,请在 w3fdif
滤镜之前使用 setfield 滤镜。
有两组滤镜系数,称为“简单”和“复杂”。可以通过传递可选参数来设置使用哪组滤镜系数
- filter
设置隔行滤镜系数。接受以下值之一
- ‘simple’
简单滤镜系数集。
- “复杂”
更复杂的滤镜系数集。
默认值为 ‘complex’。
- mode
要采用的交错模式。它接受以下值之一
- frame
每个帧输出一个帧。
- field
每个场输出一个帧。
默认值为
field
。- parity
为输入交错视频假设的图像场奇偶性。它接受以下值之一
- tff
假设顶场优先。
- bff
假设底场优先。
- auto
启用自动检测场奇偶性。
默认值为
auto
。如果交错未知或解码器不导出此信息,则将假定顶场优先。- deint
指定要反交错的帧。接受以下值之一
- ‘all’
对所有帧进行去隔行扫描,
- ‘interlaced’
仅反交错标记为交错的帧。
默认值为 ‘all’。
39.285.1 命令
此滤镜支持与选项相同的命令。
39.286 waveform
视频波形监视器。
波形监视器绘制颜色分量强度。默认情况下仅绘制亮度。波形的每一列对应于源视频中的一列像素。
它接受以下选项
- mode, m
可以是
row
或column
。默认值为column
。在行模式下,左侧的图表示颜色分量值 0,右侧表示值 = 255。在列模式下,顶部表示颜色分量值 = 0,底部表示值 = 255。- intensity, i
设置强度。较小的值有助于找出相同亮度的值在输入行/列中的分布情况。默认值为
0.04
。允许的范围是 [0, 1]。- mirror, r
设置镜像模式。
0
表示不镜像,1
表示镜像。在镜像模式下,对于row
模式,较高的值将显示在左侧;对于column
模式,较高的值将显示在顶部。默认值为1
(镜像)。- 显示,d
设置显示模式。它接受以下值
- ‘overlay’
呈现与
parade
中相同的信息,只是表示颜色分量的图直接相互叠加。此显示模式使您可以更容易地发现颜色分量重叠区域中相对差异或相似之处,例如中性白色、灰色或黑色。
- ‘stack’
在
row
模式下,并排显示颜色分量的单独图表;在column
模式下,则上下显示。- ‘parade’
在
column
模式下,并排显示颜色分量的单独图表;在row
模式下,则上下显示。使用此显示模式可以很容易地发现图像高光和阴影中的色偏,方法是比较每个波形图顶部和底部图表的轮廓。由于白色、灰色和黑色的特征是红色、绿色和蓝色完全相等,因此图像的中性区域应显示三个宽度/高度大致相等的波形。如果不是这样,可以通过调整这三个波形的电平来轻松进行校正。
默认值为
stack
。- components, c
设置要显示的颜色分量。默认值为 1,表示如果输入为 RGB 颜色空间,则仅显示亮度或红色颜色分量。如果设置为例如 7,则将显示所有 3 个(如果可用)颜色分量。
- envelope, e
- ‘none’
无包络,这是默认值。
- ‘instant’
即时包络线,即使
step
值很小,图表中呈现的最小值和最大值也将很容易看到。- ‘peak’
保持图表中呈现的最小值和最大值随时间推移。这样,您仍然可以发现超出范围的值,而无需不断查看波形。
- ‘peak+instant’
峰值和瞬时包络结合在一起。
- 滤镜,f
- ‘lowpass’
不进行过滤,这是默认设置。
- ‘flat’
亮度和色度组合在一起。
- ‘aflat’
与上面类似,但显示蓝色和红色色度之间的差异。
- ‘xflat’
与上面类似,但使用不同的颜色。
- ‘yflat’
与上面类似,但再次使用不同的颜色。
- ‘chroma’
仅显示色度。
- ‘color’
在波形上显示实际颜色值。
- ‘acolor’
与上面类似,但亮度显示色度值的频率。
- graticule, g
设置要显示的标尺。
- ‘none’
不显示标尺。
- ‘green’
显示绿色标尺,表示合法的广播范围。
- ‘orange’
显示橙色标尺,表示合法的广播范围。
- ‘invert’
显示反转标尺,表示合法的广播范围。
- opacity, o
设置刻度不透明度。
- 标志,fl
设置刻度标志。
- ‘numbers’
在线条上方绘制数字。默认情况下启用。
- ‘dots’
绘制点而不是线条。
- 缩放,s
设置用于显示标尺的缩放比例。
- ‘digital’
- ‘millivolts’
- ‘ire’
默认值为 digital。
- bgopacity, b
设置背景不透明度。
- tint0, t0
- tint1, t1
设置输出的色调。仅在低通滤波且显示不是覆盖并且输入像素格式不是 RGB 时使用。
- 适配模式,fm
设置视频输出帧的采样纵横比。可以用来配置波形,使其在一个方向上不会过度拉伸。
- ‘none’
将采样纵横比设置为 1/1。
- “size”
将采样纵横比设置为与视频的输入大小匹配。
默认值为 ‘none’。
- 输入
设置滤镜要从中选择的输入格式。可以是 ‘all’,表示从所有可用格式中选择;也可以是 ‘first’,表示选择第一个可用格式。默认值为 ‘first’。
39.287 weave, doubleweave
weave
接受基于场的视频输入,并将每两个连续的场连接到单个帧中,从而生成一个新的双倍高度剪辑,其帧率和帧数均为一半。
doubleweave
的工作方式与 weave
相同,但不将帧率和帧数减半。
它接受以下选项
- first_field
设置第一个场。可用值为
- “top, t”
将帧设置为顶场优先。
- “bottom, b”
将帧设置为底场优先。
39.287.1 示例
- 使用 select 和 separatefields 滤镜隔行扫描视频
separatefields,select=eq(mod(n,4),0)+eq(mod(n,4),3),weave
39.288 xbr
应用 xBR 高质量放大滤镜,该滤镜专为像素艺术而设计。它遵循一组边缘检测规则,请参阅 https://forums.libretro.com/t/xbr-algorithm-tutorial/123。
它接受以下选项
- n
设置缩放维度:
2
表示2xBR
,3
表示3xBR
,4
表示4xBR
。默认值为3
。
39.289 xcorrelate
应用第一个和第二个输入视频流之间的归一化互相关。
第二个输入视频流的尺寸必须小于第一个输入视频流。
该滤波器接受以下选项
- planes
设置要处理的平面。
- 辅助
设置将从第二个输入视频流中处理哪个辅助视频帧,可以是 first 或 all。默认值为 all。
xcorrelate
滤镜也支持 framesync 选项。
39.290 xfade
应用从一个输入视频流到另一个输入视频流的交叉淡入淡出。交叉淡入淡出应用于指定持续时间。
两个输入都必须是恒定帧率,并且具有相同的分辨率、像素格式、帧率和时基。
该滤波器接受以下选项
- 过渡
设置可用的过渡效果之一
- ‘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。
- 表达式
设置自定义过渡效果的表达式。
表达式可以使用以下变量和函数
- X
- Y
当前样本的坐标。
- W
- H
图像的宽度和高度。
- P
过渡效果的进度。
- 平面
当前正在处理的平面。
- 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.290.1 示例
- 将一个输入视频淡入到另一个输入视频,淡入过渡效果和过渡时长为 2 秒,起始偏移时间为 5 秒。
ffmpeg -i first.mp4 -i second.mp4 -filter_complex xfade=transition=fade:duration=2:offset=5 output.mp4
39.291 xmedian
从多个输入视频中选取中值像素。
该滤波器接受以下选项
- 输入
设置输入数量。默认值为 3。允许的范围是 3 到 255。如果输入数量为偶数,则结果将是两个中值的平均值。
- planes
设置要过滤的平面。默认值为
15
,表示处理所有平面。- percentile
设置中值百分位数。默认值为
0.5
。默认值0.5
将始终选择中值,而0
将选择最小值,1
将选择最大值。
39.291.1 命令
此滤镜支持上述所有选项作为命令,但选项 inputs
除外。
39.292 xpsnr
获取两个输入视频之间平均(跨所有输入帧)和最小(跨所有颜色平面平均值)的扩展感知加权峰值信噪比(XPSNR)。
XPSNR 是一种低复杂度的心理视觉驱动的失真测量算法,用于评估两个视频流或图像之间的差异。这对于客观量化视频和图像编解码器引起的失真特别有用,作为正式主观测试的替代方案。对数 XPSNR 输出值与传统 psnr 评估的值范围相似,但能更好地反映人类对视觉编码质量的印象。关于 XPSNR 测量的更多详细信息,它本质上是 PSNR 测量的分块加权变体,可以在以下免费提供的论文中找到
- C. R. Helmrich, M. Siekmann, S. Becker, S. Bosse, D. Marpe, 和 T. Wiegand,“XPSNR: A Low-Complexity Extension of the Perceptually Weighted Peak Signal-to-Noise Ratio for High-Resolution Video Quality Assessment”,发表于 IEEE Int. Conf. Acoustics, Speech, Sig. Process. (ICASSP), virt./online, 2020 年 5 月。www.ecodis.de/xpsnr.htm
- C. R. Helmrich, S. Bosse, H. Schwarz, D. Marpe, 和 T. Wiegand,“A Study of the Extended Perceptually Weighted Peak Signal-to-Noise Ratio (XPSNR) for Video Compression with Different Resolutions and Bit Depths”,ITU Journal: ICT Discoveries, vol. 3, no. 1, pp. 65 - 72, 2020 年 5 月。http://handle.itu.int/11.1002/pub/8153d78b-en
当发布使用此 FFmpeg 滤镜等获得的 XPSNR 评估结果时,强烈建议参考上述论文作为文档参考。此滤镜需要两个输入视频。第一个输入被视为(通常未失真的)参考源,并保持不变地传递到输出,而第二个输入是(失真的)测试信号。除了位深度之外,这两个视频输入必须具有相同的像素格式。此外,为了获得最佳性能,两个比较的输入视频都应采用 YCbCr 颜色格式。
上面提到的获得的总体 XPSNR 值通过日志系统打印。在具有多个颜色平面的输入的情况下,我们建议报告最小的 XPSNR 平均值。
接受以下参数,其行为类似于 psnr 滤镜的参数
- stats_file, f
如果指定,该滤镜将使用指定的文件来保存每个单独帧和颜色平面的 XPSNR 值。当文件名等于“ - ”时,该数据将发送到标准输出。
此滤镜还支持 framesync 选项。
39.292.1 示例
- 对两个 1080p 高清视频 ref_source.yuv 和 test_video.yuv 进行 XPSNR 分析,均为每秒 24 帧,颜色格式为 4:2:0,位深度为 8,并且输出的日志文件名为“xpsnr.log”
ffmpeg -s 1920x1080 -framerate 24 -pix_fmt yuv420p -i ref_source.yuv -s 1920x1080 -framerate 24 -pix_fmt yuv420p -i test_video.yuv -lavfi xpsnr="stats_file=xpsnr.log" -f null -
- 对两个 2160p 超高清视频 ref_source.yuv (位深度为 8) 和 test_video.yuv (位深度为 10) 进行 XPSNR 分析,均为每秒 60 帧,颜色格式为 4:2:0,没有日志文件输出
ffmpeg -s 3840x2160 -framerate 60 -pix_fmt yuv420p -i ref_source.yuv -s 3840x2160 -framerate 60 -pix_fmt yuv420p10le -i test_video.yuv -lavfi xpsnr="stats_file=-" -f null -
39.293 xstack
将视频输入堆叠到自定义布局中。
所有流必须具有相同的像素格式。
该滤波器接受以下选项
- 输入
- layout
指定输入的布局。此选项需要用户显式设置所需的布局配置。这将设置每个视频输入在输出中的位置。每个输入以“|”分隔。第一个数字表示列,第二个数字表示行。数字从 0 开始,并以“_”分隔。可以选择使用 wX 和 hX,其中 X 是从中获取宽度或高度的视频输入。当以“+”分隔时,可以使用多个值。在这种情况下,这些值将加在一起。
请注意,如果输入的大小不同,则可能会出现间隙,因为并非所有输出视频帧都将被填充。类似地,如果视频的位置没有为相邻视频的完整帧留下足够的空间,则视频可能会相互重叠。
对于 2 个输入,设置默认布局为
0_0|w0_0
(等效于grid=2x1
)。在所有其他情况下,用户必须设置布局或网格。一次只能指定grid
或layout
。同时指定两者将导致错误。- 网格
指定输入的固定大小网格。此选项用于创建输入流的固定大小网格。以
列数x行数
的形式设置网格大小。必须有行数 * 列数
个输入流,并且它们将排列为具有行数
行和列数
列的网格。使用此选项时,每行中的每个输入流必须具有相同的高度,并且所有行必须具有相同的宽度。如果设置了
grid
,则将忽略inputs
选项,并隐式设置为行数 * 列数
。对于 2 个输入,设置默认网格为
2x1
(等效于layout=0_0|w0_0
)。在所有其他情况下,用户必须设置布局或网格。一次只能指定grid
或layout
。同时指定两者将导致错误。- shortest
如果设置为 1,则强制在最短输入终止时终止输出。默认值为 0。
- fill
如果设置为有效颜色,则所有未使用的像素将填充该颜色。默认情况下,填充设置为无,因此处于禁用状态。
39.293.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.294 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.295 yadif_cuda
使用 yadif 算法对输入视频进行去隔行处理,但该算法在 CUDA 中实现,因此它可以作为 GPU 加速管道的一部分,与 nvdec 和/或 nvenc 一起工作。
它接受以下参数
- 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.296 yaepblur
应用模糊滤镜,同时保留边缘(“yaepblur”表示“又一个保留边缘的模糊滤镜”)。该算法在“J. S. Lee, Digital image enhancement and noise filtering by use of local statistics, IEEE Trans. Pattern Anal. Mach. Intell. PAMI-2, 1980.” 中描述。
它接受以下参数
- 半径, r
设置窗口半径。默认值为 3。
- 平面,p
设置要过滤的平面。默认情况下仅过滤第一个平面。
- sigma, s
设置模糊强度。默认值为 128。
39.296.1 命令
此滤镜支持与选项相同的命令。
39.297 zoompan
应用缩放和平移效果。
此过滤器接受以下选项
- 缩放, z
设置缩放表达式。范围是 1-10。默认值为 1。
- x
- y
设置 x 和 y 表达式。默认值为 0。
- d
设置持续时间表达式,单位为帧数。这将设置效果持续单个输入图像的帧数。默认值为 90。
- s
设置输出图像大小,默认值为“hd720”。
- fps
设置输出帧率,默认值为“25”。
每个表达式可以包含以下常量
- 输入宽度,iw
输入宽度。
- 输入高度,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.297.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.298 zscale
使用 z.lib 库缩放(调整大小)输入视频:https://github.com/sekrit-twc/zimg。要启用此滤镜的编译,您需要使用 --enable-libzimg
配置 FFmpeg。
zscale 滤镜通过更改输出采样纵横比,强制输出显示纵横比与输入相同。
如果输入图像格式与下一个滤镜请求的格式不同,zscale 滤镜会将输入转换为请求的格式。
39.298.1 选项
滤镜接受以下选项。
- 宽度,w
- 高度,h
设置输出视频尺寸表达式。默认值为输入尺寸。
如果 width 或 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
默认为 none。
- 滤镜,f
设置调整大小滤镜类型。
可能的值为
- point
- bilinear
- 双三次
- spline16
- spline36
- lanczos
默认值为双线性。
- range, r
设置颜色范围。
可能的值为
- 输入
- limited
- full
默认与输入相同。
- primaries, p
设置颜色原色。
可能的值为
- 输入
- 709
- unspecified
- 170m
- 240m
- 2020
默认与输入相同。
- transfer, t
设置传输特性。
可能的值为
- 输入
- 709
- unspecified
- 601
- linear
- 2020_10
- 2020_12
- smpte2084
- iec61966-2-1
- arib-std-b67
默认与输入相同。
- matrix, m
设置色彩空间矩阵。
可能的值为
- 输入
- 709
- unspecified
- 470bg
- 170m
- 2020_ncl
- 2020_cl
默认与输入相同。
- rangein, rin
设置输入颜色范围。
可能的值为
- 输入
- limited
- full
默认与输入相同。
- primariesin, pin
设置输入颜色原色。
可能的值为
- 输入
- 709
- unspecified
- 170m
- 240m
- 2020
默认与输入相同。
- transferin, tin
设置输入传输特性。
可能的值为
- 输入
- 709
- unspecified
- 601
- linear
- 2020_10
- 2020_12
默认与输入相同。
- matrixin, min
设置输入色彩空间矩阵。
可能的值为
- 输入
- 709
- unspecified
- 470bg
- 170m
- 2020_ncl
- 2020_cl
- chromal, c
设置输出色度位置。
可能的值为
- 输入
- 左
- center
- topleft
- 上
- bottomleft
- 下
- chromalin, cin
设置输入色度位置。
可能的值为
- 输入
- 左
- center
- topleft
- 上
- bottomleft
- 下
- 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.298.2 命令
此滤波器支持以下命令
- 宽度,w
- 高度,h
设置输出视频尺寸表达式。该命令接受与相应选项相同的语法。
如果指定的表达式无效,则保持其当前值。
40 OpenCL 视频滤镜
以下是当前可用的 OpenCL 视频滤镜的描述。
要启用这些滤镜的编译,您需要使用 --enable-opencl
配置 FFmpeg。
运行 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 将上传到与软件帧具有相同布局的表面,因此可能需要在之前立即添加一个 format 滤镜,以使输入格式正确;而 hwdownload 不支持所有输出格式 - 可能需要在之后立即插入一个额外的 format 滤镜,以使输出格式受支持。
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
为用于模糊相应输入平面的盒子半径(以像素为单位)设置表达式。
半径值必须是非负数,且对于亮度 (luma) 和 alpha 平面,不得大于表达式
min(w,h)/2
的值;对于色度 (chroma) 平面,不得大于min(cw,ch)/2
的值。luma_radius 的默认值为“2”。如果未指定,则 chroma_radius 和 alpha_radius 默认使用为 luma_radius 设置的对应值。
表达式可以包含以下常量
- w
- h
输入图像的宽度和高度,单位为像素。
- cw
- ch
输入色度图像的宽度和高度,单位为像素。
- hsub
- vsub
水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。
- luma_power, lp
- chroma_power, cp
- alpha_power, ap
指定对相应平面应用盒状模糊滤镜的次数。
luma_power 的默认值为 2。如果未指定,则 chroma_power 和 alpha_power 默认使用为 luma_power 设置的对应值。
值为 0 将禁用该效果。
40.2.1 示例
应用盒状模糊滤镜,将输出的每个像素设置为每个平面分别对应的盒状半径 luma_radius、chroma_radius、alpha_radius 的平均值。该滤镜将对相应的平面应用 luma_power、chroma_power、alpha_power 次。对于图像边缘上的像素,半径不会超出图像边界,因此在计算中不会使用超出范围的坐标。
- 应用盒状模糊滤镜,亮度、色度和透明度半径设置为 2,亮度、色度和透明度强度设置为 3。该滤镜将对图像的每个平面运行 3 次,盒状半径设置为 2。
-i INPUT -vf "hwupload, boxblur_opencl=luma_radius=2:luma_power=3, hwdownload" OUTPUT -i INPUT -vf "hwupload, boxblur_opencl=2:3, hwdownload" OUTPUT
- 应用盒状模糊滤镜,亮度半径设置为 2,亮度强度为 1,色度半径为 4,色度强度为 5,透明度半径为 3,透明度强度为 7。
对于亮度平面,将运行一次 2x2 盒状半径。
对于色度平面,将运行 5 次 4x4 盒状半径。
对于透明度平面,将运行 7 次 3x3 盒状半径。
-i INPUT -vf "hwupload, boxblur_opencl=2:1:4:5:3:7, hwdownload" OUTPUT
40.3 colorkey_opencl
RGB 色彩空间颜色键控。
该滤波器接受以下选项
- 颜色
将被透明度替换的颜色。
- 相似度
与键颜色的相似度百分比。
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
,则平面将保持不变。- 坐标
指定要引用的像素的标志。范围是
[0, 255]
,默认值为255
,即使用所有八个像素。标志指向以
x
为中心的局部 3x3 坐标区域1 2 3
4 x 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
,则平面将保持不变。- 坐标
指定要引用的像素的标志。范围是
[0, 255]
,默认值为255
,即使用所有八个像素。标志指向以
x
为中心的局部 3x3 坐标区域1 2 3
4 x 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 示例
- 在 INPUT 视频的左上角叠加图像 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 坐标处。
它接受以下选项
- 宽度,w
- 高度,h
指定添加填充后的输出图像大小的表达式。如果 width 或 height 的值为 0,则输出将使用相应的输入尺寸。
width 表达式可以引用 height 表达式设置的值,反之亦然。
width 和 height 的默认值为 0。
- x
- y
指定将输入图像放置在填充区域内的偏移量,相对于输出图像的顶部/左侧边框。
x 表达式可以引用 y 表达式设置的值,反之亦然。
x 和 y 的默认值为 0。
如果 x 或 y 的评估结果为负数,它们将被更改,以便输入图像在填充区域中居中。
- 颜色
指定填充区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的 “颜色” 部分。
- aspect
填充到宽高比而不是分辨率。
width、height、x 和 y 选项的值是包含以下常量的表达式
- in_w
- in_h
输入视频的宽度和高度。
- iw
- ih
这些与 in_w 和 in_h 相同。
- out_w
- out_h
输出的宽度和高度(填充区域的大小),由 width 和 height 表达式指定。
- 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
程序中的内核名称。
- 输入
滤镜的输入数量。默认为 1。
- size, s
输出帧的大小。默认为与第一个输入相同。
program_opencl
滤镜还支持 framesync 选项。
程序源文件必须包含具有给定名称的内核函数,该函数将为输出的每个平面运行一次。平面上的每次运行都作为单独的 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) 手册中的“颜色”部分。默认颜色为
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 选项相同。
- param
调整色调映射算法。与 tonemap 中的 param 选项相同。
- 去饱和度
对亮度超过此级别的高光应用去饱和。参数越高,保留的颜色信息就越多。此设置通过(平滑地)变为白色,有助于防止超高光出现不自然的过曝颜色。这使得图像感觉更自然,但代价是减少了超出范围的颜色信息。
默认值为 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 传输特性 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 通过自定义过渡效果淡入淡出两个视频。
它接受以下选项
- 过渡
设置可能的过渡效果之一。
- 自定义
选择自定义过渡效果,实际的过渡描述将从源和内核选项中选取。
- 淡入
- 向左擦除
- 向右擦除
- 向上擦除
- 向下擦除
- 向左滑动
- 向右滑动
- 向上滑动
- 向下滑动
-
默认过渡效果是淡入。
- source
自定义过渡的 OpenCL 程序源文件。
- kernel
设置要用于自定义过渡的内核名称(从程序源文件中)。
- duration
设置视频过渡的持续时间。
- offset
设置相对于第一个视频过渡开始的时间。
程序源文件必须包含具有给定名称的内核函数,该函数将为输出的每个平面运行一次。平面上的每次运行都作为单独的 2D 全局 NDRange 排队,每个像素一个工作项。因此,每个工作项的全局 ID 偏移量是目标图像中像素的坐标。
内核函数需要采用以下参数
- 目标图像,__write_only image2d_t。
此图像将成为输出;内核应写入所有内容。
- 第一个源图像,__read_only image2d_t。第二个源图像,__read_only image2d_t。
这些是每个输入上最近的图像。内核可以从中读取以生成输出,但不能写入。
- 过渡进度,float。此值始终介于 0 和 1 之间(包含 0 和 1)。
示例程序
- 应用点幕布过渡效果
__kernel void blend_images(__write_only image2d_t dst, __read_only image2d_t src1, __read_only image2d_t src2, float progress) { const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE | CLK_FILTER_LINEAR); int2 p = (int2)(get_global_id(0), get_global_id(1)); float2 rp = (float2)(get_global_id(0), get_global_id(1)); float2 dim = (float2)(get_image_dim(src1).x, get_image_dim(src1).y); rp = rp / dim; float2 dots = (float2)(20.0, 20.0); float2 center = (float2)(0,0); float2 unused; float4 val1 = read_imagef(src1, sampler, p); float4 val2 = read_imagef(src2, sampler, p); bool next = distance(fract(rp * dots, &unused), (float2)(0.5, 0.5)) < (progress / distance(rp, center)); write_imagef(dst, p, next ? val1 : val2); }
41 VAAPI 视频滤镜
VAAPI 视频滤镜通常与 VAAPI 解码器和 VAAPI 编码器一起使用。以下是对 VAAPI 视频滤镜的描述。
要启用这些滤镜的编译,您需要使用 --enable-vaapi
配置 FFmpeg。
要使用 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
请参阅 framesync。
- shortest
请参阅 framesync。
- repeatlast
请参阅 framesync。
此滤镜还支持 framesync 选项。
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
- 在距输入视频左上角偏移 (200, 100) 的位置叠加一个图像 LOGO。输入的颜色通道具有相同的内存布局,叠加层具有额外的 alpha 平面,例如,输入为 yuv420p,LOGO 为 yuva420p。
-i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuva420p, hwupload[b], [a][b]overlay_vaapi=x=200:y=100:w=400:h=300:alpha=1.0, hwdownload, format=nv12" OUTPUT
41.2 tonemap_vaapi
执行 HDR 到 SDR 或 HDR 到 HDR 的色调映射。目前仅接受 HDR10 作为输入。
它接受以下参数
- format
指定输出像素格式。
HDR 到 SDR 色调映射的默认值为 nv12,HDR 到 HDR 色调映射的默认值为 p010。
- primaries, p
设置输出颜色原色。
HDR 到 SDR 色调映射的默认值为 bt709,HDR 到 HDR 色调映射的默认值与输入相同。
- transfer, t
设置输出传输特性。
HDR 到 SDR 色调映射的默认值为 bt709,HDR 到 HDR 色调映射的默认值与输入相同。
- matrix, m
设置输出颜色空间矩阵。
HDR 到 SDR 色调映射的默认值为 bt709,HDR 到 HDR 色调映射的默认值与输入相同。
- 显示
设置输出主控显示色彩容积。它由一个以 ’|’ 分隔的两个值列表给出,两个值之间用空格分隔。它按 G、B、R 顺序设置显示原色 x 和 y,然后设置白点 x 和 y,以及标称最小和最大显示亮度。
设置此选项后将执行 HDR 到 HDR 的色调映射。
- 光线
设置输出内容光线级别信息。它接受 2 个空格分隔的值,第一个输入是最大光线级别,第二个输入是最大平均光线级别。
它对于 HDR 到 SDR 的色调映射将被忽略,对于 HDR 到 HDR 的色调映射是可选的。
41.2.1 示例
- 将 HDR(HDR10) 视频转换为 bt2020 传输特性 p010 格式
tonemap_vaapi=format=p010:t=bt2020-10
- 将 HDR 视频转换为 HDR 视频
tonemap_vaapi=display=7500\ 3000|34000\ 16000|13250\ 34500|15635\ 16450|500\ 10000000
41.3 hstack_vaapi
设置缩放维度:2
表示 hq2x
,3
表示 hq3x
,4
表示 hq4x
。默认为 3
。
这是 hstack 滤镜的 VA-API 变体,每个输入流可能具有不同的高度,此滤镜将按比例缩小/放大每个输入流,同时保持原始宽高比。
它接受以下选项
41.4 vstack_vaapi
垂直堆叠输入视频。
这是 vstack 滤镜的 VA-API 变体,每个输入流可能具有不同的宽度,此滤镜将按比例缩小/放大每个输入流,同时保持原始宽高比。
它接受以下选项
41.5 xstack_vaapi
将视频输入堆叠到自定义布局中。
这是 xstack 滤镜的 VA-API 变体,每个输入流可能具有不同的大小,此滤镜将按比例缩小/放大每个输入流到给定的输出大小,或第一个输入流的大小。
它接受以下选项
- 输入
请参阅 xstack。
- shortest
请参阅 xstack。
- layout
请参阅 xstack。此外,这允许用户为每个输入流提供输出大小。
xstack_vaapi=inputs=4:layout=0_0_1920x1080|0_h0_1920x1080|w0_0_1920x1080|w0_h0_1920x1080
- 网格
请参阅 xstack。
- grid_tile_size
设置设置 grid 时每个输入流的输出大小。如果未设置此选项,此滤镜默认将输出大小设置为第一个输入流的大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。
- fill
请参阅 xstack。
41.6 pad_vaapi
向输入图像添加填充,并将原始输入放置在提供的 x、y 坐标处。
它接受以下选项
- 宽度,w
- 高度,h
指定添加填充后的输出图像大小的表达式。如果 width 或 height 的值为 0,则输出将使用相应的输入尺寸。
width 表达式可以引用 height 表达式设置的值,反之亦然。
width 和 height 的默认值为 0。
- x
- y
指定将输入图像放置在填充区域内的偏移量,相对于输出图像的顶部/左侧边框。
x 表达式可以引用 y 表达式设置的值,反之亦然。
x 和 y 的默认值为 0。
如果 x 或 y 的评估结果为负数,它们将被更改,以便输入图像在填充区域中居中。
- 颜色
指定填充区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的 “颜色” 部分。
- aspect
填充到宽高比而不是分辨率。
width、height、x 和 y 选项的值是包含以下常量的表达式
- in_w
- in_h
输入视频的宽度和高度。
- iw
- ih
这些与 in_w 和 in_h 相同。
- out_w
- out_h
输出的宽度和高度(填充区域的大小),由 width 和 height 表达式指定。
- ow
- oh
这些与 out_w 和 out_h 相同。
- x
- y
x 和 y 偏移量,由 x 和 y 表达式指定,如果尚未指定,则为 NAN。
- a
与 iw / ih 相同
- sar
输入样本纵横比
- dar
输入显示纵横比,它与 (iw / ih) * sar 相同
41.7 drawbox_vaapi
在输入图像上绘制一个彩色框。
它接受以下参数
- x
- y
指定框左上角坐标的表达式。默认为 0。
- 宽度,w
- 高度,h
指定框的宽度和高度的表达式;如果为 0,则解释为输入宽度和高度。默认为 0。
- 颜色,c
指定要写入的框的颜色。有关此选项的常规语法,请查看 ffmpeg-utils 手册中的“颜色”部分。
- 厚度,t
设置框边缘厚度的表达式。值
fill
将创建一个填充框。默认值为3
。请参阅下文,了解接受的常量列表。
- 替换
值为
1
时,绘制的框的像素将覆盖视频的颜色和 alpha 像素。默认值为0
,它会将框合成到输入视频上。
x、y、w、h 和 t 的参数是包含以下常量的表达式
- 输入高度,ih
- 输入宽度,iw
输入宽度和高度。
- x
- y
绘制框的 x 和 y 偏移坐标。
- w
- h
绘制的框的宽度和高度。
- t
绘制框的厚度。
41.7.1 示例
- 在输入图像的边缘周围绘制一个黑色框。
drawbox
- 绘制一个红色且不透明度为 50% 的框。
drawbox=10:20:200:60:[email protected]
前一个示例可以指定为
drawbox=x=10:y=20:w=200:h=60:[email protected]
- 用粉红色填充框。
drawbox=x=10:y=10:w=100:h=100:[email protected]: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
42 Vulkan 视频滤镜
以下是当前可用的 Vulkan 视频滤镜的描述。
要启用这些滤镜的编译,您需要使用 --enable-vulkan
以及 --enable-libglslang
或 --enable-libshaderc
配置 FFmpeg。
运行 Vulkan 滤镜需要您初始化硬件设备,并将该设备传递给任何滤镜图中的所有滤镜。
- -init_hw_device vulkan[=名称][:设备[,键=值...]]
使用给定的设备参数和 键=值 中的选项,初始化一个名为 名称 的类型为 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 将上传到布局与软件帧相同的帧,因此可能需要在前面添加一个 format 滤镜,以将输入转换为正确的格式,并且 hwdownload 不支持输出上的所有格式 - 通常需要在图中紧随其后插入一个额外的 format 滤镜,以使输出采用支持的格式。
42.1 avgblur_vulkan
应用平均模糊滤镜,该滤镜在 GPU 上使用 Vulkan 实现。
该滤波器接受以下选项
- 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 帧的视频源。可用于基准测试或叠加。
它接受以下参数
- 颜色
要使用的颜色。可以是名称,也可以是十六进制值。默认值为
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
设置水平 sigma,即高斯模糊的标准偏差。默认值为
0.5
。- sigmaV
设置垂直 sigma,如果为负数,则与
sigma
相同。默认值为-1
。- planes
设置要过滤的平面。默认情况下,会过滤所有平面。
- size
设置沿水平轴的内核大小。默认值为
19
。- sizeV
设置沿垂直轴的内核大小。默认值为
0
,这将设置为使用与 size 相同的值。
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
转置输入视频中的行和列,并可选择翻转它。有关更深入的示例,请参阅 transpose 视频滤镜,它与此处具有大部分相同的选项。
它接受以下参数
- 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
转置输入视频中的行和列,并可选择翻转它。有关更深入的示例,请参阅 transpose 视频滤镜,它与此处具有大部分相同的选项。
它接受以下参数
- dir
指定转置方向。
可以假设以下值
- ‘cclock_flip’
逆时针旋转 90 度并垂直翻转。(默认)
- ‘clock’
顺时针旋转 90 度。
- ‘cclock’
逆时针旋转 90 度。
- ‘clock_flip’
顺时针旋转 90 度并垂直翻转。
- passthrough
如果输入几何形状与指定值指定的形状匹配,则不应用转置。它接受以下值
- ‘none’
始终应用转置。(默认)
- ‘portrait’
保留纵向几何形状(当 height >= width 时)。
- ‘landscape’
保留横向几何形状(当 width >= height 时)。
43 QSV 视频滤镜
以下是对当前可用的 QSV 视频滤镜的描述。
要启用这些滤镜的编译,您需要使用 --enable-libmfx
或 --enable-libvpl
配置 FFmpeg。
要使用 QSV 滤镜,您需要正确设置 QSV 设备。有关更多信息,请阅读 https://trac.ffmpeg.org/wiki/Hardware/QuickSync
43.1 hstack_qsv
设置缩放维度:2
表示 hq2x
,3
表示 hq3x
,4
表示 hq4x
。默认为 3
。
这是 hstack 滤镜的 QSV 变体,每个输入流可以具有不同的高度,此滤镜将在保持原始宽高比的同时缩小/放大每个输入流。
它接受以下选项
43.2 vstack_qsv
垂直堆叠输入视频。
这是 vstack 滤镜的 QSV 变体,每个输入流可以具有不同的宽度,此滤镜将在保持原始宽高比的同时缩小/放大每个输入流。
它接受以下选项
43.3 xstack_qsv
将视频输入堆叠到自定义布局中。
这是 xstack 滤镜的 QSV 变体。
它接受以下选项
- 输入
请参阅 xstack。
- shortest
请参阅 xstack。
- layout
请参阅 xstack。此外,这允许用户为每个输入流提供输出大小。
xstack_qsv=inputs=4:layout=0_0_1920x1080|0_h0_1920x1080|w0_0_1920x1080|w0_h0_1920x1080
- 网格
请参阅 xstack。
- grid_tile_size
设置设置 grid 时每个输入流的输出大小。如果未设置此选项,此滤镜默认将输出大小设置为第一个输入流的大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。
- fill
请参阅 xstack。
44 视频源
以下是对当前可用的视频源的描述。
44.1 buffer
缓冲视频帧,并使其可用于滤镜链。
此源主要用于编程用途,特别是通过 libavfilter/buffersrc.h 中定义的接口。
它接受以下参数
- video_size
指定缓冲视频帧的大小(宽度和高度)。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。
- 宽度
输入视频宽度。
- 高度
输入视频高度。
- pix_fmt
表示缓冲视频帧像素格式的字符串。它可以是对应于像素格式的数字,也可以是像素格式名称。
- time_base
指定缓冲帧的时间戳所假定的时基。
- frame_rate
指定视频流的预期帧率。
- colorspace
表示缓冲视频帧的颜色空间的字符串。它可以是对应于颜色空间的数字,也可以是颜色空间名称。
- range
表示缓冲视频帧的颜色范围的字符串。它可以是对应于颜色范围的数字,也可以是颜色范围名称。
- pixel_aspect, sar
输入视频的样本(像素)宽高比。
- hw_frames_ctx
使用硬件像素格式时,这应该是对描述输入帧的 AVHWFramesContext 的引用。
例如
buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1
将指示源接受大小为 320x240 且格式为“yuv410p”的视频帧,假设 1/24 作为时间戳时基和方形像素 (1:1 样本宽高比)。由于名称为“yuv410p”的像素格式对应于数字 6(检查 libavutil/pixfmt.h 中的枚举 AVPixelFormat 定义),因此此示例对应于
buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1
或者,可以将选项指定为平面字符串,但此语法已弃用
width:height:pix_fmt:time_base.num:time_base.den:pixel_aspect.num:pixel_aspect.den
44.2 cellauto
创建由基本元胞自动机生成的模式。
可以通过 filename 和 pattern 选项定义元胞自动机的初始状态。如果未指定此类选项,则会随机创建初始状态。
在每个新帧中,视频中的新行都将填充元胞自动机下一代的结果。当整个帧被填充时的行为由 scroll 选项定义。
此源接受以下选项
- filename, f
从指定的文件读取初始元胞自动机状态,即起始行。在文件中,每个非空白字符都被视为一个活动单元格,换行符将终止该行,并且文件中更多的字符将被忽略。
- pattern, p
从指定的字符串读取初始元胞自动机状态,即起始行。
字符串中的每个非空白字符都被视为一个活动单元格,换行符将终止该行,并且字符串中更多的字符将被忽略。
- 速率,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) 手册中的“视频大小”部分。
如果指定了 filename 或 pattern,则默认情况下,大小设置为指定初始状态行的宽度,高度设置为 width * PHI。
如果设置了 size,它必须包含指定的模式字符串的宽度,并且指定的模式将居中显示在较大的行中。
如果未指定文件名或模式字符串,则大小值默认为“320x518”(用于随机生成的初始状态)。
- scroll
如果设置为 1,则当输出中的所有行都已填充时,向上滚动输出。如果设置为 0,则在填充底行后,新生成的行将覆盖顶行。默认为 1。
- start_full, full
如果设置为 1,则在输出第一帧之前,用生成的行完全填充输出。这是默认行为,要禁用此行为,请将值设置为 0。
- stitch
如果设置为 1,则将左右行边缘拼接在一起。这是默认行为,要禁用此行为,请将值设置为 0。
44.2.1 示例
- 从 pattern 读取初始状态,并指定大小为 200x400 的输出。
cellauto=f=pattern:s=200x400
- 生成宽度为 200 个单元格的随机初始行,填充率为 2/3
cellauto=ratio=2/3:s=200x200
- 创建一个由规则 18 生成的模式,从宽度为 100 的初始行上的单个活动单元格开始居中。
cellauto=p=@:s=100x400:full=0:rule=18
- 指定更精细的初始模式
cellauto=p='@@ @ @@':s=100x400:full=0:rule=18
44.3 coreimagesrc
在 OSX 上使用 Apple 的 CoreImage API 在 GPU 上生成的视频源。
此视频源是 coreimage 视频滤镜的专门版本。在应用的滤镜链的开头使用核心图像生成器来生成内容。
coreimagesrc 视频源接受以下选项
- list_generators
列出所有可用的生成器以及它们各自的所有选项,以及可能的最小值和最大值以及默认值。
list_generators=true
- size, s
指定源视频的大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为
320x240
。- 速率,r
指定源视频的帧率,即每秒生成的帧数。它必须是一个字符串,格式为 frame_rate_num/frame_rate_den,一个整数,一个浮点数或一个有效的视频帧率缩写。默认值为 “25”。
- sar
设置源视频的采样纵横比。
- duration,d
设置源视频的持续时间。有关接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分。
如果未指定,或者表示的持续时间为负数,则假定视频将无限期生成。
此外,接受 coreimage 视频滤镜的所有选项。可以使用完整的滤镜链来进一步处理生成的输入,而无需 CPU-HOST 传输。有关详细信息,请参阅 coreimage 文档和示例。
44.3.1 示例
- 使用 CIQRCodeGenerator 为 FFmpeg 主页创建一个二维码,以 Apple 的标准 bash shell 的完整且转义的命令行给出
ffmpeg -f lavfi -i coreimagesrc=s=100x100:filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.png
此示例等效于 coreimage 的 QRCode 示例,而无需 nullsrc 视频源。
44.4 ddagrab
通过桌面复制 API 捕获 Windows 桌面。
该滤镜专门返回 D3D11 硬件帧,用于 GPU 编码或处理。因此,任何类型的软件处理都需要显式的 hwdownload。
它接受以下选项
- output_idx
要捕获的 DXGI 输出索引。
通常对应于 Windows 给屏幕的索引减一,因此从 0 开始。
默认为输出 0。
- draw_mouse
是否绘制鼠标光标。
默认为 true。
仅影响硬件光标。如果游戏或应用程序渲染自己的光标,它将始终被捕获。
- framerate
捕获桌面的最大帧率 - 连续帧之间的间隔不会小于帧率的倒数。当 dup_frames 为 true(默认值)并且桌面没有被足够频繁地更新时,滤镜将复制上一帧。请注意,没有后台缓冲,因此当没有足够频繁地轮询滤镜时,实际的帧间间隔可能会明显更大。
默认为 30 FPS。
- video_size
指定捕获视频的大小。
默认为屏幕的完整大小。
如果小于屏幕大小,则从底部/右侧裁剪。
- offset_x
捕获视频的水平偏移。
- offset_y
捕获视频的垂直偏移。
- output_fmt
所需的滤镜输出格式。默认为 8 位 BGRA。
它接受以下值
- ‘auto’
将所有支持的输出格式传递给 DDA,并返回 DDA 决定使用的格式。
- ‘8bit’
- ‘bgra’
8 位格式始终有效,如果需要,DDA 会将其转换为这些格式。
- ‘10bit’
- ‘x2bgr10’
如果请求 10 位格式但不可用,则滤镜初始化将失败。
- dup_frames
当此选项设置为 true(默认值)时,如果桌面没有更新,滤镜将复制帧,以保持大致恒定的目标帧率。当此选项设置为 false 时,滤镜将等待桌面更新(在这种情况下,帧间间隔可能会有很大差异)。
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) 手册中的“视频大小”部分。默认值为 “640x480”。
- 速率,r
设置帧率,以每秒帧数表示。默认值为 “25”。
- c0, c1, c2, c3, c4, c5, c6, c7
设置 8 种颜色。颜色的默认值是随机选择一个。
- x0, y0, y0, y1
设置渐变线的源点和目标点。如果为负数或超出范围,则选择随机点。
- nb_colors, n
设置一次要使用的颜色数。允许的范围是 2 到 8。默认值为 2。
- seed
设置用于选择渐变线点的种子。
- duration,d
设置源视频的持续时间。有关接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分。
如果未指定,或者表示的持续时间为负数,则假定视频将无限期生成。
- speed
设置渐变旋转速度。
- 类型 (type), t
设置渐变的类型。可用值是
- ‘linear’
- ‘radial’
- ‘circular’
- ‘spiral’
- ‘square’
默认类型为 linear。
44.5.1 命令
此源支持一些上述选项作为命令。
44.6 mandelbrot
生成一个曼德勃罗集分形,并逐渐向由 start_x 和 start_y 指定的点缩放。
此源接受以下选项
- end_pts
设置终端 pts 值。默认值为 400。
- end_scale
设置终端缩放值。必须是浮点数值。默认值为 0.3。
- inner
设置内部着色模式,即用于绘制曼德勃罗分形内部区域的算法。
它应采用以下值之一
- black
设置黑色模式。
- convergence
显示收敛时间。
- mincol
根据点与迭代原点的距离设置颜色。
- period
设置周期模式。
默认值为 mincol。
- bailout
设置逃逸值。默认值为 10.0。
- maxiter
设置渲染算法执行的最大迭代次数。默认值为 7189。
- outer
设置外部着色模式。它应采用以下值之一
- iteration_count
设置迭代计数模式。
- normalized_iteration_count
设置归一化迭代计数模式。
默认值为 normalized_iteration_count。
- 速率,r
设置帧率,以每秒帧数表示。默认值为 “25”。
- size, s
设置帧大小。有关此选项的语法,请查看 (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。此源尤其适用于测试编码功能。
此源接受以下选项
- 速率,r
指定源视频的帧率,即每秒生成的帧数。它必须是一个字符串,格式为 frame_rate_num/frame_rate_den,一个整数,一个浮点数或一个有效的视频帧率缩写。默认值为 “25”。
- duration,d
设置源视频的持续时间。有关接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分。
如果未指定,或者表示的持续时间为负数,则假定视频将无限期生成。
- test, t
-
设置要执行的测试的编号或名称。支持的测试包括
- dc_luma
- dc_chroma
- freq_luma
- freq_chroma
- amp_luma
- amp_chroma
- cbp
- mv
- ring1
- ring2
- all
- max_frames, m
设置每个测试生成的最大帧数,默认值为 30。
默认值为“all”,它将循环遍历所有测试的列表。
一些示例
mptestsrc=t=dc_luma
将生成一个“dc_luma”测试图案。
44.8 frei0r_src
提供一个 frei0r 源。
要启用此滤镜的编译,您需要安装 frei0r 头文件并使用 --enable-frei0r
配置 FFmpeg。
此源接受以下参数
- size
要生成的视频大小。有关此选项的语法,请查看 (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
生成一个生命图案。
此源基于约翰·康威的生命游戏的概括。
源输入表示一个生命网格,每个像素代表一个单元,它可以处于两种可能的状态之一,即存活或死亡。每个单元与其八个相邻单元交互,这些相邻单元是在水平、垂直或对角线上相邻的单元。
在每次交互中,网格根据所采用的规则演变,该规则指定了使单元保持存活或诞生的相邻存活单元的数量。rule 选项允许指定要采用的规则。
此源接受以下选项
- filename, f
设置从中读取初始网格状态的文件。在文件中,每个非空白字符都被视为一个存活单元,并且使用换行符来分隔每一行的末尾。
如果未指定此选项,则随机生成初始网格。
- 速率,r
设置视频速率,即每秒生成的帧数。默认值为 25。
- random_fill_ratio, ratio
设置初始随机网格的随机填充率。它是一个从 0 到 1 的浮点数值,默认为 1/PHI。当指定文件时,它将被忽略。
- random_seed, seed
设置填充初始随机网格的种子,必须是包含在 0 和 UINT32_MAX 之间的整数。如果未指定,或者显式设置为 -1,则滤镜将尽最大努力使用良好的随机种子。
- rule
设置生命规则。
规则可以用“SNS/BNB”类型的代码指定,其中 NS 和 NB 是 0-8 范围内的数字序列,NS 指定使存活单元保持存活的相邻存活单元的数量,NB 指定使死亡单元变为存活(即“诞生”)的相邻存活单元的数量。可以使用 “s” 和 “b” 代替 “S” 和 “B”。
或者,可以使用 18 位整数指定规则。高 9 位用于编码如果单元格对于每个相邻的存活单元数量都是存活的,则下一个单元格状态,低位指定“诞生”新单元格的规则。高位编码用于更高数量的相邻单元格。例如,数字 6153 =
(12<<9)+9
指定存活规则为 12,诞生规则为 9,这对应于 “S23/B03”。默认值为“S23/B3”,这是原始的康威生命游戏规则,如果一个单元格有 2 个或 3 个相邻的存活单元格,它将保持存活,如果有 3 个存活单元格围绕一个死亡单元格,它将诞生一个新单元格。
- size, s
设置输出视频的大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。
如果指定了 filename,则默认情况下,大小设置为与输入文件的大小相同。如果设置了 size,则它必须包含在输入文件中指定的大小,并且在该文件中定义的初始网格在更大的结果区域中居中。
如果未指定文件名,则大小值默认为 “320x240”(用于随机生成的初始网格)。
- stitch
如果设置为 1,则将左右网格边缘缝合在一起,并将顶部和底部边缘缝合在一起。默认为 1。
- mold
设置单元格霉变速度。如果设置,死亡单元格将以 mold 的步长从 death_color 变为 mold_color。mold 的值可以为 0 到 255。
- life_color
设置存活(或新生)单元格的颜色。
- death_color
设置死亡单元格的颜色。如果设置了 mold,则这是用于表示死亡单元格的第一个颜色。
- mold_color
设置霉变颜色,用于完全死亡和霉变的单元格。
有关这 3 个颜色选项的语法,请查看 (ffmpeg-utils) 手册中的 “颜色” 部分。
44.9.1 示例
- 从 pattern 读取网格,并将其居中放置在大小为 300x300 像素的网格上
life=f=pattern:s=300x300
- 生成一个大小为 200x200 的随机网格,填充率为 2/3
life=ratio=2/3:s=200x200
- 为演化的随机生成网格指定自定义规则
life=rule=S14/B34
- 使用
ffplay
进行慢速死亡效果(霉变)的完整示例ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
44.10 perlin
生成柏林噪声。
柏林噪声是一种在空间中具有局部连续性的噪声。这可用于生成在空间和时间上具有连续性的图案,例如,模拟烟雾、流体或地形。
如果通过 octaves 选项指定了多个八度音阶,则柏林噪声将生成为分量的总和,每个分量的频率都加倍。在这种情况下,persistence 选项指定相对于前一个分量的幅度比率。更多的八度音阶分量能够指定生成的噪声中更多的高频细节(例如,由于生成的地形中的巨石而引起的小尺寸变化)。
44.10.1 选项
- size, s
指定缓冲视频帧的大小(宽度和高度)。有关此选项的语法,请查看(ffmpeg-utils) 手册中的“视频大小”部分。默认值为
320x240
。- 速率,r
指定视频流的预期帧率,以每秒帧数表示。默认值为
25
。- 倍频程
指定构成噪声的总成分数,每个成分的频率加倍。默认值为
1
。- 持久性
设置用于计算下一个倍频程成分相对于前一个成分的幅度的比率。默认值为
1
。- xscale
- yscale
定义一个用于乘以 x, y 坐标的比例因子。这对于定义一个沿 x 或 y 轴拉伸的图案效果很有用。默认值为
1
。- tscale
定义一个用于乘以时间坐标的比例因子。这对于更改时间变化速度很有用。默认值为
1
。- random_mode
设置用于计算初始图案的随机模式。
支持的值为
- random
计算并使用随机种子。
- ken
使用 Ken Perlin 在原始文章中定义的预定义初始图案,可以方便地与其他来源的输出进行比较。
- seed
使用 random_seed 选项指定的值。
默认值为
random
。- random_seed, seed
当 random_mode 设置为 random_seed 时,使用此值来计算初始图案。默认值为
0
。
44.10.2 示例
- 生成单个成分
perlin
- 使用具有 7 个成分的 Perlin 噪声,每个成分对总幅度的贡献减半
perlin=octaves=7:persistence=0.5
- 将 Perlin 噪声与 lutyuv 链接起来,生成黑白效果
perlin=octaves=3:tscale=0.3,lutyuv=y='if(lt(val\,128)\,255\,0)'
- 沿 y 轴拉伸噪声,并将灰度级转换为仅红色信号
perlin=octaves=7:tscale=0.4:yscale=0.3,lutrgb=r=val:b=0:g=0
44.11 qrencodesrc
使用 libqrencode 库生成 QR 码 (请参阅 https://fukuchi.org/works/qrencode/)。
要启用此源的编译,您需要使用 --enable-libqrencode
配置 FFmpeg。
QR 码从提供的文本或文本模式生成。相应的 QR 码会根据指定的输出大小选项进行缩放并放入视频输出中。
如果未指定文本,则不会生成 QR 码,而是返回一个空的彩色输出。
此源接受以下选项
- qrcode_width, q
- padded_qrcode_width, Q
指定渲染的 QR 码的宽度表达式,带有和不带有填充。 qrcode_width 表达式可以引用 padded_qrcode_width 表达式设置的值,反之亦然。默认情况下,padded_qrcode_width 设置为 qrcode_width,这意味着没有填充。
这些表达式仅在初始化源时计算一次。有关详细信息,请参阅 qrencode 表达式部分。
请注意,该源缺少一些常量(例如 x 或 t 或 n),因为它们仅在为每一帧评估表达式而不是在初始化时才有意义。
- 速率,r
指定源视频的帧率,即每秒生成的帧数。它必须是一个字符串,格式为 frame_rate_num/frame_rate_den,一个整数,一个浮点数或一个有效的视频帧率缩写。默认值为 “25”。
- case_sensitive, cs
指示 libqrencode 使用区分大小写的编码。默认启用此功能。可以禁用此功能以减小 QR 编码的大小。
- level, l
指定 QR 编码的纠错级别。纠错级别越高,编码尺寸越大,但代码对损坏的鲁棒性更强。最低级别为 L。
它接受以下值
- ‘L’
- ‘M’
- ‘Q’
- ‘H’
- expansion
选择如何扩展输入文本。可以是
none
或normal
(默认)。有关详细信息,请参阅 qrencode 文本扩展部分。- text
- textfile
定义要渲染的文本。如果两者都未指定,则不进行 QR 编码(仅为一个空的彩色边框)。
如果启用扩展,则将文本视为文本模板,使用 qrencode 扩展机制。有关详细信息,请参阅 qrencode 文本扩展部分。
- background_color, bc
- foreground_color, fc
设置 QR 代码和背景颜色。foreground_color 的默认值为“黑色”,background_color 的默认值为“白色”。
有关颜色选项的语法,请查看 (ffmpeg-utils) 手册中的“颜色”部分。
44.11.1 示例
- 生成一个使用默认大小编码指定文本的 QR 码
qrencodesrc=text=www.ffmpeg.org
- 与下面相同,但选择蓝色和粉红色
qrencodesrc=text=www.ffmpeg.org:bc=pink:fc=blue
- 生成一个宽度为 200 像素且带填充的 QR 代码,使填充后的宽度为 QR 代码宽度的 4/3。
qrencodesrc=text=www.ffmpeg.org:q=200:Q=4/3*q
- 生成一个填充宽度为 200 像素且带填充的 QR 代码,使 QR 代码的宽度为填充宽度的 3/4。
qrencodesrc=text=www.ffmpeg.org:Q=200:q=3/4*Q
- 生成一个编码帧号的 QR 代码
qrencodesrc=text=%{n}
- 生成一个编码 GMT 时间戳的 QR 代码
qrencodesrc=text=%{gmtime}
- 生成一个以浮点数表示的时间戳的 QR 代码
qrencodesrc=text=%{pts}
44.12 allrgb, allyuv, color, colorchart, colorspectrum, haldclutsrc, nullsrc, pal75bars, pal100bars, rgbtestsrc, smptebars, smptehdbars, testsrc, testsrc2, yuvtestsrc
allrgb
源返回大小为 4096x4096 的所有 rgb 颜色的帧。
allyuv
源返回大小为 4096x4096 的所有 yuv 颜色的帧。
color
源提供统一颜色的输入。
colorchart
源提供颜色检查图表。
colorspectrum
源提供颜色频谱输入。
haldclutsrc
源提供一个身份 Hald CLUT。另请参阅 haldclut 滤镜。
nullsrc
源返回未处理的视频帧。它主要用于分析/调试工具,或作为忽略输入数据的滤镜的源。
pal75bars
源生成一个基于 EBU PAL 建议的颜色条图案,颜色级别为 75%。
pal100bars
源生成一个基于 EBU PAL 建议的颜色条图案,颜色级别为 100%。
rgbtestsrc
源生成一个 RGB 测试图案,用于检测 RGB 与 BGR 问题。您应该看到从上到下的红色、绿色和蓝色条纹。
smptebars
源生成一个基于 SMPTE 工程指南 EG 1-1990 的颜色条图案。
smptehdbars
源生成一个基于 SMPTE RP 219-2002 的颜色条图案。
testsrc
源生成一个测试视频图案,显示颜色图案、滚动渐变和时间戳。这主要用于测试目的。
testsrc2
源类似于 testsrc,但支持更多像素格式,而不仅仅是 rgb24
。这允许将其用作其他测试的输入,而无需进行格式转换。
yuvtestsrc
源生成一个 YUV 测试图案。您应该看到从上到下的 y、cb 和 cr 条纹。
源接受以下参数
- level
指定 Hald CLUT 的级别,仅在
haldclutsrc
源中可用。级别为N
会生成一个N*N*N
乘以N*N*N
像素的图片,用作 3D 查找表的单位矩阵。每个组件以1/(N*N)
比例编码。- 颜色,c
指定源的颜色,仅在
color
源中可用。有关此选项的语法,请检查 (ffmpeg-utils) 手册中的“颜色”部分。- size, s
指定源视频的大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为
320x240
。此选项不适用于
allrgb
、allyuv
和haldclutsrc
过滤器。- 速率,r
指定源视频的帧率,即每秒生成的帧数。它必须是一个字符串,格式为 frame_rate_num/frame_rate_den,一个整数,一个浮点数或一个有效的视频帧率缩写。默认值为 “25”。
- duration,d
设置源视频的持续时间。有关接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分。
如果未指定,或者表示的持续时间为负数,则假定视频将无限期生成。
由于帧率用作时间基准,因此所有帧(包括最后一帧)都将具有其完整的持续时间。如果指定的持续时间不是帧持续时间的倍数,则会向上舍入。
- sar
设置源视频的采样纵横比。
- alpha
指定背景的 alpha(不透明度),仅在
testsrc2
源中可用。该值必须介于 0(完全透明)和 255(完全不透明,默认值)之间。- 小数位数, n
设置时间戳中显示的小数位数,仅在
testsrc
源中可用。显示的时间戳值将对应于原始时间戳值乘以指定值的 10 的幂。默认值为 0。
- type
设置颜色频谱的类型,仅在
colorspectrum
源中可用。可以是以下之一- ‘black’
- ‘white’
- ‘all’
- patch_size
设置单个颜色块的补丁大小,仅在
colorchart
源中可用。默认为64x64
。- preset
设置 colorchecker 颜色预设,仅在
colorchart
源中可用。可用值为
- ‘reference’
- ‘skintones’
默认值为
reference
。
44.12.1 示例
- 生成一个持续时间为 5.3 秒、大小为 176x144、帧率为每秒 10 帧的视频
testsrc=duration=5.3:size=qcif:rate=10
- 以下图形描述将生成一个不透明度为 0.2、大小为“qcif”且帧率为每秒 10 帧的红色源
[email protected]:s=qcif:r=10
- 如果要忽略输入内容,可以使用
nullsrc
。以下命令通过使用geq
滤镜在亮度平面中生成噪声nullsrc=s=256x256, geq=random(1)*255:128:128
44.12.2 命令
color
源支持以下命令
- c, 颜色
设置创建的图像的颜色。接受与相应 color 选项相同的语法。
44.13 openclsrc
使用 OpenCL 程序生成视频。
- source
OpenCL 程序源文件。
- kernel
程序中的内核名称。
- size, s
要生成的帧的大小。必须设置此项。
- format
用于生成的帧的像素格式。必须设置此项。
- 速率,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.14 sierpinski
生成一个谢尔宾斯基地毯/三角形分形,并随机平移。
此源接受以下选项
- size, s
设置帧大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为 “640x480”。
- 速率,r
设置帧率,以每秒帧数表示。默认值为 “25”。
- seed
设置用于随机平移的种子。
- 跳跃
设置单次平移目标的最大跳跃值。允许的范围是 1 到 10000。
- type
设置分形类型,可以是默认的
carpet
(地毯)或triangle
(三角形)。
44.15 zoneplate
生成一个波带片测试视频图案。
此源接受以下选项
- size, s
设置帧大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为“320x240”。
- 速率,r
设置帧率,以每秒帧数表示。默认值为 “25”。
- duration,d
设置源视频的持续时间。有关接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分。
如果未指定,或者表示的持续时间为负数,则假定视频将无限期生成。
- sar
设置源视频的采样纵横比。
- precision
设置用于正弦计算的查找表的精度(以位为单位)。默认值为 10。允许的范围是 4 到 16。
- xo
设置输出信号的水平轴偏移量。默认值为 0。
- yo
设置输出信号的垂直轴偏移量。默认值为 0。
- to
设置输出信号的时间轴偏移量。默认值为 0。
- k0
设置 0 阶常数,添加到信号相位。默认值为 0。
- kx
设置 1 阶相位因子乘数,用于水平轴。默认值为 0。
- ky
设置 1 阶相位因子乘数,用于垂直轴。默认值为 0。
- kt
设置 1 阶相位因子乘数,用于时间轴。默认值为 0。
- kxt, kyt, kxy
设置空间和时间轴组合的相位因子乘数。默认值为 0。
- kx2
设置 2 阶相位因子乘数,用于水平轴。默认值为 0。
- ky2
设置 2 阶相位因子乘数,用于垂直轴。默认值为 0。
- kt2
设置 2 阶相位因子乘数,用于时间轴。默认值为 0。
- ku
设置添加到最终相位的常数,以产生信号的色度蓝色分量。默认值为 0。
- kv
设置添加到最终相位的常数,以产生信号的色度红色分量。默认值为 0。
44.15.1 命令
此源支持一些上述选项作为命令。
44.15.2 示例
- 生成水平颜色正弦扫描
zoneplate=ku=512:kv=0:kt2=0:kx2=256:s=wvga:xo=-426:kt=11
- 生成垂直颜色正弦扫描
zoneplate=ku=512:kv=0:kt2=0:ky2=156:s=wvga:yo=-240:kt=11
- 生成圆形波带片
zoneplate=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 示波器视频输出。
该滤波器接受以下选项
- 速率,r
设置帧率,以每秒帧数表示。默认值为 “25”。
- size, s
指定输出的视频大小。有关此选项的语法,请查看 (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 命令
过滤器支持上述某些选项作为 命令。
46.2 abitscope
将输入音频转换为视频输出,显示音频位示波器。
该滤波器接受以下选项
- 速率,r
设置帧率,以每秒帧数表示。默认值为 “25”。
- size, s
指定输出的视频大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为
1024x256
。- 颜色
指定用空格或“|”分隔的颜色列表,这些颜色将用于绘制通道。无法识别或缺失的颜色将被白色替换。
- mode, m
设置输出模式。可以是
bars
(条形)或trace
(轨迹)。默认值为bars
。
46.3 adrawgraph
使用输入音频元数据绘制图形。
请参阅 drawgraph
46.4 agraphmonitor
请参阅 graphmonitor。
46.5 ahistogram
将输入音频转换为视频输出,显示音量直方图。
该滤波器接受以下选项
- dmode
指定如何计算直方图。
它接受以下值
- ‘single’
为所有通道使用单个直方图。
- ‘separate’
为每个通道使用单独的直方图。
默认值为
single
。- 速率,r
设置帧率,以每秒帧数表示。默认值为 “25”。
- size, s
指定输出的视频大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为
hd720
。- scale
设置显示比例。
它接受以下值
- ‘log’
logarithmic
- ‘sqrt’
平方根
- ‘cbrt’
立方根
- ‘lin’
linear
- ‘rlog’
反向对数
默认值为
log
。- ascale
设置振幅比例。
它接受以下值
- ‘log’
logarithmic
- ‘lin’
linear
默认值为
log
。- acount
设置直方图中要累积的帧数。默认值为 1。将其设置为 -1 将累积所有帧。
- rheight
设置直方图与窗口高度的比例。
- 滑动
设置声谱图滑动。
它接受以下值
- ‘replace’
用新行替换旧行。
- ‘scroll’
从上到下滚动。
默认为
replace
。- hmode
设置直方图模式。
它接受以下值
- ‘abs’
使用采样的绝对值。
- ‘sign’
使用采样的未修改值。
默认值为
abs
。
46.6 aphasemeter
测量输入音频的相位,并将其作为元数据 lavfi.aphasemeter.phase
导出,表示当前音频帧的平均相位。默认情况下,还会生成视频输出。音频作为第一个输出传递。
如果音频具有不同的通道布局,则会将其重新混音为立体声。相位值在 [-1, 1]
范围内,其中 -1
表示左右声道完全异相,而 1
表示声道同相。
此过滤器接受以下选项,所有选项都与其视频输出相关
- 速率,r
设置输出帧速率。默认值为
25
。- size, s
指定输出的视频大小。有关此选项的语法,请查看 (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
检测 1 秒单声道且相位容差为 0.001 的完整示例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”
形状类似于半圆。
默认值为“lissajous”。
- size, s
设置输出的视频尺寸。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频尺寸”部分。默认值为
400x400
。- 速率,r
设置输出帧速率。默认值为
25
。- rc
- gc
- bc
- ac
指定红色、绿色、蓝色和 Alpha 通道的对比度。默认值分别为
40
、160
、80
和255
。允许的范围是[0, 255]
。- rf
- gf
- bf
- af
指定红色、绿色、蓝色和 Alpha 通道的淡化。默认值分别为
15
、10
、5
和5
。允许的范围是[0, 255]
。- zoom
设置缩放因子。默认值为
1
。允许的范围是[0, 10]
。小于 1 的值将自动调整缩放因子到最大可能值。- draw
设置示波器的绘图模式。
可用值为
- ‘dot’
为每个采样绘制点。
- ‘line’
在前一个采样和当前采样之间绘制线。
- “aaline”
在前一个采样和当前采样之间绘制抗锯齿线。
默认值为“dot”。
- scale
指定音频采样的幅度比例。
可用值为
- ‘lin’
线性。
- ‘sqrt’
平方根。
- ‘cbrt’
立方根。
- ‘log’
对数。
- swap
交换左声道轴和右声道轴。
- mirror
镜像轴。
- ‘none’
不镜像。
- “x”
仅镜像 x 轴。
- ‘y’
仅镜像 y 轴。
- “xy”
镜像两个轴。
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
和 rate
选项外,此滤波器支持上述所有选项作为命令。
46.8 bench, abench
滤波器图的基准测试部分。
该滤波器接受以下选项
- action
启动或停止计时器。
可用值为
- “start”
获取当前时间,将其设置为帧元数据(使用键
lavfi.bench.start_time
),并将帧转发到下一个滤波器。- “stop”
获取当前时间,并从输入帧元数据中提取
lavfi.bench.start_time
元数据以获取时间差。然后打印时间差、平均时间、最大时间和最小时间(分别用t
、avg
、max
和min
表示)。时间戳以秒为单位表示。
46.8.1 示例
- selectivecolor 滤波器的基准测试
bench=start,selectivecolor=reds=-.2 .12 -.49,bench=stop
46.9 concat
连接音频和视频流,将它们一个接一个地连接在一起。
该滤波器作用于同步视频和音频流的片段。所有片段必须具有相同类型的流的数量,这也将是输出流的数量。
该滤波器接受以下选项
- n
设置片段的数量。默认值为 2。
- v
设置输出视频流的数量,这也是每个片段中视频流的数量。默认值为 1。
- a
设置输出音频流的数量,这也是每个片段中音频流的数量。默认值为 0。
- unsafe
激活不安全模式:如果片段具有不同的格式,则不会失败。
该滤波器具有 v+a 个输出:首先是 v 个视频输出,然后是 a 个音频输出。
有 nx(v+a) 个输入:首先是第一个片段的输入,其顺序与输出相同,然后是第二个片段的输入,依此类推。
相关流并非总是具有完全相同的持续时间,原因有很多,包括编解码器帧大小或粗心的创作。因此,相关的同步流(例如,视频及其音频轨道)应一次连接。concat 滤波器将使用每个片段中最长流的持续时间(最后一个片段除外),并且如果需要,将用静音填充较短的音频流。
为了使此滤波器正常工作,所有片段必须从时间戳 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 源,并调整分辨率
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
)。
该滤波器只能分析采样格式为双精度浮点数的流。如果需要,输入流将转换为此规范。用户可能需要在该滤波器之后插入 aformat 和/或 aresample 滤波器以获得原始参数。
该滤波器还有一个视频输出(请参阅 video 选项),带有实时图形以观察响度的演变。该图形包含上面提到的记录消息,因此设置此选项后,除非设置了详细日志记录,否则不再打印该消息。主图形区域包含短期响度(3 秒的分析),右侧的仪表用于瞬时响度(400 毫秒),但可以选择配置为改为显示短期响度(请参阅 gauge)。
绿色区域标记了目标响度(默认为 -23LUFS,除非通过 target 修改)周围 +/- 1LU 的目标范围。
有关响度建议 EBU R128 的更多信息,请访问 http://tech.ebu.ch/loudness。
该滤波器接受以下选项
- video
激活视频输出。无论是否设置此选项,音频流都会保持不变。如果激活视频流,则它将是第一个输出流。默认值为
0
。- size
设置视频尺寸。此选项仅适用于视频。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频尺寸”部分。默认和最小分辨率为
640x480
。- 响度计
设置 EBU 量表刻度。默认值为
9
。常用值分别为9
和18
,分别对应 EBU 量表刻度 +9 和 EBU 量表刻度 +18。允许使用此范围内的任何其他整数值。- metadata
设置元数据注入。如果设置为
1
,则音频输入将被分割成 100 毫秒的输出帧,每个帧在元数据中包含各种响度信息。所有元数据键都以lavfi.r128.
为前缀。默认值为
0
。- 帧日志
强制设置帧日志级别。
可用值为
- ‘quiet’
禁用日志记录
- ‘info’
信息日志级别
- ‘verbose’
详细日志级别
默认情况下,日志级别设置为 info。如果设置了 video 或 metadata 选项,则会切换到 verbose。
- peak
设置峰值模式。
可累积使用可用模式(该选项为
flag
类型)。可能的值为- ‘none’
禁用任何峰值模式(默认)。
- ‘sample’
启用采样峰值模式。
简单的峰值模式,查找更高的采样值。它为采样峰值(由
SPK
标识)记录一条消息。- ‘true’
启用真峰值模式。
如果启用,则在输入的过采样版本上执行峰值查找,以获得更好的峰值精度。它记录一条真峰值的消息(由
TPK
标识)和每帧真峰值(由FTPK
标识)。此模式需要使用libswresample
构建。
- 双单声道
将单声道输入文件视为“双单声道”。如果单声道文件打算在立体声系统上播放,其 EBU R128 测量在感知上将不正确。如果设置为
true
,此选项将补偿此影响。多通道输入文件不受此选项影响。- 声像定律
设置用于测量双单声道文件的特定声像定律。此参数是可选的,默认值为 -3.01dB。
- 目标
设置特定目标电平(以 LUFS 为单位),用作可视化中的相对零。此参数是可选的,默认值为 EBU R128 规范中指定的 -23LUFS。但是,在线发布的内容可能更喜欢 -16LUFS 的电平(例如,用于播客或视频平台)。
- 仪表
设置仪表显示的值。有效值为
momentary
和shortterm
。默认情况下将使用瞬时值,但在某些情况下,观察短期值可能会更有用(例如,现场混音)。- scale
设置响度的显示刻度。有效参数为
absolute
(以 LUFS 为单位)或相对于目标的relative
(LU)。这只会影响视频输出,而不会影响摘要或连续日志输出。- 集成
以 LUFS 为单位测量的集成响度的只读导出值。
- range
以 LU 为单位测量的响度范围的只读导出值。
- lra_low
以 LUFS 为单位测量的 LRA 低值的只读导出值。
- lra_high
以 LUFS 为单位测量的 LRA 高值的只读导出值。
- sample_peak
以 dBFS 为单位测量的采样峰值的只读导出值。
- true_peak
以 dBFS 为单位测量的真峰值的只读导出值。
46.10.1 示例
- 使用
ffplay
的实时图形,使用 EBU 量表刻度 +18ffplay -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
如何确定流的结束。
- 最长
最长输入的持续时间。(默认)
- shortest
最短输入的持续时间。
- 第一个
第一个输入的持续时间。
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
外的所有模式都必须设置此项。- 值
设置将使用的元数据值。此选项对于
modify
和add
模式是必需的。- 函数
比较元数据值和
value
时要使用的函数。可以是以下之一
- ‘same_str’
值被解释为字符串,如果元数据值与
value
相同,则返回 true。- ‘starts_with’
值被解释为字符串,如果元数据值以
value
选项字符串开头,则返回 true。- ‘less’
值被解释为浮点数,如果元数据值小于
value
,则返回 true。- ‘equal’
值被解释为浮点数,如果
value
等于元数据值,则返回 true。- ‘greater’
值被解释为浮点数,如果元数据值大于
value
,则返回 true。- ‘expr’
值被解释为浮点数,如果选项
expr
中的表达式的计算结果为 true,则返回 true。- ‘ends_with’
值被解释为字符串,如果元数据值以
value
选项字符串结尾,则返回 true。
- 表达式
设置当
function
设置为expr
时使用的表达式。该表达式通过 eval API 进行评估,并且可以包含以下常量- VALUE1, FRAMEVAL
来自元数据键的
value
的浮点数表示。- VALUE2, USERVAL
用户在
value
选项中提供的value
的浮点数表示。
- file
如果在
print
模式下指定,则输出将写入命名文件。可以指定任何可写入的 URL,而不是纯文件名。文件名 “-” 是标准输出的简写。如果未设置file
选项,则输出将使用 AV_LOG_INFO 日志级别写入日志。- 这可能在某些情况下提高性能,因为不需要加载帧的原始内容。
当输出写入使用 file 设置的 URL 时,减少打印模式下的缓冲。
46.13.1 示例
- 打印关键帧
lavfi.signalstats.YDIF
的所有元数据值,该值介于 0 和 1 之间。signalstats,metadata=print:key=lavfi.signalstats.YDIF:value=0:function=expr:expr='between(VALUE1,0,1)'
- 将 silencedetect 的输出打印到文件 metadata.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
设置 random 模式的种子,必须是介于
0
和UINT32_MAX
之间的整数。如果未指定,或者明确设置为-1
,则过滤器将尽力使用良好的随机种子。
注意:如果在权限过滤器和后续过滤器之间自动插入过滤器,则后续过滤器中可能无法按预期接收到权限。在 perms/aperms 过滤器之前插入 format 或 aformat 过滤器可以避免此问题。
46.15 realtime, arealtime
减慢过滤速度,以大致匹配实时速度。
这些过滤器将暂停过滤一段时间,以使输出速率与输入时间戳匹配。它们类似于 ffmpeg
的 re 选项。
它们接受以下选项
- 限制
暂停的时间限制。任何超过该时间的暂停都将被视为时间戳不连续,并重置计时器。默认值为 2 秒。
- speed
处理速度因子。该值必须是大于零的浮点数。大于 1.0 的值将导致快于实时的处理,小于 1.0 的值将减慢处理速度。limit 会自动相应调整。默认值为 1.0。
无法实现比没有这些过滤器更快处理速度。
46.15.1 命令
两个过滤器都支持以上所有选项作为 命令。
46.16 segment, asegment
将单个输入流拆分为多个流。
此过滤器执行与 concat 过滤器相反的操作。
segment
作用于视频帧,asegment
作用于音频样本。
此过滤器接受以下选项
- 时间戳
输出段的时间戳以“|”分隔。第一个段将从输入流的开始处运行。最后一个段将运行到输入流的末尾
- 帧,样本
分割段的确切帧/样本计数。
在所有情况下,为每个段添加“+”前缀将使其相对于前一个段。
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
的输出,即第二个输出。- 输出,n
设置输出的数量。发送所选帧的输出基于评估结果。默认值为 1。
表达式可以包含以下常量
- n
过滤后的帧的(顺序)编号,从 0 开始。
- selected_n
所选帧的(顺序)编号,从 0 开始。
- prev_selected_n
上次选择的帧的顺序号。如果未定义,则为 NaN。
- TB
输入时间戳的时基。
- pts
过滤帧的 PTS(Presentation TimeStamp),以 TB 单位表示。如果未定义,则为 NaN。
- t
过滤帧的 PTS,以秒为单位表示。如果未定义,则为 NaN。
- prev_pts
上次过滤的帧的 PTS。如果未定义,则为 NaN。
- prev_selected_pts
上次选择的帧的 PTS。如果未定义,则为 NaN。
- prev_selected_t
上次选择的帧的 PTS,以秒为单位表示。如果未定义,则为 NaN。
- start_pts
流中第一个不是 NaN 的 PTS。如果未找到,则仍为 NaN。
- start_t
流中第一个不是 NaN 的 PTS(以秒为单位)。如果未找到,则仍为 NaN。
- pict_type (仅限视频)
过滤帧的类型。它可以采用以下值之一
- I
- P
- B
- S
- SI
- SP
- BI
- interlace_type (仅限视频)
帧交错类型。它可以采用以下值之一
- PROGRESSIVE
帧是逐行的(非隔行的)。
- TOPFIRST
帧是顶场优先的。
- BOTTOMFIRST
帧是底场优先的。
- consumed_sample_n (仅限音频)
当前帧之前选择的样本数
- samples_n (仅限音频)
当前帧中的样本数
- sample_rate (仅限音频)
输入采样率
- key
如果过滤的帧是关键帧,则此值为 1,否则为 0。
- pos
过滤帧在文件中的位置,如果信息不可用(例如,对于合成视频),则为 -1;已弃用,请勿使用
- scene (仅限视频)
介于 0 和 1 之间的值,表示新场景;较低的值反映当前帧引入新场景的概率较低,而较高的值表示当前帧更有可能是新场景(请参见下面的示例)
- concatdec_select
concat 解复用器可以通过设置入点和出点来仅选择 concat 输入文件的一部分,但输出数据包可能并非完全包含在所选间隔内。通过使用此变量,可以跳过 concat 解复用器生成的并非完全包含在所选间隔内的帧。
这是通过将帧 pts 与 lavf.concat.start_time 和 lavf.concat.duration 数据包元数据值进行比较来实现的,这些值也存在于解码的帧中。
如果帧 pts 至少为 start_time 并且持续时间元数据缺失或帧 pts 小于 start_time + duration,则 concatdec_select 变量为 -1,否则为 0,如果 start_time 元数据缺失,则为 NaN。
这基本上意味着,如果输入帧的 pts 在 concat 解复用器设置的间隔内,则选择该帧。
- iw (仅限视频)
表示输入视频帧的宽度。
- ih (仅限视频)
表示输入视频帧的高度。
- 视图 (仅限视频)
多视图视频的视图 ID。
选择表达式的默认值为“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
将 scene 与 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
- 从使用 inpoint 和 outpoint 但源文件不是仅帧内帧的 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 选项在滤镜参数中提供,也可以在 filename 选项指定的文件中提供。
这些过滤器接受以下选项
- 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
当当前帧时间戳离开指定的间隔时,会发送命令。换句话说,当上一帧时间戳在给定间隔中,而当前帧时间戳不在给定间隔中时,会发送命令。
- 表达式
命令 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
- 在文件中指定 drawtext 和 hue 命令的列表。
# show text in the interval 5-10 5.0-10.0 [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=hello world', [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text='; # desaturate the image in the interval 15-20 15.0-20.0 [enter] hue s 0, [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=nocolor', [leave] hue s 1, [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=color'; # apply an exponential saturation fade-out effect, starting from time 25 25 [enter] hue s exp(25-t)
允许读取和处理存储在文件 test.cmd 中的上述命令列表的滤镜图可以使用以下方式指定
sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue
46.19 setpts, asetpts
更改输入帧的 PTS(演示时间戳)。
setpts
在视频帧上工作,asetpts
在音频帧上工作。
此过滤器接受以下选项
- 表达式
为每个帧计算的表达式,以构造其时间戳。
表达式通过 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)
- 应用 +/-100 TB 单位的随机抖动效果
setpts=PTS+randomi(0, -100\,100)
- 设置固定速率 25 fps 并带有一些抖动
setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))'
- 将 10 秒的偏移量应用于输入 PTS
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
计算结果为输出时基的表达式。
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) 手册中的“视频大小”部分。默认值为
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
指定变换时间钳位。在低频下,时域和频域的精度之间存在权衡。如果 timeclamp 较低,则时域中的事件表示更准确(例如快速低音鼓),否则频域中的事件表示更准确(例如低音吉他)。可接受的范围是
[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
指定 fontconfig 模式。它的优先级低于 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’
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 音符为绿色,其他音符为蓝色
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
使用连续小波变换和莫莱小波将输入音频转换为表示频谱的视频输出。
该滤波器接受以下选项
- size, s
指定输出的视频大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为
640x512
。- 速率,r
设置输出帧速率。默认值为
25
。- scale
设置使用的频率比例。允许的值为
- linear
- 对数 (log)
- bark
- mel
- erbs
- sqrt
- cbrt
- qdrt
- fm
默认值为
linear
。- iscale
设置使用的强度比例。允许的值为
- linear
- 对数 (log)
- sqrt
- cbrt
- qdrt
默认值为
log
。- 最小值 (min)
设置输出中将使用的最小频率。默认为
20
Hz。- 最大值 (max)
设置输出中将使用的最大频率。默认为
20000
Hz。实际频率上限取决于输入音频的采样率,当设置为大于奈奎斯特频率的值时,将强制执行此值。- imin
设置输出中将使用的最小强度。
- imax
设置输出中将使用的最大强度。
- logb
设置将计算出的幅度值映射到像素值时亮度强度的对数基数。允许的范围是
0
到1
。默认值为0.0001
。- 偏差
设置频率偏差。低于
1
的值更偏向频率,而高于1
的值更偏向时间。允许的范围是0
到10
。默认值为1
。- 每秒像素输出数
设置每行每秒的像素输出数。允许的范围是
1
到1024
。默认值为64
。- mode
设置输出视觉模式。允许的值为
- 幅度
显示幅度。
- phase
仅显示相位。
- 幅相
显示幅度和相位的组合。幅度映射到亮度,相位映射到颜色。
- channel
显示每个通道幅度的唯一颜色。
- stereo
显示每个立体声差异的唯一颜色。
默认值为
magnitude
。- 滑动
设置输出滑动方法。允许的值为
- 替换
- scroll
- frame
- 方向
设置输出滑动方法的方向方法。允许的值为
- 从左到右
方向从左到右。
- rl
从右到左
- 从上到下
方向从上到下。
- 从下到上
方向从下到上。
- 条形
设置条形图显示与显示尺寸的比率。默认值为 0。
- rotation
设置颜色旋转,必须在 [-1.0, 1.0] 范围内。默认值为
0
。
46.24 showfreqs
将输入音频转换为表示音频功率谱的视频输出。音频幅度在 Y 轴上,而频率在 X 轴上。
该滤波器接受以下选项
- size, s
指定视频的大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。默认值为
1024x512
。- 速率,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’
- ‘汉宁’
- ‘hamming’
- ‘blackman’
- ‘welch’
- ‘flattop’
- ‘bharris’
- ‘bnuttall’
- ‘bhann’
- ‘sine’
- ‘nuttall’
- ‘lanczos’
- ‘gauss’
- ‘tukey’
- ‘dolph’
- ‘cauchy’
- ‘parzen’
- ‘poisson’
- ‘bohman’
- ‘kaiser’
默认值为
hanning
。- overlap
设置窗口重叠。范围为
[0, 1]
。默认值为1
,这意味着将选择所选窗口函数的最佳重叠。- 平均
设置时间平均。将其设置为 0 将显示当前最大峰值。默认值为
1
,这意味着禁用时间平均。- 颜色
指定用空格或“|”分隔的颜色列表,这些颜色将用于绘制通道频率。无法识别或缺失的颜色将替换为白色。
- 通道模式
设置通道显示模式。
它接受以下值
- ‘组合’
- ‘separate’
默认值为
combined
。- 最小幅度
设置
log
幅度缩放器中使用的最小幅度。- 数据
设置数据显示模式。
它接受以下值
- ‘幅度’
- ‘相位’
- ‘延迟’
默认值为
magnitude
。- channels
设置处理音频时要使用的通道。默认情况下,将处理所有通道。
46.25 showspatial
将立体声输入音频转换为视频输出,表示两个通道之间的空间关系。
该滤波器接受以下选项
- size, s
指定输出的视频大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。默认值为
512x512
。- win_size
设置窗口大小。允许的范围是 1024 到 65536。默认大小为 4096。
- win_func
设置窗口函数。
它接受以下值
- ‘rect’
- ‘bartlett’
- ‘汉’
- ‘汉宁’
- ‘hamming’
- ‘blackman’
- ‘welch’
- ‘flattop’
- ‘bharris’
- ‘bnuttall’
- ‘bhann’
- ‘sine’
- ‘nuttall’
- ‘lanczos’
- ‘gauss’
- ‘tukey’
- ‘dolph’
- ‘cauchy’
- ‘parzen’
- ‘poisson’
- ‘bohman’
- ‘kaiser’
默认值为
hann
。- 速率,r
设置输出帧率。
46.26 showspectrum
将输入音频转换为表示音频频谱的视频输出。
该滤波器接受以下选项
- size, s
指定输出的视频大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为
640x512
。- 滑动
指定频谱应如何沿窗口滑动。
它接受以下值
- ‘replace’
当样本到达右侧时,样本会再次从左侧开始
- ‘scroll’
样本从右向左滚动
- ‘全帧’
仅当样本到达右侧时才会生成帧
- ‘rscroll’
样本从左向右滚动
- ‘左替换’
当样本到达左侧时,样本会再次从右侧开始
默认值为
replace
。- mode
指定显示模式。
它接受以下值
- ‘组合’
所有通道都显示在同一行中
- ‘separate’
所有通道都显示在单独的行中
默认值为 ‘combined’。
- 颜色
指定显示颜色模式。
它接受以下值
- ‘通道’
每个通道都以单独的颜色显示
- ‘强度’
每个通道都使用相同的颜色方案显示
- ‘彩虹’
每个通道都使用彩虹颜色方案显示
- ‘莫尔兰’
每个通道都使用莫尔兰颜色方案显示
- ‘星云’
每个通道都使用星云颜色方案显示
- ‘火焰’
每个通道都使用火焰颜色方案显示
- ‘fiery’
每个通道都使用火热的颜色方案显示
- ‘水果’
每个通道都使用水果颜色方案显示
- ‘cool’
每个通道都使用冷色颜色方案显示
- ‘magma’
每个通道都使用岩浆颜色方案显示
- ‘green’
每个通道都使用绿色颜色方案显示
- ‘viridis’
每个通道都使用绿视颜色方案显示
- ‘plasma’
每个通道都使用等离子颜色方案显示
- ‘cividis’
每个通道都使用 cividis 颜色方案显示
- ‘地形’
每个通道都使用地形颜色方案显示
默认值为 ‘channel’。
- scale
指定用于计算强度颜色值的比例。
它接受以下值
- ‘lin’
linear
- ‘sqrt’
平方根,默认值
- ‘cbrt’
立方根
- ‘log’
logarithmic
- ‘4次根’
4 次根
- ‘5次根’
5 次根
默认值为 ‘sqrt’。
- fscale
指定频率比例。
它接受以下值
- ‘lin’
linear
- ‘log’
logarithmic
默认值为 ‘lin’。
- saturation
设置显示颜色的饱和度修饰符。负值提供替代颜色方案。
0
表示完全没有饱和度。饱和度必须在 [-10.0, 10.0] 范围内。默认值为1
。- win_func
设置窗口函数。
它接受以下值
- ‘rect’
- ‘bartlett’
- ‘汉’
- ‘汉宁’
- ‘hamming’
- ‘blackman’
- ‘welch’
- ‘flattop’
- ‘bharris’
- ‘bnuttall’
- ‘bhann’
- ‘sine’
- ‘nuttall’
- ‘lanczos’
- ‘gauss’
- ‘tukey’
- ‘dolph’
- ‘cauchy’
- ‘parzen’
- ‘poisson’
- ‘bohman’
- ‘kaiser’
默认值为
hann
。- 方向
设置时间与频率轴的方向。可以是
vertical
或horizontal
。默认值为vertical
。- overlap
设置重叠窗口的比率。默认值为
0
。当值为1
时,重叠设置为当前使用的特定窗口函数的建议大小。- 增益
设置用于计算强度颜色值的比例增益。默认值为
1
。- 数据
设置要显示的数据。可以是
magnitude
(默认)或phase
,或解缠绕相位:uphase
。- rotation
设置颜色旋转,必须在 [-1.0, 1.0] 范围内。默认值为
0
。- start
设置显示频谱图的起始频率。默认值为
0
。- 停止
设置显示频谱图的停止频率。默认值为
0
。- fps
设置上限帧率限制。默认值为
auto
,无限制。- 图例
绘制时间和频率轴以及图例。默认情况下禁用。
- 动态范围
设置用于计算强度颜色值的动态范围。默认值为 120 dBFS。允许的范围是 10 到 200。
- 限制
设置输入音频样本音量的上限,单位为 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)手册中的“视频尺寸”部分。默认值为
4096x2048
。- mode
指定显示模式。
它接受以下值
- ‘组合’
所有通道都显示在同一行中
- ‘separate’
所有通道都显示在单独的行中
默认值为 ‘combined’。
- 颜色
指定显示颜色模式。
它接受以下值
- ‘通道’
每个通道都以单独的颜色显示
- ‘强度’
每个通道都使用相同的颜色方案显示
- ‘彩虹’
每个通道都使用彩虹颜色方案显示
- ‘莫尔兰’
每个通道都使用莫尔兰颜色方案显示
- ‘星云’
每个通道都使用星云颜色方案显示
- ‘火焰’
每个通道都使用火焰颜色方案显示
- ‘fiery’
每个通道都使用火热的颜色方案显示
- ‘水果’
每个通道都使用水果颜色方案显示
- ‘cool’
每个通道都使用冷色颜色方案显示
- ‘magma’
每个通道都使用岩浆颜色方案显示
- ‘green’
每个通道都使用绿色颜色方案显示
- ‘viridis’
每个通道都使用绿视颜色方案显示
- ‘plasma’
每个通道都使用等离子颜色方案显示
- ‘cividis’
每个通道都使用 cividis 颜色方案显示
- ‘地形’
每个通道都使用地形颜色方案显示
默认值为 ‘intensity’。
- scale
指定用于计算强度颜色值的比例。
它接受以下值
- ‘lin’
linear
- ‘sqrt’
平方根,默认值
- ‘cbrt’
立方根
- ‘log’
logarithmic
- ‘4次根’
4 次根
- ‘5次根’
5 次根
默认值为 ‘log’。
- fscale
指定频率比例。
它接受以下值
- ‘lin’
linear
- ‘log’
logarithmic
默认值为 ‘lin’。
- saturation
设置显示颜色的饱和度修饰符。负值提供替代颜色方案。
0
表示完全没有饱和度。饱和度必须在 [-10.0, 10.0] 范围内。默认值为1
。- win_func
设置窗口函数。
它接受以下值
- ‘rect’
- ‘bartlett’
- ‘汉’
- ‘汉宁’
- ‘hamming’
- ‘blackman’
- ‘welch’
- ‘flattop’
- ‘bharris’
- ‘bnuttall’
- ‘bhann’
- ‘sine’
- ‘nuttall’
- ‘lanczos’
- ‘gauss’
- ‘tukey’
- ‘dolph’
- ‘cauchy’
- ‘parzen’
- ‘poisson’
- ‘bohman’
- ‘kaiser’
默认值为
hann
。- 方向
设置时间与频率轴的方向。可以是
vertical
或horizontal
。默认值为vertical
。- 增益
设置用于计算强度颜色值的比例增益。默认值为
1
。- 图例
绘制时间和频率轴以及图例。默认启用。
- rotation
设置颜色旋转,必须在 [-1.0, 1.0] 范围内。默认值为
0
。- start
设置显示频谱图的起始频率。默认值为
0
。- 停止
设置显示频谱图的停止频率。默认值为
0
。- 动态范围
设置用于计算强度颜色值的动态范围。默认值为 120 dBFS。允许的范围是 10 到 200。
- 限制
设置输入音频样本音量的上限,单位为 dBFS。默认值为 0 dBFS。允许范围为 -100 到 100。
- opacity
设置使用带 Alpha 分量的像素格式输出时的不透明度强度。
46.27.1 示例
- 使用
ffmpeg
提取整个音轨的音频频谱图,尺寸为 1024x1024 像素ffmpeg -i audio.flac -lavfi showspectrumpic=s=1024x1024 spectrogram.png
46.28 showvolume
将输入音频音量转换为视频输出。
该滤波器接受以下选项
- 速率,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)手册中的“视频尺寸”部分。默认值为
600x240
。- mode
设置显示模式。
可用值为
- ‘point’
为每个样本绘制一个点。
- ‘line’
为每个样本绘制一条垂直线。
- ‘p2p’
为每个样本绘制一个点,并在它们之间绘制一条线。
- ‘cline’
为每个样本绘制一条居中的垂直线。
默认值为
point
。- n
设置在同一列上打印的样本数量。较大的值会降低帧率。必须是正整数。只有在没有明确指定 rate 的值时,才能设置此选项。
- 速率,r
设置(近似)输出帧率。这是通过设置选项 n 完成的。默认值为 "25"。
- split_channels
设置通道是应单独绘制还是重叠。默认值为 0。
- 颜色
设置以 ’|’ 分隔的颜色,这些颜色将用于绘制每个通道。
- 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)手册中的“视频尺寸”部分。默认值为
600x240
。- split_channels
设置通道是应单独绘制还是重叠。默认值为 0。
- 颜色
设置以 ’|’ 分隔的颜色,这些颜色将用于绘制每个通道。
- scale
设置振幅比例。
可用值为
- ‘lin’
线性。
- ‘log’
对数。
- ‘sqrt’
平方根。
- ‘cbrt’
立方根。
默认值为线性。
- draw
设置绘制模式。
可用值为
- ‘scale’
缩放每个绘制样本的像素值。
- ‘full’
直接绘制每个样本。
默认值为
scale
。- filter
设置滤波模式。
可用值为
- ‘average’
为每个绘制的样本使用平均样本值。
- ‘peak’
为每个绘制的样本使用峰值样本值。
默认值为
average
。
46.30.1 示例
- 使用
ffmpeg
提取整个音轨的波形通道分离表示,尺寸为 1024x800 像素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
模式设置。有关帧边数据类型的列表,请参阅 libavutil/frame.h 中的AVFrameSideDataType
枚举。例如,要选择AV_FRAME_DATA_PANSCAN
边数据,您必须指定PANSCAN
。
46.32 spectrumsynth
从 2 个输入视频频谱合成音频,第一个输入流表示随时间变化的幅度,第二个输入流表示随时间变化的相位。该滤镜将视频中显示的频域转换回音频输出中呈现的时域。
此滤镜主要用于反转处理过的 showspectrum 滤镜输出,但也可以从其他频谱图合成声音。但在这种情况下,如果相位数据不可用,结果将会很差,因为在这种情况下,需要重新创建相位数据,通常只是从随机噪声重新创建。为了获得最佳效果,请使用仅灰度输出(showspectrum 滤镜中的 channel
颜色模式),幅度视频使用 log
比例,相位视频使用 lin
比例。要生成相位,对于第二个视频,请使用 data
选项。输入视频通常应使用 fullframe
滑动模式,因为这样可以节省解码视频所需的资源。
该滤波器接受以下选项
- sample_rate
指定输出音频的采样率,生成频谱的音频采样率可能不同。
- channels
设置输入视频频谱中表示的通道数。
- scale
设置生成幅度输入频谱时使用的比例。可以是
lin
或log
。默认值为log
。- 滑动
设置生成输入频谱时使用的滑动模式。可以是
replace
、scroll
、fullframe
或rscroll
。默认值为fullframe
。- win_func
设置用于重新合成的窗口函数。
- overlap
设置窗口重叠。范围为
[0, 1]
。默认值为1
,这意味着将选择所选窗口函数的最佳重叠。- 方向
设置输入视频的方向。可以是
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];
- 使用
ffmpeg
创建输入音频的 5 个副本ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT
46.34 zmq, azmq
接收通过 libzmq 客户端发送的命令,并将它们转发到 filtergraph 中的过滤器。
zmq
和 azmq
作为直通过滤器工作。zmq
必须插入两个视频过滤器之间,azmq
必须插入两个音频过滤器之间。两者都能够向任何类型的过滤器发送消息。
要启用这些过滤器,您需要安装 libzmq 库和头文件,并使用 --enable-libzmq
配置 FFmpeg。
有关 libzmq 的更多信息,请参阅:http://www.zeromq.org/
zmq
和 azmq
过滤器作为 libzmq 服务器工作,它接收通过 bind_address(或缩写 "b")选项定义的网络接口发送的消息。此选项的默认值为 tcp://127.0.0.1:5555。您可能需要根据自己的需要更改此值,但不要忘记转义任何“:”符号(请参阅filtergraph 转义)。
接收到的消息必须采用以下形式
TARGET COMMAND [ARG]
TARGET 指定命令的目标,通常是过滤器类的名称或特定的过滤器实例名称。默认的过滤器实例名称使用模式“Parsed_<filter_name>_<index>”,但您可以使用“filter_name@id”语法覆盖此名称(请参阅Filtergraph 语法)。
COMMAND 指定目标滤镜的命令名称。
ARG 是可选的,指定给定 COMMAND 的可选参数列表。
接收后,将处理消息并将相应的命令注入到 filtergraph 中。根据结果,过滤器将采用以下格式向客户端发送回复
ERROR_CODE ERROR_REASON MESSAGE
MESSAGE 是可选的。
46.34.1 示例
请查看 tools/zmqsend 以获取 zmq 客户端的示例,该客户端可用于发送由这些过滤器处理的命令。
考虑由 ffplay
生成的以下 filtergraph。在此示例中,最后一个 overlay 过滤器具有一个实例名称。所有其他过滤器将具有默认的实例名称。
ffplay -dumpgraph 1 -f lavfi " color=s=100x100:c=red [l]; color=s=100x100:c=blue [r]; nullsrc=s=200x100, zmq [bg]; [bg][l] overlay [bg+l]; [bg+l][r] overlay@my=x=100 "
要更改视频左侧的颜色,可以使用以下命令
echo Parsed_color_0 c yellow | tools/zmqsend
要更改右侧
echo Parsed_color_1 c pink | tools/zmqsend
要更改右侧的位置
echo overlay@my x 150 | tools/zmqsend
47 多媒体源
以下是对当前可用的多媒体源的描述。
47.1 amovie
这与 movie 源相同,只是默认情况下它选择音频流。
47.2 avsynctest
生成音频/视频同步测试。
生成的流会定期显示闪光视频帧并在音频中发出蜂鸣声。有助于检查 A/V 同步问题。
它接受以下选项
- size, s
设置输出视频大小。默认值为
hd720
。- framerate, fr
设置输出视频帧率。默认值为
30
。- samplerate, sr
设置输出音频采样率。默认值为
44100
。- 幅度,a
设置输出音频蜂鸣幅度。默认值为
0.7
。- period, p
设置输出音频蜂鸣周期(以秒为单位)。默认值为
3
。- delay, dl
设置输出视频闪光延迟(以帧数为单位)。默认值为
0
。- cycle, c
启用视频延迟的循环,默认情况下禁用。
- duration,d
设置流输出持续时间。默认情况下,持续时间是无限的。
- fg, bg, ag
设置前景/背景/附加颜色。
47.2.1 命令
此源支持一些上述选项作为命令。
47.3 movie
从影片容器读取音频和/或视频流。
它接受以下参数
- 文件名
要读取的资源名称(不一定是文件;也可以是通过某些协议访问的设备或流)。
- format_name, f
指定要读取的影片的格式,可以是容器的名称或输入设备的名称。如果未指定,则从 movie_name 或通过探测来猜测格式。
- seek_point, sp
指定以秒为单位的查找点。帧将从该查找点开始输出。该参数使用
av_strtod
进行评估,因此数值可能带有 IS 后缀。默认值为“0”。- streams, s
指定要读取的流。可以指定多个流,用“+”分隔。然后,源将具有相同顺序的多个输出。该语法在 (ffmpeg)手册中的“流说明符”部分中进行了解释。两个特殊的名称“dv”和“da”分别指定默认(最适合的)视频和音频流。默认为“dv”,如果将过滤器称为“amovie”,则默认为“da”。
- stream_index, si
指定要读取的视频流的索引。如果该值为 -1,则会自动选择最合适的视频流。默认值为“-1”。已弃用。如果将过滤器称为“amovie”,它将选择音频而不是视频。
- loop
指定按顺序读取流的次数。如果该值为 0,则该流将无限循环。默认值为“1”。
请注意,当影片循环时,源时间戳不会更改,因此它会生成非单调递增的时间戳。
- discontinuity
指定帧之间的时间差,超过此时间差,该点被视为时间戳不连续点,可以通过调整后续时间戳来删除该不连续点。
- dec_threads
指定解码的线程数
- format_opts
指定已打开文件的格式选项。格式选项可以指定为以“:”分隔的 key=value 对的列表。以下示例显示了如何添加 protocol_whitelist 和 protocol_blacklist 选项
ffplay -f lavfi "movie=filename='1.sdp':format_opts='protocol_whitelist=file,rtp,udp\:protocol_blacklist=http'"
它允许将第二个视频叠加在 filtergraph 的主输入之上,如下图所示
input -----------> deltapts0 --> overlay --> output ^ | movie --> scale--> deltapts1 -------+
47.3.1 示例
- 从 in.avi 中跳过 AVI 文件开头的 3.2 秒,并将其叠加在标记为“in”的输入之上
movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over]; [in] setpts=PTS-STARTPTS [main]; [main][over] overlay=16:16 [out]
- 从 video4linux2 设备读取,并将其叠加在标记为“in”的输入之上
movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [over]; [in] setpts=PTS-STARTPTS [main]; [main][over] overlay=16:16 [out]
- 从 dvd.vob 读取第一个视频流和 ID 为 0x81 的音频流;视频连接到名为“video”的焊盘,音频连接到名为“audio”的焊盘
movie=dvd.vob:s=v:0+#0x81 [video] [audio]
47.3.2 命令
movie 和 amovie 都支持以下命令
- seek
使用“av_seek_frame”执行查找。语法为:seek stream_index|timestamp|flags
- stream_index:如果 stream_index 为 -1,则选择默认流,并且 timestamp 会自动从 AV_TIME_BASE 单位转换为流特定的 time_base。
- timestamp:以 AVStream.time_base 单位表示的时间戳,如果未指定流,则以 AV_TIME_BASE 单位表示。
- flags:选择方向和查找模式的标志。
- get_duration
获取以 AV_TIME_BASE 单位表示的影片时长。
48 外部库
FFmpeg 可以与许多外部库挂钩,以添加对更多格式的支持。默认情况下不使用它们,必须通过将适当的标志传递给 ./configure
来显式请求它们的使用。
48.1 开放媒体联盟 (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/
的内容复制到该目录中。然后使用 --enable-amf
配置 FFmpeg。
amf 编码器的初始化按此顺序进行:1)尝试通过 dx11(仅限 Windows)初始化 2)尝试通过 dx9(仅限 Windows)初始化 3)尝试通过 vulkan 初始化
要在 Linux 上使用 h.264 (AMD VCE) 编码器,需要 amdgru-pro 版本 19.20+ 和 amf-amdgpu-pro 包(amdgru-pro 包含,但不自动安装)。
可以使用官方 AMD 驱动存档中的 amdgpu-pro-install 脚本安装此驱动程序。
48.3 AviSynth
FFmpeg 可以读取 AviSynth 脚本作为输入。要启用此支持,请在安装 AviSynth+ 提供的头文件后,将 --enable-avisynth
传递给 configure。AviSynth+ 可以配置为仅安装头文件,方法是将 -DHEADERS_ONLY:bool=on
传递给基于 CMake 的常规构建系统,或使用提供的 GNUmakefile
。
对于 Windows,支持的 AviSynth 版本为:32 位构建使用 AviSynth 2.6 RC1 或更高版本,32 位和 64 位构建使用 AviSynth+ r1718 或更高版本。
对于 Linux、macOS 和 BSD,唯一支持的 AviSynth 版本是 AviSynth+,从 3.5 版本开始。
2016 年,AviSynth+ 添加了使用 GCC 构建的支持。然而,由于 Windows 调用约定的特殊性,32 位 GCC 构建的 AviSynth+ 与典型的 32 位 FFmpeg 构建不兼容。
默认情况下,FFmpeg 假定与 32 位 MSVC 构建的 AviSynth+ 兼容,因为这是最广泛使用和根深蒂固的构建配置。用户可以覆盖此设置,并通过在配置 FFmpeg 时将 -DAVSC_WIN32_GCC32
传递给 --extra-cflags
来启用对 32 位 GCC 构建的 AviSynth+ 的支持。
64 位构建的 FFmpeg 不受影响,可以使用 MSVC 或 GCC 构建的 AviSynth+,而无需任何特殊标志。
AviSynth(+) 是动态加载的。发行商可以使用 --enable-avisynth
构建 FFmpeg,并且二进制文件将正常工作,无论最终用户是否安装了 AviSynth。如果/当最终用户想要使用 AviSynth 脚本时,他们可以安装 AviSynth(+),FFmpeg 将能够找到并使用它来打开脚本。
48.4 Chromaprint
FFmpeg 可以利用 Chromaprint 库生成音频指纹。将 --enable-chromaprint
传递给 configure 以启用它。请参阅 https://acoustid.org/chromaprint。
48.5 codec2
FFmpeg 可以利用 codec2 库进行 codec2 解码和编码。目前没有原生解码器,因此必须使用 libcodec2 进行解码。
访问 http://freedv.org/,下载“Codec 2 source archive”。使用 CMake 构建并安装。Debian 用户可以改为安装 libcodec2-dev 包。安装 libcodec2 后,您可以将 --enable-libcodec2
传递给 configure 以启用它。
使用 codec2 最简单的方法是使用 .c2 文件,因为它们包含解码所需的模式信息。要编码这样的文件,请使用 .c2 文件扩展名,并为 libcodec2 编码器提供 -mode 选项:ffmpeg -i input.wav -mode 700C output.c2
。播放就像 ffplay output.c2
一样简单。要获取支持的模式列表,请运行 ffmpeg -h encoder=libcodec2
。也支持原始 codec2 文件。要理解它们,需要将正在使用的模式指定为格式选项:ffmpeg -f codec2raw -mode 1300 -i input.raw output.wav
。
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 或更高版本下(有关详细信息,请参阅 https://gnu.ac.cn/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 游戏音乐模拟器
FFmpeg 可以利用 Game Music Emu 库读取受支持的视频游戏音乐文件格式中的音频。将 --enable-libgme
传递给 configure 以启用它。请参阅 https://bitbucket.org/mpyne/game-music-emu/overview。
48.10 英特尔 QuickSync 视频
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 LCEVCdec
FFmpeg 可以利用 liblcevc_dec 库对支持的码流进行 LCEVC 增强层解码。
访问 https://github.com/v-novaltd/LCEVCdec 并按照说明安装库。然后将 --enable-liblcevc-dec
传递给 configure 以启用它。
LCEVCdec 在 BSD-3-Clause-Clear 许可证下。
48.14 libilbc
iLBC 是一种窄带语音编解码器,Google 作为 WebRTC 项目的一部分免费提供。libilbc 是 iLBC 编解码器的包装友好副本。FFmpeg 可以利用 libilbc 库进行 iLBC 解码和编码。
访问 https://github.com/TimothyGu/libilbc 并按照说明安装库。然后将 --enable-libilbc
传递给 configure 以启用它。
48.15 libjxl
JPEG XL 是一种旨在完全取代传统 JPEG 的图像格式,具有较长的生命周期。有关更多信息,请参阅 https://jpegxl.info/,有关库源,请参阅 https://github.com/libjxl/libjxl。您可以将 --enable-libjxl
传递给 configure 以启用 libjxl 包装器。
48.16 libvpx
FFmpeg 可以利用 libvpx 库进行 VP8/VP9 解码和编码。
访问 http://www.webmproject.org/ 并按照说明安装库。然后将 --enable-libvpx
传递给 configure 以启用它。
48.17 ModPlug
FFmpeg 可以使用这个源自 Modplug-XMMS 的库来读取类似 MOD 的音乐文件。请参阅 https://github.com/Konstanty/libmodplug。将 --enable-libmodplug
传递给 configure 以启用它。
48.18 OpenCORE、VisualOn 和 Fraunhofer 库
从 Google Android 源代码分拆出来的 OpenCore、VisualOn 和 Fraunhofer 库为许多音频编解码器提供了编码器。
OpenCORE 和 VisualOn 库在 Apache 许可证 2.0 下(有关详细信息,请参阅 https://apache.ac.cn/licenses/LICENSE-2.0),该许可证与 LGPL 版本 2.1 和 GPL 版本 2 不兼容。您必须通过将 --enable-version3
传递给 configure 将 FFmpeg 的许可证升级到 LGPL 版本 3(如果您启用了 GPL 组件,则为 GPL 版本 3)才能使用它。
Fraunhofer AAC 库的许可证与 GPL 不兼容。因此,对于 GPL 构建,您必须将 --enable-nonfree
传递给 configure 才能使用它。据我们所知,它与 LGPL 兼容。
48.18.1 OpenCORE AMR
FFmpeg 可以利用 OpenCORE 库进行 AMR-NB 解码/编码和 AMR-WB 解码。
请访问 http://sourceforge.net/projects/opencore-amr/ 并按照说明安装库文件。然后,在配置时传递 --enable-libopencore-amrnb
和/或 --enable-libopencore-amrwb
来启用它们。
48.18.2 VisualOn AMR-WB 编码器库
FFmpeg 可以使用 VisualOn AMR-WBenc 库进行 AMR-WB 编码。
请访问 http://sourceforge.net/projects/opencore-amr/ 并按照说明安装库文件。然后,在配置时传递 --enable-libvo-amrwbenc
来启用它。
48.18.3 Fraunhofer AAC 库
FFmpeg 可以使用 Fraunhofer AAC 库进行 AAC 解码和编码。
请访问 http://sourceforge.net/projects/opencore-amr/ 并按照说明安装库文件。然后,在配置时传递 --enable-libfdk-aac
来启用它。
48.18.4 LC3 库
FFmpeg 可以使用 Google LC3 库进行 LC3 解码和编码。
请访问 https://github.com/google/liblc3/ 并按照说明安装库文件。然后,在配置时传递 --enable-liblc3
来启用它。
48.19 OpenH264
FFmpeg 可以使用 OpenH264 库进行 H.264 解码和编码。
请访问 http://www.openh264.org/ 并按照说明安装库文件。然后,在配置时传递 --enable-libopenh264
来启用它。
对于解码,此库比 libavcodec 中的内置解码器功能有限得多;目前,此库不支持解码 B 帧以及其他一些主要/高级配置文件功能。(它目前仅支持受限基线配置文件和 CABAC。)使用它主要用于测试以及利用思科的专利组合许可 (http://www.openh264.org/BINARY_LICENSE.txt)。
48.20 OpenJPEG
FFmpeg 可以使用 OpenJPEG 库解码/编码 J2K 视频。请访问 http://www.openjpeg.org/ 获取库文件并按照安装说明进行操作。要在 FFmpeg 中启用 OpenJPEG,请在 ./configure 时传递 --enable-libopenjpeg
。
48.21 rav1e
FFmpeg 可以通过其 C 绑定使用 rav1e (Rust AV1 Encoder) 来编码视频。请访问 https://github.com/xiph/rav1e/ 并按照说明构建 C 库。要在 FFmpeg 中启用 rav1e,请在 ./configure 时传递 --enable-librav1e
。
48.22 SVT-AV1
FFmpeg 可以使用用于 AV1 编码的可伸缩视频技术库。
请访问 https://gitlab.com/AOMediaCodec/SVT-AV1/ 并按照说明安装库文件。然后,在配置时传递 --enable-libsvtav1
来启用它。
48.23 TwoLAME
FFmpeg 可以使用 TwoLAME 库进行 MP2 编码。
请访问 http://www.twolame.org/ 并按照说明安装库文件。然后,在配置时传递 --enable-libtwolame
来启用它。
48.24 VapourSynth
FFmpeg 可以读取 VapourSynth 脚本作为输入。要启用支持,请在配置时传递 --enable-vapoursynth
。Vapoursynth 通过 pkg-config
检测。支持 42 或更高版本。请参阅 http://www.vapoursynth.com/。
由于安全问题,Vapoursynth 脚本不会被自动检测到,因此必须强制输入格式。对于 ff* CLI 工具,请在输入 -i yourscript.vpy
之前添加 -f vapoursynth
。
48.25 x264
FFmpeg 可以使用 x264 库进行 H.264 编码。
请访问 http://www.videolan.org/developers/x264.html 并按照说明安装库文件。然后,在配置时传递 --enable-libx264
来启用它。
x264 遵循 GNU 公共许可证第 2 版或更高版本(详情请参阅 https://gnu.ac.cn/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级到 GPL 才能使用它。
48.26 x265
FFmpeg 可以使用 x265 库进行 HEVC 编码。
请访问 http://x265.org/developers.html 并按照说明安装库文件。然后,在配置时传递 --enable-libx265
来启用它。
x265 遵循 GNU 公共许可证第 2 版或更高版本(详情请参阅 https://gnu.ac.cn/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级到 GPL 才能使用它。
48.27 xavs
FFmpeg 可以使用 xavs 库进行 AVS 编码。
请访问 http://xavs.sf.net/ 并按照说明安装库文件。然后,在配置时传递 --enable-libxavs
来启用它。
48.28 xavs2
FFmpeg 可以使用 xavs2 库进行 AVS2-P2/IEEE1857.4 视频编码。
请访问 https://github.com/pkuvcl/xavs2 并按照说明安装库文件。然后,在配置时传递 --enable-libxavs2
来启用它。
libxavs2 遵循 GNU 公共许可证第 2 版或更高版本(详情请参阅 https://gnu.ac.cn/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级到 GPL 才能使用它。
48.29 超高速基本视频编码器 (XEVE)
FFmpeg 可以使用 XEVE 库进行 EVC 视频编码。
请访问 https://github.com/mpeg5/xeve 并按照说明安装 XEVE 库。然后,在配置时传递 --enable-libxeve
来启用它。
48.30 超高速基本视频解码器 (XEVD)
FFmpeg 可以使用 XEVD 库进行 EVC 视频解码。
请访问 https://github.com/mpeg5/xevd 并按照说明安装 XEVD 库。然后,在配置时传递 --enable-libxevd
来启用它。
48.31 ZVBI
ZVBI 是一个 VBI 解码库,FFmpeg 可以使用它来解码 DVB 图文电视页面和 DVB 图文电视字幕。
请访问 http://sourceforge.net/projects/zapping/ 并按照说明安装库文件。然后,在配置时传递 --enable-libzvbi
来启用它。
49 支持的文件格式、编解码器或功能
您可以使用 -formats
和 -codecs
选项来获取详尽的列表。
49.1 文件格式
FFmpeg 通过 libavformat
库支持以下文件格式
名称 | 编码 | 解码 | 注释 |
3dostr | X | ||
4xm | X | 4X 技术格式,用于某些游戏。 | |
8088flex TMV | X | ||
AAX | X | Audible Enhanced Audio 格式,用于有声读物。 | |
AA | X | Audible 格式 2、3 和 4,用于有声读物。 | |
ACT Voice | X | 包含 G.729 音频 | |
Adobe Filmstrip | X | X | |
音频 IFF (AIFF) | X | X | |
American Laser Games MM | X | 用于《疯狂麦克斯》等游戏的 多媒体格式。 | |
3GPP AMR | X | X | |
Amazing Studio Packed Animation File | X | 用于游戏《黑暗之心》的多媒体格式。 | |
Apple HTTP Live Streaming | X | ||
Artworx 数据格式 | X | ||
Interplay ACM | X | 某些 Interplay 游戏中使用的仅音频格式。 | |
ADP | X | Nintendo Gamecube 上使用的音频格式。 | |
AFC | X | Nintendo Gamecube 上使用的音频格式。 | |
ADS/SS2 | X | PS2 上使用的音频格式。 | |
APNG | X | X | |
ASF | X | X | 高级/活动流格式。 |
AST | X | X | Nintendo Wii 上使用的音频格式。 |
AVI | X | X | |
AviSynth | X | ||
AVR | X | Mac 上使用的音频格式。 | |
AVS | X | 游戏《生物冲击》使用的多媒体格式。 | |
Beam Software SIFF | X | Beam Software 的某些游戏中使用的音频和视频格式。 | |
Bethesda Softworks VID | X | 用于 Bethesda Softworks 的某些游戏。 | |
二进制文本 | X | ||
Bink | X | 许多游戏使用的多媒体格式。 | |
Bink Audio | X | 某些游戏使用的仅音频多媒体格式。 | |
Bitmap Brothers JV | X | 用于 Z 和 Z95 游戏。 | |
BRP | X | Argonaut Games 格式。 | |
Brute Force & Ignorance | X | 用于游戏《Flash Traffic: City of Angels》。 | |
BFSTM | X | Nintendo WiiU 上使用的音频格式(基于 BRSTM)。 | |
BRSTM | X | Nintendo Wii 上使用的音频格式。 | |
BW64 | X | 广播波 64 位。 | |
BWF | X | X | |
codec2 (raw) | X | X | 必须给出 -mode 格式选项才能正确解码。 |
codec2 (.c2 文件) | X | X | 包含带有版本和模式信息的标头,简化播放。 |
CRI ADX | X | X | 主机视频游戏中使用的仅音频格式。 |
CRI AIX | X | ||
CRI HCA | X | 主机视频游戏中使用的仅音频格式。 | |
《碟形世界 II》BMV | X | ||
Interplay C93 | X | Interplay公司游戏《网络创世纪》(Cyberia)中使用。 | |
Delphine Software International CIN | X | Delphine Software游戏使用的多媒体格式。 | |
数字语音标准 (DSS) | X | ||
CD+G | X | CD+G 卡拉OK光盘使用的视频格式 | |
Phantom Cine | X | ||
Commodore CDXL | X | Amiga CD视频格式 | |
Core Audio Format | X | X | 苹果核心音频格式 |
CRC 测试格式 | X | ||
Creative Voice | X | X | 为声霸卡Pro创建。 |
CRYO APC | X | CRYO Interactive Entertainment公司部分游戏使用的音频格式。 | |
D-Cinema 音频 | X | X | |
Deluxe Paint 动画 | X | ||
DCSTR | X | ||
DFA | X | 此格式用于《时空悍将》(Chronomaster) 游戏 | |
DirectDraw 表面 | X | ||
DSD 流文件 (DSF) | X | ||
DV 视频 | X | X | |
DXA | X | 此格式用于《懦夫档案》(Feeble Files) 游戏的非 Windows 版本以及为 ScummVM 重新打包的不同游戏过场动画。 | |
Electronic Arts cdata | X | ||
Electronic Arts 多媒体 | X | 用于各种EA游戏;文件扩展名如WVE和UV2。 | |
Ensoniq Paris 音频文件 | X | ||
FFM (FFserver 直播源) | X | X | |
Flash (SWF) | X | X | |
Flash 9 (AVM2) | X | X | 仅解码嵌入式音频。 |
FLI/FLC/FLX 动画 | X | .fli/.flc 文件 | |
Flash 视频 (FLV) | X | X | Macromedia Flash 视频文件 |
framecrc 测试格式 | X | ||
FunCom ISS | X | FunCom 公司的各种游戏(如《漫长旅程》(The Longest Journey))中使用的音频格式。 | |
G.723.1 | X | X | |
G.726 | X | 左右对齐。 | |
G.729 BIT | X | X | |
G.729 raw | X | ||
GENH | X | 各种游戏的音频格式。 | |
GIF 动画 | X | X | |
GXF | X | X | 通用交换格式 SMPTE 360M,由 Thomson Grass Valley 播出服务器使用。 |
HNM | X | 仅支持版本 4,用于 Cryo Interactive 的一些游戏中 | |
iCEDraw 文件 | X | ||
ICO | X | X | Microsoft Windows ICO |
id Quake II CIN 视频 | X | ||
id RoQ | X | X | 用于《雷神之锤III》(Quake III)、《绝地武士2》(Jedi Knight 2)和其他计算机游戏。 |
IEC61937 封装 | X | X | |
IFF | X | 交换文件格式 | |
IFV | X | 一些旧的CCTV DVR使用的格式。 | |
iLBC | X | X | |
Interplay MVE | X | 用于各种 Interplay 计算机游戏。 | |
Iterated Systems ClearVideo | X | 仅 I 帧 | |
IV8 | X | 由 IndigoVision 8000 视频服务器生成的格式。 | |
IVF (On2) | X | X | libvpx 使用的格式 |
互联网视频录制 | X | ||
IRCAM | X | X | |
LAF | X | 无限音频格式 | |
LATM | X | X | |
LMLM4 | X | 由 Linux Media Labs MPEG-4 PCI 板使用 | |
LOAS | X | 包含 LATM 多路复用 AAC 音频 | |
LRC | X | X | |
LVF | X | ||
LXF | X | VR 本机流格式,由 Leitch/Harris 的视频服务器使用。 | |
Magic Lantern 视频 (MLV) | X | ||
Matroska | X | X | |
Matroska 音频 | X | ||
FFmpeg 元数据 | X | X | 文本格式的元数据。 |
MAXIS XA | X | 用于《模拟城市3000》(Sim City 3000);文件扩展名为 .xa。 | |
MCA | X | 用于 Capcom 的一些游戏;文件扩展名为 .mca。 | |
MD Studio | X | ||
合金装备:双蛇 | X | ||
Megalux 帧 | X | 由 Megalux Ultimate Paint 使用 | |
MobiClip MODS | X | ||
MobiClip MOFLEX | X | ||
Mobotix .mxg | X | ||
Monkey’s Audio | X | ||
Motion Pixels MVI | X | ||
MOV/QuickTime/MP4 | X | X | 支持 3GP、3GP2、PSP、iPod 变体 |
MP2 | X | X | |
MP3 | X | X | |
MPEG-1 系统 | X | X | 多路复用音频和视频,支持 VCD 格式 |
MPEG-PS (节目流) | X | X | 也称为VOB 文件,支持 SVCD 和 DVD 格式 |
MPEG-TS (传输流) | X | X | 也称为 DVB 传输流 |
MPEG-4 | X | X | MPEG-4 是 QuickTime 的一个变体。 |
MSF | X | PS3 上使用的音频格式。 | |
Mirillis FIC 视频 | X | 不渲染光标。 | |
MIDI Sample Dump Standard | X | ||
MIME 多部分 JPEG | X | ||
MSN TCP 网络摄像头 | X | 由 MSN Messenger 网络摄像头流使用。 | |
MTV | X | ||
Musepack | X | ||
Musepack SV8 | X | ||
素材交换格式 (MXF) | X | X | SMPTE 377M,由 D-Cinema、广播行业使用。 |
素材交换格式 (MXF),D-10 映射 | X | X | SMPTE 386M,D-10/IMX 映射。 |
NC 摄像头馈送 | X | NC (AVIP NC4600) 摄像头流 | |
NIST SPeech HEader REsources | X | ||
计算机化语音实验室 NSP | X | ||
NTT TwinVQ (VQF) | X | 日本电报电话公司 TwinVQ。 | |
Nullsoft 流媒体视频 | X | ||
NuppelVideo | X | ||
NUT | X | X | NUT 开放容器格式 |
Ogg | X | X | |
Playstation Portable PMP | X | ||
便携式语音格式 | X | ||
RK 音频 (RKA) | X | ||
TechnoTrend PVA | X | 由 TechnoTrend DVB PCI 板使用。 | |
QCP | X | ||
原始 ADTS (AAC) | X | X | |
原始 AC-3 | X | X | |
原始 AMR-NB | X | ||
原始 AMR-WB | X | ||
原始 APAC | X | ||
原始 aptX | X | X | |
原始 aptX HD | X | X | |
原始 Bonk | X | ||
原始中国 AVS 视频 | X | X | |
原始 DFPWM | X | X | |
原始 Dirac | X | X | |
原始 DNxHD | X | X | |
原始 DTS | X | X | |
原始 DTS-HD | X | ||
原始 E-AC-3 | X | X | |
原始 EVC | X | X | |
原始 FLAC | X | X | |
原始 GSM | X | ||
原始 H.261 | X | X | |
原始 H.263 | X | X | |
原始 H.264 | X | X | |
原始 HEVC | X | X | |
原始 Ingenient MJPEG | X | ||
原始 MJPEG | X | X | |
原始 MLP | X | ||
原始 MPEG | X | ||
原始 MPEG-1 | X | ||
原始 MPEG-2 | X | ||
原始 MPEG-4 | X | X | |
原始 NULL | X | ||
原始视频 | X | X | |
原始 id RoQ | X | ||
原始 OBU | X | X | |
原始 OSQ | X | ||
原始 SBC | X | X | |
原始 Shorten | X | ||
原始 TAK | X | ||
原始 TrueHD | X | X | |
原始 VC-1 | X | X | |
原始 PCM A-law | X | X | |
原始 PCM mu-law | X | X | |
原始 PCM 阿基米德 VIDC | X | X | |
原始 PCM 有符号 8 位 | X | X | |
原始 PCM 有符号 16 位大端 | X | X | |
原始 PCM 有符号 16 位小端 | X | X | |
原始 PCM 有符号 24 位大端 | X | X | |
原始 PCM 有符号 24 位小端 | X | X | |
原始 PCM 有符号 32 位大端 | X | X | |
原始 PCM 有符号 32 位小端 | X | X | |
原始 PCM 有符号 64 位大端 | X | X | |
原始 PCM 有符号 64 位小端 | X | X | |
原始 PCM 无符号 8 位 | X | X | |
原始 PCM 无符号 16 位大端 | X | X | |
原始 PCM 无符号 16 位小端 | X | X | |
原始 PCM 无符号 24 位大端 | X | X | |
原始 PCM 无符号 24 位小端 | X | X | |
原始 PCM 无符号 32 位大端 | X | X | |
原始 PCM 无符号 32 位小端 | X | X | |
原始 PCM 16.8 浮点小端 | X | ||
原始 PCM 24.0 浮点小端 | X | ||
原始 PCM 浮点 32 位大端 | X | X | |
原始 PCM 浮点 32 位小端 | X | X | |
原始 PCM 浮点 64 位大端 | X | X | |
原始 PCM 浮点 64 位小端 | X | X | |
RDT | X | ||
REDCODE R3D | X | RED 数字相机使用的文件格式,包含 JPEG 2000 帧和 PCM 音频。 | |
RealMedia | X | X | |
重定向器 | X | ||
RedSpark | X | ||
Renderware 纹理字典 | X | ||
Resolume DXV | X | X | 仅支持 DXT1(普通质量,无 Alpha)纹理格式的编码。 |
RF64 | X | ||
RL2 | X | Entertainment Software Partners 公司的部分游戏中使用的音频和视频格式。 | |
RPL/ARMovie | X | ||
乐高头脑风暴 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 | ||
数字图片 SGA | X | ||
世嘉 FILM/CPK | X | X | 用于许多世嘉土星游戏机游戏中。 |
Silicon Graphics 电影 | X | ||
Sierra SOL | X | .sol 文件用于 Sierra Online 游戏中。 | |
Sierra VMD | X | 用于 Sierra CD-ROM 游戏中。 | |
Smacker | X | 许多游戏使用的多媒体格式。 | |
SMJPEG | X | X | 用于某些 Loki 游戏移植版中。 |
SMPTE 337M 封装 | X | ||
Smush | X | 一些 LucasArts 游戏中使用的多媒体格式。 | |
索尼 OpenMG (OMA) | X | X | 索尼 Sonic Stage 和索尼 Vegas 中使用的音频格式。 |
索尼 PlayStation STR | X | ||
索尼 Wave64 (W64) | X | X | |
SoX 原生格式 | X | X | |
SUN AU 格式 | X | X | |
SUP 原始 PGS 字幕 | X | X | |
SVAG | X | 科乐美 PS2 游戏中使用的音频格式。 | |
TDSC | X | ||
文本文件 | X | ||
THP | X | 用于任天堂 GameCube。 | |
Tiertex Limited SEQ | X | Tiertex .seq 文件用于 DOS CD-ROM 版游戏《闪回》中。 | |
True Audio | X | X | |
VAG | X | 许多索尼 PS2 游戏中使用的音频格式。 | |
VC-1 测试比特流 | X | X | |
Vidvox Hap | X | X | |
Vivo | X | ||
VPK | X | 索尼 PS 游戏中使用的音频格式。 | |
Marble WADY | X | ||
WAV | X | X | |
波形存档器 | X | ||
WavPack | X | X | |
WebM | X | X | |
Windows 电视 (WTV) | X | X | |
《银河飞将 III》电影 | X | Origin 的《银河飞将 III》电脑游戏中使用的多媒体格式。 | |
Westwood Studios 音频 | X | X | Westwood Studios 游戏中使用的多媒体格式。 |
Westwood Studios VQA | X | Westwood Studios 游戏中使用的多媒体格式。 | |
宽带单比特数据 (WSD) | X | ||
WVE | X | ||
科乐美 XMD | X | ||
XMV | X | Xbox 游戏中使用的微软视频容器。 | |
XVAG | X | PS3 上使用的音频格式。 | |
xWMA | X | XAudio 2 使用的微软音频容器。 | |
扩展二进制文本 (XBIN) | X | ||
YUV4MPEG 管道 | X | X | |
Psygnosis YOP | X |
X
表示该列中的功能(编码/解码)受支持。
49.2 图像格式
FFmpeg 可以读取和写入视频序列每一帧的图像。以下图像格式受支持
名称 | 编码 | 解码 | 注释 |
.Y.U.V | X | X | 每个分量一个原始文件 |
Alias PIX | X | X | Alias/Wavefront PIX 图像格式 |
动画 GIF | X | X | |
APNG | X | X | 动画可移植网络图形 |
BMP | X | X | 微软 BMP 图像 |
BRender PIX | X | Argonaut BRender 3D 引擎图像格式。 | |
CRI | X | Cintel RAW | |
DPX | X | X | 数字图片交换 |
EXR | X | OpenEXR | |
FITS | X | X | 灵活图像传输系统 |
HDR | X | X | Radiance HDR RGBE 图像格式 |
IMG | X | GEM 光栅图像 | |
JPEG | X | X | 不支持渐进式 JPEG。 |
JPEG 2000 | X | X | |
JPEG-LS | X | X | |
LJPEG | X | 无损 JPEG | |
Media 100 | X | ||
MSP | X | 微软画图图像 | |
PAM | X | X | PAM 是一个具有 alpha 支持的 PNM 扩展。 |
PBM | X | X | 可移植位图图像 |
PCD | X | PhotoCD | |
PCX | X | X | PC 画笔 |
PFM | X | X | 可移植浮点图图像 |
PGM | X | X | 可移植灰度图图像 |
PGMYUV | X | X | PGM,带有 YUV 4:2:0 中的 U 和 V 分量 |
PGX | X | PGX 文件解码器 | |
PHM | X | X | 可移植半浮点图图像 |
PIC | X | Pictor/PC Paint | |
PNG | X | X | 可移植网络图形图像 |
PPM | X | X | 可移植像素图图像 |
PSD | X | Photoshop | |
PTX | X | V.Flash PTX 格式 | |
QOI | X | X | 相当好的图像格式 |
SGI | X | X | SGI RGB 图像格式 |
Sun 光栅文件 | X | X | Sun RAS 图像格式 |
TIFF | X | X | 尚不支持 YUV、JPEG 和一些扩展。 |
Truevision Targa | X | X | Targa (.TGA) 图像格式 |
VBN | X | X | Vizrt 二进制图像格式 |
WBMP | X | X | 无线应用协议位图图像格式 |
WebP | E | X | WebP 图像格式,编码通过外部库 libwebp 支持 |
XBM | X | X | X 位图图像格式 |
XFace | X | X | X-Face 图像格式 |
XPM | X | X 像素图图像格式 | |
XWD | X | X | X 窗口转储图像格式 |
X
表示该列中的功能(编码/解码)受支持。
E
表示通过外部库提供支持。
49.3 视频编解码器
名称 | 编码 | 解码 | 注释 |
4X 电影 | X | 用于某些电脑游戏中。 | |
8088flex TMV | X | ||
A64 多色 | X | 创建适合在 Commodore 64 上播放的视频(多色模式)。 | |
Amazing Studio PAF 视频 | X | ||
American Laser Games MM | X | 用于像《疯狗麦克雷》这样的游戏中。 | |
Amuse Graphics 电影 | X | ||
AMV 视频 | X | X | 用于中国 MP3 播放器中。 |
ANSI/ASCII 艺术 | X | ||
苹果中间编解码器 | X | ||
苹果 MJPEG-B | X | ||
苹果 Pixlet | X | ||
苹果 ProRes | X | X | fourcc:apch、apcn、apcs、apco、ap4h、ap4x |
苹果 QuickDraw | X | fourcc:qdrw | |
Argonaut 视频 | X | 用于某些 Argonaut 游戏中。 | |
华硕 v1 | X | X | fourcc:ASV1 |
华硕 v2 | X | X | fourcc:ASV2 |
ATI VCR1 | X | fourcc:VCR1 | |
ATI VCR2 | X | fourcc:VCR2 | |
Auravision Aura | X | ||
Auravision Aura 2 | X | ||
Autodesk Animator Flic 视频 | X | ||
Autodesk RLE | X | fourcc:AASC | |
AV1 | E | E | 通过外部库 libaom、libdav1d、librav1e 和 libsvtav1 支持 |
Avid 1:1 10 位 RGB 打包器 | X | X | fourcc:AVrp |
AVS(音频视频标准)视频 | X | 《生物冲击》游戏使用的视频编码。 | |
AVS2-P2/IEEE1857.4 | E | E | 通过外部库 libxavs2 和 libdavs2 支持 |
AVS3-P2/IEEE1857.10 | E | 通过外部库 libuavs3d 支持 | |
AYUV | X | X | 微软未压缩打包 4:4:4:4 |
Beam Software VB | X | ||
Bethesda VID 视频 | X | 用于 Bethesda Softworks 的某些游戏。 | |
Bink 视频 | X | ||
BitJazz SheerVideo | X | ||
Bitmap Brothers JV 视频 | X | ||
y41p Brooktree 未压缩 4:1:1 12 位 | X | X | |
Brooktree ProSumer 视频 | X | fourcc:BT20 | |
Brute Force & Ignorance | X | 用于游戏《Flash Traffic: City of Angels》。 | |
C93 视频 | X | 《网络空间》游戏中使用的编解码器。 | |
CamStudio | X | fourcc:CSCD | |
CD+G | X | 用于 CD+G 卡拉 OK 光盘的视频编解码器 | |
CDXL | X | Amiga CD 视频编解码器 | |
中国 AVS 视频 | E | X | AVS1-P2,JiZhun 配置文件,通过外部库 libxavs 编码 |
Delphine Software International CIN 视频 | X | Delphine Software International 游戏中使用的编解码器。 | |
《碟形世界 II》BMV 视频 | X | ||
CineForm HD | X | X | |
Canopus HQ | X | ||
Canopus HQA | X | ||
Canopus HQX | X | ||
Canopus 无损编解码器 | X | ||
CDToons | X | 各种 Broderbund 游戏中使用的编解码器。 | |
Cinepak | X | ||
Cirrus Logic AccuPak | X | X | fourcc:CLJR |
CPiA 视频格式 | X | ||
Creative YUV (CYUV) | X | ||
DFA | X | 《超时空英雄》游戏中使用的编解码器。 | |
Dirac | E | X | 通过原生 vc2(Dirac Pro)编码器支持 |
Deluxe Paint 动画 | X | ||
DNxHD | X | X | 又名 SMPTE VC3 |
Duck TrueMotion 1.0 | X | fourcc:DUCK | |
Duck TrueMotion 2.0 | X | fourcc:TM20 | |
Duck TrueMotion 2.0 RT | X | fourcc:TR20 | |
DV(数字视频) | X | X | |
Dxtory 捕获格式 | X | ||
Feeble Files/ScummVM DXA | X | 最初在《Feeble Files》游戏中使用的一个编解码器。 | |
Electronic Arts CMV 视频 | X | 用于 NHL 95 游戏中。 | |
Electronic Arts Madcow 视频 | X | ||
Electronic Arts TGV 视频 | X | ||
Electronic Arts TGQ 视频 | X | ||
Electronic Arts TQI 视频 | X | ||
Escape 124 | X | ||
Escape 130 | X | ||
EVC / MPEG-5 Part 1 | E | E | 通过外部库 libxeve 和 libxevd 支持编码和解码 |
FFmpeg 视频编解码器 #1 | X | X | 无损编解码器 (fourcc: FFV1) |
Flash Screen Video v1 | X | X | fourcc:FSV1 |
Flash 屏幕视频 v2 | X | X | |
Flash 视频 (FLV) | X | X | Flash 中使用的 Sorenson H.263 |
FM 屏幕捕获编解码器 | X | ||
前向无压缩 | X | ||
Fraps | X | ||
Go2Meeting | X | fourcc: G2M2, G2M3 | |
Go2Webinar | X | fourcc: G2M4 | |
Gremlin 数字视频 | X | ||
H.261 | X | X | |
H.263 / H.263-1996 | X | X | |
H.263+ / H.263-1998 / H.263 版本 2 | X | X | |
H.264 / AVC / MPEG-4 AVC / MPEG-4 第 10 部分 | E | X | 通过外部库 libx264 和 OpenH264 支持编码 |
HEVC | X | X | 通过外部库 libx265 和 libkvazaar 支持编码 |
HNM 版本 4 | X | ||
HuffYUV | X | X | |
HuffYUV FFmpeg 变体 | X | X | |
IBM Ultimotion | X | fourcc: ULTI | |
id Cinematic 视频 | X | 用于 Quake II。 | |
id RoQ 视频 | X | X | 用于 Quake III、Jedi Knight 2 和其他电脑游戏。 |
IFF ILBM | X | IFF 交错位图 | |
IFF ByteRun1 | X | IFF 游程编码位图 | |
Infinity IMM4 | X | ||
Intel H.263 | X | ||
Intel Indeo 2 | X | ||
Intel Indeo 3 | X | ||
Intel Indeo 4 | X | ||
Intel Indeo 5 | X | ||
Interplay C93 | X | Interplay公司游戏《网络创世纪》(Cyberia)中使用。 | |
Interplay MVE 视频 | X | 用于 Interplay .MVE 文件。 | |
J2K | X | X | |
Karl Morton 的视频编解码器 | X | 用于 Worms 游戏的编解码器。 | |
Kega 游戏视频 (KGV1) | X | Kega 模拟器屏幕捕获编解码器。 | |
Lagarith | X | ||
LCEVC / MPEG-5 LCEVC / MPEG-5 第 2 部分 | E | 通过外部库 liblcevc-dec 支持解码 | |
LCL (无损编解码器库) MSZH | X | ||
LCL (无损编解码器库) ZLIB | E | E | |
LEAD MCMP | X | ||
LOCO | X | ||
LucasArts SANM/Smush | X | 用于 LucasArts 游戏/SMUSH 动画。 | |
无损 MJPEG | X | X | |
MagicYUV 视频 | X | X | |
Mandsoft 屏幕捕获编解码器 | X | ||
Microsoft ATC 屏幕 | X | 也称为 Microsoft Screen 3。 | |
Microsoft Expression Encoder 屏幕 | X | 也称为 Microsoft Titanium Screen 2。 | |
Microsoft RLE | X | X | |
Microsoft Screen 1 | X | 也称为 Windows Media Video V7 Screen。 | |
Microsoft Screen 2 | X | 也称为 Windows Media Video V9 Screen。 | |
Microsoft Video 1 | X | ||
Mimic | X | 用于 MSN Messenger 网络摄像头流。 | |
Miro VideoXL | X | fourcc: VIXL | |
MJPEG (Motion JPEG) | X | X | |
Mobotix MxPEG 视频 | X | ||
Motion Pixels 视频 | X | ||
MPEG-1 视频 | X | X | |
MPEG-2 视频 | X | X | |
MPEG-4 第 2 部分 | X | X | libxvidcore 可用于替代编码。 |
MPEG-4 第 2 部分 Microsoft 变体版本 1 | X | ||
MPEG-4 第 2 部分 Microsoft 变体版本 2 | X | X | |
MPEG-4 第 2 部分 Microsoft 变体版本 3 | X | X | |
Newtek SpeedHQ | X | X | |
任天堂 Gamecube THP 视频 | X | ||
NotchLC | X | ||
NuppelVideo/RTjpeg | X | 用于 NuppelVideo 文件的视频编码。 | |
On2 VP3 | X | 仍然是实验性的 | |
On2 VP4 | X | fourcc: VP40 | |
On2 VP5 | X | fourcc: VP50 | |
On2 VP6 | X | fourcc: VP60,VP61,VP62 | |
On2 VP7 | X | fourcc: VP70,VP71 | |
VP8 | E | X | fourcc: VP80,通过外部库 libvpx 支持编码 |
VP9 | E | X | 通过外部库 libvpx 支持编码 |
Pinnacle TARGA CineWave YUV16 | X | fourcc: Y216 | |
Q-team QPEG | X | fourccs: QPEG, Q1.0, Q1.1 | |
QuickTime 8BPS 视频 | X | ||
QuickTime Animation (RLE) 视频 | X | X | fourcc: ’rle ’ |
QuickTime Graphics (SMC) | X | X | fourcc: ’smc ’ |
QuickTime 视频 (RPZA) | X | X | fourcc: rpza |
R10K AJA Kona 10 位 RGB 编解码器 | X | X | |
R210 Quicktime 无压缩 RGB 10 位 | X | X | |
原始视频 | X | X | |
RealVideo 1.0 | X | X | |
RealVideo 2.0 | X | X | |
RealVideo 3.0 | X | 仍然远非理想 | |
RealVideo 4.0 | X | ||
RealVideo 6.0 | X | ||
Renderware TXD (纹理字典) | X | Renderware 引擎使用的纹理字典。 | |
RivaTuner 视频 | X | fourcc: ’RTV1’ | |
RL2 视频 | X | 由 Entertainment Software Partners 在一些游戏中 使用 | |
ScreenPressor | X | ||
Screenpresso | X | ||
Screen Recorder Gold 编解码器 | X | ||
Sierra VMD 视频 | X | 用于 Sierra VMD 文件。 | |
Silicon Graphics 运动视频压缩器 1 (MVC1) | X | ||
Silicon Graphics 运动视频压缩器 2 (MVC2) | X | ||
Silicon Graphics RLE 8 位视频 | X | ||
Smacker 视频 | X | 用于 Smacker 的视频编码。 | |
SMPTE VC-1 | X | ||
Snow | X | X | 实验性小波编解码器 (fourcc: SNOW) |
Sony PlayStation MDEC (运动解码器) | X | ||
Sorenson 矢量量化器 1 | X | X | fourcc: SVQ1 |
Sorenson 矢量量化器 3 | X | fourcc: SVQ3 | |
Sunplus JPEG (SP5X) | X | fourcc: SP5X | |
TechSmith 屏幕捕获编解码器 | X | fourcc: TSCC | |
TechSmith 屏幕捕获编解码器 2 | X | fourcc: TSC2 | |
Theora | E | X | 通过外部库 libtheora 支持编码 |
Tiertex Limited SEQ 视频 | X | 用于 DOS CD-ROM FlashBack 游戏的编解码器。 | |
Ut Video | X | X | |
v210 QuickTime 无压缩 4:2:2 10 位 | X | X | |
v308 QuickTime 无压缩 4:4:4 | X | X | |
v408 QuickTime 无压缩 4:4:4:4 | X | X | |
v410 QuickTime 无压缩 4:4:4 10 位 | X | X | |
VBLE 无损编解码器 | X | ||
vMix 视频 | X | fourcc: ’VMX1’ | |
VMware 屏幕编解码器 / VMware 视频 | X | 用于 VMware 捕获的视频中的编解码器。 | |
Westwood Studios VQA(矢量量化动画)视频 | X | ||
Windows Media 图像 | X | ||
Windows Media Video 7 | X | X | |
Windows Media Video 8 | X | X | |
Windows Media Video 9 | X | 尚未完全工作 | |
Wing Commander III / Xan | X | 用于 Wing Commander III .MVE 文件。 | |
Wing Commander IV / Xan | X | 用于 Wing Commander IV。 | |
Winnov WNV1 | X | ||
WMV7 | X | X | |
YAMAHA SMAF | X | X | |
Psygnosis YOP 视频 | X | ||
yuv4 | X | X | libquicktime 无压缩打包 4:2:0 |
ZeroCodec 无损视频 | X | ||
ZLIB | X | X | LCL 的一部分,编码器是实验性的 |
Zip 运动块视频 | X | X | 编码器仅在 PAL8 中工作。 |
X
表示该列中的功能(编码/解码)受支持。
E
表示通过外部库提供支持。
49.4 音频编解码器
名称 | 编码 | 解码 | 注释 |
8SVX 指数 | X | ||
8SVX 斐波那契 | X | ||
AAC | EX | X | 通过内部编码器和外部库 libfdk-aac 支持编码 |
AAC+ | E | IX | 通过外部库 libfdk-aac 支持编码 |
AC-3 | IX | IX | |
ACELP.KELVIN | X | ||
ADPCM 4X 电影 | X | ||
ADPCM Yamaha AICA | X | ||
ADPCM AmuseGraphics 电影 | X | ||
ADPCM Argonaut Games | X | X | |
ADPCM CDROM XA | X | ||
ADPCM Creative Technology | X | 16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2 | |
ADPCM Electronic Arts | X | 用于各种 EA 游戏。 | |
ADPCM Electronic Arts Maxis CDROM XS | X | 用于 Sim City 3000。 | |
ADPCM Electronic Arts R1 | X | ||
ADPCM Electronic Arts R2 | X | ||
ADPCM Electronic Arts R3 | X | ||
ADPCM Electronic Arts XAS | X | ||
ADPCM G.722 | X | X | |
ADPCM G.726 | X | X | |
ADPCM IMA Acorn Replay | X | ||
ADPCM IMA AMV | X | X | 用于 AMV 文件 |
ADPCM IMA Cunning Developments | X | ||
ADPCM IMA Electronic Arts EACS | X | ||
ADPCM IMA Electronic Arts SEAD | X | ||
ADPCM IMA Funcom | X | ||
ADPCM IMA High Voltage Software ALP | X | X | |
ADPCM IMA Mobiclip MOFLEX | X | ||
ADPCM IMA QuickTime | X | X | |
ADPCM IMA Simon & Schuster Interactive | X | X | |
ADPCM IMA Ubisoft APM | X | X | |
ADPCM IMA Loki SDL MJPEG | X | ||
ADPCM IMA WAV | X | X | |
ADPCM IMA Westwood | X | ||
ADPCM ISS IMA | X | 用于 FunCom 游戏。 | |
ADPCM IMA Dialogic | X | ||
ADPCM IMA Duck DK3 | X | 用于一些 Sega Saturn 游戏机游戏。 | |
ADPCM IMA Duck DK4 | X | 用于一些 Sega Saturn 游戏机游戏。 | |
ADPCM IMA Radical | X | ||
ADPCM IMA Xbox | X | ||
ADPCM Microsoft | X | X | |
ADPCM MS IMA | X | X | |
ADPCM 任天堂 Gamecube AFC | X | ||
ADPCM 任天堂 Gamecube DTK | X | ||
ADPCM 任天堂 THP | X | ||
ADPCM Playstation | X | ||
ADPCM QT IMA | X | X | |
ADPCM SEGA CRI ADX | X | X | 用于 Sega Dreamcast 游戏。 |
ADPCM Shockwave Flash | X | X | |
ADPCM Sound Blaster Pro 2 位 | X | ||
ADPCM Sound Blaster Pro 2.6 位 | X | ||
ADPCM Sound Blaster Pro 4 位 | X | ||
ADPCM VIMA | X | 用于 LucasArts SMUSH 动画。 | |
ADPCM Konami XMD | X | ||
ADPCM Westwood Studios IMA | X | X | 用于 Westwood Studios 的游戏,如命令与征服。 |
ADPCM Yamaha | X | X | |
ADPCM Zork | X | ||
AMR-NB | E | X | 通过外部库 libopencore-amrnb 支持编码 |
AMR-WB | E | X | 通过外部库 libvo-amrwbenc 支持编码 |
Amazing Studio PAF 音频 | X | ||
Apple 无损音频 | X | X | QuickTime 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 音频 | X | ||
CELT | E | 通过外部库 libcelt 支持解码 | |
codec2 | E | E | 通过外部库 libcodec2 支持编码/解码 |
CRI HCA | X | ||
Delphine Software International CIN 音频 | X | Delphine Software International 游戏中使用的编解码器。 | |
DFPWM | X | X | |
数字语音标准 - 标准播放模式 (DSS SP) | X | ||
碟形世界 II BMV 音频 | X | ||
COOK | X | 支持除 5.1 版本外的所有版本。 | |
DCA (DTS 相干声学) | X | X | 支持的扩展名:XCh、XXCH、X96、XBR、XLL、LBR(部分支持) |
杜比 E | X | ||
DPCM 立方根-增量-精确 | X | 在少数游戏中用到。 | |
DPCM Gremlin | X | ||
DPCM id RoQ | X | X | 用于《雷神之锤III》(Quake III)、《绝地武士2》(Jedi Knight 2)和其他计算机游戏。 |
DPCM Marble WADY | X | ||
DPCM Interplay | X | 在各种 Interplay 电脑游戏中用到。 | |
DPCM 平方根-增量-精确 | X | 在各种游戏中用到。 | |
DPCM Sierra Online | X | 在 Sierra Online 游戏音频文件中使用。 | |
DPCM Sol | X | ||
DPCM Xan | X | 在 Origin 的《银河飞将 IV》AVI 文件中使用。 | |
DPCM Xilam DERF | X | ||
DSD (直接流数字),最低有效位优先 | X | ||
DSD (直接流数字),最高有效位优先 | X | ||
DSD (直接流数字),最低有效位优先,平面 | X | ||
DSD (直接流数字),最高有效位优先,平面 | X | ||
DSP Group TrueSpeech | X | ||
DST (直接流传输) | X | ||
DV 音频 | X | ||
增强型 AC-3 | X | X | |
EVRC (增强型可变速率编解码器) | X | ||
FLAC (自由无损音频编解码器) | X | IX | |
FTR 语音 | X | ||
G.723.1 | X | X | |
G.729 | X | ||
GSM | E | X | 通过外部库 libgsm 支持编码 |
GSM Microsoft 变体 | E | X | 通过外部库 libgsm 支持编码 |
IAC (Indeo 音频编码器) | X | ||
iLBC (互联网低比特率编解码器) | E | EX | 通过外部库 libilbc 支持编码和解码 |
IMC (英特尔音乐编码器) | X | ||
Interplay ACM | X | ||
LC3 | E | E | 通过外部库 liblc3 支持 |
MACE (Macintosh 音频压缩/扩展) 6:1 | X | ||
Marian 的 A-pac 音频 | X | ||
MI-SC4 (Micronas SC-4 音频) | X | ||
MLP (Meridian 无损封装) | X | X | 在 DVD-Audio 光盘中使用。 |
Monkey’s Audio | X | ||
MP1 (MPEG 音频层 1) | IX | ||
MP2 (MPEG 音频层 2) | IX | IX | 也通过外部库 TwoLAME 支持编码 |
MP3 (MPEG 音频层 3) | E | IX | 通过外部库 LAME 支持编码,也支持 ADU MP3 和 MP3onMP4 |
MPEG-4 无损音频编码 (ALS) | X | ||
MobiClip FastAudio | X | ||
Musepack SV7 | X | ||
Musepack SV8 | X | ||
Nellymoser Asao | X | X | |
On2 AVC (视频音频编解码器) | X | ||
Opus | E | X | 通过外部库 libopus 支持编码 |
OSQ (原始声音质量) | X | ||
PCM A-law | X | X | |
PCM mu-law | X | X | |
PCM Archimedes VIDC | X | X | |
PCM 有符号 8 位平面 | X | X | |
PCM 有符号 16 位大端平面 | X | X | |
PCM 有符号 16 位小端平面 | X | X | |
PCM 有符号 24 位小端平面 | X | X | |
PCM 有符号 32 位小端平面 | X | X | |
PCM 32 位浮点大端 | X | X | |
PCM 32 位浮点小端 | X | X | |
PCM 64 位浮点大端 | X | X | |
PCM 64 位浮点小端 | X | X | |
PCM D-Cinema 音频有符号 24 位 | X | X | |
PCM 有符号 8 位 | X | X | |
PCM 有符号 16 位大端序 | X | X | |
PCM 有符号 16 位小端序 | X | X | |
PCM 有符号 24 位大端序 | X | X | |
PCM 有符号 24 位小端序 | X | X | |
PCM 有符号 32 位大端序 | X | X | |
PCM 有符号 32 位小端序 | X | X | |
MPEG-TS 中 PCM 有符号 16/20/24 位大端 | X | ||
PCM 无符号 8 位 | X | X | |
PCM 无符号 16 位大端序 | X | X | |
PCM 无符号 16 位小端序 | X | X | |
PCM 无符号 24 位大端序 | X | X | |
PCM 无符号 24 位小端序 | X | X | |
PCM 无符号 32 位大端序 | X | X | |
PCM 无符号 32 位小端序 | X | X | |
PCM SGA | X | ||
QCELP / PureVoice | X | ||
QDesign 音乐编解码器 1 | X | ||
QDesign 音乐编解码器 2 | X | 仍然存在一些失真。 | |
RealAudio 1.0 (14.4K) | X | X | Real 14400 比特/秒编解码器 |
RealAudio 2.0 (28.8K) | X | Real 28800 比特/秒编解码器 | |
RealAudio 3.0 (dnet) | IX | X | Real 低比特率 AC-3 编解码器 |
RealAudio 无损 | X | ||
RealAudio SIPR / ACELP.NET | X | ||
RK 音频 (RKA) | X | ||
SBC (低复杂度子带编解码器) | X | X | 用于蓝牙 A2DP |
Shorten | X | ||
Sierra VMD 音频 | X | 用于 Sierra VMD 文件。 | |
Smacker 音频 | X | ||
SMPTE 302M AES3 音频 | X | X | |
Sonic | X | X | 实验性编解码器 |
Sonic 无损 | X | X | 实验性编解码器 |
Speex | E | EX | 通过外部库 libspeex 支持 |
TAK (Tom 的无损音频压缩器) | X | ||
True Audio (TTA) | X | X | |
TrueHD | X | X | 在 HD-DVD 和蓝光光盘中使用。 |
TwinVQ (VQF 类型) | X | ||
VIMA | X | 用于 LucasArts SMUSH 动画。 | |
ViewQuest VQC | X | ||
Vorbis | E | X | 存在一个原生的但非常原始的编码器。 |
Voxware MetaSound | X | ||
波形存档器 | X | ||
WavPack | X | X | |
Westwood 音频 (SND1) | X | ||
Windows Media Audio 1 | X | X | |
Windows Media Audio 2 | X | X | |
Windows Media Audio 无损 | 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 字幕格式
名称 | 复用 | 解复用 | 编码 | 解码 |
3GPP 定时文本 | X | X | ||
AQTitle | X | X | ||
DVB | X | X | X | X |
DVB 图文电视 | X | E | ||
DVD | X | X | X | X |
JACOsub | X | X | X | |
MicroDVD | X | X | X | |
MPL2 | X | X | ||
MPsub (MPlayer) | X | X | ||
PGS | X | |||
PJS (Phoenix) | X | X | ||
RealText | X | X | ||
SAMI | X | X | ||
Spruce 格式 (STL) | X | X | ||
SSA/ASS | X | X | X | X |
SubRip (SRT) | X | X | X | X |
SubViewer v1 | X | X | ||
SubViewer | X | X | ||
TED Talks 字幕 | X | X | ||
TTML | X | X | ||
VobSub (IDX+SUB) | X | X | ||
VPlayer | X | X | ||
WebVTT | X | X | X | X |
XSUB | X | X |
X
表示支持该功能。
E
表示通过外部库提供支持。
49.6 网络协议
名称 | 支持 |
AMQP | E |
file | X |
FTP | X |
Gopher | X |
Gophers | X |
HLS | X |
HTTP | X |
HTTPS | X |
Icecast | X |
MMSH | X |
MMST | X |
管道 | X |
Pro-MPEG FEC | X |
RTMP | X |
RTMPE | X |
RTMPS | X |
RTMPT | X |
RTMPTE | X |
RTMPTS | X |
RTP | X |
SAMBA | E |
SCTP | X |
SFTP | E |
TCP | X |
TLS | X |
UDP | X |
ZMQ | E |
X
表示支持该协议。
E
表示通过外部库提供支持。
49.7 输入/输出设备
名称 | 输入 | 输出 |
ALSA | X | X |
BKTR | X | |
caca | X | |
DV1394 | X | |
Lavfi 虚拟设备 | X | |
Linux 帧缓冲 | X | X |
JACK | X | |
LIBCDIO | X | |
LIBDC1394 | X | |
OpenAL | X | |
OpenGL | X | |
OSS | X | X |
PulseAudio | X | X |
SDL | X | |
Video4Linux2 | X | X |
VfW 捕获 | X | |
X11 抓取 | X | |
Win32 抓取 | X |
X
表示支持输入/输出。
49.8 时间码
编解码器/格式 | 读取 | 写入 |
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-codecs, ffmpeg-bitstream-filters, ffmpeg-formats, ffmpeg-devices, ffmpeg-protocols, ffmpeg-filters
51 作者
FFmpeg 开发人员。
有关作者的详细信息,请参阅项目的 Git 历史记录 (https://git.ffmpeg.org/ffmpeg),例如,在 FFmpeg 源代码目录中键入命令 git log
,或浏览在线存储库 https://git.ffmpeg.org/ffmpeg。
特定组件的维护人员列在源代码树中的 MAINTAINERS 文件中。
本文档于2025 年 1 月 21 日使用 makeinfo 生成。
由 telepoint.bg 提供托管