2017-09-27 6 views
0

Je dois créer un script FFMPEG qui lit dans un fichier audio ("testloop.wav" dans cet exemple) génère une vidéo à partir de la forme d'onde utilisant le filtre "showcqt", puis recadre et superpose la sortie de celle-ci pour générer un effet kaléidoscope. C'est le code que j'ai jusqu'ici - la génération de la vidéo intial et la section de sortie fonctionnent correctement, mais il y a un défaut dans la section split, crop et overlay que je ne peux pas tracer.Comment saisir un fichier audio, générer une vidéo, diviser, recadrer et superposer pour produire un effet kaléidoscope

ffmpeg -i "testloop.wav" -i "testloop.wav" \ 
-filter_complex "[0:a]showcqt,format=yuv420p[v]" -map "[v]" \ 
     "split [tmp1][tmp2]; \ 
     [tmp1] crop=iw:(ih/3)*2:0:0, pad=0:ih+ih/2 [top]; \ 
     [tmp2] crop=iw:ih/3:0:(ih/3)*2, hflip [bottom]; \ 
     [top][bottom] overlay=0:(H/3)*2"\ 
-map 1:a:0 -codec:v libx264 -crf 21 -bf 2 -flags +cgop -pix_fmt yuv420p -codec:a aac -strict -2 -b:a 384k -r:a 48000 -movflags faststart "${i%.wav}.mp4 

Répondre

0

Vous ne pouvez pas diviser ou définir plusieurs filter_complex es. En outre, pas besoin de nourrir l'entrée deux fois.

ffmpeg -i "testloop.wav" \ 
-filter_complex "[0:a]showcqt,format=yuv420p, \ 
     split [tmp1][tmp2]; \ 
     [tmp1] crop=iw:(ih/3)*2:0:0, pad=0:ih+ih/2 [top]; \ 
     [tmp2] crop=iw:ih/3:0:(ih/3)*2, hflip [bottom]; \ 
     [top][bottom] overlay=0:(H/3)*2"\ 
-c:v libx264 -crf 21 -bf 2 -flags +cgop -pix_fmt yuv420p \ 
-c:a aac -strict -2 -b:a 384k -ar 48000 -movflags +faststart out.mp4 

(je ne suis pas la logique de débogage de l'effet que vous essayez d'atteindre. Seule la syntaxe)