這兩天前同事 DMR CEO 楊’s 開始認真弄起了 Youtube 的影片,看看能不能增加一點零用錢。因此我也稍微看了一下 Youtube 的營利資訊,想說也來做做看了。我知道做影片不簡單,之前也買了很多配備,但看到理論收入還不錯,也有點心動。根據科技報橘的分析,收入似忽還ok嘛~ 每百萬觀看可賺到三萬台幣左右。
基本上台灣的Youtuber 約每千次觀看能有0.6 至1.4 美金的收入。 知名YouTuber 冏星人也曾拍影片公開個人每月來自平台的收入,平均百萬點擊可賺取3 萬,1 部影片有53 萬5 千多的點閱,YouTuber 的預估收益是332.85 美元(約新台幣1 萬元),1000 點閱數約1 美元收入 – 摘錄自科技報橘
當然,要完全靠這些過活也是不太可能,但賺些零用錢也還可以才對。因此,也才有了這篇。我決定研發兼賺錢,自動產生(垃圾)故事影片 XD
Google 小姐幫幫我
就讓我們先直接看結果,在 Google 小姐的幫忙下,製做出了這個影片。
自動產生影片的概念其實很簡單。就是先把故事寫好(或抄好),我先做了家喻戶曉的三隻小豬當故事,這個是完全自己寫的。然後簡單斷個句,並標注想要搭配的圖片關鍵字。在製做影片時,會先上 Google 尋找這個關鍵字的影片,抓取16張下來,隨機套用一張。接下來會把故事文字,利用 Google TTS 轉成 MP3。這樣就可以組合成「畫面、聲音、字幕」的影片三要素了。
接著就利用FFMPEG工具將所有材料整合起來,先產生一版影片,再利用自行寫的網頁介面工具,做畫面(圖片的)置換,這樣可以讓影片看起來更好一些。經過這幾個簡單的步驟,就可以快速的產生一部影片了。從大人的眼光來看,這樣產生的影片其實還蠻無趣的,但我發現小孩還蠻愛看的。家裡2個四歲的小孩,看了好幾遍,一直「再看一次、再看一下」的。
技術細節
故事腳本
要講故事當然要有故事的腳本(內容)。故事需要適當的斷句,在產生影片後,一行基本上是配一個畫面,當然二行要配同一個畫面也可以。每一行的最前面,需要指定一個圖片的關鍵字,然後用逗號格開,後面才是腳本。在自動生成影片時會先利用這個關鍵字去 Google 尋找圖片,一次會下載16張,然後隨機選一張來當該句腳本的畫面。
以上面的三隻小豬的腳本為例,左邊是想要的圖檔關鍵字,後面是腳本。圖檔關鍵字和腳本要有相關性,找出來的圖檔搭配文字形成畫面才會恰當。
腳本轉語音
腳本轉語音,當然可以用真人講是最帶感情的了,無奈不是聲優,只好交給 Google 小姐來幫忙。文字轉語音,在技術上叫做 TTS (Text-to-Speech)。現在 TTS 各家都做的不錯了,聽過最好的應該是 Amazon 的 Polly。工研究和百度的可以聽,但機器味太重。Google 目前也有推出付費的 TTS 服務,無奈沒有中文的,只好轉而用 Google 翻譯的 Google 小姐來發音。效果還可接受,希望 Google 可以早日推出正式的中文 TTS 服務。
轉語的方式很簡單,直接 GET 一個 URL,就會取得其語音的檔案。
1 |
wget -U Mozilla -O output.mp3 "http://translate.google.com/translate_tts?ie=UTF-8&total=1&idx=&client=tw-ob&q='請幫我中文轉語音'&tl=zh-tw" |
Google 圖片抓取
Google 圖片的抓取,是可以自己去看網頁原始碼來處理,但有人已經寫好了就直接用吧。看它原文的說明,Google 有時還是會變化圖檔的網址處理,就先直接用別人的 script 來抓取了,看它也有持續在更新。
這們用的是這套 Googliser 程式,基本上是一個大的 Bash script。作者也是從前一個人那邊 branch 出來再改良的。一直覺得自己 Shell Programming 能力還可以,不過看到這種幾千行的程式,也真的是軟了。只能期望他的程式都不要出問題才好。
1 |
./googliser.sh -p "3 pigs" -N -S -n 16 |
這個程式支援的參數還蠻多的,可以參考作者的網頁。我用到的幾個說明一下
-p: Pattern, 要搜尋的圖片關鍵字,圖檔抓下後就會存在以此為名的目錄內(空白會被取代成底線)
-N: No thumb, 不要產生縮圖檔
-S: Size, 對於沒提供檔案大小的圖檔,就不抓取。這樣才不會抓到一些沒用的縮圖
安裝字型檔
在產生影片時,會把字幕直接嵌入畫面中,這樣在後續的處理上會比較容易。Linux上的中文字型檔我也不確定哪一套可以用,就直接裝新的吧。以 Ubuntu 16.04 為例
1 2 3 |
sudo apt-get install language-pack-zh* sudo apt-get install chinese* apt-get install fonts-arphic-ukai fonts-arphic-uming fonts-ipafont-mincho fonts-ipafont-gothic fonts-unfonts-core |
裝完的字型檔會在這 /usr/share/fonts/truetype/arphic/。
影片產生
現在影片的素材都有了,圖片、聲音、文字。我們會先製做每一句字幕的影片,再把所有的影片組合成一個完整的影片。下面是轉換每個圖檔成影片的命令
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash pic=$1 duration=$2 CNT=$3 story="$4" echo 0 > a.srt d=`printf 00:00:%02d,000 $duration` echo "00:00:00,000 --> $d" >> a.srt echo "$story" >> a.srt echo "" >> a.srt ffmpeg -y -loop 1 -i $pic -pix_fmt yuvj420p -c:v libx264 -s 1280x720 -vf scale=1280:720 -t $duration -s 1280x720 tmpmp4/tmp.mp4 ffmpeg -y -i tmpmp4/tmp.mp4 -i mp3/${CNT}.mp3 -vf "subtitles=a.srt:force_style='FontName=uming.ttc,FontSize=24'" -strict -2 tmpmp4/${CNT}.mp4 |
行 2,3,4,5: 輸入的參數分別為「圖檔的路徑」、「影片的長度」、「第幾幕」、「字幕」。影片的長度,是設定成字幕語音的長度+2秒。語音長度是用 soxi 這個工具來計算出該MP3的長度取得的。第幾幕這個參數用在很多地方,是用來決定檔名的。
行6-10: 這是在產生一個字幕檔。SRT 字幕檔的格式,第一行是第n個字幕,由於我們是製做一個畫面的影片,所以永遠是0。第二行是字幕要顯示的時間區間,這個會看影片的長度一樣。第三行是字幕內容。第四行則是一個空白分格行
行11: 將圖檔轉換成影片,指定影片的時間長度、像素種類、畫面大小
行12: 將語音、字幕加進影片內
這樣一個命令完成後,就可以產生一個畫面的影片了。
影片整合
最後要將所有個別畫面的影片,全部整合成一部完整的影片
1 2 3 4 5 6 7 8 9 10 11 |
CNT=0 rm joindesc while [ 1 ] do if [ ! -e tmpmp4/${CNT}.mp4 ];then break fi echo "file tmpmp4/${CNT}.mp4" >> joindesc CNT=$(( $CNT + 1 )) done ffmpeg -y -f concat -i joindesc -fflags +genpts -strict -2 out.mp4 |
行1-10: 將所有的個別檔名加到一個列表
行11: 指定要將檔案 ‘joindesc’ 內的所有檔案合併,並且重新編碼。重新編碼可以保証比較好的相容性。
這樣就算完整產生了影片,可以完全的達到自動化。
後續加強
後續可以加強的部份,一個是照片的挑選。隨機挑其實有時候蠻不配的,所以又再寫一個網頁介面來換圖片。另外語音將來如果 Google 有較人性的TTS技術,也可以付費使用,或現在就轉到 Amazon Polly。最後則是圖片關鍵字,將來如果可以加進一些 AI 方法,用以自動選擇關鍵字的話,那需要人為介入的因素就更少了。
版權提醒
Google 圖片搜尋找到的檔案,並非免費檔案。自身需注意版權問題,合理使用。
原始碼使用流程
以下就將使用本工具需的(Ubuntu)指令列出,可以快速套用。不用知道太多細節。
1 2 3 4 5 6 7 8 9 |
sudo apt-get update sudo apt-get -y install libsox-fmt-mp3 sox language-pack-zh* chinese* fonts-arphic-ukai fonts-arphic-uming fonts-ipafont-mincho fonts-ipafont-gothic fonts-unfonts-core apache2 ffmpeg libapache2-mod-php wget https://moon-half.info/wp-content/uploads/2018/12/auto_3pigs_video.tar.gz tar zvfx auto_3pigs_video.tar.gz chmod 777 auto_3pigs_video mv auto_3pigs_video /var/www/html cd /var/www/html/auto_3pigs_video ./parse_script.sh full # 用瀏覽器開啟 http://127.0.0.1:8080/auto_3pigs_video/ # 這邊的 IP 請改成你機器的IP:Port |
影片製做過程展示
文字難免有寫不清楚的地方,這另外錄制了影片給大家參考。影片在這
Latest Comments