Como não existem componentes grátis para essa função, teremos que improvisar, usando um programa externo, para isso você vai precisar alterar a segurança da pasta. Mas veremos isso mais para frente. Vamos aproveitar para fazer o sistema completo, desde o upload do arquivo.

Iniciando o exemplo

Com o Visual Studio aberto, crie um novo Web Form, com o nome que preferir. Aqui vamos usar EnviarVideo.aspx:

gspcthuvidfig01.jpg
Figura 1. Criando aplicação

Agora, abra a Toolbox, arraste um controle File Upload, Button (ou Link Button, como você preferir) e uma Label.

gspcthuvidfig02.jpg
Figura 2. Inserindo componentes

Com um duplo clique no objeto Button ele irá criar a ação.

Preencha conforme a Listagem 1:


01 - protected void Button1_Click(object sender, EventArgs e)
02 - {
03 -     if (FileUpload1.HasFile)
04 -     {
05 -         string arq_tipo = FileUpload1.FileName.Remove(0, FileUpload1.FileName.Length - 3);
06 -         if (arq_tipo.ToString() == "wmv")
07 -         {
08 -             string video = Server.MapPath("upload/") + "nome_do_video.wmv";
09 -             string imagem = Server.MapPath("upload/") + "nome_da_imagem.jpg";
10 -             FileUpload1.SaveAs(video);
11 -         }
12 -     }
13 - }
Listagem 01. Enviando vídeo

Para quem já estiver familiarizado com o C# será simples entender, mas vamos explicar por partes.

Linha 03: Verificamos se tem o arquivo foi escolhido.

Linhas 05 e 06: pegamos a extensão do arquivo e verificamos sé um vídeo.

Linha 08 e 09: indicam o nome e a pasta dos arquivos a serem salvos (vídeo e imagem, respectivamente).

Linha 10: o vídeo é salvo.

A primeira parte, o upload está pronta. Vamos agora ao que realmente interessa, como tirar uma thumbnail de um arquivo de vídeo.

Para isso vamos usar um programa chamado FFMPEG, segue o aplicativo junto com o material fonte (você também pode encontra-lo no Google).

Coloque ele numa pasta chamada ffmpeg, dentro da mesma pasta da página que estamos criando a página que vai executar o programa. Nessas duas pastas você deve dar autorização para Ler, Gravar e Executar.

Depois da linha 10, vamos incluir conforme a Listagem 02:


01 - string executavel = Server.MapPath("ffmpeg/ffmpeg.exe");
02 - string parametros = " -y -i " + video + " -vframes 1 -ss 00:00:03 -an -vcodec 
      mjpeg -f rawvideo " + imagem;
03 - System.Diagnostics.Process.Start(@executavel, parametros);
Listagem 2. Configurando captura de imagem

Veja o que foi feito:

Linha 01: informamos o local do arquivo executável.

Linha 02: definimos os parâmetros para execução do programa. Existem vários parâmetros, mas vou comentar apenas os mais importantes:

  • -i video = definimos o arquivo de vídeo que fizemos o upload.
  • -ss 00:00:03 = momento em que a thumbnail será tirada, no caso aos 3 segundos.
  • imgem = local onde a imagem será sava, que definimos antes.
  • você pode encontrar mais parâmetros e formatar da forma que preferir, se fizer alguma melhora, divida com os demais d=).

Depois, vamos informar ao usuário que o arquivo foi salvo:


01 - Label1.Text = "Vídeo enviado!";

O código final ficará igual a Listagem 03:


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class EnviarVideo : System.Web.UI.Page
{
 protected void Page_Load(object sender, EventArgs e)
 {

 }
 protected void Button1_Click(object sender, EventArgs e)
 {
 if (FileUpload1.HasFile)
 {
   string arq_tipo = FileUpload1.FileName.Remove(0, FileUpload1.FileName.Length - 3);
   if (arq_tipo.ToString() == "wmv")
   {
     string video = Server.MapPath("upload/") + "nome_do_video.wmv";
     string imagem = Server.MapPath("upload/") + "nome_da_imagem.jpg";

     FileUpload1.SaveAs(video);

     string executavel = Server.MapPath("ffmpeg/ffmpeg.exe");
     string parametros = " -y -i " + video + " -vframes 1 -ss 00:00:03 -an -vcodec mjpeg -f rawvideo " + imagem;
     System.Diagnostics.Process.Start(@executavel, parametros);

     Label1.Text = "Vídeo enviado!";
   }
  }
 }
}
Listagem 03. Código completo

Lembrem-se de colocar as permissões nas pastas, mas atenção, preferencialmente crie uma pasta separada e use autenticação pois essas permissões vão diminuir a segurança da sua aplicação.

gspcthuvidfig03.jpg