Я достал вшитые субтитры (хардсаб) из видео, чтобы вам не пришлось.
Предыстория
Когда в 2016 году выпускали аниме-сериал Macross Delta на дисках, в качестве бонуса шли 9 серий шуточного мини-сериала Delta Mini-Theater. Серии основного сериала имели субтитры на английском, а вот мини-сериал субтитров не имел. Фанаты это дело поправили и сделали свои субтитры. Затем, в 2018 году на дисках вышел фильм Macross Delta the Movie: Passionate Walkūre, и к нему бонусом шла ещё одна серия Delta Mini-Theater. Её тоже перевели. Всё это можно найти на просторах интернета. Но вот в 2022 году выходит новый фильм Macross Delta the Movie: Absolute Live!!!!!! с новой бонусной серией Delta Mini-Theater — уже 11-й. И вот для неё в интернете субтитры на английском найти не удалось. Всё, что у меня было, — это сам ролик и ролик на сайте BiliBili с, как удалось выяснить, вьетнамскими вшитыми субтитрами.
Что значит «вшитые» субтитры? Это когда они сделаны частью изображения, а не идут отдельной дорожкой внутри файла. Дорожку можно спокойно достать из файла и отредактировать, а вот с вшитыми так не получится. Но что делать, если очень хочется?
Мой способ, как вытащить вшитые субтитры
Дано: ролик с вшитыми субтитрами на вьетнамском, которого я не знаю. Требуется: достать и перевести субтитры на понятный язык.
Для начала нужно как-то эти субтитры достать. Для этого я нашел программу VideoSubFinder. Она бесплатная, что очень приятно. Эта программа может мониторить заданный участок видео и делать скриншот если что-то меняется в нем, делая отметку времени. Затем она на этих скриншотах пытается оставить только текст. На выходе имеем папку с кучей картинок с текстом.
Как её использовать:
1. Скачиваем и распаковываем программу.
2. Запускаем, открыв в папке программы файл VideoSubFinderWXW.exe.
3. Открываем файл видео, из которого хотим достать субтитры. Перетаскивание не предусмотрено, поэтому через Файл – Открыть Видео.
4. Видим в левом окошке программы открывшееся видео. В окошке есть вертикальные и горизонтальные ползунки, позволяющие настроить ширину и высоту отслеживаемой области. Тут важно подобрать размеры этой области так, чтобы в каждый момент видео субтитры находились внутри области. Ставить вообще весь экран смысла нет – это даст слишком много ложных срабатываний. Потратьте немного времени и поищите момент в ролике с самыми длинными субтитрами и максимальным количеством строк.
5. Определившись с нужной нам областью, во вкладке «Поиск» жмем кнопку «Запустить Поиск». В зависимости от длины вашего видео и мощности компьютера это займет некоторое время.
6. Когда программа закончит поиск, переходим во вкладку OCR и жмем кнопку «Запустить Очистку Текстовых Изображений От Фона» (RGBImages->TXTImages). Таким образом, программа постарается выделить только текст на сделанных ранее скриншотах видео.
7. Когда программа выполнит свое действие, то мы получим кучу черно-белых изображений с текстом в папке TXTImages, которая расположена в папке программы. В названиях изображений закодирован тайминг из видео, поэтому важно их не переименовывать.
На этом этапе стоит мельком просмотреть полученные изображения и поудалять те, на которых текста нет, и проверить, всё ли субтитры влезли в заданное вами поле отслеживания.
Теперь нам нужно распознать текст на изображениях и перевести в редактируемые символы.
Распознавание текста
Для этого нам пригодится бесплатная нейросеть под названием Tesseract OCR. Ей не нужен интернет, она просто устанавливается как программа и работает из командной строки. Если кто-то сейчас испугался от упоминания командной строки, то можете выдохнуть. Мы туда полезем только один раз, чтобы проверить, всё ли нормально установилось.
Процесс установки прост:
1. Качаем установщик Tesseract installer for Windows с GitHub и запускаем.
2. Установщик предложит выбрать язык. Выбираем, какой вы лучше понимаете. Жмем OK.
3. Принимаем лицензионное соглашение. Ждем «Далее».
4. На этом этапе важно выбрать нужный нам для распознавания язык. Для этого жмем плюсик возле пункта Additional language data (download) и отмечаем галочкой нужный нам язык. Можно выбрать несколько. Жмем «Далее».
5. Программа спросит, куда её установить. Я не стал тут ничего менять и оставил путь по умолчанию. (Путь запоминаем) Жмем «Далее» и «Установить».
6. Программа докачает нужные пакеты языков и установится в указанную ранее папку.
Для упрощения работы нам нужно, чтобы команда tesseract работала из любой папки в командной строке, поэтому нужно добавить путь к программе в системные переменные.
1. Нажимаем комбинацию клавиш Win + R и вводим в появившееся окно sysdm.cpl, затем нажимаем Enter.
2. Откроется окно «Свойства системы». В нем переходим во вкладку «Дополнительно», жмем кнопку «Переменные среды».
3. В блоке «Системные переменные» найдите строку Path и выберите её, затем нажмите «Изменить».
4. Нажмите «Создать» и вставьте путь к папке Tesseract (обычно: C:\Program Files\Tesseract-OCR).
5. Нажмите OK во всех окнах. Готово.
Проверяем, всё ли работает, через командную строку.
1. Жмем комбинацию Win + R, вписываем cmd, жмем Enter.
2. В командной строке пишем tesseract -v и жмем Enter. Если всё хорошо, вам покажут версию tesseract и что-то ещё.
Наконец можно перейти к делу! Нам нужно распознать текст на каждой картинке и для каждой картинки создать текстовый файл формата .txt, который будет называться так же, как картинка, и содержать текст с картинки. Именно это и сделает для нас tesseract.
Для этого заходим в папку TXTImages, где хранятся наши картинки от VideoSubFinder, и создаем в ней файл блокнота. Называем его Convert и открываем.
Вставляем следующий код:
@echo off
chcp 65001 >nul
echo Start processing (Vietnamese + English)...
for %%i in (*.png *.jpg *.jpeg *.bmp *.tiff) do (
echo Processing: %%i
tesseract "%%i" "%%~ni" -l vie+eng --oem 1
)
echo Done!
Pause
Мой код предназначен для распознавания английского и вьетнамского. Для ваших нужд в строчке tesseract "%%i" "%%~ni" -l vie+eng --oem 1 меняете код языка на нужный вам, например: eng – английский, rus – русский, vie – вьетнамский и т.п. Учтите, что тот язык, что идет в списке раньше, считается приоритетнее. Сохраняем файл в формате .bat. Готово!
Теперь просто запускаем этот bat-файл двойным кликом и ждем, когда всё сделается.
На выходе получаем в папке TXTImages кучу txt-файлов. Отсортируйте файлы в папке по типу, выберите все txt-файлы и переместите в соседнюю папку TXTResults.
Собираем всё в кучу... субтитров
Возвращаемся в VideoSubFinder
Открываем вкладку OCR, на ней жмем кнопку «Создать Субтитры Из Полученных Текстовых Файлов» (TXTResults->Субтитры).
Программа предложит сохранить файл субтитров в формате srt или ass на ваш выбор. Вот и всё! У нас есть субтитры к видео которые можно редактировать и переводить.
Замечания по работе
VideoSubFinder может пропускать субтитры, которые появляются и исчезают на экране очень быстро. Всякие возгласы и прочее. У меня он тоже несколько пропустил. Сам tesseract тоже может иногда что-то не распознать или распознать не так. Поэтому стоит файл субтитров вручную отредактировать. Мне пришлось некоторые вьетнамские символы по тексту выискивать и заменять, составлять слова и фразы по буквам. Получается, у меня теперь будут вьетнамские флешбеки?
Итог
Я получил то, что хотел – редактируемый текст субтитров. Далее я загнал их в переводчик, подредактировал уже переведенный текст и получил субтитры на понятном мне языке. Красота! Наверное, можно было это сделать проще с помощью одной программы, на что вы мне укажете в комментариях, но я такого способа не нашел.
Надеюсь, кому-то этот текст будет полезен.