• クラウドのファイルに直リンして自作ソフトで使う

    2021-01-27 20:13

     最近Pythonのプログラミングが捗るレジェメントです。つい先日は、動画ダウンロード補助ツール「L-ytdl」の大幅更新をしたり、練習がてら作ったガバガバ自作ソフトを公開したりしました。別に大した物ではありません。
     それが落ち着いた時、ふと思ったのが「よくあるソフトの更新通知とか、どうやって実現してるんだろうな~」ということです。私のよく使うソフトだと"YMM3", "MediaInfo"などで、起動した時に新しいバージョンが有ると「ダウンロードしますか?」というようにメッセージが出ます。それを私もやりたいと思いました。


     「どうやって実現してるんだろう」と述べましたが、想像はつきます。ネット上に更新情報を置いておき、ソフトに確認させているのです。
     というわけで、今回は「ネット上にデータを用意しておいて、プログラム等で利用できるようにする方法」を記事にします。私では使い切れない長物なので、もっとプログラム開発できる方に有効に使っていただけたらな、と思います。たぶん他に良い方法があるので、ご存知の方はコメントで紹介をお願いします。


    クラウドストレージの選定

     まず、"データを置いておくインターネット上の場所"を探します。その道の人なら自分でサーバーやサイトを持っていたりするでしょうが、私は何もありません。なので、無料のクラウドストレージ(オンラインストレージ, クラウドドライブ)から使えそうなのを探します。
     検索すると色々出てきますが、新しいアカウントを作るのが嫌なので既にアカウントを持っているサービスから選ぶことにしました。

     ・Google ドライブ  15GB ~ 2TB
     ・OneDrive  5GB ~ 1TB
     ・Dropbox  2GB ~ 5TB ~
     ・Amazon Drive  5GB ~ 30TB
     ・iCloud Drive  5GB ~ 2TB

     アカウントを持っている方も多いであろうサービス5つ。AmazonDriveはつい最近気付きました。この中から使うクラウドストレージを選びます。

     まず、AmazonDriveとiCloudDriveは除外します。理由は個人の都合で、AmazonDriveはまだ1度も使ったことが無い、iCloudDriveはiPhoneのバックアップや書類のデータもあるので容量を圧迫したくないのが理由です。
     次に、残ったGoogleDrive, OneDrive, Dropboxにそれぞれテスト用のファイルをアップロードし共有状態にして、プログラムで使えるか試します。プログラムは第三者なので、ファイルを誰でもダウンロードできるように共有状態にしておく必要があります。

     ・・・結論から言うと、使えそうなのはDropboxだけでした。
     ネックなのは、「直リン」と呼ばれる"ファイルを直接ダウンロードするURL"の用意です。共有した時に有効になるURLは、開くとファイルのプレビュー画面になるため、人ではないプログラム如きではファイルを正常にダウンロードすることができず失敗してしまいます。

     なので、ファイルを直接ダウンロードするURL(直リン)をちゃんと用意してやる必要があるのですが、私が調べた結果、'21年現在、GoogleDriveとOneDriveで直リンを作成する方法は無いようです。検索するといくつか方法が出てきますが、どれも使えませんでした。サービスのシステムアップデートで使えなくなったんでしょうね…。頓智を利かせて無理矢理直リンを作成することにも成功しましたが、どちらのURLもいずれシステムアップデートで使えなくなりそうなクソ長URLでした。OneDriveはサービス上でファイルの編集もできるので使えたら良かったんですけどね…。

     ということで、クラウドストレージはDropboxを利用することにしました。


    直リンの作成

     Dropboxの直リン作成は簡単です。しかも公式ヘルプも有ります。ファイルをアップロードし、共有状態にしてリンク(URL)をコピーしたら、

    https://www.dropbox.com/s/otamesi7url/test.json?dl=0
    https://www.dropbox.com/s/otamesi7url/test.json?request=0

    https://www.dropbox.com/s/otamesi7url/test.json?dl=1

    という感じで、ファイル名の後ろを「?dl=1」にします。これで、"ファイルを直接ダウンロードするURL"の完成です。


    プログラム側の実装

     ネット上にデータを用意しダウンロード(読み込み)できるようにしたので、次はプログラム側を対応させます。私はPythonで書きますが、他の言語でも可能なはずです。


    import urllib.request
    import json
    import time

    url ="""https://www.dropbox.com/s/otamesi7url/test.json?dl=1"""

    Time =time.time()
    try:
     Str =urllib.request.urlopen(url).read()
    except:
     Str ="{}"
    print("conect "+str(round((time.time()-Time)*1000))+"ms")
    Dict =json.loads(Str)

    print("")
    for tp_Dict in Dict:
     print(tp_Dict+":"+str(Dict[tp_Dict]))
    print("")


     urllibモジュールでDropboxのファイルを読み込みます。今回用意したファイルはJSON形式のデータなので、読み込んだ後にjsonモジュールでPythonのオブジェクトに戻します。

     実行した結果、正常にデータを読み込むことができました。しかし、接続開始から読込完了まで400ミリ秒~1.5秒のムラがあるのが難点です。ファイル自体は45byte(0.045KB)です。


    データの更新

     データに何か変更点や追加情報(私の場合で言うアプデ情報)があれば、データを更新しないといけません。最後はその方法です。

     データを更新するには、Dropboxのファイルを上書きします。上書きは簡単で、ファイルがある場所に同じ名前のファイルをドラッグ&ドロップでアップロードするだけです。これで、共有状態やリンクURLをそのままに内容を更新できます。
     実際にドラッグ&ドロップでファイルを上書きして更新し、プログラムを実行したところ、更新後のデータを読み込むことができました。



     いかがだったでしょうか。今回は「ネット上にデータを用意しておいて、プログラム等で利用できるようにする方法」でした。私はこの手の専門でも何でもなく趣味でやっている者なので、未熟な点があるとは思いますが、とりあえず目的は達成できたので満足しています。
     記事の導入でも述べたように、これより良い方法があればぜひコメントで宣伝してこの記事を読む他の方に共有していってください。よろしくお願いします。


  • 広告
  • VFR→CFR の変換はAviUtlでしよう / 動画コンテナに入るコーデック調査&一覧

    2020-07-12 23:43

     レジェメントです。動画関係で色々やっている間に分かったことなどがあるので、他の動画投稿者の方に少しでも力になればと思い、ここに載せておきます。


    キャプチャした動画はAviUtlでCFRにしよう

     解説動画などを除き、ほとんどの動画は "撮影or録画した動画" が基になって作られていると思います。ゲームで言うと、ゲーム機でのプレイはHDMIレコーダーで、iPhoneでのプレイはiOSの画面収録機能で、PCでのプレイはGameDVRで録画して、それを編集します。
     で、AviUtlで編集する時は、事前に "録画した動画をVFRからCFRへ変換" しなければなりません。動画の映像がパラパラ漫画の原理なのはご存知かと思いますが、先ほどの例のような録画は「映像から一枚一枚リアルタイムで描き起こしている」ので、よく言う "1秒に30枚(30fps)" や "1秒に60枚(60fps)" にピッタリなりません。これがVFRです。逆にピッタリな動画をCFRと言います。ただ単に再生するだけならVFRでも問題無いのですが、編集の時は "1枚の時間" がキーになるため、それがピッタリでないVFRはカット編集がズレたりする原因になります。

     というわけで、とにかく「動画編集する前に、キャプチャした動画をVFRからCFRへ変換しなければならない」のですが、動画を変換するということはもちろん音ズレが発生しかねません。私は今まで "FFmpeg" を使って録画後の.mp4をCFRにしていました。しかし、試してみるとなんと約0.1秒という明らかに気付く音ズレが生じていました。・・・なんてこと。

     AviUtlとAudacityを使って色々調べた結果、「AviUtlで、拡張編集にドロップしてVFR動画で新規にプロジェクトを開いて、L-SMASHで読み込ませて、x264guiExで音声をqaacのALACかAAC(音声カット)にして1pass出力する」ことで、音ズレ無しでCFRにすることができました。AviUtlの設定のしかたはこちら。ただし、AAC(音声カット)は音声カット故に約1/1000秒のズレが生じます。
     とりあえずこの方法を使えば音ズレが生じないはずです。心配な方はやってみてください。


    コンテナファイルのコーデック対応を調べてみた

     ".mp4"や".avi"などのコンテナファイルは、映像や音声の入れ物になります。で、以前.mp4にh264+FLACを入れようとしたのですが、.mp4はFLACに対応しておらず入れられませんでした。このように、コンテナそれぞれで入れられるコーデックは違います。


     というわけで各コンテナと各コーデックのマトリックス図を作りました。…正確には、数年前に作って忘れていたのを引っ張り出しました。多分合っているはずです。
     対応していれば◯、コンテナの主なコーデックなら色が付いています。参考にどうぞ。



     今回の記事はこんな感じです。実は他にも「AviUtlで仕上げのエンコードをする際に音ズレが生じる」問題と奮闘してたりもしますが、ほとんどの方は気にならないと思うので、また機会があれば紹介したいと思います。


  • ポケットWi-Fiでもオンラインゲームはできるのか?

    2020-04-12 13:12

     新社会人レジェメントです。新たな仲間と楽しくやりながら、朝礼と不定な日程で毎晩ぐっすり。COVID-19にもさっさと引いて欲しいものです。

     さて、就職で寮に入ることになった私は、個人的にインターネット環境を用意する必要に迫られました。スマホなら容量を増やせばいいだけですが、パソコン使いますし…。寮なので工事をする訳にもいきません。
     色々調べて悩んだ結果、ポケットWi-Fiを契約しました。機種はW06(au)です。スマホのプランを最小容量にし、データ通信はすべてコイツを介すことにしました。「データ容量上限無し」と言っても10GB/3日の制限があるので実質100GBプランです。

     というわけで、ポケットWi-Fiがいか程の性能なのか調べてみます。


    有線とポケットWi-Fiの差

     まず、ダウンロード/アップロード速度とレイテンシを測ってみます。
    PCはHP Spectre x360 13-ac0XX。利用したサイトはこちら。
     ・インターネットの速度をテストする -Google-
     ・インターネット回線の速度テスト | Fast.com
     ・ブロードバンドスピードテスト


    ◯有線
    接続方法:光(豊橋ケーブル) - モデム - ルーター(ELECOM) - RJ45toType-C(サンワ) - PC



    ダウンロード速度:1.8 / 6.9 / 69.2 [Mbps]
    アップロード速度:89.7 / 95 / 101.5 [Mbps]
    レイテンシ:7 / 16 / 23 [ms]

    ・契約は100Mbps。ベストエフォートなので、空いているUP帯域は速度が出て、混みやすいDL帯域は速度が出ない。
    ・3つ目のDL速度は大きく振れやすい
    ・有線だけあってレイテンシは短い
    ・ルーター - PC 間をWi-Fi(5GHz)にしても大して結果は変わらない


    ◯無線
    接続方法:WiMAX2+(au,電波良好) - ポケットWi-Fi(W06) - Type-Cケーブル - PC



    ダウンロード速度:52.1 / 55 / 86.3 [Mbps] +約50Mbps
    アップロード速度:3.5 / 4.2 / 6.3 [Mbps] -約90Mbps
    レイテンシ:56 / 278 / 140 [ms] +約100ms

    ・一般ユーザーのネット利用はSNS閲覧や動画視聴などDLが主なため、4GやWiMAX2+などのモバイル回線はDL帯域を多めに、逆にUP帯域を少なめに設計されている。そのため、有線よりもDL速度が出やすい
    ・ポケットWi-Fi - PC 間は有線(Type-C 2.0 Std-A)のため、ここの遅延は皆無
    ・無線なのでレイテンシはやっぱり長め


     家よりもDL速度が出るのは嬉しい。ニコニコすら満足に見れなかったので、読み込みがスラスラ進んで感動した。ただしレイテンシが結構あるので、ブラウザやLINEの動作に違和感を感じたりする。まあ言ってしまえばそんなに変わんない。


    オンラインゲームはできるか

     契約前から一番気になっていたのはこれ。多忙で遊べるかどうか分かりませんが、遊べる時には遊びたい、その時の為の確認です。

     検証ゲームは「World of Tanks (PC)」。私が唯一遊ぶオンラインゲームです。速度は256kbps(0.25Mbps)あれば十分なので、レイテンシ(ping)を見ていきます。

    ◯有線
    サーバー表示値(香港):77 [ms]
     ヒメルズドルフ:201 → 約80 [ms]
     氷河     :172 → 約70 [ms]
     鉱山     :186 → 約80 [ms]

    ◯無線
    サーバー表示値(香港):111 [ms] +約35ms
     修道院     :250 → 約130 [ms] +約50ms
     ジークフリート線:253 → 約130 [ms] +約50ms
     ルインベルク  :230 → 約130 [ms] +約50ms

     ポケットWi-Fiは+3F(フレーム)ぐらいのレイテンシがありますが、プレイには問題ありませんでした。パケットロス・おかしな挙動も無し。もともと上手くないのでアレですが、敵戦車と撃ち合っても支障はありませんでした。
     推奨は100ms未満らしいですが、ユーザー平均は80~150ms、100~120msぐらいらしいので、まあ良いんじゃないですかね。他の方には迷惑掛けるかも…。

    結論:プレイできる。が、レイテンシは平均後半



     ポケットWi-Fiを考えてる方の参考になればと記事を書いてみましたが、いかがだったでしょうか? あくまでも私の環境での結果なので、重要視してる方はキャリアからポケットWi-Fiを貸し出してもらい、実際に使う場所で検証しましょう!

     仕事も動画編集も頑張ります。