从MP4视频中提取JPG图像

时间:2015-03-17 16:16:17

标签: c# asp.net ffmpeg

我使用以下方法从上传的视频中提取图像并将图像放入文件夹中。

    private string GeneratePreviewImageMP4(string FileName, HttpPostedFile file, string ProperPath)
{
    string inputfile = System.IO.Path.Combine(Server.MapPath(ProperPath), file.FileName);
    string ext = System.IO.Path.GetExtension(FileName);
    string thumbpath = AppDomain.CurrentDomain.BaseDirectory + "Reports\\TrainingLibrary\\Videothumbnails\\";
    string thumbname = thumbpath + FileName.Replace(ext, "") + ".jpg";
    string thumbargs = "-i " + inputfile + " -ss 00:00:25.435 -qscale:v 2 -vframes 1 " + thumbname;
    Process thumbproc = new Process();
    thumbproc.StartInfo.FileName = "C:\\FFMPEG\\Bin\\ffmpeg.exe";
    thumbproc.StartInfo.Arguments = thumbargs;
    thumbproc.StartInfo.UseShellExecute = false;
    thumbproc.StartInfo.CreateNoWindow = false;
    thumbproc.StartInfo.RedirectStandardOutput = false;
    try
    {
        thumbproc.Start();
    }
    catch (Exception ex)
    {
        Response.Write(ex.Message);
    }
    thumbproc.WaitForExit();
    thumbproc.Close();

    return FileName.Replace(ext, ".jpg");

}

问题是,一旦提取图像,我就会被锁定在文件夹之外。没有机构拥有该文件夹的管理员权限。我们必须重新启动服务器才能恢复对该文件夹的访问权限。

这只是在某些时候,大部分时间都很好,但十分之一会有问题。

现在有人为什么会这样?它是否播放视频以提取图像,但不会停止视频?

1 个答案:

答案 0 :(得分:0)

  1. 使用完毕后尝试在thumbproc上调用Dispose
  2. 尝试使用锁定:

    lock (_aStaticObject)    
    {    
      //All the code above    
    }
    
  3. 警告一句,在http请求中使用锁定可能对性能不利(你不应该破坏服务器的线程),这就是为什么这类东西属于一个工作。