Этот код воспроизводит видео канал (без звука) в окне tkinter. Я хочу, чтобы он также воспроизводил аудио-каналы с видео-каналами. Как я могу это сделать? - PullRequest
0 голосов
/ 12 февраля 2020

Это код, который воспроизводит только видео канал в окне 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...