Это код, который воспроизводит только видео канал в окне tkinter. Я хочу знать, как я могу воспроизводить звук с ним. Этот код поможет мне воспроизвести файл mp4 в инструменте tkinter для программного обеспечения. Я только начал работать с python, поэтому не могу заставить его работать с моими текущими знаниями и навыками.
Этот код воспроизводит видео канал (без звука) в окне tkinter. Я хочу, чтобы он также воспроизводил аудио-каналы с видео-каналами. Как я могу это сделать?
import struct
import tkinter
import cv2
import PIL.Image, PIL.ImageTk
import time
from_folder = "YouTube.mp4"
class App:
def __init__(self, window, window_title, video_source=0):
self.window = window
self.window.title(window_title)
self.video_source = video_source
self.vid = MyVideoCapture(self.video_source)
self.canvas = tkinter.Canvas(window, width = 800, height=900 ,bg="black")
self.canvas.pack()
self.btn_snapshot=tkinter.Button(window, text="Snapshot",height=3, width=20, command=self.snapshot)
self.btn_snapshot.pack(anchor=tkinter.CENTER, expand=True)
self.delay = 15
self.update()
self.window.mainloop()
def snapshot(self):
ret, frame = self.vid.get_frame()
if ret:
cv2.imwrite("frame-" + time.strftime("%d-%m-%Y-%H-%M-%S") + ".jpg", cv2.cvtColor(frame, cv2.COLOR_RGB2BGR))
def update(self):
ret, frame = self.vid.get_frame()
if ret:
self.photo = PIL.ImageTk.PhotoImage(image = PIL.Image.fromarray(frame))
self.canvas.create_image(0, 0, image = self.photo, anchor = tkinter.NW)
self.window.after(self.delay, self.update)
class MyVideoCapture:
def __init__(self, video_source=0):
self.vid = cv2.VideoCapture(video_source)
if not self.vid.isOpened():
raise ValueError("Unable to open video source", video_source)
self.width = self.vid.get(cv2.CAP_PROP_FRAME_WIDTH)
self.height = self.vid.get(cv2.CAP_PROP_FRAME_HEIGHT)
def get_frame(self):
ret, frame = self.vid.read()
if self.vid.isOpened():
ret, frame = self.vid.read()
if ret:
return (ret, cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
else:
return (ret, None)
else:
return (ret, None)
# Release the video source when the object is destroyed
def __del__(self):
if self.vid.isOpened():
self.vid.release()
App(tkinter.Tk(), "Tkinter and OpenCV", from_folder)