備忘錄_20160105(定位)
修改
回首頁
程式 2022-05-20 04:15:53 1652991353 100
製作類似卡拉OK字幕逐字亮起的流程─總概觀─Algorithm
製作類似卡拉OK字幕逐字亮起的流程─總概觀─Algorithm
(01).首先敲定輸出畫面大小,如 1920 x 1080 (2K),並敲定 fps (如24fps)
(注意,高度若不是偶數,可能會遇到在 Blender 無法輸出影片,也就是無法 Ctrl+F12)
(02).有一個完整的大聲音檔(mp3),當作主軸,亦知道總秒數
(03).圖片檔寬高已確定 (才能用座標)。
未著色圖檔一拖拉庫(background)(檔案名稱請用 bg 開頭,例如 bg01.jpg)
已著色圖檔一拖拉庫(foreground)(檔案名稱請用 fg 開頭,例如 fg01.jpg)
bg,fg 開頭的命名方式有助於之後的轉換
(04).開始聽聲音,看畫面,製作劇本檔
sound-secs1, secs2
image-imageFilename, xBeg1,yBeg1,xBeg2,yBeg2, xEnd1,yEnd1,xEnd2,yEnd2
遇到換頁的時候,用開頭的秒數(間隔0秒就是換頁,secs1==secs2),座標用0,0,0,0,0,0,0,0即可
(P.S.整個檔案開頭第一行,請用secs1=0,secs2=0,這樣先有一個底圖出現)
(05).從 fps 與 音檔總秒數,知道共有幾張圖 (total_frames = total_secs x fps)
(06).for(var iIdxFrame=0; iIdxFrame<fTotalFrames; iIdxFrame++)
fCurrentSeconds = (iIdxFrame+1) / fps
iIdxDataEnd=-1
iIdxDataBegin=-1
strCurrentBGFileName=""
strCurrentFGFileName=""
搜尋所在頁面 (for loop iIdxData 由後往前找)
if
fCurrentSeconds >= secs1
then
strCurrentBGFileName=strBGFileName
strCurrentFGFileName=strFGFileName (把 bg 換成 fg)
iIdxDataEnd=iIdxData
iIdxDataBegin=iIdxData
break
搜尋同一頁面開頭 (for loop iIdxData 繼續往前找)
if
strBGFileName==strCurrentBGFileName
then
iIdxDataBegin=iIdxData
else
break
(07).for loop (iIdxDataBegin ~ iIdxDataEnd(含))
換頁者(secs1==secs2),先放上底圖(background)
非換頁者
若 fCurrentSeconds>=secs2 則全畫(區塊完全複製)
若 sec1s<=fCurrentSeconds<secs2 則依比例畫(區塊依比例複製)
(08).儲存這一頁圖檔 (newFrameImage)
(09).將所有圖檔(frames)和總音檔(mp3),放到 Blender 3.1 當中,輸出成一個 mp4 (h.264+aac - iPhone才能看與聽)
(Properties/Render Properties/Color Management/View Transform 把 Filmic 改為 Standard,這樣影片畫面才不會變暗。)
※後續程式細節有微調,以便加快製作速度!