0

我的任务是每天晚上对一堆 GoToMeeting 视频文件进行转码。视频转码后,将上传到网站。然而,在我深入这个项目之前,我想弄清楚这是否可能。

我当前的示例脚本是一个简单的批处理文件,我可以在其中将多个文件拖放到批处理文件中。它将转码第一个文件,显示输出,然后继续对第二个文件进行转码。这是我正在寻找的预期行为。

@echo off
C:\g2mtranscoder.exe source=%~1
echo %~1 has completed.
C:\g2mtranscoder.exe source=%~2
echo %~2 has completed.
C:\g2mtranscoder.exe source=%~3
echo %~3 has completed.
C:\g2mtranscoder.exe source=%~4
echo %~4 has completed.
pause

我的问题是,如果在 C# 中(最终将成为 Windows 服务),是否像调用外部程序g2mtranscoder.exe进行转码然后将我的上传脚本放在后面一样简单?显然,我不想上传当前正在转码的视频,也不想在没有先转码的情况下上传视频。

我的子问题是将它放在一个循环中(对于目录中的每个文件)如果目录的内容只是待转码的待处理视频,会导致任何问题吗?如果在循环中,它会尝试循环并开始异步地对目录中的所有文件进行转码,还是会更加同步?我想避免循环异步发生,因为它可能会使机器过载,从而导致音频/视频时序出现伪影或同步问题。最重要的是,无法上传正在转码的视频或未转码的视频。

任何对此的编码建议都会很棒,但我真的希望更多地了解 C# 如何与代码执行一起工作,并在执行的 C# 代码中间调用一个外部程序。

我更喜欢 Ruby/Rails 和 Linux 人员,并且在 C# 方面没有太多经验。我知道足够危险,但只是想确保我想做的事情是可行的。

4

1 回答 1

0

我想到了。我可以创建一个进程,然后使用 HasExited 标志等待进程完成。完成后,我可以继续上传程序。成功退出的HasExited值为 ,0而失败的退出值为1-1

StartInfo.Arguments将允许我传入source=<location of GTM video>处理视频文件。

Console.WriteLine("Running");
Process pr = new Process();
pr.StartInfo.FileName = "Notepad.exe";
pr.StartInfo.Arguments = "test.dat";
pr.Start();
while (pr.HasExited == false)
    if ((DateTime.Now.Second % 5) == 0)
    { // Show a tick every five seconds.
        Console.Write(".");
        System.Threading.Thread.Sleep(1000);
    }
于 2013-07-28T13:52:11.910 回答