たくさんの映画、番組、またはその他のローカルビデオファイルがあり、どれを視聴するかを決定できない場合は、ボタンを押すだけでRaspberryPiに選択させることができます。公平を期すために、ローカルファイルまたはWebのいずれかからランダムなビデオを再生する簡単な方法がありますが、このプロジェクトほど楽しくはありません。ポップコーンを手に取って、独自のRaspberry Piランダムビデオプレーヤーの構築とコーディングを始めましょう!
ハードウェア
このプロジェクトの回路を構築するのは簡単です。必要なボタンは3つだけで、ピン2、3、4でGPIOに接続され、これらの各ボタンもGNDに接続する必要があります。これには、Piの1つのGNDピンと、メスからオスへのジャンパー線を使用できます。 。ブレッドボードの-レールに接続されているということは、2本のオス-オスジャンパー線を介して接続できる複数のGND接続があることを意味します。詳細については、このプロジェクトのダウンロードの図を参照してください。ハードウェアが構築されたら、Piに必要なすべてのアクセサリを接続し、Raspbianデスクトップから起動します。
ソフトウェア
ほとんどのPiプロジェクトと同様に、他のことを行う前に、Raspbianオペレーティングシステムの現在のコピーを使用してRaspberryPiをセットアップする必要があります。専用のキーボードとマウスを使用したくない場合は、VNCを介して別のコンピューターからアクセスするヘッドレスRaspberryPiを作成できます。
Pythonコードを作成する前に、プロジェクトの作成に役立つ2つのライブラリをインストールする必要があります。ターミナルを開き、次のように入力します。各行の最後でEnterキーを押すことを忘れないでください。
$ sudo pip3 install glob $ sudo pip3 installkeyboard
それらについては後で詳しく説明します。今のところ、[プログラミング]メニューにあるPython 3エディターを開き、[ファイル]>>[新規]をクリックして新しい空のファイルを作成します。すぐに[ファイル]>>[新しいウィンドウで保存]をクリックします。コードをVideoPlayer.pyとして保存し、頻繁に保存することを忘れないでください。
これでコードの記述を開始し、最初のアクションは必要なライブラリをインポートすることです。最初の3つのライブラリは、ボタンの押下を検出し(GPIO Zero)、コードが1回実行されて終了するのを停止し(一時停止)、ランダムなビデオを選択する(選択)ために使用されます。
from gpiozero import Buttonfrom signal import pausefrom random import choice
最後の3つのインポートは、ディレクトリの内容を一覧表示し(glob)、ターミナルコマンドを実行する(サブプロセス)ために使用するライブラリであり、最後のインポートはキーボード(キーボード)をエミュレートするためのライブラリです。
globimportsubprocessimportキーボードをインポートします
次に、3つの関数、コードのブロックを作成します。これらの関数は、後で名前を呼び出すことで再利用できます。最初の関数は「play_video」と呼ばれ、最初に「videos」と呼ばれるリスト(データストレージオブジェクト)を作成します。
def play_video():videos = []
リストに情報、具体的には再生できるすべてのビデオのリストを入力するために、forループを使用します。これは、mp4ビデオファイルである限り、ディレクトリ内のすべてのファイルを反復処理します。このために、「glob」を使用してディレクトリ「/ media / pi/Videos」にアクセスします。これは実際にはmp4ファイルでいっぱいの「Videos」と呼ばれるUSBスティックです。ビデオでいっぱいの選択したディレクトリの名前と一致するようにこれを変更します。mp4が見つかるたびに、作成したばかりの「ビデオ」リストに追加されます。
glob.glob( “/ media / pi / Videos / *。mp4″)内のファイルの場合:videos.append(file)
それでは、リストの内容をPythonシェルに出力して、リストにファイル名が入力されていることを確認しましょう。
印刷(ビデオ)
次に、リストからランダムなビデオを選択し、それを「chosen」という変数に格納します。これもPythonシェルに出力します。
次に、リストからランダムなビデオを選択し、それを「chosen」という変数に格納します。これも、選択したPythonシェルに出力します= choice(videos)print(chosen)print(chosen)
この関数の最後の行は、サブプロセスライブラリのPopenクラスを使用して、ターミナルに座っているかのようにコマンドを実行します。このコマンドは、omxplayerメディアプレーヤーを開き、選択したビデオを再生します。
subprocess.Popen([‘omxplayer’、(chosen)])
次の関数は「stop_video」と呼ばれ、ご想像のとおり、現在再生中のビデオを停止します。このために、キーボードライブラリ、特に「press_and_release」関数を使用して、「q」キーを押すことをシミュレートします。
def stop_video():keyboard.press_and_release(’q’)
最後の関数は「pause_video」と呼ばれ、キーボードのスペースバーを押すことをエミュレートします。これは、omxplayerがビデオを一時停止する方法です。
def pause_video():keyboard.press_and_release(’space’)
関数を作成したら、次に、ボタンが接続されている場所をコードに指示する必要があります。ランダマイザー(再生)、停止、pause_buttonの3つのボタンが接続されています。これらのボタンは、それぞれピン2、3、4でGPIOに接続されています。
randomiser = Button(2)stop = Button(3)pause_button = Button(4)
最後の部分も同様です。これは、ボタンが押されたときに検索し、それに応じて反応する部分です。ただし、最初にこのセクションを例外ハンドラーでラップします。コードを実行しようとしますが、ユーザーがCTRL + Cを押すと、コードは終了します。したがって、tryセクションでは、コードは最初にシェルに3行を出力します。これは、ユーザーへの指示です。各色の間に「n」があります。これは、各命令の間に新しい行を挿入するためのPythonの省略形です。
try:print( “GREENボタンを押してstartnYELLOWを押してpausenREDを押して停止します”)
3つのボタンが押されるのを待っています。GPIOZeroライブラリを使用して、「when_pressed」クラスを呼び出し、各ボタンが押されたことを検出します。これが発生すると、対応する関数が実行されます。したがって、緑色のランダマイザー(再生)ボタンを押すと、USBスティックからランダムにビデオが選択されて再生されます。関数の末尾に()が付いていないことに気付くでしょう。これは、実行した場合、コードが自動的に実行されるためです。現在、オンデマンドで実行する準備ができています。
randomiser.when_pressed = play_video stop.when_pressed = stop_video pause_button.when_pressed = pause_video
このセクションの最後の行は単純なpause()であり、これはコードを実行し続けるために使用され、一度実行した後に終了するだけではありません。
一時停止()
しかし、ユーザーがCTRL + Cを押すとどうなりますか?これは「キーボード割り込み」です。これが発生した場合は、空の行を印刷してから画面に「終了」します。
KeyboardInterruptを除く:print( “nEXIT”)
次に、コードを保存し、コードを保存したディレクトリに対してターミナルを開きます。プロジェクトで使用されるキーボードライブラリはroot/sudoとしてのみ使用できるため、コードを使用するには、sudo(root powers)を使用してコードを実行する必要があります。
コードタイプを実行するには:
$ sudo python3 VideoPlayer.py
準備ができたら、緑のボタンを押してランダムに選択したビデオを再生し、一時停止するには黄色を押し、停止するには赤を押します。夜を楽しんで、ポップコーンをこぼさないでください!
小さな手が電子機器を壊さないように、プロジェクトを頑丈な箱に埋め込むことができます。また、はるかに堅牢で壊れにくいアーケードスタイルのボタンを使用することもできます。
完全なコード
コンテンツをコピーしてVideoPlayer.pyファイルに貼り付けるだけの場合は、次のようになります。
from gpiozero import Buttonfrom signal import pausefrom random import choiceimport globimport subprocessimport Keyboarddef play_video():videos = [] for file in glob.glob( “/ media / pi / Videos / *。mp4″):videos.append(file)print( videos)chosen = choice(videos)print(chosen)print(chosen)subprocess.Popen([‘omxplayer’、(chosen)])def stop_video()keyboard.press_and_release(’q’)def pause_video()keyboard.press_and_release( ‘space’)randomiser-Button(2)stop = Button(3)pause_button = Button(4)try:print( “GREENボタンを押してstartnYELLOWを押して一時停止します”)randomiser.when_pressed = play_videostop.when_pressed = stop_videopause_button.when_pressed = pause_video pause()、KeyboardInterruptを除く:print( “nEXIT”)キーボードライブラリとプライバシー
このプロジェクトでは、Keyboard Pythonライブラリを使用して、ビデオ再生の再生、一時停止、停止を制御するプッシュボタンだけを使用してキーボードをエミュレートしました。キーボードライブラリはかなり強力で、任意のキーを押すために使用できるため、1つのプッシュボタンからすべてのキーの押下を自動化できます(vimを終了するのに便利です)。ライブラリを使用して、画面にテキストを書き込むこともできます。マトリックスのネオの「白いウサギを追いかける」シーンと同じように。ただし、このライブラリの最も危険な機能は、ターゲットマシンでのすべてのキー押下を記録するために使用できることです。
これらのキーの押下は、リストに記録され、ファイルに保存されてから、悪意のある目的に使用される可能性があります。だから、子供、大人を明確にしましょう。ユーザーの同意なしにキーを押したことを記録することは違法であり、学校/職場/当局との多くのトラブルに巻き込まれる可能性があります。だからそれをしないでください!そうは言っても、ユーザーがコードをどのように操作するかをデバッグする際の強力なツールとして使用できるため、ソフトウェアテスト(一般の人々や社内のテスターの同意の下)では、コードの直前にどのキーを押していたかを確認できます。ロックアップ/熱核になりました!
キーボードライブラリはLinuxとWindowsで動作し、遊ぶのはとても楽しいです。このライブラリの詳細については、このブログ投稿https://bigl.es/tuesday-tooling-record-replay-keystrokes-with-python/にアクセスして、使用方法の例をいくつか参照してください。
この記事はもともとLinuxFormatMagazineに掲載されました。