在 C# 中使用 FFMPEG 合并音频和视频文件
Posted
技术标签:
【中文标题】在 C# 中使用 FFMPEG 合并音频和视频文件【英文标题】:Combine audio and video files with FFMPEG in C# 【发布时间】: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 把我的目录改成什么? 【参考方案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
实际上很重要。见这里:***.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 添加到路径来运行命令以上是关于在 C# 中使用 FFMPEG 合并音频和视频文件的主要内容,如果未能解决你的问题,请参考以下文章