美文网首页FFmpegiOS音视频开发音视频专辑
《FFmpeg Basics》中文版-25-调试和测试

《FFmpeg Basics》中文版-25-调试和测试

作者: 张芳涛 | 来源:发表于2018-04-18 15:46 被阅读52次

    写在前面

    如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑
    也可以关注我的简书账户: 张芳涛,我后期会发布更多的音视频以及图像处理方面的文章。

    正文

    为了检测错误并测试各种输入,参数,性能等,我们可以使用多个FFmpeg过滤器,选项和来源。 当控制台输出很长时,-report选项会将测试结果保存到名为ffmpeg-yyyymmdd-hhmmss.log的文件中,其中斜体部分表示当前日期和时间。

    debug, debug_ts and fdebug选项

    FFmpeg中的基本调试工具是一个-debug选项,其中在下表中描述了17个可能值:

    描述 打印关于所选音频,字幕或视频流的特定调试信息
    语法 -debug[:stream_specifier]
    可用值的描述
    pict 图片信息
    rc 速率控制
    bitstream 比特流
    mb_type 宏块(MB)类型
    qp 每块量化参数(QP)
    mv 运动矢量
    dct_coeff DCT系数
    skip 进度跳跃
    startcode 起始码
    pts 演示文稿时间戳
    er 错误识别
    mmco 内存管理控制操作(H.264)
    bugs bugs(错误)
    vis_qp 可视化量化参数(QP),较低的QP是更绿色的
    vis_mb_type 可视化块类型
    buffers 图片缓冲区分配
    thread_ops 线程操作

    例如,我们将mptestsrc源的短输出保存为具有mmco值的MP4(H.264)文件:

    ffmpeg -debug mmco -f lavfi -i mptestsrc -t 0.5 output.mp4
    

    向控制台输出添加了12行描述各个帧; 包含的术语说明:

    • QP - 量化参数
    • NAL - 网络抽象层单元
    • 切片:B - 双向预测,I - 帧内编码,P - 预测


    另一个调试选项是-debug_ts,它可以在处理期间打印时间戳信息,例如我们可以修改前面的示例并仅使用0.1秒(3帧):

    ffmpeg -debug_ts -f lavfi -i mptestsrc -t 0.1 output.mp4
    

    向控制台输出添加下一行:



    选项-fdebug只有1个可能的值ts,通常与-debug_ts选项一起用于各种测试,例如调试DTS(解码时间戳)和PTS(演示时间戳)关系。 使用上例中的修改后的命令,控制台输出显示命令后列出的添加行:

    ffmpeg -fdebug ts -f lavfi -i mptestsrc -t 0.1 output.mp4
    

    用于错误检测的标志

    检测ffmpeg处理中的错误可以通过表中描述的-err_detect选项指定:

    描述 检测一个错误,该标志指定了哪种类型
    语法 -err_detect[:stream_specifier] flag
    可用标志的描述
    aggressive 考虑一个理智的编码器不应该做的错误
    bitstream 检测比特流指定偏差
    buffer 检测不合适的比特流长度
    careful 考虑违反规范并且没有被视为错误的东西
    compliant 将所有规范不合规视为错误
    crccheck 验证嵌入式CRC
    explode 终止对较小错误检测的解码

    例如,要检测不正确的比特流长度,我们可以使用以下命令:

    ffmpeg -report -err_detect buffer -i input.avi output.mp4
    

    日志记录级别设置

    日志记录级别确定处理过程中控制台输出中显示的内容,可用的修改值包括:安静,恐慌,致命,错误,警告,信息,详细,调试。 要设置日志记录级别,我们可以使用选项-v或-loglevel选项,例如对于详细级别,我们可以使用以下命令:

    ffmpeg -loglevel verbose -i input.avi output.mp4
    

    时间基配置测试

    过滤器asettb和settb用于测试时基配置,asettb用于音频输入并用于视频输入的建立。 两个过滤器都具有相同的参数,并在公共表中进行了描述:


    描述 两个滤镜都设置时基,它将用于输出帧时间戳。 此设置用于测试时基配置和类似功能。 两个过滤器的语法和参数都相同
    语法 settb=expr
    expr的结果是一个有理数,可以包含下面描述的变量
    表达式中可用的变量
    AVTB 设置默认时基值(AVTB =默认时基)
    intb 输入时基
    sr 采样率,仅适用于asettb

    下面的例子设置时基,第一个设置为AVTB,第二个设置为0.3,第三个设置为输入时基的1.5倍。

    ffmpeg input.mpg -vf settb=AVTB output.mpg
    ffmpeg input.mpg -vf settb=0.3 output.mpg
    ffmpeg input.mpg -vf settb=1.5*intb output.mpg
    

    测试编码功能

    要为离散余弦亮度,色度,亮度和色度的频率和幅度等生成各种测试图案,我们可以使用MPlayer项目中的mptestsrc滤镜,该滤镜在表中描述:


    描述 生成与色度,亮度和其他视频属性相关的各种测试。 如果没有参数使用,则会执行所有测试,直到用户停止该过程
    语法 mptestsrc[=t=test_type[:d=duration[:r=rate]]]
    参数的描述
    test, t - 所选测试的名称,可用测试为dc_luma,dc_chroma,freq_luma,freq_chroma,amp_luma,amp_chroma,cbp,mv,ring1,ring2
    - 默认值是"all"
    duration, d 以秒为单位或HH:MM:SS格式的测试持续时间
    r 帧率,默认值是25

    下表说明了特定测试值的样本。

    模式 句法 图片
    DC亮度 mptest=t=dc_luma
    DC色度 mptest=t=dc_chroma
    亮度频率 mptest=t=freq_luma
    色度频率 mptest=t=freq_chroma
    亮度幅度 mptest=t=amp_luma
    色度幅度 mptest=t=amp_chroma
    编码块模式(CBP) mptest=t=cbp
    运动矢量(MV) mptest=t=mv
    test ring 1 mptest=t=ring1
    test ring 2 mptest=t=ring2

    测试模式

    检测各种错误并为视频测试提供源FFmpeg包含下面列出的3个特殊视频源。 除颜色参数外,它们与“图像处理”章节“创建图像”一节中介绍的颜色来源共享相同的参数。

    RGB测试模式

    要测试可用的RGB和BGR色彩空间是名为rgbtestsrc的视频源

    ffplay -f lavfi -i rgbtestsrc
    

    滚动渐变和时间戳的颜色模式

    要生成类似于TV模式的视频模式,可以使用testsrc视频源与命令:

    ffplay -f lavfi -i testsrc
    

    SMPTE条形图案模式

    可以使用以下命令创建来自电影和电视工程师协会(SMPTE)的彩条图案:

    ffplay -f lavfi -i testsrc
    

    简单的数据包转储或有效负载(十六进制)

    为了更精确的调试,也可以使用-hex选项转储有效负载,通常使用-report选项将结果保存到当前目录中的文件。 使用此选项,处理速度非常慢,报告文件更大。 该命令的示例是:

    ffmpeg -dump -hex -report -i input.mpg output.flv
    

    CPU使用时间和内存消耗

    要在处理过程中显示使用的CPU时间和内存消耗,我们可以使用产生类似输出的-benchmark或-benchmark_all选项:

    • -benchmark选项显示编码后的结果

    • -benchmark_all以各种步骤显示编码过程中的结果
      不支持最大内存消耗数据的计算机系统将显示0而不是数值。 这两个选项都是全局选项,并在命令的开头输入,例如:

      ffmpeg -benchmark -i input.avi output.webm



      在控制台输出的末尾添加一条从工作台开始的行:utime表示在处理过程中CPU(计算机的中央处理单元)使用的时间。 benchmark_all选项显示处理过程中的结果,完成后的屏幕显示在下图中。

      ffmpeg -benchmark_all -i input.avi output.mpg
      

    相关文章

      网友评论

        本文标题:《FFmpeg Basics》中文版-25-调试和测试

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