这是我的版本: ffmpeg版本:2.3.3 libx264版本:142.x
我想捕获我的视频并使用ffmpeg和x264到mp4文件。解决方案是320x240。 但我发现视频文件太大了。然后我发现P帧和B帧非常大,甚至几乎等于I帧。我不知道为什么。
这是我的代码:
c->codec_id = codec_id; c->bit_rate = 400000; c->width = 320; c->height = 240; c->time_base.den = 10; c->time_base.num = 1; c->pix_fmt = AV_PIX_FMT_YUV420P;
这是我的程序输出:
[libx264 @ 0xb6200fc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0xb6200fc0] profile High, level 1.3
[libx264 @ 0xb6200fc0] 264 - core 142 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=10 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=400 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to '/home/2014_09_12/0002b6429579/5/2014_09_12_18_39_12_600.mp4':
Stream #0:0: Video: h264 (libx264), yuv420p, 320x240, q=-1--1, 400 kb/s, 10 tbc
Stream #0:1: Audio: aac, 8000 Hz, mono, fltp, 32 kb/s
[mp4 @ 0xb62005e0] Using AVStream.codec.time_base as a timebase hint to the muxer is deprecated. Set AVStream.time_base instead.
[mp4 @ 0xb62005e0] Using AVStream.codec.time_base as a timebase hint to the muxer is deprecated. Set AVStream.time_base instead.
[mp4 @ 0xb62005e0] Encoder did not produce proper pts, making some up.
[libx264 @ 0xb6200fc0] frame I:3 Avg QP: 2.79 size: 72996
[libx264 @ 0xb6200fc0] frame P:383 Avg QP: 0.14 size: 54075
[libx264 @ 0xb6200fc0] frame B:216 Avg QP: 1.95 size: 64784
[libx264 @ 0xb6200fc0] consecutive B-frames: 30.1% 63.2% 6.0% 0.7%
[libx264 @ 0xb6200fc0] mb I I16..4: 16.1% 12.7% 71.2%
[libx264 @ 0xb6200fc0] mb P I16..4: 3.5% 5.1% 15.9% P16..4: 20.3% 22.8% 14.0% 0.0% 0.0% skip:18.3%
[libx264 @ 0xb6200fc0] mb B I16..4: 0.4% 2.5% 8.2% B16..8: 32.6% 19.8% 13.5%
direct:22.2% skip: 0.8% L0:25.5% L1:12.8% BI:61.6%
[libx264 @ 0xb6200fc0] final ratefactor: -32.89
[libx264 @ 0xb6200fc0] 8x8 transform intra:21.0% inter:29.6%
[libx264 @ 0xb6200fc0] coded y,uvDC,uvAC intra: 100.0% 100.0% 100.0% inter: 83.3% 80.9% 80.9%
[libx264 @ 0xb6200fc0] i16 v,h,dc,p: 5% 7% 42% 46%
[libx264 @ 0xb6200fc0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14% 12% 23% 8% 6% 6% 8% 9% 14%
[libx264 @ 0xb6200fc0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 12% 11% 19% 10% 8% 8% 10% 10% 12%
[libx264 @ 0xb6200fc0] i8c dc,h,v,p: 78% 3% 4% 15%
[libx264 @ 0xb6200fc0] Weighted P-Frames: Y:0.5% UV:0.3%
[libx264 @ 0xb6200fc0] ref P L0: 43.4% 14.6% 19.0% 22.9% 0.1%
[libx264 @ 0xb6200fc0] ref B L0: 63.3% 35.7% 1.1%
[libx264 @ 0xb6200fc0] ref B L1: 97.0% 3.0%
[libx264 @ 0xb6200fc0] kb/s:4.53
[aac @ 0xb6201ba0] 2 frames left in the queue on closing
答案 0 :(得分:0)
很可能你在VFR(可变帧速率)模式下编码并且无法向libx264提供正确的pts(关于mp4模块的提示)。因为根据你的输出,libx264认为它编码为~4.5 kb / s而你要求它以400 kb / s编码它,即使在最低QP时它也不能丰富你的目标比特率(这不是超过 - 但是比特率的使用不足。
答案 1 :(得分:0)
我尝试了最新的演示,然后成功了。 doc / examples中的旧版本2.0.4演示muxing.c在2.3.3 ffmpeg中运行不佳。