Введение
В данной статье мы разберем создание графического интерфейса приложения на Python для извлечения аудио из видео файлов, используя библиотеки `moviepy`, `ttkbootstrap`, `pymediainfo`, `tkinterdnd2`, а также инструмент для создания исполняемого файла - `PyInstaller`.
Мы рассмотрим шаги по созданию самого приложения, а затем обсудим, как упаковать его в exe-файл для запуска на Windows.
Шаг 1: Установка необходимых библиотек
Для работы приложения нам понадобятся следующие библиотеки:
- `moviepy`
- `ttkbootstrap`
- `pymediainfo`
- `tkinterdnd2`
- `Pillow`
- `PyInstaller`
Установить их можно с помощью pip:
Шаг 2: Создание приложения
Ниже приведен полный код Python-скрипта `sound.py`, показывающего процесс извлечения аудио из видео файла с отображением прогресса и случайным выбором кадра из видео на каждой секунде. Полный код доступен в моём Telegram канале, ссылочка ниже или в шапке канала.
Импорт библиотек
- `os`: используется для работы с файловой системой.
- `threading`: позволяет запускать функции в отдельных потоках.
- `time`: используется для выполнения временных задержек.
- `random`: используется для генерации случайных чисел.
- `tkinter`: стандартная библиотека для создания графического интерфейса.
- `filedialog`: позволяет пользователю выбирать файлы.
- `moviepy.editor`: библиотека для работы с видео и аудио.
- `tkinterdnd2`: добавляет поддержку функции drag and drop.
- `ttkbootstrap`: улучшенные виджеты для tkinter.
- `pymediainfo`: позволяет извлекать параметры медиа файлов.
- `PIL`: библиотека, используемая для обработки изображений (часть Pillow).
Класс VideoConverterApp
Основной класс приложения, который включает в себя настройку интерфейса и все основные функции.
Конструктор класса
Конструктор принимает корневой элемент интерфейса tkinter и вызывает метод `setup_ui` для настройки интерфейса.
Метод setup_ui
- Настройка интерфейса: Устанавливаем заголовок окна, размеры окна и тему.
- Поддержка drag and drop: Позволяет пользователю перетаскивать видеофайлы на область `Canvas`.
- Создание виджетов: Создание и размещение всех виджетов, включая кнопки, комбобокс для выбора битрейта, прогресс-бар и виджет логирования.
- Планирование обновления кадра: Метод `self.root.after(1000, self.update_video_frame)` запускает обновление кадра каждую секунду.
Методы для работы с видео и аудио
Выбор видеофайла
Открывает диалоговое окно для выбора видеофайла и передает путь к файлу в метод `handle_video_file`.
Обработка выбранного файла
Сохраняет путь к видеофайлу, логирует выбор файла и вызывает методы для извлечения информации о видео и обновления метки.
Извлечение информации о видео
Извлекает параметры видео, такие как разрешение, размер файла, продолжительность, битрейт аудио и логирует их.
Обновление кадра каждую секунду
Планирует вызов метода `display_video_frame` каждую секунду для отображения случайного кадра из видео.
Отображение случайного кадра
Отображает случайный кадр из видео каждую секунду.
Конвертация аудио!
Метод для сохранения аудио
Запускает процесс конвертации аудио в отдельном потоке и обновляет прогресс-бар.
Завершение приложения!
Метод для закрытия приложения
Безопасно завершает все активные потоки перед закрытием приложением.
Весь код порядка 200+ строчек, поэтому не буду растягивать статью, весь код я выложу в своем Telegram канале, ссылочка будет в конце статьи.
Шаг 3. Создание exe файла
1. Установите `PyInstaller`:
pip install pyinstaller
2. Перейдите в каталог, где находится ваш `sound.py` файл.
3. Создайте файл `main.spec`, если его нет.
4. Соберите проект с использованием `spec` файла:
pyinstaller main.spec
Таким образом, вы сможете создать исполняемый файл для вашего приложения и запускать его на Windows.
Немного фото самого приложения (листайте или крутите фото):
Заключение
Мы создали графический интерфейс для извлечения аудио из видео файлов с помощью Python и упаковали его в исполняемый файл для Windows. Вы можете добавлять новые функции и улучшения в это приложение, превращая его в мощный инструмент для работы с мультимедиа файлами.
Я показал лишь малую часть функционала, далее приложение можно развивать и дорабатывать. Для удобства я выложу все исходники и сам код в свой Telegram канал. https://t.me/myit_tg
Буду очень рад вас там видеть!