2009-03-13 12 views
27

Ho quello che sembra dovrebbe essere un problema molto semplice, ma si sta dimostrando molto più difficile di quanto mi aspettassi. Ecco il problema:Trasforma sequenza di immagini in video con trasparenza

Ho una sequenza di immagini abbastanza grande composta da frame numerati (uscita da Maya, per quello che vale). Le immagini sono attualmente in formato Targa (.tga), ma potrei convertirle in PNG o altri formati arbitrari se questo è importante. L'importante è che abbiano un canale alfa.

Quello che voglio fare è programmaticamente trasformarli in un video. Il formato non ha molta importanza, ma deve essere privo di perdite e avere un canale alfa. Il video non compresso in un contenitore Quicktime sarebbe probabilmente l'ideale.

Il mio pensiero iniziale era ffmpeg, ma dopo aver sprecato la maggior parte di un giorno su di esso sembra non avere alcun supporto per i canali alfa. O mi manca qualcosa, oppure il sottostante libavcodec non lo fa.

Quindi, qual è il modo giusto qui? Uno strumento da riga di comando come ffmpeg sarebbe bello, ma qualsiasi soluzione che gira su Windows e potrebbe essere chiamata da uno script andrebbe bene.

Nota: avere un chanel alfa nel video non è in realtà raro, ed è davvero utile se si desidera comporlo sopra un altro video o un'immagine fissa. Per quanto ne so, i codec Quicktime Animation e il codec Sorenson Video 3 supportano tutti i video non compressi e ho sentito anche H.264. Tutto ciò di cui stiamo parlando è l'intensità del colore a 32 bit, ed è ampiamente supportato; sia i file .mov Quicktime che i file .avi di Windows possono gestirli, e probabilmente anche molto di più.

Quicktime Pro è più che felice di trasformare una sequenza di immagini in un file .mov a 32 bit. Esegui l'esportazione, cambia la profondità del colore in "Milioni di colori +", seleziona il codec Animazione, aumenta la qualità fino a 100, e ci sei - video compresso senza perdita di dati, con un chanel alfa, e verrà riprodotto quasi ovunque dal codec è stato parte di Quicktime dalla versione 1.0. Il problema è che Quicktime Pro non ha alcun tipo di interfaccia a riga di comando (almeno su Windows). ffmpeg supporta la codifica usando il codec Quicktime Animation (che chiama qtrle), ma supporta solo un bit di profondità di 24 bit.

Il problema non è trovare un formato video che supporti un canale alfa. Quicktime Animation sarebbe l'ideale, ma anche i video non compressi dovrebbero funzionare. Il problema è trovare uno strumento che lo supporti.

+1

Cosa vuoi che succeda con il canale alfa? Il video dovrebbe essere trasparente in alcuni punti? (Non conosco alcun formato che supporti ciò) o dovrebbe mostrare il fotogramma precedente? – Greg

+0

Sono d'accordo con RoBerg, non ho incontrato e formati video che fanno questo. Potrebbe essere necessario rotolare il tuo. –

+0

Giusto, dovrebbe essere trasparente, quindi se lo hai sovrapposto a un'immagine di sfondo puoi vedere lo sfondo. Ho aggiunto più informazioni a riguardo alla domanda. –

risposta

-1

Cody,

È possibile scrivere il proprio utility a riga di comando utilizzando il Quicktime SDK for Windows, mi sento di raccomandare attaccare con il più alto livello di apis Quicktime COM e solo scavare nel C-API se si hanno veramente a.

-Nick

25

Sì ffmpeg fa certamente sostenere canale alfa in un file video. Non tutti i codec in ffmpeg sembrano supportare alpha eppure. Il movimento PNG in un file .MOV è una buona combinazione per l'alfa.

per codificare le immagini/importazione con alfa per un video con l'alfa prova: ffmpeg -i %d.png -vcodec png z.mov

Quicktime che giocherà.

Per decodificare/esportare un video con alfa per le immagini con l'alfa prova: ffmpeg -i z.mov -f image2 export2\%d.png

Nota che li ho esportato in una directory chiamata 'Export2'. Assicurati di lasciare le parti% d lì.Questi comandi funzioneranno come avviene su un sistema Windows. Gli utenti Linux/Mac potrebbero aver bisogno di aggiungere delle virgolette e scambiare alcuni \ per/come al solito.

12

So che questo argomento è un po 'vecchio, ma mi distacco comunque.

FFMPEG con animazione Quicktime (RLE) o FFVHUFF/HUFFYUV.

  • ffmpeg -i yoursequence% d.png -vcodec qtrle movie_with_alpha.mov
  • ffmpeg -i yoursequence% d.png -vcodec ffvhuff movie_with_alpha.avi
  • ffmpeg -i yoursequence% d.png -vcodec huffyuv movie_with_alpha.avi

Otterrete i file video con trasparenza (canale alfa) conservati.

Ho anche sentito variazione On2-VP6 (non ancora WebM-VP8) in grado di gestire alfa, ma non ho il loro codec a portata di mano.

Anche questo funziona. - ffmpeg -i yoursequence% d.png -vcodec png movie_with_alpha.mov

+0

Troppo RLE e YUV producono file enormi. VP6 per FLV produce file molto più piccoli. Peccato che non ci sia un encoder vp6a gratuito. In effetti, l'unico codificatore VP6 che ho trovato è in Media Encoder di Adobe. – rustyx

+0

RLE e YUV utilizzati quasi esclusivamente come file modificabile intermedio o file sorgente della trasmittente. Suppongo che si possa lavorare con questi per modificare e quindi convertire in un formato più piccolo disponibile (ad esempio FLV) quando il lavoro è finalizzato e pronto per la pubblicazione. – satoc

3

per gli sviluppatori web che raggiungono questa domanda e sbattere la testa contro il muro per la frustrazione ... E 'possibile creare un transparent WebM video, ma al momento si potrebbe è necessario compilare ffmpeg e le librerie richieste dal sorgente.

Volevo visualizzare un video Blender renderizzato in un sito Web, ma preservare la trasparenza. Il primo passo è stato rendere l'output di Blender come singoli file PNG. Dopo di ciò, ho passato un po 'di tempo a cercare di forzare ffmpeg per convertire quei file PNG in un singolo video. Il comando di base è semplice:

ffmpeg -i input%04d.png output.webm 

Questo comando carica tutti PNG con i nomi dei file input0000.png attraverso input9999.png e li trasforma in un video. La trasparenza è stata prontamente persa. Pettinatura attraverso l'uscita ho realizzato ffmpeg stato utilmente selezionando un formato non trasparente:

Incompatible pixel format 'yuva420p' for codec 'flv', auto-selecting format 'yuv420p'

A questo punto ero realizzando avrei potuto ricompilare ffmpeg da zero. Ho faticato con alcuni altri strumenti, ma alla fine sono tornato con ffmpeg. Dopo aver compilato libvbx e ffmpeg dall'ultima fonte, le cose hanno funzionato.

Problemi correlati