Стандарты и краеугольные камни Перенос содержимого DVD диска на жесткий диск Методики кодирования Кодирование видеоданных Обработка и (де)кодирование аудиоданных Смешивание аудио- и видеоданных Обработка дополнительных материалов Советы по авторингу DivX Наиболее часто задаваемые вопросы

Форум

Ссылки

 

Дополнительные материалы: Субтитры и их конвертация.

Dron01: Субтитры бывают как "открытые" (subtitles), так и "закрытые" (closed captions). Поскольку и те и другие-разные по сути и технологии вещи, то их и выдергивают из фильмов по разному. Обычные (открытые) субтитры, представляют собой не что иное, как набор картинок, накладываемых на оверлее на основное изображение. И процесс вытаскивания таких субтитров, сводится к банальному OCR-распознаванию отсканированного текста. С Closed Captions такие трюки не пройдут. Они не являются картинками с текстом, а подмешаны в видеопоток. Вообще Closed Captions предназначены для просмотра фильмов идущих по ТВ, глухими людьми. Есть спецпримочки к телевизорам, которые позволяют отображать этот примешанный к видео, сигнал.

Если на коробке ДВД диска стоит зачок CC

 Closed Captions

то значит, что на самом диске эти субтитры присутствуют. Посмотреть их можно при помощи Power DVD 4 XP-это точно. Насчет остальных ДВД плейеров не курсе-не пробовал.

Closed Captions вытаскиваются особо хитрым способом, о котором будет поведано ниже.

Итак по порядку:

"Открытые" субтитры (Subtitles)

Для начала, вам необходимо перенести все вобы фильма на жесткий диск. Как это сделать-смотрите в разделе DVD-rip. Вместе с вобами необходимо перенести на жесткий диск и ifo-файл относящийся к этим вобам. Рекомендую воспользоваться для переноса DVDDecrypter-ом. Он сразу при запуске выделит файлы кино и ifo-файл.

После этого вам потребуется программа SubRip. Она достаточно бодро выдирает субтитры, да и совершенствуют ее постоянно. Последняя версия, которая попалась в мои цепкие лапы - 1.01 beta. Работает-мое почтение. Практически совсем исчезли глюки связанные с выдиранием субтитров написанных с наклоном (обычно текст невидимого на экране персонажа). Запускаем программу.

SubRip - общий вид программы

[0] - При нажатии на эту картинку появляется рабочее меню выбора файлов и установок.

SubRip- выбор файлов

[1] - Нажимаем на кнопку Open IFO и указываем IFO файл, перенесенный на жесткий диск вместе с вобами.

   SubRip- выбор установок

[2] - Отмечаем файлы, которые хотм обработать. По умолчанию выбраны все файлы (т.е. обработать весь фильм).
[3] - В этом окне выбирается язык субтитров. Информация берется из IFO файла.
[4] - Если вы хотите обработать какой-то отдельный воб или вобы(а IFO файл у вас отсутсвует), то здесь можно указать дирректорию, где лежат вобы или указать конкретные вобы.
[5] - Для каждого ДВД составляется матрица знаков и соответствие их буквам и символам. В этом окне можно указать имя файла и сохранив его потом, вернуться и обработать другой языковой поток субтитров.
[6] - Если имеется файл с матрицей знаков для данного ДВД, его можнозагрузить нажав на эту кнопку.
[7] - Определившись с установками и файлами-запускаем процесс.

SubRip-определение четкости изображения субтитров

Для начала программа определится, правильно ли она будет воспринимать картинки. Чем  "правильнее", т.е. чем читабельнее текст, тем лучше.

[8] -  Контрольный текст. Чем читабельнее, тем лучше
[9] - В этом окне можно выбрать варианты отображения субтитров в программе.
[10] - Если, по какой-то причине, текст вас не устраивает как контрольный, нажатием на эту кнопку можно пропустить данную картинку иперейти к следующей.

Выбрав наиболее читабельный текст, давим на ОК.

SubRip-процесс составления матрицы знаков

[11] - Здесь отображается рассматриваемый в данный момент знак. Т.е. Программа наткнулась на незнакомый ей знак и показывая вам его, спрашивает, что это за буква или символ.
[12] - В этом окне указывается та буква или символ, про который спрашивает программа.
[13] - Формат субтитров srt, позволяет указывать вариант отображения субтитров. Наклонный, жирный, подчеркнутый. Наклонным текстом выделяются тексты персонажей, которых в данный момент на экране не видно. Т.е. наклонным текстом идут "слова из-за кадра". В данном случае, если вы хотите, чтобы субтитры отображались наклонными-ставьте галочку напротив надписи Italic.
[14] - Проставление галочки позволяет программе "запомнить" вариант написания текущего текста и не изменять написание пока не произойдет отмены(снятие галочки). Т.е. если у меня некоторое количество текста идет наклонным, я ставлю галочку напротив Italic и рядом в окошке. Пока я не сниму галочку напротив Italic- весь вытаскиваемый текст будет идти как наклонный.
[15] - В этом окне отображается распознанный текст с таймигом (указанием времени и длительности показа).
[16] - Индикатор общего прогресса выдирания субтитров.

После окончания процесса, можно произвести некоторые телодвижения с полученным текстом.

SubRip-обработка полученного текста

[17] - Полученные субтитры в формате srt.
[18] - В процессе обработки английских субтитров, программа может ошибиться и перепутать буквы I (и) и l (эл), и символы ' и ". Для корректировки этого и служит данная опция. Нажав, получим окно, в котором отметим нужные опции для корректировки и нажимаем Correct.

SubRip-корректировка полученных результатов

[19] - Для подгонки субтитров под определенное время или для корректировки их длительности.

SubRip - корректировка времени

Time Offset/Start Match - Можно указать, сколько времени надо прибавить или отнять (Minus) от временного интервала кажого субтитра.
Time Stretch/Spee Adjust -Можно указать, на сколько минут надо изменить длительность субтиров.

После определения -нажимайте Correct Time.

[20] - Программа на выходе может выдать достаточно большое количество форматов субтитров. При нажатии на эту кнопку можно конвертировать полученные субтитры в нужный вам формат. Для каждого формата существует ряд своих настроек.

SubRip - формат субтитров на выходе

[21] - Программа позволяет разделить субтитры на несколько кусков. Очень удобно для производства 2-3 сидюковых версий фильмов.

SubRip - нарезка субтитров на куски

Сначала задается начало и конец первого куска фильма (время). После чего этот кусок субтитров сохраняется. После этого задается начало и конец второго куска фильма. И сохраняется второй кусок субтитров.

[22] - Сохранение субтитров.
[23] - Очистить окно с субтитрами.

Вот, собственно, и все. На выходе получаете субтитры в нужном вам формате. В принципе их еще можно переводить из формата в формат. Читайте ниже как это сделать.

Я остановлюсь на некоторых хитростях перевода из одного формата в другой.
Рассматривать буду srt, sub и smi. Форматы srt и sub достаточно бодро показывает BS Player. Smi - Microsoft Media Player

Для справки: для того чтобы ваш медиаплейер показывал субтитры при просмотре фильма, необходимо две вещи:
1. субтитры в формате smi, лежащие в одной папке с фильмом
2. имя файла субтитров должно быть таким же, как и имя вашего видео. Т.е. если есть фильм shrek.avi,то файл с субтитрами должен называться shrek.smi.

При выполнении обоих условий лезете в медиаплейер меню View-Captions. При наличии галочки напротив надписи captions, ваши субтитры будут отображаться внизу. Кстати при развертывании изображения на полный экран, субтитров вы не увидите. Вот такая вот фигня. Зато тот же плейер Sasami2K, отлично понимает, что такое smi и при обнаружении их рядом с фильмом(помните про два условия) сам их конвертит в свой формат. Ясен пень, что Sasami на полном экране субтитры кажет. Это вам не медиаплейер(которому для того же самого нужен спецфильтр).

То же самое равнозначно для BS Player-а. Только субтитры дожны еще располагаться в одной директории с фильмом. Либо подключаться при помощи ini-файла (либо вручную).

Допустим имеется файл с субтитрами формата sub или вообще txt. Txt обычно и есть sub, только расширение другое. Имхо-самые распространенные варианты на данный момент. Выглядят так:

{89584}{89637}In '65... yeah.
{89691}{89724}Now,
{89779}{89812}no.
{89887}{89954}What happened today|is just the beginning.
{89991}{90043}We're gonna lose this war.
{90047}{90094}Come on!
{90098}{90171}You really think so? Us?
{90175}{90254}We've been kicking|other people's asses for so long,
{90258}{90317}I figure it's time we got ours kicked.

Порядок действий для последовательного преобразования их в другие форматы:

Запускаем программу Ultimate Subtitle Converter.
Открываем свой sub или txt в ней. Если все нормально, то программа сразу же при открытии спросит про частоту фильма. По умолчанию идет 23,976. Обычно так и есть. Давим на ОК.
Внизу слева меняем тип субтитров на SubRip(вместо MicroDVD). Давим внизу справа на Save file as..
И сохраняем свои субтитры в формате srt. Получаем вот такой расклад:

1
01:02:16,403 --> 01:02:18,614
In '65... yeah.

2
01:02:20,866 --> 01:02:22,242
Now,

3
01:02:24,536 --> 01:02:25,913
no.

4
01:02:29,041 --> 01:02:31,835
What happened today
is just the beginning.

5
01:02:33,378 --> 01:02:35,547
We're gonna lose this war.

6
01:02:35,714 --> 01:02:37,674
Come on!

7
01:02:37,841 --> 01:02:40,886
You really think so? Us?

8
01:02:41,053 --> 01:02:44,348
We've been kicking
other people's asses for so long,

9
01:02:44,515 --> 01:02:46,975
I figure it's time we got ours kicked.

Закрываем Ultimate Subtitle Converter. Теперь у нас есть файл в формате srt. Для тех у кого
он был изначально в srt - можно смело делать с этого места ;)

Далее открываем хитрую программу под названием Subtitle Converter.
Она достаточно бодро лепит из srt в smi.
Справа сверху давим на кнопку Add File. Открывается дополнительное окно.
Опять же справа, напротив надписи file(subrip) давим на квадратик с тремя точками.
И загружаем свой srt. Ставим Language. Для англоязычных субтитров я обычно ставлю
en-us English(Unated States). Давим на Add. После этого остается только нажать на Convert
слева внизу. Программа спросит куда и под каким именем сохранить smi файл и все. Конвертит
автоматом. Т.е. после нажатия на кнопку Save больше ничего давить не надо. Можно смело
закрывать программу. В результате имеем файл субтитров smi:

<SAMI>
<HEAD>
<TITLE>SubConv created subtitle</TITLE>
<SAMIParam><!--
Length: 3764815-->
</SAMIParam>
<STYLE TYPE="text/css"><!--
P {margin-left: 29pt; margin-right: 29pt; font-size: 14pt;
text-align: center; font-family: tahoma, arial, sans-serif;
font-weight: bold; color: white; background-color: black;}
TABLE {Width: "248pt";}
.PLCC {Name: "Polish"; lang: pl;}
#Normal {Name: "Normal";}-->
</STYLE>
</HEAD>
<BODY><TABLE>
<SYNC Start=3736403>
<P Class=PLCC>In '65... yeah.
<SYNC Start=3738614>
<P Class=PLCC>&nbsp;
<SYNC Start=3740866>
<P Class=PLCC>Now,
<SYNC Start=3742242>
<P Class=PLCC>&nbsp;
<SYNC Start=3744536>
<P Class=PLCC>no.
<SYNC Start=3745913>
<P Class=PLCC>&nbsp;
<SYNC Start=3749041>
<P Class=PLCC>What happened today
<BR>is just the beginning.
<SYNC Start=3751835>
<P Class=PLCC>&nbsp;
<SYNC Start=3753378>
<P Class=PLCC>We're gonna lose this war.
<SYNC Start=3755714>
<P Class=PLCC>Come on!
<SYNC Start=3757841>
<P Class=PLCC>You really think so? Us?
<SYNC Start=3761053>
<P Class=PLCC>We've been kicking
<BR>other people's asses for so long,
<SYNC Start=3764515>
<P Class=PLCC>I figure it's time we got ours kicked.
</TABLE></BODY>
</SAMI>


О синхронизации. Удобнее всего делать ее при помощи программы  SubRip.
Для этого необходимо иметь субтитры в формате srt.

Открываем эту программу.

SubRip-вызов редактора

[24] - Наверху, чуть ниже надписей File,Options и т.п., слева есть пара
рисунков. На одном написано VOB, а на другом изображен квалратик с мелкими надписями. Вот
этот квадратик нам и нужен. Давим на него. Открывается окно подпрограммы для работы
непосредственно с субтитрами. Далее File-Open(SubRip format). Показываем свой srt файл.
Открываем его. Затем Corrections-Time Correction. Ну и рулите сами, сколько вам надо
прибавить/отнять времени. После завершения всех действий сохраняем заново свой srt, File-SaveAs. И по необходимости конвертим его в smi.

"Закрытые" субтитры (Closed Captions)

Как и в случае с "открытыми" субтитрами, без переписывания ДВД-диска на винчестер-здесь не обойтись. Причем проблема, в данном случае, в том, что переписывать лучше всего одним куском. Т.е. получить у себя на жестком диске vob файл, 5-7 гигабайт размером (для операционных систем Windows NT, 2000, XP) . Это делается для упрощения добывания данных, поскольку программы и технология не подразумевают возможность автоматического перехода на следующий в цепочке vob, при выдергивании субтиров. Либо вам придется каждый раз заново указывать программе новый воб, а потом полученные файлы с субтитрами склеивать в один(операционки Windows 95, 98). За данность пока приму наличие одного целого vob-а. Если у вас все-таки  цепочка, то проделываете тоже самое, что и с единым, а потом что делать - я опишу.

Итак вам понадобится прорамма Graphedit и CCParser.(Кстати все программы цинично скачиваются по адресу doom9.org). Перед запуском Graphedit-a не забудьте зарегистрировать все фильтры. Для этого можно запустить register.bat, который идет вместе с graphedit-ом. Также неообходимо наличие установленного DirectX, версии не ниже 7.0.

Graphedit-добавление фильтров

[0] - Запускаем Graphedit. Нажимаем Ctrl+F или выбирам пункт меню Grahp-Insert Filters

Graphedit-добавление фильтров

[1] - Список доступных фильтров. Все фильтры, которые нам нужны, находятся в разделе DirectShow Filters
[2] - Для добавления конкретного фильтра, необходимо либо щелкнуть по нему два раза мышью, либо выделив его нажать на кнопку Insert Filter.

Есть небольшая разница в составе фильтров и способе их соединения. Зависит от операционной системы. Т.е. для системы Windows XP это будет один вариант, а для остальных систем-другой.

Фильтры, которые потребуются (т.е. их надо добавить):

File Source (Async.) - при добавлении, вас спросят имя файла-укажите на свой vob.
MPEG-2 Splitter (для Windows XP - MPEG-2 Demultiplexter)
Cyberlink Video/SP Decoder - если вы пользуетесь Power DVD; или InterVideo Video Decoder - если вы пользуетесь WinDVD; или какой-нибудь другой(посмотрите в разделе WDM Stream Decompressor-в самом конце Direct Show фильтров)
Infinite Pin Tee Filter
Line 21 Decoder (для Windows XP - Line 21 Decoder 2)
Overlay Mixer (для Windows XP его вообще не надо добавлять)
Dump - при добавлении, вас спросят имя файла-укажите любое имя с расширением .bin.
Video Renderer
(для Windows XP - Video Mixing Renderer)

Теперь эти фильтры необходимо соединить в цепочку вполне определенным образом. Соединяются фильтры достаточно просто. Мышкой щелкаете на выход фильтра и тянете стрелку ко входу следующего фильтра, не отпуская клавишу. Для систем отличных от Windows XP это будет выглядеть так (у меня не ХР-поэтому это мой вариант. А для ХР-расклад смотри ниже):

Graphedit-соединение фильтров для систем отличных от Windows XP

[3] - Output фильтра File Source (Async.) (Vts_02_1.vob на картинке) соединяем с Input фильтра MPEG-2 Splitter
[4] - Video фильтра MPEG-2 Splitter с Video In фильтра декодера вашего ДВД плейера. Вданном случае -Cyberlink Video/SP Decoder
[5] - Video Out c Cyberlink Video/SP Decoder подается на Input 0 фильтра Overlay Mixer
[6] - Closed Caption Out (на самом деле там может стоять и другая надпись. Главное здесь - символ "~") c Input фильтра Infinite Pin Tee
[7] - Output 1 фильтра Infinite Pin Tee соединяется с XForm In фильтра Line 21 Decoder
[8] -
Output 2(может быть и 3 и 4) фильтра Infinite Pin Tee соединяется с Input фильтра Dump (причем он будет называться не Dump, а так как вы его назвали при добавлении. На картинке- matrix1)
[9] - XForm Out фильтра Line 21 Decoder соединяется с Input 2 фильтра Overlay Mixer
[10] - Output фильтра Overlay Mixer подается на Output фильтра Video Renderer
[11] - Сохраняем полученный GRF с любым именем
[12] - Нажимаем на кнопку проигрывания файла. Появляется окно, в котором отображается фильм.
[13] - Если вам нужны таки субтитры- ни в коем разе не закрывайте окно, где показывается кино. Его можно закрыть только нажав сначала а кнопку стоп.

Для Windows XP-расклады выглядят так (без картинки, поскольку-нет у меня этой операционки, а фильтры некоторые идут только с ней):

[3] - Output фильтра File Source (Async.) (Vts_02_1.vob на картинке) соединяем с Input фильтра MPEG-2 Demultiplexter
[4] - Video фильтра MPEG-2 Demultiplexter с Video In фильтра декодера вашего ДВД плейера. Вданном случае -Cyberlink Video/SP Decoder
[5] - Video Out c Cyberlink Video/SP Decoder подается на Input 0 фильтра Video Mixing Renderer
[6] - Closed Caption Out (на самом деле там может стоять и другая надпись. Главное здесь - символ "~") c Input фильтра Infinite Pin Tee
[7] - Output 1 фильтра Infinite Pin Tee соединяется с XForm In фильтра Line 21 Decoder 2
[8] -
Output 2(может быть и 3 и 4) фильтра Infinite Pin Tee соединяется с Input фильтра Dump (причем он будет называться не Dump, а так как вы его назвали при добавлении. На картинке- matrix1)
[9] - XForm Out фильтра Line 21 Decoder 2 соединяется с Input 2 фильтра Video Mixing Renderer
[10] - В Windows XP этот пункт не нужен
[11] - Сохраняем полученный GRF с любым именем
[12] - Нажимаем на кнопку проигрывания файла. Появляется окно, в котором отображается фильм.
[13] - Если вам нужны таки субтитры- ни в коем разе не закрывайте окно, где показывается кино. Его можно закрыть только нажав сначала а кнопку стоп.

Вся проблема в том, что пока не проиграется весь фильм полностью - вы субтитров на целое кино не получите. А фильм проигрывается с обычной скоростью. Т.е. для получения субтитров для полуторачасового фильма, вам придется ждать эти самые полтора часа. Если же при этом у вас фильм идет не одним vob-ом, то нужно после прогона первого vob-а, сделать следующее:

Удалить фильтр  File Source (Async.) (Vts_02_1.vob на картинке). Просто выделить его и нажать на клавиатуре клавишу Delete При этом разорвутся связи [3] и [4]. После этого, снова добавить фильтр File Source (Async.), указав в качестве источника следующий в цепочке vob. Затем необходимо удалить фильтр Dump (matrix1 на картинке). При этом разорвется связь [8]. А затем  добавить его снова, указав в качестве имени файла название оличное от первого названия. Т.е. если при обработке первого vob-а, у вас было название matrix1, то теперь имеет смысл выбрать название matrix2. Восстанавливаете связи [3], [4] и [8]. И нажимаете на клавишу проигрывания [12]. Таким же образом получаете субтитры для всех vob-ов в цепочке, поочередно.
В принципе, можно сохранить проект под именем CC.grf и пользовать его на следующих фильмах. Но перед сохранением необходимо удалить фильтры File Source (Async.) и Dump, поскольку Graphedit глючит при попытке открыть проект с битыми ссылками. Я так мыслю, вы же не будете хранить вечно свои vob-ы и bin-ы на жестком диске? В общем сохраняете ил не сохраняте-ваше дело. Движемся дальше. Закрываете Graphedit.
Теперь необходимо склеить все полученные bin-ы, в один файл. Делается это простой командой Dos - copy. Для меня строчка выглядела так: copy matrix1.bin+matrix2.bin+matrix3.bin+matrix4.bin+matrix5.bin+matrix6.bin+matrix7.bin matrix.bin . В результате я получил файл matrix.bin, содержащий субтитры от всего фильма.

Следующий клиент в нашей клинике-программа CCParser. Работает под Dos-ом. Занимается конвертированием bin-субтитров в srt-субтитры. На самом деле умеет, понятное дело, гораздо больше, но нас волнует пока только этот аспект ее умений. Dos команда для меня выглядит так: ccparser.exe matrix.bin matrix.srt /3

Ключ /3 означает, что при необходимости субтитры будут печататься в три строки. Ключ, ясен пень, -параметр необязательный. На выходе получаете субтитры в популярном формате SubRip. Как и что с ними можно делать-описано в первой части этой страницы. Кстати у меня, почему-то, получились субтитры состоящие только из заглавных букв. Видимо специфика closed captions. Хотя на безрыбье - грех жаловаться!

Вот, собственно, и все. Ежели что-то упустил-сильно не корите, лучше сами опишите и мне пришлите(а я выложу) или отпишите что именно пропустил-постараюсь дополнить. Удачи.


начало стандарты dvd-rip методики видео аудио склейка добавки авторинг запись cd