C# 如何用C语言从一系列剧照中创建MP4视频#

C# 如何用C语言从一系列剧照中创建MP4视频#,c#,C#,我试图写一个快速的程序,从图像创建延时视频,但我找不到任何库或其他方法来做到这一点。我将输入一系列图像,然后程序将它们合并成具有我指定的帧速率和大小(宽度/高度而不是文件大小)的视频。图像在大多数情况下都相当大(来自佳能DSLR的3456x2304),我希望它能够以MP4格式输出与图像大小相同的视频,而不是其他格式 基本上,这与QuickTime Pro所做的完全一样,你给它一组静像,然后它以你指定的帧速率从中创建视频……不,我不想买QuickTime。我有用户界面,我只需要一种从图像创建视频的

我试图写一个快速的程序,从图像创建延时视频,但我找不到任何库或其他方法来做到这一点。我将输入一系列图像,然后程序将它们合并成具有我指定的帧速率和大小(宽度/高度而不是文件大小)的视频。图像在大多数情况下都相当大(来自佳能DSLR的3456x2304),我希望它能够以MP4格式输出与图像大小相同的视频,而不是其他格式

基本上,这与QuickTime Pro所做的完全一样,你给它一组静像,然后它以你指定的帧速率从中创建视频……不,我不想买QuickTime。我有用户界面,我只需要一种从图像创建视频的方法,我可以做什么/使用什么(只有免费的东西)?谢谢。

您可以通过以下方式完成此操作:

帧速率

从一系列数字顺序图像(如img001.png、img002.png、img003.png等)创建视频(使用编码器libx264)

重要提示:系列中的所有图像都需要具有相同的大小和格式

您可以指定两种帧速率:

  • 通过在之前设置-r读取图像的速率 -一,。读取输入的默认值为-r 25,如果未指定-r,则将设置该值
  • 通过设置视频流的输出帧速率 -r在-i之后,或使用fps过滤器。如果希望输入和输出帧速率相同,那么只需声明一个输入-r和 输出将继承相同的值
通过对输入和输出使用单独的-r(每秒帧数),可以控制每个输入显示的持续时间,并告诉ffmpeg输出文件所需的帧速率。如果输入-r低于输出-r,则ffmpeg将复制帧以达到所需的输出帧速率。如果输入-r高于输出-r,则ffmpeg将丢弃帧以达到所需的输出帧速率

在本例中,每个图像的持续时间为5秒(与每秒1/5帧的持续时间相反)。通过相应地复制帧,视频流将具有30 fps的帧速率:

ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
知道要使用的命令行后,可以在c#中启动它,如下所示:

if (File.Exists(outputFile))
    File.Delete(outputFile);

var info = new ProcessStartInfo(exePath, yourParams);
info.CreateNoWindow = true;
info.WindowStyle = ProcessWindowStyle.Hidden;
info.UseShellExecute = false;
info.RedirectStandardError = true;
info.RedirectStandardOutput = true;

using (var proc = Process.Start(info))
    proc.WaitForExit();