前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用讯飞tts+ffmpeg自动生成视频

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

作者头像
易墨
发布2022-05-10 17:03:04
2.8K0
发布2022-05-10 17:03:04
举报
文章被收录于专栏:一个爱瞎折腾的程序猿

参考

起因

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

方案

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

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

准备笑话文本

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

下载讯飞语音合成离线包

  • 需要注册并身份认证后在控制台下载,下载地址
  • 安装文档中使用vs运行samples中的解决方案(使用的是VS2010),若项目加载失败则升级下项目的框架版本:项目右键->重定向项目->安装最新版本即可。
升级项目
升级项目
  • 为了能够在后续可以直接调用sdk,则根据需要改动此示例即可,此处改动了入参和退出。
tts示例代码改动
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

完整脚本

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考
  • 起因
  • 方案
  • 使用脚本实现自动生成视频
    • 准备笑话文本
      • 下载讯飞语音合成离线包
        • 下载ffmpeg
          • 生成视频
            • 生成滚动字幕
              • 图片转视频
              • 完整脚本
              相关产品与服务
              语音合成
              语音合成(Text To Speech,TTS)满足将文本转化成拟人化语音的需求,打通人机交互闭环。提供多场景、多语言的音色选择,支持 SSML 标记语言,支持自定义音量、语速等参数,让发音更专业、更符合场景需求。语音合成广泛适用于智能客服、有声阅读、新闻播报、人机交互等业务场景。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档