Est-il possible de recadrer automatiquement les bordures noires d'une vidéo avec ffmpeg?

15

Je pense qu'il a un filtre vidéo "noirceur", qui peut déterminer si une séquence d'images est noire. Peut-être qu'il a également un filtre pour déterminer automatiquement les valeurs de recadrage pour supprimer les bordures noires des bords d'une vidéo. Ou peut-être qu'il est possible en quelque sorte d'écrire un script en utilisant le filtre "noirceur".

Konstantin
la source

Réponses:

21

Oui c'est possible.

Lisez d'abord votre vidéo pour voir si elle est OK:

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

Les cropdetectvaleurs de filtre sont:

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

S'il semble correct, recadrez-le:

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

Source et plus d'infos: blog René Calles renevolution.com

Cornelius
la source
5
Il peut être utile de mettre un point de départ (-ss 00:05:00) lors de l'utilisation de cropdetect (avant l'entrée -i) car certaines vidéos auront un écran noir fixe au démarrage.
Je voudrais l'utiliser pour recadrer des python matplotlib.animationvidéos, qui ont une bordure blanche. Est-il possible de modifier la couleur de la bordure détectée?
ryanjdillon
1
Pouvez-vous spécifier autre chose que du noir comme couleur de bordure? Blanc par exemple?
DanMan
Cela ne répond pas à la question car vous devez toujours effectuer une action manuelle
Freedo
Hé @Cornelius, pouvez-vous m'aider à trouver une commande - je veux recadrer video.mp4 de Square à Round en utilisant ffmpeg - ne voulez pas utiliser la commande de superposition pour cela
Adil
12

De: /programming/17265381/ffmpeg-get-value-from-cropdetect

ffmpeg -i input -t 1 -vf cropdetect -f null - 2>&1 | awk '/crop/ { print $NF }' | tail -1
Jannes
la source
1
ok, cela générera les "valeurs de recadrage" à utiliser avec ffmpeg de manière simple et très claire :), merci!
Aquarius Power
4

Mettre les deux autres réponses ensemble dans un 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"

Cette question contient des exemples pertinents de ffmpeg

Alexx Roche
la source