使用訊飛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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章