ユーザーブロマガは2021年10月7日(予定)をもちましてサービスを終了します

【マクロ】ニコニコランキング制作の負担を極限まで減らしたい【バッチ】
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

【マクロ】ニコニコランキング制作の負担を極限まで減らしたい【バッチ】

2017-04-06 14:21
  • 3

◆ - なぜ

そんなことを思うのかというと、作ってみて初めて分かるのですが
ランキングの制作過程ってホント膨大なんですよ



ほならね、週刊音MADランキングって、どんな作業するわけ? - ar1063338

加えて、私の受け持つランキングは「週刊」なので...
もう想像しただけで吐きそうなくらい

*-* *-* *-*


◆ - そんなことを

つらつら書こうと思っているわけではありません

作業量は多い、負担も大きい、でも作りたいんです
なら、どんどん制作を自動化して負担を減らしていこう!というわけです

データ成形の手間を省くぶん

ピックアップ選出に時間を割く
各動画へのひとことコメントやあいさつの文章を考える
各回ごとの負担が減り長期運営が現実的に

といったメリットが生まれます

結局のところ ランキング制作は決まった事務的な作業がほとんどなので
タイトルにあるように、そういった部分をマクロ・バッチで処理する
メイキングというよりかは技術寄りの そんな感じのことを書いていきます


*-* *-* *-*


◆ - その1 DATASET生成

ニコニコランキングメーカー (以下NRM)で収集したデータを
ランキング制作に必要な形式(長いのでDATASETとします)にまとめる作業に関してです
主にEXCEL2013 の作業がメインです



○ マクロを組むのはハードル高い → マクロの記録を活用

EXCELやLibreOfficeなど表計算ソフトのだいたいの操作は
基本的にマクロの記述によって行うことができます



そんなこと言っても、マクロとかめんどくさそうだし、書けないし、分からないし
最初はもちろんそうだと思います (私はランキング制作に関わるまで一切触ってきませんでした)



そんなときに、取っ掛かりを与えてくれる機能が「マクロの記録」です
試しに、これをONにした状態でセルA1を選んでみると

Range("A1").Select

と記録されます
んで、行や列を選択してみると

Rows("1:2").Select
Columns("A:B").Select

となります だいたい何のことを言ってるのかわかりますよね
そして、例えばA1に値を入力したい場合は

Range("A1").Value = "TEST"
→ セルA1にTESTと記述

となります

・・・

先述のとおり、EXCELで行う大概の操作が逐一マクロとして記録されていくので

一回操作を行う → どのように記録されたか見る と繰り返すことで
次第に理解も深まり、簡単なものからでも自力でマクロが組めるようになってきます

なんかね、例えばマクロのことについて調べていると 無駄な記述はするなとか
やたら啓蒙思想の強いサイトにぶち当たったりすることもあるんです

もう、そんなのはどうでもいいんです とにかく動けばいいんです代
実際ランキング制作に必要なデータ量の処理時間なんて、たかが知れているので
(EXCELだと10秒足らず LibreOffice(EXCELマクロ移植版)だと1~2分)



○ NRMで取得できない情報は? → WEBSERVICE関数の使用

ニコニコ動画APIとは (ニコニコドウガエーピーアイとは) - ニコニコ大百科

APIってなんだというと、この場合は簡単に解釈すると
「欲しい情報をアドレスに書いて送信すると、その情報が返ってくるもの」
と考えておけばいいと思います

ニコニコにもAPIがあります 以下はその一例です
getthumbinfo
https://ext.nicovideo.jp/api/getthumbinfo/sm9
末尾に動画IDを付けると、動画ステータス(タイトル・再生回数とか)が取得できます

スナップショット検索 v2
http://api.search.nicovideo.jp/api/v2/snapshot/video/contents/search?q=愛は備長炭&targets=title&fields=contentId,title,viewCounter&_sort=-viewCounter&_context=apiguide
いっぱいクエリを付けると、その条件にあった検索結果が取得できます

・・・

話を戻しますが、NRMで取得できる情報にはある程度限りがあって
例えば、投稿者名なんかは取得できません

そこで作業を表計算ソフトに移し、WEBSERVICE関数を使用します
使い方は簡単で、引数に上のようなURLを入れると、返ってきた値がセルに表示されます
(比較的新しい関数なので、EXCEL2013以降やLibreOfficeで動作します)

=WEBSERVICE("https://ext.nicovideo.jp/api/getthumbinfo/sm9")

それとともに使用するのが、FILTERXML関数です
取得した情報の中から、目的の情報を取り出すというものです
WEBSERVICE関数をA1に置いて、投稿者名(<user_nickname>~</user_nickname>)
を取り出したい場合

=FILTERXML(A1,"//user_nickname")

となり、これで投稿者名がEXCEL上で取得できます
それに加えて、投稿者アイコンや直近のコメントなども(必要かどうかは別として)
これらの関数で取得することができます 非常に便利

※ユーザーアイコン取得の一例 確かこの時からは仕様が変わっちゃってたと思いますが...



○ ファイルの書き出しなど... → マクロで自動化できること

マクロでEXCELの操作が行えると言っても、なにもセルの内容をいじくるだけではありません
ファイルの読み込み・書き出し、ひいてはバッチファイルの実行まで行うことができます


・外部テキストファイルの読み込み

ExcelでCSVやタブ区切りファイルを文字列として読み込む - Qiita

テキストファイルを読み込んで、タブが挿入されていたら分割し
セルに書き込んでいく というコードです
一度セルに書き込んでしまえば、あとは煮るなり焼くなり好きにできますよね

上記ではGetOpenFilenameを用いて、ファイル名を選択する形になっていますが
毎回の読み込み先が決まっていたり、規則的だったりする場合はそこを書き換えて
全自動で読み込みができるようにしておくのもいいかもしれません


・ファイルの書き出し


エクセルVBAでテキストファイルに書き出す最も簡単なプログラム

ブックの内容をテキストファイルとして保存するコードです
とにかくここからこの範囲まで書き出したいんじゃ!と決まっているときは

Dim i As Long
 For i = 1 To 10
  Print #1, Cells(i, 1).Value & vbTab & Cells(i, 2).Value
 Next

とか書いて、上記サイトのコードから空白判定を取っちゃうのもいいのかも

一応、テキストファイルの書き出しということになってますが
保存するファイル形式は、コードの一部分を書き換えれば
txtだろうがcsvだろうがbatだろうがなんでもOKなわけです
これに関しては、後の項も見ていただければと思います


・ファイルのDL - 1 - EXCELから


【Web上のファイルや画像をダウンロード、URLDownloadToFile】【VBA】

URL先のファイルをDLするコードです

例えば、必要な投稿者アイコンやサムネイルのURL一覧表が作成できたとして
それをtxtで保存して、NRMやIrvineなどで読み込みダウンロードするというのも
すべて手動でDLする場合と比べると格段に楽...なのですが

EXCEL上で処理することで、処理を全自動化できるのはもちろんのこと
ファイル名の変更など、ある程度の融通を利かすことが
できるのも大きなメリットの一つとなります


・ファイルのDL - 2 - バッチファイルの実行


Excel VBAからバッチファイルを呼び出す

外部バッチファイルを実行するコードです

様々なことができるとは言え、マクロでできる処理にも限界はあります
なので、そういった部分はバッチファイルを使用して取得を行ったり...
ということが可能です

これまでを踏まえて、どうしてもマクロ上でできないのが
NRMでのフレーム画像の作成と必要な動画のDLです

・・・

コマンドラインで動く動画ダウンロードツールyoutube-dlの紹介とそのzsh補完関数を書いたので紹介 - Qiita

ところで、まっったく関係のない話なのですが
Pythonというプログラミング言語にはyoutube-dlというものがあります
コマンドラインから、各種動画サイトの動画ファイルをDLできるというものです
ニコニコにも対応しています たぶん
それで、これはコマンドプロンプトから呼び出すことができるので...
バッチファイルを作って...


◆ - その2 動画作成

作成したDATASETを、ランキング動画の形式にする作業に関してです
主にEXCEL2013 ・AviUtl の作業がメインです



○ AviUtlにおける、aupのファイル読み込み
aup内のファイル読み込みに関しては、少し心得ておかないといけないことがあります
それは、ファイルのパスが絶対参照で記録されていることです
一度aupを保存したのち、その中の1ファイルでもどこか別のフォルダへ動かすと
その時の作業内容を完璧に再現することはできません



逆に、同名のファイルを差し替えても何の問題も起こりません
例えば、前週分の動画データ(01~20.mp4とします)をAviUtlで読み込み、aupとして保存します
これらを今週分の同名動画データ(01~20.mp4)へと差し替えた場合も
次回起動時にはそのまま読み込まれます

つまりは、毎週のDATASETをきちっと形式を決めて作成すれば
DATASETをまるごと差し替えるだけで、毎週の動画がほぼほぼ出来上がるという寸法になります




○ 動画インフォメーションをexoファイルとして保存

AviUtlでのランキング制作においては、OPやEDに使用した動画の情報など
テキストオブジェクトを挿入しなければならない場合があります


これらの内容が、毎回取り決まった形式である場合には
EXCELでの処理の段階で、テキストオブジェクトを含むexoファイルを
出力してしまう...という手があります
※労力の割にはメリットが薄い場合もありますので、参考程度でどうぞ

exoファイルの内容を見てみると、意外とわかりやすいものとなっています
しかし、問題は

なんやねんこれ

これは
テキストオブジェクトの最大文字数・1024字の
それぞれのUnicodeの文字コード(UTF-16)を前後2桁ずつ入れ替えたもの

となります
UTF-16への変換に関しては、これも新しめの関数であるUNICODE関数を用います

具体的には
MIDで抜き出し→UNICODEで変換→DEC2HEXで16進数に変換→MIDで入れ替え
という流れになります

A1 : 投稿期間
→ 変換したいテキスト
A2 : =IF(ISERROR(UNICODE(MID(A1,1,1))),"0000",DEC2HEX(UNICODE(MID(A1,1,1))))
→ ISERRORでエラー処理(エラーの場合「0000」を表示)&Unicode変換
A3 : =MID(A2,3,2)&MID(A2,1,2)
→ 2文字ずつ入れ替え

これで1文字分のセットです
この処理を繰り返して、すべての文字の変換が終了したら
4096文字分の「0」を末尾に追加し、LEFT関数で先頭から4096文字分を抜き出す
という過程を経て、ようやくexoとして読み込める形式のテキストが完成となります


・・・


セル範囲を指定して文字列を結合・連結するユーザー定義関数




ちなみに、複数のセルの値を範囲指定で結合することのできる
ユーザー定義関数がこちらにあります
今回のようなケースだと、&区切りでセル指定をしていくと大変で
この関数を用いると見た目がスッキリ・明瞭となるのでオススメです

あとは、諸々の情報をEXCEL上でまとめたのちに先述の方法でファイルの書き出しを行うと
AviUtlで正常に読み込むことのできるexoファイルが作成できます



○ 編集時に有効なAviUtlのショートカットキー

基本的な部分といえばそうなのですが、以下のショートカットキーを活用することで
動画編集の効率自体を上げようというものです


「Tab」キーで、レイヤー間のオブジェクトへの移動 (縦方向)
「,」「.」キーで、前後間のオブジェクトへの移動 (横方向)

とくに、ランキング制作という性質上横方向への移動が多くなるので
今までマウスホイールでスクロールしてオブジェクトを選択...としていた方は
これを機にショートカットキーで移動してみると作業時間が変わるかも?



○ エンコードが新仕様になったからこそ

これまでQSVやNVEnc等のハードウェアエンコードは、エンコードの時間が
短縮されるというメリットがあったものの、ビットレートあたりの画質がよろしくないことから
ニコニコへの投稿におけるメリットは薄いとされてきました

が、新仕様になりニコニコ側で再エンコが強制的に行われるようになったため
以前ほど画質に対して神経質になる必要がなくなってきました

それに加えて、せっかく投稿時の容量が1.5GBに緩和されたのですから
ハードウェアエンコードで、多少ビットレートを高め(私は2500kbpsくらい)にしておいて
エンコード時間を節約して投稿を行う...というのはいかがでしょうか


広告
×
いつも見てます
51ヶ月前
×
Twitterブロックされてたのでこちらで失礼します。
例のアレの糞みたいな動画でランキング荒らして申し訳ないです。
以降の私の投稿動画はランキングに載った場合音madランキングから除外して結構です。よろしくお願いします。
長文失礼しました。
50ヶ月前
×
>>2
Twitterのブロックに関しては、私にはちょっと肌が合わないなーと感じた方は
バンバンするようにしちゃってます(語録が多めだったり、そんな単純な感じです)
言い方クソですけど、こいつうぜーとか、気に入らねーとか、そういうことではないです
そこは完全に個人的な了見のもと行ってまして、SNSはそういうものだと考えてます

ランキング除外の件については、検討するつもりはありません
実際に、視聴者の心をつかんで支持を得ているのですから もっと誇りを持って良いのでは...?
伸びる動画を作るというのは、本当に難しいです 自分も音MAD作者の端くれですから分かってます
だからこそそんなに卑下せず、これからも視聴者・界隈を盛り上げて欲しいと思います(マジで)

だいぶ傷心されているようで、私がその理由の一端であるならば
その点については大変申し訳無いと思います ごめんなさい
50ヶ月前
コメントを書く
コメントをするには、
ログインして下さい。