Redimensione em lote os vídeos com o corte “pan and scan”

8

Estou tentando preparar uma coleção de ~ 120 videoclipes para serem reproduzidos no VLC Player e projetados em um projetor de baixa resolução (1024x768) durante um evento de música eletrônica DIY. Os clipes de origem são todos visuais abstratos de alta resolução em formato .mov, com cerca de 4 GB cada. Eles têm várias proporções. Alguns são 4: 3, outros são 16: 9, outros são 1: 1 (quadrado) etc.

Gostaria de cortar / dimensionar todos os clipes para 1024x768, mantendo suas respectivas proporções originais. E gostaria de fazê-lo sem colocá-los em caixas de correio e deixar barras pretas na parte superior / inferior ou esquerda / direita. Basicamente, o que eu gostaria de fazer é reduzi-los ao ponto em que eles preenchem totalmente a tela 1024x768, e não menores. Eu acredito que é essencialmente uma técnica "pan and scan"?

(Não importa se parte da imagem é removida no processo - eles estão apenas girando formas geométricas e coisas assim.)

Existe alguma maneira de redimensionar todos os ~ 120 vídeos em lote usando um único comando FFMPEG? Ou existe outra ferramenta para Windows ou Linux que funcione? Eu realmente não me importo com o formato de saída - apenas algo que o VLC pode reproduzir sem ficar instável.

Derrick Miller
fonte

Respostas:

3

Se você tivesse apenas vídeos 4: 3 e 16: 9, sugiro:

ffmpeg -i input.mov -filter:v 'scale=-1:768,crop=1024:ih' \
-c:v libx264 -crf 23 -preset veryfast output.mp4

Isso dimensionaria um vídeo para uma altura de 768, dimensionando a largura para manter a proporção; e, em seguida, corta a largura para 1024, mantendo a altura em 768. O fato de você estar usando vídeos 1: 1 também complica: um vídeo de 3000 x 3000 é redimensionado para 768 x 768 e, em seguida, o ffmpeg tenta cortá-lo para 1024 x 768, o que obviamente não funcionaria, já que as colheitas não podem ser maiores que o insumo ...

A única maneira de pensar em fazer isso funcionar seria cortar todos os vídeos, o que você declarou que não seria um problema. Isso cortará a largura de saída para ser a mesma que a altura de entrada e a altura de saída para 3/4 da altura de entrada; e, em seguida, ele redimensionará o vídeo para uma altura de 768, mantendo a proporção com a largura:

ffmpeg -i input.mov -filter:v 'crop=ih:3/4*ih,scale=-1:768' \
-c:v libx264 -crf 23 -preset veryfast output.mp4

Isso funcionará apenas se os arquivos originais tiverem uma altura de 1024 ou mais. Observe que o x264 aceita apenas uma largura ou altura uniforme, o que pode causar problemas (mas não deve ser o caso).

Para converter todos os .mov em um diretório, você pode usar um loop for:

for f in *.mov; \
do ffmpeg -i "$f" -filter:v 'crop=ih:3/4*ih,scale=-1:768' \
-c:v libx264 -crf 23 -preset veryfast "${f/%mov/mp4}"; \
done

Para fazer isso recursivamente, você pode usar find:

find . -type f -name *.mov -exec bash -c \
'ffmpeg -i "$0" -filter:v "crop=ih:3/4*ih,scale=-1:768" \
-c:v libx264 -crf 23 -preset veryfast "${0/%mov/mp4}"' {} \;

Tudo isso exigirá uma versão recente do ffmpeg.

evilsoup
fonte