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

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

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

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

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){//这里换成你自己的百度keyconst 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.jpgfor (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.csdn.net/download/xchenbb/87608144

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37918.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

周鸿祎的AI野望

图片&#xff5c;Photo by BoliviaInteligente on Unsplash ©自象限原创 作者&#xff5c;罗辑 编辑&#xff5c;黑豆 排版&#xff5c;李帛锦 可能是大模型&#xff0c;把周鸿祎激活了。 6月27日&#xff0c;周鸿祎&#xff0c;突然晒出了清华大学的博士录取通知书…

张朝阳王石夏伯渝《雪山上的对话》:攀越生死极限,征服永不停步

雷递网 乐天 4月15日 搜狐创始人、董事局主席兼首席执行官张朝阳&#xff0c;与深石集团创始人王石、中国首位用义肢登顶珠峰的登山家夏伯渝相约丽江玉龙雪山&#xff0c;开始了一场来自“雪山上的对话”。 雪山不仅是旅游景点&#xff0c;更是自然生态系统的重要组成部分&…

国产激光雷达第一股诞生/ 周鸿祎称企业不做ChatGPT将被淘汰/雷军要让小米汽车进世界前五…今日更多新鲜事在此...

日报君 发自 凹非寺量子位 | 公众号 QbitAI 好消息&#xff1a;今天星期五。 “坏”消息&#xff1a;听说下周开学&#xff0c;各家小朋友寒假作业写完了嘛&#xff1f; &#xff08;像我这样&#xff09;不用赶作业的友友&#xff0c;来一起看看今日份科技要闻放松放松吧~ 雷军…

Meta与微软联手推出开源大型语言模型Llama 2;程序员如何优雅地做副业

&#x1f989; AI新闻 &#x1f680; Meta与微软联手推出开源大型语言模型Llama 2 摘要&#xff1a;Meta和微软近期合作发布了名为Llama 2的开源大型语言模型。该模型旨在帮助开发者和组织构建生成式人工智能工具和体验。Azure客户可以更轻松、安全地在Azure平台上微调和部署…

Python兼职私活接单方法大曝光,这4种方法你知道吗?教你月入三万!

挣钱方法1:接外包爬虫项目 这是网络爬虫最通常的的挣钱方式&#xff0c;通过外包网站&#xff0c;熟人关系接一个个中小规模的爬虫项目&#xff0c;一般向甲方提供数据抓取&#xff0c;数据结构化&#xff0c;数据清洗等服务。 各位新入行的猿人看官大多都会先尝试这个方向&a…

福利,剪映PC版来了~ 支持windos系统和苹果系统

做自媒体的小伙伴应该都知道剪映app&#xff0c;像抖音许多视频剪辑教学都是说&#xff0c;一部手机就能完成剪辑&#xff0c;基本上手机剪辑都是剪映&#xff0c;剪映是抖音家的产品&#xff0c;非常强大的一款视频处理app&#xff0c;即便你之前没有剪辑基础&#xff0c;也能…

办公效率提升,八款功能强大的效率工具不容错过

IconFont http://www.iconfont.cn/ ​IconFont 是阿里推出的免费矢量图标网站。 它上面已经累计72 万个图标。如果你是设计师&#xff0c;你可以把自己制作的图标分享在上面&#xff0c;如果你是用户&#xff0c;它提供了不同的颜色&#xff0c;不同的文件格式的图片可以下载&…

除了ChatGPT,还能用什么计划管理软件提高效率?

最近一段时间&#xff0c;人工智能工具ChatGPT成为互联网科技圈的热门话题。正如当年的阿尔法狗给世界带来的震动一样&#xff0c;人们讨论的最多的就是&#xff1a;ai智能会不会取代人工&#xff0c;因为ai的效率太高了&#xff0c;但再智能&#xff0c;也有ai永远也取代不了的…

提升办公效率——工具篇

前言&#xff1a; 人类和动物的本质区别之一是&#xff1a;人类可以创造工具&#xff0c;而正是有了这些工具使得人类站到了食物链的最顶端。而我们作为职场人&#xff0c;掌握一些高效的办公软件是有必要的&#xff0c;今天给大家介绍一些通用的办公软件&#xff0c;有了以下…

chatGpt AI智能文本创作软件开发

近年来&#xff0c;人工智能技术取得了巨大的突破&#xff0c;其中自然语言处理领域的发展尤为迅猛。chatGpt AI智能文本创作软件是一种基于Gpt模型的自然语言生成系统&#xff0c;能够模拟人类对话&#xff0c;具备一定的创作能力。 一、chatGpt AI智能文本创作软件的工作原理…

文案批量创作助手

超越平凡&#xff0c;挖掘无限潜能&#xff01;唯米系统&#xff0c;创意的引擎&#xff0c;为您解放无限创意&#xff0c;让品牌散发独特魅力。与传统文案不同&#xff0c;我们深植智能算法和大数据分析&#xff0c;为您量身定制创意方案&#xff0c;让每一句话都独一无二。无…

浙大网新:子公司华通云数据与阿里巴巴达成合作

【TechWeb】8月12日消息&#xff0c;浙大网新科技股份有限公司今天对外发布公告称&#xff0c;公司全资子公司浙江华通云数据科技有限公司&#xff08;以下简称“华通云数据”&#xff09; 与阿里巴巴&#xff08;中国&#xff09;有限公司&#xff08;以下简称“阿里巴巴”&am…

网新中英繁CMS v12.0

介绍 网新中英繁CMS程序简介 网新中英繁CMS&#xff08;内置红、蓝、绿3套模版&#xff09;是专业为个人和企业网站建设而开发的一款智能化程序。该程序基于ASPACCESS环境开发&#xff0c; 拥有完善的网站前台和后台全智能化管理功能&#xff0c;完全由后台操作&#xff08;如…

搜款网新接口的展示过程

vvic.readme接入文档item_get根据ID取商品详情item_search根据关键词取商品列表item_search_img按图搜索商品keyword_cat_list分类目录home_recommend首页商品market_list市场导航seller_list市场列表seller_info商家信息item_search_shop商家商品列表seller_search排行榜搜索n…

【浙大网新图灵通讯】无废话简单高效C#编码规范20100611

无废话简单高效C#编码规范20100611 自己看自己的代码啥问题也没有&#xff0c;但是一个团队、N多个人、N多年的代码&#xff0c;就比较难维护、难阅读了&#xff0c;什么样的不好的习惯、错误漏洞能出来的就全出来了。 第1章 头部文件源码参考 ※ 错误参考 using System; u…

网新恒天php,网新恒天,为德邦快递插上数字化翅膀

近日&#xff0c;恒天软件携手德邦快递共建的发件系统以及德邦开放平台正式上线&#xff01;在与10家国际国内知名供应商的激烈竞争中脱颖而出&#xff0c;恒天咨询团队凭借专业的体验设计服务与高效高质的落地开发&#xff0c;与客户一同经历确立产品定位、构建产品用户体验框…

【浙大网新图灵通讯】无废话简单高效C#编码规范20100612

为什么80%的码农都做不了架构师&#xff1f;>>> 无废话简单高效C#编码规范20100612 自己看自己的代码啥问题也没有&#xff0c;但是一个团队、N多个人、N多年的代码&#xff0c;就比较难维护、难阅读了&#xff0c;什么样的不好的习惯、错误漏洞能出来的就全出来了…

[浙大网新易盛] 程序员你12点前睡觉了吗?

为什么80%的码农都做不了架构师&#xff1f;>>> 最近发现很多同事&#xff0c;在上班时有些打瞌睡&#xff0c;中午也在眯一会儿&#xff0c;当然我不是周扒皮&#xff0c;但是总的感觉来说&#xff0c;想提醒他们一下&#xff0c;平时还是需要注意一些的&#xff…

【浙大网新图灵通讯】无废话简单高效C#编码规范20100621

为什么80%的码农都做不了架构师&#xff1f;>>> 无废话简单高效C#编码规范2010060621 自己看自己的代码啥问题也没有&#xff0c;但是一个团队、N多个人、N多年的代码&#xff0c;就比较难维护、难阅读了&#xff0c;什么样的不好的习惯、错误漏洞能出来的就全出来…

概念炒作后,数字孪生更需要“埋头苦干”

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 近日&#xff0c;中科院院士、北京大学环境科学与工程学院院长朱彤在第二届中国数字碳中和高峰论坛的演讲中提到&#xff0c;传统的物理模型在预测预报中存在很多未解的不确定性因素&#xff0c;而只有将数字模型和大量数据…