Проигрыватель видео с поддержкой транскрипта

в 13:31, , рубрики: cursor, o1

Как и многих пользователей Хабра меня интересует вопрос, как можно повысить эффективность изучения иностранных языков. Один из наиболее часто рекомендуемых методов — смотреть фильмы на изучаемом языке. И, естественно, я им пользуюсь. Периодически меня посещают мысли о необходимости оптимизации этого подхода. Сначала я нашел себе проигрыватели, которые поддерживают одновременное отображение субтитров на двух языках: субтитры на изучаемом языке отображаются как обычно внизу экрана, а вверху отображаются субтитры на русском. Но этого мне показалось мало. Я пошел искать проигрыватель, который мог бы отображать не только текущие субтитры, но и "транскрипт" — последовательность, включающую как текущий фрагмент субтитров, так и соседние, что бы из них можно было сложить связанный более крупный фрагмент текста. Это может быть удобно если:

  • при просмотре было что-то непонятно, нужно прочитать субтитр, а он уже скрыт и при этом не хочется перематывать назад и ловить пропущенный кусок

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

Такая функциональность есть, например, на YouTube и на Корсэре.

Однако после некоторых изысканий я к своему удивлению обнаружил что этой фичи нет ни в одном Windows-проигрывателе.

У меня как раз чесались руки попробовать что из себя представляет связка Cursor+o1. Так спонтанно родилось решение использовать такой проигрыватель в качестве объекта для экспериментов с этими инструментами. Сразу скажу, что навыков разработки у меня практически нет (если не считать минимальных фрагментарных представлений о разработке для веба).

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

В первом промпте я начал с общей постановки задачи о том что нужно реализовать проигрыватель видео на Питоне. Моя ошибка заключалась в том что я сразу же явно указал библиотеку tkvideoplayer, на основе которой предполагалось все реализовать. Мне казалось что максимум деталей в изначальной постановке задачи должен привести к наиболее эффективному решению. В результате мне некоторое время не удавалось даже просто воспроизводить видео со звуком. После множества попыток это исправить ИИ сам перешел на использование библиотеки python-vlc, после чего процесс "разработки" заметно ускорился.

На следующем шаге относительно быстро удалось сделать приложение "двухоконным": в одном окне осуществляется воспроизведение видео, другое окно - это панель управления воспроизведением и отображения транскрипта. Верстку элементов в окне управления я сначала пытался менять с помощью промптов, но потом все-таки начал это делать своими руками непосредственно в коде.

В итоге получилось примерно так:

Проигрыватель видео с поддержкой транскрипта - 1

Больше всего времени было потрачено на тщетные попытки формировать "транскрипт на основе субтитров" в режиме реального времени путем извлечения субтитров из видео непосредственно в процессе проигрывания. Только спустя некоторое время (и после исчерпания лимитов о1) до меня дошло, что, вероятно, это в принципе практически нерешаемая задача, т.к. извлечение субтитров из видео требует некоторых ресурсов и времени. В итоге пришлось делать костыль — сначала извлекать субтитры в отдельные файлы, а затем подгружать их в проигрыватель уже из srt-файлов.

Скрипт для извлечения субтитров получилось написать практически с первой попытки, но и тут не обошлось без подводных камней. Он хорошо отработал на первом фильме, но завис на втором. ИИ на мой вопрос по поводу зависания ничего внятного не ответил, предложил добавить в реализацию сбор диагностической информацией. Мне было лень заморачиваться с допиливанием диагностики, поэтому я включил мозги и догадался что возможной причиной зависания было то, что фильм содержал несколько субтитров на одном языке (например, две версии русских субтитров). Я попросил ИИ модифицировать скрипт с учетом этой особенности, в результате чего и на втором фильме все отработало нормально.

На последнем шаге я доделал разные мелочи для удобства (hot-keys, запоминание параметров фильма при закрытии и повторном открытии) — это потребовало минимум телодвижений.

В итоге поделка получилась довольно убогая и весьма глючная, но меня устраивает — пользуюсь пока ежедневно. Рад что заморочился. Надеюсь когда-нибудь найти в себе силы заняться доработкой.

В процессе я пользовался только Чатом Курсора. Соответственно, Композер и автокомплит не использовал. Ручных правок кода максимально избегал (за исключением вышеупомянутых небольших изменений верстки окна Controls). О существовании и особенностях Композера я узнал сильно позже, при следующем "подходе к снаряду" — интересная оказалась штука, но для данной задачи, видимо, неактуальная, т.к. тут все в одном файле.

Заключение

В целом с учетом всех вводных первый опыт использования Cursor+o1 и получившийся "продукт" меня, скорее, удовлетворили. Не знаю как получилось бы эту задачу решить с помощью VSCode+Copilot. Вероятно, получилось бы, но желания проверять у меня пока нет.

Что касается самого приложения, то наверно было бы интересно посмотреть как это работает в следующей конфигурации: видео воспроизводится на телевизоре, а интерфейс с транскриптами и кнопками управления воспроизведением работает на планшете, который пользователь держит в руках. Но ввиду отсутствия телевизора и планшета лично я пока не планирую практических шагов в эту сторону. Могу только осторожно предположить, что целесообразно будет это делать как веб-приложение, а не как Python-скрипт.

Автор: AlexanderAnisimov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js