🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VLC

VLCは、クロスプラットフォーム対応の高機能メディアプレイヤーです。多くの動画・音声コーデックを内蔵。そのため、各種コーデックをインストールせずに様々なメディアファイルを再生することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

11338閲覧

python での動画の再生について

kokawa2003

総合スコア217

VLC

VLCは、クロスプラットフォーム対応の高機能メディアプレイヤーです。多くの動画・音声コーデックを内蔵。そのため、各種コーデックをインストールせずに様々なメディアファイルを再生することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/10/24 03:11

pythonでVLCをつかって動画を再生しようとしています。
まず

python

1import vlc 2from time import sleep 3 4Instance = vlc.Instance('--fullscreen') 5player = Instance.media_player_new() 6Media = Instance.media_new('http://techslides.com/demos/sample-videos/small.mp4') 7#Media.get_mrl() 8player.set_media(Media) 9player.play() 10sleep(5) # Or however long you expect it to take to open vlc 11while player.is_playing(): 12 sleep(1)

のコードを書いてみました。
これは動作しました。
そこで次にpython-vlcにあるサンプルを改造して

python

1""" 2A simple example for VLC python bindings using PyQt5. 3 4Author: Saveliy Yusufov, Columbia University, sy2685@columbia.edu 5Date: 25 December 2018 6""" 7 8import platform 9import os 10import sys 11 12from PyQt5 import QtWidgets, QtGui, QtCore 13import vlc 14 15class Player(QtWidgets.QMainWindow): 16 """A simple Media Player using VLC and Qt 17 """ 18 19 def __init__(self, master=None): 20 QtWidgets.QMainWindow.__init__(self, master) 21 self.setWindowTitle("Media Player") 22 23 # Create a basic vlc instance 24 self.instance = vlc.Instance() 25 26 self.media = None 27 28 # Create an empty vlc media player 29 self.mediaplayer = self.instance.media_player_new() 30 31 self.create_ui() 32 self.is_paused = False 33 34 def create_ui(self): 35 """Set up the user interface, signals & slots 36 """ 37 self.widget = QtWidgets.QWidget(self) 38 self.setCentralWidget(self.widget) 39 40 # In this widget, the video will be drawn 41 if platform.system() == "Darwin": # for MacOS 42 self.videoframe = QtWidgets.QMacCocoaViewContainer(0) 43 else: 44 self.videoframe = QtWidgets.QFrame() 45 46 self.palette = self.videoframe.palette() 47 self.palette.setColor(QtGui.QPalette.Window, QtGui.QColor(0, 0, 0)) 48 self.videoframe.setPalette(self.palette) 49 self.videoframe.setAutoFillBackground(True) 50 51 self.positionslider = QtWidgets.QSlider(QtCore.Qt.Horizontal, self) 52 self.positionslider.setToolTip("Position") 53 self.positionslider.setMaximum(1000) 54 self.positionslider.sliderMoved.connect(self.set_position) 55 self.positionslider.sliderPressed.connect(self.set_position) 56 57 self.hbuttonbox = QtWidgets.QHBoxLayout() 58 self.playbutton = QtWidgets.QPushButton("Play") 59 self.hbuttonbox.addWidget(self.playbutton) 60 self.playbutton.clicked.connect(self.play_pause) 61 62 self.stopbutton = QtWidgets.QPushButton("Stop") 63 self.hbuttonbox.addWidget(self.stopbutton) 64 self.stopbutton.clicked.connect(self.stop) 65 66 self.hbuttonbox.addStretch(1) 67 self.volumeslider = QtWidgets.QSlider(QtCore.Qt.Horizontal, self) 68 self.volumeslider.setMaximum(100) 69 self.volumeslider.setValue(self.mediaplayer.audio_get_volume()) 70 self.volumeslider.setToolTip("Volume") 71 self.hbuttonbox.addWidget(self.volumeslider) 72 self.volumeslider.valueChanged.connect(self.set_volume) 73 74 self.vboxlayout = QtWidgets.QVBoxLayout() 75 self.vboxlayout.addWidget(self.videoframe) 76 self.vboxlayout.addWidget(self.positionslider) 77 self.vboxlayout.addLayout(self.hbuttonbox) 78 79 self.widget.setLayout(self.vboxlayout) 80 81 menu_bar = self.menuBar() 82 83 # File menu 84 file_menu = menu_bar.addMenu("File") 85 86 # Add actions to file menu 87 open_action = QtWidgets.QAction("Load Video", self) 88 close_action = QtWidgets.QAction("Close App", self) 89 file_menu.addAction(open_action) 90 file_menu.addAction(close_action) 91 92 open_action.triggered.connect(self.open_file) 93 close_action.triggered.connect(sys.exit) 94 95 self.timer = QtCore.QTimer(self) 96 self.timer.setInterval(100) 97 self.timer.timeout.connect(self.update_ui) 98 99 def play_pause(self): 100 """Toggle play/pause status 101 """ 102 if self.mediaplayer.is_playing(): 103 self.mediaplayer.pause() 104 self.playbutton.setText("Play") 105 self.is_paused = True 106 self.timer.stop() 107 else: 108 if self.mediaplayer.play() == -1: 109 self.open_file() 110 return 111 112 self.mediaplayer.play() 113 self.playbutton.setText("Pause") 114 self.timer.start() 115 self.is_paused = False 116 117 def stop(self): 118 """Stop player 119 """ 120 self.mediaplayer.stop() 121 self.playbutton.setText("Play") 122 123 def open_file(self): 124 """Open a media file in a MediaPlayer 125 """ 126 127 128 129 # getOpenFileName returns a tuple, so use only the actual file name 130 self.media = self.instance.media_new("http://techslides.com/demos/sample-videos/small.mp4") 131 132 # Put the media in the media player 133 self.mediaplayer.set_media(self.media) 134 135 # Parse the metadata of the file 136 self.media.parse() 137 138 # Set the title of the track as window title 139 self.setWindowTitle(self.media.get_meta(0)) 140 141 # The media player has to be 'connected' to the QFrame (otherwise the 142 # video would be displayed in it's own window). This is platform 143 # specific, so we must give the ID of the QFrame (or similar object) to 144 # vlc. Different platforms have different functions for this 145 if platform.system() == "Linux": # for Linux using the X Server 146 self.mediaplayer.set_xwindow(int(self.videoframe.winId())) 147 elif platform.system() == "Windows": # for Windows 148 self.mediaplayer.set_hwnd(int(self.videoframe.winId())) 149 elif platform.system() == "Darwin": # for MacOS 150 self.mediaplayer.set_nsobject(int(self.videoframe.winId())) 151 152 self.play_pause() 153 154 def set_volume(self, volume): 155 """Set the volume 156 """ 157 self.mediaplayer.audio_set_volume(volume) 158 159 def set_position(self): 160 """Set the movie position according to the position slider. 161 """ 162 163 # The vlc MediaPlayer needs a float value between 0 and 1, Qt uses 164 # integer variables, so you need a factor; the higher the factor, the 165 # more precise are the results (1000 should suffice). 166 167 # Set the media position to where the slider was dragged 168 self.timer.stop() 169 pos = self.positionslider.value() 170 self.mediaplayer.set_position(pos / 1000.0) 171 self.timer.start() 172 173 def update_ui(self): 174 """Updates the user interface""" 175 176 # Set the slider's position to its corresponding media position 177 # Note that the setValue function only takes values of type int, 178 # so we must first convert the corresponding media position. 179 media_pos = int(self.mediaplayer.get_position() * 1000) 180 self.positionslider.setValue(media_pos) 181 182 # No need to call this function if nothing is played 183 if not self.mediaplayer.is_playing(): 184 self.timer.stop() 185 186 # After the video finished, the play button stills shows "Pause", 187 # which is not the desired behavior of a media player. 188 # This fixes that "bug". 189 if not self.is_paused: 190 self.stop() 191 192def main(): 193 """Entry point for our simple vlc player 194 """ 195 app = QtWidgets.QApplication(sys.argv) 196 player = Player() 197 player.show() 198 player.resize(640, 480) 199 sys.exit(app.exec_()) 200 201if __name__ == "__main__": 202 main() 203

のコードを書いてみたがこれは動作しません。
エラーは
[00000000032f5a10] access stream error: HTTP connection failure
[00000000032f5a10] http stream error: cannot connect to techslides.com:80
です。
なぜHTTPが下のコードだけだめなのかさっぱり分かりません。
HTTPアクセス禁止になっているところがわからない。
なお
self.instance.media_new("http://techslides.com/demos/sample-videos/small.mp4")
をローカルのファイルに変えると動作するのはわかっています。
OSはWINDOWSです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

とりあえず
playの直後にsleep(5)で解決
恥ずかしいので書きたくなかったですが。

投稿2019/10/26 07:02

kokawa2003

総合スコア217

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問