c#文案语音配图片一键生成视频

使用C#和FFmpeg将图片合并成视频 FFmpeg是一个开源的跨平台多媒体处理工具,它提供了强大的功能,包括音频和视频编码、解码、转码等。在上面的代码中,我们首先指定了输入图片所在的目录路径和输出视频文件的路径。然后,我们设置了FFmpeg可执行文件的路径,并构建了要传递给FFmpeg的参数字符串。在本篇文章中,我将介绍如何使用C#和FFmpeg库将多张图片合并成一个视频。最后,我们启动FFmpeg进程,并开始异步读取进程的输出和错误流。请确保将代码中的路径替换为实际的路径,并确保已经安装了FFmpeg库,并将其路径正确地设置为。 阅读详情

高手略过吧,功能太简单,我自己都不好意思。。

这个是我自己的需要,做产品类的短视频,东搞西搞剪辑啊啥的,特别麻烦,所以先搞这个最简版,以后再一步步丰富功能。

需求:几张图片生成视频,视频长度以文案内容生成的语音为准。

c#准备数据即视频每一帧的图片和文案生成的语音,最后调用ffmpeg生成视频,顺序如下:

1、准备数据文件,约定第一行为文案文本,用这个生成语音文件,作视频配音,其他行为图片文件名。

 2、解析数据文件,拿到文案文本和图片数组

private bool Parse()
        {
            if (!System.IO.File.Exists("source\\data.txt"))
            {
                log("找不到数据文件data.txt");
                return false;
            }            
            int i = 0;
            Image img;
            ImgFileList = new List<string>();
            foreach (string line in System.IO.File.ReadLines("source\\data.txt"))
            {
                if (i++ == 0)
                {
                    wenzi = line;
                    continue;
                }
                if (!System.IO.File.Exists(line))
                {
                    log("文件:" + line + ",不存在");
                    continue;
                }
                img = Image.FromFile(line);
                if (img == null)
                {
                    log("文件:" + line + ",不是图片");
                    continue;
                }
                img.Dispose();
                ImgFileList.Add(line);
            }
            return ImgFileList.Count > 0;
        }

3,调用百度api,生成语音,存放到data\ee.mp3,返回语音长度。

private bool GetBaiDuAudio(string str,out int len,out string filename)
        {
            //这里换成你自己的百度key
            const string API_KEY = "asdfasdfasdfasfdasfd";
            const string SECRET_KEY = "asdfasdfasfdasfd";
            var client = new Baidu.Aip.Speech.Tts(API_KEY, SECRET_KEY);
            client.Timeout = 60000;  // 修改超时时间

            // 可选参数
            var option = new Dictionary<string, object>()
            {
                {"spd", 5}, // 语速
                {"vol", 5}, // 音量
                {"per", 103},  // 发音人,4:情感度丫丫童声                
            };
            var result = client.Synthesis(str, option);
            if (result.ErrorCode == 0)  // 或 result.Success
            {
                //取得当前路径
                string path = System.AppDomain.CurrentDomain.BaseDirectory;                
                if (!Directory.Exists(path + "data"))
                {
                    Directory.CreateDirectory(path + "data");
                }
                File.WriteAllBytes("data\\ee.mp3", result.Data);
                len = Mp3.GetLength("data\\ee.mp3");
                filename = "data\\ee.mp3";
                return true;
            }
            len = 0;
            filename = "";
            return false;
        }

这里吐槽下百度生成的mp3,ffmpeg -i ee.mp3,居然拿不到长度,为了拿到这个长度,费了好长时间,获取mp3长度代码如下:

 public class APIClass
    {

        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        // 获取短文件名
        public static extern int GetShortPathName(
            string lpszLongPath,
            string shortFile,
            int cchBuffer
            );

        [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
        public static extern int mciSendString(
            string lpstrCommand,
            string lpstrReturnString,
            int uReturnLength,
            int hwndCallback
            );
    }
    class Mp3
    {
        public static int GetLength(string filename)
        {
            string Name = "";
            Name = Name.PadLeft(260, Convert.ToChar(" "));
            APIClass.GetShortPathName(filename, Name, Name.Length);
            Name = GetCurrPath(Name);
            Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media";
            APIClass.mciSendString(Name, "", 0, 0);
            string durLength = "";
            durLength = durLength.PadLeft(128, Convert.ToChar(" "));
            APIClass.mciSendString("status media length", durLength, durLength.Length, 0);
            APIClass.mciSendString("close media", "", 128, 0);
            APIClass.mciSendString("close all", "", 128, 0);
            durLength = durLength.Trim();
            if (durLength == "") return 0;
            return (int)(Convert.ToDouble(durLength)); 
        }
        private static string GetCurrPath(string name)
        {
            if (name.Length < 1) return "";
            name = name.Trim();
            name = name.Substring(0, name.Length - 1);
            return name;
        }
    }

Mp3.GetLength函数返回的是毫秒。

4、根据mp3的长度来计算生成多少帧图片,源图片每张又生成多少张,最后生成图片。

图片总数:mp3长度/40,1000/40=25,我们按照每秒25帧来计算。

private void CreateImg()
        {
            //audion是百度音频长度,单位毫秒
            //几张图片平均分布,按照每秒25帧来算是,就是40毫秒一张图片
            int photon = audiolen / ImgFileList.Count / 40;
            string file, extname, newfile;
            int n;
            int counta = 1;
            //在data目录下生成1-n.jpg
            for (int i = 0; i < ImgFileList.Count; i++)
            {
                file = ImgFileList[i];
                n = file.LastIndexOf(".");
                extname = file.Substring(n, file.Length - n);
                for (int j = 0; j < photon; j++)
                {
                    newfile = "data\\" + counta + extname;
                    File.Copy(file, newfile);
                    counta++;
                }
            }
        }

生成图片如下

5,调用ffmpeg命令行生成视频

命令:ffmpeg -f image2 -i data\\%d.jpg -i data\\ee.mp3 data\output.mp4

private string CreateVideo()
        {
            string DstFile = "data\\output.mp4";
            string strCmd = string.Format("-f image2 -i {0} -i {1} {2} -y", "data\\%d.jpg", audiofile, DstFile);
            System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.StartInfo.FileName = "ffmpeg.exe";//要执行的程序名称
            p.StartInfo.Arguments = " " + strCmd;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = false;//可能接受来自调用程序的输入信息
            p.StartInfo.RedirectStandardOutput = false;//由调用程序获取输出信息
            p.StartInfo.RedirectStandardError = false;//重定向标准错误输出
            p.StartInfo.CreateNoWindow = false;//不显示程序窗口

            p.Start();//启动程序
            p.WaitForExit();//等待程序执行完退出进程

            if (System.IO.File.Exists(DstFile))
            {
                return DstFile;
            }
            return "";
        }

6、运行图面

 至此视频文件就生成了,视频长度与音乐长度完全匹配。

项目源码:https://download.youkuaiyun.com/download/xchenbb/87608144

winform C# ffmpeg 图片转成视频 本源码是ffmpeg转换视频,编译环境为vs2017,如需要转换其他格式视频填写对应的视频格式的编码格式【-f image2 -i c:\temp\d.jpg -vcodec libx264 test.mp4】,支持的图片格式为jpg,bmp,tiff等等。请注意对应的图片帧要以自然数命名,再次注意!本demo是以vs2017作为编译环境如出现打不开情况请查看文件夹的demo源码.txt。 立即下载

相关推荐

C# 图片帧转换mp4格式视频

本源码是ffmpeg转换视频,编译环境为vs2017,如需要转换其他格式视频填写对应的视频格式的编码格式【-f image2 -i c:\temp\d.jpg -vcodec libx264 test.mp4】,支持的图片格式为jpg,bmp,tiff等等。请注意对应的图片帧要以自然数命名,再次注意!本demo是以vs2017作为编译环境如出现打不开情况请查看文件夹的demo源码.txt。

3 、OpenCvSharp 图片转视频

写作原因:前段时间做图像识别,一朋友用python将一张图片合成了一段视频,用于测试使用,先就c#做一个图片转视频的记录,使用的是Opencvsharp,如有不对的地方,请多多指教。 一、准备 需要使用到的对象为VideoWriter 其中重载函数有好几个,用来对应不同的需求。 二、参数解释 参数由很多,笔者用下面这个重载函数对这些参数做讲解 /// <summary> /// Creates video writer structure. ..

roujian0985的博客 4742

C#图片转视频源码

仅支持Avi格式,C#源码,将图片转换为视频,调用windows的avifil32.dll组件,获取一下试试走C#是是是是源码

C#将图像存成视频

http://www.codeproject.com/Articles/7388/A-Simple-C-Wrapper-for-the-AviFile-Library 文章摘至上面这个网页,进行了一点点的翻译 Introduction This is an article for everyone who does not want to spend hours messing around

一步一脚印 1万+

c# 图片合成AVI 源码

c# 图片合成AVI JPG TO AVI Sample

C#实现图片合成经典源码(完整版)

C#实现图片合成经典源码(完整版)

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

在使用原生ffmpeg之前,笔者使用了几个第三方的nuget库,如:FFmpeg.AutoGen、Xabe.FFmpeg、Accord.Video.FFMPEG。前两个库要么只支持将文件夹里现有的图片保存为mp4,要么不支持设置每帧的PTS,导致生成的mp4播放速度太快。ffmpeg只是提供了一个exe,并没有官方的API可供我们调用,只提供了一大堆的参数说明,真是令人头大。最后,只能使用的原生的ffmpeg了。在正式开始之前,先介绍下我的需求是怎么样的,基于此需求如何使用ffmpeg实现。

catshitone的专栏 7628

C#视频转字符动画,图片转字符图,视频帧截取,图片合成视频ffmpeg

包内有生成好的软件可以直接运行,有工程源代码可以用vs运行修改 软件运行原理: 先将视频拆分成图片,将每一帧图片转成字符图片,再将字符图片合成视频,中间视频操作部分调用了ffmpeg,但是之前装X好像被我改名字了,懒得改回来了,有点麻烦,菜鸟写的;点击运行 .exe 参数说明:视频完整路径:为需要转换视频的完整路径,存储字符图片路径为:视频拆分成字符图片后的路径,合成视频的完整路径:也就是生成视频保存的路径

C# Winform--ffmpeg图片合成视频以及参数设置

C# Winform--ffmpeg图片合成视频以及参数设置

Blue 805

ffmpeg图片音乐合成视频C#源码

过头条号新手期,专门开发的一款自己音乐图片合成视频,只需要放入一首音乐,加上图片就可以生成一个完成的视频。而且软件是全自动的。

别再手动续期SSL证书了!用acme.sh配合阿里云DNS API,实现全自动HTTPS证书管理

本文详细介绍了如何使用acme.sh配合阿里云DNS API实现SSL/TLS证书的全自动管理,彻底解决手动续期带来的风险与不便。通过自动化部署流程,包括环境准备、API集成、多域名证书申请等关键步骤,帮助运维人员构建高效、可靠的HTTPS证书管理体系,显著提升安全性和运维效率。

weixin_29200485的博客 271

c# 桌面录屏,生成视频方案总结

介绍C#录屏开发思路及常见的实现方法,和opencv相关类库介绍

qq_41230604的博客 5429

什么是plm系统?-数字化转型网

当今世界,产品研发能力是企业在激烈的市场竞争中保持战略优势的核心竞争力之一。如何有效地缩短产品研发周期、改善产品服务的设计迭代流程、有效降低产品的研发成本,也是企业面临的主要问题之一。PLM(Product Lifecycle Management,产品生命周期管理)在优化产品研发的全管理流程、增强企业产品的市场竞争力方面具有关键的作用。

cxo17757154043的博客 883

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

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

wangnaisheng的专栏 4462

QT串口通信控制LED上位机开发教程

串口通信是嵌入式系统与PC端交互的基础技术,通过UART协议实现设备间的数据传输。QT框架提供了跨平台的串口编程支持,结合其GUI模块可以快速开发上位机控制程序。在工业自动化和物联网领域,这种上下位机架构广泛应用于设备监控和控制场景。本案例展示了如何使用QT的SerialPort模块实现LED控制功能,包含串口参数配置、指令发送等核心功能实现,为嵌入式GUI开发提供实践参考。

weixin_42598278的博客 583

MT6771 Android13 背光曲线调试与光感数据校准实战

本文详细介绍了MT6771平台在Android 13系统上进行背光曲线调试与光感数据校准的实战经验。针对高亮度环境下背光误调节问题,深入分析了光感数据上报机制,并提供了驱动层配置修改、背光曲线优化及常见问题解决方案,帮助开发者快速定位并解决类似问题。

moon9的博客 287

C#中将实时采集的图像保存为视频文件

weixin_42609581的博客 1020

SAP 清账凭证 完整生成逻辑(超详细原理 + 底层规则 + 分录逻辑 + 互清特殊规则)

【SAP清账凭证核心逻辑摘要】(149字) SAP清账凭证生成遵循两大类型:1)资金往来对冲型(如F-32/F-44互清),强制生成含完整借贷分录的独立凭证,通过AUGDT/AUGBL字段绑定未清项,典型场景如应收冲应付(借:应付账款 贷:应收账款);2)纯核销型(如F.13自动清账),仅标记行项目状态不产生实际分录。关键规则:①仅未清项管理科目可清账;②互清必须配置主数据关联;③差额清账自动补差(折扣/汇差);④原始凭证永不修改,仅更新BSIK/BSAD等表状态。清账凭证均保留可追溯性,支持FBRA重置还

金牌架构师 543

C#学习系列之image控件配合ffmpeg播放视频(bitmap转image)

bitmap转image

arriettyandray的博客 1492

STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南

通过不断实践,熟悉软件的各项功能和操作技巧,工程师可更好地应对工业自动化控制中的各种挑战,开发出高效、稳定的控制程序。项目的基本组件是构成程序的核心元素,包括:程序块(主程序 OB1、子程序和中断程序)、数据块(给 V 存储器赋初值)、系统块(硬件组态和参数设置)、符号表(用符号代替存储器地址,使程序更易理解)以及状态图表(监视、修改和强制变量状态)。下载程序时,单击工具栏上的 “下载” 按钮,在弹出的下载对话框中选择要下载的块(程序块、数据块、系统块),单击 “下载” 即可。

电工 5574

YOLO26 数据标注工具:LabelImg、Label Studio实战指南:主流标注工具的安装配置与使用技巧,高效完成目标检测数据标注

本文介绍了目标检测中数据标注的核心地位与常用工具。数据标注质量直接影响模型性能,需要关注准确性、一致性等维度。文章详细讲解了边界框、类别标签等基本概念,并对比了LabelImg、Label Studio等主流标注工具的特点。重点介绍了LabelImg的轻量级、易用性等优势,以及Label Studio的协作功能,为不同规模项目提供标注工具选择建议。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1177

C# 使用SnsSharp生成avi视频文件

C#生成H264为压缩编码的avi视频文件

C# 459

深度解析大众点评反爬机制:构建高可用店铺评论采集系统(2026最新实战)

在中文互联网数据采集领域,大众点评(现归属美团)始终占据着特殊地位。其丰富的UGC(用户生成内容)包含了超过2亿条真实店铺评论、数百万家商户的详细POI信息以及用户行为数据,对商业分析、口碑监测、本地生活趋势研究具有不可替代的价值。然而,大众点评的安全团队投入了顶级资源构建反爬系统——从请求签名、行为验证到设备指纹,其防御强度甚至超过多数电商平台。本文将完整呈现一套2026年依然有效的技术方案,包括破解核心参数_token、动态代理池维护、无头浏览器指纹伪装等,最终产出一个生产级采集框架。目录。

2201_76125261的博客 814

C#调用Python程序将图片转化为视频

C#调用Python程序实现图片转视频 C# Python 图片转视频

nexttoparadise的博客 481

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: c#实现视频的批量剪辑
下一篇: c#根据场景不同来拆分视频
xchenbb
博客等级 码龄22年 20粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xchenbb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值