Всем привет! Написал небольшой скрипт, который ищет заданную фразу по всем субтитрам в папке (и во всех подпапках) и показывает соответствующий видеофайл с этого места. Если было несколько совпадений, то будет создан плейлист, по которому можно перемещаться либо с помощью «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
Для работы скрипта необходимо, чтобы имя файла с субтитрами совпадало с именем видеофайла.
При поиске можно использовать регулярные выражения.
Если в консоли появится None, то скорее всего ошибка в фразе для поиска. Возможно, нужно экранировать некоторые спец. символы обратной косой чертой ().
На странице загрузки есть готовый бинарник под Windows (архив playphrase.zip).
Для упрощения ввода новых фраз можно воспользоваться файлом videogrep.bat (под Windows) или videogrep.sh (под Linux), предварительно отредактировав его и изменив в текстовом редакторе путь к папке с видеофайлами и субтитрами. Для выхода можно набрать quit, exit или q, x.
При желании скрипт можно использовать и с аудиокнигами, но необходимо будет предварительно сгенерировать субтитры для каждого аудиофайла. Для этого можно воспользоваться программой aeneas (или онлайн версией), предназначенной в первую очередь для создания EPUB 3 Audio-eBooks. Для полуавтоматического разбиения текста книги по главам можно использовать, например, консольную утилиту csplit, а для дальнейшего разбиения на более короткие фрагменты Pragmatic Segmenter.
Если кратко, то последовательность примерно следующая (предполагается, что аудиокнига разбита по главам):
- Разбить текст книги по главам с помощью 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+$/" {*}
- Разбить текст каждой главы с помощью Pragmatic Segmenter. Для частичной автоматизации можно воспользоваться скриптом text-segmenter.rb (компиляция ответов на Stack Overflow).
- Сгенерировать субтитры для каждого аудиофайла с помощью 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
В итоге получится как-то так:
В общем, может быть, кому-нибудь будет полезна.
Автор: Николай