gpt4 book ai didi

c# - 如何检查ffmpeg何时完成任务?

转载 作者:行者123 更新时间:2023-12-04 23:25:31 25 4
gpt4 key购买 nike

几个小时前我只是在学习如何使用 ffmpeg 生成视频缩略图。

这些是一些结果:

1

2

我使用了与 Youtube 相同的尺寸(宽 - 高)。每张图片最多包含 25 个缩略图 (5x5),尺寸为 160x90。

一切看起来都很好,直到:

public async Task GetVideoThumbnailsAsync(string videoPath, string videoId)
{
byte thumbnailWidth = 160;
byte thumbnailHeight = 90;

string fps = "1/2";

videoPath = Path.Combine(_environment.WebRootPath, videoPath);

string videoThumbnailsPath = Path.Combine(_environment.WebRootPath, $"assets/images/video_thumbnails/{videoId}");
string outputImagePath = Path.Combine(videoThumbnailsPath, "item_%d.jpg");

Directory.CreateDirectory(videoThumbnailsPath);

using (var ffmpeg = new Process())
{
ffmpeg.StartInfo.Arguments = $" -i {videoPath} -vf fps={fps} -s {thumbnailWidth}x{thumbnailHeight} {outputImagePath}";
ffmpeg.StartInfo.FileName = Path.Combine(_environment.ContentRootPath, "FFmpeg/ffmpeg.exe");
ffmpeg.Start();
}

await Task.Delay(3000);

await GenerateThumbnailsAsync(videoThumbnailsPath, videoId);
}

我遇到了问题:
await Task.Delay(3000);

当我学习使用ffmpeg的方法时,他们没有提到它。几个小时失败后,我注意到:

mp4 视频(1 分 31 秒 - 1.93Mb)需要大约 1000 毫秒的延迟时间。另外,一个 mp4 视频(1 分 49 秒 - 7.25Mb)需要一些延迟时间 ~3000 毫秒。

如果我不使用 Task.Delay并尝试立即获取所有文件,它将返回 0(目录中没有文件)。

另外,每个与其他文件长度不同的文件都需要不同的延迟时间。我不知道如何计算。

我的问题是:如何检查任务何时完成?

P/s:我不是说和javascript有关,而是在js中,有一个东西叫 Promise :
var promise = new Promise(function (done) {
var todo = function () {
done();
};

todo();
});

promise.then(function () {
console.log('DONE...');
});

我想像这样编辑代码。

谢谢!

最佳答案

如果您想同步执行此操作,则可以调用 ffmpeg.WaitForExit(),这将导致该行等待该过程完成。否则,您需要启动一个任务才能在后台运行它。 C# 任务有点类似于 JavaScript 中的 Promise。

This answer can also be used for details on how to wrap WaitForExit so that you can use it with an await

关于c# - 如何检查ffmpeg何时完成任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50535416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com