Seite 1 von 2

Re: Bilder und Videos in Programm einbinden

Verfasst: Donnerstag 12. Juli 2018, 19:38
von __blackjack__
Ja genau, und Deine Antwort darauf verstehe ich nicht. Solange Du das Video in Deinem Programm nicht abspielen kannst, macht es wenig Sinn darüber nachzudenken ob und wie man die Datei einbetten kann.

Re: Bilder und Videos in Programm einbinden

Verfasst: Donnerstag 12. Juli 2018, 21:53
von xXSkyWalkerXx1
Achsoo... Okey, hättest vllt genauer formulieren sollen. ^^
Naja, abgespielt sollte es eigentlich per Mausklick auf's Video bzw Thumbnail - was auch immer richtig wäre.
Z.B. wenn man YouTube Videos in einem Forumpost einbettet, da klickt man ja auch bloß aufs Video.

Re: Bilder und Videos in Programm einbinden

Verfasst: Donnerstag 12. Juli 2018, 22:10
von __blackjack__
Und wie machst Du das?

Re: Bilder und Videos in Programm einbinden

Verfasst: Donnerstag 12. Juli 2018, 23:27
von xXSkyWalkerXx1
Das weiß ich eben nicht.
Kannst du es vllt erklären, wie ich das Ziel erreichen kann?
Heißt jetzt nicht unbedingt fertigen Code, aber so schritte/Erklärung wie ich zum Ziel komme, wäre sehr gut und nett.

Re: Bilder und Videos in Programm einbinden

Verfasst: Freitag 13. Juli 2018, 14:49
von xXSkyWalkerXx1
Also, das hier wäreso ein Beispiel, wie es aussehen soll:

Code: Alles auswählen

import tkinter, os

main = tkinter.Tk()
main.geometry("500x304")
main.title("Video Player - Test")

def playVideo1():
    os.system("/media/pi/DISK_IMG/Filme/Zombieland.mp4")

canvas = tkinter.Canvas(main,background="black")
canvas.pack(side="top")
playBTN = tkinter.Button(main, text="Play Video",command=playVideo1)
playBTN.place(x=250,y=300,anchor="s")
Da, wo die schwarze Leinwand (Canvas) ist, da soll das Video abgespielt werden.
Hätte es zwar gern, dass man wie bei YouTube bloß auf das Video klicken muss, aber glaube mit Button ist es vllt einfacher - weiß nicht?
Wie lasse ich nun da ein Video abspielen und wie ein Bild?

PS. mit PhotoImage kommt immer ein Fehler mit "couldn't recognized data in image" oder so ähnlich.

Re: Bilder und Videos in Programm einbinden

Verfasst: Freitag 13. Juli 2018, 15:46
von __blackjack__
@xXSkyWalkerXx1: Tjaaa, genau das ist das Problem. Wenn ich das tatsächlich lösen müsste, würde ich schauen welche Bibliothek mit Python-Anbindung es mir erlaubt ein Abspielfenster über X-Window-Fenster-ID in einem Tk-`Frame` darzustellen. Vermutlich geht das irgendwie mit gstreamer. Ich denke aber das geht momentan über Deine Fähigkeiten hinaus.

Oder ich würde ein GUI-Rahmenwerk verwenden, das diese Aufgabe einfacher macht.

Re: Bilder und Videos in Programm einbinden

Verfasst: Freitag 13. Juli 2018, 16:27
von Tholo
@skyWalker
Kivy is dafür sehr gut geeignet und hat den Player bereits an Bord. QT5 kann das nach meiner Kenntnis auch bewerkstelligen.

Eine bitte würde ich gleich hierlassen wollen. Kannst du ggf. ein bisschen Eigeninitiative zeigen und Google bemühen etc. Mir (persönlich) kommt es zZ so vor als würdest du wegen jeder 2ten Zeile einen Post eröffnen. Nicht das ich dein Projekt nicht interessant und die Ansätze von deets, Thomas und vielen anderen sehr anschaulich finde. Aber viele Sachen sind offensichtlich auch in Eigenregie zu erfahren.

Ich habe das Gefühl das viele Informationen in der Flut an Posts untergehen.

Kann mich allerdings auch täuschen und verkenne den Lerneffekt durch die Posts.

Re: Bilder und Videos in Programm einbinden

Verfasst: Freitag 13. Juli 2018, 17:42
von xXSkyWalkerXx1
Tholo hat geschrieben: Freitag 13. Juli 2018, 16:27 @skyWalker
Kivy is dafür sehr gut geeignet und hat den Player bereits an Bord. QT5 kann das nach meiner Kenntnis auch bewerkstelligen.

Eine bitte würde ich gleich hierlassen wollen. Kannst du ggf. ein bisschen Eigeninitiative zeigen und Google bemühen etc. Mir (persönlich) kommt es zZ so vor als würdest du wegen jeder 2ten Zeile einen Post eröffnen. Nicht das ich dein Projekt nicht interessant und die Ansätze von deets, Thomas und vielen anderen sehr anschaulich finde. Aber viele Sachen sind offensichtlich auch in Eigenregie zu erfahren.

Ich habe das Gefühl das viele Informationen in der Flut an Posts untergehen.

Kann mich allerdings auch täuschen und verkenne den Lerneffekt durch die Posts.
Hallo! ^-^

Ja, ich versuche eigentlich schon so wenig wie möglich hier nachzufragen.
Das Problem ist, dass man (als Bsp. dieses Thread) garnichts dazu findet, wie man Videos einfügt.
Ebenfalls Bilder, da ich viele Codes/Bsp./Tutorials gesehen habe, aber ich immer die gleiche Fehlermeldung bekomme: "couldn't recognize data in image" oder so ähnlich.
Und zu dem Fehler habe ich bloß gefunden, dass man das Bild in ein GIF umwandeln soll - getan, gleiche Fehlermedlung.

Und so manch Posts von __deets__ und __blackjack__ hat mir echt sehr weitergeholfen. :)

Mit freundlichen Grüßen,
xXSkyWalkerXx1

Re: Bilder und Videos in Programm einbinden

Verfasst: Freitag 13. Juli 2018, 17:45
von xXSkyWalkerXx1
__blackjack__ hat geschrieben: Freitag 13. Juli 2018, 15:46 @xXSkyWalkerXx1: Tjaaa, genau das ist das Problem. Wenn ich das tatsächlich lösen müsste, würde ich schauen welche Bibliothek mit Python-Anbindung es mir erlaubt ein Abspielfenster über X-Window-Fenster-ID in einem Tk-`Frame` darzustellen. Vermutlich geht das irgendwie mit gstreamer. Ich denke aber das geht momentan über Deine Fähigkeiten hinaus.

Oder ich würde ein GUI-Rahmenwerk verwenden, das diese Aufgabe einfacher macht.
Gute Idee! :D Ich schau mal welche es gibt.

Kann man mehrer Frameworks in einem Code nutzen?
Denke mal wahrscheinlich ja, aber möcht lieber erstmal nachfragen. ^^

Re: Bilder und Videos in Programm einbinden

Verfasst: Freitag 13. Juli 2018, 18:21
von __blackjack__
Nein kann man nicht.

Re: Bilder und Videos in Programm einbinden

Verfasst: Freitag 13. Juli 2018, 18:41
von xXSkyWalkerXx1
Ohh. Schade... :D

Dann muss ich so ziemlich neu anfangen - naja gut, wahrscheinlich bloß paar Dinge ersetzen.
Hast du nen Tipp, welchen Framework ich am Besten verwenden soll?
Mein Ziel soll es sein, eine sehr schöne - moderne GUI erstellen zu können, mit Updatefunktion, Video einbetten u. abspielen, später Online Shop und co.

Re: Bilder und Videos in Programm einbinden

Verfasst: Freitag 13. Juli 2018, 18:59
von __blackjack__
@xXSkyWalkerXx1: Ich persönlich bin bei Qt gelandet wenn Tk nicht ausreicht. Wobei man neben den technischen Details die Rechtlichen bedenken muss. Also Lizenzen von Bibliotheken und Anbindungen daran. Insbesondere Du, weil Du ja so gerne alles verstecken möchtest. :-D

Re: Bilder und Videos in Programm einbinden

Verfasst: Freitag 13. Juli 2018, 20:23
von Tholo
Ich hab dir doch deswegen bereits kivy empfohlen. Der Einstieg ist für Anfänger gut dokumentiert und du hast eine Gui welche mit Camera, video und multi touch klar kommt.

Re: Bilder und Videos in Programm einbinden

Verfasst: Sonntag 15. Juli 2018, 20:05
von xXSkyWalkerXx1
__blackjack__ hat geschrieben: Freitag 13. Juli 2018, 18:59 @xXSkyWalkerXx1: Ich persönlich bin bei Qt gelandet wenn Tk nicht ausreicht. Wobei man neben den technischen Details die Rechtlichen bedenken muss. Also Lizenzen von Bibliotheken und Anbindungen daran. Insbesondere Du, weil Du ja so gerne alles verstecken möchtest. :-D
Ja, denke auch gerade mit PyQt weiter zu machen / neu an zu fangen. :D Und Tk ist zwar für'n Anfang ok, aber ich will ja mehr und besondereres machen - für meine Community und Käufer. :D
Wie meinst das mit den Lizenzen von Biblios und deren Anbindung bzw dessen rechtliche Bedenken? ^^ Meinst, da ich ja meine Skripts und so verstecken möchte und ich das erstmal richtig hingriegen muss - so in der Art, oder wie? :D
Tholo hat geschrieben: Freitag 13. Juli 2018, 20:23 Ich hab dir doch deswegen bereits kivy empfohlen. Der Einstieg ist für Anfänger gut dokumentiert und du hast eine Gui welche mit Camera, video und multi touch klar kommt.
Ja, aber Kivy ist doch weniger dafür geeignet, sondern eher für NUIs.

Re: Bilder und Videos in Programm einbinden

Verfasst: Sonntag 15. Juli 2018, 20:14
von __blackjack__
@xXSkyWalkerXx1: Wenn Du GPL-Lizensierte Bibliotheken verwendest, dann kannst Du Deinen Code schlecht verstecken, denn dann können Deine Benutzer den Quelltext von Dir verlangen und Dich gegebenenfalls vor Gericht bringen, wenn Du den nicht raus rückst.

Re: Bilder und Videos in Programm einbinden

Verfasst: Sonntag 15. Juli 2018, 21:41
von wuf
Hi xXSkyWalkerXx1

Kannst du mit dem folgenden Skript einmal versuchen ein .mp4 Video abzuspielen?:

Code: Alles auswählen

import sys
import os

from functools import partial
import tkinter as tk

import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
# Needed for set_window_handle():
gi.require_version('GstVideo', '1.0')
from gi.repository import GstVideo

APP_TITLE = "GStreamer"
APP_XPOS = 100
APP_YPOS = 100
APP_WIDTH = 400
APP_HEIGHT = 400


class Application(object):

    def __init__(self, master):
        self.master = master
        self.master.protocol("WM_DELETE_WINDOW", self.close)
        
        self.main_frame = tk.Frame(master, relief='sunken', bd=6)
        self.main_frame.pack(padx=10, pady=10)
        
        self.display_frame = tk.Frame(self.main_frame, width=530, height=300,
            relief='sunken', bd=2)
        self.display_frame.pack()
        
        self.button_frame = tk.Frame(master)
        self.button_frame.pack(expand=True, pady=(0, 10))
        
        tk.Button(self.button_frame, text="Start",
            command=partial(self.video_control, 'start')).pack(side='left')
        tk.Button(self.button_frame, text="Pause",
            command=partial(self.video_control, 'pause')).pack(side='left')
        tk.Button(self.button_frame, text="Stop",
            command=partial(self.video_control, 'stop')).pack(side='left')

        self.var_time = tk.StringVar(master, "0:00")
        tk.Label(self.button_frame, textvariable=self.var_time, width=6,
            bg='white').pack(side='left')
        self.frame_id = self.display_frame.winfo_id()
        
        fullname = os.path.join(os.getcwd(), "MyVideo.mp4")
        self.player = Gst.ElementFactory.make('playbin', None)
        self.player.set_property('uri', 'file://%s' % fullname)
        self.player.set_state(Gst.State.PLAYING)

        bus = self.player.get_bus()
        bus.enable_sync_message_emission()
        bus.connect('sync-message::element', self.set_frame_handle,
            self.frame_id)
    
    def close(self):
        self.master.withdraw()
        self.player.set_state(Gst.State.NULL)
        self.master.destroy()
        
    def video_control(self, action):
        if action == 'start':
            duration_nanosecs = self.player.query_duration(Gst.Format.TIME)[1]
            duration = float(duration_nanosecs) / Gst.SECOND
            print("Dauer:", duration)
            
        elif action == 'pause':
            self.player.set_state(Gst.State.PAUSED)
            nanosecs = self.player.query_position(Gst.Format.TIME)[1]
            position = float(nanosecs) / Gst.SECOND
            print("Position:", position)
            
        elif action == 'stop':
            self.player.set_state(Gst.State.NULL)
            
    def set_frame_handle(self, bus, message, frame_id):
        if not message.get_structure() is None:
            if message.get_structure().get_name() == 'prepare-window-handle':
                display_frame = message.src
                display_frame.set_property('force-aspect-ratio', True)
                display_frame.set_window_handle(frame_id)
           
def main():
    app_win = tk.Tk()
    app_win.title(APP_TITLE)
    app_win.geometry("+{}+{}".format(APP_XPOS, APP_YPOS))
    #app_win.geometry("{}x{}".format(APP_WIDTH, APP_HEIGHT))
    
    Gst.init(None)
        
    app = Application(app_win)
    
    app_win.mainloop()
 
 
if __name__ == '__main__':
    main()
N.B. Hierfür muss das Modul gi installiert sein!
Gruss wuf ;-)