Ist es möglich, schwarze Ränder eines Videos mit ffmpeg automatisch zu beschneiden?

15

Ich denke, es hat einen "Schwärze" -Videofilter, der bestimmen kann, ob eine Bildsequenz schwarz ist. Möglicherweise verfügt es auch über einen Filter zum automatischen Ermitteln von Zuschneidewerten, um schwarze Ränder an den Kanten eines Videos zu entfernen. Oder vielleicht ist es irgendwie möglich, ein Skript mit dem Filter "Schwärze" zu schreiben.

Konstantin
quelle

Antworten:

21

Ja, es ist möglich.

Spielen Sie zuerst Ihr Video ab, um festzustellen, ob es in Ordnung ist:

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

Die cropdetectFilterwerte sind:

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

Wenn es in Ordnung aussieht, beschneiden Sie es:

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

Quelle und weitere Informationen: René Calles Blog renevolution.com

Cornelius
quelle
5
Es kann hilfreich sein, einen Startpunkt (-ss 00:05:00) anzugeben, wenn Cropdetect verwendet wird (vor der Eingabe -i), da einige Videos beim Starten einen durchgehend schwarzen Bildschirm haben.
Ich möchte dies verwenden, um python matplotlib.animationVideos zuzuschneiden , die einen weißen Rand haben. Ist es möglich, die Farbe des erkannten Rahmens zu ändern?
Ryanjdillon
1
Können Sie etwas anderes als Schwarz als Rahmenfarbe angeben? Weiß zum Beispiel?
DanMan
Dies beantwortet die Frage nicht, da Sie noch manuelle Maßnahmen ergreifen müssen
Freedo
Hey @Cornelius, kannst du mir bitte helfen, einen Befehl zu finden? Ich möchte video.mp4 mit ffmpeg von Square auf Round zuschneiden. Ich möchte dafür keinen Overlay-Befehl verwenden.
Adil
12

Von: /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
quelle
1
ok, dies generiert die "Crop-Werte", die mit ffmpeg auf einfache und sehr klare Weise verwendet werden können :), danke!
Wassermann Macht
4

Die beiden anderen Antworten in einem Skript zusammenfassen:

#!/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"

Diese Frage enthält einige relevante ffmpeg-Beispiele

Alexx Roche
quelle