Распознавание и конвертация субтитров из VOB в SRT формат

в 9:22, , рубрики: subrip, Работа с видео, субтитры, метки: , ,

В данной статье я хотел бы коснуться одного важного аспекта, с которым сталкиваются любителей просмотра кино и видеопродукции на языке оригинала, желающие скопировать субтитры с оригинального DVD диска для просмотра фильма на языке оригинала. Согласитесь, что самый лучший перевод в большинстве случаев проигрывает оригинальной звуковой дорожке.

Как известно, на DVD дисках субтитры представлены в пререндеренном формате, который делает невозможным их редактирование или перевод. Имеющиеся утилиты по автоматизированной конверсии мало того что ориентированы в массе своей на англоязычную аудиторию, в дополнение к этому делают свою работу довольно плохо, в распознанном тексте присутствует масса ошибок. Озаботившись этим вопросом, за один вечер я разработал и успешно протестировал несложную методику и скрипт на Perl, которую и предлагаю вашему вниманию.

Нам потребуются следующие программы :FineReader, SubRip и интерпретатор Perl для выполнения скрипта сборки субтитров из текстовых файлов распознанных FineReader-ом. Где их взять вам подскажет Яндекс или Гугл, все перечисленные программы широкоизвестны.

Итак, мы начинаем.
1. Запустите утилиту SubRib и откройте VOB с суффиксом *_0.VOB файл искомой видеопоследовательности. Выберите нужную вам дорожку субтитров, как показано на скриншоте ниже. Выберите опцию «save subtictures as BMP».

Распознавание и конвертация субтитров из VOB в SRT формат

2. Нажмите кнопку Start. Выберите каталог, куда SubRip будет сохранять извлеченные картинки субтитров в формате BMP, затем укажите префикс файла, числовой номер и расширение BMP будут добавлены SubRip автоматически. Затем выберите оформление рендеринга субтитров, как показано ниже. По своему опыту я рекомендую выбрать черно-белую кастомную схему, обнулив значения параметров Color 1 и Color3, и выставив минимальные значения для параметров Color2 и Color4.

Распознавание и конвертация субтитров из VOB в SRT формат

3. Подождите пока SubRip извлечет изображения из VOB-файлов и создаст в ранее выбранном вами каталоге картинки в BMP формате. Процесс сохранения будет показываться в новом окне, открытом приложением.

Распознавание и конвертация субтитров из VOB в SRT формат

4. После завершения процесса сохраните сгенерированный SubRip файл с таймингами субтитров, он будет виден в новом окне, открывшемся в ходе генерации BMP изображений. Выберите формат ASCII.

Распознавание и конвертация субтитров из VOB в SRT формат

5. Все, теперь у нас на руках есть субтитры и файл с таймингом. Время открывать FineReader. Запускаем FineReader, выбирает языки распознавания присутствующие в субтитрах (если их больше одного), выбираем опцию « открыть PDF или изображения », при помощи CTRL-A выбираем в диалоге все изображения из нашего каталога. Перед тем как открыть изображения, указывает опции распознавания. Конфигурация опций показана на двух скриншотах ниже.

Распознавание и конвертация субтитров из VOB в SRT формат

Для упрощения процесса вы можете использовать только встроенные шаблоны либо, но если вы хотите контролировать процесс распознавания с помощью собственных шаблонов, выберите вторую опцию.

Распознавание и конвертация субтитров из VOB в SRT формат

6. После распознавания текста и его проверки нужно сохранить результат. Поскольку FineReader не всегда корректно распознавал конец абзаца в субтитрах, по результатам экспериментов я выбрал опцию сохранять в отдельные файлы.
Тип сохраняемого файла (мы сохраняем в текстовый файл), приведен на скриншоте ниже:

Распознавание и конвертация субтитров из VOB в SRT формат

При сохранении выберите каталог, укажите префикс для текстовых файлов, из выпадающего меню выберите пункт « создавать отдельный файл для каждой страницы » после чего дополнительно кликните на кнопке « опции »
Распознавание и конвертация субтитров из VOB в SRT формат

и укажите параметры сохранения как показано ниже.

Распознавание и конвертация субтитров из VOB в SRT формат

7. В результате всех вышеперечисленных действий у нас получился каталог с множеством текстовый файлов в кодировке UTF-8. Теперь нам нужно их сконвертировать. Для этого я написал небольшой скрипт для сборки субтитров на основе ранее сохраненного на шаге 4 и множества текстовых файлов. Для этого сохраните Perl скрипт показанный ниже или скачайте исполняемый файл скомпилированной версии скрипта и запустите с двумя параметрами,
--subtutles полный путь и имя каталога с текстовыми файлами
--timing полный путь и имя файла тайминга.

#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
use File::GLob;
use utf8;
#perl2exe_include "unicore/Heavy.pl"
#perl2exe_include "overloading.pm"
#perl2exe_include "File/Glob.pm"
#------------------------------------------------------------------
my ($arg_subtitles,$arg_timing);
GetOptions("subtitles=s"=> $arg_subtitles,
            "timing=s"=> $arg_timing);
usage() if (!$arg_subtitles || !$arg_timing);
$arg_subtitles =~ s#[/\]#\\#g;
$arg_timing =~ s#[/\]#\\#g;
my $buf = "";
my @subs_array;
while (<$arg_subtitles/*.txt>){
 my $fname = $_;
 my $sub_number = $1 if ($fname =~ /^.*?0{0,5}(d{1,5}).txt$/);
 local $/;  
 open (sFILE,$fname) or die "Can't read file $fname [$!]n";  
 $buf = <sFILE>; $buf =~ s/xEFxBBxBF//;
 close (sFILE);
 $subs_array[$sub_number]=$buf;
}
open(tFILE, "<".$arg_timing) or die "Can't read file $arg_timing [$!]n";
print "xEFxBBxBF";
while (<tFILE>) {
if (m/(d{2,2}:d{2,2}:d{2,2}):(d{2,2}) (d{2,2}:d{2,2}:d{2,2}):(d{2,2}) S+(d{5,5}).w{3,3}/) {
   my $start_hms= $1; my $start_mls= $2; my $end_hms=$3; my $end_mls=$4; my $sub_number = $5;
   $sub_number =~ s/^0{0,4}//;
   print "$sub_numbern$start_hms,$start_mls"."0"." --> $end_hms,$end_mls"."0"."n".$subs_array[$sub_number]."nn";
 } 
}
close (tFILE);  

sub usage
{
    die <<"EOT";
Usage: $0 --subtitles path_to_the_subs_folder --timing path_to_the_timing_file
path_to_the_subs_folder is the name of the folder where recognised subtitles are stored
while saving recognised subtitles from BMP images, choose text format and "store one file per page" options
EOT
}

Скрипт выводит созданный файл в формате UTF8 на консоль, поэтому вы можете перенаправить его в файл по вашему выбору.
На этом все, благодарю за внимание.

Автор: andrey427788

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js