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".

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


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


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.