
IIDXで買った動画のファイル名を自動で曲名にするスクリプトを作ってみた
思いのほか記事が長くなったので結果だけ見る人は目次9へ
結論からするとこういう感じに変換するスクリプトを書いてみた記事です。
結果は本当に困ってたのでこれでも満足してます。※ないよりはマシ

これからプログラムやってみたいなって人もプログラムってこんな簡単なんだ?って思えたりする(かも)な記事です。
1.スクリプト作成の背景
beatmaniaIIDXというゲームではプレイ動画を買うことができる。
初クリア時や何かしらのvlogとして買ってる人って結構いると思う。
みんなこの動画のファイル名ってどうしてるんだろう???
私はそのままPCに保管しててファイル名そのままにしてました。
2022年から買い始めたんですがその数なんと857個に!
何が困るってもう何の曲か分からない。
曲名を知るには一個一個開くしかなくてとても困ってます。800個ですよ?
今更一個一個開いて曲名をタイトルにするとかアホのすることだ。
と、思ってどうせ誰か同じように困ってて自動でファイル名を曲名にするツールがあるだろと探しました。
こういうのって大体どこかの天才がツール公開してて活用するんですが
これが意外や意外。見つからない!!あるなら教えてほしいです。
え、みんな買った動画どうしてるの?毎回ファイル名を変えてるの?
マジで教えてほしい。
もしかしてDL時にファイル名に曲名つけるオプションとかある?
まぁそんなオプションがあろうがなかろうが私の動画のファイル名は
もう全部「BEATMANIAIIDX-yyyymmdd-hh24mi.mp4」であるわけで
公開されてないんじゃ仕方ないので、ものすごくイヤイヤ自分で作ることにしました。
なお、私は普通のユーザ企業の管理職でしてプログラムは一切書けません。
業務でやるとしてもユーザ側PMです。ただ昔ベンダでPG/SEをしていて
GITHUBの使い方すら知らないほど今時のトレンドは分からないのですが
ただ動くだけのPGを書けと言われたら一応書けるんです。
部下はGITHUBやAWS、GCP、AIをバリ活してるが私は全くできません。
(私の時代のコード管理はVSSとSVN。古っ)
このような初心者が作ってるということをご承知おきください。
2.スクリプト設計
概要設計は単純です。
曲名を何らかの方法で取得する。
取得した曲名でファイル名を変更する。
複数ファイルを一括で変更できるものとする。
2.3.は簡単ですよね。これは最後に作ればいいでしょう。
フォルダを指定して子フォルダ含むフォルダ内に存在するファイルをループでファイル名変更すればいいだけです。寺の動画はmp4なので「*.mp4」を対象とすればいいでしょう。
問題は1です。
まず大前提として曲名が必要。これを如何に正確に取得するかがキモです。
これが会社で業務に活用できるなら「こういうのできる?」って部下に言えばいいだけですが趣味でそんなこと聞けません。
どうしようかなと思いました。
キモは前述のとおりですが、キモ中のキモは「正確に」です。
楽曲DBとかあるじゃないですか。CDを取込すると入れてくれる奴。
あれとか使えないかなと思いました。適当に調べましたがしっくりこない。
というかAPI利用にお金かかりそうだしなんか面倒くさそう。
私はね、無料で30分で作りたいんですよ。
うーん。どうしようと考え、最初に思い浮かんでたけど正確には曲名とれなさそうだから辞めた案を採用することにしました。
3.◎とりあえず簡単そうだからやってみよう設計案◎
弐寺の動画は曲が始まる前にゲーム画面の最初に曲名がでます。
これを取得するという案です。
具体的には、動画ファイルを開き曲名が出ている画面をキャプチャ。
キャプチャした画面をOCRで判読して曲名を取得する。
ということにしました。なんでって?
キャプチャもOCRも絶対どこかの天才がライブラリやサンプルを無料で公開してると思ったからです(^^)
すぐ試せて上手くいけばすぐ作れる。
4.☆決定した設計
フォルダ指定する
動画ファイルを順番に読み込む
動画ファイルを開き、曲名が出ている画面をキャプチャ
キャプチャした画像から曲名部分を切り抜く。
OCRで読みやすいように画像を調整する
調整した画像をOCRで文字として取得。
ファイル名を変更する
これなら30分でいけるやろ!!!
5.開発環境
もちろん30分じゃできなかったよね。
私の家PCはsteamとdiscoしか入ってないからね。開発環境がない。
開発環境作らなきゃって思いました。てか言語どうしよう。#今更すぎる
現役時はJAVA全盛期で私自身はLAMPやASP.net(C#,VB.net)でWinのシステムをメインに色々作ってたので一瞬C#でつくるかと思いましたが
ファイル名変更するだけですよ。もっと手軽にやりたいなと思いました。
結果サンプルの多さを考えpythonでも使ってみるかとpythonで作ってみることにしました。(実はちょっと使ってみたかった)
pythonってIDEは何で作るのかな。どうやって作るんだろう・・・って
まさかの新言語1からで最初にした事はVSCODEとpythonのダウンロード。
先は長そうです。
とはいえ確かに現役外れて経験もないですが、言うて普段付き合ってるのはベンダーや部下メンバで彼らは現役エンジニアなわけですよ。
今の時代、何が便利でどんなもの使っててどんなものがあるのかくらい
決裁してるから用語だけは知ってるんスよ。
伊達にちょっとした何かを頼んだ時にpython+VSCODE+AIでちょちょっと何かやってるの後ろから見て「へー今はそんなんできるんだ?」とか言ってないんスよ。
さてとりあえず見様見真似でpythonとVScodeを入れvenv環境を作った。
部下は他にAIのなんたらコパイロットとか言うのを入れてたはずですが
よく分からなかったので「どうせサンプルコピペするだけだし昔より楽だろうからイチから書けばいいや」とAIの事は忘れて環境ができた。
現代言語なら何やっても昔よりきっと楽なはずと信じて。
6.pythonコーディング(の時に思ったこと)
とりあえずgptに聞いたよね。
「pythonで動画内の画面をキャプチャするコード書いて」って。
すごいよね。速攻書いてくれた。
でもどうせなら動確まで終わってるコードがいいなと思って検索した。
「動画 キャプチャ python」とかで。すぐ出てきた。
ホントいい時代なのよ。ほぼ100天才が何か無料公開してんのよ。
「備忘録として残しておきます」とか前世は天使だったと思う。
しかも今は天才が公開してなくてもAIが書いてくれるの。素晴らしいね。
どうやらpythonはライブラリを「pip」コマンドで勝手にをネットからダウンロードして入れてくれるらしい。すげっ!らくちん!
私の時代はどうだったんだっけ?と思い出してみたけど覚えてない。
VSに外部ライブラリ入れるときってどうしてたんだっけ・・・
てゆーかVScodeめっちゃ使いやすい!これ無料ってMS太っ腹すぎる。
私はVS2010とかeclipse使ってたんですがこの程度のツールなら全く遜色ないどころか全然使いやすい。
てゆーか今の言語ってすごいね。一番の違いはネットに勝手に繋がる。
いちいちポート開けてとかしなくていい。
いやもちろん知ってたけど実際にコードする立場になると実感が違う。
7.コーディング
時代遅れ過ぎて感動で横道ずれました。さてコーディングです。
どうやらpythonはdefで関数化できるようなのでキャプチャ関数を書いた。
mainの前になきゃいけないのはC言語感あるね(プロトタイプ宣言)

やばいね!python!!!!!!
cv2というライブラリでキャプチャできるようなんですが
obj(コード中のcap)作ったら1行でキャプチャしてくれる!すげーーー!
感動したね。お前これ俺がPGしてた2000年代だったら何行必要なのよ!?
特に拘りはないので10フレーム目をキャプチャ。
これを動かすと画像が取得できます。実際に動かしてみましょう。
テストでベィスSPL(意味はない)の動画でテストしてみます。
ファイル名は「BEATMANIAIIDX-20250109-1355.mp4」です。

おお無事JPGができてますね。開いてみます。

おおー!キャプチャしてる。すげーな!2行でキャプチャしたぞ!!!
cap = cv2.VideoCapture(video_path)
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_num)
ただ、これだとこの後のOCRで不要な文字が多すぎるので、タイトルだけ切り取りたい。
切り取りのライブラリも同じCV2でした。なんて便利なんだ・・・・
やってみました。なお範囲はMSペイントでpxを見ました。
# 変数には範囲が入ってる
img = img[sty:edy+1, stx:edx+1: ]

すばらしいね!!python超便利じゃん!!
んじゃ探したOCRのライブラリ早速・・・と行きたいところですが
私は古の現役時代にOCRで実際に痛い目を見ている人なので
ここでこの画像じゃダメかもしれないと思った。
まず日本語
色。SPLはピンクグラデ、新曲は青グラデ、旧曲は灰色。
左右枠。
+000が入ってる。
ここが気になりました。
なので不要かもしれませんが以下の画像調節をPGで施しました。
・左右の灰色部分は色の範囲指定で黒へ。
・+000の所は黒で塗りつぶし。
・文字色は白へできるだけ変換した後に2値化して白黒へ統一。
・ついでに調べる過程で解像度300dpiにした方がいいという事なので変換。
やってみました。

いいじゃーーーん!
よしよーし!次はOCRやろうって探してたライブラリ2つ。
pyocrとpytesseractです。結論後者のが精度良さげなので選択しました。
これも超簡単。
custom_config = r"--oem 1 --psm 7" #6,4
text = pytesseract.image_to_string(image, lang='jpn+eng', config=custom_config) #jpn+eng
これも2行よ。まじ今のPG楽し過ぎじゃない?弊社ボッタクられてない??
こんなん無料で公開してるとか絶対天使だと思う。
やってみました。

すげー!日本語もいけるやん!
これできたわって思ったんですがIIDXってタイトルフォント豊富。
エメラルダスやってみた。

無理だろこれwそう思ったが一応画像調整も動かした。


ですよね。やっぱり無理。これでOCR動かすと文字なしになる。
でも私はめげない。
8.コーディング(一部やりなおし)
他にタイトル書いてる所はないのか???って探した。

上にあるじゃん!!!!気づいてませんでした。
という事でDPは位置変わって対応できなくなるけど切り抜き範囲を画面中央から画面上部に変更してエメラルダス。

できた!!!いいじゃん!天才じゃん!色塗りつぶし処理全部無駄になったのに天才とは。
よーし曲名とれたし後は細かい処理仕込んで800個動かしてみよう。
細かい処理
・曲名で並べたいからファイル名の「BEATMANIAIIDX」を曲名に置き換える
・ファイル名に「BEATMANIAIIDX」がなかったらスキップ
・ファイル名の禁止文字は「_」に置換
・変換結果が文字にならなかったら元ファイル名そのまま
・ファイルループ
・中間画像を保存しないでそのまま処理する。
・進捗をコンソールに出す。
・動画解像度がIIDX30から変わってるので解像度で切り抜き範囲調整。
※これ罠です。気を付けてください。
9.結果発表
どうなることやら・・・ドキドキ
なんとか動いているようですね。
なんか時折不穏な変換が見えるのがすごく気になりますが一応動いてます。
そして結果はこうです。

いいねーーー!変な変換がありますがほぼいけましたね!!
なおOCR失敗しているファイル名は30個ほどありました。
15個くらいはDPでPG対象外なので問題ありません。他の15個は全部漢字の曲名でした。
具体的には「惑星鉄道」「音楽」「共鳴遊戯の華」「花蝶風雪」です。
誤字あるけど十分優秀。英字だけならほぼ100%だし。すごいねー。
駄目な15個は手動で書き換えましたが、なんで駄目なのかOCRさせる画像を確認したけど、別に普通に読めてもおかしくないんですよね。見てみて。

おかしくないよね。漢字がダメかと思いましたが以下のように読めてるのはあるので不思議です。なんで読めないんだろ。まぁいいや。
仕事じゃないので原因追求しない。改善もしない。

きっと四字熟語が苦手なんでしょう!
10.あとがき
制作時間は30分のはずが結局3時間強かかりました。
「電脳」が「電胸」になってたりと正確じゃないうえに
エラー処理とかほぼ入れてないのに時間かかりすぎですが、
多少試行錯誤したり曲名とる場所も変えたし、何より初めてpython触ったにしては上出来?じゃないかなと個人的には思います。
結果にも満足してます。⇦ 一番大事
現役PGならここまでは30分でいけると思います。
興味ある方はやってみてください。そして作ったもの私にください。
しかし今のOCRってすごいんだね。だってこれ無料だぜ。やばいわ。
ちなみにOCRはGCPのAPIで良さげなのも見つけてました。
AI使って識字率もよいそうです。面白そうだな。やってみようかなと思いましたが、私では実装に時間かかりそうだったので辞めました。詳しい人はこっちのがよさそうです。
11.最後に
今回のツールは欲しい方に差し上げますが、私はいつまでも待っています。
天才がファイル名を曲名にしてくれるちゃんとしたツールを公開してくれるのを。
それまで今回ので凌ぐので誰か作ってください。本当にお願いします。