Is it possible to autocrop black borders of a video with ffmpeg?

15

4

I think it has a "blackness" video filter, which can determine if a picture sequence is black. Maybe it also has a filter to determine crop values automatically to remove black borders form edges of a video. Or maybe it is possible somehow to write a script using the "blackness" filter.

Konstantin

Posted 2014-06-24T14:04:46.873

Reputation: 515

Answers

21

Yes, it is possible.

First play your video to see if it is OK:

ffplay -i YourMovie.mp4 -vf "cropdetect=24:16:0"

The cropdetect filter values are:

cropdetect=limit:round:reset

limit = black threshold (default 24)
round = output resolution must be divisible to this
reset = after how many frames the detection process will start over

If it looks OK, crop it:

ffmpeg -i YourMovie.mp4 -vf "crop=640:256:0:36" YourCroppedMovie.mp4

Source and more info: René Calles blog renevolution.com

Cornelius

Posted 2014-06-24T14:04:46.873

Reputation: 2 524

5It might be helpful to put a start point (-ss 00:05:00) in when using cropdetect (before input -i) as some video will have a solid black screen when starting. – None – 2015-07-04T13:45:15.283

I would like to use this to crop python matplotlib.animation videos, which have a white border. Is it possible to alter the color of the border being detected? – ryanjdillon – 2015-10-08T11:51:09.770

1Can you specify something else than black as border color? White for example? – DanMan – 2018-03-08T13:03:18.673

This does not answer the question as you still need to do manual action – Freedo – 2019-09-08T08:32:38.120

Hey @Cornelius can you please help me to find one command

  • i want to crop video.mp4 from Square to Round using ffmpeg - not want to use overlay command for this
  • < – Adil – 2019-09-13T07:08:13.463

12

From: https://stackoverflow.com/questions/17265381/ffmpeg-get-value-from-cropdetect

ffmpeg -i input -t 1 -vf cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tail -1

Jannes

Posted 2014-06-24T14:04:46.873

Reputation: 220

1ok, this will generate the "crop values" to use with ffmpeg in a simple and very clear way :), thx! – Aquarius Power – 2016-04-13T00:11:37.243

4

Putting the other two answers together into a script:

#!/bin/sh
#ffmpeg_zoom ver 20180128202453
I="$@";X=${I##*.};O=${I%.*}_zoomed.${X};f=$(which ffmpeg 2>/dev/null)
if [ ! "$f" ]||[ "$f" = '' ];then echo "Install ffmpeg";exit 1;fi
C=$($f -i "$I" -t 1 -vf cropdetect -f null - 2>&1|awk '/crop/{print $NF}'|tail -n1)
echo $f -i "$I" -vf "$C" "$O"; $f -i "$I" -vf "$C" "$O"

This question has some relevant ffmpeg examples

Alexx Roche

Posted 2014-06-24T14:04:46.873

Reputation: 760