FFplay文档解读-7-比特流过滤器

前言

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 AACMPEG-TS容器复制到MP4A-LATM,FLV文件或MOV / MP4文件以及相关格式(如3GP或M4A)时,需要此过滤器。 请注意,它是自动插入MP4A-LATMMOV / 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 / PPSin-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文件的RgbAlpha部分,以便创建HAPQHAPAlphaOnly文件。

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.264E.2.1节和表E-3E-4E-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.264E.2.1节和表E-6)。

crop_left

crop_right

crop_top

crop_bottom

SPS中设置帧裁剪偏移。 如果已经裁剪了流,这些值将替换当前值。

这些字段以像素为单位。 请注意,如果色度被二次采样或流是隔行扫描的,则某些尺寸可能无法表示(参见H.2647.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.3E.4E.5)。

chroma_sample_loc_type

设置流中的色度样本位置(参见H.265 E.3.1节和图E.1)。

tick_rate

VPSVUI参数(num_units_in_tick / time_scale)中设置tick速率。 与num_ticks_poc_diff_one结合使用,可以在流中设置恒定的帧速率。 请注意,当流位于容器中时,容器参数可能会覆盖它。

num_ticks_poc_diff_one

VPSVUI中设置poc_proportional_to_timing_flag并使用该值设置num_ticks_poc_diff_one_minus1(参见H.2657.4.3.1节和第3.3节)。 如果未设置tick_rate,则忽略。

crop_left

crop_right

crop_top

crop_bottom

SPS中设置一致性窗口裁剪偏移。 如果已经裁剪了流,这些值将替换当前值。

这些字段以像素为单位。 请注意,如果对色度进行二次采样,则某些尺寸可能无法表示(H.2657.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.265muxer h265hevc)输出格式自动插入的。

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 Lee2001年的rec.video.desktop新闻组写道,评论说“MJPEG,或者至少是具有MJPG fourccAVI中的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.2626.3.3节和表6-3)。

frame_rate

在流中设置帧速率。 这是由已知值与小乘数和除数组合构成的表 - 如果提供的值不能准确表示,则将使用最接近的可表示值(参见H.2626.3.3节和表6-4)。

video_format

在流中设置视频格式(参见H.2626.3.6节和表6-6)。

colour_primaries

transfer_characteristics

matrix_coefficients

在流中设置颜色描述(参见H.2626.3.6节和表6-7,6-86-9)。

11.20 mpeg4_unpack_bframes

打开DivX风格的打包B帧。

DivX风格的打包B帧不是有效的MPEG-4,只是Windows子系统损坏的视频的一种解决方法。 它们使用更多空间,可能导致轻微的AV同步问题,需要更多CPU能力进行解码(除非播放器有一些解码图像队列来补偿每个数据包样式的2,0,2,0帧)并且如果复制到标准中会造成麻烦 容器如mp4mpeg-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.264H.265MPEG-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数据包以纠正排序。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容