10月 132017
 

(2017/11/20 「参照としてのスライス」節を追加、Span構造体について言及)

スライス(slice)とは、列(sequence)から部分列(subsequence)を取り出す操作のことを呼ぶもの、とここでは定義しておきます。

スライスは色んな言語に実装されている機能で、特に文字列(string)から部分文字列(substring)を得る機能を実装している言語は多いでしょう。文字列に限定しないときスライスという言葉が用いられている気がします。どこ由来なのか知らないため定義もわかりません。

C#にもそれっぽい機能はありますが、ちょっと使いにくいので、Pythonのスライスに近い機能を実装してみます。

Continue reading »

10月 032017
 

(2017/10/08 機能拡張版を書きました)

Pythonスクリプトによってプレイリストファイル(m3u/m3u8)を自動生成する話です。自分がすぐに使えるよう、Pythonと正規表現でサクッと作りましたが、そういった技術的要素が理解できないと利用は厳しいことは先に言っておきます。

Continue reading »

9月 042017
 

C#の書式指定文字列の仕様はC#独自のものであるため、色んな言語を経験していると混乱します。そして、覚えられません。多機能かもしれませんが、かえって使いにくくなっています(※個人の感想です)。

C#自体は好きな言語なのですが、数少ない気に入らない点のひとつがこのフォーマット仕様です。

例えば、

  • 10進整数を表示
  • 正の符号も表示
  • 数値は9桁(符号含め10文字)
  • ゼロパディング(ゼロ埋め)する
  • 3桁ごとにカンマ区切り

この書式をC#で実装してみます。

var format = "{0:+0,00000000;-0,00000000}";
var result1 = string.Format(format, 0);
var result2 = string.Format(format, 1280);
var result3 = string.Format(format, -1280);

ゼロパディングするだけならd9のようにd(10進数)書式を採用すればいいのですが、これはテンプレ書式であって、正の数値に対して符号を出すためにカスタム数値書式を採用すると使えなくなります。このように書式が複数のルールから成り立ち、複雑です。記述も長くなりがち。

ドキュメントがもうね、膨大すぎて読む気が起きないですよ・・・。

やりたい内容からググって逆引き的に情報探したほうが実装が早いという始末。

ちなみに、さっきの例をPythonで書くとこうなります。

format = "{:+010,}"
result1 = format.format(0)
result1 = format.format(1280)
result1 = format.format(-1280)

各条件に対応する記述が最小限ですし、記述する順序もあまり混乱しないと思います。

ドキュメントもすっきり。

Pythonの場合、波括弧で囲んだ中に書式を書くという点ではC#に似ていますが、細かい書式オプションについては、C言語のprintf()ベースになります。

C言語がとても古い言語であるということもあり、その書式が理想的かと問われれば首を傾げますが、たくさんの言語に取り入れられた実績のある仕様です。従って、ある程度共通化された文化であると言えます。しかし、この知識がC#で使えないし、C#の独自仕様は遥かに仰々しい。つらい。

どうしても多機能を実現したいなら、独自フォーマッタをクラスで定義できるようにすれば、それで十分だと思うんですよね。

基本機能はわかりやすくシンプルに。プログラミングの鉄則だと思います。

2月 112017
 

普段Windowsを使っていて、隠しファイルは表示しているんですが、システムファイルは非表示にしてました。

そのせいで、Windows Media Playerが曲に埋め込まれているアルバムアートを、勝手に抜き出して同じディレクトリにシステムファイルとして縮小版を保存する、という挙動を勝手にしていることを見落としていました。

  • AlbumArtSmall.jpg
  • Folder.jpg

上記の2ファイルがシステムファイル属性で保存されます。こういう汚いファイルの散らかし方はいかにもMSだなぁ。

私はアルバムアートをfolder.jpgとして保存することがあって、それで上記ファイルと衝突して気が付きました(Windowsのファイルシステムではアルファベットの大小を区別しません)。

そんな感じで実際に不都合が生じているので、対処します。

Continue reading »

7月 042013
 

(2017/11/05追記)事情が古くなってきたので、「ゲーム動画のエンコード事情を整理」も参照してください。
(2015/12/21追記)VBScriptコードのAUCパス設定を修正、OneDriveでスクリプト公開。
(2014/08/17追記)VBScriptコードの比較ミスを修正。

AviUtlという有名なフリーソフトがあります。これは単体では動画のカットやフィルタなど簡単な編集ができますが、各種プラグインを導入することで対応フォーマットが増えたり、動画編集機能が大幅に強化されたり・・・とフリーソフトにしてはかなり優秀で、私もエクストルーパーズの動画をニコニコやYouTubeに投稿する際に利用させてもらいました。「拡張編集」プラグインで編集し、「拡張 x264 出力(GUI) Ex」プラグインで.mp4出力しています。編集と.mp4出力がこのソフト1本で完結するのですごくありがたい(もちろん必要な環境を準備すればの話)。

まあ、今回は動画編集じゃなくて、単にエンコードするだけの話なんですが。

HDキャプボ買ってから、エクストルーパーズの対戦動画をよく撮るようになったんですが、これがたまるたまる・・・。録画ファイルは.aviなのですが、そのままだと非常に重いので、.mp4にしないとすぐにHDDがパンパンになってしまいます。今まで、自分でファイル名を入力して、ひとつずつバッチ登録して、バッチ出力で寝てる間に一括してエンコードしてました。が、このバッチ登録は手で行う必要があったため、それがめんどくさくて後回しにしてると、動画がたまるたまる・・・。

で、自動化できないの!?というのが本題。

ここで紹介するスクリプトはOneDrive上に配置したので、下記からダウンロードして下さい。

Continue reading »

Top