組裝一個 Short
屬於 short-start 流程的一部分。媒體細節請見 short-media,動畫細節請見 short-animation,審查與渲染細節請見 short-review。支援工具:hyperframes、hyperframes-cli 和 media-use。
請先閱讀 RULES.md 和專案的 ROTEIRO.md。專案的 kit.json 必須包含 handle(創作者選擇的 @ 用戶名)。如果該欄位為空或是 @SEU_CANAL,請先向創作者詢問再繼續。
1. 旁白
- 將 mp3 複製到
assets\audio\narracao_raw.mp3。 - 使用
silencedetect=n=-40dB:d=0.6尋找較長的靜音部分。將落在鉤子(gancho)內的靜音縮短,如果語調是充滿活力的,則將大於 0.8 秒的靜音也縮短。使用tools\ffmpeg_recipes.md中的拼接方法。 - 使用
build\transcribe.py進行轉錄,生成assets\audio\narracao_words.json,其中包含每個單詞的時間。 - 平衡音量:
python -I -X utf8 build\level_voice.py <mp3> <words.json> video\assets\audio\narracao.mp3。 - 將
template\video\中的hyperframes.json、package.json、meta.json、AGENTS.md和CLAUDE.md複製到video\。調整meta.json中的id。
2. 媒體
- 在內置瀏覽器中,打開 pexels.com 頁面,使用
tools\pexels_search.js一次進行多次搜索。 - 下載縮圖,使用 ffmpeg
tile組合成一張圖片,仔細查看後再選擇。 - 丟棄包含標誌、品牌、球隊球衣或與語音不搭配的素材。
- 使用
curl -L -A "Mozilla/5.0" -e https://www.pexels.com/下載到assets\video\stock\。 - 背景音樂:從 Pixabay 選擇 沒有「Content ID Registered」 的曲目,放置於
video\assets\audio\musica.mp3。 - 音效:請參閱
tools\sfx\README.md;存放在video\assets\sfx\。 - 按照配方(垂直 1080×1920 或電視窗口 1000×750)剪輯影片片段到
video\assets\video\。製作鉤子(gancho)的反向片段以便循環。 - 不要呼叫名為
cut的 shell 函數,因為這會遮蔽系統的cut命令。
3. 場景(build\generate.py)
- 從
template\build\generate.py開始,該檔案附有註解。使用SCENES = [(名稱, 開始, 結束)]搭配單詞的時間;在每個場景內,時間是相對的(0 表示場景的開始)。 - 使用
lib_short中的元件:- 文字:
kline/words_js/slam/punch/shake/label; - 數字:帶有
onUpdate的計數器; - 按讚與分享:
like_block/plane_svg; - 互動:
comment_card/follow_card/step_badge。
- 文字:
- 每個場景都有動畫。 如果列表要求進度,則製作一個主題指示器作為疊加場景(例如:庫中的
pavio_scene,一個隨每個項目燃燒並在高潮時爆炸的引信)。 - 字幕:
write_captions(WORDS, TOTAL, SKIP, alt_from, alt_top)。SKIP涵蓋了場景排版已經顯示語音的段落。 - 索引:
write_index(TOTAL, SCENES, SFX, dur_voz, 0.1, handle=HANDLE)。HANDLE來自kit.json,經由build.ps1傳入。 - @ 標誌位於字幕下方(
WM_TOP)。請勿手動定位標誌。 - 循環: 最後一個場景以反向片段結束,對應於鉤子(gancho)的第 0 幀,並帶有相同的標題。
- 結尾應符合影片的基調: 對於沉重、陰暗且節奏緩慢的影片,不要有爆發性的結尾。
- HyperFrames 規則:
class="clip"搭配data-start/data-duration;- 不要直接對 clip 本身動畫化 visibility 或 opacity,只對內部元素使用;
- 在後續的 fromTo 中使用
immediateRender:false; - 每個
<audio>都有自己的 id 和 track; - 影片始終設定為
muted; - SVG 線條使用
pathLength="1"以實現繪製效果。
4. 生成、檢查與渲染
- 在
build\build.ps1中調整$alvos:包含有拍攝素材的場景、.fv(全螢幕)和.tv(電視窗口)。 - 執行
powershell -ExecutionPolicy Bypass -File build\build.ps1 -Duracao <TOTAL>。絕對不要使用Select-Object -First來處理輸出。 npx --yes hyperframes@<版本> check --json:修正錯誤。預期可能出現且可以保留的錯誤包括:- 半透明標誌的對比度問題;
- 循環標題過短。
- 拍攝快照(
snapshot -o <資料夾> --no-end --at "...")並查看聯繫表。檢查是否有:- 文字超出畫面;
- 字幕難以辨認;
- 元素被遮擋;
- 場景靜止不動。
- 使用
render --quality standard -o renders\<名稱>_master.mp4渲染,並使用ebur128=peak=true進行測量(目標:大約 −13.5 LUFS,峰值低於 −2 dBTP)。 - 使用 x264 CRF 19、AAC 192k 和
+faststart複製到桌面。 - 檢查循環:第 0 幀和最後一幀並排放置(
hstack)時應相同。 - 撰寫
video\REVIEW.md,記錄所做的決定、測量了哪些項目,以及僅透過目視檢查的項目(「沒有人聽到聲音」)。
5. 交付
發送影片、標題(TikTok 和 YouTube,各附 5 個 #)、描述以及要置頂的留言。提醒發佈時間,並在 48 小時後要求螢幕截圖。