cropdetect and ffplay - 2017
cropdetec can auto-detect crop size.
It calculate necessary cropping parameters and prints the recommended parameters through the logging system. The detected dimensions correspond to the non-black area of the input video.
The crop filter accepts the following options
Set higher black value threshold, which can be optionally specified from nothing (0) to everything (255). An intensity value greater to the set value is considered non-black. Default value is 24.
Set the value for which the width/height should be divisible by. The offset is automatically adjusted to center the video. Use 2 to get only even dimensions (needed for 4:2:2 video). 16 is best when encoding to most video codecs. Default value is 16.
- reset_count, reset
Set the counter that determines after how many frames cropdetect will reset the previously detected largest video area and start over to detect the current optimal crop area. Default value is 0.
This can be useful when channel logos distort the video area. 0 indicates never reset and return the largest area encountered during playback.
We're going to use a movie clip (The Good, the Bad and the Ugly) as a sample.
If we run the clip using a media player, we can see the black letter box both top and bottom:
If we run ffmpeg to see what it tells us about the crop:
$ ffmpeg -i TheGoodTheBadAndTheUgly.mp4 -vf cropdetect=24:16:0 dummy.mp4 ... [Parsed_cropdetect_0 @ 0x3704360] x1:0 x2:639 y1:43 y2:317 w:640 h:272 x:0 y:46 pts:181320 t:181.320000 crop=640:272:0:46 ...
It lets us know the area to crop.
So, we now can crop the movie clip to make a new cropped clip:
ffmpeg -i TheGoodTheBadAndTheUgly.mp4 -vf crop=640:272:0:46 cropped_TheGoodTheBadAndTheUgly.mp4
The crop filter takes four arguments:
- out_width:output_height - the cropped output width and height of the video.
- x:y - the start coordinate from the top left corner.
As we can see from the picture below, the new cropped movie clip (cropped_TheGoodTheBadAndTheUgly.mp4) do not have the black letter box any more:
We can also use ffplay to get the information about the crop:
$ ffplay -i TheGoodTheBadAndTheUgly.mp4 -vf cropdetect=24:16:0 ... [Parsed_cropdetect_0 @ 0x7ff30c004520] x1:0 x2:639 y1:43 y2:317 w:640 h:272 x:0 y:46 pts:11440 t:11.440000 crop=640:272:0:46 ...
As we can see, ffplay also gives us the same information about the cropping.
Ph.D. / Golden Gate Ave, San Francisco / Seoul National Univ / Carnegie Mellon / UC Berkeley / DevOps / Deep Learning / Visualization