見出し画像

自動うあわああああああああああああああああああjadljaalnlnsmfjncanjmklsjgfm

※拡散非推奨

記事が ゴミ
の疑いがあります

使う人がいるかわかんないけど一応自分のやり方をメモ
大したこと書いてません
ChatGPTとかに要約させてから読んだほうがいいかもしれません

割と愚直な方法で保存しています
もっといい方法があるかもしれません

あと使っているコードとかは公開しません
使われても責任取れないし、環境に依存している可能性が高いし、
何より恥ずかしいから

方針

yt-dlpでタグごと保存する

ただし、yt-dlp単体で保存できるのは新着5000件のみなので、
たまにスナップショットAPIとyt-dlpを併用してタグ全体を保存する

タグがついていない動画は、
その辺りの動画まで見ていそうな人のマイリストや、
タグをつけずに投稿する人のユーザーページから
保存することで、ある程度カバーする

↑ これらをbatファイルでずっと動かし続ける



yt-dlp(保存ツール)について

導入については俺が書いてもわかりにくいだけだから調べてほしい

yt-dlpで指定できるURL

yt-dlpは、動画URLを指定するとその動画を保存してくれる
が、指定できるのは動画URLだけではない

↓ 自分がニコニコで試して何かしらが保存できたもの

マイリストURLを指定 → マイリストの全動画を保存 1ページ目の100件だけではなく、500件すべて保存してくれる
ログイン状態であれば自分の非公開マイリストを指定しても保存できる
↑できなくなってました! ごめんなさい

投稿者URLを指定 → 投稿者の全動画を保存する ただし、投稿動画一覧非表示になっている動画は保存できない 1ページ目の100件だけではなくすべて保存してくれる(はず)

シリーズURLを指定 → そのシリーズの全動画を保存

キーワード・タグURLを指定 →
そのURLにアクセスして、上から順に保存
ソートや、ジャンル・再生時間・投稿日時の指定も反映される
1ページ目の30件だけではなくすべて保存しようとするが、
ニコニコのキーワード・タグ検索は5000件までしか見れないため、
保存できるのも5000件までとなる
(yt-dlpでは157ページ目を取得できないというエラーが表示されるが仕様)

他のURLでの保存も、できるかもしれませんよ(不確定要素)


search/音MAD?f_range=3&l_range=1&genre=sports&sort=n&order=d
→タグのうち、5分以内・投稿1ヶ月以内・スポーツジャンルの
 動画を、コメントが新しい順に保存する

画像
このたった3件だけを保存するということになります
画像
タグ検索で5000件の先を見ようとすると

ニコニコへのログイン

yt-dlpで、オプションを指定せず保存すると、
ニコニコにログインしていない扱いで保存してしまい、
センシティブ判定の動画を保存できないなどのデメリットがあります。
必ずログインした状態で保存しましょう!

ログイン状態で保存するためのオプション:

--cookies-from-browser [ブラウザ名]
指定したブラウザのcookieを引っ張ってきてログインします
そのブラウザで今ログインしているアカウントで保存しようとします
↓ 自分の例

yt-dlp https://www.nicovideo.jp/watch/sm36745950 --cookies-from-browser firefox

-u [メールアドレス/電話番号] -p [パスワード]
直接メールアドレスとパスワードを指定してログインします
↓ 自分は使っていないので架空の使用例

yt-dlp https://www.nicovideo.jp/watch/sm42759457 -u masaliardancer@kasane.teto -p m1k1olove7ake5h1#&wichman

どちらかを利用してログイン状態で保存できるようにしましょう!


yt-dlp.confを用いて上のオプションを
常に適用するようにしたほうがいいです
なぜならば便利だから

yt-dlp.exeを置いたフォルダにテキストファイル作って、
そこに下のテキストコピペして、
テキストファイルの名称をyt-dlp.confにすればできます

-f bestvideo+bestaudio/b
--merge-output-format mp4
--cookies-from-browser firefox

上2行はYouTube用の設定だからなくていいけどあっても困らない

画像

適用されてるかどうか心配なときは、
その状態でセンシティブ動画 (sm43086299のことではありません)
を保存できるかどうかやってみればいいと思います

↓yt-dlp.confを作った状態で以下を実行して保存されれば成功

yt-dlp https://www.nicovideo.jp/watch/sm42469261


保存記録

yt-dlpで、同じ動画を重複して保存しないために
保存した動画IDを記録してくれる機能がある

--download-archive [ファイルパス]
指定したファイルに保存した動画を追記する。
また、保存する動画が指定したファイルにすでに記載されている場合、
その動画を保存せずスキップする。

ただし、上のオプションを指定しなくても、
最初に保存したときの動画ファイルが保存先に残っていたら勝手にスキップしてくれる。ダウンロードが途中で中断されていても続きからやってくれたりもする。
だから上のオプションが必要になるのは、一度保存した動画を別のフォルダに移動させる場合に限ると思う



実装

動かすのに必要なファイル一覧 :
- yt-dlp
- タグ以外で保存したいURLを載せたファイル
- タグ全動画のURLを取得するpythonファイル
- (python本体)
- コマンドを実行し続けるbatファイル
以上

タグ以外で保存したいURLを載せたファイル

これはそのまま保存したいURL乗せていけばいいです

画像
自分のマイリストです(いいねログシリーズ)
自分のマイリストであっても、保存するためには、公開マイリストである必要があります(新事実)

タグ全動画のURLを取得するpythonファイル

ここが一番ややこしく、再現性が低そうなところです
自分もどうやってやったのかあんまり覚えていません

あまり解説する気が出なかったので、使用しているコードを貼ろうと思います。最初にコードを貼りませんと書きましたが、あれは撤回します。

実行にはPython、および、Pythonモジュール「requests」が必要です
Pythonを導入し、"pip install requests" でrequestsをインストールしてくださ

「Python Windows 環境構築」「Python モジュール インストール」などで頑張って調べてください 安心して死んでください

スナップショットからタグの動画すべてを取得するコード getallmadurl.py
1000件ごとに現在の進捗を、各年ごとに何本の動画があるのかを表示します

import requests

counta=0
file_rst=open(R"B:\MAD\tool\my_Program\download_movie\allmadurl.txt","w",encoding="UTF-8")

for i in range(20):

    count=0

    for j in range(200):
        countj=0

        payload={"q":"音MAD","targets":"tagsExact","_sort":"+startTime","fields":"title,userId,contentId,viewCounter,mylistCounter,likeCounter,commentCounter,startTime,lengthSeconds",
                 "_limit":"100","_offset":str(j*100),
                 "filters[startTime][gte]" : str(2007+i)+"-01-01T00:00:00+09:00","filters[startTime][lt]":str(2008+i)+"-01-01T00:00:00+09:00"}
        url="https://snapshot.search.nicovideo.jp/api/v2/snapshot/video/contents/search"

        r=requests.get(url,params=payload)
        jsondata=r.json()


        for jsonObj in jsondata["data"]:
                    
            file_rst.write("https://www.nicovideo.jp/watch/"+str(jsonObj["contentId"])+"\n")
            count=count+1
            counta=counta+1
            countj=countj+1

            if (counta%1000)==0:
                print("\t%d video wrote"%counta)
        if (countj<100):
            break
    
    print("%d movie: %d"%((2007+i),count))

file_rst.close()
print("all movie: %d"%counta)

コードかける人ならこのコードよめばだいたい何やってるかわかるだろうからたぶん なんとかなるでしょう

4行目にあるファイルパスだけは適当に変えたほうがいいと思います
それ以外はたぶんそのままでも動くと思う

batファイル

batファイルは、起動すると指定したコマンドを実行してくれるファイルです
少なくとも僕はそう思っています
マイクラのコマンドブロックみたいなものです

batファイルの中身自体はそんな複雑なことをしていません

yt-dlpでタグ新着5000件保存
yt-dlpで保存リストファイルに書かれた動画を保存
Pythonでタグ全動画URLを取得するプログラムを実行
yt-dlpで全動画URLリストに入っている動画を保存
「yt-dlpでタグ新着5000件保存」を1000回実行

batの中身

yt-dlpで実行するときのオプションは、保存場所指定・保存記録(・ブラウザのクッキー利用指定・リトライ回数1000回・速度下限設定)ぐらいですね
言語指定日本語も入れたほうがいいかもしれません 自分は入れてません

「一番下の1000回ループが終わったら終了するのか」と考えた人いると思います
そう考えた人は、賢い

音MADタグ先着5000件保存は、普通にやってるとだいたい1周2分ぐらいです これは5000件すべて保存済みの場合です 
が、もしインターネットに繋がってなかったり、致命的なバグがあるとその1周は極端に短くなるか極端に長くなります もしbatファイルの実行がすぐ終わったらバグがあるとか何か繋がってないってことです それがわかるようにするために1000回で打ち止めにしています あと無限回ループがよくわからなかった(痴呆)

その他(ここから特に意味なし)

yt-dlpのせいなのか俺のせいなのかわからないけど、動画の結合に失敗してるときがある。大量のpartファイルが保存フォルダにあって邪魔な上に、動画が壊れてて途中で止まったり再生できなかったりする。解決策はわかりません。
↑これ結構な頻度で発生してるから流石に治さないとなあ
そして保存に失敗した動画を特定して保存し直さないとなあ
マジでダルいわ どうしてくれんのこれ?
30本に1本ぐらいのペースで発生してる気がする(大ガバ)
保存失敗はまずいですよ! っていうか下手したらもう取り返しがつかない保存ミスも起きてるんじゃないか しかも1本じゃなく

yt-dlpである日突然ダウンロードできなくなった! という場合、7割はyt-dlpをアプデすれば治ります 残り3割のうち2割は数日経ってからyt-dlpをアプデすれば治ります 1割は謎です

10万件を超えている中からエクスプローラーでファイルを探すのは極めて困難なので、Everything(ファイル検索ツール)を利用しましょう
ちなみに自分は普段、エクスプローラーよりEverythingを使ってファイルにアクセスすることが多いです
7割はEverythingから直接ファイルに、2割はEverythingからそのファイルが入っているフォルダを開く、1割はエクスプローラーかデスクトップで完結

画像
なんだこれは……便利だなあ

最初は保存した動画を全部同じフォルダの中に入れてたけど、それだとフォルダを開いたとき、エクスプローラー側が負荷に耐えられなくて固まっちゃったりしました。今は動画IDでフォルダ分けしています。
多分めちゃくちゃ頑張れば自動でフォルダ分けできるんだけど、そのめちゃくちゃ頑張るのをやりたくないから、今のところはEverythingの正規表現機能で頑張ってます。
最近はフォルダ分けをサボっているので、保存フォルダ直下に1万5000件入ってました てめえなあほが多いから日本だめになる!!

2023末あたりから本格的に保存を始めて、現在17万本で5.3TB(1本あたり30MB)

画像
現存するタグ動画が15万本だから引き算して1.3万本は削除済み動画かあって思うじゃないですか、これ音MADじゃない動画に一瞬だけタグついてたパターンの動画とか、一回投稿して修正のためにすぐ消した動画とかいっぱい入ってるんで、見かけの数字ほど保存に効果があるわけではないですよ

「PATH」「環境変数」について

プログラミングの環境構築でやらされるけどよくわからないもの1選 環境変数の編集

なんとなく触っちゃダメそう笑

環境変数っていうのをめっちゃ雑に説明すると、どこからでも呼び出せるアイテムのことです

ファイルを実行するとき、そのファイルをパソコンが見つけられるパターンはだいたい次の3つです
1.ファイルが実行する作業フォルダ内に存在する
2.ファイルをフルパスで指定する
3.ファイルが環境変数として登録されている

そのままだとあんまりうまく説明できないので例えます
例えばコピー機が事務室にだけ置かれている会社があって、その会社の新入社員に「コピー機を使え」と指示したとします。
新入社員がコピー機にたどり着けるパターンは3つです。
1.指示が出された場所が事務室
目の前にコピー機があるんだから、もちろんコピー機にはたどり着けます。
2.コピー機の場所を明確に示して指示した
「1Fの玄関から左に進んで突き当たりにある事務室に行って、コピー機を使え」という風に指示されれば、その通りに向かえばいいだけなのでコピー機にたどり着けます。
3.新入社員がコピー機の場所を知っている
事前に新入社員にコピー機の場所は知っていれば、その知識を頼りにコピー機の場所に向かえますよね。これが環境変数にあたるパターンです。

だから、事前にファイルの場所を教えておく必要があったんですね。

「え、コンピューターなんだから、最初から全部覚えといてよ……」と思ったあなた

画像
あなたの様子
画像
あなた2
画像
あなた3
画像
あなた4

そんなことを言われると、コンピューターは
「まだ とちゅう だよ あつい あついよ」となってしまいます

画像
コンピューターの様子
画像
コンピューター2
画像
コンピューター3
画像
コンピューター4

コンピューターのためにも、環境変数は編集してあげましょう。

画像

僕はyt-dlpを環境変数に追加して、いつでも動画を保存できるようにしています。エクスプローラーのファイルパス示してる上のバーにyt-dlp https://なんたら〜〜って入れると、表示してるフォルダに動画を保存してくれるので、素材集めとかで便利になります

あと環境変数編集した後は絶対再起動しないと反映されないので気をつけてください



最後に目次置いてみた


画像
あの時動画を保存していれば…
うさぎさんは自らを責め続けます
しだいにうさぎさんは音MAD保存と時間の浪費に溺れるようになっていき…
気がついた時うさぎさんはひとりぼっちになっていました

おしまい



いいなと思ったら応援しよう!

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
自動うあわああああああああああああああああああjadljaalnlnsmfjncanjmklsjgfm|lv6
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1