¿Es posible recortar automáticamente los bordes negros de un video con ffmpeg?

15

Creo que tiene un filtro de video "negro", que puede determinar si una secuencia de imágenes es negra. Quizás también tenga un filtro para determinar los valores de recorte automáticamente para eliminar los bordes negros de los bordes de un video. O tal vez es posible de alguna manera escribir un script usando el filtro "negrura".

Konstantin
fuente

Respuestas:

21

Sí, es posible.

Primero reproduce tu video para ver si está bien:

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

Los cropdetectvalores del filtro son:

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

Si se ve bien, recórtalo:

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

Fuente y más información: blog de René Calles renevolution.com

Cornelio
fuente
55
Puede ser útil poner un punto de inicio (-ss 00:05:00) cuando se usa cropdetect (antes de la entrada -i) ya que algunos videos tendrán una pantalla negra sólida al comenzar.
Me gustaría usar esto para recortar python matplotlib.animationvideos, que tienen un borde blanco. ¿Es posible alterar el color del borde que se detecta?
ryanjdillon
1
¿Puedes especificar algo más que el negro como color del borde? ¿Blanco por ejemplo?
DanMan
Esto no responde a la pregunta ya que todavía tiene que hacer una acción manual
Freedo
Hola @Cornelius, ¿puedes ayudarme a encontrar un comando? Quiero recortar video.mp4 de cuadrado a redondo usando ffmpeg. No quiero usar el comando de superposición para esto
Adil
4

Poner las otras dos respuestas juntas en 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"

Esta pregunta tiene algunos ejemplos relevantes de ffmpeg

Alexx Roche
fuente