前言
Github
地址:Github
简书地址:简书
专辑地址:FFplay专辑
11.比特流过滤器
配置FFmpeg
构建时,默认情况下会启用所有支持的比特流过滤器。 您可以使用configure
选项--list-bsfs
列出所有可用的列表。
可以使用configure
选项--disable-bsfs
禁用所有比特流过滤器,并使用选项--enable-bsf = BSF
选择性地启用任何比特流过滤器,或者您可以使用选项--disable-bsf= BSF
禁用特定比特流过滤器。
ff *
工具的选项-bsfs
将显示构建中包含的所有受支持的比特流过滤器的列表。
ff *
工具每个流应用一个-bsf
选项,采用以逗号分隔的过滤器列表,其参数在=
后面的过滤器名称后面。
ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT
以下是当前可用的比特流过滤器及其参数(如果有)的描述。
11.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
及相关格式。
11.2 chomp
删除数据包末尾的零填充。
11.3 dca_core
从DCA / DTS
流中提取核心,删除DTS-HD
等扩展。
11.4 dump_extra
将extradata添加到过滤后的数据包的开头。
freq
附加参数指定应过滤哪些数据包。 它接受以下值:
值 | 解释 |
---|---|
k | |
keyframe | 为所有密钥包添加extradata
|
e | |
all | 为所有数据包添加extradata
|
如果未指定,则假定为e
。
例如,以下ffmpeg
命令强制libx264编码器生成的H.264数据包中的全局标头(从而禁用单个数据包标头),但通过将存储在extradata中的标头添加到密钥数据包来纠正它们:
ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
11.5 eac3_core
从E-AC-3
流中提取核心,丢弃额外的通道。
11.6 extract_extradata
某些编解码器允许长期报头(例如,MPEG-2
序列报头,或H.264 / HEVC(VPS /)SPS / PPS
)in-band
发送(即作为包含编码的比特流的一部分) 帧)或out of band
(例如在容器级别)。 后一种形式在FFmpeg
术语中称为extradata
。
该比特流过滤器检测带内标头并使其可用作额外数据。
remove
启用此选项后,将在提取后从比特流中删除长期标头。
11.7 filter_units
从流中删除具有或不在给定集中的类型的单元。
pass_types
移除所有其他单元类型或单元类型范围的列表。 这被指定为单位类型值的|
分隔列表或带有-
的值范围。
remove_types
与pass_types
相同,除了已删除给定集合中的单位以及所有其他单位都已通过。
此转换不会更改Extradata
,但请注意,如果流包含内联参数集,则如果删除它们,则输出可能无法使用。
例如,要从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' OUTPU
11.8 hapqa_extract
在不重新压缩的情况下提取HAPQA
文件的Rgb
或Alpha
部分,以便创建HAPQ
或HAPAlphaOnly
文件。
texture
指定要保留的纹理。
color
alpha
将HAPQA
转换为HAPQ
ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=color -tag:v HapY -metadata:s:v:0 encoder="HAPQ" hapq_file.mov
将HAPQA
转换为HAPAlphaOnly
ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=alpha -tag:v HapA -metadata:s:v:0 encoder="HAPAlpha Only" hapalphaonly_file.mov
11.9 h264_metadata
修改H.264
流中嵌入的元数据。
aud
在流的所有访问单元中插入或删除AUD NAL
单元。
值 |
---|
insert |
remov |
sample_aspect_ratio
在VUI
参数中设置流的样本宽高比。
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
参数中设置滴答率(num_units_in_tick / time_scale
)。 这是流中可表示的最小时间单位,并且在许多情况下表示流的字段速率(帧速率的两倍)。
fixed_frame_rate_flag
设置流是否具有固定帧速率 - 通常这表示帧速率恰好是滴答速率的一半,但确切含义取决于隔行扫描和图像结构(参见H.264
第E.2.1
节和表E-6
)。
crop_left
crop_right
crop_top
crop_bottom
在SPS
中设置帧裁剪偏移。 如果已经裁剪了流,这些值将替换当前值。
这些字段以像素为单位。 请注意,如果色度被二次采样或流是隔行扫描的,则某些尺寸可能无法表示(参见H.264
第7.4.2.1.1
节)。
sei_user_data
将字符串作为SEI
未注册的用户数据插入。 参数必须是UUID +
字符串的形式,其中UUID
是十六进制数字,可能用连字符分隔,字符串可以是任何字符串。
例如,086f3693-b7b3-4f2c-9653-21492feee5b8 + hello
将插入与给定UUID
相关联的字符串hello
。
delete_filler
删除填充NAL
单元和填充SEI
消息。
11.10 h264_mp4toannexb
将H.264比特流从长度前缀模式转换为起始码前缀模式(如ITU-T H.264规范的附录B中所定义)。
请注意,此滤波器是为MPEG-TS(muxer mpegts)
和原始H.264(muxer h264)
输出格式自动插入的。
11.11 h264_redundant_pps
这适用于某些蓝光流的特定修正,其中包含冗余PPS
,修改流的不相关参数,这会混淆需要正确的额外数据的其他转换。
创建新的单个全局PPS
,并删除流中的所有冗余PPS
。
11.12 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
参数(num_units_in_tick / time_scale
)中设置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
节和第3.3
节)。 如果未设置tick_rate
,则忽略。
crop_left
crop_right
crop_top
crop_bottom
在SPS
中设置一致性窗口裁剪偏移。 如果已经裁剪了流,这些值将替换当前值。
这些字段以像素为单位。 请注意,如果对色度进行二次采样,则某些尺寸可能无法表示(H.265
第7.4.3.2.1
节)。
11.13 hevc_mp4toannexb
将HEVC / H.265
比特流从长度前缀模式转换为起始码前缀模式(如ITU-T H.265
规范的附录B中所定义)。
这是某些流格式所要求的,通常是MPEG-2
传输流格式(muxer mpegts
)。
例如,要使用ffmpeg
将包含HEVC
流的MP4
文件重新转换为mpegts
格式,可以使用以下命令:
ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts
请注意,此滤波器是为MPEG-TS(muxer mpegts)
和原始HEVC / H.265
(muxer h265
或hevc
)输出格式自动插入的。
11.14 imxdump
修改比特流以适应MOV
并可由Final Cut Pro
解码器使用。 此过滤器仅适用于mpeg2video
编解码器,对于Final Cut Pro 7
而言可能不需要使用此过滤器,而对于相应的-tag:v
则更新。
例如,要将30 MB
/秒的NTSC IMX
重新复制到MOV
:
ffmpeg -i input.mxf -c copy -bsf:v imxdump -tag:v mx3n output.mov
11.15 mjpeg2jpeg
将MJPEG / AVI1
数据包转换为完整的JPEG / JFIF
数据包。
MJPEG
是视频编解码器,其中每个视频帧基本上是JPEG
图像。 可以无损地提取各个帧,下面是示例代码:
ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
不幸的是,这些块是不完整的JPEG
图像,因为它们缺少解码所需的DHT
段。 引自http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml:
Avery Lee
在2001
年的rec.video.desktop
新闻组写道,评论说“MJPEG,或者至少是具有MJPG fourcc
的AVI
中的MJPEG
,是受限制的JPEG
,限制JPEG
与固定 - 和*
省略*
-
霍夫曼表。JPEG
必须 是YCbCr
颜色空间,它必须是4:2:2
,并且它必须使用基本的霍夫曼编码,而不是算术或渐进...你确实可以提取MJPEG
帧并用常规JPEG
解码器解码它们,但你必须使用前置 他们的DHT
段,否则解码器将不知道如何解压缩数据。确切的表格在OpenDML
规范中给出。“
该比特流过滤器修补从MJPEG
流(携带AVI1
标题ID
并且缺少DHT
段)提取的帧的标题,以产生完全合格的JPEG
图像。
ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
exiftran -i -9 frame*.jpg
ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
11.16 mjpegadump
将MJPEG A
标头添加到比特流,以启用Quicktime
解码。
11.17 mov2textsub
从MOV
字幕中提取可表示的文本文件,从每个字幕包中剥离元数据头。
另请参见text2movsub
过滤器。
11.18 mp3decomp
解压缩非标准压缩MP3
音频标头。
11.19 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
)。
11.20 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
11.21 noise
损坏数据包的内容或简单地丢弃它们而不损坏容器。 可用于模糊测试或测试错误恢复/隐藏。
参数:
amount
数字字符串,其值与输出字节的修改频率有关。 因此,禁止低于或等于0
的值,越频繁的字节将被修改,1
意味着每个字节被修改。
dropamount
数字字符串,其值与数据包的丢弃频率有关。 因此,禁止低于或等于0的值,越低频率的数据包将被丢弃,1表示每个数据包被丢弃。
以下示例将修改应用于每个字节但不丢弃任何数据包。
ffmpeg -i INPUT -c copy -bsf noise[=1] output.mkv
11.22 null
该比特流过滤器不加改变地传递数据包。
11.23 remove_extra
从数据包中删除extradata
。
它接受以下参数:
freq
设置要从中删除extradata
的帧类型。
值 | 解释 |
---|---|
k | 仅从非关键帧中删除extradata
|
keyframe | 仅从关键帧中删除extradata
|
e, all | 从所有帧中删除extradata
|
11.24 text2movsub
使用元数据标题将文本字幕转换为MOV
字幕(由mov_text
编解码器使用)。
另请参见mov2textsub
过滤器。
11.25 trace_headers
记录跟踪输出,包含编码流标题中的所有语法元素(高于单个编码块级别的所有内容)。 这对于调试低级流问题非常有用。
支持H.264
,H.265
和MPEG-2
。
11.26 vp9_superframe
将VP9
不可见(alt-ref
)帧合并回VP9
超帧。 这修复了拆分/分段VP9
流的合并,其中alt-ref
帧与其可见对应物分开。
11.27 vp9_superframe_split
将VP9
超帧拆分为单帧。
11.28 vp9_raw_reorder
给定具有正确时间戳但可能无序的VP9
流,插入额外的show-existing-frame
数据包以纠正排序。
网友评论