desenv-web-rp.com

Miniaturas para vídeos em vários formatos?

Eu tenho alguns vídeos de treinamento na intranet feitos ao longo dos anos em vários formatos (AVI, WMV, MOV, RealPlayer) e gostaria de fornecer algo como uma função de visualização - talvez um GIF animado em miniatura com algumas telas representativas ou talvez uma miniatura folha, posso mostrar ao usuário uma imagem a cada poucos segundos de vídeo. Existe uma ferramenta de imagem fácil que eu possa usar que possa criar essas coisas?

O agnóstico de plataforma seria ótimo, mas é único (por enquanto, haha); portanto, Windows, Mac ou Linux seria bom. Obrigado.

4
artlung

Eu apenas pensei que isso deveria ser feito facilmente em python e uma pesquisa no Google por resultados de "miniatura de vídeo python" neste site:

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

Você pode tentar o código fonte fornecido lá ...

3
mbrochh

Não pode perder o Santo Graal dos sistemas de vídeo, FFMPEG. Ele faz praticamente tudo o que você precisa no vídeo on-line - assuma vários formatos e converta para outro, miniatura, etc. Uma variação industrial fortemente modificada do FFMPEG é o que permite ao YouTube funcionar da maneira que funciona.

Aqui está um rápido tutorial de linha de comando para miniaturas: http://blog.prashanthellina.com/2008/03/29/creating-video-thumbnails-using-ffmpeg/

Existem muitos outros detalhes por todos os seus outros recursos.

2
bpeterson76

Eu já respondi como fazer isso no Stack Overflow aqui usando ffmpeg e PHP.

Desculpe a resposta centrada no código, mas fazer isso em um processo em lote é mais fácil de se escrever um 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";
        }
    }
}

Não é muito mais multiplataforma do que isso.

Aqui está um detalhamento das bandeiras:

  • -itsoffset é o tempo no vídeo em que o instantâneo é tirado
  • -vcodec é o tipo de saída (altere para png para png, etc ...)
  • -vframes é definido como um porque você está extraindo apenas um quadro (ou seja, uma imagem)
  • você também pode precisar adicionar -deinterlace

É sobre isso. Não fica muito mais fácil do que isso. Se você estiver fazendo várias capturas de tela para um filme, altere o sinalizador -itsoffset. Fora isso, é um pacote completo, a menos que você escolha adicionar informações de erro melhores ou suprimir saídas.

1
Evan Plaice

Eu acho que Flowplayer (É muito bom documentado e com muitos exemplos) ou algo semelhante é uma solução melhor como um snippet que talvez você precise editar ou manter.

Depois de configurado corretamente, o FlowPlayer pode ser útil sem carregar o vídeo completo. É um pouco complicado de configurar isso, mas uma vez que é trabalho, você tem uma solução sólida e multiplataforma. (E com um clique no polegar, o vídeo é reproduzido ;-))

Se você escolher o flowplayer, também deverá dar uma olhada em video4all (usa html5 com flowplayer como fallback) e em flowplayer-plugins .

0
fwaechter