FFmpeg调试:loglevel日志分级打印怎么用


前言

调试代码离不开日志打印,俗称“打印大法”,要不怎么说新手程序猿往往“一招打印走天下”,哈哈。
本文记录下ffmpeg工具中loglevel参数的使用方法,便于学习代码的执行逻辑。


一、介绍下loglevel参数

通过loglevel参数可以控制日志信息,官网文档对loglevel参数的介绍如下:
在这里插入图片描述在这里插入图片描述
简单总结如下:
repeat:加上这个flag后,对于重复的日志也会打印,不加的话,只会输出第一条,后面加上重复n次(Last message repeated n times);
level:加上这个flag后,输出的每条日志前会加上[level]信息,这样有啥用呢?就是当你拷贝到txt文档后,还可以根据这个字段来代替颜色信息;
loglevel:打印等级具体的值,可以是字符串也可以是数字。设置打印等级后,只能输出小于等于当前等级的日志信息,实现日志分级打印。

举个栗子:

//表示可以重复打印日志,加上[level]字段,使用verbose(啰嗦的/冗长的)的等级
ffmpeg -loglevel repeat+level+verbose -i input output

//使用+/-的方式处理flag,不影响其它flag
ffmpeg [...] -loglevel +repeat

二、测试验证

1.参数repeat+level+info

运行效果如下:

root@ubuntu:/home/ffmpeg/ffmpeg_build/bin# ./ffmpeg -loglevel repeat+level+info -i foreman_qcif.yuv -c:v libx264 foreman_qcif.h264
[info] ffmpeg version 6.1.1 Copyright (c) 2000-2023 the FFmpeg developers
[info]   built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
[info]   configuration: --prefix=/home/ffmpeg/ffmpeg_build --disable-static --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --extra-cflags=-I/home/ffmpeg/x264_build/include --extra-ldflags=-L/home/ffmpeg/x264_build/lib
[info]   libavutil      58. 29.100 / 58. 29.100
[info]   libavcodec     60. 31.102 / 60. 31.102
[info]   libavformat    60. 16.100 / 60. 16.100
[info]   libavdevice    60.  3.100 / 60.  3.100
[info]   libavfilter     9. 12.100 /  9. 12.100
[info]   libswscale      7.  5.100 /  7.  5.100
[info]   libswresample   4. 12.100 /  4. 12.100
[info]   libpostproc    57.  3.100 / 57.  3.100
[info] Input #0, yuv4mpegpipe, from 'foreman_qcif.yuv':
[info]   Duration: 00:00:10.01, start: 0.000000, bitrate: 9116 kb/s
[info]   Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p(progressive), 176x144, SAR 128:117 DAR 1408:1053, 29.97 fps, 29.97 tbr, 29.97 tbn
File 'foreman_qcif.h264' already exists. Overwrite? [y/N] y
[info] Stream mapping:
[info]   Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
[info] Press [q] to stop, [?] for help
[libx264 @ 0x55fb281ccd00] [info] using SAR=128/117
[libx264 @ 0x55fb281ccd00] [info] using cpu capabilities: none!
[libx264 @ 0x55fb281ccd00] [info] profile High, level 1.1, 4:2:0, 8-bit
[info] Output #0, h264, to 'foreman_qcif.h264':
[info]   Metadata:
[info]     encoder         : Lavf60.16.100
[info]   Stream #0:0: Video: h264, yuv420p(progressive), 176x144 [SAR 128:117 DAR 1408:1053], q=2-31, 29.97 fps, 29.97 tbn
[info]     Metadata:
[info]       encoder         : Lavc60.31.102 libx264
[info]     Side data:
[info]       cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/h264 @ 0x55fb281c9bc0] [info] video:154kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
[info] frame=  300 fps=159 q=-1.0 Lsize=     154kB time=00:00:09.90 bitrate= 127.0kbits/s speed=5.26x    
[libx264 @ 0x55fb281ccd00] [info] frame I:2     Avg QP:23.71  size:  5906
[libx264 @ 0x55fb281ccd00] [info] frame P:101   Avg QP:26.25  size:  1031
[libx264 @ 0x55fb281ccd00] [info] frame B:197   Avg QP:31.82  size:   210
[libx264 @ 0x55fb281ccd00] [info] consecutive B-frames:  8.0%  8.7% 14.0% 69.3%
[libx264 @ 0x55fb281ccd00] [info] mb I  I16..4:  1.5% 36.9% 61.6%
[libx264 @ 0x55fb281ccd00] [info] mb P  I16..4:  0.4%  2.8%  2.2%  P16..4: 33.6% 28.9% 18.6%  0.0%  0.0%    skip:13.5%
[libx264 @ 0x55fb281ccd00] [info] mb B  I16..4:  0.0%  0.2%  0.1%  B16..8: 45.2% 11.0%  2.6%  direct: 2.0%  skip:38.9%  L0:37.8% L1:46.8% BI:15.4%
[libx264 @ 0x55fb281ccd00] [info] 8x8 transform intra:49.0% inter:56.7%
[libx264 @ 0x55fb281ccd00] [info] coded y,uvDC,uvAC intra: 86.8% 86.2% 60.5% inter: 17.5% 11.4% 2.0%
[libx264 @ 0x55fb281ccd00] [info] i16 v,h,dc,p: 48% 11%  4% 37%
[libx264 @ 0x55fb281ccd00] [info] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 16% 11%  4% 13% 13% 11%  7%  9%
[libx264 @ 0x55fb281ccd00] [info] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 15% 14%  4% 15%  9% 11%  6%  7%
[libx264 @ 0x55fb281ccd00] [info] i8c dc,h,v,p: 50% 17% 25%  8%
[libx264 @ 0x55fb281ccd00] [info] Weighted P-Frames: Y:5.0% UV:2.0%
[libx264 @ 0x55fb281ccd00] [info] ref P L0: 63.0% 18.3% 10.1%  8.3%  0.3%
[libx264 @ 0x55fb281ccd00] [info] ref B L0: 87.6%  9.3%  3.1%
[libx264 @ 0x55fb281ccd00] [info] ref B L1: 95.9%  4.1%
[libx264 @ 0x55fb281ccd00] [info] kb/s:125.73

可见在打印前面增加了[info]字段。

2.参数repeat+level+verbose

运行效果如下:

root@ubuntu:/home/ffmpeg/ffmpeg_build/bin# ./ffmpeg -loglevel repeat+level+verbose -i foreman_qcif.yuv -c:v libx264 foreman_qcif.h264
[info] ffmpeg version 6.1.1 Copyright (c) 2000-2023 the FFmpeg developers
[info]   built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
[info]   configuration: --prefix=/home/ffmpeg/ffmpeg_build --disable-static --enable-shared --enable-yasm --enable-libx264 --enable-gpl --enable-pthreads --extra-cflags=-I/home/ffmpeg/x264_build/include --extra-ldflags=-L/home/ffmpeg/x264_build/lib
[info]   libavutil      58. 29.100 / 58. 29.100
[info]   libavcodec     60. 31.102 / 60. 31.102
[info]   libavformat    60. 16.100 / 60. 16.100
[info]   libavdevice    60.  3.100 / 60.  3.100
[info]   libavfilter     9. 12.100 /  9. 12.100
[info]   libswscale      7.  5.100 /  7.  5.100
[info]   libswresample   4. 12.100 /  4. 12.100
[info]   libpostproc    57.  3.100 / 57.  3.100
[info] Input #0, yuv4mpegpipe, from 'foreman_qcif.yuv':
[info]   Duration: 00:00:10.01, start: 0.000000, bitrate: 9116 kb/s
[info]   Stream #0:0: Video: rawvideo, 1 reference frame (I420 / 0x30323449), yuv420p(progressive), 176x144, SAR 128:117 DAR 1408:1053, 29.97 fps, 29.97 tbr, 29.97 tbn
[out#0/h264 @ 0x5651003fabc0] [verbose] No explicit maps, mapping streams automatically...
[vost#0:0/libx264 @ 0x5651003fd900] [verbose] Created video stream from input stream 0:0
File 'foreman_qcif.h264' already exists. Overwrite? [y/N] y
[info] Stream mapping:
[info]   Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
[info] Press [q] to stop, [?] for help
[graph 0 input from stream 0:0 @ 0x565100400300] [verbose] w:176 h:144 pixfmt:yuv420p tb:1001/30000 fr:30000/1001 sar:128/117
[libx264 @ 0x5651003fdd00] [info] using SAR=128/117
[libx264 @ 0x5651003fdd00] [info] using cpu capabilities: none!
[libx264 @ 0x5651003fdd00] [info] profile High, level 1.1, 4:2:0, 8-bit
[info] Output #0, h264, to 'foreman_qcif.h264':
[info]   Metadata:
[info]     encoder         : Lavf60.16.100
[info]   Stream #0:0: Video: h264, 1 reference frame, yuv420p(progressive), 176x144 (0x0) [SAR 128:117 DAR 1408:1053], q=2-31, 29.97 fps, 29.97 tbn
[info]     Metadata:
[info]       encoder         : Lavc60.31.102 libx264
[info]     Side data:
[info]       cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[in#0/yuv4mpegpipe @ 0x5651003f9440] [verbose] EOF while reading inputrate= 137.5kbits/s speed=4.75x    
[in#0/yuv4mpegpipe @ 0x5651003f9440] [verbose] Terminating demuxer thread
[vist#0:0/rawvideo @ 0x5651003fc1c0] [verbose] Decoder thread received EOF packet
[vist#0:0/rawvideo @ 0x5651003fc1c0] [verbose] Decoder returned EOF, finishing
[vist#0:0/rawvideo @ 0x5651003fc1c0] [verbose] Terminating decoder thread
[verbose] No more output streams to write to, finishing.
[out#0/h264 @ 0x5651003fabc0] [verbose] All streams finished
[out#0/h264 @ 0x5651003fabc0] [verbose] Terminating muxer thread
[AVIOContext @ 0x5651004015c0] [verbose] Statistics: 157316 bytes written, 0 seeks, 1 writeouts
[out#0/h264 @ 0x5651003fabc0] [verbose] Output file #0 (foreman_qcif.h264):
[out#0/h264 @ 0x5651003fabc0] [verbose]   Output stream #0:0 (video): 300 frames encoded; 300 packets muxed (157316 bytes); 
[out#0/h264 @ 0x5651003fabc0] [verbose]   Total: 300 packets (157316 bytes) muxed
[out#0/h264 @ 0x5651003fabc0] [info] video:154kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%
[info] frame=  300 fps=156 q=-1.0 Lsize=     154kB time=00:00:09.90 bitrate= 127.0kbits/s speed=5.16x    
[libx264 @ 0x5651003fdd00] [info] frame I:2     Avg QP:23.71  size:  5906
[libx264 @ 0x5651003fdd00] [info] frame P:101   Avg QP:26.25  size:  1031
[libx264 @ 0x5651003fdd00] [info] frame B:197   Avg QP:31.82  size:   210
[libx264 @ 0x5651003fdd00] [info] consecutive B-frames:  8.0%  8.7% 14.0% 69.3%
[libx264 @ 0x5651003fdd00] [info] mb I  I16..4:  1.5% 36.9% 61.6%
[libx264 @ 0x5651003fdd00] [info] mb P  I16..4:  0.4%  2.8%  2.2%  P16..4: 33.6% 28.9% 18.6%  0.0%  0.0%    skip:13.5%
[libx264 @ 0x5651003fdd00] [info] mb B  I16..4:  0.0%  0.2%  0.1%  B16..8: 45.2% 11.0%  2.6%  direct: 2.0%  skip:38.9%  L0:37.8% L1:46.8% BI:15.4%
[libx264 @ 0x5651003fdd00] [info] 8x8 transform intra:49.0% inter:56.7%
[libx264 @ 0x5651003fdd00] [info] coded y,uvDC,uvAC intra: 86.8% 86.2% 60.5% inter: 17.5% 11.4% 2.0%
[libx264 @ 0x5651003fdd00] [info] i16 v,h,dc,p: 48% 11%  4% 37%
[libx264 @ 0x5651003fdd00] [info] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 16% 16% 11%  4% 13% 13% 11%  7%  9%
[libx264 @ 0x5651003fdd00] [info] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 15% 14%  4% 15%  9% 11%  6%  7%
[libx264 @ 0x5651003fdd00] [info] i8c dc,h,v,p: 50% 17% 25%  8%
[libx264 @ 0x5651003fdd00] [info] Weighted P-Frames: Y:5.0% UV:2.0%
[libx264 @ 0x5651003fdd00] [info] ref P L0: 63.0% 18.3% 10.1%  8.3%  0.3%
[libx264 @ 0x5651003fdd00] [info] ref B L0: 87.6%  9.3%  3.1%
[libx264 @ 0x5651003fdd00] [info] ref B L1: 95.9%  4.1%
[libx264 @ 0x5651003fdd00] [info] kb/s:125.73
[in#0/yuv4mpegpipe @ 0x5651003f9440] [verbose] Input file #0 (foreman_qcif.yuv):
[in#0/yuv4mpegpipe @ 0x5651003f9440] [verbose]   Input stream #0:0 (video): 300 packets read (11404800 bytes); 300 frames decoded; 0 decode errors; 
[in#0/yuv4mpegpipe @ 0x5651003f9440] [verbose]   Total: 300 packets (11404800 bytes) demuxed
[AVIOContext @ 0x565100402200] [verbose] Statistics: 11406644 bytes read, 0 seeks

可以看到增加了几行包含[verbose]信息的打印,日志更加丰富了有木有?

3.参数repeat+level+warning

运行效果如下:

root@ubuntu:/home/ffmpeg/ffmpeg_build/bin# ./ffmpeg -loglevel repeat+level+warning -i foreman_qcif.yuv -c:v libx264 foreman_qcif.h264
File 'foreman_qcif.h264' already exists. Overwrite? [y/N] y

可见限制了打印等级为warning后,正常的info信息就没了,实现了日志分级的效果,调试时候更加清爽有木有?


总结

本文验证了ffmpeg中loglevel参数的使用方法,便于后续学习源码的代码逻辑。

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值