Lecture vidéo avec son sur python !! (tkinter / imageio)

1. Environnement de vérification de fonctionnement

python3 (l'opération sur python2 n'est pas confirmée. Ajouté le 21/05/2020) linux(debian 64bit) cpu: intel core i7

2. Ce dont vous avez besoin pour exécuter le code de cet article

Post-scriptum 5/20:

pip3 install tkmedia

Et ffmpeg peut être installé en installant (5/30 postscript).

module python

tkinter (inclus avec python, installez python3-tk pour linux imageio pillow pydub sounddevice numpy De plus, certains modules fournis avec python (Tous peuvent être installés avec "pip3 install [nom du module]".)

Autres logiciels

ffmpeg

(Aussi, un PC avec des performances modérées (Tetsuwan OOO et Sele OO des entreprises commençant par i ne sont pas recommandés)

3. Comment utiliser le code de cet article

Placez les fichiers comme suit:

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

Exécutez ce qui suit dans le répertoire où se trouve le répertoire "play_video":

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()

Laissez la licence libre. N'hésitez pas à éditer, redistribuer, utiliser à des fins commerciales, etc. (Je ne sais pas si quelqu'un l'utilise) Si possible, veuillez nous le faire savoir dans les commentaires ou par e-mail ([email protected]). Vérifiez également la licence de la bibliothèque et du logiciel que vous utilisez. Cependant, l'auteur n'assume aucune responsabilité, alors merci.

4. Lecture audio

Utilisez pydub et sounddevice (et 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. Lecture vidéo

Lisez-le avec imageio et affichez-le dans le cadre de tkinter via PIL (cela se fait en multi-thread).

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)#Rendez-le compatible avec webm.(Tout à fait de force)
    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

Lecture vidéo avec son sur python !! (tkinter / imageio)
Jouez avec 2016-Python
Programmation avec Python et Tkinter
Gestion de vidéos YouTube avec Python 3
[Python] Jouez avec le Webhook de Discord.
Exécuter Label avec tkinter [Python]
Jouons avec Excel avec Python [Débutant]
[Python] Création de plusieurs fenêtres avec Tkinter
Lire un fichier audio à partir de Python avec interruption
Jouez des nombres manuscrits avec python, partie 2 (identifier)
Enregistrer la vidéo image par image avec Python OpenCV
Fractal pour faire et jouer avec Python
Développer des applications Windows avec Python 3 + Tkinter (Préparation)
Je veux jouer avec aws avec python
Jouez avec Prophet
Créer un cadre avec un arrière-plan transparent avec tkinter [Python]
Jeu à la main en Python (commençons avec AtCoder?)
FizzBuzz en Python3
Grattage avec Python
[REAPER] Comment jouer à Reascript avec Python
Jouez avec Google Spread Sheet avec Python (OAuth)
Statistiques avec python
Grattage avec Python
Python avec Go
Jouez avec PyTorch
Outil de rognage d'image GUI réalisé avec Python + Tkinter
Twilio avec Python
Intégrer avec Python
Jouer Python async
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
AES256 avec python
Testé avec Python
MVC avec Tkinter
Développer des applications Windows avec Python 3 + Tkinter (fichier exe)
python commence par ()
avec syntaxe (Python)
Comment utiliser tkinter avec python dans pyenv
Bingo avec python
Zundokokiyoshi avec python
Jouez avec CentOS 8
Jouez avec Pyramid
Excel avec Python
Jouez avec Fathom
Micro-ordinateur avec Python
[Python] Modèle Tkinter
Cast avec python
[Jouons avec Python] Créer un livre de comptes de ménage
Comment boucler et lire une vidéo gif avec openCV
Afficher et prendre des images de caméra Web avec Python Kivy [GUI]
[Python] Créez un fichier de distribution pour le programme Tkinter avec cx_Freeze
[Piyopiyokai # 1] Jouons avec Lambda: création d'un script Python
Afficher l'image de la caméra USB avec OpenCV de Python avec Raspeye
[Python] Road to the Serpent (5) Jouez avec Matplotlib
Communication série avec Python
Zip, décompressez avec python
Django 1.11 a démarré avec Python3.6
Jugement des nombres premiers avec Python
Python avec eclipse + PyDev.
Communication de socket avec Python