Video视频首尾帧
Logo stingThe logo sting
3.2 seconds, silent: write, then heal, then the wordmark rises.
AI 时代的基建,从每一个字节算起。AI infrastructure, accounted for byte by byte.
Intro timing
3.2 s · 1920 × 1080| Time | Element | Action | Easing |
|---|---|---|---|
| 0.00–0.12 s | Frame | Ink field, 3 lead-in frames (25 fps) | — |
| 0.12–0.58 s | Stripe D1–D4 · P1–P2 | Write in 80 ms apart; each 0 → 50% → 100% in 60 ms | steps(2) |
| 0.60 s | D2 | Drops out: solid to dashed | Cut |
| 0.84–0.96 s | D2 slot | Oxide flash 25% → 100% | steps(2) |
| 0.96–1.20 s | D2 | Oxide back to Signal Blue; rebuilt | ease-standard · 240 ms |
| 1.20–2.02 s | Wordmark R · U · S · T · F · S | Letters rise from the baseline, clipped to the box; 80 ms apart | ease-emphasized · 420 ms |
| 2.00–2.42 s | Brand line | Opacity 0 → 100%, up 1.5u | ease-standard · 420 ms |
| 2.42–3.20 s | All | Hold | — |
Five-second outro
5.0 s · 1920 × 1080For channels without an end screen (Bilibili, Douyin, event recordings); YouTube uses the end card.
| Time | Element | Action | Easing |
|---|---|---|---|
| 0.00–0.12 s | Frame | Ink field, 3 lead-in frames | — |
| 0.12–0.58 s | Stripe | As the intro | steps(2) |
| 0.60–1.42 s | Wordmark | As the intro | ease-emphasized · 420 ms |
| 1.40–1.82 s | Brand line | Fades up 1.5u | ease-standard · 420 ms |
| 1.60–2.02 s | rustfs.com | Fades up 1.5u, 200 ms after the line | ease-standard · 420 ms |
| 2.02–4.28 s | All | Hold | — |
| 4.28–5.00 s | All | Fade to Ink | ease-exit · 720 ms |
FramesFrame templates
Text stays inside 90% title safe; graphics inside 93% action safe.
标题居左,最多两行Titles sit left, two lines at most
- ① 动作安全区 93% · 1786 × 1004① Action safe 93% · 1786 × 1004
- ② 标题安全区 90% · 1728 × 972② Title safe 90% · 1728 × 972
- ③ 内容边距 10u × 7u · 108 × 76 px③ Content frame 10u × 7u · 108 × 76 px
用 Docker 部署单节点 RustFSDeploy single-node RustFS with Docker
从准备数据目录到连接 S3 客户端,共 6 章。Six chapters, from preparing data directories to connecting an S3 client.
登录控制台Sign in to the Console
http://localhost:9001- 01准备目录Prepare directories
- 02启动容器Run the container
- 03登录控制台Sign in to the Console
- 04创建存储桶Create a bucket
- 05创建访问密钥Create access keys
- 06连接 S3 客户端Connect an S3 client
一个对象,六个分片One object, six shards
# 数据目录须对 UID 10001 可写# data directories must be writable by UID 10001 $ mkdir -p data logs $ chown -R 10001:10001 data logs $ docker run -d -p 9000:9000 -p 9001:9001 \ -v $(pwd)/data:/data \ -v $(pwd)/logs:/logs \ rustfs/rustfs:latest # S3 API http://localhost:9000 # Console http://localhost:9001
AI 时代的基建,从每一个字节算起。AI infrastructure, accounted for byte by byte.
rustfs.comdocs.rustfs.comgithub.com/rustfs/rustfs
RustFS 1.0 架构解读Inside RustFS 1.0
用 Docker 部署Run it on Docker
纠删码原理Erasure coding, explained
演讲Talk · 活动名称Event name从 MinIO
迁移到 RustFS
坏了两块盘,
数据为什么还在?Why does data survive two dead drives?
EC 4+2:任意 2 块盘离线,数据仍可读取。EC 4+2: any two drives can fail and the data still reads.
RustFS 音频RustFS Audio
Thumbnails at actual size
168 px wide · suggested list and sidebar用 Docker 部署Run it on Docker
纠删码原理Erasure coding, explained
演讲Talk · 活动名称Event name从 MinIO
迁移到 RustFS
The main title must read at 168 px; small type never carries essential information.
SpecsDelivery specs
Platform rules change; check crops and overlays in the platform preview before publishing.
Formats and frame rates
| Use | Size | Ratio | Frame rate | Rule |
|---|---|---|---|---|
| Talks, tutorials, release videos | 1920 × 1080 | 16:9 | 25 / 30 fps | 25 fps in mainland China and Europe, 30 fps in North America; one rate per project; 4K is 3840 × 2160 |
| Screen recordings | 1920 × 1080 | 16:9 | 30 / 60 fps | 60 fps for scrolling or animation; record at delivery size, never upscale |
| Vertical short video | 1080 × 1920 | 9:16 | 30 fps | One master for Douyin, Shorts, Reels and Channels |
| Livestream | 1920 × 1080 | 16:9 | 30 fps | Overlay PNG as the bottom OBS layer |
| Sting, outro | 1920 × 1080 | 16:9 | 25 / 30 / 60 fps | One version per frame rate, matching the project |
| YouTube thumbnail | 1280 × 720 | 16:9 | — | JPG / PNG, ≤ 2 MB |
| Bilibili cover | 1146 × 717 | 16:10 | — | No text in the bottom 15% |
| Podcast / audio cover | 1500 × 1500 | 1:1 | — | RGB, JPG / PNG; Apple Podcasts needs 1400–3000 px |
Safe areas and minimum sizes
At 1920 × 1080| Item | Value | Rule |
|---|---|---|
| Action safe | 93% · 1786 × 1004 | Meaningful graphics; 3.5% in from each edge |
| Title safe | 90% · 1728 × 972 | All text; 5% in from each edge |
| Content frame | 10u × 7u · 108 × 76 px | Template text margin, inside title safe |
| Vertical UI zones | Top 14% · bottom 20% · right 12% | No text or subject; profile grids crop to a centred 3:4, so centre the title |
| Body text | ≥ 3u · 32 px | Any sentence on 16:9 |
| Labels | ≥ 2.5u · 27 px | Mono caps, one step above article covers |
| Code | ≥ 3u · 32 px | ≤ 14 lines, 60 columns per screen |
| Vertical text | ≥ 3.5u · 38 px | At 1080 × 1920; titles ≥ 10u, labels ≥ 2.5u |
| Thumbnail title | ≥ 13u · 94 px | At 1280 × 720; about 12 px at 168 × 94 |
Captions
| Item | Rule |
|---|---|
| Line length | Chinese ≤ 16 characters, English ≤ 42; two lines max |
| Size and face | Chinese ~48 px (4.5u), English ~38 px (3.5u); Geist / HarmonyOS Sans, Medium, white |
| Box | Ink 80%, square, hugging each line; never outlines, shadows or glows |
| Position | Centred, 7u (76 px) above the bottom; clear of the lower third |
| Bilingual | Chinese above, English below, one line each |
| Punctuation | Chinese commas and full stops become spaces; question, quotation and title marks stay. English: normal punctuation, sentence case |
| Timing and files | 1–7 s each; upload SRT / WebVTT (UTF-8); burn in on vertical shorts |
Sound and colour
| Item | Value | Rule |
|---|---|---|
| Audio logo | None | Sting and outro are silent; music only when licensed, licence archived with the project |
| Loudness | −14 LUFS · ≤ −1 dBTP | Online; broadcast follows EBU R 128 (−23 LUFS) |
| Colour space | Rec.709 · SDR | Tag BT.709 on export to avoid colour shifts |
| Brand colour · online | #0062FF · #FF5E14 | sRGB values as they are |
| Brand colour · broadcast | Legal range 16–235 | Legalise and check the scopes; never bypass it to keep the hex values |