Dinesh Bafna

Successful Entrepreneur and Business Leader

python 動画 再生時間 取得 4

timeモジュール は、時刻に関する様々な関数を提供し … 2つの動画を時間方向に連結する方法の次は、空間方向に連結する方法を学びます。ここではPythonのOpenCVを使って、2つの異なる動画ファイルを時間ではなく空間的に横方向に連結する方法を習得しま … Pythonによる動画ファイルのダウウンロード方法を載せておきます。. 今までpythonとOpenCVを使ってWebカメラや静止画の加工などはやっていましたが、動画ファイルを扱ったことがなかったのでその備忘録です。(※ちなみにOpenCVでは音声は扱えません) OpenCVとpythonの他にどうやらopencv_ffmpegを入れてないと使えないようなので、そこは各自で入れておいて … 【Python】PIL ⇔ OpenCV2 ⇔ Tkinter 画像オブジェクトの相互変換, 【Python】画像のトリミング(クロップ・切り取り)アプリを作ってみる【GUI】. ある動画サイトにある動画をダウンロードするときに、毎回手動でダウンロードするのが面倒臭くて、半自動で動画ファイルをダウンロードしたいないと思ったときに調べた方法で、初心者向けの内容になります。 © Copyright 2020 WATLAB -Python, 信号処理, AI-. © 2020 だえうホームページ All rights reserved. PythonとGstreamerで ... 私は、Gstreamer 1.0を使ってビデオを再生すると次のようなことが起こることがわかりました . このブログでは初心者が科学技術プログラムを作れるようになることを目標に、学習結果を記録していきます。, 次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。. Pythonで動画情報の取得をしたかった時に色々モジュール試してみたけど大抵どれも裏でffmpegかffprobe使っててPythonで完結してるものを見つけられなかったのでメモがてら使い方を書いておく. 「こんなことが知りたい!」「ここが分からない!」などありましたら、Twitterもしくは本サイトにコメントいただければ、(極力)解説ページ作ります! #hachoir ファイルのメタデータの取得・編集が出来る PythonとGstreamerで ... GstreamerとPythonを使用してMPEG-4 AVCビデオのサムネイルを作成したいと思います。 基本的に: ... 私は、Gstreamer 1.0を使ってビデオを再生すると次のようなことが起こることがわかりました . 2つの動画を時間方向に連結する方法の次は、空間方向に連結する方法を学びます。ここではPythonのOpenCVを使って、2つの異なる動画ファイルを時間ではなく空間的に横方向に連結する方法を習得します。, こんにちは。wat(@watlablog)です。動画編集プログラムは目で見れるから面白いですね!ここでは2つの動画を横方向に連結させる方法を紹介します!, 「動画の空間連結」というと、何やら仰々しい言葉ですが、動画の時間方向の連結と差別化したく僕が名付けた言葉です。一般的な用語では無いのでご注意下さい。, ちなみに、時間方向の連結の方法は「Python/OpenCV動画編集!複数動画を連結させる方法」に記載しましたので、ご興味のある方は是非ご覧になって下さい。, 動画の空間連結とは、ここでは二つの動画を横に並べて同時に再生することを意味しています。, 動画といってもフレームの集合体であるため、この空間連結を実現させる方法はいたって簡単で、フレーム毎の処理を行う時に画像同士を結合すれば良いのです。, この方法は既に過去記事として「Python/OpenCVで画像連結!横と縦に繋げてみた」で紹介しました。, 動画編集の途中途中でフレーム毎に上記画像結合処理をすることで、動画の連結は簡単にできます。, 例えば過去記事である「Python/OpenCVで動画速度(FPS)を変えて再保存」や、「Python/OpenCVで動体検知!動画の動いている部分を検出」では、動画ファイルを読み込み、取得したフレームに対して画像処理や設定変更をするというスタイルを取っていました。, 今回実施するフレーム処理もこれとほぼ同じですが、今回は2つの動画を同時に読み込むという所が違いになります。, 今回は少々長いので、画像を連結する関数と動画処理関数という順番で解説をしていきます。最後にコピペ用の全コードも載せますので、手っ取り早く実行を試したいという方は下の方までスクロールしてみて下さい。, 「Python/OpenCVで画像連結!横と縦に繋げてみた」で紹介したコードとは引数の部分が異なります。, 先の記事では画像ファイルへのパスを渡していましたが、ここでは画像そのものとカラーかどうかの判別値のタプルを渡しています。後は過去記事内のコードと同じです。, 基本的な構成は過去記事に書いたものと同じものですが、path1, path2、またはmovie1_obj, movie2_objと2つの動画ファイルに対応させるために変数が2つずつあるのが特徴です。, .readでそれぞれret1とret2を読み込んでいますが、これはフレームを取得できた時にTrueを返す変数です。, 今回のプログラムの仕様はフレーム数の少ない方の動画フレームに合わせてループを終了させるようになっています。, 正直これだけだと、再生時間は同じだけどフレームレートが異なる動画を用意した時に不具合が出ます。, 改善版はそのうち書こうと思いますが、今はWebカメラで撮影した30FPSの動画通しをくっつけるような目的で使うのでこのままにしておきます(是非改善してみて下さい!(他力本願))。, 動画のフレームレートが異なる場合は動画ファイルのリサンプリングとかを行えば良いかも?イメージはできるのでいずれやってみますかね。, 以下に全コードを載せます。実行フォルダに「movie1.mp4」と「movie2.mp4」を置いて、カラー画像かそれ以外かを示すTrue/Falseをmovie1, movie2という変数で設定すれば、同フォルダに[movie_out.mp4」が生成されます。, まずは以下の動画です。この結果は、Webカメラで撮影した動画とその動画に対して動画処理を施した動画を連結させたものなので、動画のサイズやフレーム数は同一です。, 実行結果は縦方向のサイズがプログラムによって揃えられ、フレーム数が右側の動画に合わせて短くなっているといった結果になりました。, これも想定(仕様)通り。「もっとこうしたい」という明確な目的が出てくれば改善しようと思います。, 本記事はこれまでの動画編集、画像処理技術を活用させて動画を横方向に連結させるコードを紹介しました。, ほとんどが過去記事を少し変えた内容になっていますので、ご興味のある方は是非関連記事も読んでみて下さい!, 今回の動画連結は色々改善点も目立つけど、2つの動画を同時に読み込んでフレーム処理するというイメージを持つことができました!Twitterでも関連情報をつぶやいているので、wat(@watlablog)のフォローお待ちしています!, 機械工学を専攻し大学院を修了後、 時間 - python 動画 情報 取得 . このページでは Python で「動画を再生するアプリ」を作成する方法およびそのアプリのサンプルスクリプトについて解説していきます。, 使用する外部ライブラリ・モジュールは Tkinter・OpenCV2・Pillow(PIL)になります。主に動画を扱うのが OpenCV2 ですので、残念ながら「音声なし」になります。, 「動画選択」ボタンをクリックすることで、動画ファイル(.MOV と .MP4)の選択を受け付け、選択された動画を読み込みます。, 動画を読み込むと画面左側のキャンバスに動画の最初のフレームおよび再生ボタンが表示されます。, まず前提として、動画は簡単に言うと、複数枚の画像(フレームと言います)を連続して表示することで実現されます。, さらにキャンバスをクリックすれば、動画が再生されます。この再生は、フレームを一定間隔で次のフレームに切り替えることで実現しています。, この切り替える間隔は、読み込んだ動画の FPS(1秒あたりの表示フレーム数)に基づいて計算していますので、大体読み込んだ動画を他のプレイヤーで再生した時と同じくらいのタイミングでフレームが切り替わると思います(若干ズレます)。, さらに動画が停止した状態でキャンバスをクリックすれば、停止した時点から動画の再生を再開することができます。, 「モノクロON/OFF」ボタンをクリックすれば、動画がモノクロ化されて表示されるようになります。, これは各フレームを描画する前に、そのフレームをモノクロ化することで実現しています。, 動画がモノクロ化された状態で「モノクロON/OFF」ボタンを再度クリックすれば、動画がカラーに戻ります。, 「フリップON/OFF」ボタンをクリックすれば、動画が左右反転されて表示されるようになります。, 動画が左右反転された状態で「フリップON/OFF」ボタンを再度クリックすれば、動画がさらに左右反転され、元に戻ります。, ではここからはアプリをどのように開発しているかについて解説していきたいと思います。, 各クラスは「Model」と「View」と「Controller」の3つに分かれます。, 「Model」は動画や画像を扱うクラスで、「View」はアプリの見た目や描画を行うクラスです。「Controller」はユーザーからのイベント(ボタンクリック・マウス操作など)を受け付け、必要に応じて「Model」や「View」に処理の依頼を行うクラスになります。, Model クラスのオブジェクトは指定されたパスの動画から動画オブジェクトの生成を行います。, 具体的には OpenCV2 の VideoCapture クラスのインスタンスの生成を行います。, Model クラスのオブジェクトは動画オブジェクトからフレームの読み込みを行います。, VideoCapture クラスの read メソッドは「次のフレーム」を NumPy 配列として読み込むメソッドです。, 動画オブジェクト生成後に read メソッドを実行した場合、下記のようにフレームの読み取りとフレームの進行が行われていきます。, こんな感じで read メソッドを実行することで、フレームの進行を実現しています。, Model クラスのオブジェクトは読み込み済みのフレームに対して PIL 画像オブジェクトの生成および画像処理を行います。, モノクロ処理は OpenCV2 を用いて下記により実行しています。frame は VideoCapture クラスの read メソッドにより読み込まれた NumPy 配列のデータです。, またフリップ処理も OpenCV2 を用いて下記により実行しています。ちなみに第2引数を “0” にすれば上下反転することも可能です。, NumPy 配列 frame からの PIL 画像オブジェクト生成は下記により行っています。, この変換については下記ページで解説していますので、詳しく知りたい方は読んでみてください。, 最後に指定されたサイズ(引数で指定)に合わせて画像のリサイズを行っています(指定されたサイズの矩形に内接に接するように、縦横同アスペクト比でリサイズ)。, Model クラスのオブジェクトが持つ画像オブジェクトを取得する機能も提供しています。, PIL 画像オブジェクトを Tkinter 用のものに変換し、変換後の画像オブジェクトを返却します。, Model クラスのオブジェクトが持つ動画オブジェクトに対する動画の FPS を取得するための機能です。, FPSは VideoCapture クラスの set メソッドを下記のように実行することで取得することができます(video は VideoCapture クラスのインスタンス)。, Model クラスのオブジェクトが持つ動画オブジェクトに対する動画を先頭に巻き戻す機能です。, VideoCapture クラスの set メソッドを下記のように実行することで、動画を先頭に巻き戻すことができます(video は VideoCapture クラスのインスタンス)。, この設定に応じて画像オブジェクトの生成(create_image)でモノクロ処理を行うかどうかが変わります。, この設定に応じて画像オブジェクトの生成(create_image)でフリップ処理を行うかどうかが変わります。, アプリ画面のキャンバスに対して画像の描画も行います。こちらは下記ページで解説していますのでこちらをご参照ください。, 丸も三角も Tkinter の Canvas クラスのメソッドを利用して簡単に描画することができます。, 丸に関しては Canvas クラスの create_oval メソッドを、三角に関しては Canvas クラスの create_polygon メソッドを利用することで描画できます。, 具体的なサイズや配置の調整をどのようにしているかはサンプルスクリプトの draw_play_button メソッドをご覧いただければと思います(かなりてきとうです…)。, この再生ボタンの削除は Canvas クラスの delete メソッドにより、丸と三角を削除することで実現しています。, ファイル選択画面の表示については下記ページで解説していますので詳しく知りたい方はコチラを参照してください。, Controller クラスの主な責務の1つがユーザーからのイベントの受け付けになります。ですので、View が設置したウィジェットに対してイベントの受け付け(bind)を行います。, 「動画選択」ボタンクリックイベントが発生した際には Contoller クラスのオブジェクトは主に下記の処理を実行します。, フレーム進行用タイマーは「定期的なフレーム進行処理(frame_timer)」を実行するためのもので、タイマーの時間は FPS(Model クラスの提供する get_fps メソッドで取得できた時間)から計算しています(単位は ms)。, 描画用タイマーは「定期的な画像描画処理(draw_timer)」を実行するためのもので 50 ms に設定しています。, 「モノクロON/OFF」ボタンクリックイベントが発生した際には Contoller クラスのオブジェクトは主に下記の処理を実行します。, 「フリップON/OFF」ボタンクリックイベントが発生した際には Contoller クラスのオブジェクトは主に下記の処理を実行します。, キャンバス上でマウスがクリックされた時には Contoller クラスのオブジェクトは主に下記の処理を実行します。, また Contoller クラスのオブジェクトは一定間隔毎(「動画選択」ボタンクリック時の処理(push_load_button)で決定した間隔)に下記の処理を実行します。, ちなみに、定期処理を frame_timer と draw_timer の2つに分割しているのは、画像描画を行うための処理(create_image、draw_image)が FPS の速度に間に合わないことがあるためです。, この場合、動画のフレーム切り替えが遅い、フレーム飛びするなどの問題が発生してしまいますので、 draw_timer は FPS からは切り離して時間設定(FPS よりも遅く画像描画を行うように設定)を行うようにしています。, draw_timer の実行間隔はこの時間よりも余裕を持って設定してやればフレーム切り替えが遅い、フレーム飛びするなどの問題は防げるはずです, 「動画選択」ボタンを押せばファイル選択画面が表示されるので、動画ファイル(.MOV or .MP4)を選んでください。選んだ動画の先頭フレームと動画再生ボタンがキャンバスに描画されます。, 「モノクロON/OFF」ボタンをクリックすると画像のカラー・モノクロが切り替わります。, Python での動画再生だけでなく、GUI アプリの作り方やタイマーを利用した画像のリアルタイム描画処理についても学べる良いテーマだと思います!, 今回は動画に対してモノクロ処理・フリップ処理を行いましたが、OpenCV2 を利用して顔認識などを行いながら動画再生を行うようなことも可能です(動画の顔部分を色をつけて表示するなど)。, 様々な発展のさせ方があると思いますので、是非色々カスタマイズを行い、Python や動画・画像・認識処理についての学習に役立ててください!, だえうホームページのプライバシーポリシー・免責事項についてはこちらに記載しております。.

伊藤塾 行政書士 模試 5, 前世の敵 全 話 詳しく ネタバレ 6, Xperia8 カメラ 暗い 4, Leawo Blu Ray Player 再生速度 4, ガーデン シンク 魚 4, ジェシー 応援 ブログ 5, アレクサ パソコン 音楽 7, 富士通 リストラ ブログ 5, ライコランド チェーン 交換工賃 15, 朗読 台本 女性向け 4, Pubg ボイス ブロック 8, Dmr Bzt600 ドライブ交換 45, Bb 固着 熱 10, Suv D6 改造 15, 倫理 勉強の仕方 定期テスト 4, Displayport Dvi変換 2560x1600 6, インスタ フォロー 気持ち 悪い 4, ニコン D3200 使い方 5, Dropbox Mac 開かない 6, つむじ 正常 女 26, 数秘術 7 孤独 50, Jabra Speak 710 ヨドバシ 4, 第五人格 衣装 変え方 8, Como Estas スペイン語 7, 学校行く前 腹痛 中学生 4, Nikon Fh 4 Es 1 5, ホールケーキ カット サービス 4, Ie 常に 最前面に表示 7, ツムツム 折り紙 立体 チップ 4, ソファー リメイク Diy 4,

TAGS