Windows video player cannot play cropped video from ffmpeg

1

I am trying to crop video with ffmpeg, I have encountered three problems. First, I used the following code to crop a 1080p video.

ffmpeg -i 1080vid.avi -vf "crop=1920:1080:0:0" -c:v libx264 -crf 1 -c:a copy output.mp4

However, in the compression rate argument, it only works if I set -crf to a positive value. If I set it to 0, then the output video cannot be played by my Windows 10 video player. However, since I am pursuing a lossless conversion, this is problematic. The output mp4 is smaller than 5% of the original size.

The original goal was to cut a 1080*15360 video into 8 1080p videos. However, using the following code, I get unplayable output after playing with all the settings.

ffmpeg -i sample.avi -vf "crop=1920:1080:0:0" -c:v libx264 -crf 1 -c:a copy output.mp4

The input sample.avi is a lossless avi with bitrate larger than 1GB/s, and the output is a 70kb unplayable file. When opened, a pop up window displays:

Choose something else to play. This item is in a format we don't support.
0xc00d36b4

The following is the command line output.

ffmpeg version N-94396-g47b6ca0b02 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.1.1 (GCC) 20190716
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
  libavutil      56. 32.100 / 56. 32.100
  libavcodec     58. 55.100 / 58. 55.100
  libavformat    58. 30.100 / 58. 30.100
  libavdevice    58.  9.100 / 58.  9.100
  libavfilter     7. 58.100 /  7. 58.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, avi, from 'sample.avi':
  Metadata:
    date            : 2019-07-26T07:09:04.185811
  Duration: 00:00:03.00, start: 0.000000, bitrate: 11932176 kb/s
    Stream #0:0: Video: rawvideo, bgr24, 15360x1080, 12066071 kb/s, 29.97 fps, 29.97 tbr, 29.97 tbn, 29.97 tbc
File 'output.mp4' already exists. Overwrite ? [y/N] y
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 000002a4a910b900] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 000002a4a910b900] profile High 4:4:4 Predictive, level 6.0, 4:4:4, 8-bit
[libx264 @ 000002a4a910b900] 264 - core 157 r2970 5493be8 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - 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=4 threads=12 lookahead_threads=2 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=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'output.mp4':
  Metadata:
    date            : 2019-07-26T07:09:04.185811
    encoder         : Lavf58.30.100
    Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv444p, 15360x1080, q=-1--1, 29.97 fps, 30k tbn, 29.97 tbc
    Metadata:
      encoder         : Lavc58.55.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
frame=   90 fps=8.0 q=-1.0 Lsize=      65kB time=00:00:02.90 bitrate= 183.7kbits/s speed=0.258x
video:63kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 3.042484%
[libx264 @ 000002a4a910b900] frame I:1     Avg QP: 0.35  size: 22252
[libx264 @ 000002a4a910b900] frame P:23    Avg QP: 0.09  size:   476
[libx264 @ 000002a4a910b900] frame B:66    Avg QP: 0.00  size:   467
[libx264 @ 000002a4a910b900] consecutive B-frames:  2.2%  0.0%  0.0% 97.8%
[libx264 @ 000002a4a910b900] mb I  I16..4: 92.1%  6.5%  1.5%
[libx264 @ 000002a4a910b900] mb P  I16..4:  0.0%  0.0%  0.0%  P16..4:  0.0%  0.0%  0.0%  0.0%  0.0%    skip:100.0%
[libx264 @ 000002a4a910b900] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  0.0%  0.0%  0.0%  direct: 0.0%  skip:100.0%
[libx264 @ 000002a4a910b900] 8x8 transform intra:6.5% inter:0.0%
[libx264 @ 000002a4a910b900] coded y,u,v intra: 0.4% 0.0% 0.0% inter: 0.0% 0.0% 0.0%
[libx264 @ 000002a4a910b900] i16 v,h,dc,p: 96%  2%  2%  0%
[libx264 @ 000002a4a910b900] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 93%  1%  7%  0%  0%  0%  0%  0%  0%
[libx264 @ 000002a4a910b900] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 42% 25% 31%  0%  0%  0%  0%  0%  0%
[libx264 @ 000002a4a910b900] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 000002a4a910b900] kb/s:170.49
python
windows
ffmpeg
video-editing
asked on Stack Overflow Jul 28, 2019 by Chen Clarence

1 Answer

1

There are two issues in play here.

When encoding to lossless (crf 0), a H.264 encoder sets profile High Predictive 4:4:4 which is playable by a few players only.

Also, your input is RGB. ffmpeg will convert this to the best format available among those supported by the encoder. In this case, that's yuv444p. This pixel format also does not have wide support.

So, use

ffmpeg -i sample.avi -vf "crop=1920:1080:0:0" -pix_fmt yuv420p -c:v libx264 -crf 1 -c:a copy out.mp4
answered on Stack Overflow Jul 28, 2019 by Gyan

User contributions licensed under CC BY-SA 3.0