Czy możliwe jest automatyczne przycinanie czarnych ramek wideo za pomocą ffmpeg?

16

Myślę, że ma filtr wideo „czerni”, który może ustalić, czy sekwencja obrazów jest czarna. Być może ma również filtr do automatycznego określania wartości kadrowania w celu usunięcia czarnych ramek z krawędzi wideo. A może w jakiś sposób można napisać skrypt za pomocą filtra „czerni”.

Konstantin
źródło

Odpowiedzi:

22

Tak to mozliwe.

Najpierw odtwórz film, aby sprawdzić, czy jest w porządku:

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

Wartości cropdetectfiltrów to:

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

Jeśli wygląda OK, przytnij:

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

Źródło i więcej informacji: blog René Calles renevolution.com

Cornelius
źródło
6
Przydaje się wprowadzenie punktu początkowego (-ss 00:05:00) podczas korzystania z funkcji cropdetect (przed wejściem -i), ponieważ niektóre wideo będą miały jednolity czarny ekran podczas uruchamiania.
Chciałbym użyć tego do przycinania python matplotlib.animationfilmów, które mają białą ramkę. Czy można zmienić kolor wykrywanej ramki?
ryanjdillon
1
Czy możesz określić coś innego niż czerń jako kolor obramowania? Na przykład biały?
DanMan
To nie odpowiada na pytanie, ponieważ nadal musisz wykonywać działania ręczne
Freedo
Hej @Cornelius, czy możesz mi pomóc znaleźć jedno polecenie - chcę przyciąć video.mp4 z Square do Round za pomocą ffmpeg - nie chcę używać do tego polecenia nakładki
Adil
13

Od: /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
źródło
1
ok, wygeneruje to „wartości przycięcia” do użycia z ffmpeg w prosty i bardzo jasny sposób :), dzięki!
Aquarius Power
4

Łączenie pozostałych dwóch odpowiedzi w skrypcie:

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

To pytanie zawiera kilka odpowiednich przykładów ffmpeg

Alexx Roche
źródło