C# 使用ffmpeg将图片保存为mp4视频

这篇具有很好参考价值的文章主要介绍了C# 使用ffmpeg将图片保存为mp4视频。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用 FFmpeg 这个强大的多媒体处理工具,可以轻松地将一系列图片转换为一个 MP4 视频文件。以下是一个基本的命令行示例来完成这个任务:

ffmpeg -framerate 25 -i image-%03d.jpg -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4

命令参数说明:

  • -framerate 25:设置输入图像序列的帧率,这里表示每秒25帧。
  • -i image-%03d.jpg:指定输入文件格式,这里的 %03d 是一个占位符,表示三位数字的索引(例如:image-001.jpg, image-002.jpg, ...)。FFmpeg 将按照这个模式查找并按顺序读取图片。
  • -c:v libx264:指定输出视频流使用 H.264 编码器 (libx264) 进行压缩。
  • -r 30:设置输出视频的帧率,这里是每秒30帧。
  • -pix_fmt yuv420p:指定输出视频的颜色像素格式为 YUV 4:2:0 Planar,这是一种广泛兼容的格式。
  • output.mp4:最终输出的 MP4 视频文件名。

如果图片文件名不是按照特定的数字序列表示,你需要根据实际情况调整 -i 参数后的文件名模板。同时,帧率等参数也应根据实际需求调整。如果源图片和目标视频有特殊的分辨率要求,还可以添加额外的参数比如 -s WIDTHxHEIGHT 来指定分辨率。

 文章来源地址https://www.toymoban.com/news/detail-859876.html

使用 C# 调用 FFmpeg 命令行来转换图片序列到 MP4 视频,下面是一个简单的示例:

using System.Diagnostics;

public class FfmpegWrapper
{

    /// <summary>
    /// 执行FFmpeg
    /// </summary>
    /// <param name="inputPattern">输入文件名模式</param>
    /// <param name="outputVideoPath">输出文件路径</param>
    /// <param name="frameRate">帧率</param>
    public static void ConvertImagesToMp4(string inputPattern, string outputVideoPath, int frameRateInput = 25, int frameRateOutput = 30)
    {
        // 构建 FFmpeg 命令行字符串
        string command = $"ffmpeg -framerate {frameRateInput} -i \"{inputPattern}\" -c:v libx264 -r {frameRateOutput} -pix_fmt yuv420p \"{outputVideoPath}\"";

        // 创建进程对象
        Process process = new Process();

        // 设置启动信息
        ProcessStartInfo startInfo = new ProcessStartInfo("ffmpeg")
        {
            Arguments = command,
            UseShellExecute = false,
            RedirectStandardError = true,
            RedirectStandardOutput = true,
            CreateNoWindow = true
        };

        // 将启动信息赋给进程对象
        process.StartInfo = startInfo;

        // 启动 FFmpeg 进程
        process.Start();

        // 如果需要,可以通过下面的方式获取错误输出或标准输出
        // string errorOutput = process.StandardError.ReadToEnd();
        // string standardOutput = process.StandardOutput.ReadToEnd();

        // 等待进程结束
        process.WaitForExit();

        // 检查退出代码以确认是否成功
        int exitCode = process.ExitCode;
        if (exitCode != 0)
        {
            throw new Exception($"FFmpeg exited with code {exitCode}");
        }
    }
}

// 使用示例:
FfmpegWrapper.ConvertImagesToMp4("image-%03d.jpg", "output.mp4");

请注意,上述代码假设 FFmpeg 可执行文件已经存在于系统的 PATH 环境变量中,否则你需要提供 FFmpeg 完整的路径到 ProcessStartInfo.FileName 中。

另外,如果你的应用场景复杂或者需要更深入的控制,可以考虑使用诸如 FFmpeg.AutoGen 这样的 .NET 绑定库来直接调用 FFmpeg 的 API 进行编程,而不是通过命令行接口。不过这通常涉及到更多的底层操作和对 FFmpeg 内部工作原理的理解。

 

%03d 表示三位数字索引

在某些编程上下文中,%03d 是一种格式化字符串的占位符表达方式,常见于 C、C++、Java、Python 等编程语言的 printf 风格的字符串格式化函数中。这里的 %03d 表示将一个整数格式化为至少占用三位宽度的十进制数字,不足三位时会在左边补零以达到固定宽度。

  • %d 表示整数;
  • 0 表示填充字符为零;
  • 3 表示最小宽度为3。

所以,如果你需要四位或五位的数字索引,相应的表达方式会是:

  • 四位数字索引:%04d,比如数字 1 将会被格式化为 "0001"
  • 五位数字索引:%05d,比如数字 1 将会被格式化为 "00001"

这样做的目的通常是保证输出的数字有固定的长度,便于对齐或其他形式上的统一处理。

 

在Windows环境下,假设FFmpeg可执行文件位于系统PATH环境变量中,可以直接在命令提示符窗口中运行上述命令。如果不是,则需要指定FFmpeg完整路径,例如:

"C:\path\to\ffmpeg.exe" -framerate 25 -i image-%03d.jpg -c:v libx264 -vf format=yuv420p -crf 23 -pix_fmt yuv420p output.mp4

 

如果 ffmpeg.exe 不在系统的环境变量 PATH 中,无法直接通过命令行调用,就需要提供它的完整路径。在这种情况下,应该将 FileName 属性设置为 ffmpeg.exe 的完整路径,例如:

string ffmpegFullPath = @"C:\Program Files\FFmpeg\bin\ffmpeg.exe";
process.StartInfo.FileName = ffmpegFullPath;

 

inputPattern 参数可以包含路径信息。在 FFmpeg 的命令行参数中,它可以是一个指向图片文件的完整路径或者相对路径。例如,如果你的图片位于某个目录下,你可以这样设置 inputPattern

string imagesFolderPath = @"C:\MyImages";
string inputPattern = $"{imagesFolderPath}\\image-%04d.jpg";
FfmpegHelper.ConvertImagesToVideo(inputPattern, "output.mp4", 25);

 

-c:v libx264 指定 FFmpeg 使用 H.264 视频编码器,这是非常常用的视频编码格式,因为它具有高效的压缩性能和广泛的设备支持。除了 libx264,FFmpeg 支持多种其他的视频编码器,例如:

  • libopenh264:OpenH264 编码器
  • libvpx-vp9:VP9 编码器
  • libaom-av1:AV1 编码器
  • mpeg4 或 libxvid:MPEG-4 Part 2 编码器
  • mpeg2video 或 libmpeg2: MPEG-2 编码器
  • libtheora:Theora 编码器
  • vp8 或 libvpx:VP8 编码器
  • hevc 或 libx265:H.265/HEVC 编码器

对于 -pix_fmt 参数,它是指定输出视频的像素格式(Pixel Format)。yuv420p 是一种常见的像素格式,尤其是对于 H.264 编码器,它是一种兼容性非常好的 YUV 4:2:0 Planar 格式。然而,FFmpeg 支持多种不同的像素格式,例如:

  • yuv422p
  • yuv444p
  • nv12
  • p010le(10位深度的YUV 4:2:0格式)
  • rgb24
  • rgba
  • gray (灰度图)

选择哪种像素格式取决于你的具体需求,包括编码效率、色彩精度、硬件加速支持等因素。例如,如果你需要更高色彩保真度,可能会选择 yuv444p 或 rgb 格式;而对于大多数视频流传输和存储应用,yuv420p 由于其较低的数据量而更为常见。

 

注意点:

  • 确保输入图片的宽度为偶数,可以通过调整图片尺寸或添加一个过滤器使其变为偶数。
  • 检查FFmpeg命令行参数,尤其是与编码相关的选项,如比特率、帧率、分辨率等,确保它们与目标编码器兼容。
  • 如果需要,可以尝试更新FFmpeg版本或者重新配置编解码器参数以适应特定需求。

 

所需dll下载请点击:

使用ffmpeg将图片保存为mp4视频所需dll的64位

 

到了这里,关于C# 使用ffmpeg将图片保存为mp4视频的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用ffmpeg将多个TS视频拼接成mp4视频

    点击下面网址下载对应版本安装 https://ffmpeg.org/download.html   下载好之后添加环境变量 添加成功之后在cmd窗口输入ffmpeg,显示如下结果则为成功  合并单个文件或者少量文件时,通过以下命令合并 多个ts视频可以编辑一个txt文档,file.txt 注意:这里必须是单引号,双引号会报错 进入

    2024年02月11日
    浏览(61)
  • FFmpeg将编码后数据保存成mp4

          以下测试代码实现的功能是:持续从内存块中获取原始数据,然后依次进行解码、编码、最后保存成mp4视频文件。       可保存成单个视频文件,也可指定每个视频文件的总帧数,保存多个视频文件。       为了便于查看和修改,这里将可独立的程序段存放在单个函

    2024年02月13日
    浏览(29)
  • 使用FFMPEG分离mp4/flv文件中的264视频和aac音频

    ffmpeg 4.4 一个MP4或flv格式的视频文件 大致分为以下几个简单步骤: 1.使用avformat_open_input 函数打开文件并初始化结构AVFormatContext 2.查找是否存在音频和视频信息 3.构建一个h264_mp4toannexb比特流的过滤器,用来给视频avpaket包添加头信息 4.打开2个输出文件(音频, 视频) 5.循环读

    2024年02月15日
    浏览(29)
  • 使用FFMPEG库封装264视频和acc音频数据到MP4文件中

    ffmepeg 4.4 一段H264的视频文件 一段acc格式的音频文件 1.使用avformat_open_input分别打开视频和音频文件,初始化其AVFormatContext,使用avformat_find_stream_info获取编码器基本信息 2.使用avformat_alloc_output_context2初始化输出的AVFormatContext结构 3.使用函数avformat_new_stream给输出的AVFormatContext结

    2024年02月11日
    浏览(34)
  • ffmpeg操作MP4视频封面

    提取视频封面 视频流中提取帧图 3.重新设置视频封面 更多参考: https://blog.csdn.net/m0_37624402/article/details/125123818

    2024年02月04日
    浏览(31)
  • windows使用ffmpeg将MP4转m3u8使用参数详解,视频添加水印和压缩

    目录 背景: 一、什么是m3u8: 二、为什么使用m3u8: 三、安装ffmpeg: 1、下载后直接解压: 2、配置环境变量: 四、开始转换m3u8: 五、视频添加水印和压缩: 1. 给视频加上水印图片 2.输出视频的尺寸 3.输出文件的起始文件 4.输出文件的最小大小 和 最大的大小(会影响视频质量

    2024年02月07日
    浏览(42)
  • 【音视频 ffmpeg 学习】 RTMP推流 mp4文件

    1.RTMP(实时消息传输协议)是Adobe 公司开发的一个基于TCP的应用层协议。 2.RTMP协议中基本的数据单元称为消息(Message)。 3.当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk)。 (1). linux 环境准备 安装nginx 和 rtmp模块 下载nginx安装包 下载

    2024年02月03日
    浏览(48)
  • 使用Python代码实现视频(如.MP4)与图片(如.jpg)文件格式的相互转换

    1.使用Python代码将视频文件(.MP4格式)转换为图片(.jpg格式) 对视频进行抽帧操作,将视频逐帧转换为图片(.jpg格式的图片的文件) 此处采取的方法是:对视频.MP4文件 每隔10帧截取一张.jpg格式的图片 需要使用的Python方法cv2在opencv-python库中,下载安装方式; 实现上述功能的

    2024年02月03日
    浏览(38)
  • 【音视频开发】FFmpeg转换与封装 I - MP4格式

    1 FFmpeg转换与封装 1.1 MP4格式转换 1.1.1 MP4格式标准         FFmpeg支持的媒体封装格式具有多样性与全面性,与此, 我们还可以使用FFmpeg来对媒体格式进行转换与封装 。 在互联网常见的格式中,跨平台最好的应该是 MP4 文件,因为 MP4 文件既可以在PC 平台的Flashplayer中播放,

    2024年02月08日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包