Videowiedergabe mit Ton auf Python !! (tkinter / imageio)

1. Umgebung zur Funktionsprüfung

python3 (Die Operation auf python2 ist nicht bestätigt. Hinzugefügt am 2020/5/21) linux(debian 64bit) cpu: intel core i7

2. Was Sie benötigen, um den Code in diesem Artikel auszuführen

5/20 Nachtrag:

pip3 install tkmedia

Und ffmpeg kann durch Installation installiert werden (5/30 Postscript).

Python-Modul

tkinter (im Lieferumfang von Python enthalten, installieren Sie python3-tk für Linux imageio pillow pydub sounddevice numpy Auch einige Module, die mit Python kommen (Alle können mit "pip3 install [Modulname]" installiert werden.)

Andere Software

ffmpeg

(Auch ein PC mit mäßiger Leistung (Tetsuwan OOO und Sele OO von Unternehmen, die mit i beginnen, werden nicht empfohlen).

3. Verwendung des Codes in diesem Artikel

Platzieren Sie die Dateien wie folgt:

play_video
|-__init__.py(Himmel)
|-audio.py
|-video.py

Führen Sie Folgendes in dem Verzeichnis aus, in dem sich das Verzeichnis "play_video" befindet:

import play_video.video
import play_video.audio
import tkinter

video = video.Video()
audio = audio.Audio()

root = tkinter.Tk()
root.frame = tkinter.Label(root)
root.frame.pack()

video.openfile("[videofile_path]")
audio.openfile("[videofile_path]",)

audio.play()
video.play()
root.mainloop()

Lassen Sie die Lizenz frei. Fühlen Sie sich frei zu bearbeiten, weiterzugeben, für kommerzielle Zwecke zu verwenden, etc. (Ich weiß nicht, ob jemand es benutzt) Wenn möglich, teilen Sie uns dies bitte in den Kommentaren oder per E-Mail mit ([email protected]). Überprüfen Sie auch die Lizenz der Bibliothek und Software, die Sie verwenden. Der Autor übernimmt jedoch keine Verantwortung, also danke.

4. Audiowiedergabe

Verwenden Sie pydub und sounddevice (und numpy)

audio.py


from . import sounddevice
import pydub
import time
import numpy

class Audio():
    def __init__(self):
        pass
    def openfile(self, filepath):
        if ".mp3" in filepath:
            self.segment = pydub.AudioSegment.from_file(filepath,codec="mp3")
        elif ".wav" in filepath:
            self.segment = pydub.AudioSegment.from_file(filepath,codec="wav")
        elif ".mp4" in filepath:
            self.segment = pydub.AudioSegment.from_file(filepath)
        else:
            self.segment = pydub.AudioSegment.from_file(filepath)
    def play(self, place=0):
        if self.segment.channels != 1:
            self.samples = numpy.array(self.segment.get_array_of_samples().tolist(),dtype="int16").reshape(-1,self.segment.channels)
        else:
            self.samples = numpy.array(self.segment.get_array_of_samples().tolist(),dtype='int16')
        sounddevice.play(self.samples,self.segment.frame_rate)
    def stop(self):
        sounddevice.stop()

5. Videowiedergabe

Lesen Sie es mit imageio und zeigen Sie es im Rahmen von tkinter über PIL an (dies erfolgt in Multithread).

video.py


import tkinter
from tkinter import ttk
import imageio
from PIL import ImageTk, Image
import time
import threading
from imageio.plugins.ffmpeg import FfmpegFormat

class Video():
    def __init__(self):
        format = FfmpegFormat(
            "ffmpeg",
            "Many video formats and cameras (via ffmpeg)",
            ".mov .avi .mpg .mpeg .mp4 .mkv .wmv .webm",
            "I",
            )
        imageio.formats.add_format(format,True)#Machen Sie es kompatibel mit webm.(Ganz gewaltsam)
    def openfile(self, file_path,frame):
        self.frame = frame
        try:
            self.video = imageio.get_reader(file_path)
        except imageio.core.fetching.NeedDownloadError:
            imageio.plugins.avbin.download()
            self.video = imageio.get_reader(file_path)
    def play(self):
        self.video_thread = threading.Thread(target=self._stream)
        self.video_thread.start()
    def stop(self):
        self.video_thread.stop()
    def _stream(self):
        start_time=time.time()
        sleeptime = 1/self.video.get_meta_data()["fps"]
        frame_now = 0
        for image in self.video.iter_data():
            frame_now = frame_now + 1
            if frame_now*sleeptime >= time.time()-start_time:
                frame_image = ImageTk.PhotoImage(Image.fromarray(image))
                self.frame.config(image=frame_image)
                self.frame.image = frame_image
                time.sleep(sleeptime)
            else:
                pass

Recommended Posts

Videowiedergabe mit Ton auf Python !! (tkinter / imageio)
Spielen Sie mit 2016-Python
Programmieren mit Python und Tkinter
YouTube-Videoverwaltung mit Python 3
[Python] Spielen Sie mit Discords Webhook.
Führen Sie Label mit tkinter [Python] aus.
Lass uns mit Python mit Python spielen [Anfänger]
[Python] Erstellen mehrerer Fenster mit Tkinter
Spielen Sie eine Audiodatei von Python mit Interrupt ab
Spielen Sie handschriftliche Zahlen mit Python Teil 2 (identifizieren)
Speichern Sie Videos Frame für Frame mit Python OpenCV
Fraktal zum Erstellen und Spielen mit Python
Entwickeln Sie Windows-Apps mit Python 3 + Tkinter (Vorbereitung)
Ich möchte mit aws mit Python spielen
Spiel mit dem Propheten
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Python-Handspiel (Beginnen wir mit AtCoder?)
FizzBuzz in Python3
Scraping mit Python
[REAPER] Wie man Reascript mit Python spielt
Spielen Sie mit Google Spread Sheet mit Python (OAuth)
Statistik mit Python
Scraping mit Python
Python mit Go
Spiele mit PyTorch
GUI-Bildschneidewerkzeug mit Python + Tkinter
Twilio mit Python
In Python integrieren
Spielen Sie Python async
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
AES256 mit Python
Getestet mit Python
MVC mit Tkinter
Entwickeln Sie Windows-Apps mit Python 3 + Tkinter (exe-Datei)
Python beginnt mit ()
mit Syntax (Python)
Wie man tkinter mit Python in Pyenv benutzt
Bingo mit Python
Zundokokiyoshi mit Python
Spielen Sie mit CentOS 8
Spiel mit der Pyramide
Excel mit Python
Spiel mit Fathom
Mikrocomputer mit Python
[Python] Tkinter-Vorlage
Mit Python besetzen
[Lass uns mit Python spielen] Ein Haushaltsbuch erstellen
So schleifen und spielen Sie ein GIF-Video mit openCV ab
Anzeigen und Aufnehmen von Webkamerabildern mit Python Kivy [GUI]
[Python] Erstellen Sie mit cx_Freeze eine Verteilungsdatei für das Tkinter-Programm
[Piyopiyokai # 1] Spielen wir mit Lambda: Erstellen eines Python-Skripts
Zeigen Sie das Bild der USB-Kamera mit OpenCV von Python mit Raspeye an
[Python] Weg zur Schlange (5) Spiele mit Matplotlib
Serielle Kommunikation mit Python
Zip, entpacken mit Python
Django 1.11 wurde mit Python3.6 gestartet
Primzahlbeurteilung mit Python
Python mit Eclipse + PyDev.
Socket-Kommunikation mit Python