gpt4 book ai didi

C# 和 FFmpeg 最好没有 shell 命令?

转载 作者:IT王子 更新时间:2023-10-29 04:41:09 24 4
gpt4 key购买 nike

我希望能够使用 FFmpeg 从我的 C# 程序中转换视频文件。我知道我可以调用 shell 命令,但是有更好的方法吗?

通过 shell 调用命令的问题是,我不确定您是否可以执行进度条等操作...或者您可以吗?

如果没有办法,谁能建议最好的方法来布局一些执行 shell 命令的框架。传递一个又大又长的字符串是非常麻烦的 atm。

最佳答案

如果运行 ffmpeg,您可以轻松实现进度条。 ffmpeg 运行时的输出是这样的:

frame= 3366 fps=465 q=31.0 Lsize=    6474kB time=140.35 bitrate= 377.9kbits/s

它每秒刷新两次。您可以解析该行并获取显示进度所需的数据。当你在命令行中运行时,你只会看到一行一直在更新,但 ffmpeg 所做的是写入该行后跟 \r。这就是为什么您看不到多行的原因。但是,在程序的错误输出上使用 StreamReader.ReadLine() 时,每次更新都会得到一行。

读取输出的示例代码如下。您将不得不忽略任何不以“frame”开头的行,也许使用 BeginErrorReadLine() + ErrorDataReceived如果你希望读取行是异步的等等,但你明白了(我已经实际测试过了):

using System;
using System.Diagnostics;
using System.IO;

class Test {
static void Main (string [] args)
{
Process proc = new Process ();
proc.StartInfo.FileName = "ffmpeg";
proc.StartInfo.Arguments = "-i " + args [0] + " " + args [1];
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;
if (!proc.Start ()) {
Console.WriteLine ("Error starting");
return;
}
StreamReader reader = proc.StandardError;
string line;
while ((line = reader.ReadLine ()) != null) {
Console.WriteLine (line);
}
proc.Close ();
}
}

关于C# 和 FFmpeg 最好没有 shell 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1707516/

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