Hatena::Groupnicovideo

にわかな奴の砂場

    使えそうなものがあれば適当にどうぞ。(自己責任的な意味で) 過去ログ

2007-09-29

[][] 小節とか拍をフレーム・サンプルの位置と対応付けるスクリプト 02:17  小節とか拍をフレーム・サンプルの位置と対応付けるスクリプト - にわかな奴の砂場 を含むブックマーク はてなブックマーク -  小節とか拍をフレーム・サンプルの位置と対応付けるスクリプト - にわかな奴の砂場

これは何?

音や動画を編集してると「あの小節の先頭って何フレーム目だっけ?」とか「サビのとこだけ抜いてループさせたいんだけどキレイに切れないなあ……」なんて思った事があった訳でして、そういう時に自分用に書いてみたものです。

……なんですが、動画については先駆者がいらっしゃいます。ので僭越ながら御紹介。

考え方

bpmと言うのは1分当たりの拍数なので、1拍の長さは1分をbpmで割ったものです。bpmが180なら1拍の長さは約0.333秒となります。また動画や音声は1秒当たり何サンプル(サンプリングレートとか言う)、という記録のされ方なので、60倍すれば1分分になります。30fpsの動画なら1分で1800サンプルになります。

1分=1800サンプルと表せると言う事は、1拍当たりのサンプル数は「サンプリングレート×60÷bpm」と言う事になりまして、この「1拍当たりのサンプル数」を足していけば、拍や小節の切れ目が何サンプル目なのか判りやすいんじゃね? と言うのが元にあります。

曲シンクロ的な意味も含めて、以下が大変参考になります。とりあえず読むべき。

使用上の注意

  • 御利用は自己責任でお願いします。改造は御自由に。転載は引用元を明記の上。笑
  • 1拍の長さはActivePerlが返してくるものをそのまま突っ込んでるので誤差は無視できる程度には小さくなってると思いますが、長尺(5分以上)のものでは試した事が無いので判りません。
  • 同期が取れなくても泣かない。

出力サンプル

左から順に、小節番号,小節開始時刻.サンプル,各拍開始サンプルです。

1小節の長さは「或る小節開始サンプル」から「次の小節開始サンプル-1」です。

C:hide$ana.pl -b 170 -c -r 30 -m 10 -t 8/8
tempo = 8/8
bpm = 340
sampling rate = 30
offset = 0
samples/beat = 5.29411764705882
samples/bar = 42.3529411764706

1       0:00.00         0:00.00 0:00.05 0:00.10 0:00.15 0:00.21 0:00.26 0:01.01 0:01.07
2       0:01.12         0:01.12 0:01.17 0:01.22 0:01.28 0:02.03 0:02.08 0:02.14 0:02.19
3       0:02.24         0:02.24 0:03.00 0:03.05 0:03.10 0:03.15 0:03.21 0:03.26 0:04.01
4       0:04.07         0:04.07 0:04.12 0:04.17 0:04.22 0:04.28 0:05.03 0:05.08 0:05.14
5       0:05.19         0:05.19 0:05.24 0:05.29 0:06.05 0:06.10 0:06.15 0:06.21 0:06.26
6       0:07.01         0:07.01 0:07.07 0:07.12 0:07.17 0:07.22 0:07.28 0:08.03 0:08.08
7       0:08.14         0:08.14 0:08.19 0:08.24 0:08.29 0:09.05 0:09.10 0:09.15 0:09.21
8       0:09.26         0:09.26 0:10.01 0:10.07 0:10.12 0:10.17 0:10.22 0:10.28 0:11.03
9       0:11.08         0:11.08 0:11.14 0:11.19 0:11.24 0:12.00 0:12.05 0:12.10 0:12.15
10      0:12.21         0:12.21 0:12.26 0:13.01 0:13.07 0:13.12 0:13.17 0:13.22 0:13.28

使い方(コマンド的な意味で

まずPerlの実行環境が必要です。適当にインストールしてください。

次に下のソースを適当に保存してCLI(Windowsならcmd.exeとか)で実行してください。オプションは以下があります。「数字」とある所に入れる数字は全て半角で。

-b 数字
bpmを指定します(少数可)。デフォルトは120。
-c
時間.余りサンプル で表示します。
-l 数字
サンプル数表示部の文字数を指定します。元々表示が崩れるのを嫌って付けたものでしたが、無駄機能化しています。デフォルトは15。
-m 数字
表示する最大小節行数を指定します。デフォルトは20。
-o 数字
開始オフセットサンプル数を指定します。デフォルトは0。
-r 数字
サンプリングレートを指定します(少数可)。デフォルトは44100。
-t m/n
曲のテンポを3/4のように、m/n形式で指定します。7/8とか13/16とかも処理できますが、あまり検証していません。デフォルトは4/4。

使い方(実践的な意味で

そのうち書く。

想定問答集

Excelとかで読める?
タブ区切りテキストとして読み込めばOKかもしれません。
何かずれてるんだけど?
オフセット指定か、或いはbpmが誤っています。執念で何とかしてください。
GUI無いの?
俺需要が無いのでありません。作る予定もありません(;´Д`)
shbang変じゃね?
ドザだから。

ソース

長いので折ります。へぼPerlerなので色々とボロいので注意。

続きを読む

[] やよい特集 02:17  やよい特集 - にわかな奴の砂場 を含むブックマーク はてなブックマーク -  やよい特集 - にわかな奴の砂場

拙作を取り上げて頂いてしまいました。ありがとうございます(_o_)

って言うか周り凄すぎて俺涙目なんですけどorz 精進します……

やよいと言えば 02:17 やよいと言えば - にわかな奴の砂場 を含むブックマーク はてなブックマーク - やよいと言えば - にわかな奴の砂場

昨日近所のやよい軒で晩飯食ってたんですが、店内BGMで『G線上のアリア』が流れてたんですよ。

ただ直ぐに曲名出てこなくて「あれ何だっけこの曲……」なんて思ってたんですが、何か閃いたわけですよ。

アイドルマスター Rori Classic (?G線上の紳士?) by カワイソ(´・ω・) ス -ニコニコ動画』が。

……俺ももうダメだと思った。

[] NicoCacheについて 02:17  NicoCacheについて - にわかな奴の砂場 を含むブックマーク はてなブックマーク -  NicoCacheについて - にわかな奴の砂場

2007-09-27

[][] 合わせたい曲のbpmからアイマスPVの再生速度を何%にしたらいいか表示するスクリプト 22:41  合わせたい曲のbpmからアイマスPVの再生速度を何%にしたらいいか表示するスクリプト - にわかな奴の砂場 を含むブックマーク はてなブックマーク -  合わせたい曲のbpmからアイマスPVの再生速度を何%にしたらいいか表示するスクリプト - にわかな奴の砂場

これは何?

表題の通り。いちいち計算するのがダルいので自分用に何となく書きました。とりあえず小数第三位まで表示。

アイマス曲のbpmは「無料ホームページ 無料レンタルサーバー land.to」を利用させて頂きました。多謝。

実行結果

22:22:18 C:hide$bpm.pl 170
bpm = 170
9:02 p.m.       :       250%
First Stage     :       115.646%
GO MY WAY!!     :       94.444%
Here we go!!    :       114.093%
My Best Friend  :       108.28%
THE iDOLM@STER  :       103.03%
relations       :       119.718%
おはよう!!朝ご飯:       111.842%
まっすぐ        :       139.344%
エージェント夜を往く:   95.505%
ポジティブ!    :       123.188%
太陽のジェラシー:       132.812%
思い出をありがとう:     127.819%
私はアイドル☆  :       101.19%
蒼い鳥          :       161.904%
魔法をかけて!   :       113.333%

ソース

#!C:/perl/bin/perl
use encoding 'shift-jis';
use strict;
use warnings;
my $bpm = shift || 120;
my %songs = (
	'THE iDOLM@STER  ' => 165,
	'太陽のジェラシー' => 128,
	'蒼い鳥          ' => 105,
	'First Stage     ' => 147,
	'おはよう!!朝ご飯' => 152,
	'魔法をかけて!   ' => 150,
	'9:02 p.m.       ' =>  68,
	'Here we go!!    ' => 149,
	'エージェント夜を往く' => 178,
	'ポジティブ!    ' => 138,
	'relations       ' => 142,
	'私はアイドル☆  ' => 168,
	'思い出をありがとう' => 133,
	'My Best Friend  ' => 157,
	'GO MY WAY!!     ' => 180,
	'まっすぐ        ' => 122,
);
print "bpm = $bpm\n";
foreach (sort keys %songs) {
	my $p = int(($bpm / $songs{$_}) * 100000) / 1000;
	print "$_:\t$p%\n";
}
__END__

そういえば 22:41 そういえば - にわかな奴の砂場 を含むブックマーク はてなブックマーク - そういえば - にわかな奴の砂場

先日ちょろっと呟いてみたNicoCacheが超旬ツールで紹介されてた。

余りにも解説が的確過ぎて噴いた。テストユーザやらせてもらってたんで何か書こうかとか思ったりしたけれど必要ないな……笑。

2007-09-25で、作ってるの?

……が、がんばるの!(爆

[][] HDDレコーダで録画→素材化 00:12  HDDレコーダで録画→素材化 - にわかな奴の砂場 を含むブックマーク はてなブックマーク -  HDDレコーダで録画→素材化 - にわかな奴の砂場

はじめに

HDDレコーダで録画した動画をPC上に取り込んで素材化するまでの流れです。

何でHDDレコーダを使ってるのかと言うと「既にあったから」。他の理由はありません。

あと飽くまで自分の場合です。参考になるのかどうかは謎。

使用機器

HDDレコーダで録画してDVD-RAMへ移す

箱とDIGAとをS映像ケーブルで接続して録画する。

箱の画面設定で「ワイドスクリーン」を指定。

DIGAの設定としては以下。画質優先。

  • 3次元Y/C」は「入」
  • 「記録音声モード」は「Dolby Digital」(いわゆるAC3)
  • 「録画モード」は「XP」(最高画質)

DVD-R高速ダビングモードとか設定変えてもあんまり変わらなかった。とりあえずXPのAC3で映像が容量使えるようにしておけばOKな雰囲気。ちなみに設定をいじっても30(29.97)fpsでしか録画できませんので、録る度に取得フレームが異なったりします。ちょっとだけ嫌かも。

で、録ったら適当にタイトル付けてDVD-RAMへダビング(タイトルを付けないとTMEで上手く認識できないようなので)。

DVD-VRのデータをMPEGファイルへ変換

DVD-RAMにダビングした動画をTMEを使ってPCへ取り込む。フリーソフトでもできるようなのだけれど、何かと面倒そう&TMEの変換速度が相当速いって事で、体験版使用後に購入した。

MPEG出力設定
  • 「出力モード」は「クリップ毎に出力」
  • 「出力ターゲット」は「一般的なMPEGファイル」
映像設定
音声設定

AviUtlでMPEG(MPEG2)→AVI(huffyuv)化

DirectShow File Reader プラグインffdshowでAviUtlにMPEGを食わせて、色々処理してAVIで出す。

ffdshowでは、

  • 「コーデック」の「MPEG2」を「libmpeg2」にする。

だけ。ポストプロセッシングを掛けたらかなりハイコントラストな焦げたような色になってしまったので、無効にしている(設定の問題;´Д`)。

AviUtlでは、

  • インターレース解除」は「自動」の「トップ→ボトム」
  • ノイズ除去フィルタ」を掛ける。「強さ=256,範囲=1,しきい値=30」
  • ノイズ除去(時間軸)フィルタ」を掛ける。「強さ=256,範囲=2,しきい値=40」
  • シャープフィルタ」を掛ける。「強さ=127,範囲=3,下限値=48,上限値=128」
  • 「Lanczos3拡大縮小(非SIMD)」で大体16:9になるようにリサイズ。私的にはXviD4PSPに突っ込んでもリサイズされない704x400にしている。
  • 「AVI出力」で、音声無しでHuffyuv(fastest)で出力。

フィルタ順位は上記の順通り。結構硬めの画質です。

とりあえずこれで終了

とりあえず原寸大のサンプルを載せておいたりしてみます。→

まあそんな訳で、ニコニコで高画質と言われてもソースレベルではどうって事は無いと言う事がお判り頂けたかと思います。(爆

エンコードについては……まあそのうちに(;´Д`)

そう言えば 00:12 そう言えば - にわかな奴の砂場 を含むブックマーク はてなブックマーク - そう言えば - にわかな奴の砂場

知人が「sm番号_ページタイトル.flv」ってな感じで無制限に自動キャッシュするローカルプロキシとか作ってるけど、こういうのって需要とかあるのかなあ……?

……とか言ってたら本人が公開してたwww

2007-09-238x8でも辛い

[] また下らんものを作ってしまった…… 03:34  また下らんものを作ってしまった…… - にわかな奴の砂場 を含むブックマーク はてなブックマーク -  また下らんものを作ってしまった…… - にわかな奴の砂場

AviSynthで遊ぶのも良いが早くMADを作成する仕事に戻るんだ。

256分割 フレーム長ランダムトリム

2007-09-21初っ端から

いきなり言った通りになってない訳ですが(爆 大丈夫かこれ。

[][] コミュの背景飛ばし 04:43  コミュの背景飛ばし - にわかな奴の砂場 を含むブックマーク はてなブックマーク -  コミュの背景飛ばし - にわかな奴の砂場

「歌入りとカラオケの差分取ってボーカル抜きできるんなら同じような理屈でキャラ動画と背景があればキャラだけ抜けるんじゃね?」

……と思って早数日。(;´Д`)

色滲みの無い高解像度のソースだと綺麗に抜けるのかな? とりあえず上げてみるテスト。万が一試行する際はファイルパスやパラメータ変更をお忘れなく。

免責

本文の記述を元に行われた全ての作業より発生した不具合について、筆者は全ての責任を負わないものとします。

(棒読み)

はじめに

手動レタッチなしでどこまでキャラだけ取り出せるかの実験です。

AviSynthについては以下を参考に。と言うかお世話になりっぱなしです。

キャラ動画を線画化

キャラ動画(オリジナル)

・layer.avs

#!AviSynth
s=AviSource("source.avi").KillAudio()
# Lanczos4Resizeで倍拡大。ソースに無駄部分が多かったのでTrimで適当に削り
layer=s.Trim(440, 1225).Lanczos4Resize(1408, 800)
return layer

これをVirtualDubModに食わせてSmartSmootherHQ*1を掛ける。「Check Greyscale」と「Visualize Blur」をチェック(重要)。他パラはプレビューを観ながら決める。この場合「Diameter」が主線の硬さで「Threshold」が主線の閾値になります。変な使い方してるのでこんな風に憶えてはいけません(;´Д`)

で、これを「layer.avi」とかして保存するわけですが、このSSHQと言う奴は各所で書かれてる通り半端じゃなく重いです。某抜き抜き先生ならこの間に数十枚抜けるんじゃなかろうかなあと思える程に。

処理後はこんな感じ。とりあえずDiameter=5,Threshold=40くらい。

キャラ動画(線画)

背景のコマを線画化

背景(オリジナル)

・bg.avs

#!AviSynth
s=AviSource("source.avi").KillAudio()
# 背景を1フレーム抽出
bg=s.Trim(442, 442).Lanczos4Resize(1408, 800).Loop(1)
return bg

これをVirtualDubModに食わせてSmartSmootherHQを掛ける。パラはキャラ動画のと同様で。

これを「bg.avi」とかして保存。1コマなのですぐ終わります。

処理後はこんな感じ。

背景(線画)

線画化したキャラ動画と背景を合成

diff.avs

#!AviSynth
# bgは1コマしか無いのでループさせる(書き忘れてたorz)
bg=AviSource("bg.avi").KillAudio().Loop(1000)
layer=AviSource("layer.avi").KillAudio()
Overlay(bg, layer, mode="Difference")
ConvertToYUY2().ColorYUV(off_y=-127)
Invert()

まあ要するにOverlay()のDifferenceモードで合成して、排他的論理和的なものを出してると、そういう事です。Subtractモードとか、或いはOverlay()じゃなくてSubtract()を使っても面白いかも。

で、めでたくキャラの線画らしきものが抜けます。動画サンプル→

キャラ背景飛ばし

キャラの内側が線でうるさくなってますが、まあアルファチャンネル作成用なので特に気にしない方向で。

使えるのこれ?

  • 背景だけのフレームがあるのが前提。無いとできない
  • 結局アルファチャンネルは手で抜かないといけない
  • 主線の切れ目を補修しないといけない
  • とにかくSSHQが重い

という問題に目をつむれば使えるかも? 処理時間*2の割には結構微妙かも。

その他

ステージ差分でキャラ部だけ消せるんじゃね? とか……まあ無理?(爆

というか 04:53 というか - にわかな奴の砂場 を含むブックマーク はてなブックマーク - というか - にわかな奴の砂場

上記の話題って検索しても似たようなの引っ掛からなかったんだけど絶対どっかで一度はされてる筈なんだよなあ……誰でも考える事だし。既出なら申し訳ありません(;´Д`)

[] 話題のアレ 04:43  話題のアレ - にわかな奴の砂場 を含むブックマーク はてなブックマーク -  話題のアレ - にわかな奴の砂場

シャロン・アップルを連想するのはおっさんだと思ってたのだけど、意外とその手のコメントが多くてちょっとビックリ。時祭イヴは流石に……と思ったけど最近PS3で出てたのね、メガゾーン23。

しかしまあこれ、『にとりの唄』のコメントで「同人ボーカル涙目www」ってのを見たような気がするんだけど、確かにライバルとしては商業歌手よりもそっちの方かもしれないなあ。

メカ千早本格稼動

この親和性はおかしい。

*1An Overview of Codecs and Video Processing Software。正しい用法はwavelet NR

*2:実処理時間は自環境で2時間くらい

2007-09-20ここは何?

バイナリアンとしておなじみ高林哲氏の「いやな法則」の一つ

にあやかって(違)、ニコニコから動画いじりを始めたその辺の人間が思った事やら試した事を書き捨てる場所です。まあチラシの裏と。

環境 01:22 環境 - にわかな奴の砂場 を含むブックマーク はてなブックマーク - 環境 - にわかな奴の砂場

編集機(PC)

いわゆるPC。大方の構成は以下。

元々が趣味機なので半端に高スペックHDDは最近余ってたの(500GB)を増設した。

ソフトは以下。とりあえずフリーで頑張る派。っても後述のTMEは有償だけど……

静止画取扱ツールについてはこれと言ったものがなかなか……GIMPとか試行中。Image Magickなども。

ビデオコーデックについては

辺りを導入。

キャプチャ

DIGAXP(MPEG2:10Mbpsくらい)で録ったのをDVD-RAMへダビングしてPC上でTME使ってMPEGファイルへトランスコード。後にAviUtlでインターレース解除したりしてhuffyuvへ変換……と若干面倒。

レコーダ制限で29.97fpsにされたり、MPEG2の10Mbps超はDVDの規格上無理とか、色々と制限はあるけれど安定して録れるので、まあこれでいいかと言うところ。

ちなみにMonsterXとか手に入れたりしてみたけれど、現環境では動作せず。来世に期待orz

再生機(何これ)

組んだヤツをメモステに突っ込んで推敲・吟味する用。

この時に「あー何かこう……まあいっか」とか思った箇所は大抵ボロいので直さないと後悔します。マジで。「まあいっか」から「おっイイんじゃね?」程度には持って行きたいもんです……持って行きたいよなあorz

fudsukifudsuki2007/09/21 01:46はじめまして。アイマスMAD作者の人が来てくれて嬉しいです。
私も細々とMAD作ってますが、画質に関しては何も言われたことが無いので(笑)、参考にしたいです。
来世……もとい、今後の記事を楽しみにしていますね。

ch1248ch12482007/09/21 01:53ども、はじめまして。アイマスMADの考察と紹介をやっている花見川と申します。
まさか「コンピューターおばあちゃん」のひでPに来てもらえるとは思ってませんでした・・・。記事見て勉強させていただきます。

hdkINO33hdkINO332007/09/21 21:24>fudsukiさん
はじめまして。古参のMAD者相手に参考になるようなネタはほとんど無いと思いますが(;´Д`) よろしくお願いします(_o_)

>ch1248さん
はじめまして。アイマスMADの歴史メモは面白く読ませて頂きました。(と言うかニコニコ部を知ったのはあの記事が発端)
にわか者なんで大したネタも無く尽きそうですが、よろしくお願いします(_o_)