Ridimensiona in batch i video con il ritaglio "pan and scan"


8

Sto cercando di preparare una raccolta di circa 120 videoclip da riprodurre in VLC Player e proiettati su un proiettore a bassa risoluzione (1024x768) durante un evento di musica elettronica fai-da-te. I clip sorgente sono tutti elementi visivi astratti ad alta risoluzione in formato .mov, circa 4 GB ciascuno. Sono di varie proporzioni. Alcuni sono 4: 3, altri sono 16: 9, altri sono 1: 1 (quadrati) ecc.

Vorrei ritagliare / ridimensionare tutte le clip su 1024x768 mantenendo le rispettive proporzioni originali. E, vorrei farlo senza letterbox e lasciare le barre nere in alto / in basso o a sinistra / a destra. Fondamentalmente quello che vorrei fare è ridurli al punto in cui riempiono interamente lo schermo 1024x768, e non di dimensioni inferiori. Credo che sia essenzialmente una tecnica di "pan and scan"?

(Non importa se parte dell'immagine viene rimossa nel processo - stanno solo ruotando forme geometriche e simili.)

C'è un modo per ridimensionare tutti i ~ 120 video in batch usando un singolo comando FFMPEG? Oppure esiste un altro strumento per Windows o Linux che funzioni? Non mi interessa davvero quale formato di output - solo qualcosa che VLC può riprodurre senza diventare instabile.

Risposte:


3

Se avessi solo video 4: 3 e 16: 9, suggerirei:

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

Ciò ridimensionerebbe un video ad un'altezza di 768, ridimensionando la larghezza per mantenere le proporzioni; e poi ritaglia la larghezza a 1024, mantenendo l'altezza a 768. Il fatto che tu stia utilizzando anche video 1: 1 complica le cose: un video 3000x3000 verrebbe ridimensionato a 768x768, e quindi ffmpeg proverebbe a ritagliarlo a 1024x768, che ovviamente non funzionerebbe, poiché le colture non possono essere più grandi dell'input ...

L'unico modo in cui riesco a pensare di farlo funzionare sarebbe quello di ritagliare tutti i video, che hai dichiarato non sarebbe un problema. Ciò ritaglia la larghezza di uscita in modo che sia uguale all'altezza di input e l'altezza di output sia 3/4 dell'altezza di input; e quindi ridimensionerà il video fino a un'altezza di 768, mantenendo le proporzioni con la larghezza:

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

Funzionerà solo se i file originali hanno un'altezza di 1024 o più. Si noti che x264 accetta solo una larghezza o un'altezza pari, il che può causare problemi (ma non dovrebbe in questo caso).

Per convertire ogni .mov in una directory, puoi usare un ciclo 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

Per farlo in modo ricorsivo, puoi usare 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}"' {} \;

Tutto ciò richiederà una versione recente di ffmpeg.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.