← scroll-world · 02

One Bean,
One Cup

一顆咖啡果,一鏡到底,從山坡到杯子——採摘、發酵、日曬、一片海、烘豆鼓、磨豆機。 九十六秒、十二個鏡頭、零轉場。每一道接縫都不是「對出來的」, 而是兩支片共用同一個檔案。

1:36 片長
1920×1080 24fps
12 個 block
−14.0 LUFS
2026-08-26
這一頁正用 file:// 開啟,YouTube 的 IFrame API 在這種來源下不會運作。 請改用 python deploy-src/serve_local.py,再開 http://localhost:8000
版本 捲動版 ↗ 字幕 在 YouTube 開啟 · 下載 SRT

十二個 Block

六個停留、五個連接、一個收尾。點任一格會跳到影片的對應秒數。 這一集沒有任何疊字數字——五個階段的欄位全部留白,理由在下面。

兩個版本

同一次生成、同一組 block,兩條不同的產線。

線性版 · 主要交付
畫面
12 支 8 秒 clip,零轉場串接——接縫已經是同一幀,一個溶接只會把它糊掉。
旁白
Edge TTS en-GB-RyanNeural--rate=-5%,一個聲音一個語速。 每句從該格的第 0.4 秒進場,讓鏡頭先立起來。十二段都在窗口內,一個字都沒改。
配樂
約 72 BPM、溫暖連續、沒有靜默也沒有 drop。 唯一的情緒高點壓在 Block 11——全片唯一提出主張的那一句, 音樂床在那一格領先第二名 2.9 dB。
混音
全頻顯式包絡,人聲下方 −5.00 dB、150 ms 進 400 ms 出,空檔量到 0.00 dB。 交付 −14.0 LUFS / −1.0 dBTP。
疊字
只有片名,沒有數字。五個階段欄位全部留白——沒有真實營運數據, 而製作包的規則是「留白勝過估算」。因此片尾也不需要Figures shown are illustrative
捲動版 · 網頁體驗
形式
影片從不播放,只有它的 currentTime 被捲動位置驅動。 鏡頭是真的在動,捲動只驅動時間。
長度
1:16。連接段變速到 2×,不是把中間剪掉——剪掉會製造出 這整個製作在避免的斷點。
聲音
刻意無聲。瀏覽器封鎖自動播放,一支「設計成無聲」的片 比一支「被靜音」的片好看。所以論點改由頁面上的文字承載。
編碼
720p、CRF 27、每四幀一個關鍵幀——seek 在 0.17 秒內到位, 而檔案是 19.3 MiB。這一集的灰色低細節世界壓得比上一集小得多, 所以影片跟頁面可以放在同一個 Pages 專案,不需要另外的物件儲存。
降級
三條路:prefers-reduced-motion、影片 12 秒未就緒、載入失敗。 降級後版面完整可讀,卡片 transition:none—— 捲動是增強,不是內容本身
三個決定
  • 接縫是同一個檔案,不是對出來的。 13 張錨定幀被定義成接縫邊界而不是場景:still_N 同時是 Block N−1 的末幀與 Block N 的首幀。12 支 clip 需要 13 張,不是 12 張。 十一道接縫裡,主角跨過切點的位移最大 5 px。
  • 世界的顏色是被強調色決定的,不是反過來。 上一集的溫暖石灰世界對這一集的琥珀主角,在帶殼豆階段的色相分離只有 —— 主角會消失在自己的背景裡。所以這一集的世界是冷灰藍, 三個狀態的分離都在 155° 以上。兩者必須一起動。
  • 主角只保留一個色相,用明度走完全程。 紅果 → 蜜色帶殼豆 → 深褐熟豆,色相全部鎖在 5–33° 的琥珀帶裡。 中途跳到綠色會打掉「唯一飽和物件」的追蹤,也讓色相鎖的驗收變成不可執行。 而這其實更準:脫殼前的咖啡本來就是蜜色的。

資料來源

全片只說出一個有出處的數字。其餘旁白全部是流程機制,在任何一個產地都成立—— 咖啡是水果、成熟度沿著枝條不均、發酵不能催、第一爆不可逆。

  1. Fairtrade Risk Map — Coffee
    Block 2 — 全球約 1,250 萬個咖啡農場,其中約 95% 小於五公頃。
  2. ING Think(引用 Enveritas)
    同一個數字的獨立轉述。片中只說農場數,不說產量占比—— 占比在可信來源之間從 60% 到 84% 都有,那是「小農」定義的差異,不是世界的差異; 農場數則在各版之間穩定。
  3. Google Flow — 模型與支援功能
    整條管線的依據。8 秒的決定、1:36 的長度、19–20 字的腳本, 全部從「哪些模型支援 First+Last、各支援幾秒」這一張表推導出來。 這張表在寫作與生成之間的五天內就變動過一次,生成前應重讀。