Всем привет! Написал небольшой скрипт, который ищет заданную фразу по всем субтитрам в папке (и во всех подпапках) и показывает соответствующий видеофайл с этого места. Если было несколько совпадений, то будет создан плейлист, по которому можно перемещаться либо с помощью «Enter» либо «Shift + <» и «Shift + >».



Пример использования:


playphrase.exe -i <media_dir> <phrase> 

Перед первым запуском (или при добавлении новых видеофайлов с субтитрами) необходимо по имеющимся srt субтитрам сгенерировать txt файлы, которые будут использоваться при поиске:

playphrase.exe -i <media_dir> _init_

Дополнительные ключи:


-e, --ending — автоматический переход к следующему клипу (своего рода оффлайн версия сервиса playphase.me)
-r, --randomize — перемещивает клипы
-p, --padding PADDING — добавляется к началу и концу каждого клипа (по умолчанию 0.0 секунд)
-o, --output FILENAME — сохраняет результаты поиска в файл
-d, --demo — просто выводит количество совпадений без открытия видеоплеера
-ph, --phrases [GAP_BETWEEN_PHRASES] — показ начнется не с найденной строки субтитра, а чуть раньше (по возможности с начала фразы). При желании после ключа --phrases можно задать значение GAP_BETWEEN_PHRASES (по умолчанию 1.75). Все субтитры, расстояние между которых не больше, чем GAP_BETWEEN_PHRASES, будут объединены в одну фразу.
-l, --limit LIMIT — ограничить максимальную продолжительность фразы (по умолчанию 30 секунд)



> Страница программы

Для работы скрипта необходимо, чтобы имя файла с субтитрами совпадало с именем видеофайла.

При поиске можно использовать регулярные выражения.

Если в консоли появится None, то скорее всего ошибка в фразе для поиска. Возможно, нужно экранировать некоторые спец. символы обратной косой чертой (\).

На странице загрузки есть готовый бинарник под Windows (архив playphrase.zip).

Для упрощения ввода новых фраз можно воспользоваться файлом videogrep.bat (под Windows) или videogrep.sh (под Linux), предварительно отредактировав его и изменив в текстовом редакторе путь к папке с видеофайлами и субтитрами. Для выхода можно набрать quit, exit или q, x.



При желании скрипт можно использовать и с аудиокнигами, но необходимо будет предварительно сгенерировать субтитры для каждого аудиофайла. Для этого можно воспользоваться программой aeneas (или онлайн версией), предназначенной в первую очередь для создания EPUB 3 Audio-eBooks. Для полуавтоматического разбиения текста книги по главам можно использовать, например, консольную утилиту csplit, а для дальнейшего разбиения на более короткие фрагменты Pragmatic Segmenter.

Если кратко, то последовательность примерно следующая (предполагается, что аудиокнига разбита по главам):

  1. Разбить текст книги по главам с помощью csplit. Пример команды:

    csplit "Last Mortal Bond, The - Brian Staveley.txt" /^[0-9]+$/ {*}

    csplit "The Lion, the Witch and the Wardrobe.txt" -f "Chapter" -b "_%02d.txt" "/^Chapter \w+$/" {*}
  2. Разбить текст каждой главы с помощью Pragmatic Segmenter. Для частичной автоматизации можно воспользоваться скриптом text-segmenter.rb (компиляция ответов на Stack Overflow).
  3. Сгенерировать субтитры для каждого аудиофайла с помощью aeneas. Пример команды:

    python -m aeneas.tools.execute_task audio.mp3 text.txt "task_language=eng|os_task_file_format=srt|is_text_type=plain" subtitles.srt

В итоге получится как-то так:


В общем, может быть, кому-нибудь будет полезна.

Комментарии (11)


  1. capjdcoder
    27.08.2017 17:49

    Так на Хабр бы эту статью, не?


    1. kelciour Автор
      27.08.2017 20:48
      +1

      Честно говоря, не представляю в какой из хабов там. Все-таки тематика поста больше соответствует аудитории хаба об изучению иностранных языков, который в свое время как раз и переехал с Хабра на Geektimes, если я не ошибаюсь.


  1. Geograph
    27.08.2017 19:21
    +1

    Интересная идея. Ещё бы в MKV-контейнер умела за субтитрами лазить.


    1. kelciour Автор
      27.08.2017 21:02

      Спасибо. Да, такой возможности в программе нет, т.к. всегда обходился простеньким bat файлом для пакетного экспорта srt субтитров из mkv файлов — extract-en-subtitles-from-mkv-files.bat.

      Для его работы необходимо установить MKVToolNix и либо добавить папку с установленным MKVToolNix в переменную окружению PATH или просто отредактировать bat файл по ссылке выше, заменив вызов mkvextract на полный путь к программе (что-то типа «C:\Program Files\MKVToolNix\mkvextract.exe»).

      Потом просто поместить bat файл в папку с mkv файлами и запустить, изменив при необходимости номер дорожки с английскими субтитрами в файле. Сейчас там 2. Номер дорожки с субтитрами проще всего узнать с помощью MediaInfo, переключив в меню View на Text и посмотрев значение ID у дорожки с субтитрами. Полученный номер ввести в bat файл, уменьшив только его на 1.


      1. Ruckus
        29.08.2017 10:36

        ОС бывают и другие. Да и демо скрипта явно не под Windows снято.


        1. kelciour Автор
          29.08.2017 15:27

          Запись видео сделано под Ubuntu, т.к. у меня сейчас нет винды на десктопе. Просто у меня полетел жесткий диск и пришлось переустанавливать систему. Начал с Ubuntu, а до Windows пока руки еще не дошли, а так бы записал бы в Windows, так же как сделал с недавним видео для movies2anki:


  1. Semenchik
    28.08.2017 15:30

    А где можно найти онлайн-версию playphrase.me? :)


    1. kelciour Автор
      28.08.2017 16:27

      Не знаю по каким причинам, но playphrase.me недоступен уже где-то с середины июля. Скорее всего, сайт закрыли. Из не совсем альтернатив есть видео словарь на сервисе puzzle-english.com и сайт youglish.com.


  1. kelciour Автор
    28.08.2017 16:26

    Дубль.


  1. JTG
    28.08.2017 16:57
    +1

    Некий Sam Lavigne однажды взял отличную библиотеку MoviePy (GitHub) и сделал на её базе отличный инструмент VideoGrep (GitHub).

    Со всем этим хозяйством можно делать так:


    1. kelciour Автор
      29.08.2017 18:24
      +1

      Спасибо большое. Совсем забыл в комментариях или в посте написать про videogrep.

      Еще автор сервиса playphrase.me на страничке в группе в Фейсбуке когда-то выкладывал видео песни в виде фраз из различных фильмов, возможно, используя gentle для получения word-level тайминга, возможно, какой-то другой инструмент.

      Из интересного еще есть видео: