2

我正在尝试使用 C# 中的 FFMPEG 从视频文件中剥离音频。我知道执行此类操作的代码是什么(据我所知),但我不能 100% 确定需要将 ffmpe.exe 文件保存在项目中的什么位置以及如何访问它。到目前为止,我的代码如下:

public void stripAudioTest(string videoFilename, ExportProgressWindow callback, string destinationAudioFile)
    {
        string FFMPEG_PATH = "*************"; //not sure what to put here??????



        string strParam = " -i " + videoFileName + " -ab 160k -ar 44100 -f wav -vn " +   destinationAudioFile;
        process(FFMPEG_PATH, strParam);
        callback.Increment(100);


    }

    public void process(string Path_FFMPEG, string strParam)
    {
        try
        {
            Process ffmpeg = new Process();

            ffmpeg.StartInfo.UseShellExecute = false;
            ffmpeg.StartInfo.RedirectStandardOutput = true;
            ffmpeg.StartInfo.FileName = Path_FFMPEG;
            ffmpeg.StartInfo.Arguments = strParam;

            ffmpeg.Start();

            ffmpeg.WaitForExit();

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }`

如果有人有任何想法,请告诉我。什么都有帮助!

4

2 回答 2

3

您可以使用任何您想要的绝对或相对路径。

但我建议不要使用相对路径,以防“当前目录”发生变化。

在 WinForms 下,您可以使用 ExecutablePath 并将 exe 放入您自己的 Bin 文件夹中。

 // winforms
 string FFMPEG_PATH = Path.Combine(
      Path.GetDirectoryName( Application.ExecutablePath), 
      "ffmpeg.exe");

对于控制台应用程序,我找不到如此简单的方法来获取 Exe 路径。

于 2012-06-26T16:03:04.563 回答
0

您可以将 ffmpeg.exe 目录添加到您的解决方案中。将其设置Build ActionContent并设置Copy to Output DirectoryCopy always

在此处输入图像描述

现在这将确保它与可执行文件一起存在于您的 bin 目录中。然后,您可以像这样修改您的方法:

    public void stripAudioTest(string videoFilename, ExportProgressWindow callback, string destinationAudioFile)
    {
        var appDirectory = Path.GetDirectoryName(Application.ExecutablePath);
        var FFMPEG_PATH = Path.Combine(appDirectory, "ffmpeg.exe");
        if (!File.Exists(FFMPEG_PATH))
        {
            MessageBox.Show("Cannot find ffmpeg.exe.");
            return;
        }

        string strParam = " -i " + videoFilename + " -ab 160k -ar 44100 -f wav -vn " + destinationAudioFile;
        process(FFMPEG_PATH, strParam);
        callback.Increment(100);
    }
于 2012-06-26T16:18:02.203 回答