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

写在前面

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

正文

为了检测错误并测试各种输入,参数,性能等,我们可以使用多个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.mpgffmpeg input.mpg -vf settb=0.3 output.mpgffmpeg 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
(0)

相关推荐

  • FFmpeg Formats Documentation

    Table of Contents 1 Description 2 Format Options 2.1 Format stream specifiers 3 Demuxers 3.1 aa 3.2 ...

  • Linux下ffmpeg视频截取命令

    比如你有一个视频,然后你对其中某一段感兴趣,你想把他截取下来,并且不希望画面变差,(当然你也不想花钱买视频编辑软件),可以在Linux下使用如下命令: ffmpeg -ss 00:00:05 -t 0 ...

  • TelloPy-develop-0.7.0源码阅读.1

    最近我在反思,为什么我看了那么多书,为什么还是写不出大型的程序?我也很苦恼,我想了下.应该还是看的源码少的过,古人曾经说过熟读唐诗三百首,不会吟诗也会吟 .在读源码的选择上,我没有选择太复杂的开源库, ...

  • 《FFmpeg Basics》中文版-22- 颜色修正

    写在前面如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑也可以关注我的简书账户:张芳涛,我后期会发布更多的音视频以及图像处理方面的文章.正文色彩校正通常表示图像版本,如调整亮度,色彩平衡(红色, ...

  • 《FFmpeg Basics》中文版-01-FFmpeg基本介绍

    写在前面如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑也可以关注我的简书账户:张芳涛,我后期会发布更多的音视频以及图像处理方面的文章.正文为了最优地使用各种FFmpeg组件,需要正确理解FFm ...

  • 《FFmpeg Basics》中文版-02-显示帮助和功能

    写在前面 如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑 也可以关注我的简书账户:张芳涛,我后期会发布更多的音视频以及图像处理方面的文章. 正文 关于FFmpeg程序的帮助和其他信息都显示在空 ...

  • 《FFmpeg Basics》中文版-03-比特率/帧率/文件大小

    写在前面如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑也可以关注我的简书账户:张芳涛,我后期会发布更多的音视频以及图像处理方面的文章.正文比特率和帧速率是视频的基本特征,它们的正确设置对整体视 ...

  • 《FFmpeg Basics》中文版-04-调整和伸缩视频

    写在前面如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑也可以关注我的简书账户:张芳涛,我后期会发布更多的音视频以及图像处理方面的文章.正文在FFmpeg中调整视频的大小意味着可以通过一个选项改 ...

  • 《FFmpeg Basics》中文版-07-翻转和旋转视频

    写在前面如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑也可以关注我的简书账户:张芳涛,我后期会发布更多的音视频以及图像处理方面的文章.正文视频帧的翻转和旋转是常见的视觉操作,可以用来创建各种有 ...

  • 《FFmpeg Basics》中文版-06-填充视频

    写在前面如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑也可以关注我的简书账户:张芳涛,我后期会发布更多的音视频以及图像处理方面的文章.正文填充视频意味着向视频帧添加额外的区域以包含额外的内容. ...

  • 《FFmpeg Basics》中文版-05-裁剪视频

    写在前面如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑也可以关注我的简书账户:张芳涛,我后期会发布更多的音视频以及图像处理方面的文章.正文裁剪视频意味着从输入到输出中选择想要的矩形区域而没有余 ...

  • 《FFmpeg Basics》中文版-09-overlay-画中画

    写在前面如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑也可以关注我的简书账户:张芳涛,我后期会发布更多的音视频以及图像处理方面的文章.正文overlay视频技术经常被使用,常见的例子是放置在电 ...