無機野

ここはお前の日記帳

バッチファイルつくってffmpegの処理をD&Dで一括処理するみたいな

環境:win10

動機:複数のhoge.wavをhoge.m4aに変換したい
その場合コマンドラインで指定するよりバッチファイル作っておいて複数選択したwavファイルをドラッグアンドドロップしたほうが楽っぽい

手段:

@echo off
for %%a in (%*) do (
ffmpeg -i %%a -b:a 128k %%a.m4a
)

をメモ帳とかで保存して拡張子を.batにしてそのバッチファイルを目的のファイルのあるフォルダに移してD&D

結論:コマンドプロンプトのfor構文よくわからなくて、変数は %%[任意の文字] のように指定するらしい
そんで-b:a 128k は固定ビットレート128kbpsの指定 このへんは適当
あとこの書き方だと最終的に生成されるファイル名がhoge.wav.m4aになってもんにょりするけどこの中途半端なwavの削り方はよくわからんかった
というかもう目的のブツは完成しているので体裁整えるために試行錯誤する労力と見合ってないというか

余談:少し前のffmpegのデフォのaacエンコーダは評価散々だったらしいけど最近はそうでもないらしい よくわからん

intel hd graphicsのドライバの更新した

vivaldiでyoutubeなどの動画を再生するときに緑に暗転する問題があり、(おそらくchromium系のブラウザ全体の問題ではあるが)、hd gtraphicsのバグか相性問題かわからないがとりあえず試みとしてドライバの更新くらいはしとこうというのがそもそもの動機

intel製品のドライバを更新したい時、インテル® Driver & Support Assistantを使うのが一応正規ルートっぽく、インストールしてみたはいいもののエラーが発生してインストールできない
(スクショとるの忘れた)

ので個別でドライバ更新の実行ファイルDLしてきてインストールを試みるもそれもできない、こんなかんじ↓
f:id:moppii:20181203050430p:plain

ググってみたところ実行ファイル内のinfファイルを個別でアレすればアレできる的なアレが見られたのでやってみる
ここから実行ファイルをDL、その実行ファイルを7zipなどで実行せず解凍しておく
バイスマネージャー開いて件のドライバの更新を選択し、[ドライバをオンラインで検索]と[コンピュータを参照してドライバーソフトウェアを検索]の二択なので後者選んで解凍しておいたフォルダを指定したら正常にインストール成功

今の所動画再生して暗転はしてない
余談だけどhd graphicsはもちろんバリバリにゲームを動かせるような製品ではないがそれでも個別ゲームへの最適化みたいなことをしてくれていて、そのためにゲームする人ならドライバの更新はこまめにチェックしておいたほうが良い
俺はゲームしないからどれくらい改善するものなのかよく知らないけど
例えば今回インストールしたバージョンでは以下のゲームがサポートされている
フォールアウト 4*
ファークライ 5*
FIFA ワールドカップ 18*
Paladins*
流浪の道*
シムズ 4*
強打*
国境地帯 2*
ユーロトラックシミュレータ 2*
PLAYERUNKNOWN の戦場*
ロケットリーグ*
ウィッチャー 3*
ところでインテル公式なのに文章が英語を機械翻訳しましたみたいな日本語で不穏

buffalo ramdiskユーティリティに気をつけろ

結論:win10ではbuffalo ramdiskユーティリティを使わないように
buffalo.jp

まだwin10の出てない頃、つまりまだHDDが主流だった頃にブラウザの実行環境をRAM領域に移すと爆速になるぞみたいなブームが一時期あって、久しぶりにそれをやろうとしたらえれー目にあったという話

RAM領域に移すには当然ドライブ割り振らないといけなくて、そのためのソフトのひとつが上記のbuffaloのやつなんだけど、俺の環境(lenovoのmiix720 win10)でそれをやろうとインストールして再起動したら死んで、UEFI経由で自動修復も復元ポイントも実行するも効かなくて、結局セーフモードで入って該当ソフトアンイストールしたら戻ってこれた
以前別環境で普通に使えてた記憶を頼りに下調べせず適当にやったのが敗因
教訓→ググろう

おわり

追記:QILING disk master freeなら使えた

ソローモデルの各パラメーターをいじった時にどうなるか的なやつ

労働節約的なコブダグラス型生産関数:F(K,AL)=(K^a) * (AL)^(1-a)
資本蓄積式は⊿K=sY-δK
政府や海外は存在しない
プログラミングでは微分を扱えない(ことはないだろうけど簡単のため)差分を扱うことに注意すると

# -*- coding: utf-8 -*-
    
import numpy as np
import matplotlib.pyplot as plt

time = 100 #何期までやるか

Y = np.zeros(time) #空き配列の作成
K = np.zeros(time)
L = np.zeros(time)
A = np.zeros(time)
y = np.zeros(time)
k = np.zeros(time)

K[0] = 10 #初期の水準
A[0] = 5
L[0] = 10

a = 0.5 #コブダグラス型生産関数の資本分配率
d = 0.2 #資本減耗率。減価償却率と読み替えても良いかもしれない
s = 0.2 #貯蓄率
g = 0.02 #技術進歩率
n = 0.02 #人口成長率

for t in range(time-1):
    Y[t] = (K[t]**a)*((A[t]*L[t])**(1-a)) #コブダグラス型生産関数
    K[t+1] = s*Y[t] + (1-d)*K[t] #資本蓄積式
    A[t+1] = (1+g)*A[t] #技術進歩
    L[t+1] = (1+n)*L[t] #人口成長
    y[t] = Y[t] / (A[t]*L[t]) #効率労働あたりGDP
    k[t] = K[t] / (A[t]*L[t]) #効率労働あたり資本

plt.subplot(2,2,1) #(縦分割数、横分割数、ポジション)
plt.plot(y,"red")
plt.plot(k,"green")

plt.subplot(2,2,2)
plt.plot(Y,"red")
plt.plot(K,"green")

plt.subplot(2,2,3)
plt.plot(A,"red")
plt.plot(L,"blue")

f:id:moppii:20181023204109p:plain

左上のグラフは効率労働あたりのGDPと資本、右上のグラフは経済全体のGDPと資本
人口成長と技術進歩の天井がないa_{t+1} = (1+n)a_t
ので当然の帰結として経済全体も際限なく成長していく
ただ効率労働あたりの数字は早い段階(25期目あたり)で収束しているのが分かる
このパラメータをいじってみる

定常状態では⊿k=0のため、k*とy*は(生産関数と資本蓄積式を連立して)
 \displaystyle k^*={s/(n+g+δ)}^{1/(1-a)}
 \displaystyle y^*={s/(n+g+δ)}^{a/(1-a)}
と解ける
見て分かる通り、sの上昇、またはnとgとδの減少はkとyの上昇につながる
逆も然り
これを見てみる

# -*- coding: utf-8 -*-
    
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as ani

time = 100 #何期までやるか

Y = np.zeros(time) #空き配列の作成
K = np.zeros(time)
L = np.zeros(time)
A = np.zeros(time)
y = np.zeros(time)
k = np.zeros(time)

K[0] = 10 #初期の水準
A[0] = 5
L[0] = 10

a = 0.5 #コブダグラス型生産関数の資本分配率
d = 0.1 #資本減耗率。(財が1つしかないので)減価償却率と読み替えても良い
s = 0.1 #貯蓄率
g = 0.01 #技術進歩率
n = 0.01 #人口成長率

def solow(a,d,s,g,n):
    for t in range(time-1):
        Y[t] = (K[t]**a)*((A[t]*L[t])**(1-a)) #コブダグラス型生産関数
        K[t+1] = s*Y[t] + (1-d)*K[t] #資本蓄積式
        A[t+1] = (1+g)*A[t] #技術進歩
        L[t+1] = (1+n)*L[t] #人口成長
        y[t] = Y[t] / (A[t]*L[t]) #効率労働あたりGDP
        k[t] = K[t] / (A[t]*L[t]) #効率労働あたり資本

fig = plt.figure()
imgset = []

for i in range(10):
    new = s + i/10
    solow(a,d,new,g,n)
    imgk, = plt.plot(k,color="red") #変数のあとに,つけること
    imgy, = plt.plot(y,color="blue")
    imgset.append([imgk,imgy])
    
animation = ani.ArtistAnimation(fig,imgset)
plt.show()
animation.save("solow_s_yk.mp4", writer="ffmpeg")
#animation.save("solow_s_yk.gif", writer="imagemagick")

gifで保存するなら要imagemagick、mp4で保存するなら要ffmpeg
vimeo.com
↑こんなかんじ、sの上昇とともに効率労働あたりのGDPと資本が底上げされてるのがわかる
vimeo.com
↑こちらはsの上昇による経済全体への影響
以下同様に他のパラメータも動かしてみる

for i in range(10):
    new = d + i/50 #資本減耗率0.1から0.02刻み
    solow(a,new,s,g,n)
    imgk, = plt.plot(k,color="red")
    imgy, = plt.plot(y,color="blue")
    imgset.append([imgk,imgy])
animation = ani.ArtistAnimation(fig,imgset)
plt.show()
animation.save("solow_d_yk.mp4", writer="ffmpeg")
#animation.save("solow_s_yk.gif", writer="imagemagick")

vimeo.com
↑資本減耗率を0.1から0.02刻みで増やしていった場合のyとk
減耗率が高いと資本が減耗(減少)していく様が見て取れる
vimeo.com
↑経済全体でも同様

for i in range(30):
    new = n + i/1000
    solow(a,d,s,g,new)
    imgk, = plt.plot(Y,color="red")
    imgy, = plt.plot(K,color="blue")
    imgset.append([imgk,imgy])
animation = ani.ArtistAnimation(fig,imgset)
plt.show()
animation.save("solow_n_yk.mp4", writer="ffmpeg")

↑人口成長率を0.01から0.001刻みで0.04まで(人口が成長していくのではなく人口成長率そのものが変化していることに注意)
vimeo.com
↑経済全体では急激に(指数的に)成長しているのがわかる、が
↓効率労働単位では逆に減少している(効率労働あたりのGDP資本の成長率<人口成長率 なので)
もちろん人口成長率は技術進歩率に読み替えても同じ
vimeo.com

ところでspyderだとmatplotlib.animationがデフォで動かないので以下参照
python - Animation from matplotlib not working in spyder - Stack Overflow

youtube-dlでDL済み動画を回避しつつ動画を音声データにするっていうやつを自動実行するやつ

環境:win10

最近流行ってるVtuberというジャンルをよく見ている オタクなので
で、これがけっこうお歌うまうま勢が多い
オフライン環境でも快適に聴きたい、できれば面倒くしたくない、そんなtips

諸々の導入

pythonのインストール
おすすめはanacondaだけどyoutube-dlしか使わないのなら単体で適当にアレすればよいのではないでしょうか
macだとデフォで入ってたはず

youtube-dlのインストール
cmd開いてpip install youtube-dl
だと思うたぶん

ffmpegのインストール
これないと動画から音声を剥がせない たぶん
パス通ってるとこに置いとけばいいのかな よく分からん

atomic parslayのインストール
DLした音声にサムネとかタグとかいじるのに必要
使わないなら要らん
chocolatey使ってるならcinst atomicparsley

youtube-dlを使ってみる

ドス窓開いてyoutube-dl url
で大体の動画サイトはいける
もちろんurlはプレイリストでも可

youtube-dl -i -x url
で音声のみ剥がせる
iはエラー無視するおまじない
ただこのままだとopusまたはoggファイルが出力される

音質を考える

ただ動画を音声にするだけだと変換時の音質が気になる
まあyoutubeにアップされてる時点ですべて圧縮されてるのであまり拘っても仕方ないが…ベストはつくしたい所
例として以下の動画を考える
www.youtube.com
右クリックから統計情報を見ると
f:id:moppii:20180921011809p:plain
opus(251)というフォーマットであることが分かる
Youtubeで動画に使用されているコーデック(映像・音声それぞれ)の判別をする方法 - Yuichiro_S の Twitterでは文字数が足りないもの
を参考にするとopusの160kbpsらしい opusのことよく知らんけど携帯機で聴くには妥当な圧縮率だと思う
ただopusやoggスマホでは再生しづらいのですべてaacに変換してしまう

youtube-dl -f bestaudio https://www.youtube.com/watch?v=ZtTQ_pI-cCw
でDLすると映像なしのwebmがDLされる
mediainfoで確認するとやはり音声はopusであったがなぜかビットレートは表示されない
ファイルが237秒 3857KBなので3857*8/237≒130で128kbpsくらい?アレ?160kbpsじゃないのおかしくね?

まあいいや…結局aacにするので拡張子を指定すると
youtube-dl -f bestaudio[ext=m4a] https://www.youtube.com/watch?v=ZtTQ_pI-cCw
でDLされるファイルを確認すると126kbpsとなる
ファイルサイズは3.72MB
変な変換してファイルサイズが無駄にでかくなるとかもないのでこれで妥当っぽい

サムネとタグを付ける

youtube-dl -f bestaudio[ext=m4a] --embed-thumbnail --add-metadata "url"
これでサムネとタグが仕込まれる
先述の通りatomic parsleyとかいうよくわからんアレが入ってないとエラーが出るので注意

DL済み動画を回避する

youtube-dl --download-archive ほげほげ.txt "url"
というオプションでほげほげ.txtに保存済み動画がリストされる
つまり毎回同じプレイリストを指定しても保存済みは回避してDLできる
というわけで
youtube-dl --download-archive ほげほげ.txt -f bestaudio[ext=m4a] --embed-thumbnail --add-metadata "DLしたいプレイリストのurl"
あたりが妥当ではないでしょうか
リストを開くと
動画サイト 動画ID
みたいな感じで羅列されていく
例:
f:id:moppii:20180921032039p:plain

DLするプレイリストをまとめる

毎回URLを指定するのはクソ面倒なのでリストにまとめておきましょう
youtube-dl -a ふがふが.txt
でtxt内のurlが一度にDLされます
つまり追ってるチャンネルの再生リストのURLをテキストファイルにまとめてパス通ってるとこに置いておいてこのコマンド指定すればOK
youtube-dl -i --download-archive ほげほげ.txt -f bestaudio[ext=m4a] --embed-thumbnail --add-metadata -a ふがふが.txt
たまに何故かDLできない動画があるので-iは入れといたほうがいい

batファイルに書いておく

notepad開いて
youtube-dl -i --download-archive ほげほげ.txt -f bestaudio[ext=m4a] --embed-thumbnail --add-metadata -a ふがふが.txt
保存して拡張子を.batにすればクリックひとつで実行される
必要なら最初の行でディレクトリを変更しておく

まとめ

ふがふが.txtにDLしたいプレイリストのurlを羅列しておく
それをcmdを実行する場所に置いておく
cd 適当なディレクト
youtube-dl -i --download-archive ほげほげ.txt -f bestaudio[ext=m4a] --embed-thumbnail --add-metadata -a ふがふが.txt
をbatファイルにしておいて定期的に実行する

これでDLできない動画は知らん

追記:
youtube-dl最新版使ってもDLできないやつあったので以下参考に修正版のアレをpipでアレしたらDLできるようになった
https://github.com/rg3/youtube-dl/issues/17457
個別にインストールしなくても最新版に反映されてるはずじゃ・・・?よくわかんね

麻雀のルール改良案

現行のルールはあまりにも複雑すぎる
麻雀が普及していく中でルールを統一する機会を逃した結果論理的な合理性もなくゲームの面白さに寄与しない歴史的な経緯だけ残った


現行の問題点(とおれが感じていること)
・初学者に対して不親切
覚えることがあまりにも多すぎる

・そもそも整合性がないルールが残っている
ちょっと違うけどブラックジャックのインシュランスとか通常のルールではまず使わないじゃんみたいなやつ
明槓をする局面があまりにも限られすぎる
あと符計算とか

・複雑さがゲームとしての深みに寄与していない
複雑さはゲームとしての深みの必要条件ではない

・運の要素が強すぎる
運と技術の適切な塩梅から明らかに逸脱している
実力を見るのに最低1000半荘は必要など正気ではない


改良案
・点数計算の簡素化
符計算を廃止して子100020004000800親15003000600012000に統一
ピンフ七対子のすり合わせが必要かもしれない

・役の調整
正直ここはあまり弄りたくない
飜数の調整、いくつかのローカル役の追加、
カンは明槓暗槓問わず1ハン、即ノリ(廃止する符計算とのすり合わせ)

・リーチ後放銃のツモ扱い
リーチ後放銃が大きすぎる運要素の要因と思われる
ツモ扱いとすることで実力ウェイトを上げる
牌がすべて見えている、手で使い切っている等の目無しリーチも許可
ノーテンリーチの罰則の強化(放銃時の支払い増額等)
このままだとリーチが強すぎるので一発裏無し、そもそも一発裏も強すぎる運要素

・赤アリ、アリアリ
現代的なスピード麻雀に対応する
まあこのへんは好みの問題でもある

・食い変えアリ、リーチ後のカン常にアリ
ここらへんは初学者にとって余計に覚えないといけないルールなのでいっそのこと廃止する
そもそもルールを把握するのにスジの理解が必要なのは不親切
また技術介入の余地も上がる

・牌の誤倒の罰則化
誤倒の度に各プレイヤーに1000点ずつ支払いなど
ただこの辺は牌を見るまたは見せるコストになりかねないので難しい

・競技での対局時計の導入


ここらへんがいい塩梅か
ゲームに参加するために最低限身に着けないといけない知識を減らし、必須ではないもののゲームに勝利するために考慮すべき思考を増やす方向がいい
シンプルなルールはゲームの奥行きと相反しない、例としてどうぶつタワーバトル

ポーカーくらい役がシンプルだと一番いいけどあれは手が5枚のみだからできること
麻雀もいっそのこと手を減らすことも考えられる(すずめ雀など)けど既存のルールと乖離しすぎる

Mリーグのルールはまだ発表されてなかったと思うけどあれはどんなルール採用するんだろうね

ノートPC激アツ問題

lenovoのmiix720使ってるけどi7なのでかなり熱い、夏場だし
バッテリー設定からCPUのパフォーマンス66%とかにしたら熱いのは収まってぬるいくらいになったしバッテリーも倍くらい保つようになったし最高や
i7なんていらんかったんや

追記:win10デフォでオンになってるっぽいゲーム録画うんたらかんたらみたいなやつコンパネから切るだけで相当よくなった
ゲームしようがしてまいがいつ何時巻き戻って画面キャプチャできるように常時録画してるっぽい?
cpu自体はつよつよなので別に負荷がかかってるわけではないけどとにかく発熱がやばい
特に使う機能でもないので切ると吉