É possível cortar automaticamente bordas pretas de um vídeo com ffmpeg?

15

Eu acho que tem um filtro de vídeo de "escuridão", que pode determinar se uma sequência de imagens é preta. Talvez ele também tenha um filtro para determinar os valores de corte automaticamente e remover bordas pretas das bordas de um vídeo. Ou talvez seja possível, de alguma forma, escrever um script usando o filtro "escuridão".

Konstantin
fonte

Respostas:

21

Sim, é possível.

Primeiro, reproduza seu vídeo para verificar se está OK:

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

Os cropdetectvalores do filtro são:

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

Se parecer bom, corte-o:

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

Fonte e mais informações: René Calles blog renevolution.com

Cornelius
fonte
5
Pode ser útil colocar um ponto de início (-ss 00:05:00) ao usar o cropdetect (antes da entrada -i), pois alguns vídeos terão uma tela preta sólida ao iniciar.
Eu gostaria de usar isso para cortar python matplotlib.animationvídeos, que têm uma borda branca. É possível alterar a cor da borda que está sendo detectada?
Ryanjdillon
1
Você pode especificar algo além de preto como cor da borda? Branco por exemplo?
8334 DanMan
Isso não responder à pergunta como você ainda precisa fazer ação manual
Freedo
Hey @Cornelius você pode me ajudar a encontrar um comando - eu quero video.mp4 colheita da Praça para o Round usando ffmpeg - não quero usar sobreposição de comando para isso
Adil
12

De: /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
fonte
1
ok, isso irá gerar os "valores de corte" para usar com o ffmpeg de uma maneira simples e muito clara :), thx!
Poder de Aquário
4

Reunindo as outras duas respostas em um 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 pergunta tem alguns exemplos relevantes do ffmpeg

Alexx Roche
fonte