» it.Riprodurre Files Video
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

it.Riprodurre Files Video

English | Russian

Usare il nodo FileStream

Il nodo FileStream (DShow9) riproduce i seguenti formati video (ammesso che codecs necessari siano installati):

  • .avi
  • .mov
  • .mpg
  • .rm
  • .wmv

Il pin Filename non può accette lo spreading, quindi può essere riprodotto un solo file alla volta.

VideoTexture

Ci sono due tipi di VideoTextures

Questo è il più semplice; funziona con versioni di WindowsXp precedenti al ServicePack2.

Funziona solo con installazioni di WindowsXP dal ServicePack2 in poi. Rende possibile il deinterlacciamento di alcuni video, e potrebbe essere più veloce in alcune situazioni.

Ora c'è anche il plugin VLC.

Riproduzione di Quicktime

Per riprodurre files Quicktime con vvvv è necessario installare quicktime alternative 1.81. Questa versione di Quicktime Alternative è stata l'ultima ad includere anche i filtri DirectShow; nelle versioni successive sono stati rimossi per motivi legali. Questo può significare che codecs quicktime rilasciati dopo il 2007 (la data del rilascio di qt-alternative 1.81) potrebbero non funzionare.

Sono stati rilasciati successivamente:

In questa pagina su wikipedia, in inglese, si possono trovare altre informazioni.
Note bene: non ho ancora testato queste releases. Se avete delle segnalazioni da fare, postatele qui, per favore - h99

Per riprodurre files .amr è necessario installare il Plugin Quicktime di MediaLooks (e vvvv > beta13.1).

Dovrebbe anche essere possibile usare il plugin QTSource per AviSynth.

AviSynth

Vedere elektromeier-AVSAVIJoiner. Serve ad unire più filmati tramite uno script. Serve questo pacchetto: AVS AVI Joiner.

Passare da un video all'altro durante una performance

Si può passare da un video ad un altro senza interruzioni connettendo un nodo  Switch (String) al pin Filename di un nodo FileStream (DShow9). Così si può ottenere una transizione morbida tra due video, e funziona anche con i codecs Mjpeg e Xvid.

Se si connette solo un IOBox (String), senza lo  Switch (String) prima di FileStream (DShow9), il filamto non verrà riprodotto, proprio perché Filestream non supporta lo spreading, accetta cioè un solo filename alla volta. Si può anche usare un nodo  GetSlice (String). Un altro sistema può essere quello di generare un unico video ed impostare più punti da cui farlo riprodurre.

Un metodo ancora: usare AVI-Synth come suggerito qui.

Che fare se il video scatta o si ferma durante la riproduzione a schermo intero?

Questo succede quando la CPU lavora molto vicino al 100%.
La riproduzione di video DirectShow ha una priorità di default molto bassa in Windows, così che se qualche processo consuma molte risorse, il video è il primo a risentirne, ed altrettanto naturalmente, quando si lavora con grafica in tempo reale, indipendentemente dalla GPU, anche la CPU viene messa a dura prova.
Impostando il pin WaitForFrame si può far sì che vvvv attenda che Windows abbia un po' di risorse per riprodurre il frame successivo. Il valore in questo pin è misurato in millisecondi: così se il video gira a 25 fps, ogni frame avrà durata di 40 ms. Diventa così sensato aspettare 40 ms prima di inviare il prossimo frame.

In alternativa si può generare un nodo  MainLoop(VVVV) ed abbassare il valore di 'foreground fps'. Tenete presente che di solito ha senso far combaciare i framerates del rendering e del filmato, ma se la patch consuma un sacco di risorse, c'è ben poco da fare.

Video Loop

Per far girare un video in loop, oltre ad attivare la funzione dal pin Loop, devono essere inseriti nuovi valori per i pins Start Time ed End Time, di default a 0. Sarà quindi possibile fare il loop di tutto il filmato, o solo di una parte.

Come evitare che il video salti mentre esegue il loop

Se al momento di far ripartire da capo il video al punto scelto, la riproduzione si ferma per un istante si può:

  • usare dei codecs che sono ottimizzati per l'accesso casuale. Il migliore ancora oggi sembra essere il Motion Jpg (.mpeg)
  • aumentare il framerate del video se si usano altri codecs.

Il nodo FileStream produce un flusso continuo di dati dal disco, il che succhia un bel po' di risorse; si deve dire inoltre che l'architettura multimediale di Windows non è stata esattamente progettata per un uso creativo dei video. La strategia migliore potrebbe essere quella di evitare il formato .avi del tutto.

Usare una sequenza di fotogrammi

Per generare una sequenza di fotogrammi basterà generare uno spread di textures. Rimane consigliabile convertire le immagini in .dds, il formato delle texture per DirectX. La conversione può essere effettuata usando questo tool per vvvv; Qui trovate anche dei links per applicazioni esterne.
Un workflow potrebbe essere questo: generate un nodo Dir (File) e collegate il suo outlet con il nodo FileTexture (EX9.Texture); ora collegate il suo output pin ad un nodo Getslice (Node). Cambiando il valore del pin Index di GetSlice, ad esempio con FrameCounter (Animation), o Counter (Animation) o un nodo + in combo con un FrameDelay (Animation), azionerete la riproduzione dei files in ordine alfabetico. Tenete presente che l'azione di GetSlice è diretta alle textures, e non ai filenames.
Nel caso che le textures siano in piccola quantità e/o di piccole dimensioni - il concetto di piccolo in questo caso assume forme diverse, e molto, in relazione all'hardware che usate; potrebbe essere utile quindi "tenere in ordine" il disco rigido, nel caso non siate passati/e ad un SSD - di solito non ci sono grossi problemi.
Raramente le cose vanno così lisce, comunque: si può avere un lag minimo, con un buco nero o un immagine bloccata per una frazione di secondo, oppure trovarsi con un renderer inchiodato per alcuni, interminabili secondi.
vvvv cerca di ottimizzare la memoria in uso liberandola dalle textures che in quel momento non sono visibili: naturalmente possiamo chiedergli di non liberare questo spazio e di mantenere le immagini caricate e pronte all'uso grazie al modulo Preloader (EX9.Texture). Consultate la HelpPatch per capire a fondo come funzioni.

Se usate la release beta27 e nel renderer non compare niente, sostituite nel pin Input2 del nodo Add (String) la stringa girlpower\images con lib\assets\images.
Nel passaggio tra beta26 e beta27 è stata semplificata la struttura della cartella che contiene vvvv, ed all'aggiornamento delle directories è sfuggita questa HelpPatch.
Nelle releases alpha27, e quindi nelle future beta, questo problema è stato risolto.

Usate Memory (Debug DX9) per avere un'idea del consumo di memoria della vostra scheda video; qui e qui troverete dettagli direttamente da MS su msdn; cercate anche su google AGP Aperture Size.
Potrebbe anche accadere che saturata la RAM della scheda video e del sistema, Windows cominci ad usare lo swapping - con le conseguenze che potete facilmente immaginare. In generale, il led dell'harddisk non si dovrebbe accendere durante ed a causa del loop.

Usare immagini composte, "tiled images"

Se si hanno, ad esempio, 64 fotogrammi molto piccoli è possibile usare un vecchio trucco da programmatore di videogiochi, per ottenere ancora più velocità: sistemate tutti i frame in una griglia 8x8 in un'unica texture (se le immagini sono già piccole fate attenzione a non ridurle ulteriormente). Usate  GridSplit (2d) ed un nodo  Transform (2d) per calcolare la trasformazione di una texture basando le coordinate sul frame attuale.  GridSplit (2d) consente di impostare griglie di qualsiasi dimensione e suddivisione - per comprendere ancora meglio di cosa si tratti aprite la sua Helppatch.
Sia questo che il metodo descritto sopra consentono di riprodurre video con differenti posizioni dei fotogrammi su molti oggetti - cosa che potrebbe risultare non proprio soddisfacente usando più nodi Filestream.

Pre-caricare un filmato

Può essere usato un nodo  Queue (EX9.Texture) per pre-caricare un .avi.

 FileStream -> VideoTexture -> Queue -> GetSlice

Ora riproducete il file impostate su 1 il pin Insert; al termine del filmato impostate su zero ((pin:Insert). A questo punto Queue (EX9.texture) dovrebbe essere pieno di textures da poter sfruttare modificando il pin Index di GetSlice .

Naturalmente tutto quello che caricate dentro Queue finisce direttamente nella memoria video.

In una nota del 2010 joreg fa notare come Queue (Texture) funzioni solo con schede video ATI, a causa di certi bugs nei driver Nvidia - leggi l'articolo in inglese.

Nel Forum ci sono un paio di thread interessanti: video preload e VVVV hangs / framerate jumps when changing textures.

Frames al secondo (FPS) e Riproduzione

  1. la riproduzione di un video può essere fluida quando il framerate del monitor è un multiplo di quello del video, o pari: 75 hz o 50 hz di frequenza di aggiornamento con filmati a 25 fps, ad esempio.
  2. quando si riproduce un filmato lasciate Maximum foreground fps su 120 perché ridurrete il framerate complessivo attraverso Wait for every Nth frame del nodo VideoTexture. Anche impostare Time Mode su Filtered può essere una buona idea - di solito dà fastidio solo mentre si costruisce la patch.
  3. assicuratevi (ancora prima di aver generato il nodo VideoTexture, dato che non appena è presente nella patch comincia già ad influenzare il tutto) che il framerate della scena sia superiore a quello del video. Se non è così, non sarà possibile riprodurre in maniera fluida il filmato.
  4. guardate Wait for every Nth frame da questo punto di vista:
    • se il Vs. video gira a 25 fps ed il monitor a 50 hz, allora vorrete che il motore di rendering attenda (Wait) un frame video ogni secondo frame che riproduce sullo schermo per la scena 3d.
    • se il Vs. video gira a 25 fps ed il monitor a 75 hz, allora vorrete che il motore di rendering attenda un frame video ogni terzo frame della scena 3d.
    • se il Vs. video gira a 50 fps (come un video PAL deinterlacciato) ed il monitor a 50 hz, allora vorrete che l'attesa duri un singolo frame.

anonymous user login

Shoutbox

~9h ago

Urbankind: circuitb:Wrongcop is epic! :)

~9h ago

joreg: @tobi: use GetSlice() as the patch i referred you to is demonstrating. or start a forum thread with your patch.

~10h ago

TobiTobsen123: hmm yes i can see the values...but how to handle them as seperate values? I need to forward them via TCP/IP...

~11h ago

joreg: @tobi: OSCDecoder helppatch has a section: OSC_Advanced (bottomright) that demoes decoding of multiple messages

~12h ago

TobiTobsen123: I'm using an OSCDecoder, it receives two arguments...works but how can I seperate the arguments into two seperate values

~14h ago

u7angel: @mediadog, make it a forum question.

~14h ago

u7angel: @mediadog, tty renderer ?

~16h ago

microdee: however non-conductive objects are invisible for this so the pencil and the sticks in the video are still a mysteries