《ffmpeg basics》中文版 -- 25.调试和测试

25.调试和测试

​ 我们可以使用特定的过滤器,选项和源,来检测错误或测试多个输入,参数,性能等。当控制台中的输出内容过多时,我们可以使用 -report 选项将输出保存到文件中,名称为 ffmpeg-yyyymmdd-hhmmss.log ,其中 yyyymmdd-hhmmss 表示当前的日期和时间。

debug,debug_ts 和 fdebug 选项

​ FFmpeg 中的基本调试工具是 -debug 选项,它有 17 个可采用的值,描述如下:

在这里插入图片描述

​ 例如,我们将 mptestsrc 保存为 output.mp4 ,此时使用 debug 选项并赋值 mmco:

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

​ 在输出中,有 12 行是用来描述独立帧的,其中的术语解释:

  • QP:量化参数
  • NAL:网络抽象层单元
  • Slice:B帧:双向预测画面 I帧:内编码帧 P帧:预测

在这里插入图片描述

​ 另一个调试的选项是 -debug_ts ,它会在处理期间打印时间戳信息,例如,我们修改之前的命令为 0.1 秒长:

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

​ 控制台中中的输出如下所示:

在这里插入图片描述

​ 选项 -fdebug 仅有一个可使用的值 ts,它经常和 -debug_ts 选项一起使用用于测试,如调试 DTS(decoding timestamp:编码时间戳)和 PTS(presentation timestamp:显示时间戳)。我们修改之前的命令,并将新加入的行列出如下:

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

在这里插入图片描述

错误检测的标识符

​ ffmpeg 中可以使用 -err_detect 选项来执行错误的检测,其描述如下:

在这里插入图片描述

​ 例如,检测一个不正确的比特流长度,命令如下:

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

日志等级设置

​ 日志的等级决定了有哪些内容能够显示为控制台输出,它可取的值有如下几个:quiet , panic , fatal , error , warning , info , verbose , debug 。我们可以使用 -v 或者 -loglevel 选项来设置日志等级,例如将日志等级设置为 verbose,命令如下:

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

时间基配置测试

​ 过滤器 asettb 和 settb 用于测试时间基配置,asettb 用于音频输入,settb 用于视频输出。这两个过滤器的参数相同,其描述如下:

在这里插入图片描述

​ 下面的例子分别设置时间基,第一个设置为 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 过滤器来生成多个测试模式,其描述如下:

在这里插入图片描述

​ 下面是它特定值的显示案例:
在这里插入图片描述

测试图案

​ 为了检测 bug ,FFmpeg 提供了 3 个特殊的视频源用于视频测试。除了 color 之外,它们的参数相同,color 源在《图片处理》一张中有描述。

RGB 测试图案

​ 如果想要对 RGB 或者 BGR 进行测试,我们可以使用 rgbtestsrc 视频源。

ffplay -f lavfi -i rgbtestsrc

在这里插入图片描述

有滚动渐变和时间戳的颜色图案

​ 如果想要使用类似 TV 图案的混合颜色图案,我们可以使用 testsrc 视频源:

ffplay -f lavfi -i testsrc

在这里插入图片描述

SMPTE 条图案

​ 我们可以使用 SMPTE (Society of Motion Picture and Television Engineers)颜色条图案,命令如下:

ffplay -f lavfi -i smptebars

在这里插入图片描述

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

​ 为了进行更精确的调试,可以使用 -hex 选项转储负载,通常配合使用 -report 选项将结果保存到当前目录中的文件中。使用此选项时,处理速度会非常慢而报告文件会更大。这个命令的例子是:

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

使用的CPU时间和消耗的内存

​ 可以使用 -benchmark 或 -benchmark_all 选项来显示使用的 CPU 时间和消耗的内存,这两个选项的输出类似:

  • -benchmark 选项在编码完成后显示结果
  • -benchmark_all 在编码期间以多步显示结果

​ 不支持最大内存消耗数据的电脑系统不显示相应的值而显示 0 。这两个选项都是 global option,都应该放在命令开始的地方,例如:

ffmpeg -benchmark -i input.avi output.webm

在这里插入图片描述

​ 上述最后一行输出以 bench 开头,utime 表示我们处理命令使用的 CPU 时间。benchmark_all 选项在数据处理过程中显示结果,示例如下:

ffmpeg -benchmark_all -i input.avi output.mpg

在这里插入图片描述

H&A
发布了7 篇原创文章 · 获赞 4 · 访问量 883

猜你喜欢

转载自blog.csdn.net/qq_34305316/article/details/103938785
今日推荐