Есть ли способ конвертировать субтитры dvdsub (на основе изображений) в srt? Например, с помощью mencoder или ffmpeg в сочетании с tesseract?
Я ищу что-то на основе командной строки и не против пройти несколько этапов.
Мне меньше нравятся инструменты с графическим интерфейсом.
решение1
Вы, вероятно, уже нашли решение, но поскольку это был первый результат поиска по запросу «ffmpeg ocr dvdsub srt», вот инструмент, которым я пользуюсь.
https://github.com/ruediger/VobSub2SRT
Он не идеален и, возможно, требует некоторого редактирования.
Я пытался найти функцию в ffmpeg, которая делает это лучше, чем мой метод, но нашел это и вспомнил, в какую кроличью нору мне пришлось спуститься, так что надеюсь, это кому-нибудь поможет.
Вот мой процесс
Для извлечения dvdsub из .mkv
Использование mkvextract из mkvtoolnix-cli
mkvextract video.mkv tracks 2:video.idx
- arg 1 - Имя файла видео, содержащего dvdsub
- arg 2 - Тип извлечения
- arg 3 - [Поток №, содержащий dvdsub]:[Желаемое имя файла извлеченных файлов].idx
Мой пример создал бы файлы video.idx и video.sub.
Создание subrip из файлов .idx и .sub
Использование vobsub2srt
vobsub2srt использует tesseract, и я обнаружил, что использование устаревшего режима tesseract работает лучше всего.
vobsub2srt --tesseract-oem 0 video
- arg 1 - Режим движка Tesseract (
tesseract --help-oem
для режимов) - arg 2 - Устаревший режим
- arg 3 - Имя файлаОБА.idx и .subБЕЗрасширение
Мой пример дал бы video.srt
Проверить и отредактировать файл subrip
Ошибки, которые я совершил
- «|» вместо «I», в устаревшем режиме 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 — сопоставляет видеопоток с 1-го входа с 1-м потоком на выходе
- arg 11 & 12 — сопоставляет аудиопоток с 1-го входа со 2-м потоком на выходе
- arg 13 & 14 — сопоставляет поток субтитров со 2-го входа с 3-м потоком на выходе
- arg 15 — Имя выходного файла
И готово, надеюсь, здесь нет ограничения по количеству символов.