Способ воспроизведения видеофайлов в Tkinter?

Есть ли способ воспроизведения видеофайлов, таких как AVI , MP4 и т. Д.?

Я попытался использовать PyMedia , но, по-видимому, он работает только с Pygame .

Каково решение моей проблемы?

2 Solutions collect form web for “Способ воспроизведения видеофайлов в Tkinter?”

Вы можете использовать python-gestreamer для игры (это работает для меня в Linux, но оно также должно работать на окнах). Для этого требуется python-gstreamer и python-gobject , я бы рекомендовал использовать этот установщик «все-в-одном». Вот код:

import os import sys import Tkinter as tkinter import gobject import gst def on_sync_message(bus, message, window_id): if not message.structure is None: if message.structure.get_name() == 'prepare-xwindow-id': image_sink = message.src image_sink.set_property('force-aspect-ratio', True) image_sink.set_xwindow_id(window_id) gobject.threads_init() window = tkinter.Tk() window.geometry('500x400') video = tkinter.Frame(window, bg='#000000') video.pack(side=tkinter.BOTTOM,anchor=tkinter.S,expand=tkinter.YES,fill=tkinter.BOTH) window_id = video.winfo_id() player = gst.element_factory_make('playbin2', 'player') player.set_property('video-sink', None) player.set_property('uri', 'file://%s' % (os.path.abspath(sys.argv[1]))) player.set_state(gst.STATE_PLAYING) bus = player.get_bus() bus.add_signal_watch() bus.enable_sync_message_emission() bus.connect('sync-message::element', on_sync_message, window_id) window.mainloop() 

Следующий код работает для меня с GStreamer 1.0 и Python 3 под Ubuntu 16.04. Он также позволяет использовать восемь видеоплееров в столбце в одном окне. (Звуковые каналы просто смешиваются.)

В libav / ffmpeg fork возникли проблемы в Ubuntu 14.04, которые, похоже, решаются в 16.04. Обратите внимание, что вам нужен пакет gstreamer1.0-libav в дополнение к gstreamer1.0-plugins- *.

Код основывается на ответе 2011 года от @koehlma, который предполагал GStreamer 0.10 и Python 2.

 import sys import os if sys.version_info[0] < 3: import Tkinter as tkinter else: import tkinter import gi gi.require_version('Gst', '1.0') from gi.repository import Gst, GObject # Needed for set_window_handle(): gi.require_version('GstVideo', '1.0') from gi.repository import GstVideo def set_frame_handle(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) NUMBER_OF_FRAMES = 8 # with more frames than arguments, videos are repeated relative_height = 1 / float(NUMBER_OF_FRAMES) # Only argument number checked, not validity. number_of_file_names_given = len(sys.argv) - 1 if number_of_file_names_given < 1: print('Give at least one video file name.') sys.exit() if number_of_file_names_given < NUMBER_OF_FRAMES: print('Up to', NUMBER_OF_FRAMES, 'video file names can be given.') file_names = list() for index in range(number_of_file_names_given): file_names.append(sys.argv[index + 1]) window = tkinter.Tk() window.title("Multiple videos in a column using Tk and GST 1.0") window.geometry('480x960') Gst.init(None) GObject.threads_init() for number in range(NUMBER_OF_FRAMES): display_frame = tkinter.Frame(window, bg='') relative_y = number * relative_height display_frame.place(relx = 0, rely = relative_y, anchor = tkinter.NW, relwidth = 1, relheight = relative_height) frame_id = display_frame.winfo_id() player = Gst.ElementFactory.make('playbin', None) fullname = os.path.abspath(file_names[number % len(file_names)]) player.set_property('uri', 'file://%s' % fullname) player.set_state(Gst.State.PLAYING) bus = player.get_bus() bus.enable_sync_message_emission() bus.connect('sync-message::element', set_frame_handle, frame_id) window.mainloop() 
  • Реализация веб-видео в реальном времени с помощью веб-сайтов HTML5
  • Невозможно удалить видео с помощью API данных Youtube
  • Воспроизведение видео с использованием libVLC из памяти в python
  • Использование ffmpeg для получения длительности видео в python
  • Как программно захватывать фотографию веб-камеры
  • Объедините два перекрывающихся видео по кадру, чтобы сформировать один кадр
  • как импортировать плагины vlc в сценарий python
  • QueryFrame не продвигает фрейм в OpenCV
  • Python - лучший язык программирования в мире.