c# - 从 MP4 视频中提取 JPG 图像

标签 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");

}

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

这只是在某些时候,大多数时候效果很好,但十分之一会出现问题。

任何人现在为什么会发生这种情况?它是否播放视频以提取图像,但不停止视频?

最佳答案

  • 使用完后尝试在 thumbproc 上调用 Dispose
  • 尝试使用锁:
    lock (_aStaticObject)    
    {    
      //All the code above    
    }
    

  • 警告一句,在 http 请求中使用锁可能会降低性能(您不应弄乱服务器的线程),这就是为什么这种事情属于工作的原因。

    关于c# - 从 MP4 视频中提取 JPG 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29104296/

    相关文章:

    c# - 修改原始 DataSource 不会更新 ComboBox

    c# - 如何添加到列表的第一个位置?

    asp.net - ASP.NET MVC 3 Helpers 中的 Tab 键顺序

    asp.net - 当未提供路由名称时,使用 RouteLink 生成 url 的方法是什么?

    javascript - fluent-ffmpeg 视频有拉伸(stretch)图像

    ffmpeg-mp4box-mpeg dash 只播放几个片段

    c# - 如何从字符串转换日期时间

    c# - 从 Windows 窗体拖放到桌面和 Windows 资源管理器

    asp.net - 使用 SquishIt 在母版页和 View 页面中组合 CSS 和 JS

    python - 如何使用子进程缩小视频,然后将数据传输到标准输出并使用 ffplay 播放并保存