我正在使用这一小段代码来创建上传到我网站的视频缩略图:
public static void GetThumbnail(string video, string thumbnail)
{
var cmd = "ffmpeg -itsoffset -1 -i " + '"' + video + '"' + " -vcodec mjpeg -vframes 1 -an -f rawvideo -s 320x240 " + '"' + thumbnail + '"';
var startInfo = new ProcessStartInfo
{
WindowStyle = ProcessWindowStyle.Hidden,
FileName = "cmd.exe",
Arguments = "/C " + cmd
};
var process = new Process
{
StartInfo = startInfo
};
process.Start();
}
我正在异步上传一个视频。第一个视频缩略图创建得很好,但每个后续的缩略图都没有创建。我注意到,如果我尝试从文件系统中删除后续视频,它会说它无法删除它们,因为ffmpeg正在使用它们。我可以删除完成处理的第一个就好了。我必须从任务管理器中杀死所有其他正在保持打开状态的ffmpeg进程。为什么ffmpeg只在第一次工作,然后在开放的过程中保持视频打开?
我还尝试从命令提示符一次创建一个多个缩略图,并且工作正常(该过程也不会保持打开状态)。
我的c#代码中缺少什么来确保流程完成,然后终止?
答案 0 :(得分:0)
DOH!对我来说真的很蠢。我为每个缩略图使用相同的文件名,命令行中出现了一个对话框,询问我是否要覆盖现有的拇指图像。
当我将文件名更改为动态创建时,一切都很好。