【问题标题】:Combine audio and video files with FFMPEG in C#在 C# 中使用 FFMPEG 合并音频和视频文件
【发布时间】:2019-05-04 04:39:52
【问题描述】:

我目前正在尝试在我的 C# 程序中使用 FFMPEG 和以下代码合并两个文件,一个音频和一个视频:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.FileName = "ffmpeg.exe";
startInfo.Arguments = "ffmpeg -i video.mp4 -i mic.wav -c:v copy -map 0:v:0 -map 1:a:0 -c:a aac -b:a 192k output.mp4";
using (Process exeProcess = Process.Start(startInfo))
{
    exeProcess.WaitForExit();
}

我的调试文件夹是这样设置的:

所以我没有收到任何运行时错误,但是,它只是没有创建我需要的最终 output.mp4 文件。

【问题讨论】:

  • 运行 ffmpeg 命令时命令提示符中显示什么?
  • 我没有机会看到它。它只是弹出然后关闭
  • 但是,如果我只在命令提示符中运行命令,它会执行合并。
  • 哦,要保持 Cmd 提示打开,请指定 /k 开关。我认为您可能需要 CD(又名更改目录)-我看到您在调试文件夹中有 ffmpeg.exe-所以它看起来不错。我们最终将得到的是将 ffmpeg 中的标准输出读入 C# 以诊断根本原因。见这里mathewsachin.github.io/blog/2017/07/28/ffmpeg-pipe-csharp.html
  • 把我的目录改成什么?

标签: c# audio video ffmpeg


【解决方案1】:

由于某些原因,TermSpar 给出的答案对我根本不起作用,对我有用的代码:

ProcessStartInfo startInfo = new()
{
    CreateNoWindow = false,
    FileName = @"C:\Users\User\Documents\ffmpeg.exe",
    UseShellExecute = false,
    RedirectStandardOutput = true,
    RedirectStandardError = true,
    Arguments = string.Format(" -i {0} -i {1} -shortest {2} -y", @"C:\images\video.avi", @"C:\images\voice.wav", @"C:\images\result.avi")
};

using Process exeProcess = Process.Start(startInfo);

//debug
string StdOutVideo = exeProcess.StandardOutput.ReadToEnd();
string StdErrVideo = exeProcess.StandardError.ReadToEnd();
//

exeProcess.WaitForExit();
exeProcess.Close();

【讨论】:

    【解决方案2】:

    我最终通过以下方式解决了这个问题:

    string args = "/c ffmpeg -i \"video.mp4\" -i \"mic.wav\" -shortest outPutFile.mp4";
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.CreateNoWindow = false;
    startInfo.FileName = "cmd.exe";
    startInfo.WorkingDirectory = @"" + outputPath;
    startInfo.Arguments = args;
    using Process exeProcess = Process.Start(startInfo)
    
    exeProcess.WaitForExit();
    

    【讨论】:

    • 对参数中的参数多试几次。就像我说的,我在 SU 线程中链接到了一些很好的例子。 -c:v copy -map 0:v:0 -map 1:a:0 -c:a aac -b:a 192k 实际上很重要。见这里:stackoverflow.com/a/36324719/495455
    • 嘿@BenCompSci,我使用了您的代码,它生成了 .mp4 文件,但它根本不使用 .wav 文件中的音频,它仍然具有相同的音频并且少了一点大小比输入视频,这对你有用吗?我的情况可能是什么问题?我下载了 ffmpeg.exe 文件并将其放在 Debug 文件夹中。
    • 没关系,最终使用了它,它就像一个魅力 ""/c ffmpeg -i video.mp4 -i audio.mp3 -map 0:0 -map 1:0 -shortest 输出。 mp4""
    • 是的,对我来说,我必须使用命令提示符通过将 FFMPEG 添加到路径来运行命令
    猜你喜欢
    • 1970-01-01
    • 2018-02-07
    • 2013-05-22
    • 1970-01-01
    • 2020-11-21
    • 2019-11-20
    • 2022-10-25
    • 2018-12-22
    相关资源
    最近更新 更多