使用訊飛tts+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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM