備忘錄_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,這樣影片畫面才不會變暗。)

※後續程式細節有微調,以便加快製作速度!