[FFmpeg-user] Cut part of a video, crop it and blackout parts of it

Carl Eugen Hoyos ceffmpeg at gmail.com
Mon Apr 5 09:23:26 EEST 2021



> Am 05.04.2021 um 01:48 schrieb Cecil Westerhof via ffmpeg-user <ffmpeg-user at ffmpeg.org>:
> 
> I have to cut out a part of a video, crop it and blackout two parts.
> I do this with:
>    ffmpeg -y                                      \
>           -ss 00:19:49                            \
>           -i  2021-03-25ToastmastersClubAvond.mp4 \
>           -to 442                                 \
>           -vf "
>                crop = 1440:1080:240:0
>                ,
>                drawbox=enable='between(t, 0, 2)'     :
>                   color     = black                  :
>                   w         = in_w                   :
>                   h         = in_h                   :
>                   thickness = fill
>                ,
>                drawbox=enable='between(t, 339, 342)' :
>                   color     = black                  :
>                   w         = in_w                   :
>                   h         = in_h                   :
>                   thickness = fill
>           "                                       \
>           -acodec copy                            \
>           -vcodec libx264                         \
>           -crf    23                              \
>           speechClean2.mp4
> 
> The reason I do -to in the output is that in this way the metadata
> concerning the video length is less out of whack.
> 
> I was wondering if this is a good way, or that it could be done
> better?

> Also, beside the timestamps the parameters for drawbox are the same.
> Is there a way that I do not have to repeat them?

I suspect there is an „Or“ parameter for „enable“.

> 
> I started the crf with 16, then 20 and lastly 23.
> 
> The input file has:
>    Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 2070 kb/s, 25 fps, 25 tbr, 30k tbn, 60k tbc (default)
> 
> With crf 16 I get:
>    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x1080, 5541 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
> 
> With crf 20 I get:
>    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x1080, 3538 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
> 
> And with crf 23 I get:
>    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1440x1080, 2444 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)
> 
> So to me it seems that the crf value is still to high.

You mean still too low?

> Is there a way
> to use the kb/s to calculate the crf value to use?

There is a fundamental misunderstanding:
You decide how much quality you want to preserve, x264 decides how much bitrate is needed to reach that quality. (This is true for the general case where you want to control the output quality and are therefore using the crf option.)
If you really have bitrate constraints, use two-pass encoding instead of the crf option.

I suspect the reason for the high bitrate of the output file is the low quality of the input file but this is not really relevant, just a (possible) explanation. One (unlikely) alternative is that your original h264 encoder is much better than x264.

Carl Eugen


More information about the ffmpeg-user mailing list