参考

起因

某日,看到一个营销号的视频说做视频日进斗金,大意是用软件识别文章小说,搭配一些图片转换成自己的视频。看完当时脑海里冒出一个念头,我也可以,于是有了这番尝试。

方案

首先文字方面,我选择了【聚合数据的笑话接口】(https://www.juhe.cn/docs/api/id/95),就不需要费力去自己找资源了

其次需要将文字转换为音频,我选择了【讯飞的语音合成】,因为其有Windows离线版SDK,修改了一些就可以根据需要使用了

最后是音频转视频方面,采用了【FFmpeg】,为视频添加了封面图与滚动字幕

使用脚本实现自动生成视频

准备笑话文本

将笑话文本复制保存到一个文本中即可

下载讯飞语音合成离线包

  • 需要注册并身份认证后在控制台下载,下载地址
  • 安装文档中使用vs运行samples中的解决方案(使用的是VS2010),若项目加载失败则升级下项目的框架版本:项目右键->重定向项目->安装最新版本即可。

  • 为了能够在后续可以直接调用sdk,则根据需要改动此示例即可,此处改动了入参和退出。

重新生成后,找到外层bin目录下的exe,就可以直接使用tts_offline_sample hello.wav "hello word"调用程序合成文本音频到指定路径。

将bin和libs目录拷贝到需要的地方,或者将bin目录添加到环境变量中,就可以在任意地方使用了

下载ffmpeg

现在已经使用tts生成了音频文件,接下来使用 ffmpeg 将音频转换为视频并且生成字幕即可得到一个新鲜出炉的视频了

ffmpeg下载地址

下载解压后将ffmpeg所在目录设置到环境变量,这样就可以在任意地方使用

生成视频

先从pixabay获取一个无版权的素材图片保存为 cover.jpg 作为封面,执行以下命令即可生成视频

ffmpeg -y -loop 1 -i cover.jpg -i hello.wav -c:v libx264 -c:a aac -b:a 192k -shortest hello.mp4

生成滚动字幕

创建一个content.txt文件,写入内容“hello word,你好世界”

x,y为坐标,根据需要调整即可,fontfile设置为中文字体,不设置,中文将会乱码,执行命令后即可得到一个带滚动字幕的视频。

ffmpeg -y -i hello.mp4 -vf "drawtext=fontfile=C\\:/Windows/Fonts/msyh.ttc:fontcolor=ffcc00:fontsize=40:shadowx=2:shadowy=2:textfile=./content.txt:reload=1:y=h/5:x=w-(mod(8*n\,w+tw)-tw/100)" -c:a copy hellofull.mp4

注意vf参数中的路径需要特殊处理,Replace("\\", "/").Replace(":", "\\:")

自此,技术点已经说明完毕,后续的就是一些优化和脚本的组合了。

图片转视频

注意:./ 为图片目录,且 img_ 为前缀,%03d 为格式( C语言中的格式化输出 %0nd ),不足3位长度的左补齐0,即必须为img_001,img_002这种格式,并且图片需要从第一张图片开始的序号开始依次排列,图片后缀与其格式需要一致。否则都不能成功

以下命令正确执行文件名需要为:img_001.png,img_002.png,img_003.png...

-r 0.500 ,1/0.500= 2秒 一张图片显示

-y 覆盖生成的文件

ffmpeg -y -r 0.500 -i ./img_%03d.png ./output.mp4

完整脚本

set coverPath=F:\\Project\\JokeBox\\cover.jpg
set contentPath=F:\\Project\\JokeBox\\content.txt
set /P jokeContent=<%contentPath%
set videoName=video%date:~0,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%
set outDic=F:\\Project\\JokeBox\\output\\%videoName%
set voicePath=%outDic%\\voice.wav
set videoPath=%outDic%\\video.mp4
set videoFullPath=%outDic%\\每日笑话-%date:~5,2%-%date:~8,2%.mp4
set srtPath=F\\:/Project/JokeBox/zimu.txt echo 音频:%voicePath%
echo 视频:%videoPath%
echo 字幕:%srtPath%
echo 文本:%jokeContent% echo 创建输出目录
mkdir %outDic% echo 生成音频
tts_offline_sample.exe "%voicePath%" "%jokeContent%" echo 生成视频
ffmpeg -loop 1 -i %coverPath% -i %voicePath% -c:v libx264 -c:a aac -b:a 192k -shortest %videoPath% echo 生成字幕
ffmpeg -y -i %videoPath% -vf "drawtext=fontfile=C\\:/Windows/Fonts/msyh.ttc:fontcolor=ffcc00:fontsize=40:shadowx=2:shadowy=2:textfile=%srtPath%:reload=1:y=h/5:x=w-(mod(8*n\,w+tw)-tw/100)" -c:a copy %videoFullPath% copy %contentPath% %outDic% echo 移除音频视频
del %voicePath:\\=\%
del %videoPath:\\=\% pause

使用讯飞tts+ffmpeg自动生成视频的更多相关文章

  1. 初探机器学习之使用讯飞TTS服务实现在线语音合成

    最近在调研使用各个云平台提供的AI服务,有个语音合成的需求因此就使用了一下科大讯飞的TTS服务,也用.NET Core写了一个小示例,下面就是这个小示例及其相关背景知识的介绍. 一.什么是语音合成(T ...

  2. 成为视频分析专家:自动生成视频集锦(Python实现)

    介绍 我是个超级板球迷.从我记事起,我就迷上了这项运动,至今它仍在我的日常生活中起着重要的作用.我相信很多读到这篇文章的人都会点头! 但是自从我开始工作以来,要跟上所有的比赛就成了一件棘手的事.我不能 ...

  3. 使用ffmpeg快速生成视频截图

    1 ffmpeg -i input.mkv -ss 00:10:00 -f image2 output.jpg 但是这个命令会花费相当长的时间. 对一个清晰的或者较大的视频文件进行操作, 会花费半分钟 ...

  4. 利用FFmpeg生成视频缩略图 2.3.1

    1.下载FFmpeg文件包,解压包里的\bin\下的文件解压到 D:\ffmpeg\ 目录下. 下载地址 http://ffmpeg.zeranoe.com/builds/win32/static/ ...

  5. 利用FFmpeg生成视频缩略图 2.1.8

    1.下载FFmpeg文件包,解压包里的\bin\下的文件解压到 D:\ffmpeg\ 目录下. 下载地址 http://ffmpeg.zeranoe.com/builds/win32/static/ ...

  6. 利用FFmpeg生成视频缩略图 2.1.6

    利用FFmpeg生成视频缩略图 1.下载FFmpeg文件包,解压包里的\bin\下的文件解压到 D:\ffmpeg\ 目录下. 下载地址 http://ffmpeg.zeranoe.com/build ...

  7. 微信小程序语音与讯飞语音识别接口(Java),Kronopath/SILKCodec,ffmpeg处理silk,pcm,wav转换

    项目需求,需要使用讯飞的语音识别接口,将微信小程序上传的录音文件识别成文字返回 首先去讯飞开放平台中申请开通语音识别功能 在这里面下载sdk,然后解压,注意appid与sdk是关联的,appid在初始 ...

  8. android用讯飞实现TTS语音合成 实现中文版

    Android系统从1.6版本开始就支持TTS(Text-To-Speech),即语音合成.但是android系统默认的TTS引擎:Pic TTS不支持中文.所以我们得安装自己的TTS引擎和语音包. ...

  9. 利用FFmpeg生成视频的缩略视频 v8.3

    目前生成视频缩略图的工具大多数是生成静态的图片,为了解决这样的局限性,这 次春节期间搞了个利用 FFMpeg 能生成缩略动态视频的批处理. 把 Make_NxM_videos.bat LED_font ...

随机推荐

  1. 【刷题-LeetCode】202. Happy Number

    Happy Number Write an algorithm to determine if a number n is "happy". A happy number is a ...

  2. 【测试数据】android下CPU核与线程数的关系

    测试方法 24MB的一张4K图片,连续计算5次直方图. 小米mix2s, 高通骁龙 845.4大核,4小核. 数据表格 线程数 绝对时间(s) 累计CPU时间(s) 每线程平均耗时(us) 每线程最大 ...

  3. VUE3 之 组件传参

    1. 概述 韦奇定律告诉我们:大部分人都很容易被别人的话所左右,从而开始动摇.怀疑,最终迷失自我.因此我们要努力的坚定信念,相信自己,才不会被周围的环境所左右,才能取得最终的胜利. 言归正传,之前我们 ...

  4. 集合框架-ArrayList练习(去除ArrayList集合中的重复元素)

    1 package cn.itcast.p3.arraylist.test; 2 3 import java.util.ArrayList; 4 import java.util.Iterator; ...

  5. Clusternet:一款开源的跨云多集群云原生管控利器!

    作者 徐迪,Clusternet 项目发起人,腾讯云容器技术专家. 摘要 Clusternet (Cluster Internet)是一个兼具多集群管理和跨集群应用编排的开源云原生管控平台,解决了跨云 ...

  6. Vue2和Vue3技术整理1 - 入门篇 - 更新完毕

    Vue2 0.前言 首先说明:要直接上手简单得很,看官网熟悉大概有哪些东西.怎么用的,然后简单练一下就可以做出程序来了,最多两天,无论Vue2还是Vue3,就都完全可以了,Vue3就是比Vue2多了一 ...

  7. Ubuntu安装盘的制作

    准备工作 Ubuntu系统镜像 win32diskimager U盘(4G以上),对重要文件提前备份 制作 下载系统镜像 进入官网 我们下载的版本是18.04,不是20.04 在页面中,找到BitTo ...

  8. HTML横向二级导航

    图片素材没有发,就一个logo还有一个Nav背景图. 效果 HTML <!DOCTYPE html> <html lang="zh-cn"> <hea ...

  9. 模拟dom结构

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. iOS程序的启动过程

    UIApplicationMain main函数中执行了一个UIApplicationMain这个函数 int UIApplicationMain(int argc, char *argv[], NS ...