2015年10月26日月曜日

Pythonを使ってYouTubeに一括動画投稿をしてみたメモ

個人的な備忘録


参考にしたサイト

Pythonで書かれたツール YouTube Upload
https://github.com/tokland/youtube-upload

動作に必要な GoogleAPI
YouTube Data API (v3) 動画のアップロード

PythonのバージョンをIkaLogに合わせました
https://github.com/hasegaw/IkaLog/blob/master/INSTALL

動画投稿時、説明欄にstat.inkさんの情報を埋め込みました。
https://github.com/fetus-hina/stat.ink/blob/master/API.md



アップロードの流れ

アマレコTVの動画ファイル名は、 YYYYMMDD-HHMM の形式。
バトルスタートの時刻で作成されている。

AviUtlで一括加工。

stat.inkさんから、最新のデータ一覧を取得して、start_at からファイルを参照(1分のズレあり)
ファイルが存在すれば、詳細データを動画説明にセットして、YouTubeへアップロードする。
データの終わりまで繰り返す。



使った import

import os, subprocess, json, requests, datetime, shutil

Python 凄い! import 凄い! API 凄い!



2015年10月22日木曜日

Core2DuoのマシンでIkaLogを動かしてみたメモ

このエントリについて

まだ導入後数回しかプレイ出来てないので、今後遊びながら起こったことを適宜書き込んで行きます。
その都度、書いてある内容が変わることがあります。

正式にIT関係の教育を受けた事とか無いので、用語など間違っていたら教えていただけたら嬉しいです。(そもそも日本語がおかしいのは中の人の不具合ということで…

こんな環境で動作しましたというのを書いただけで、このキャプチャカードを推奨してるとかでは無いです。
この環境で動いたけど、他じゃ駄目だったとかもあると思うので、その辺りは自己責任というやつでイカよろしくです。


IkaLogについて

※このエントリを読もうと思う方は既にご存知だと思うのですが、公式から引用させて頂きます。

任天堂の WiiU 用ソフト「スプラトゥーン」の画面をリアルタイム解析して、 いろいろなことができるソフトです。
  • 勝ち/負け、ステージ、ルールを時系列にログファイルへ蓄積
  • マッチ終了時のスクリーンショットを保存
  • Twitter, Slack, stat.ink にプレイ状況をリアルタイム投稿
  • アマレコTV, OBS などの録画ソフトの録画開始・停止を自動制御、ファイルをリネーム
詳しくは引用元を参考になさってください。 : IkaLog/IkaUI.md at master · hasegaw/IkaLog · GitHub

導入した目的

スプラトゥーンにハマってしまって、なんでやられたのか確認&反省用に SD-USB2CUP5 + アマレコTVで録画、AviUtlで変換後、保存の為にYouTubeへアップしていました。
(ついでに、1日1本選んだ動画をニコニコ動画にもアップしています。実況動画ではないです。)

手動で録画の開始終了をやっていたのですが、負けが連続すると熱くなって忘れそうになる事があるのと、画質がコンポーネント (480p)なので、映像が綺麗じゃないのが残念だとずっと感じていました。

そんな時、「スプラトゥーン」リアルタイム画像解析ツール 「IkaLog」の裏側 を読んで、録画ソフトの録画開始・停止を自動制御できると知り、これはIkaLogに対応している新しいキャプチャーボードを購入するタイミングだろうと思い立ったのです。

購入したビデオキャプチャーカード

SK-NET Monster X3A ( メーカー公式 http://www.sknet-web.co.jp/product/mvx3a/ )

2015年10月20日現在で、6,103円くらい ~販売されているようです。

外付けのボックスタイプに比べると安価で済みますが、パソコン本体に PCI Express x1 の空きスロットが1箇所必要になります。

注意する点として、ハーフサイズ用のブラケッドはメーカー直販で別売りになります。
ちらっとチェックしてみたのですが、見間違いじゃなければ3,000円を超えていたと思います。
即そっ閉じしたので、もし間違っていたらごめんなさいです。

ユーザー登録をされる方は、カードに貼られているシールにシリアルナンバーが書いてあるので、組み付ける前にメモしておかないと、もう一度外す事になります。


使ったパソコンのスペック

既にプレイの録画用に  DELL Inspiron530 を使っていたので、これをそのまま使いました。
今となってはとても見劣りするスペックですが、PCI Express が2スロットあるので丁度良かったです

CPU: Core2Duo ( E4600 2.4GHz ), Memory: 8GB, HDD: 930GB, OS: Windows10 
PCI Express x16 : AMD RADEON HD 6450 (グラフィックカード)

PCI Express x1 : ← ここにビデオキャプチャーカードを刺します。

マシンスペック的には、キャプチャーカードのメーカー推奨スペック未満なので、動くか分からんという感じだったでしょうか。
スプラトゥーンは、もともとの画像が720pだし、IkaLogでも同じだと知ったので、録画してもギリギリ動くかなと判断しました。

ソフトの導入

WiiU側の画像設定を、HDMI-720pに設定しました。

既にアマレコTVはインストールされていたので、ビデオキャプチャーカードのインストール後に設定を変更するだけで、アマレコTVは動作しました。
起動後、アマレコTVが表示されるまで少し時間がかかるようになりましたが、特に問題は無さそうに思います。

ちなみに、Ut Video Codec Suite をインストールして、録画設定でコーデックを ULY2にしています。
録画の設定で、30fpsにして負荷を軽減しています。

IkaLogについては、最新のプログラムファイルをダウンロード後、マニュアルに従って設定すれば、動作確認からツイートする所まで、2プレイで設定出来ました。

画像ソースの設定は、アマレコTV経由で IkaLog に入るようにしています。

IkaLogのコマンドプロンプトに、

AttributeError: 'CVCapture' object has no attribute 'from_file'

と表示が出る場合は、AmaRecTV Liveがインストールされていない可能性があります。




アマレコTVフォルダの中の、live_setup300.exe(ファイル名は変更されるかもしれません)を実行すれば大丈夫だと思います。



アマレコTVのデバイスの中に、こんな感じで表示されればOKです。



録画ファイルとプレイ中の画像は、めがっさ綺麗になりました。
かがくのちからってすげーって感じです。
それに合わせて、保存されるファイルサイズは倍になりました。(約2GB→約4GB)

今は、アマレコTVに写った映像を見ながらプレイしています。
今まではこの方法でも気にならなかったですが、アマレコTVで720pを録画しながらだと、プレイしづらくなるラグが出る時がありました。
まだ届いてないのですが、HDMIのスプリッター(1In→2Out)とHDMIケーブルを注文しています。

HDMIのスプリッターが届きました。快適です。
1入力2出力で、USBから電源を取るタイプ送料込みで1,980円のでしたが、ちゃんと動作しました。

ちょっと驚いたこと

自動録画機能で使うAutoITのスクリプトが動作したタイミングで、Windowsの機能だと思いますが、このスクリプトに対して標準で使うアプリケーションの選択みたいなウインドが出ました。
なんかチェックを入れて2回目から出ないようにしちゃったと思います。

録画開始のタイミングだったので、既にスプラトゥーンのプレイが始まっていて、この表示のスクリーンショットは撮れなかったのです。

じぶん向けに少しいじった箇所

※ これは、わたしが勝手に行った変更です。わたしの環境では動作していますが、間違った対処かもしれません。不具合が起こっても責任は持てないのと、この情報を元に作者の方に問い合わせはしないでください。

IkaLogを使って、自動的にプレイ動画を録画する事が主な目的でした。
アマレコTVの録画機能をキーボードのF11キーで開始、F12キーで停止に設定していたので、これに合うようにスクリプトに手を入れました。

これは好みの問題なのですが、自動録画開始時にウエイトを4.4秒追加、終了時にあった20秒のウエイトを8秒に変更しました。
ギアパワーアップ!が入ると、すこし余計にかかるので10.6秒で設定しました。
場合によったら、途中で録画が終わってしまうかも知れません。

これで、バトル種別とエリア表示直前の暗転から、継続の選択肢直前くらいまでの間で録画できるようになりました。

この辺りの時間は、ひょっとしたら動作してる時の負荷によって変わりそうな気がするので、何回かプレイしながら調整していこうと思っています。




現在の負荷は、調整してこんな感じです。
IkaLogの優先度を一段落とさないと、CPUのグラフが99%で張り付く感じでした。
優先度の変更は、IkaUIのショートカットを作成して、リンク先の記述にコマンドを追加しています。

C:\Windows\System32\cmd.exe /c start /belownormal C:\IkaLog\IkaUI.exe

IkaLogを使ってみて

ガチマッチにはあまりイカない、フレンドマッチもあまり興味ないレベルのイカリングなのですが、対戦記録や動画が自動で残せるのはとてもうれしいです。

あと、Twitterやstat.inkさんに戦歴が投稿できるのは、大げさかもですが、イカリングとして行きた証のようなものです。

-
過去にDQ10の白チャットを画像から文字に起こせないかと思ってチャレンジして、速攻挫折した記憶があるので、画像を解析して情報を抽出できるテクニックは本当に凄いなと思います。


2015年10月21日水曜日

IkaLogの自動録画機能を自分好みにしてみたメモ

はじめに

ここに書かれてある情報は、個人的に行った改造になりますので、この情報を元に作者の方に問い合わせはしないでください。

お約束ですが、手を入れると今まで動いていたものが動かなくなってしまう可能性もありますので、ご自身の判断でイカよろしくお願い致します。

IkaLogの自動録画機能を自分好みにしてみました

自分が使いやすいように、 IkaLog (WinIkaLog20151022_065159_43e0ca0) に同梱されていた ControlAmarecTV.au3 に少し手を入れてみました。

自分で使えたらいいや的な対応なので、わたしが知らないだけで、もっと良い方法があるのかも知れません。
その時は教えて頂けたらありがたいです。



手動でアマレコTVの録画を録画するために、こんな感じで録画開始にF11キー、録画停止にF12キーを割り当てています。


この設定に合わせてスクリプトに少し手を入れてみました。

;
;  IkaLog
;  ======
;  Copyright (C) 2015 Takeshi HASEGAWA
;
;  Licensed under the Apache License, Version 2.0 (the 'License');
;  you may not use this file except in compliance with the License.
;  You may obtain a copy of the License at
;
;      http://www.apache.org/licenses/LICENSE-2.0
;
;  Unless required by applicable law or agreed to in writing, software
;  distributed under the License is distributed on an 'AS IS' BASIS,
;  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
;  See the License for the specific language governing permissions and
;  limitations under the License.

;
;  Start and stop recording using Open Broadcaster Software(OBS).
;
;  To Start Recording:
;    ControlAmarecTV.au3 start
;
;  To Stop Recording:
;    ControlAmarecTV.au3 stop
;
;  To Reanem the recording:
;    If you want to rename the recording to a specific filename,
;    Specifcy the filename as environment variables
;    IKALOG_MP4_DESTDIR and IKALOG_MP4_DESTNAME.
;
;  Though this script will sleep seconds so that work on
;  a specific environment. The behavior is subject to change.
;

#include 
#include 

Func RenameFile($source)
 Local $dest = EnvGet('IKALOG_MP4_DESTNAME')
 $dest = StringReplace($dest, "/", "\")
 If $dest = '' Then
  Return False
 EndIf

 ; IkaLog assumes mp4 as video file extension, but AmarecTV uses avi.
 If StringRight($dest, 4) = ".mp4" Then
  $dest = StringReplace($dest, ".mp4", ".avi", -1)
 EndIf

 FileMove($source, $dest, $FC_OVERWRITE)
EndFunc

Func FindRecentRecording()
 Local $directory = EnvGet('IKALOG_MP4_DESTDIR')

 ; Replace all slashes to backslashes.
 ; $directory also needs a backslash at its end.
 $directory = StringReplace($directory, "/", "\")
 If StringRight($directory, 1) <> "\" Then
  $directory = $directory & "\"
 EndIf

 Local $hSearch = FileFindFirstFile($directory & "*.avi*")

 If $hSearch = -1 Then
  MsgBox(0, "Error", "Could not find any candinates in " & $directory & " (path 1)", 10)
  Return False
 EndIf

 Local $latest_file = ''
 Local $latest_timestamp = ''

 While True
  Local $file = FileFindNextFile($hSearch)
  If @error Then ExitLoop

  Local $timestamp = FileGetTime($directory & $file, $FT_MODIFIED, $FT_STRING)
  If StringCompare($timestamp, $latest_timestamp) > 0 Then
   $latest_file = $directory & $file
   $latest_timestamp = $timestamp
  EndIf
 WEnd

 FileClose($hSearch)

 If $latest_file = '' Then
  MsgBox(0, "Error", "Could not find any candinates in " & $directory & " (path 2)", 10)
  Return False
 EndIf

 Return $latest_file
EndFunc

Func ControlAmarecTV($stop)
 Local $hWnd = WinWait('[CLASS:AmaRecTV; INSTANCE:2]', '', 1)

 If $hWnd = 0 Then
  MsgBox(0, "Error", "Could not find AmarecTV")
  Return False
 EndIf

 Local $text = ControlGetText($hWnd, "", "[CLASS:msctls_statusbar32]")
 Local $inRecording = StringInStr($text, '録画中...') > 0

 Local $click = False
 If $inRecording and $stop Then
  ; Stop Recording.
  $click = True
 ElseIf (Not $inRecording) and (Not $stop) Then
  ; Start Recording.
  $click = True
 EndIf

 If $click Then
  If $stop Then
   ; 録画停止待ち時間を10.6秒に変更
   Sleep(1000 * 10.6)
   Else
   ; 録画開始待ち時間を4.4秒追加
   Sleep(1000 * 4.4)
   EndIf

  ; Send Ctrl-Z

  WinActivate($hWnd)
  WinWaitActive($hWnd, "", 1)

  ;send("^z") --コメントアウト

  ;
  ;アマレコTVの録画開始をF11,停止をF12に設定してあります。
  If $stop Then
   ; 録画停止キー(F12)送る
   send("{f12}")
   Else
   ; 録画開始キー(F11)送る
   send("{f11}")
  EndIf

  ;ファイル名の変更は行わないのでコメントアウト
  ; If $stop Then
  ;  Sleep(1000 * 10)
  ;  Local $file  = FindRecentRecording()
  ;  RenameFile($file)
  ; EndIf
 EndIf
EndFunc

$stop = StringCompare($CmdLine[1], 'stop') == 0
ControlAmarecTV($stop)


※ 録画停止後のファイル名変更機能は、使わないのでコメントアウトしています。
※ 環境と好みによって、待ち時間を変更する必要があると思います。

変更後の動作確認は、アマレコTVを起動して(何もいいので)映像が流れている状態で、コマンドプロンプトから
"C:\IkaLog\tools\ControlAmarecTV.au3 start" で、4.4秒後に録画開始され

"C:\IkaLog\tools\ControlAmarecTV.au3 stop" で、10.6秒後に録画停止されたら大丈夫っぽいです。

こんな感じです。












※ お使いの環境により、アプリケーションと拡張子の関連付けが必要になるかもしれません。
OSは、Windows10 Pro を使っています。

後は、IkaLogを起動して普通にスプラトゥーンを遊んだ後で、実際に録画出来ているか確認すれば完了です。
アマレコTVの標準機能で、録画の開始・停止で音が鳴る設定があるので、それを使えばいいかなと思います。

アマレコTVで録画したファイルは、サイズが4GB~4.8GBくらいあるので、AviUTLを使って1/8くらいにサイズを落として、 Free YouTube Uploader というソフトでYouTubeへまとめてアップロードした後、削除しています。

IkaLogの自動録画機能を使うと、こんな感じの動画が、手放しで録画できるようになります!

2015年10月10日土曜日

お約束ごと


IkaLogさんのja_FAQで、このBlogをほんの少しだけ紹介していただいていますが、あくまでも公式とは無関係で、こちらで勝手に作って発表しているものです。
このBlogの情報を元に、IkaLogさんに問い合わせたりは絶対になさらないでください。

Splatoonで遊ぶ時、IkaLogさんと、stat.inkさんを利用させていただいています。


それぞれ個人で開発されているのに凄い!と感動して、特に専門知識がある訳でも無いですが応援したいと記事を書き始めたので、先方のご迷惑になるような事は避けたいのです。


あくまでも個人的にですが、IkaLog自体HDMIキャプチャなどの組み合わせもあり、ある程度ググって自力で解決する事が出来なければ使うのが難しいソフトじゃないかと思っています。

いくらかのお手伝いができればと思い記事を書いていますが、中の人自体がGoogle先生の教えのままコピペで何かする程度の知識しか持ち合わせていません。

コンピュータ関係の職業ではないので、配布の仕方や用語の使い方、コードの書き方に変な所が沢山あるかもしれませんが許してください。

ここを読んで勉強しろ的な事を教えていただけると本当にありがたいです