一款基於 Windows WPF 的桌面應用程式,實現了核心功能並整合了多種提升使用者體驗的實用功能。
大部分頁面視窗左側為資訊區域,顯示點播 / 剪輯的縮圖(若可用)、實況主、建立日期和標題;視窗中部包含人物設定;右側為事件記錄區域。
從 Twitch 下載點播 / 精選內容。
要開始操作,請輸入有效點播 / 精選內容連結 / ID。若內容為私有或訂閱限定,則需提供具有訪問許可權帳戶的 OAuth 令牌。解鎖下載選項後即可自訂任務。
Quality(畫質):選擇下載畫質並顯示預估檔案大小。Twitch 有時會將最高品質稱為“Source”(源)而非一般解析度格式(如圖 1.1 所示的 1080p60)。
Trim Mode(裁剪模式):設定影片裁剪處理方式。精確裁剪可能在前後幾秒出現影音卡頓;安全裁剪可避免卡頓,但可能使影片稍長。
Trim(裁剪):以 [時] [分] [秒] 的格式設定裁剪起止時間。裁剪將減少總下載量。
Download Threads(下載執行緒):啟用的並行下載執行緒數量。
OAuth:用於下載訂閱限定或私有影片的授權令牌。Twitch 要求此令牌以防止未授權下載付費 / 私有內容。獲取 OAuth 令牌教學:https://youtu.be/1MBsUoFGuls。請勿向任何人分享你的 OAuth 令牌!
Download(下載):開始下載任務。透過下拉選單選擇「Enqueue(新增至隊列)」可將任務傳送至任務隊列。兩種方式均使用目前下載設定。
從 Twitch 下載剪輯。
要開始操作,請輸入有效剪輯連結 / ID。解鎖下載選項後即可自訂任務。
Quality(畫質):選擇剪輯下載畫質。
Encode Metadata(編碼中繼資料):使用 FFmpeg 將剪輯中繼資料(如直播日期和剪輯 ID)編碼至最終 MP4 檔案。
Download(下載):開始下載任務。透過下拉選單選擇「Enqueue(新增至隊列)」可將任務傳送至任務隊列。兩種方式均使用目前下載設定。
Downloads the chat of a VOD, highlight, or clip.
要開始操作,請輸入有效點播 / 精華片段 / 剪輯連結 / ID。解鎖下載選項後即可自訂任務。若點播或精華片段為私有或訂閱限定,則無法下載聊天。此為 Twitch API 限制,而非 TwitchDownloader。
Download Format(下載格式):聊天儲存格式。
JSON:輸出富文字聊天記錄,可用於更新和繪製;Text:輸出原始文字格式,適合觀看影片時閱讀;HTML:輸出模擬 Twitch 網頁介面的本機網頁。
Compression(壓縮)(僅 JSON):使用 GZip 壓縮標準減小檔案體積(40-90%)。若需手動編輯聊天檔案(不使用聊天更新器功能則不推薦啟用)。
Timestamp Format(時間戳格式)(僅 Text):文字下載中的時間戳格式。可選 UTC、Relative(影片相對時間)或 None(無)。
Trim(裁剪):以 [時] [分] [秒] 的格式設定裁剪起止時間。裁剪將減少總下載量。
Embed Images(嵌入圖片)(僅 JSON 和 HTML):下載實況主表情和徽章並嵌入聊天檔案。檔案體積將顯著增大。
3rd Party Emotes(第三方表情)(僅 JSON 和 HTML):同時下載指定第三方平臺的表情並嵌入聊天檔案。若實況主未在平臺註冊則自動跳過。
Download Threads(下載執行緒):啟用的並行下載執行緒數量。部分網路環境下,Twitch 伺服器可能限制僅使用 1 個執行緒。
Download(下載):開始下載任務。透過下拉選單選擇「Enqueue(新增至隊列)」可將任務傳送至任務隊列。兩種方式均使用目前下載設定。
更新 JSON 聊天檔案中嵌入的表情、徽章、位元及裁剪範圍,並 / 或將 JSON 聊天檔案轉換為另一種格式。
要開始操作,請點選「Browse(瀏覽)」按鈕並選擇先前下載的 JSON 聊天檔案。解鎖下載選項後即可自訂任務。若源影片仍存在,其資訊將載入至資訊區域。
Download Format(下載格式):聊天儲存格式。
JSON:輸出富文字聊天記錄,可用於更新和繪製;Text:輸出原始文字格式,適合觀看影片時閱讀;HTML:輸出模擬 Twitch 網頁介面的本機網頁。
Compression(壓縮)(僅 JSON):使用 GZip 壓縮標準減小檔案體積(40-90%)。若需手動編輯聊天檔案(不使用聊天更新器功能則不推薦啟用)。
Timestamp Format(時間戳格式)(僅 Text):文字下載中的時間戳格式。可選 UTC、Relative(影片相對時間)或 None(無)。
Trim(裁剪):以 [時] [分] [秒] 的格式設定裁剪起止時間。擴大範圍將嘗試獲取原下載未包含的聊天;縮小範圍不會刪除聊天。
Embed Missing(嵌入缺失項)(僅 JSON 和 HTML):下載原始 JSON 未包含的表情或徽章。已有項不會被覆蓋。
Replace Embeds(取代嵌入項)(僅 JSON 和 HTML):丟棄原始 JSON 中所有現存表情和徽章並重新下載。
3rd Party Emotes(第三方表情)(僅 JSON 和 HTML):同時下載指定第三方平臺表情並嵌入聊天檔案。若實況主未在平臺註冊則自動跳過。
Update(更新):開始更新任務。透過下拉選單選擇「Enqueue(新增至隊列)」可將任務傳送至任務隊列。兩種方式均使用目前更新設定。
將聊天 JSON 繪製為影片。
要開始操作,請點選「Browse(瀏覽)」按鈕並選擇先前下載的 JSON 聊天檔案。隨後即可透過繪製選項自訂任務。
繪製:開始繪製任務。透過下拉選單選擇「Enqueue(新增至隊列)」可將任務傳送至任務隊列;選擇「Partial Render(部分繪製)」可繪製聊天片段(見圖 5.6)。所有方式均使用目前繪製設定。
Width(寬度):輸出影片的寬(必須為偶數)。
Height(高度):輸出影片的高(必須為偶數)。
Font(字型):輸出影片所用字型(Twitch 網站使用 Inter,本工具內建為 Inter Embedded)。
Font Size(字型大小):字型大小。
Font Color(字型顏色):訊息字型顏色。
Background Color(背景顏色):輸出影片背景顏色。
Alt Background Color(交替背景顏色):訊息替代背景顏色(需啟用「Alternate Backgrounds〔交替背景〕」)。
Outline(邊框):為使用者名稱和訊息新增細黑邊。
Timestamps(時間戳):在訊息旁顯示相對於影片開始的時間。
Sub Messages(訂閱訊息):繪製訂閱、續訂及禮物訊息。停用後將過濾此類訊息。
Chat Badges(聊天徽章):在使用者名稱旁顯示徽章。
Update Rate(更新頻率):繪製下批評論時間間隔(秒)。值越低聊天流越易讀,但略微增加繪製時間。
Dispersion(離散化):2022 年 11 月 Twitch API 變更後,聊天訊息僅能按整秒下載。此選項嘗試使用中繼資料還原訊息實際傳送時間,可能導致評論順序變化(需將更新頻率設定為小於 1.0 以獲得有效效果)。
Alternate Backgrounds(交替背景):隔行切換訊息背景顏色以提高辨識度。
Increase Username Visibility(增強使用者名稱可見性):提高使用者名稱與背景的對比度(類似於 Twitch 的「可讀顏色」選項)。啟用描邊時,此選項將增強使用者名稱與描邊的對比度。
BTTV Emotes(BTTV 表情):啟用 BTTV 平臺表情繪製。
FFZ Emotes(FFZ 表情):啟用 FFZ 平臺表情繪製。
7TV Emotes(7TV 表情):啟用 7TV 平臺表情繪製。
Offline(離線):僅使用 JSON 中嵌入的資訊和圖片繪製(無網路請求)。
User Avatars(使用者大頭貼):在繪製中顯示使用者大頭貼。
Chat Badge Filter(聊天勳章過濾器):不繪製指定徽章(例如圖 5.2 中永不繪製「No Autio / No Video〔無音訊 / 無影片〕」徽章)。
Ignore Users List(封鎖使用者列表):逗號分隔、不區分大小寫的使用者列表(繪製時將移除)。例如圖 5.2 將移除 Streamlabs、StreamElements 和 Nightbot。
Banned Words List(封鎖詞列表):逗號分隔、不區分大小寫的停用詞列表(包含這些詞的訊息將被移除)。例如圖 5.2 將移除包含 " pog "、"[pOg+"、"/POg9" 的訊息,但保留包含 " poggers " 的訊息。
Emoji Vendor(Emoji 提供者):繪製所用表情符號風格。支援 Twitter 的 Twemoji、Google 的 Noto Color 及系統預設表情(None〔無〕)。
Emote Scale(表情比例):表情縮放比例。
Badge Scale(徽章比例):徽章縮放比例。
Emoji Scale(Emoji 比例):Emoji 縮放比例。
Avatar Scale(大頭貼比例):大頭貼縮放比例。
Outline Scale(描邊比例):描邊粗細比例。
Vertical Spacing Scale(垂直間距比例):訊息間垂直間距比例。
Side Padding Scale(側邊距比例):水平內邊距比例。
Section Height Scale(區域高度比例):單行文字高度比例。
Word Spacing Scale(詞間距比例):詞語間水平間距比例。
Emote Spacing Scale(表情間距比例):表情與表情 / 詞語間的間距比例。
Highlight Stroke Scale(突顯描邊比例):突顯 / 訂閱訊息側邊欄寬度比例。
Highlight Indent Scale(突顯縮排比例):突顯 / 訂閱訊息縮排比例。
File Format(檔案格式):輸出影片格式。
Codec(編解碼器):輸出影片所用編解碼器。
Framerate(幀速率):輸出影片幀速率。
Generate Mask(生成遮罩):生成包含文字和影像黑白遮罩的副檔案。背景顏色 Alpha 通道必須小於 255。
Sharpening(銳化):對繪製影片應用銳化濾鏡。略微增加繪製時間和檔案大小(建議字型大小大於等於 24 時使用)。
警告:修改 FFmpeg 參數可能導致管道錯誤!
Input Arguments(輸入參數):控制 FFmpeg 繪製輸入的參數。
Output Arguments(輸出參數):控制 FFmpeg 編碼輸出的參數。
Reset To Defaults(重設為預設值):重設 FFmpeg 參數至預設狀態。
若繪製速度過慢,可嘗試以下方式:
| 顯著提升 | 中等提升 | 輕微提升 |
|---|---|---|
| 降低繪製寬度 | 停用 BTTV、FFZ、7TV 表情 | 更新頻率小於 1.0 時停用離散化 |
| 降低繪製高度 | 提高更新頻率 | 停用訂閱訊息 |
| 降低幀速率 | 切換至系統 Emoji | 停用描邊 |
| 停用生成遮罩 | 停用交替背景 | |
| 停用影像銳化 | 停用使用者大頭貼 | |
| 切換編碼器至 H.264 |
建立並管理多個任務。
任務隊列支援多個任務順序或並行執行。其他 5 個頁面的任務均可透過「Enqueue(新增至隊列)」按鈕傳送至任務隊列(見圖 6.5)。
任務隊列頁面包含 4 類限制器:
VOD Downloads(點播下載):同時進行的點播 / 精華片段下載任務數量。
Clip Downloads(剪輯下載):同時進行的剪輯下載任務數量。
Chat Downloads(聊天下載):同時進行的聊天下載 / 更新任務數量。
Chat Renders(聊天繪製):同時進行的聊天繪製任務數量。
任務隊列還支援 3 種批次下載模式:
URL List(URL 列表):一個使用相同設定批次處理點播、精華片段、剪輯 URL 的列表(見圖 6.2 和 6.5)。
Search VODs(搜尋點播):一個搜尋實況主所有點播並使用相同設定批次處理的視窗(見圖 6.3 和 6.5)。
Search Clips(搜尋剪輯):一個搜尋實況主所有剪輯並使用相同設定批次處理的視窗(見圖 6.3 和 6.5)。
管理應用程式行為。
Cache Folder(快取資料夾):臨時工作檔案儲存目錄(含點播下載、表情、徽章等)。
- Clear(清除):刪除所有快取檔案(僅推薦異常時使用)。
- Browse(瀏覽):選擇新快取目錄(不遷移現有檔案)。
Hide Donation Button(隱藏捐贈按鈕):隱藏捐贈按鈕。
Time Format(時間格式):控制介面和檔案名模板中的時間顯示格式。
Verbose Errors(詳細錯誤):啟用錯誤時的詳細彈出視窗提示。
Theme(主題):應用程式主題(詳見主題)。
Language(語言):應用程式語言。(詳見在地化)。
Maximum Thread Bandwidth(最大執行緒寬頻):單個下載執行緒最大頻寬(單位:KiB/s)。
Log Levels(日誌級別):啟用不同日誌級別以便於除錯。
Download Filename Templates(下載檔案名模板):下載檔案的預設命名模板。
Restore Defaults(重設為預設值):重設所有設定(含各頁面記憶設定)。重新啟動後生效。
Save(儲存):儲存目前設定並關閉視窗。
Cancel(取消):放棄更改並關閉視窗。
以下問題不屬於應用程式錯誤,請附帶復現步驟提交 GitHub Issue:
- 影片下載卡在
99%超過 5 分鐘 - 聊天繪製狀態超過 10 秒未更新
- 繪製後聊天缺失訊息
- UI 元素未響應主題切換
- 選項更改(如嵌入表情)未生效
「常見錯誤」指任務開始前或啟動後立即發生的錯誤,通常附帶友好錯誤說明(可能含彈出視窗)。例如:
- 無法獲取縮圖
- 點播已過期或正在直播
- 無法獲取影片 / 剪輯資訊
- 點播 / 剪輯無效、被移除、為私有或訂閱限定影片未提供有效 OAuth
- 無法解析輸入
- 繪製輸入無效(詳見日誌)
「罕見錯誤」表現為「致命錯誤」彈出視窗或不友好的錯誤資訊。請附帶復現步驟提交 GitHub Issue。例如:
- Error converting value 'XXX' to type 'XXX'. Path 'XXX', line #, position #.(型別轉換錯誤)
- Cannot access child value on Newtonsoft.Json.Linq.JValue.(JSON 解析異常)
- Response status code does not indicate success:404 (Not Found).(網路響應異常)
- The pipe has been ended.(管道終止)
- FFmpeg 異常。請重設參數後重試,若仍失敗請提交 Issue。
為便於定位錯誤,請在設定中啟用「詳細錯誤」並截圖儲存「詳細錯誤輸出」彈出視窗。
本應用程式支援多語言,感謝社群成員的翻譯貢獻。
如果你對自己的翻譯能力有信心,且 TwitchDownloaderWPF 尚未提供你的母語版本,或你的母語版本翻譯尚不完整,我們誠邀你加入翻譯團隊!
如果你需要幫助,可以查閱 commit 53245be1fe55768d525905e81cc2cd0c12469b03、查閱 AvailableCultures.cs、查閱原始在地化討論貼、或提交 Issue 尋求幫助。
不確定的字串可保留英文原文。
此應用程式支援使用者自訂主題!
要開始製作,只需複製其中一個內建主題,並用你喜歡的文字編輯器開啟它。
HandyControl 元素不提供完整的主題支援,但它們包含一個深色變體,因此專門提供了布林鍵。
布林鍵控制:
- 標題欄主題
- HandyControl 元素主題
- …
SolidColorBrush 鍵控制顏色屬性:
- 應用程式背景
- 文字顏色
- 邊框顏色
- …
Inner 鍵用於為雙遞迴元素新增視覺深度。以下圖表說明了層次結構:
+----------------------------[-][#][x]-+
| AppBackground |
| +----------------------------------+ |
| | AppElementBackground | |
| | +------------------------------+ | |
| | | AppInnerElementBackground | | |
| | +----------------------------- + | |
| +----------------------------------+ |
+--------------------------------------+
使用範例:
AppElementBackground用於框架元素AppInnerElementBackground用於帶邊框的標籤、空白影像背景等。
如果你製作了一個主題並希望將其包含在官方 Release 中,請提交 GitHub Pull Request。
重要注意事項:
Dark.xaml和Light.xaml將在應用程式啟動時被覆蓋。- 檔案名不區分大小寫(例如
Dark.xaml=dark.xaml)。 - 編輯主題檔案頂部的作者註釋!
有關製作自訂主題的離線說明,請參閱 Themes/README.txt,此檔案會在每次執行時重新生成。
















