0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VLC Media Player をTkinter の画面に埋め込む(Python-VLC + libvlc.dll)

Last updated at Posted at 2024-08-26

Tkinter で簡易的なメディアプレイヤーを作ろうとしたとき、OpenCVが真っ先に登場しますが、残念ながら動画再生のみで、音声まで再生してくれません。
ほかにもっと簡単な手段は無いかと探したところ、VLC Media Player を使う方法を見つけました。

Pythonから VLC の動画再生機能を使う場合、VLC Media Player のインストールが必要ですが、ポータブル向けにZip圧縮されたものが公開されているので、ここから必要なものを入手することができます。

PythonでVLCを制御するためのDLLを入手する

1.VLC Media Player ポータブル版をダウンロードする

下記のリンクに飛んで、画面をスクロースすると、一番最後に "last/" のリンクが見つかるので、これをクリックします。

https://download.videolan.org/pub/videolan/vlc/

image.png

次に、"Win64" のリンクをクリックします。
image.png

最後に、"vlc-3.0.21-win64.zip" のリンクをクリックすると、Zip ファイルがダウンロードできます。
image.png

2.Zip ファイルを解凍し、必要なDLLを取り出す

Zip ファイルを解凍し、2つのDLLと1つのフォルダを取り出し、任意のフォルダにコピーします。
必要なDLL:libvlc.dll 、 libvlccore.dll
必要なフォルダ:plugins

image.png

python-vlc を pip でインストールする

Pythonからvlc を扱うには、 python-vlc をインストールする必要があります。

pip install python-vlc

TkinterにPythonを埋め込むコードのサンプル

下記がTkinterにVLCの動画再生機能を埋め込んだサンプルになります。
先ほど取り出した2つのDLLと1つのフォルダを、任意のフォルダにコピーしてもらいましたが、Pythonにその場所を教える必要があります。

os.add_dll_directory( DLLが置かれているフォルダのパス )

Pyファイル実行時のカレントディレクトリに DLL を入れても正しく参照してくれないので、上記の1行を記述して参照場所を明示的に指定します。

下記のサンプルは、カレントディレクトリに DLL を置いたという前提で、os.getcwd() でカレントディレクトリのパスを設定しています。

import os
# Pythonから、カレントフォルダに置かれたDLLが参照できるようにする
os.add_dll_directory(os.getcwd())
import vlc  # VLCメディアプレーヤーライブラリをインポート
import tkinter as tk

# Tkinterウィンドウの作成
root = tk.Tk()
root.title("動画再生")

# 動画を表示するためのフレームを作成
frame = tk.Canvas(root)
frame.pack()

# VLCメディアプレーヤーの作成
instance = vlc.Instance("--no-xlib")
player = instance.media_player_new()
media = instance.media_new('O:\TestData\Movie/437_1280x720.mp4')
player.set_media(media)
player.set_hwnd(frame.winfo_id())

# 動画の再生/停止ボタン
start_button=tk.Button(text="再生/一時停止",width=30,command=lambda : player.pause())
start_button.pack()

# 動画再生を開始
player.play()

# Tkinterウィンドウを表示
root.mainloop()

実行すると下記の画面が表示されます。ちゃんとTkinterの画面で動画が表示されていますね。

image.png

まとめ

PythonのTkinterで音声と動画を再生させたい場合、VLC Media Player のDLLを使うのが一番手っ取り早いです。
VLC Media Player のポータブル版から、libvlc.dll 、 libvlccore.dll plugins の3つを任意のフォルダにコピーして、os.add_dll_directory() で DLL のパスを指定するところがポイントです。

参考記事:【初心者歓迎】動画分割・結合ツールを作ろう(ffmpegで動画の切り出しと結合)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?