it-swarm.it

Miniature per video in più formati?

Ho alcuni video di formazione intranet realizzati nel corso degli anni in un sacco di formati (AVI, WMV, MOV, RealPlayer) e vorrei fornire qualcosa come una funzione di anteprima - forse una GIF animata in miniatura con alcune schermate rappresentative o forse una miniatura foglio posso mostrare all'utente con un'immagine ogni pochi secondi di video. Esiste un semplice strumento di immagine che posso usare per creare cose del genere?

La piattaforma agnostica sarebbe fantastica, ma è una tantum (per ora, ahah), quindi Windows, Mac o Linux andrebbero bene. Grazie.

4
artlung

Ho appena pensato che questo dovrebbe essere fatto facilmente in python e una ricerca su Google per i risultati "anteprima video python" in questo sito:

http://notbrainsurgery.livejournal.com/29773.html

Potresti provare il codice sorgente fornito lì ...

3
mbrochh

Non può mancare il santo graal dei sistemi video, FFMPEG. Fa praticamente tutto ciò di cui potresti aver bisogno nei video online: prendi in più formati e converti in un altro, miniature, ecc. Una variazione industriale fortemente modificata di FFMPEG è ciò che consente a YouTube di funzionare nel modo in cui funziona.

Ecco un breve tutorial da linea di comando per l'anteprima: http://blog.prashanthellina.com/2008/03/29/creating-video-thumbnails-using-ffmpeg/

Ci sono molti altri tutorial là fuori per tutte le altre funzionalità.

2
bpeterson76

Ho già risposto come fare su Stack Overflow qui usando ffmpeg e PHP.

Mi dispiace per la risposta incentrata sul codice, ma farlo in un processo batch è più facile scrivendo un codice reale.

/**
* ExtractThumb, extracts a thumbnail from a video
*
* This function loads a video and extracts an image from a frame 4 
* seconds into the clip
* @param $in string the input path to the video being processed
* @param $out string the path where the output image is saved
*/
function ExtractThumb($in, $out)
{
    $thumb_stdout;
    $errors;
    $retval = 0;

    // Delete the file if it already exists
    if (file_exists($out)) { unlink($out); }

    // Use ffmpeg to generate a thumbnail from the movie
    $cmd = "ffmpeg -itsoffset -4 -i $in -vcodec mjpeg -vframes 1 -an -f rawvideo -s 320x240 $out 2>&1";
    exec($cmd, $thumb_stdout, $retval);

    // Queue up the error for processing
    if ($retval != 0) { $errors[] = "FFMPEG thumbnail generation failed"; }

    if (!empty($thumb_stdout))
    {
        foreach ($thumb_stdout as $line)
        {
            echo $line . "\n";
        }
    }

    if (!empty($errors))
    {
        foreach ($errors as $error)
        {
            echo $error . "\n";
        }
    }
}

Non c'è molto più multipiattaforma di quello.

Ecco una ripartizione delle bandiere:

  • -itsoffset flag è il tempo nel video in cui viene scattata l'istantanea
  • -vcodec è il tipo di output (cambia in png per png, ecc ...)
  • -vframes è impostato su uno perché stai estraendo solo un fotogramma (IE un'immagine)
  • potrebbe anche essere necessario aggiungere -deinterlace

Questo è tutto. Non è molto più facile di così. Se stai facendo più screenshot per un film, modifica il flag -itsoffset. Oltre a ciò, è un pacchetto completo a meno che non si scelga di aggiungere informazioni di errore migliori o di eliminare gli output.

1
Evan Plaice

Penso che Flowplayer (È molto ben documentato e con molti esempi) o qualcosa di simile è una soluzione migliore come frammento che potresti dover modificare o mantenere.

Una volta configurato correttamente FlowPlayer, può servire pollici senza caricare l'intero video. Configurarlo è un po 'complicato, ma una volta che hai funzionato hai una soluzione solida e multipiattaforma. (E con un clic sul pollice il video viene riprodotto ;-))

Se scegli flowplayer, dovresti anche dare un'occhiata a video4all (usa html5 con flowplayer come fallback) e flowplayer-plugins .

0
fwaechter