參考
起因
某日,看到一個營銷號的視頻說做視頻日進斗金,大意是用軟件識別文章小說,搭配一些圖片轉換成自己的視頻。看完當時腦海裏冒出一個念頭,我也可以,於是有了這番嘗試。
方案
首先文字方面,我選擇了【聚合數據的笑話接口】(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