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.
x264 has command-line argument --quiet. If used as library, its equivalent is to set
param->i_log_level = X264_LOG_NONE;