gpt4 book ai didi

c# - 如何在Windows Azure上调用ffmpeg.exe转换音频文件?

转载 作者:太空狗 更新时间:2023-10-29 19:57:24 26 4
gpt4 key购买 nike

我在 Windows Azure 上运行 Web 角色来接收 AAC 音频文件(通过 base64 字符串上传)并将其存储到 blob 中。现在效果很好。

接下来,我还必须将它们转换为 MP3 并将 MP3 存储到 blob 中。我决定使用诸如 ffmpeg.exe -i path.aac path.mp3 之类的东西。

问题在于:

  1. 如何在网络角色的网络服务内调用外部 ffmpeg.exe
  2. 路径是什么?

知道的请帮帮我。预先感谢您。

最佳答案

我建议您使用Local Storage Resource对于您的网络角色,您可以从 blob 存储下载 AAC 文件,并将它们转换为 MP3。然后上传回 Blob 存储。

旁注是,您还可以使用 Path.GetTempFileName()为您的 AAC/MP3 文件获取临时文件名,但我不鼓励这样做(即使我以前这样做过)。

对于实际运行的 ffmpeg,您可能需要浏览 AzureVideoConv 的代码,这是我不久前构建的。您会在那里找到很多有用的代码。

以下是实际 ffmpeg 调用的示例(请注意,我从 blob 存储下载 exe,以避免外部 exe 文件使我的 azure 包膨胀,并在需要时轻松更新 ffmpeg.exe):

        internal void ConvertFile(string inputFileName, Guid taskID)
{
string tmpName = string.Format(
"{0}\\{1}.flv",
Path.GetTempPath(), inputFileName.Substring(inputFileName.LastIndexOf("\\")+1));
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = this._processorExecutable;
psi.Arguments = string.Format(@"-i ""{0}"" -y ""{1}""", inputFileName, tmpName);
psi.CreateNoWindow = true;
psi.ErrorDialog = false;
psi.UseShellExecute = false;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.RedirectStandardOutput = true;
psi.RedirectStandardInput = false;
psi.RedirectStandardError = true;
try
{
// Start the process with the info we specified.
// Call WaitForExit and then the using statement will close.
using (Process exeProcess = Process.Start(psi))
{
exeProcess.PriorityClass = ProcessPriorityClass.High;
string outString = string.Empty;
// use ansynchronous reading for at least one of the streams
// to avoid deadlock
exeProcess.OutputDataReceived += (s, e) => {
outString += e.Data;
};
exeProcess.BeginOutputReadLine();
// now read the StandardError stream to the end
// this will cause our main thread to wait for the
// stream to close (which is when ffmpeg quits)
string errString = exeProcess.StandardError.ReadToEnd();
Trace.WriteLine(outString);
Trace.TraceError(errString);
byte[] fileBytes = File.ReadAllBytes(tmpName);
if (fileBytes.Length > 0)
{
this._sSystem.SaveOutputFile(
fileBytes,
tmpName.Substring(tmpName.LastIndexOf("\\")+1),
taskID
);
}
}
}
catch (Exception e)
{
Trace.TraceError(e.Message);
}
}

注意项目的最后一次 checkin 使用的是 Windows Azure SDK 1.3

关于c# - 如何在Windows Azure上调用ffmpeg.exe转换音频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8725946/

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