在c#项目中使用FFmpeg

本文关键字:FFmpeg 项目 | 更新日期: 2023-09-27 18:07:04

我正在尝试用c#创建一个桌面直播应用程序。该程序必须在Windows下运行,并从用户的桌面流图像到rtmp。还必须有帧率,视频大小,质量和编解码器(h263和h264)的选项。我认为FFmpeg是最好的选择(如果不是,请写评论)。我已经设法做了我上面提到的所有使用控制台的ffmpeg.exe。所以我想知道,我可以包括FFmpeg库到c#项目(作为。lib或。dll)使用它而不是。exe,为我的任务保存合适的功能吗?我将非常感谢任何例子。

注:下面是我使用的一些命令示例:

ffmpeg -f dshow -i video=UScreenCapture -vcodec h264 -pix_fmt yuv420p -s 320x240 -f flv rtmp://[my adr]/desc
ffmpeg -f dshow -i video=UScreenCapture -vcodec h264 -r 15 -t 0:1:00 -q 12 -pix_fmt yuv420p -s 320x240 -f flv rtmp://[my adr]/desc

在c#项目中使用FFmpeg

这是我的示例,希望对您有所帮助

你可以这样使用。exe文件:

ffmpeg.StartInfo.UseShellExecute = false;
ffmpeg.StartInfo.RedirectStandardOutput = true;
ffmpeg.StartInfo.FileName = Server.MapPath("~/Video_Clips/ffmpeg.exe");
ffmpeg.StartInfo.Arguments = String.Format(@"-i ""{0}"" -threads 8 -f webm -aspect 16:9 -vcodec libvpx -deinterlace -g 120 -level 216 -profile 0 -qmax 42 -qmin 10 -rc_buf_aggressivity 0.95 -vb 2M -acodec libvorbis -aq 90 -ac 2 ""{1}""",
                                           Server.MapPath("~/Video_Clips/" + sNameWithoutExtension + ".wmv"),
                                           Server.MapPath("~/Video_Clips/" + sNameWithoutExtension + ".webm"));
ffmpeg.Start();
ffmpeg.WaitForExit();

我知道这是一个有点旧的线程,但如果我到这里其他人也看到这个。您不应该使用它的进程信息来启动ffmpeg。这与它有很大关系。使用任何包装即可。我犯了这个错误,浪费了我将近一年的生命……在Xabe。你可以只运行

await Conversion.New().Start(@"-i ""{0}"" -threads 8 -f webm -aspect 16:9 -vcodec libvpx -deinterlace -g 120 -level 216 -profile 0 -qmax 42 -qmin 10 -rc_buf_aggressivity 0.95 -vb 2M -acodec libvorbis -aq 90 -ac 2 ""{1}");

但这只是一个基本的用法,因为它提供了流畅的API来使用FFmpeg