simreel 是做什麼的?
在 iOS 模擬器中錄製使用者真實的 App,並將其剪輯成兩個檔案:
reel-1080x1920.mp4:將錄製內容嵌入帶有漸層背景的手機框架中,每個場景附帶一個字幕,並包含一個結尾卡片。適用於 X(原 Twitter)、Reels、TikTok、Product Hunt。appstore-preview-886x1920.mp4:純錄製內容,調整尺寸和編碼以符合 App Store Connect 的要求。
所有操作都在本地使用 Xcode 和 ffmpeg 完成。無需帳戶,無需付費 API。
規則
- 僅展示 App 的真實功能。字幕應描述螢幕上的內容;切勿添加錄製畫面未顯示的主張、數據或評論。
- 避免私人資料入鏡。使用全新的模擬器或 Demo 資料,並在交付前檢查每一幀畫面。
- 僅操作指定的模擬器。其他正在啟動的模擬器可能屬於其他人的工作;當有超過一個模擬器在運行時,切勿使用
booted。 - 除非使用者另有指示,否則在錄製期間拒絕追蹤和 Cookie 對話框。
步驟
- 找到模擬器。
xcrun simctl list devices booted。如果 App 尚未安裝,使用使用者自己的工具來建置和安裝。 - 先不錄製,走一遍 App。 挑選 3 到 5 個展示主要功能的時刻。現在就清除引導、權限和 Cookie 對話框,讓它們在正式拍攝時不出現。
- 錄製一次。
在每個你想保留的畫面上停留約一秒鐘。如果在模擬器啟動後立即點擊失敗,請等待 20 秒後重試。scripts/record.sh start work/raw.mp4 <UDID> # 驅動 App:使用你的模擬器工具、專案中的 XCUITest,或請使用者手動操作 scripts/record.sh stop <UDID> - 檢查錄製內容。 檔案會在最後一次螢幕變化時結束,因此一個靜止的最終畫面會被截斷,而一個從未改變的畫面錄製內容幾乎是空的。根據檔案時間來標記場景時間,而不是憑記憶。
打開python3 scripts/compose.py frames work/raw.mp4 workwork/contact-sheet.png:每行 8 個方格,方格的編號 N 代表第 N 秒。 - 編寫
storyboard.json。{ "app_name": "MyApp", "background": ["#0B1020", "#3B2AA8"], "scenes": [ {"start": 0.3, "end": 5.8, "caption": "此畫面功能"}, {"start": 8.0, "end": 10.0, "speed": 0.8, "caption": "下一步"} ], "end_card": {"title": "MyApp", "subtitle": "App 本身的標語"} }start/end是錄製內容中的秒數。speed低於 1 會減慢場景,高於 1 會加速。hold會將場景的最後一幀凍結指定的秒數,用於在結果畫面上停留。background可以是一個顏色或一個由上到下的漸層;text_color和caption_size是可選的。省略end_card則在最後一個場景結束。清除載入中的轉圈動畫。所有場景的總時長必須在 15 到 30 秒之間,否則 App Store Connect 會拒絕預覽。 - 渲染。
它會輸出python3 scripts/compose.py render work/raw.mp4 storyboard.json outout/report.json,並在預覽時長超出範圍時發出警告。 - 交件前再次檢查。 從每個場景中提取一幀畫面(
ffmpeg -ss <t> -i out/reel-1080x1920.mp4 -frames:v 1 f.png)並檢查:字幕是否與畫面相符,是否包含私人資料,畫面是否被截斷。
備註
- 需求:macOS、Xcode(用於
simctl和swift)、ffmpeg、python3。 record.sh會將狀態列設為 9:41,並顯示滿格電量和訊號。之後使用xcrun simctl status_bar <UDID> clear清除設定。- 此處使用的 App Store 預覽規格(886x1920,15-30 秒,30 fps,H.264 High 4.0,立體聲 AAC)來自 Apple 的 App 預覽規格。如果上傳被拒絕,請查閱該頁面。
- 音軌是靜音的。如需音樂或人聲,請在編輯器中添加。