美文网首页FFPlay专辑
FFplay文档解读-7-比特流过滤器

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

作者: 张芳涛 | 来源:发表于2018-11-15 15:38 被阅读22次

    前言

    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数据包以纠正排序。

    相关文章

      网友评论

        本文标题:FFplay文档解读-7-比特流过滤器

        本文链接:https://www.haomeiwen.com/subject/nwpyfqtx.html