使用讯飞tts+ffmpeg自动生成视频

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475

参考

  • FFmpeg
  • 科大讯飞离线语音合成

原因

有一天,我看到一个营销号的视频,说是每天赚钱的视频。大体思路是用软件识别文章和小说,将它们转换成自己的视频,配上一些图片。看完之后,突然想到一个想法,我也可以,所以就有了这个尝试。

计划

首先文字方面,我选择了【聚合数据的笑话接口】(https://www.juhe.cn/docs/api/id/95),就不需要费力去自己找资源了
其次需要将文字转换为音频,我选择了【讯飞的语音合成】,因为其有Windows离线版SDK,修改了一些就可以根据需要使用了
最后是音频转视频方面,采用了【FFmpeg】,为视频添加了封面图与滚动字幕

使用脚本自动生成视频

准备笑话文本

将笑话文本复制并保存到文本

下载科大讯飞语音合成离线包

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

升级项目

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

tts示例代码改动

重新生成后,找到外层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

版权声明:本文为博主[虚幻私塾】原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/m0_56069948/article/details/123173672

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2022年3月2日
下一篇 2022年3月2日

相关推荐