- PVSM.RU - https://www.pvsm.ru -

Оффлайн версия playphrase.me

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


Страница программы — github.com/kelciour/playphrase [1]

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

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

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

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

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


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

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

  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 [8] (компиляция ответов на 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

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

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

Автор: Николай

Источник [9]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/open-source/262855

Ссылки в тексте:

[1] github.com/kelciour/playphrase: https://github.com/kelciour/playphrase

[2] странице загрузки: https://github.com/kelciour/playphrase/releases/latest

[3] aeneas: https://github.com/readbeyond/aeneas

[4] онлайн версией: https://aeneasweb.org

[5] EPUB 3 Audio-eBooks: https://www.readbeyond.it/ebooks.html

[6] csplit: https://en.wikipedia.org/wiki/Csplit

[7] Pragmatic Segmenter: https://github.com/diasks2/pragmatic_segmenter

[8] text-segmenter.rb: https://gist.github.com/kelciour/d281f2091c63ef39698896b2f549413b

[9] Источник: https://geektimes.ru/post/292387/