有沒有辦法將 dvdsub(基於圖像)字幕轉換為 srt?例如使用 mencoder 或 ffmpeg 與 tesseract 結合?
我正在尋找基於命令行的東西,並且我可以接受必須經過幾次傳遞。
我不太熱衷於基於 GUI 的工具。
答案1
您可能已經找到了解決方案,但由於這是“ffmpeg ocr dvdsub srt”的第一個搜尋結果,因此這是我使用的工具。
https://github.com/ruediger/VobSub2SRT
它並不完美,可能需要一些編輯。
我試圖在 ffmpeg 中找到一個比我的方法更好的功能,但我發現了這個並記住了我必須深入的兔子洞,所以我希望這對某人有幫助。
這是我的過程
用於從 .mkv 中提取 dvdsub
使用 mkvtoolnix-cli 中的 mkvextract
mkvextract video.mkv tracks 2:video.idx
- arg 1 - 包含 dvdsub 的影片的檔名
- arg 2 - 提取類型
- arg 3 - [包含 dvdsub 的流#]:[所需的提取檔案的檔名].idx
我的範例會產生一個 video.idx 和一個 video.sub 文件
從 .idx 和 .sub 檔案產生 subrip
使用 vobsub2srt
vobsub2srt 使用 tesseract,我發現使用 tesseract 的舊模式效果最好。
vobsub2srt --tesseract-oem 0 video
- arg 1 - Tesseract 引擎模式(
tesseract --help-oem
用於模式) - arg 2 - 傳統模式
- arg 3 - 檔名兩個都.idx 和 .sub沒有擴大
我的範例會產生 video.srt
檢查並編輯 subrip 文件
我經歷過的錯誤
- '|' tesseract 的遺留模式而不是“I”,似乎不常犯這個錯誤。
- ` 而不是 '
- 空格,當一行以“-”開頭時,“-”和第一個單字之間不能有空格。
- 丟失的 ' & ”
- “我”或“|”而不是“[”,legacy似乎並不經常犯這個錯誤。
編輯它
如果您不熟悉 subrip 文件,則可以將它們簡單地放入文字編輯器中。
grep、vim 和 sed 是你的朋友。
然而,遺留模式中的大多數錯誤很容易被忽略。
將 dvdsub 替換為 subrip(srt)
使用 ffmpeg
ffmpeg -i video.mkv -i video.srt -c copy -c:s subrip -map 0:v -map 0:a -map 1 final-video.mkv
- arg 1 & 2 - 輸入 #1 - 包含 dvdsub 的視訊文件
- arg 3 & 4 - 輸入 #2 - Subrip 文件
- arg 5 - 用於所有串流的編解碼器
- arg 6 - 複製所有串流(僅複製視訊和音訊)
- arg 7 - 字幕編解碼器(覆蓋字幕的 arg 5)
- arg 8 - 選擇 subrip 作為字幕編解碼器(可能是多餘的,但安全性>抱歉)
- arg 9 & 10 - 將視訊串流從第一個輸入對應到輸出中的第一個串流
- arg 11 & 12 - 將音訊串流從第一個輸入對應到輸出中的第二個串流
- arg 13 & 14 - 將字幕流從第二個輸入映射到輸出中的第三個流
- arg 15 - 輸出檔名
完成後,我希望這裡沒有字元限制。