【问题标题】:Extracting JPG Image From MP4 Video从 MP4 视频中提取 JPG 图像
【发布时间】:2015-03-17 16:16:17
【问题描述】:

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

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

}

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

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

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

【问题讨论】:

  • 这是您域/网络上的文件夹吗..?如果是这样,您有网络管理员吗?这可能是一个政策问题,
  • 这是在我们自己的私人服务器上。我们网站所在的同一台服务器。 ffmpeg 位于 C 文件夹中。我不相信。我们拥有服务器的所有管理员权限。
  • 谁管理服务器.. 我确信该服务器上有一些策略设置,并且可能有关于上传/保存到文件夹的文件数量的策略,如果那台机器认为它受到了攻击..在我看来,许可不只是改变自己..这可能是逐个用户的意思,对某些人有效,但对其他人无效..?您如何设置权限是基于登录还是组..AD、IIS_USERS 等...
  • 我们使用 SessionID 作为标识。服务器在我们的服务器机房中。我只保存一个视频并保存一个图像。我将与网络管理员交谈,以确保他无法想到任何事情。
  • 如果要查找文件,需要在-i之前输入-ss参数。否则它将解码文件而不是搜索,直到时间戳达到您的值。你在浪费资源。

标签: c# asp.net ffmpeg


【解决方案1】:
  1. 使用完后尝试在 thumbproc 上调用 Dispose
  2. 尝试使用锁:

    lock (_aStaticObject)    
    {    
      //All the code above    
    }
    

提醒一句,在 http 请求中使用锁可能会影响性能(您不能弄乱服务器的线程),这就是为什么这类事情属于工作的原因。

【讨论】:

  • Dispose 不起作用。我想我解决了。它那个愚蠢的 thumbproc.WaitForExit();基本上 WaitForExit 告诉 Windows 只要程序需要就可以等待。
  • 很高兴您找到了解决方法,但我认为这不会解决您的问题的根本原因。真正的问题是,为什么等待退出没有返回?
猜你喜欢
  • 2012-10-30
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多