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
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
User contributions licensed under CC BY-SA 3.0