it-swarm-es.com

Miniaturas de videos en múltiples formatos?

Tengo algunos videos de entrenamiento de intranet realizados a lo largo de los años en un montón de formatos (AVI, WMV, MOV, RealPlayer) y me gustaría proporcionar algo así como una función de vista previa: tal vez un GIF animado en miniatura con algunas pantallas representativas, o tal vez una miniatura hoja Puedo mostrarle al usuario una imagen cada pocos segundos de video. ¿Existe una herramienta de imagen fácil que pueda usar que pueda crear tales cosas?

La agnóstico de la plataforma sería excelente, pero es única (por ahora, jaja), por lo que Windows, Mac o Linux estarían bien. Gracias.

4
artlung

Simplemente pensé que esto debería hacerse fácilmente en python y una búsqueda en Google de "miniatura de video python" da como resultado este sitio:

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

Puede probar el código agrio proporcionado allí ...

3
mbrochh

No se puede perder el santo grial de los sistemas de video, FFMPEG. Hace casi todo lo que pueda necesitar en un video en línea: tome múltiples formatos y convierta a otro, miniatura, etc. Una variación industrial muy modificada de FFMPEG es lo que le permite a YouTube trabajar de la manera que lo hace.

Aquí hay una línea de comando rápida para miniaturas: http://blog.prashanthellina.com/2008/03/29/creating-video-thumbnails-using-ffmpeg/

Hay muchas otras ventajas por todas sus otras características.

2
bpeterson76

Ya he respondido cómo hacer esto en Stack Overflow aquí usando ffmpeg y PHP.

Perdón por la respuesta centrada en el código, pero hacer esto en un proceso por lotes se hace más fácilmente escribiendo algún código real.

/**
* 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";
        }
    }
}

No hay mucho más multiplataforma que eso.

Aquí hay un desglose de las banderas:

  • -su indicador de desplazamiento es el tiempo en el video que se toma la instantánea
  • -vcodec es el tipo de salida (cambiar a png para png, etc.)
  • -vframes se establece en uno porque extrae solo un cuadro (es decir, una imagen)
  • es posible que también deba agregar -deinterlace

Eso es todo. No es mucho más fácil que eso. Si está haciendo múltiples capturas de pantalla para una película, simplemente cambie el indicador -itsoffset. Aparte de eso, es un paquete completo a menos que elija agregar mejor información de error o suprimir las salidas.

1
Evan Plaice

Creo que Flowplayer (Está muy bien documentado y con muchos ejemplos) o algo similar es una mejor solución como un fragmento que quizás tenga que editar o mantener.

Una vez que FlowPlayer está configurado correctamente, puede servir los pulgares sin cargar el video completo. Es un poco complicado configurar esto, pero una vez que funciona, tiene una solución sólida y multiplataforma. (Y con un clic en el pulgar se reproduce el video ;-))

Si elige flowplayer, también debería echar un vistazo a video4all (usa html5 con flowplayer como reserva) y flowplayer-plugins .

0
fwaechter