Skip to content
kelciour edited this page Dec 5, 2019 · 100 revisions

Описание

Программа автоматически по английским субтитрам разбивает фильм/сериал на отдельные фрагменты (сцены/диалоги/фразы). Также автоматически создается tsv файл для импорта в Anki, содержащий английский транскрипт и русский перевод (если были добавлены русские субтитры).

Версия программы в виде аддона для Anki — https://ankiweb.net/shared/info/939347702

Возможности программы

  • Объединение субтитров в фразы.
  • Разбиение длинных фраз на более короткие.
  • Разбиение видеофайла по получившимся субтитрам на видео и аудио фрагменты и генерация tsv файла для импорта в Anki.

В общем, эта программа, в некотором роде, просто облегченная/урезанная версия subs2srs, только с предварительным объединением отдельных субтитров в фразы.

Пример карточки в Anki

Лицевая сторона содержит английский транскрипт и видеофрагмент.

Оборотная сторона содержит аудиофрагмент, русский перевод (если были добавлены русские субтитры) и копию лицевой стороны (английский транскрипт и видеофрагмент).

Просмотр фильма

Один из вариантов просмотра карточки следующий:

  1. Просматривается видеофрагмент.
  2. Прослушивается аудио с одновременным чтением английского транскрипта.
  3. Прослушивается аудио еще раз с чтением русского перевода.
  4. Заново просматривается видеофрагмент.

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

Пример просмотра таким образом (все 4 шага) одной карточки:

При просмотре на компьютере, возможно, будет полезен аддон "Replay buttons on card" или его чуть измененная версия, чтобы при клике файл сразу воспроизводился, а не добавлялся в очередь.

Описание интерфейса

Окно программы выглядит следующим образом:

  • После выбора видеофайла происходит попытка выбрать первую английскую дорожку. Если английскую дорожку не получится найти, будет выбрана последняя аудиодорожка в файле.

  • Также программа после добавления видеофайла попытается по его имени найти английские и русские субтитры. Английские субтитры будут искаться по шаблону: 'имя видеофайла' + маска (сначала *eng*.srt, затем *en*.srt и в конце .srt).

  • Поддерживаются srt субтитры в кодировке cp1251 и utf-8.

    Для конвертации субтитров из формата ass в srt можно воспользоваться Aegisub (открыть ass субтитры -> меню Файл -> Экспорт субтитров... -> Экспорт... -> ввести имя файла с расширением srt).

  • Параметр "Pad Timings" корректирует начало и окончание субтитров, для более удобного просмотра видеофрагментов. Значение параметра "Start" будет вычтено из начала каждой фразы, а значение "End" добавлено к окончанию каждой фразы (по-умолчанию - 500 мс, у меня установлено - 750 мс).

  • Параметр "Gap between Phrases" отвечает за объединение субтитров в отдельные фразы. Если между субтитрами прошло больше времени чем установлено в "Gap between Phrases", то они считаются разными фразами. Иначе - объединяются в одну фразу.

  • Если установлена галочка напротив "Split Long Phrases", то субтитры превышающие установленную продолжительность будут разбиты, по-возможности, на фразы продолжительностью меньшей чем установленная и, по-возможности, более-менее равномерно. Ею удобно пользоваться, например, при просмотре видео с TED.

  • Если выбрана опция "Movie", то окончание каждой фразы будет изменено на начало следующей фразы. Таким образом, можно посмотреть весь фильм по карточкам.

    При этом первый субтитр будет начинаться с 0 секунд, но если первый субтитр появляется на экране позже чем 15 сек от начала видеофайла, то время начала первого субтитра не будет изменено, а дополнительно перед первым субтитром будет вставлен пустой субтитр.

  • По нажатию на кнопку "Preview..." появится окно с информацией о количестве получившихся фраз и продолжительность самой длинной фразы и, если включена опция is_write_output_subtitles, то рядом с видеофайлом будут записаны получившиеся субтитры с фразами: "видеофайл.out.en.srt" и "видеофайл.out.ru.srt".

  • Последние пять имен колод для Anki (поле "Name for deck") сохраняются и доступны для выбора (направленный вниз треугольник справа).

  • По нажатию кнопки "Go!" будет создан tsv файл в выходной директории с именем "имя_колоды.tsv" и будет создана папка "имя_колоды.media". После этого будет запущен процесс создания видео и аудио фрагментов, которые будут записаны в только-что созданную папку. При этом, если папка "имя_колоды.media" уже существует на диске, то появится диалоговое окно с запросом о перезаписи этой папки. Если было выбрано "Нет", то процесс создания фрагментов будет отменен.

  • В файл log.txt записывается отладочная информация и возможные ошибки программы. При запуске программы вся информация удаляется и при закрытии программы вся новая информация сохраняется на диск.

  • Перед объединением субтитров в отдельные фразы сначала субтитры будут объединены в предложения, при этом длина предложения не будет превышать значение параметра "Split Long Phrases".

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

  • Настройки программы сохраняются в файл config.ini. Если этот файл удалить, то программа запустится с настройками по умолчанию. В файле есть пара настроек, которые отсутствуют в интерфейсе программы. Это:

    • is_write_output_subtitles - сохранять ли получившиеся субтитры на диск (по умолчанию - не сохранять (False))

    • is_ignore_sdh_subtitle - игнорировать при чтении субтитры для слабослышащих (по умолчанию - да (True)). Т.е. при загрузке субтитров будут проигнорированы субтитр: "[Laughter]" или "(Cannon fire) (Soldiers chanting)", но оставлен субтитр "(Clears throat) South Essex!"

    • is_add_dir_to_media_path - добавляет "имя_колоды.media/" к пути для медиа к Audio и Video полям карточки (по умолчанию - False).

      • Если эта опция включена (параметр установлен в True), то тогда в папку collection.media переносится полностью вся папка, а не медиафайлы из нее.

      • Но при этом "Check Media..." опция в Anki не будет работать с такими карточками.

    • is_write_output_subtitles_for_clips - сохраняет "исходные" английские субтитры рядом с каждым видеофрагментом. Преимущественно только под Linux, т.е. под Windows нет простой возможности задействовать такие субтитры при просмотре.

    • is_create_clips_with_softsub - добавляет "исходные" английские субтитры в каждый видеофрагмент внутрь контейнера (softsub). Преимущественно под Windows.

      Чтобы mplayer показывал такие субтитры на десктопной версии Anki на Windows надо скопировать файл Arial из папки C:\Windows\Fonts в папку C:\Program Files\Anki\mplayer. Переименовать файл arial.ttf в subfont.ttf, а все другие *.ttf файлы, которые, возможно, были скопированы, удалить.

    • is_create_clips_with_hardsub - добавляет "исходные" английские субтитры в видео (hardsub). Преимущественно под AnkiDroid, т.к. встроенный видеоплеер не умеет показывать субтитры. К имени видеофайла при этом будет добавлен суффикс sub.

    • hardsub_style - стиль субтитров, которые будут добавлены к видео, если задействована предыдущая опция. По умолчанию - FontName=Arial,FontSize=24,OutlineColour=&H5A000000,BorderStyle=3. Про возможные опции можно посмотреть в Section 5 ass-specs.

    • is_separate_fragments_without_subtitles - в режиме Movie вместо увеличения продолжительности текущей фразы до начала следующей фразы кусочек без субтитров просто будет сохранен в отдельном файле.

Скачать

Видео по установке и настройке в Windows - https://www.youtube.com/watch?v=Uu9oT5z08Is

Windows - https://github.com/kelciour/movies2anki/releases/latest

Linux & MacOS - https://github.com/kelciour/movies2anki (последняя версия скрипта, шаблон карточки (movies2anki-sample.apkg) и инструкция по установке).

Добавление шаблона карточки в Anki

Запустить Anki и импортировать movies2anki-sample.apkg. При импорте колоды с примерами карточек также будет импортирован и шаблон карточки.

Импорт колоды в Anki

  1. С помощью movies2anki запустить процесс создания карточек.

  2. В Anki с помощью меню File -> Import... выбрать только что созданный tsv файл.

  • В Import Options выбрать шаблон movies2anki.

  • В Deck создать новую колоду.

Для удобства если добавляется следующая серия можно сначала выбрать колоду с предыдущей серией, потом нажать Add, тогда в Deck Name будет автоматически подставлено имя выбранной колоды, останется изменить только цифру серии на следующую и нажать OK.

В имени колоды через :: можно задавать вложенность, например, Friends::Season 4::Friends s04e07.

  • Убедиться, что поля разделены табуляцией (Fields separated by: Tab).

  • Выбрать: Import even if existing note has same first field.

  • Поставить галочку около Allow HTML in fields.

  • Нажать Import.

  1. Дождаться завершения процесса создания карточек и импортировать получившиеся видео и аудио фрагменты в collection.media директорию программы Anki.

Просмотр карточек в Anki

  • Рекомендую установить несколько аддонов:

  • Также, возможно, необходимо настроить mplayer (видео)

    • Как минимум, на Windows 7 необходимо добавить несколько дополнительный опций в config файл видеопроигрывателя mplayer, с помощью которого Anki воспроизводит видео.
    • Файл "config" находится в папке C:\Program Files\Anki\mplayer (папка mplayer и config файл в ней появится после первого запуска видеофайла). В последней версии Anki файл расположен в папке C:\Users\<имя пользователя>\mplayer.
    • Далее добавить в файл "config" строчки:
       vo=gl
       ontop=yes
      
    • Либо можно скачать уже модифицированный файл config по ссылке (https://gist.github.com/kelciour/ec20af331fd196e44a4bb4b9e7a5df40).
  • При просмотре можно использовать горячие клавиши Anki:

    • Space - показать обратную сторону карточку
    • 3 - установить интервал Easy и перейти к следующей карточке (работает только на обратной стороне карточки)
    • ; - пропустить обратную сторону карточки и перейти к следующей карточке (нужен аддон Handy Answer Keys Shortcuts)
    • R - повторно воспроизвести видео/аудио
    • Shift + 8 - пометить карточку звездочкой

    При желании горячие клавиши можно настроить под себя, отредактировав аддон Handy Answer Keys Shortcuts через меню Tools - Add-ons - Handy Answer Keys Shortcuts - Edit или Tools - Add-ons - Open Add-ons Folder и открыв в текстовом редакторе файл Handy_Answer_Keys_Shortcuts.py. Например, можно модифицировать горячие клавиши следующим образом (исходный код):

    • 3 - установить интервал Easy и перейти к следующей карточке (работает на обеих сторонах карточки)
    • T - пометить карточку звездочкой

    Если к видеофрагментам были сгенерированы субтитры:

    • V - отключение/включение субтитров
      или
    • J - включение/отключение субтитров (если в config файл была добавлена строка nosub=yes или noautosub=yes)

Просмотр карточек в AnkiDroid (версия Anki под Android)

  • Зайти в Preferences -> AnkiDroid:

    • Добавить AnkiWeb аккаунт

    • Снять галочку с Fetch media on sync (т.к. media синхронизируется вручную)

  1. Карточки добавляются на компьютере, затем с помощью AnkiWeb (https://ankiweb.net) синхронизируются с AnkiDroid (без media).

В десктопной версии и AnkiDroid у меня снята галочка с пункта Synchronize audio and images too. Так как сервис AnkiWeb не предназначен для хранения видеофайлов, синхронизация медленная и место на телефоне ограничено, то использую десктопную версию как основное хранилище, а на телефон скидываю только то, что смотрю в данный момент.

  1. Чтобы перекидывать media файлы на телефоне установлен SSHDroid, а на компьютере WinSCP, но можно и через USB кабель. Медиафайлы переносятся в папку AnkiDroid/collection.media.

  2. При просмотре трудные и интересные карточки помечаю (нажимаю на звездочку).

  3. После просмотра фильма/серии захожу в десктопной версии в Browse (Обзор), выбираю колоду, просмотр которой завершил, добавляю в поле поиска -tag:marked к названию колоды, нажимаю Enter и удаляю все непомеченные карточки.

Экспорт просмотренной колоды в текстовый файл

После просмотра колоду можно экспортировать, оставить только транскрипт и перечитать, например, на киндле.

  • Предварительная настройка Sublime Text

    • Установить Sublime Text 3. После этого установить Package Control и с его помощью установить плагин RegReplace (в Sublime Text нажать комбинацию клавиш Ctrl+Shift+P, набрать Install package и выбрать Package Control: Install Package, после этого в появившейся строке поиска набрать RegReplace и нажать Enter)
    • В Sublime Text выбрать меню Preferences - Package Settings - RegReplace - "Rules - User". И скопировать в открывшийся файл настроек содержимое текстового файла по ссылке - reg_replace_rules.sublime-settings
    • В Sublime Text выбрать меню Preferences - Package Settings - RegReplace - "Commands - User". И скопировать в открывшийся файл настроек содержимое текстового файла по ссылке - Default.sublime-commands
  • В Anki напротив колоды нажать на шестеренку и выбрать Export

  • В Export format выбрать Notes in Plain Text (\*.txt) и снять галочку с Include tags

  • Нажать Export...

  • Открыть получившийся текстовый файл в редакторе Sublime Text 3, нажать комбинацию клавиш Ctrl + Shift + P и набрать movies2anki, после этого выбрать [eng] или [eng/rus] и нажать Enter.

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

Пакетная обработка

  1. Пакетный режим обработки активируется, если в имени видеофайла присутствуют символы * и/или ?.
    Полученное регулярное выражение используется для получения списка видеофайлов для пакетной обработки.
  2. В имени колоды специальным шаблоном указывается изменяемая часть, вместо которой будут подставляться цифры, а также стартовый номер. Например, Friends s01e{##/5}, где в фигурных скобочках символами решетки указывается ширина поля для замены, а через косую черту стартовый номер.

В итоге, если в папке находятся видеофайлы с 5 по 24 серию, то имена колод будут следующие: Friends s01e05, Friends s01e06, ..., Friends s01e11, ..., Friends s01e24.

Для каждого видеофайла будет создан свой tsv файл и своя папка с медиа.

Перед началом обработки будут проверены существуют ли папки, и если какая-то папка существует, то программа спросит пользователя перезаписывать ли папку.

Возможные проблемы

  • При импорте в Anki иногда Anki в качестве разделителя полей автоматически выбирает запятую, а не табуляцию. В этом случае вручную меняем на табуляцию.

  • Если необходимо отложить показ карточек, просмотренных ранее, т.е. показывать сначала только новые карточки

    • Самый простой способ - это зайти в настройки Anki и выбрать "Show new cards before reviews" вместо "Mix new cards and reviews", но эта настройка глобальная и повлияет также и на другие колоды.
    • Либо можно создать новую группу опций с другими интервалами для кнопок (например, для "Easy" сделать 7 дней) и применить ее к колоде с фильмом. Для этого надо кликнуть на шестеренку рядом с колодой, выбрать Options, в самом верху будет еще одна шестеренка, кликнуть на нее и выбрать Add, создать новую группу опций и изменить интервал.
    • Либо также создать новую группу опций и на вкладке Reviews установить значение Maximum reviews/day равным нулю.

Контакты

По вопросам и предложениям пишите на почту: kelciour@gmail.com