Как и многих пользователей Хабра меня интересует вопрос, как можно повысить эффективность изучения иностранных языков. Один из наиболее часто рекомендуемых методов — смотреть фильмы на изучаемом языке. И, естественно, я им пользуюсь. Периодически меня посещают мысли о необходимости оптимизации этого подхода. Сначала я нашел себе проигрыватели, которые поддерживают одновременное отображение субтитров на двух языках: субтитры на изучаемом языке отображаются как обычно внизу экрана, а вверху отображаются субтитры на русском. Но этого мне показалось мало. Я пошел искать проигрыватель, который мог бы отображать не только текущие субтитры, но и "транскрипт" — последовательность, включающую как текущий фрагмент субтитров, так и соседние, что бы из них можно было сложить связанный более крупный фрагмент текста. Это может быть удобно если:
-
при просмотре было что-то непонятно, нужно прочитать субтитр, а он уже скрыт и при этом не хочется перематывать назад и ловить пропущенный кусок
-
субтитры разбиты на фрагменты таким образом что каждый из них не является законченной фразой и для того что бы понять смысл нужно иметь перед глазами две-три строки субтитров
Такая функциональность есть, например, на YouTube и на Корсэре.
Однако после некоторых изысканий я к своему удивлению обнаружил что этой фичи нет ни в одном Windows-проигрывателе.
У меня как раз чесались руки попробовать что из себя представляет связка Cursor+o1. Так спонтанно родилось решение использовать такой проигрыватель в качестве объекта для экспериментов с этими инструментами. Сразу скажу, что навыков разработки у меня практически нет (если не считать минимальных фрагментарных представлений о разработке для веба).
Сначала я пытался понять можно ли эту задачу решить в виде веб-приложения, но спустя какое-то время решил поискать что тут можно сделать с помощью Python-скриптов, и в итоге на этом варианте и остановился.
В первом промпте я начал с общей постановки задачи о том что нужно реализовать проигрыватель видео на Питоне. Моя ошибка заключалась в том что я сразу же явно указал библиотеку tkvideoplayer
, на основе которой предполагалось все реализовать. Мне казалось что максимум деталей в изначальной постановке задачи должен привести к наиболее эффективному решению. В результате мне некоторое время не удавалось даже просто воспроизводить видео со звуком. После множества попыток это исправить ИИ сам перешел на использование библиотеки python-vlc
, после чего процесс "разработки" заметно ускорился.
На следующем шаге относительно быстро удалось сделать приложение "двухоконным": в одном окне осуществляется воспроизведение видео, другое окно - это панель управления воспроизведением и отображения транскрипта. Верстку элементов в окне управления я сначала пытался менять с помощью промптов, но потом все-таки начал это делать своими руками непосредственно в коде.
В итоге получилось примерно так:
Больше всего времени было потрачено на тщетные попытки формировать "транскрипт на основе субтитров" в режиме реального времени путем извлечения субтитров из видео непосредственно в процессе проигрывания. Только спустя некоторое время (и после исчерпания лимитов о1) до меня дошло, что, вероятно, это в принципе практически нерешаемая задача, т.к. извлечение субтитров из видео требует некоторых ресурсов и времени. В итоге пришлось делать костыль — сначала извлекать субтитры в отдельные файлы, а затем подгружать их в проигрыватель уже из srt-файлов.
Скрипт для извлечения субтитров получилось написать практически с первой попытки, но и тут не обошлось без подводных камней. Он хорошо отработал на первом фильме, но завис на втором. ИИ на мой вопрос по поводу зависания ничего внятного не ответил, предложил добавить в реализацию сбор диагностической информацией. Мне было лень заморачиваться с допиливанием диагностики, поэтому я включил
На последнем шаге я доделал разные мелочи для удобства (hot-keys, запоминание параметров фильма при закрытии и повторном открытии) — это потребовало минимум телодвижений.
В итоге поделка получилась довольно убогая и весьма глючная, но меня устраивает — пользуюсь пока ежедневно. Рад что заморочился. Надеюсь когда-нибудь найти в себе силы заняться доработкой.
В процессе я пользовался только Чатом Курсора. Соответственно, Композер и автокомплит не использовал. Ручных правок кода максимально избегал (за исключением вышеупомянутых небольших изменений верстки окна Controls). О существовании и особенностях Композера я узнал сильно позже, при следующем "подходе к снаряду" — интересная оказалась штука, но для данной задачи, видимо, неактуальная, т.к. тут все в одном файле.
Заключение
В целом с учетом всех вводных первый опыт использования Cursor+o1 и получившийся "продукт" меня, скорее, удовлетворили. Не знаю как получилось бы эту задачу решить с помощью VSCode+Copilot. Вероятно, получилось бы, но желания проверять у меня пока нет.
Что касается самого приложения, то наверно было бы интересно посмотреть как это работает в следующей конфигурации: видео воспроизводится на телевизоре, а интерфейс с транскриптами и кнопками управления воспроизведением работает на планшете, который пользователь держит в руках. Но ввиду отсутствия телевизора и планшета лично я пока не планирую практических шагов в эту сторону. Могу только осторожно предположить, что целесообразно будет это делать как веб-приложение, а не как Python-скрипт.
Автор: AlexanderAnisimov