Этот простой проект с графическим интерфейсом научит вас работе с медиафайлами и кросс-платформенному программированию.
Создание видеоплеера может помочь вам наслаждаться любимыми видео в индивидуальной теме и стиле. Вы можете сделать воспроизведение видео более плавным, спроектировать кнопки и меню вашего приложения и добавить любые функции, которые вы хотите.
Этот проект также даст вам практический опыт создания кроссплатформенных настольных приложений, обработки мультимедиа и обработки событий. Узнайте, как создать видеопроигрыватель с помощью Tkinter, VLC и модуля datetime.
Модуль Tkinter, VLC и Datetime
Tkinter позволяет создавать настольные приложения. Он предлагает множество виджетов, таких как кнопки, метки и текстовые поля, которые упрощают разработку таких приложений, как простой календарь с графическим интерфейсом, калькулятор или менеджер списка дел. Чтобы установить Tkinter, откройте терминал и выполните:
pip install tkinter
Python-VLC module — это привязка Python для библиотеки медиаплеера VLC (VideoLAN Client). Вы можете использовать этот модуль для реализации
особенности VLC и создайте свой собственный настраиваемый медиаплеер. Чтобы установить VLC, запустите:pip install python-vlc
дата и время модуль встроен в Python и предоставляет классы и функции для представления различных дат, времени, интервалов и зон.
Вы можете найти исходный код этого проекта в его Репозиторий GitHub.
Импортируйте необходимые модули. определить класс, Приложение MediaPlayer. Определите метод конструктора и вызовите его для инициализации главного окна приложения. Установите заголовок, размеры и цвет фона видеопроигрывателя. Позвоните Initialize_player метод.
import tkinter as tk
import vlc
from tkinter import filedialog
from datetime import timedelta
classMediaPlayerApp(tk.Tk):
def__init__(self):
super().__init__()
self.title("Media Player")
self.geometry("800x600")
self.configure(bg="#f0f0f0")
self.initialize_player()
Определите метод, Initialize_player. Создайте экземпляр медиаплеера VLC для взаимодействия с его функциями. Используя этот экземпляр, создайте объект медиаплеера, который можно использовать для управления воспроизведением мультимедиа. Инициализировать переменную, текущий файл чтобы отслеживать текущее воспроизводимое видео. Установите состояния воспроизведения и вызовите create_widgets метод.
definitialize_player(self):
self.instance = vlc.Instance()
self.media_player = self.instance.media_player_new()
self.current_file = None
self.playing_video = False
self.video_paused = False
self.create_widgets()
Определите create_widgets метод. Создайте виджет холста и передайте родительский элемент для его размещения, цвет фона, ширину и высоту. Создать Выберите файл кнопку, чтобы выбрать видеофайл, который вы хотите воспроизвести. Установите родительский элемент, текст, который он должен отображать, стили шрифта и команду, которую он должен запускать, когда вы щелкаете по нему.
Создайте метку для отображения прошедшего времени и продолжительности видео. Установите родительский элемент, текст, стили шрифта, цвет шрифта и цвет фона. Создайте рамку для управления воспроизведением видео и задайте для нее цвет фона.
defcreate_widgets(self):
self.media_canvas = tk.Canvas(self, bg="black", width=800, height=400)
self.media_canvas.pack(pady=10, fill=tk.BOTH, expand=True)
self.select_file_button = tk.Button(
self,
text="Select File",
font=("Arial", 12, "bold"),
command=self.select_file,
)
self.select_file_button.pack(pady=5)
self.time_label = tk.Label(
self,
text="00:00:00 / 00:00:00",
font=("Arial", 12, "bold"),
fg="#555555",
bg="#f0f0f0",
)
self.time_label.pack(pady=5)
self.control_buttons_frame = tk.Frame(self, bg="#f0f0f0")
self.control_buttons_frame.pack(pady=5)
Определите Играть кнопка, Пауза кнопка, Останавливаться кнопка, Перемотка вперед кнопка, и Перемотка назад кнопка. Создайте виджет индикатора выполнения видео. Установите родительский элемент, в который вы хотите его поместить, способ обновления позиции воспроизведения видео, цвет фона и толщину.
Организуйте все эти элементы с соответствующими отступами в обоих направлениях.
self.play_button = tk.Button(
self.control_buttons_frame,
text="Play",
font=("Arial", 12, "bold"),
bg="#4CAF50",
fg="white",
command=self.play_video,
)
self.play_button.pack(side=tk.LEFT, padx=5, pady=5)
self.pause_button = tk.Button(
self.control_buttons_frame,
text="Pause",
font=("Arial", 12, "bold"),
bg="#FF9800",
fg="white",
command=self.pause_video,
)
self.pause_button.pack(side=tk.LEFT, padx=10, pady=5)
self.stop_button = tk.Button(
self.control_buttons_frame,
text="Stop",
font=("Arial", 12, "bold"),
bg="#F44336",
fg="white",
command=self.stop,
)
self.stop_button.pack(side=tk.LEFT, pady=5)
self.fast_forward_button = tk.Button(
self.control_buttons_frame,
text="Fast Forward",
font=("Arial", 12, "bold"),
bg="#2196F3",
fg="white",
command=self.fast_forward,
)
self.fast_forward_button.pack(side=tk.LEFT, padx=10, pady=5)
self.rewind_button = tk.Button(
self.control_buttons_frame,
text="Rewind",
font=("Arial", 12, "bold"),
bg="#2196F3",
fg="white",
command=self.rewind,
)
self.rewind_button.pack(side=tk.LEFT, pady=5)
self.progress_bar = VideoProgressBar(
self, self.set_video_position, bg="#e0e0e0", highlightthickness=0
)
self.progress_bar.pack(fill=tk.X, padx=10, pady=5)
Определите метод, выберите файл. Откройте диалоговое окно файла, чтобы выбрать видеофайл с .mp4 или .avi расширение. Если вы выберете какой-либо файл, загрузите его путь и обновите метку времени, указав его продолжительность. Запустите воспроизведение выбранного видео.
defselect_file(self):
file_path = filedialog.askopenfilename(
filetypes=[("Media Files", "*.mp4 *.avi")]
)
if file_path:
self.current_file = file_path
self.time_label.config(text="00:00:00 / " + self.get_duration_str())
self.play_video()
Определите метод, get_duration_str которые вы будете использовать для расчета общей продолжительности видео. Если приложение воспроизводит видео, получите его продолжительность в миллисекундах и преобразуйте в ЧЧ: ММ: СС формат. Если видео не воспроизводится, вернуться 00:00:00 как значение по умолчанию.
defget_duration_str(self):
if self.playing_video:
total_duration = self.media_player.get_length()
total_duration_str = str(timedelta(milliseconds=total_duration))[:-3]
return total_duration_str
return"00:00:00"
Определите метод, проиграть видео. Если видео не воспроизводится, создайте новый медиа-объект, используя выбранный путь к файлу. Свяжите медиафайл с ранее созданным холстом и инициируйте воспроизведение видео. Обновите play_video состояние Истинный.
defplay_video(self):
ifnot self.playing_video:
media = self.instance.media_new(self.current_file)
self.media_player.set_media(media)
self.media_player.set_hwnd(self.media_canvas.winfo_id())
self.media_player.play()
self.playing_video = True
Определите метод, перемотка вперед. Если воспроизводится видео, получите текущее прошедшее время и добавьте к нему 10 000 миллисекунд. Установите новое время воспроизведения. Точно так же определите метод, перематывать что вычитает 10 000 миллисекунд.
deffast_forward(self):
if self.playing_video:
current_time = self.media_player.get_time() + 10000
self.media_player.set_time(current_time)
defrewind(self):
if self.playing_video:
current_time = self.media_player.get_time() - 10000
self.media_player.set_time(current_time)
Определите метод, pause_video. Если вы запустили какое-либо воспроизведение видео и приостановили его, вызовите играть способ возобновить его. В противном случае позвоните в Пауза метод и соответствующим образом обновить пользовательский интерфейс в обоих случаях.
defpause_video(self):
if self.playing_video:
if self.video_paused:
self.media_player.play()
self.video_paused = False
self.pause_button.config(text="Pause")
else:
self.media_player.pause()
self.video_paused = True
self.pause_button.config(text="Resume")
Определите метод, останавливаться. Если воспроизводится видео, остановите его и сбросьте метку времени. Определите метод, set_video_position. Если воспроизводится видео, получите общую продолжительность и рассчитайте желаемую позицию в миллисекундах. Установите время воспроизведения видео в рассчитанное положение.
defstop(self):
if self.playing_video:
self.media_player.stop()
self.playing_video = False
self.time_label.config(text="00:00:00 / " + self.get_duration_str())
defset_video_position(self, value):
if self.playing_video:
total_duration = self.media_player.get_length()
position = int((float(value) / 100) * total_duration)
self.media_player.set_time(position)
Определите метод, update_video_progress. Если воспроизводится видео, получите общую продолжительность и текущее время воспроизведения, а также рассчитайте процент выполнения. Обновите индикатор выполнения, используя это вычисленное значение. Отформатируйте текущее время и общую продолжительность в ЧЧ: ММ: СС формат.
Запланируйте повторный запуск этого метода через 1000 миллисекунд. Это создает цикл, который постоянно обновляет ход видео и метки времени во время воспроизведения видео.
defupdate_video_progress(self):
ifself.playing_video:
total_duration = self.media_player.get_length()
current_time = self.media_player.get_time()
progress_percentage = (current_time / total_duration) * 100
self.progress_bar.set(progress_percentage)
current_time_str = str(timedelta(milliseconds=current_time))[:-3]
total_duration_str = str(timedelta(milliseconds=total_duration))[:-3]
self.time_label.config(text=f"{current_time_str}/{total_duration_str}")
self.after(1000, self.update_video_progress)
определить класс, ВидеоProgressBar который наследует от тк. Шкала виджет. Определите конструктор, который устанавливает начальное состояние и поведение индикатора выполнения. Установить показательная стоимость возможность ЛОЖЬ чтобы не отображать текущее значение.
Инициализируйте прогресс в диапазоне от 0 до 100. Установите ориентацию, длину, команду, которую он должен запустить, и настройку на индикаторе выполнения. Привяжите событие к индикатору выполнения, чтобы при нажатии на него выполнялось по щелчку метод.
classVideoProgressBar(tk.Scale):
def__init__(self, master, command, **kwargs):
kwargs["showvalue"] = False
super().__init__(
master,
from_=0,
to=100,
orient=tk.HORIZONTAL,
length=800,
command=command,
**kwargs,
)
self.bind("" , self.on_click)
Определите метод, по щелчку. Убедитесь, что индикатор выполнения не отключен, и вычисляет новое значение на основе положения щелчка. Соответственно обновите значение индикатора выполнения.
defon_click(self, event):
if self.cget("state") == tk.NORMAL:
value = (event.x / self.winfo_width()) * 100
self.set(value)
Создайте экземпляр Приложение MediaPlayer класс и позвоните в update_video_progress метод. основной цикл () Функция сообщает Python запустить цикл событий Tkinter и прослушивать события, пока вы не закроете окно.
if __name__ == "__main__":
app = MediaPlayerApp()
app.update_video_progress()
app.mainloop()
При запуске программы появляется медиаплеер. Он содержит Выберите файл кнопку, метки времени, кнопки для управления воспроизведением видео и индикатор выполнения видео.
Когда вы выбираете видео, оно автоматически воспроизводится с самого начала, обновляя время начала и продолжительность меток времени.
При попадании в Пауза кнопку, видео приостанавливается и меняется на Резюме кнопка. При нажатии на Перемотка вперед кнопку, видео пропускается вперед на 10 секунд.
Аналогично, при попадании в Перемотка назад кнопку, он возвращается на 10 секунд. При нажатии на Останавливаться кнопку, воспроизведение видео останавливается. Вы можете перетащить или щелкнуть любую область на индикаторе выполнения, чтобы перейти к любой части видео, а метка времени показывает прошедшее время.
Вы можете улучшить этот медиаплеер, добавив возможность загрузки и отображения субтитров. Вы также можете рассмотреть такие функции, как изменение соотношения сторон, управление громкостью и зацикливание части видео.
Чтобы реализовать эти функции, вы можете изучить модуль Pygame. Pygame универсален, прост в использовании и хорошо интегрируется с Tkinter. Библиотека допускает настройку, имеет интерактивные функции и может работать на любой платформе.