FFMPEG x264 MP4 Encoding all grey

2020-02-13 03:06发布

问题:

I am currently using FFMPEG v1.1 on CentOS 6.3.

I configured FFMPEG with:

./configure --arch=x86_64  --enable-libmp3lame  --enable-librtmp  --enable-libtheora --enable-libvorbis  --enable-libx264 --enable-pthreads --enable-gpl --enable-runtime-cpudetect 

when I run a simple command to record live input to MP4 by:

ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 /home/irdb/Desktop/test.mp4

I get nothing, just a grey screen with some artifacts around the edges. However when I run the same command as .MPG it comes out fine. I need it in MP4 format however.

On a side note I am running x264-0.120 installed through yum

My question is, is there a problem with the way I compiled ffmpeg? Or is it possibly something else?

edit:

Output from example as requested:

# ffmpeg -f video4linux2 -s 640x480 -t 5 -i /dev/video0 -strict 2 /home/irdb/Desktop/test.mp4
ffmpeg version N-50546-g1f5b5b8 Copyright (c) 2000-2013 the FFmpeg developers
built on Mar  7 2013 00:17:44 with gcc 4.4.6 (GCC) 20120305 (Red Hat 4.4.6-4)
configuration: --enable-libmp3lame --enable-librtmp --enable-libtheora --enable-   libvorbis --enable-libx264 --enable-pthreads --enable-gpl --enable-runtime-cpudetect
libavutil      52. 18.100 / 52. 18.100
libavcodec     54. 92.100 / 54. 92.100
libavformat    54. 63.104 / 54. 63.104
libavdevice    54.  3.103 / 54.  3.103
libavfilter     3. 42.103 /  3. 42.103
libswscale      2.  2.100 /  2.  2.100
libswresample   0. 17.102 /  0. 17.102
libpostproc    52.  2.100 / 52.  2.100
[video4linux2,v4l2 @ 0x3025120] Estimating duration from bitrate, this may be   inaccurate
Input #0, video4linux2,v4l2, from '/dev/video0':
Duration: N/A, start: 128.640356, bitrate: 147456 kb/s
Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 640x480, 147456 kb/s, 30 fps, 30 tbr, 1000k tbn, 1000k tbc
[libx264 @ 0x3026f80] using cpu capabilities: MMX2 SSE2Fast SSEMisalign LZCNT
[libx264 @ 0x3026f80] profile High 4:2:2, level 3.0, 4:2:2 8-bit
[libx264 @ 0x3026f80] 264 - core 130 r2274 c832fe9 - H.264/MPEG-4 AVC codec -  Copyleft 2003-2013 - 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=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to '/home/irdb/Desktop/test.mp4':
Metadata:
encoder         : Lavf54.63.104
Stream #0:0: Video: h264 ([33][0][0][0] / 0x0021), yuv422p, 640x480, q=-1--1, 15360 tbn, 30 tbc
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo -> libx264)
Press [q] to stop, [?] for help
frame=   32 fps=0.0 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=21    drframe=   46 fps= 46 q=0.0 size=       0kB time=00:00:00.00 bitrate=N/A dup=28 drframe=    62 fps= 41 q=29.0 size=      71kB time=00:00:00.33 bitrate=1735.2kbits/frame=   76 fps=  38 q=29.0 size=     169kB time=00:00:00.80 bitrate=1731.2kbits/frame=   93 fps= 37  q=29.0 size=     311kB time=00:00:01.36 bitrate=1862.3kbits/frame=  107 fps= 35 q=29.0  size=     423kB time=00:00:01.83 bitrate=1891.0kbits/frame=  123 fps= 35 q=29.0 size=      537kB time=00:00:02.36 bitrate=1860.2kbits/frame=  139 fps= 34 q=29.0 size=     664kB  time=00:00:02.90 bitrate=1876.0kbits/frame=  150 fps= 29 q=-1.0 Lsize=    1174kB  time=00:00:04.93 bitrate=1948.7kbits/s dup=81 drop=0    
video:1172kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.133409%
[libx264 @ 0x3026f80] frame I:2     Avg QP:23.22  size: 28460
[libx264 @ 0x3026f80] frame P:136   Avg QP:24.45  size:  8397
[libx264 @ 0x3026f80] frame B:12    Avg QP:26.18  size:    42
[libx264 @ 0x3026f80] consecutive B-frames: 88.0%  4.0%  0.0%  8.0%
[libx264 @ 0x3026f80] mb I  I16..4: 47.1% 28.8% 24.1%
[libx264 @ 0x3026f80] mb P  I16..4:  4.3%  1.9%  1.2%  P16..4: 29.0% 11.4%  9.2%      0.0%  0.0%    skip:43.0%
[libx264 @ 0x3026f80] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  1.5%  0.0%  0.0%   direct: 0.0%  skip:98.5%  L0:16.5% L1:83.5% BI: 0.0%
[libx264 @ 0x3026f80] 8x8 transform intra:26.4% inter:30.7%
[libx264 @ 0x3026f80] coded y,uvDC,uvAC intra: 85.2% 95.6% 83.5% inter: 10.9% 38.6% 24.0%
[libx264 @ 0x3026f80] i16 v,h,dc,p: 33% 19% 40%  8%
[libx264 @ 0x3026f80] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:  6% 12% 55%  5%  3%  4%  4%  3%  8%
[libx264 @ 0x3026f80] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15%  9% 63%  3%  2%  2%  2%  2%  2%
[libx264 @ 0x3026f80] i8c dc,h,v,p: 66% 11% 14%  9%
[libx264 @ 0x3026f80] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x3026f80] ref P L0: 56.6%  7.5%  8.1% 27.8%
[libx264 @ 0x3026f80] ref B L0: 83.3% 16.7%
[libx264 @ 0x3026f80] ref B L1: 90.7%  9.3%
[libx264 @ 0x3026f80] kb/s:1918.95

回答1:

Your output video's pixel format is probably unsupported in the player you're using to show the video. If you observe your output logs, you can see yuv422p being chosen as the format. That's a 4:2:2 subsampled chroma in a planar format.

Choosing -pix_fmt yuv420p (4:2:0 subsampling) should give you an H.264-encoded video that can be viewed everywhere.

ffmpeg -f video4linux2 -s 640x480 -i /dev/video0 \
-c:v libx264 -pix_fmt yuv420p /home/irdb/Desktop/test.mp4

I explicitly set the video codec here. Just a good habit to develop so as not to be surprised when FFmpeg defaults to another encoder for a format. For example, choosing an MPEG output format made FFmpeg choose another default encoder, MPEG-1 (mpeg1video), which uses 4:2:0 subsampling again.



标签: ffmpeg