視頻字幕流水線:編碼、時(shí)間軸與壓制實(shí)踐)
在把《神話與科學(xué)》part1 的字幕文件交給播放器之前很多人猜不到一個(gè)跑團(tuán)視頻能和“bug”這個(gè)詞綁得這么緊。標(biāo)題里那句“bug一樣鬼畜”原本是形容視頻內(nèi)容但如果真的動(dòng)手做過字幕熟肉就會(huì)發(fā)現(xiàn)這句話同時(shí)也是一句工程技術(shù)結(jié)論時(shí)間軸對(duì)不上、字幕亂碼、字體顯示成方框、ASS 特效標(biāo)簽失效、壓制之后畫質(zhì)崩掉隨便哪一個(gè)都足以讓一期視頻在發(fā)布前變成事故現(xiàn)場(chǎng)。這篇文章不打算劇透《神話與科學(xué)》的故事內(nèi)容也不會(huì)討論視頻里某個(gè)角色的“鬼畜”操作。我想聊的是另一條線把一個(gè) CoC 跑團(tuán)視頻從生肉變成一套可播放、可分享、可被彈幕搬運(yùn)的熟肉為什么本質(zhì)上是一次小型軟件工程實(shí)踐為什么最容易出 bug 的環(huán)節(jié)往往不是翻譯而是字幕編碼、時(shí)間軸、字體和壓制以及如何用 Python 和 ffmpeg 把這些環(huán)節(jié)搭成一條可以重復(fù)執(zhí)行、可以自動(dòng)驗(yàn)證的流水線。1. 為什么說(shuō)跑團(tuán)視頻熟肉是一門“工程活”CoC 跑團(tuán)視頻的典型特點(diǎn)是長(zhǎng)。一場(chǎng)完整的跑團(tuán)實(shí)況動(dòng)輒幾十分鐘分 part 發(fā)布之后每個(gè) part 里又有大量角色對(duì)話、場(chǎng)景描述、骰子判定和氣氛音效。字幕工作不只是“翻譯”還包括打軸、拆分、特效、字體、校對(duì)、壓制和發(fā)布多個(gè)環(huán)節(jié)。如果你只是給自己看花半天時(shí)間用文本編輯器硬改時(shí)間軸其實(shí)也能湊合。但當(dāng)一個(gè)系列有幾十個(gè) part或者團(tuán)隊(duì)里有多名成員分工時(shí)人工硬改就不再是可行方案。原因很簡(jiǎn)單字幕文件是純文本卻有自己的語(yǔ)法規(guī)則視頻容器與編碼有自己的約束播放器和壓制器對(duì)字幕語(yǔ)法的解釋又存在差異。任何一個(gè)環(huán)節(jié)理解不一致都會(huì)表現(xiàn)為一個(gè)具體的 bug。這里說(shuō)的 bug 和傳統(tǒng)軟件開發(fā)里的 bug 并不完全一樣。軟件 bug 通常是代碼邏輯錯(cuò)誤跑團(tuán)視頻字幕 bug 則更多是“格式與語(yǔ)義”錯(cuò)位。比如時(shí)間軸差了 300 毫秒用戶看起來(lái)就是字幕比聲音慢半拍編碼聲明是 UTF-8實(shí)際文件里卻混入 GBK 字節(jié)結(jié)果播放器里出現(xiàn)亂碼ASS 特效標(biāo)簽少寫一個(gè)右大括號(hào)整段特效直接失效或者被解析成普通文本。這些問題不是“再翻譯一遍”能解決的而是需要建立一套可重復(fù)的檢查機(jī)制。從工程視角看熟肉制作完全可以類比為一條 CI 流水線輸入是生肉視頻與原文底稿中間經(jīng)過翻譯、打軸、特效、壓制的多個(gè)“構(gòu)建步驟”輸出是成品視頻。如果不給每個(gè)步驟加驗(yàn)證最終產(chǎn)物出問題時(shí)就只能靠肉眼在一幀一幀里找原因成本極高。2. 熟肉制作鏈路從源視頻到發(fā)布bug 會(huì)出現(xiàn)在哪里2.1 “熟肉”是什么“生肉”指沒有經(jīng)過本地化字幕處理的原始視頻“熟肉”則指帶有翻譯字幕、經(jīng)過后期處理、可供目標(biāo)語(yǔ)言觀眾直接觀看的成品。在跑團(tuán)視頻圈子里很多來(lái)自彈幕站的經(jīng)典系列都會(huì)由愛好者或字幕組整理成“熟肉”發(fā)布。這篇文章討論的“熟肉”不局限于某一種工具而是通用流程。理解流程之后你用 Aegisub、Arctime、Subtitle Edit 還是純命令行都能快速定位問題所在。2.2 一條典型制作鏈路一條成熟的跑團(tuán)視頻熟肉流水線通常包含以下階段素材整理收集生肉視頻、對(duì)話底稿或語(yǔ)音轉(zhuǎn)寫文本。翻譯與本地化將日文或英文臺(tái)詞翻譯成中文同時(shí)處理人名、專有名詞、語(yǔ)氣詞。打軸把每條字幕與音頻對(duì)齊調(diào)整出現(xiàn)時(shí)間與消失時(shí)間。字幕制作生成 SRT 或 ASS 文件配置字體、字號(hào)、邊框、特效。校對(duì)檢查漏譯、錯(cuò)譯、時(shí)間軸漂移和屏幕位置。壓制將字幕燒錄進(jìn)視頻或封裝為軟字幕。發(fā)布與驗(yàn)證在不同播放器、不同設(shè)備上驗(yàn)證顯示效果。很多個(gè)人翻譯者會(huì)把“打軸校對(duì)壓制”混在一起一邊看視頻一邊手動(dòng)調(diào)整。單個(gè) part 可以這么干但一旦形成系列就必須把幾個(gè)階段拆開因?yàn)槌鰡栴}之后你需要知道 bug 到底是在哪個(gè)階段被引入的。2.3 bug 分類總覽從實(shí)際排障經(jīng)驗(yàn)看字幕熟肉相關(guān)的 bug 可以分成五類分類典型表現(xiàn)引入階段編碼類播放器顯示亂碼、壓制時(shí)字幕消失字幕文件保存、格式轉(zhuǎn)換時(shí)間軸類字幕整體偏移、單條字幕提前或滯后打軸、視頻剪輯渲染類字體變方框、特效標(biāo)簽失效ASS 樣式、字體安裝、播放器解析壓制類畫面模糊、字幕閃爍、音畫不同步ffmpeg 參數(shù)、濾鏡鏈工具類軟件閃退、字幕無(wú)法導(dǎo)入環(huán)境配置、版本兼容這張表在后面每一節(jié)都會(huì)用到。遇到問題時(shí)先判斷現(xiàn)象屬于哪一類再?zèng)Q定往哪個(gè)方向排查會(huì)比拿著播放器反復(fù)拖動(dòng)進(jìn)度條高效得多。3. 環(huán)境準(zhǔn)備字幕處理工具鏈在開始批量處理之前先準(zhǔn)備好幾樣基礎(chǔ)工具。版本不需要刻意追新以當(dāng)前主流穩(wěn)定版為準(zhǔn)即可關(guān)鍵是保證 Python 和 ffmpeg 都正常工作。3.1 安裝 ffmpegWindows 用戶可以直接通過 winget 安裝winget install Gyan.FFmpegmacOS 用戶如果裝了 Homebrewbrew install ffmpegLinux 用戶按發(fā)行版安裝sudo apt update sudo apt install ffmpeg安裝完成后在終端里執(zhí)行ffmpeg -version看到版本輸出即表示安裝成功。注意看輸出中是否包含 libass 相關(guān)字樣這決定了你能否用 ass 濾鏡直接燒錄 ASS 字幕。3.2 Python 環(huán)境與第三方庫(kù)字幕處理腳本我推薦用 Python 3.9 及以上版本。下面的示例只使用標(biāo)準(zhǔn)庫(kù)另有一個(gè)編碼檢測(cè)示例會(huì)用到 chardet需要單獨(dú)安裝pip install chardet如果你的系統(tǒng)同時(shí)存在 Python 2 環(huán)境建議用 python3 和 pip3 來(lái)規(guī)避混亂。3.3 驗(yàn)證環(huán)境把一段素材放到臨時(shí)目錄后先用 ffprobe 確認(rèn)視頻基本信息ffprobe -v error -show_entries streamcodec_type,codec_name,width,height,r_frame_rate -of json input.mp4執(zhí)行后能看到視頻流、音頻流信息。如果這里輸出為空或報(bào)錯(cuò)說(shuō)明文件本身或路徑有問題通常不需要繼續(xù)往后排查。4. 時(shí)間軸批量偏移一個(gè)必須自動(dòng)化的小場(chǎng)景4.1 為什么需要批量偏移跑團(tuán)視頻最常見的字幕問題是整體時(shí)間軸偏移。造成偏移的原因很多片源開頭多了 0.5 秒黑屏、視頻被剪輯軟件重新導(dǎo)出后幀率變化、字幕文件的基準(zhǔn)時(shí)間軸來(lái)自另一個(gè)版本。手動(dòng)在 Aegisub 里逐條拖動(dòng)幾千條字幕顯然不現(xiàn)實(shí)寫一個(gè)批量偏移腳本幾十毫秒就能解決。下面先給出 SRT 格式的偏移腳本。SRT 時(shí)間行格式為小時(shí):分鐘:秒,毫秒例如00:01:23,456。import re import sys def shift_srt_time(ts: str, offset_ms: int) - str: h, m, s, ms map(int, re.split(r[:,], ts)) total_ms ((h * 60 m) * 60 s) * 1000 ms offset_ms if total_ms 0: total_ms 0 return f{total_ms // 3600000:02d}:{total_ms % 3600000 // 60000:02d}:{total_ms % 60000 // 1000:02d},{total_ms % 1000:03d} def offset_srt(input_path: str, output_path: str, offset_ms: int): pattern re.compile( r(\d{2}:\d{2}:\d{2},\d{3}) -- (\d{2}:\d{2}:\d{2},\d{3}) ) with open(input_path, r, encodingutf-8) as f: content f.read() def replace(m: re.Match) - str: start shift_srt_time(m.group(1), offset_ms) end shift_srt_time(m.group(2), offset_ms) return f{start} -- {end} shifted pattern.sub(replace, content) with open(output_path, w, encodingutf-8) as f: f.write(shifted) if __name__ __main__: offset_srt(sys.argv[1], sys.argv[2], int(sys.argv[3]))這段腳本的核心邏輯是正則匹配時(shí)間行把每個(gè)時(shí)間點(diǎn)轉(zhuǎn)換為毫秒再統(tǒng)一加上偏移量。如果偏移量為正字幕整體向后移動(dòng)為負(fù)則整體向前移動(dòng)。負(fù)偏移可能導(dǎo)致小于 0 的時(shí)間腳本里直接用total_ms 0做了鉗制避免生成非法時(shí)間。使用方式python3 offset_srt.py input.srt output.srt 500執(zhí)行后打開 output.srt 檢查第一行和最后一行的時(shí)間是否已經(jīng)變化。如果你處理的是 ASS 文件時(shí)間格式不同例如0:01:23.45但思路完全一致只需要把,換成.并調(diào)整毫秒位數(shù)。這個(gè)腳本雖然短但它代表了一個(gè)很重要的工程原則批量、可重復(fù)、可逆。比手動(dòng)改幾千行更可靠的是讓腳本處理并且保留原始輸入文件一旦偏移量選錯(cuò)可以立刻重新生成。5. 字幕編碼 Bug亂碼的根源與排查5.1 常見編碼問題字幕文件亂碼是新手最容易遇到的坑。原因通常是把文件以 GBK 或 ANSI 編碼保存然后播放器或壓制器按照 UTF-8 解析或者反過來(lái)。更隱蔽的情況是文件頭既沒有 BOM 也沒有明確的編碼聲明只在內(nèi)容里混入少量非 ASCII 字符導(dǎo)致自動(dòng)檢測(cè)工具判斷失誤。在實(shí)際項(xiàng)目中最穩(wěn)妥的做法是強(qiáng)制統(tǒng)一為 UTF-8 編碼并優(yōu)先使用帶 BOM 的 UTF-8。BOM 能讓部分 Windows 播放器更早識(shí)別編碼。很多字幕編輯軟件的默認(rèn)設(shè)置未必是這個(gè)所以每次從工具導(dǎo)出后都應(yīng)該檢查一遍。5.2 編碼檢測(cè)與轉(zhuǎn)換腳本用 chardet 可以快速檢測(cè)文件編碼再統(tǒng)一轉(zhuǎn)換到 UTF-8。下面腳本適應(yīng) SRT 和 ASS 文件import sys from pathlib import Path import chardet def detect_encoding(path: str) - str: raw Path(path).read_bytes() result chardet.detect(raw) encoding result.get(encoding) or utf-8 print(fdetected: {encoding}, confidence{result.get(confidence)}) return encoding def convert_to_utf8(input_path: str, output_path: str): raw Path(input_path).read_bytes() encoding detect_encoding(input_path) try: text raw.decode(encoding, errorsreplace) except LookupError: text raw.decode(utf-8, errorsreplace) Path(output_path).write_text(text, encodingutf-8-sig) print(converted to UTF-8 with BOM) if __name__ __main__: convert_to_utf8(sys.argv[1], sys.argv[2])執(zhí)行python3 convert_encoding.py 原字幕.srt 轉(zhuǎn)碼字幕.srt注意errorsreplace會(huì)把無(wú)法解碼的字節(jié)替換為替換字符這在多數(shù)情況下能避免崩潰但替換之后的文字已經(jīng)不是原始內(nèi)容所以如果你發(fā)現(xiàn)轉(zhuǎn)換后的字幕中有大量“?”說(shuō)明源文件損壞或編碼檢測(cè)失敗需要回到原工具重新導(dǎo)出。5.3 在 ffmpeg 里避免亂碼用 ffmpeg 燒錄字幕時(shí)亂碼可能來(lái)自兩個(gè)環(huán)節(jié)一是字幕文件本身編碼錯(cuò)誤二是濾鏡參數(shù)沒有指定字體。對(duì)于前者先在 Python 里完成轉(zhuǎn)換對(duì)于后者在 ass 濾鏡里通過fontsdir參數(shù)指定字體目錄即可。-vf ass字幕.ass:fontsdir./fonts如果你在渲染時(shí)看到一堆方塊字通常是字體缺失不是編碼問題。這一點(diǎn)的區(qū)分很重要因?yàn)樗鼪Q定了你下一步是調(diào)編碼還是裝字體。6. ASS 特效標(biāo)簽 Bug一個(gè)典型渲染問題6.1 ASS 文件結(jié)構(gòu)簡(jiǎn)介ASS 是比 SRT 更強(qiáng)大的字幕格式支持字體、顏色、位置、透明度、動(dòng)畫、卡拉OK等特效。但強(qiáng)大也意味著更容易出錯(cuò)。一個(gè) ASS 文件通常包含[Script Info]腳本元數(shù)據(jù)[V4 Styles]樣式定義[Events]字幕事件格式為Dialogue: 層, 開始時(shí)間, 結(jié)束時(shí)間, 樣式, 說(shuō)話人, 字幕內(nèi)容字幕內(nèi)容里的特效標(biāo)簽以大括號(hào)包裹例如{\pos(320,400)}這里是臺(tái)詞 {\fad(200,300)}淡入淡出效果如果大括號(hào)沒有閉合播放器可能把后續(xù)所有內(nèi)容都當(dāng)作標(biāo)簽解析導(dǎo)致整段字幕不顯示。這種 bug 在長(zhǎng)字幕文件里非常隱蔽因?yàn)槿庋廴菀卓绰?.2 標(biāo)簽不閉合的檢查腳本下面腳本只做一件事檢查所有 Dialogue 行中表情簽的左右大括號(hào)是否配對(duì)。import sys from pathlib import Path def check_ass_tags(path: str): lines Path(path).read_text(encodingutf-8).splitlines() errors [] for lineno, line in enumerate(lines, 1): if not line.startswith(Dialogue:): continue depth 0 for ch in line: if ch {: depth 1 elif ch }: depth - 1 if depth 0: errors.append(fline {lineno}: unexpected }}) depth 0 if depth 0: errors.append(fline {lineno}: unclosed {{ x{depth}) if errors: print(\n.join(errors)) sys.exit(1) print(OK: all braces are balanced) if __name__ __main__: check_ass_tags(sys.argv[1])運(yùn)行python3 check_ass_tags.py 字幕文件.ass如果輸出OK說(shuō)明大括號(hào)成對(duì)。但需要注意大括號(hào)配對(duì)成功并不代表標(biāo)簽內(nèi)容合法。比如{\pos}缺少參數(shù)、\t動(dòng)畫語(yǔ)法寫錯(cuò)這類問題腳本查不出來(lái)。更嚴(yán)格的做法是用播放器或 Aegisub 逐條預(yù)覽或者引入一些字幕渲染測(cè)試工具。6.3 字體缺失導(dǎo)致的方框ASS 樣式里的Fontname字段如果指定了系統(tǒng)里不存在的字體播放器會(huì)回退到默認(rèn)字體。更糟糕的是壓制時(shí)字體目錄沒有正確傳遞給 libass燒錄出來(lái)的字幕就全是方框。解決路徑很樸素先確認(rèn)字體已經(jīng)安裝再用fc-list查看字體名稱是否和 ASS 文件里的Fontname完全一致。fc-list | grep -i your-font-name注意字體家族名和文件名不一定一樣。ASS 里寫的通常是家族名例如“Source Han Sans CN”而文件可能是SourceHanSansCN-Regular.otf。需要在 fontconfig 中確認(rèn)它能被正確解析。7. FFmpeg 壓制熟肉命令、驗(yàn)證與常見報(bào)錯(cuò)7.1 軟字幕 vs 硬字幕壓制熟肉有兩條路。硬字幕是把字幕直接畫進(jìn)視頻畫面任何播放器都能看到缺點(diǎn)是字幕不可關(guān)閉、清晰度也受壓制參數(shù)影響。軟字幕是把 SRT 或 ASS 作為獨(dú)立字幕流封裝進(jìn) MKV 或 MP4播放器可以切換開關(guān)但需要播放器支持。如果你想讓視頻在彈幕網(wǎng)、短視頻平臺(tái)發(fā)布通常選擇硬字幕。如果只是本地收藏軟字幕更靈活。兩種方式在 ffmpeg 里都有對(duì)應(yīng)命令。7.2 硬字幕壓制命令一條比較穩(wěn)妥的硬字幕壓制命令ffmpeg -y -i 源視頻.mp4 -vf ass字幕文件.ass:fontsdir./fonts -c:v libx264 -crf 18 -preset slow -c:a copy 輸出視頻.mp4參數(shù)解釋-i 源視頻.mp4輸入視頻。-vf ass...應(yīng)用 ass 字幕濾鏡。該濾鏡內(nèi)部使用 libass 渲染字幕。fontsdir./fonts告訴 libass 到當(dāng)前目錄的 fonts 文件夾下找字體。-c:v libx264視頻編碼使用 H.264兼容性最好。-crf 18質(zhì)量參數(shù)數(shù)值越小質(zhì)量越高文件也會(huì)更大。跑團(tuán)視頻畫面變化不大18 是常用選擇。-preset slow編碼速度預(yù)設(shè)slow 壓縮效率更高但耗時(shí)更長(zhǎng)。-c:a copy音頻直接復(fù)制不重新編碼避免音質(zhì)損失。如果只是想要一個(gè)供預(yù)覽用的低碼率版本可以把 crf 調(diào)大到 24 左右。軟字幕封裝到 MP4 的示例ffmpeg -i 源視頻.mp4 -i 字幕文件.srt -c:v copy -c:a copy -c:s mov_text 輸出視頻.mp4這里的mov_text是 MP4 容器常見的字幕編碼格式兼容性相對(duì)較好。但 mov_text 不支持 ASS 特效如果你需要保留特效建議封裝成 MKVffmpeg -i 源視頻.mp4 -i 字幕文件.ass -c:v copy -c:a copy -c:s ass 輸出.mkv7.3 用 ffprobe 驗(yàn)證輸出壓制完成后先用 ffprobe 確認(rèn)封裝無(wú)誤ffprobe -v error -show_entries streamcodec_type,codec_name,width,height -of json 輸出視頻.mp4硬字幕燒錄后輸出文件里不應(yīng)出現(xiàn)獨(dú)立字幕流只有視頻流和音頻流。如果出現(xiàn)了字幕流說(shuō)明你實(shí)際做的是軟字幕發(fā)布到某些平臺(tái)時(shí)可能不生效。對(duì)于軟字幕 MKV則需要檢查是否包含字幕流ffprobe -v error -select_streams s:0 -show_entries streamcodec_name -of csvp0 輸出.mkv如果輸出為空說(shuō)明封裝失敗。8. 常見問題與排查速查表問題現(xiàn)象可能原因排查方式解決方案字幕全部顯示為方框字體缺失或字體名不匹配檢查 ASS 中的 Fontname用 fc-list 驗(yàn)證安裝字體或在 ass 濾鏡中指定 fontsdir字幕顯示為亂碼字幕文件編碼不是 UTF-8用 chardet 檢測(cè)文件編碼統(tǒng)一轉(zhuǎn)換為帶 BOM 的 UTF-8字幕整體偏移片源片頭時(shí)長(zhǎng)不同或幀率變化用播放器核對(duì)某一固定字幕位置用時(shí)間軸偏移腳本批量調(diào)整部分特效字幕不顯示ASS 標(biāo)簽不閉合或語(yǔ)法錯(cuò)誤運(yùn)行大括號(hào)檢查腳本Aegisub 預(yù)覽修復(fù)標(biāo)簽語(yǔ)法壓制后畫面模糊CRF 過高、preset 太激進(jìn)對(duì)比壓制前后截圖降低 CRF或?qū)?preset 調(diào)到 slow/medium壓制時(shí)提示字體未知字體未安裝或 fontsdir 路徑錯(cuò)誤查看 ffmpeg 日志檢查字體目錄安裝字體并確認(rèn)路徑軟字幕封裝后播放器不顯示字幕流編碼不被容器支持ffprobe 查看流信息使用 ass 字幕封裝為 MKV文件名中文導(dǎo)致工具閃退部分工具環(huán)境不支持中文路徑改用臨時(shí)英文路徑驗(yàn)證先用腳本復(fù)制到英文路徑處理后再移回這張表可以直接貼在項(xiàng)目筆記里。實(shí)際排查時(shí)第一件事永遠(yuǎn)是從現(xiàn)象倒推階段亂碼優(yōu)先查編碼方框優(yōu)先查字體偏移優(yōu)先查時(shí)間軸模糊優(yōu)先查壓制參數(shù)。不要一上來(lái)就懷疑字幕內(nèi)容或者是屏幕刷新率。9. 最佳實(shí)踐把神話與科學(xué)變成可復(fù)用的流水線熟肉制作的經(jīng)驗(yàn)積累最終會(huì)自然地沉淀為一套流程。下面這些做法可以幫助一個(gè)單人翻譯或小團(tuán)隊(duì)把重復(fù)勞動(dòng)降到最低。統(tǒng)一術(shù)語(yǔ)表。跑團(tuán)視頻里有大量專有名詞調(diào)查員、神話生物、技能檢定、咒文、地名。如果在打軸階段就開始統(tǒng)一后續(xù)校對(duì)會(huì)非常省力。建議用 Markdown 或純文本維護(hù)術(shù)語(yǔ)表并在翻譯腳本里替換高頻名詞。字幕拆分與任務(wù)隔離。一個(gè) part 的字幕可能長(zhǎng)達(dá)幾千行單文件處理會(huì)很吃力??梢园磿r(shí)間區(qū)間拆分成多段每人負(fù)責(zé)一段處理完再合并。拆分工具可以用 ffmpeg 或 Python但要保證拆分后各自的時(shí)間軸不重疊。保留原始素材。任何轉(zhuǎn)換都應(yīng)該是“源文件不變生成新文件”。處理字幕時(shí)不要直接覆蓋原字幕壓制時(shí)不要直接替換原視頻。保留原始素材意味著你可以隨時(shí)回退不需要擔(dān)心一次參數(shù)錯(cuò)誤毀掉幾小時(shí)的勞動(dòng)。建立預(yù)檢腳本。把編碼檢查、時(shí)間軸正則檢查、大括號(hào)檢查都放進(jìn)一個(gè) Python 腳本里每次發(fā)布前跑一遍。預(yù)檢腳本不必很復(fù)雜但一定要能攔截那些“肉眼容易漏掉”的格式問題。多播放器驗(yàn)證。同一個(gè)字幕文件在 Aegisub 預(yù)覽、MPV、PotPlayer、網(wǎng)頁(yè)播放器里的渲染結(jié)果可能不一樣。發(fā)布前至少用兩個(gè)播放器各看一遍重點(diǎn)檢查特效和字體顯示。避免在線轉(zhuǎn)換工具。字幕文件包含隱私和版權(quán)風(fēng)險(xiǎn)而且在線工具經(jīng)常會(huì)在編碼轉(zhuǎn)換時(shí)破壞時(shí)間軸格式。用本地腳本幾秒鐘就能完成還不會(huì)把文件上傳到第三方服務(wù)器。分工明確。翻譯、打軸、校對(duì)、壓制如果由不同的人完成建議用 Git 或至少用帶時(shí)間戳的文件名管理版本。文件名格式可以這樣約定part01_原始.srt part01_翻譯_v2.srt part01_最終.srt這樣即使同一個(gè)人隔了一周回來(lái)也能快速看到中間發(fā)生了什么。自動(dòng)化腳本可以寫入 README。跑團(tuán)系列經(jīng)常會(huì)有后續(xù) part腳本化之后每個(gè)新 part 只需要替換輸入文件不必重新設(shè)計(jì)流程。這大概是“神話與科學(xué)”這個(gè)標(biāo)題給制作過程最好的注腳神話負(fù)責(zé)想象力科學(xué)負(fù)責(zé)讓它穩(wěn)定地呈現(xiàn)在觀眾面前。10. 總結(jié)bug 一樣鬼畜的背后是流程的勝利回到開頭那個(gè)標(biāo)題。“bug 一樣鬼畜”在彈幕文化里是個(gè)褒義詞形容內(nèi)容足夠離譜、足夠有趣。但從熟肉制作的角度看真正讓一個(gè)跑團(tuán)視頻能順利發(fā)布、被大量觀眾看到的不是“鬼畜”的部分而是那些枯燥的基礎(chǔ)設(shè)施正確的字幕編碼、準(zhǔn)確的時(shí)間軸、安裝好的字體、合理的壓制參數(shù)、可復(fù)用的排障腳本。一個(gè)跑團(tuán)視頻系列可能很長(zhǎng)但只要把這些環(huán)節(jié)工程化后續(xù)每個(gè) part 的制作難度會(huì)大幅降低。對(duì)于剛開始嘗試做熟肉的讀者我建議先別急著摳特效先把編碼統(tǒng)一、時(shí)間軸腳本、預(yù)檢腳本這三件事做好。等這三個(gè)基礎(chǔ)工具跑順了再考慮復(fù)雜的 ASS 動(dòng)畫效果。至于更深入的 ASS 動(dòng)畫、卡拉 OK 特效以及 ffmpeg 濾鏡鏈的精細(xì)調(diào)優(yōu)完全可以等第一條流水線穩(wěn)定之后再慢慢補(bǔ)齊。畢竟神話的世界可以沒有邏輯但視頻發(fā)布會(huì)。