Apakah mungkin untuk melakukan autocrop pada batas hitam video dengan ffmpeg?

15

Saya pikir itu memiliki filter video "hitam", yang dapat menentukan apakah urutan gambar berwarna hitam. Mungkin juga memiliki filter untuk menentukan nilai pemotongan secara otomatis untuk menghapus tepi hitam dari tepi video. Atau mungkin mungkin entah bagaimana menulis skrip menggunakan filter "kegelapan".

Konstantin
sumber

Jawaban:

21

Ya itu mungkin.

Pertama-tama mainkan video Anda untuk melihat apakah itu OK:

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

Nilai cropdetectfilternya adalah:

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

Jika terlihat OK, pangkas:

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

Sumber dan info lebih lanjut: René Calles blog renevolution.com

Cornelius
sumber
5
Mungkin bermanfaat untuk meletakkan titik awal (-ss 00:05:00) ketika menggunakan cropdetect (sebelum input -i) karena beberapa video akan memiliki layar hitam pekat saat memulai.
Saya ingin menggunakan ini untuk memotong python matplotlib.animationvideo, yang memiliki batas putih. Apakah mungkin untuk mengubah warna perbatasan yang terdeteksi?
ryanjdillon
1
Bisakah Anda menentukan sesuatu selain hitam sebagai warna batas? Putih misalnya?
DanMan
Ini tidak menjawab pertanyaan karena Anda masih perlu melakukan tindakan manual
Freedo
Hai @Cornelius, bisakah Anda membantu saya menemukan satu perintah - saya ingin memotong video.mp4 dari Square to Round menggunakan ffmpeg - tidak ingin menggunakan perintah overlay untuk ini
Adil
12

Dari: /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
sumber
1
ok, ini akan menghasilkan "nilai krop" untuk digunakan dengan ffmpeg dengan cara yang sederhana dan sangat jelas :), thx!
Aquarius Power
4

Menyatukan dua jawaban lainnya menjadi satu skrip:

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

Pertanyaan ini memiliki beberapa contoh ffmpeg yang relevan

Alexx Roche
sumber