21

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.

31

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

7
  • 8
    It 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.
    – user465731
    Jul 4 '15 at 13:45
  • 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? Oct 8 '15 at 11:51
  • 1
    Can you specify something else than black as border color? White for example?
    – DanMan
    Mar 8 '18 at 13:03
  • This does not answer the question as you still need to do manual action
    – Freedo
    Sep 8 '19 at 8:32
  • 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
    Sep 13 '19 at 7:08
16

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
2
  • 1
    ok, this will generate the "crop values" to use with ffmpeg in a simple and very clear way :), thx! Apr 13 '16 at 0:11
  • 1
    This fails miserably if there's a bit of black at the beginning of the video, such as in an intro. This is solved by adding -ss 5 before -i, to run cropdetect after skipping the first 5 seconds. Apr 5 at 19:11
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

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.