Ho lavorato a un progetto video per un po' e alla fine mi sono imbattuto in un muro VLC . VLC è il migliore lettore video. Può anche essere utilizzato come strumento di generazione video, ma presenta alcune stranezze relative all'FPS dei file di output. Ho deciso di ri-investigare FFmpeg in sostituzione. Avevo usato FFmpeg molto tempo fa, senza leggere davvero tutti i documenti e ricordavo che era complicato. Beh, lo è. Ho passato oggi a leggere i documenti. È uno strumento a riga di comando con tonnellate di documenti (vedi link) . L'ho messo insieme come prova di concetto. C'è molto di più che può fare.
Il seguente JSL consiste in una funzione definita dall'utente che genera immagini per una sequenza video e una chiamata RunProgram che esegue FFmpeg per creare un video. A FFmpeg viene detto di ottenere le immagini tramite stdin e RunProgram le fornisce chiamando la funzione definita dall'utente. L'ho eseguito solo su Windows, ma credo che ci vorranno solo alcune piccole modifiche per farlo funzionare anche su Mac.
Per eseguirlo, dovrai scaricare FFmpeg. Il loro sito web punta a un altro sito da cui puoi ottenerlo. Non sono sicuro del motivo per cui non hanno una versione ufficiale di Windows. Una volta installato, questo script verrà eseguito in circa 30 secondi per creare un video di 8 secondi, quindi aprire il video nel lettore predefinito. Sembrerà migliore in VLC, oppure puoi caricarlo su YouTube e vederlo così:
Leggi il roba legale attentamente se hai intenzione di fare un lavoro commerciale con esso.
// generate images for ffmpeg stdin on the fly to make a video
// using https://ffmpeg.org/download.html#build-windows
//
// You could make a somewhat simpler version, maybe, by writing
// the files to disk and telling ffmpeg to re-read them. I wanted
// to use the stdin pipe, and didn't try a file. I hope this pipe is
// at least as fast as writing and reading the files.
//
// you can't make a 2nd, parallel stream of audio data using RunProgram,
// so you'll need a disk file for audio. Or http as shown...
outputmp4 = ConvertFilePath("$desktop/VideoMadeByJMPandFFMPEG.mp4", "windows");
nrows = 1080 / 2;// keep the image buffer even in both dimensions
ncols = 1920 / 2;// and maybe a multiple of 16 as well
Open Log( 1 ); // where the action is (may need this window open for the text box to work)
imagex = J( nrows, ncols, RGB Color( 1, 1, 1 ) ); // buffer of JSL color values, updated by getNextImage...
// credit the CC music...write this once, into the buffer
musicCredit = Text Box(
"\!"Pump Sting\!" Kevin MacLeod (incompetech.com)
Licensed under Creative Commons: By Attribution 4.0 License
http://creativecommons.org/licenses/by/4.0/
"||char(asdate(today())),
<<SETWRAP></SETWRAP>