<video> tag refuses to play mp4 video

2019-09-04 06:07发布

问题:

I have a video I want to embed using the html5 video tag:

  • https://dl.dropboxusercontent.com/u/64454818/TMP/P6135199.MOV

I've converted it using ffmpeg:

ffmpeg -i P6135199.MOV -vcodec libx264 -acodec aac helios.mp4

FFMPEG output:

[libx264 @ 0x22ac340] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 0x22ac340] profile High 4:2:2, level 1.2, 4:2:2 8-bit
[libx264 @ 0x22ac340] 264 - core 142 r2455 021c0dc - 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=15 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 'helios.mp4':
  Metadata:
    comment-eng     : OLYMPUS DIGITAL CAMERA                           
    comment         : OLYMPUS DIGITAL CAMERA                           
    encoder         : Lavf56.15.102
    Stream #0:0(eng): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj422p(pc), 320x240, q=-1--1, 15 fps, 15360 tbn, 15 tbc (default)
    Metadata:
      creation_time   : 2008-06-13 10:47:16
      encoder         : Lavc56.13.100 libx264
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
Press [q] to stop, [?] for help
frame=  240 fps=124 q=-1.0 Lsize=     906kB time=00:00:15.86 bitrate= 467.7kbits/s    
video:902kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.409100%
[libx264 @ 0x22ac340] frame I:1     Avg QP:23.71  size:  7960
[libx264 @ 0x22ac340] frame P:123   Avg QP:23.85  size:  5255
[libx264 @ 0x22ac340] frame B:116   Avg QP:25.41  size:  2317
[libx264 @ 0x22ac340] consecutive B-frames:  3.3% 96.7%  0.0%  0.0%
[libx264 @ 0x22ac340] mb I  I16..4: 15.7% 69.0% 15.3%
[libx264 @ 0x22ac340] mb P  I16..4:  2.2% 13.4%  0.8%  P16..4: 43.8% 23.1% 14.0%  0.0%  0.0%    skip: 2.8%
[libx264 @ 0x22ac340] mb B  I16..4:  0.3%  1.3%  0.1%  B16..8: 42.4%  9.9%  3.0%  direct:12.2%  skip:30.9%  L0:37.2% L1:38.2% BI:24.5%
[libx264 @ 0x22ac340] 8x8 transform intra:80.8% inter:71.9%
[libx264 @ 0x22ac340] coded y,uvDC,uvAC intra: 76.7% 96.8% 49.7% inter: 37.8% 60.9% 5.1%
[libx264 @ 0x22ac340] i16 v,h,dc,p: 39%  4%  8% 49%
[libx264 @ 0x22ac340] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 14% 39%  6%  3%  4%  3%  6% 12%
[libx264 @ 0x22ac340] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 11% 18%  8%  7%  7%  8%  8%  8%
[libx264 @ 0x22ac340] i8c dc,h,v,p: 63%  7% 20% 10%
[libx264 @ 0x22ac340] Weighted P-Frames: Y:5.7% UV:0.8%
[libx264 @ 0x22ac340] ref P L0: 51.4% 18.3% 20.6%  9.3%  0.4%
[libx264 @ 0x22ac340] ref B L0: 80.8% 19.2%
[libx264 @ 0x22ac340] kb/s:461.52

And I try to embed it as follows:

<video src="helios.mp4" controls>Get a better browser!</video>

However, Chrome doesn't play the video, only offers to download it (same as it did before I converted the video). Firefox has the same problem.

I've tested and other mp4 files (from my phone) play just fine.

What's the problem? Did I convert it wrong?

回答1:

It's a problem of pixel format. The pixel format of the input file is yuvj422p but this format is not supported by libx264. So you have to choose another one. You can take yuv420p which works on old players.

The command

ffmpeg -i P6135199.MOV -vcodec libx264 -pix_fmt yuv420p helios.mp4

does the job.

With this you can play your video in Chrome and Safari but for Firefox you need a plugin.