Modo di lavorare per fare video da immagini in C #

Qualcuno ha un modo sicuro e conosciuto per creare un video da una serie di file immagine? Prima di modificarmi per non cercare la risposta prima di pubblicare la domanda, e prima di sparare un messaggio semplice come “usa FFMPEG”, leggi il resto di questo messaggio.

Sto provando a creare un video, non importa troppo quale formato fintanto che è ampiamente supportato, da una serie di immagini (.jpg, .bmp, ecc.). La mia piattaforma è Windows Server 2008, 64 bit. Se riesco a realizzare il video dal mio programma C #, è grandioso, ma non sono contrario a scrivere una serie di file di immagine in una directory e poi a sparare a un programma esterno per realizzare un video da quelle immagini.

Gli unici vincoli sono: deve funzionare sul mio sistema Windows Server 2008 ed essere programmabile tramite script. Cioè, nessun programma GUI che richiede l’intervento dell’operatore.

Ho trovato una serie di domande simili su StackOverflow e ho provato diverse soluzioni, tutte con diversi gradi di frustrazione e nessuna con qualcosa come il successo.

FFMPEG sembra un ottimo programma. Forse lo è, su Linux. Le due build di Windows che ho scaricato sono rotte. Data questa riga di comando:

ffmpeg -r 1 -f image2 -i jpeg\*.jpg video.avi 

Una delle build legge le immagini e poi si blocca a causa della prevenzione dell’esecuzione dei dati. L’altro legge il primo file e poi sputa un messaggio di errore che dice “Imansible trovare il codec adatto per il file jpeg / image2.jpg”. Utile, quello. In ogni caso, FFMPEG sembra un non-starter sotto Windows.

Una risposta a un post precedente raccomandata Splicer . Sembra un codice abbastanza buono. Ho compilato gli esempi e ho cercato di eseguire, ma ho ricevuto un messaggio di errore criptico su un file non trovato. Sembra che una class COM non sia registrata. Suppongo di dover installare qualcosa (DirectShow, forse, anche se pensavo che fosse già installato?). A seconda di cosa è richiesto, potrei avere difficoltà a giustificare la sua installazione su un server. (“Cosa? Perché ne hai bisogno su un server?”)

Un’altra risposta ha suggerito la libreria AviFile di Code Project. Sembra abbastanza semplice: un wrapper attorno al sottosistema Windows AviFile. Tranne che i file AVI creati dal pacchetto sembrano avere tutti i frame, ma solo il primo frame viene mostrato quando riproduco l’AVI in Windows Media Player. Bene, questo e se si tenta di creare un video compresso, il programma genera un’eccezione.

Quindi, mi chiedo se c’è un modo valido e affidabile per fare ciò che voglio: su un sistema Windows, creare un AVI o un altro formato di file video comune da una serie di immagini, tramite un’API .NET o utilizzando un programma esterno. Qualsiasi aiuto?

Dopo averci lavorato un po ‘per dare un’occhiata a x264 e VideoLan, sono tornato a Splicer. Si scopre che il messaggio di errore criptico era dovuto a un errore nel mio codice.

Sembra che Splicer farà ciò che voglio: creare a livello di programmazione video da una serie di immagini.

Grazie a tutti quelli che hanno risposto.

Puoi usare VideoLan e lo consiglierei.

Ho avuto esperienza diretta in un’applicazione C # con VideoLan che fa queste due cose:

  1. Incorporamento di un visualizzatore VLC nella mia applicazione C # (ci sono 3-4 wrapper C # “per il VLC veiwer).
  2. Utilizzando vlc.exe in un processo separato inviandogli argomenti da riga di comando.

Il fatto che VideoLan abbia un’interfaccia a riga di comando è una grande cosa. E VLC supporta un’opzione della riga di comando che disabilita qualsiasi elemento visivo; quindi la GUI VLC non compare e nemmeno una finestra della riga di comando. Pertanto, in un’applicazione C # è ansible generare il lavoro relativo al video sul client VLC. C # ha la class Process che può gestire le istanze di vlc.exe per te. Finisce per essere una soluzione abbastanza carina.

La gestione dei video su Windows (codifica e riproduzione) è un vero e proprio pantano. E .NET non ti aiuterà affatto: avrai sempre API native PInvoking / COM-Interoping o un wrapper .NET che qualcun altro ha creato per fare lo stesso.

Ad ogni modo, non posso dire di averlo usato, ma una buona scommessa sembra essere la libreria x264 che fa parte del progetto videolan . Questo ti dà una libreria C autonoma che puoi usare PInvoke e non devi preoccuparti di installare e spazzatura DirectShow sul tuo server. Produrrà video in formato H.264 che è riproducibile in Flash come lo comprendo.

Ho usato mencoder mencoder per creare AVI (con i codec msmpeg4 / mp3, leggibili di default con Windows Media Player) dai file TGA su Linux come questo:

 mencoder mf://*.tga -mf fps=25:type=tga \ -audiofile /tmp/test.mp3 -oac copy \ -of lavf -ovc lavc \ -lavcopts vcodec=msmpeg4v2:mbd=2:mv0:trell:cbp:last_pred=3:vbitrate=3000 \ -o /tmp/test.avi 

So che mplayer ha una versione per Windows.

Invece di affrontare tutti i problemi, potresti coppare tutte le immagini che vuoi includere nel tuo video negli appunti e importarlo in Windows Live Movie Maker (in modo dinamico, ovviamente!) E farlo compilare per te!

Tutto ciò può essere fatto attraverso il codice, ma in questo modo non è necessario crearlo da solo. Come hai detto che la piattaforma era Windows, e TUTTE le comp Windows hanno installato Windows Live Movie Maker, quindi non dovrebbe essere un problema per chiunque usi la tua applicazione a meno che

a) Hanno disinstallato Windows Live Movie Maker

b) Stanno usando un computer in esecuzione su una versione Windows di più di 8 o 9 anni …