python3 (Die Operation auf python2 ist nicht bestätigt. Hinzugefügt am 2020/5/21) linux(debian 64bit) cpu: intel core i7
5/20 Nachtrag:
pip3 install tkmedia
Und ffmpeg kann durch Installation installiert werden (5/30 Postscript).
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.)
ffmpeg
(Auch ein PC mit mäßiger Leistung (Tetsuwan OOO und Sele OO von Unternehmen, die mit i beginnen, werden nicht empfohlen).
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.
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()
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