Search code examples
ffmpeglibavcodeclibavlibavformatlibx264

How to disable libx264 stderr output?


I'm writing a library that uses the ffmpeg library interface (libavcodec, libavformat, libavutil, etc.) to manipulate some video. Part of this involves some encoding for which I'm using libx264. Everything works great but libx264 writes output to stderr, for example:

[libx264 @ 0x62cbc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 AVX512
[libx264 @ 0x62cbc0] profile High, level 5.0, 4:2:0, 8-bit
[libx264 @ 0x62cbc0] frame I:28    Avg QP:26.78  size:144822
[libx264 @ 0x62cbc0] frame P:135   Avg QP:32.21  size: 30853
[libx264 @ 0x62cbc0] frame B:108   Avg QP:36.18  size: 15709
[libx264 @ 0x62cbc0] consecutive B-frames: 20.3% 79.7%
[libx264 @ 0x62cbc0] mb I  I16..4:  9.5% 75.9% 14.6%
[libx264 @ 0x62cbc0] mb P  I16..4:  1.1%  1.5%  1.4%  P16..4: 44.8%  9.6%  4.2%  0.0%  0.0%    skip:37.5%
[libx264 @ 0x62cbc0] mb B  I16..4:  0.3%  0.2%  0.4%  B16..8: 49.8%  4.6%  0.9%  direct: 1.0%  skip:42.7%  L0:46.9% L1:49.8% BI: 3.2%
[libx264 @ 0x62cbc0] final ratefactor: 26.71
[libx264 @ 0x62cbc0] 8x8 transform intra:68.4% inter:70.4%
[libx264 @ 0x62cbc0] direct mvs  spatial:87.0% temporal:13.0%
[libx264 @ 0x62cbc0] coded y,uvDC,uvAC intra: 76.2% 73.8% 31.6% inter: 9.7% 9.5% 4.2%
[libx264 @ 0x62cbc0] i16 v,h,dc,p:  9% 57%  7% 27%
[libx264 @ 0x62cbc0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:  9% 21%  4%  8%  9%  7% 12%  7% 22%
[libx264 @ 0x62cbc0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 13% 28%  9%  6%  6%  6% 10%  6% 16%
[libx264 @ 0x62cbc0] i8c dc,h,v,p: 20% 50% 19% 11%
[libx264 @ 0x62cbc0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x62cbc0] ref P L0: 73.2% 12.6% 10.0%  2.7%  1.1%  0.3%
[libx264 @ 0x62cbc0] ref B L0: 92.3%  5.6%  1.7%  0.4%
[libx264 @ 0x62cbc0] kb/s:7912.01

It is not acceptable for my library to write to stdout or stderr. How can I programmatically disable this output to stderr?

I realize that I can "hijack" stderr, but this seems like a crude hack and I would strongly prefer not to do so.


Solution

  • x264 has command-line argument --quiet. If used as library, its equivalent is to set

    param->i_log_level = X264_LOG_NONE;