Archive for category カラオケ動画

ニコカラメーカー2でエンコード回数を増やすことなく「あわあわ字幕」を作る方法

「A・ZU・NA」ランドの動画で、今までのassを使っていた時の同じ

  1. 1パート(1色)ごとに1つ白を塗りたい色、黒を塗らない部分とした「透過連番PNG」を出力 (3人+全員の4つ出力)
  2. Avisynthで連番PNGを読み込み、ASSの時と同じ処理を実行

という方法でパート分けあわあわ字幕を作っていたのだけど

「1」をニコカラメーカー2でやるには、

  1. 表示しないパートのフォント設定をすべて透明度MAX(A:を0)にする。
  2. あわあわにしたい部分を白、それ以外の部分を黒にする
  3. 透過PNGで出力
  4. 別の色を1~3まで繰り返し

というすごい面倒な作業があって、なかなかやる気にならなかった。
(assであわあわパート分け作業はどんなにパート数があっても1パートあたり5分以内に終わっていたので、数倍時間がかかってしまう)
(ニコカラメーカー2に「フォント設定を一括非表示化」とか「指定したフォント設定ごとに、透過連番PNG出力」とか、「複数のフォント設定を一括で色設定変更」とか、「歌詞編集の1つのフォント設定を全部別のフォント設定に入れ替え」とかの機能が欲しいなと思っていたけど要望が多すぎると思ったw)

色付けはニコカラメーカー2に任せて、泡だけ全字幕に乗せちゃえばいいんじゃないかと思いつきAvisynthで1発でできるようにしたのでご紹介します。

手順
1. こんなあわあわの元画像を用意します。泡以外の部分は透過なPNGになっています。
(これは以前青ジャンOP映像を見たときに、GIMPでぽちぽち自作したもの)

泡画像のダウンロードはこちらから

2.ニコカラメーカー2で、普通に色分けする。(今回白以外の色がついている文字部分に泡をかけます)

3.ニコカラメーカー2で、「連番PNG(字幕のみを透過で)」で出力

4.以下のようなavisynthスクリプトを用意する(テキストで「.avs」の拡張子で保存)
(毎回修正する箇所は上の4か所、泡とか同じなら2か所)

#字幕を載せるベースの動画を指定
moviefile=".\未来ハーモニー.mp4"
#ニコカラメーカー2で出力した連番PNGを指定(「_00001.png」の部分は除く)
jibakubase="msk\未来ハーモニー3_ニコカラメーカー2出力"
#上乗せする、透過画像を指定
overimage="../アルファ泡.png"
#字幕の中で、透過上乗せしない色を指定(白:$FFFFFF)
ignorecolor=$FFFFFF


#####   以降修正不要   #####
colerspace="RGB32"
movieoto=LWLibavAudioSource(moviefile).KillVideo
LWLibavVideoSource(moviefile,format=colerspace,repeat=true)#.threadrequest()
AudioDub(movieoto)
movie=last

movie
jimakupngpath=jibakubase+"_%05d.png"
subtitlemovie=ImageSource(jimakupngpath,start=1,end=movie.FrameCount(),fps=movie.Framerate  ,use_DevIL=true,pixel_type=colerspace,info=false)
subtitlemovie =  make_mask_brash_ue_alpha_img(subtitlemovie,overimage,ShowAlpha (subtitlemovie.ColorKeyMask($FFFFFF)))
Layer(subtitlemovie)
return last


function make_mask_brash_ue_alpha_img(clip c, string imageclip, clip alphainfo){

blushbase=Imagesource(imageclip,start=0,end=1,fps=c.FrameRate,pixel_type="RGB32")
StackVertical (blushbase,blushbase,blushbase)
tatesc(c,c.sectoframe(80.0))
blash=last.Loop().assumefps(c)
b_alpha=ShowAlpha (blash)
c.Overlay (blash,mask=b_alpha)
return last
}

function tatesc(clip imageclip, clip baseclip,int length, bool "muki"){
largeheight=imageclip.height*baseclip.width/imageclip.width
return imageclip.Spline36Resize(baseclip.width,largeheight).zoomscroll(baseclip,baseclip.width/2,baseclip.height/2,(baseclip.width)/2,(largeheight)-(baseclip.height)/2,length,1,1).assumefps(baseclip)
}

function zoomscroll(clip imageclip, clip baseclip, int start_x, int start_y, int end_x, int end_y, int allframes, int "startstopframes", int "endstopframes", int "bcolor", float "startzoom", float "endzoom", bool "preview"){
startstopframes = Default(startstopframes,1)
endstopframes   = Default(endstopframes,1)
bcolor = Default(bcolor ,$FFFFFF)
startzoom=Default(startzoom,1)
endzoom=Default(endzoom,1)
preview=Default(preview,false)

bigimageclip = imageclip.AddBorders(baseclip.Width/2,baseclip.Height/2,baseclip.Width/2,baseclip.Height/2,bcolor)
bigimageclip = bigimageclip.Loop(allframes,0,0)

## Calc Start Image 
s_moviesize_x = Ceil (baseclip.Width / startzoom)
s_moviesize_y = Ceil (baseclip.Height / startzoom)

s_croppoint_x = start_x + baseclip.Width/2 - Round(s_moviesize_x/2)
s_croppoint_y = start_y + baseclip.Height/2 - Round(s_moviesize_y/2)

## Calc End Image 
e_moviesize_x = Ceil (baseclip.Width / endzoom)
e_moviesize_y = Ceil (baseclip.Height / endzoom)

e_croppoint_x = end_x + baseclip.Width/2 - Round(e_moviesize_x/2)
e_croppoint_y = end_y + baseclip.Height/2 - Round(e_moviesize_y/2)

## create clip
resizefunc="Spline36resize"

bigimageclip = bigimageclip.assumefps(baseclip.FrameRateNumerator/baseclip.FrameRateDenominator)
startimage = bigimageclip.Spline36resize(baseclip.Width, baseclip.Height, s_croppoint_x, s_croppoint_y, s_moviesize_x, s_moviesize_y).Trim(1,1).Loop(startstopframes,0,0)
endimage = bigimageclip.Spline36resize(baseclip.Width, baseclip.Height, e_croppoint_x, e_croppoint_y, e_moviesize_x, e_moviesize_y).Trim(1,1).Loop(endstopframes,0,0)
animateimage = bigimageclip.Trim(startstopframes,allframes-endstopframes).Animate(0,allframes-startstopframes-endstopframes, resizefunc, baseclip.Width, baseclip.Height, s_croppoint_x, s_croppoint_y, s_moviesize_x, s_moviesize_y,   baseclip.Width, baseclip.Height, e_croppoint_x, e_croppoint_y, e_moviesize_x, e_moviesize_y)

## return clips
return startimage ++ animateimage ++ endimage 
}
function sectoframe(clip c,float "sec")
{
    return round(sec * c.FrameRate)
}

5. 作成した.avsファイルをエンコードする

以上の手順で動画が出来上がり。(曲情報とかアイコンは別でつけたものなので今回関係ありません)

ニコカラメーカーで普通に作っても、
無圧縮AVI作成→エンコード
今回の方法でも
連番PNG作成→avs編集(数か所)→エンコード
なので、さほど手間が増えません^^

No Comments

MPC-BEが動画再生開始時にフリーズしてしまう時の対処方法

カラオケオフで動画再生したときに、再生しはじめで毎回MPC-BEがフリーズ(画面が停止してマウスカーソルがWindowsのクルクルになるけど、音声は流れ続ける)という現象が発生しました。

これが起こると、ゆかり自動再生がMPC-BEが落ちたと誤認識して、次の動画再生に行ってしまうこともあり、まともに運用できません。

Google先生に聞いてみたところ、MPC-BEの設定で解消できるようで、実際解消できたのでここにその内容を残しておきます。

MPC-BEの設定項目

・メニューから「表示」→ 「オプション」を選び設定画面を出す
・「プレーヤー」→ 「最近使ったファイルの履歴を保存する」のチェックを外す

以上の設定でOK

No Comments

(Windows10をクリーンインストールしたらかどうかはわからんが)GIMPが起動しない際の対策

もう1つ出くわした不具合について対応した内容をメモメモ。

Windows10をクリーンインストールした後、GIMPの最新版をインストールして起動しようとしても何も起動しなかった。
(何も起きないのでスクショの取りようがない)

https://gitlab.gnome.org/GNOME/gimp/issues/4385

によると、
とりあえず「gimp-2.10.14-setup-1.exe」のインストーラーを使えばいいらしい。

古いインストーラーは
https://www.gimp.org/downloads/

のここから

にあります。

No Comments

Windows10をクリーンインストールしたらDaVinci ReslveでHEVC動画が読み込めなくたった際の対策

PCの不調でPCの起動ドライブをすっ飛ばしてしまい、Windows10を新規インストールしたところ、出くわした不具合について対応した内容をメモメモ。

もともとこんな感じで、HEVC(H265)動画は読み込めていた。

 

ところが、Windows10をクリーンインストールした後、DaVinci Resolveをインストールした状態で同じファイルを読み込ませようとすると、

「メディアオフライン」と表示されて読み込めない。

Codec不足かと考えて LAV Filters をインストールしてみたものの変わらず。(どうやらDaVinci ResolveはLAV FiltersのようなDirectShow のdecoderは使わないらしい)

Microsoftから提供されている「デバイス製造元からの HEVC ビデオ拡張機能」をインストールしてみる。

そしたら、読めるようになった。

めでたしめでたし

No Comments

Easy Key Changerが有効な時にMPC-BEがWMVファイルを再生できない場合の対策

Easy Key Changerが有効になっているときに、MPC-BEでwmv形式の動画を再生しようとすると

  • 音が出ない
  • MPC-BEが強制終了する

などの不具合が出ることがあります。

以下の設定をすることで問題が回避できます。

MPC-BEの設定画面の「外部フィルター」を表示する。

「LAV Audio Decoder」をダブルクリック

「Formats」のタブと選択

「wma, wmapro, wmalossless」の3つのチェックが外れていたらチェックをする。

「OK」を押して設定完了

 

 

No Comments

MPC-BEでPitchWorksを動かしてキー変更する方法

MPC-HCだとPitchWorksを動かすことができて、動画再生中キー変更できて、
MPC-BEだとPitchWorksが動かないので、動画再生中キー変更できない、
と言われているがそんなことはなかったらしいので動かし方を説明します。

PitchWorksは32bitのプラグインなので、MPC-BE(MPC-HCでも)32bit版でのみ動作します。
スタートメニューなどのアイコンや起動中の上のタイトルバー(表示していれば)に「MPC-BE x64」と表示されている場合64bit版なので、アンインストールして32bit版(インストーラーにx86と書いているもの)をインストールしなおしてください。
MPC-BEの最新版は https://app.box.com/s/6reo6f5tf4ec6i7n4f861vmttjav8xdk   の中の「!_last」のフォルダ内にあります。
(64bit版より32bit版の方が処理が重くなることがあるようなのでギリギリの性能で頑張っている場合は使用が厳しくなることがあるかもです)

用意するソフトウェア

以下のソフトをインストールするのでダウンロードが必要です。

使えるようにするまでの流れ

まず、ffdshow-tryoutsのインストーラーを起動してインストールします。
インストーラーの途中、
コンポーネントの選択では、「audio decoder」と「raw audio processor」だけチェックを入れてほかのチェックをすべて外します。
(ffdshow-tryoutsのデコーダーは今となっては古いものなので、インストールしてしまうと、動画再生の性能が落ちてしまう可能性があるので外します)


そのあとの「追加タスクの選択」では「ffdshowのすべての設定を初期値に戻す」以外のチェックをすべて外します。

次にPitchWorksのインストーラーを起動しインストールします。
インストール中特に気にしないといけないところはなかったはずです。

インストールが完了したので、MPC-BEの設定を行います。
メニューのオプションから設定画面を表示し、、
「外部フィルター」の設定に入ります。

「フィルターの追加」ボタンを押すとフィルターの一覧が表示されるので
「ffdshow audio Processor」を選択してOKを押します。

すると、外部フィルターに「ffdshow Audio Processor」が表示されるので、それを選択した状態で右の「優先する」のところにチェックを入れておきます。


次にもう一度「フィルターの追加」より
「delaydots.com PitchWorks」を選択してOKを押します。

すると、外部フィルターに「delaydots.com PitchWorks」が追加されるので、それを選択した状態で右の「優先する」のところにチェックを入れておきます。

次に、「内部フィルター」の設定内、「音声デコーダー」の画面に移動します。

いろいろチェックボックスのあるエリアで右クリックして「すべてのフィルターを無効化」を押します。

すると、音声デコーダーのチェックがすべて外れます。

以上で使えるようになります。

PitchWorksを使った再生中のキー変更のしかた

再生画面を表示中、表示している画面で
マウスの右クリック → 「フィルター」→ 「delaydots.com PitchWorks」 と押すと

「PitchWorks」の画面が表示されます。


左上の「pitch」と書いているつまみをマウスの左クリックでつまんで左に動かすと音が高く、右に動かすと音が低くなります。
他のつまみは、曲のスピードなどが変わるものだと思われます。必要ならやってみるといいと思います。
変更し終わったら右上の×を押してPitchWorksの画面を閉じます。(PitchWorksが表示されたままだとプレイヤーが制御不能になるので)

あとがき

今まで、MPC-HCなら使えるとか、人によってはMPC-HCでも使えないとかあったのですが、
ffdshowをインストールしたことがあるかどうかだけの違いだったのかもしれません。
「ffdshowのAudio Processor」だけ入れておけばMPC-HCだろうがMPC-BEだろうが「PitchWorks」は使えるよってことで

 

 

No Comments

「ゆかり」外部曲リスト対応

縛りオフ用の曲リストを簡単に呼び出せるように、外部曲リストを使う方法をいくつか実装してみた。
3通りの実装方法を作ってみたので先に作ったものから説明していく。

1.JSON方式

曲リストを「ゆかり」内部でフルコントロールするために、JSON形式で曲リストを書きます。

例)

{   "title": "ラブライブ!サンシャイン!!曲一覧",   "category": [     {       "name": "1stシングル「君のこころは輝いているかい?」",       "song": [         {           "title": "君のこころは輝いてるかい?",           "artist": "Aqours",           "songinfo": [             "作詞:畑 亜貴 作曲:光増ハジメ 編曲:EFFY",             "2015年10月7日発売",             "Aqoursのデビューシングル"           ],           "file": [             {               "kind": "動画",               "filename": "【ニコカラHD】君のこころは輝いてるかい?・改【ラブライブ!】_OnOff.mp4",               "flags": [                 "Movie",                 "OnVocal",                 "OffVocal"               ]             },             {               "kind": "動画",               "filename": "[Aqours]君のこころは輝いてるかい?_ラブライブ!サンシャイン!!_Live映像_Live-OffVocal-CD音源切替_(音源タイミング修正).mp4",               "flags": [                 "Movie",                 "OnVocal",                 "OffVocal",                 "Live映像"               ]             }           ]         },         {           "title": "Step! ZERO to ONE",           "artist": "Aqours",           "songinfo": [             "作詞:畑 亜貴 作曲・編曲:高田暁",             "2015年10月7日発売",             "君のこころは輝いてるかい? C/W"           ],           "file": [             {               "kind": "動画",               "filename": "[Aqours]Step! ZERO to ONE_ラブライブ!サンシャイン!!_Live映像_Live-CD音源切替.mp4",               "flags": [                 "Movie",                 "Live音源",                 "OffVocal",                 "OnVocal",                 "Live映像"               ]             }           ]         },         {           "title": "Aqours☆HEROES",           "artist": "Aqours",           "songinfo": [             "作詞:畑 亜貴 作曲・編曲:渡辺和紀",             "2015年10月7日発売",             "君のこころは輝いてるかい? C/W"           ],           "file": [             {               "kind": "動画",               "filename": "[Aqours]Aqours☆HEROES_ラブライブ!サンシャイン!!_Live映像_Live-CD音源切替.mp4",               "flags": [                 "Movie",                 "Live音源",                 "OffVocal",                 "OnVocal",                 "Live映像"               ]             }           ]         }       ]     },     {       "name": "青空Jumping Heart",       "song": [         {           "title": "青空Jumping Heart",           "artist": "Aqours",           "songinfo": [             "作詞:畑 亜貴 作曲:伊藤賢、光増ハジメ 編曲:EFFY",             "2016年7月20日",             "アニメ「ラブライブ!サンシャイン!!」第1期オープニングテーマ"           ],           "file": [             {               "kind": "動画",               "filename": "[Aqours]青空Jumping Heart_ラブライブ!サンシャイン!!アニメOP_OnOffr3.mp4",               "flags": [                 "Movie",                 "OnVocal",                 "OffVocal"               ]             }           ]         },         {           "title": "ハミングフレンド",           "artist": "Aqours",           "songinfo": [             "作詞:畑 亜貴 作曲:桑原聖 (Arte Refact) 編曲:酒井拓也 (Arte Refact)",             "2016年7月20日",             "青空Jumping Heart C/W"           ],           "file": [             {               "kind": "動画",               "filename": "[Aqours]ハミングフレンド._ラブライブ!サンシャイン!!【Live映像】_OnOff.mp4",               "flags": [                 "Movie",                 "OnVocal",                 "OffVocal",                 "Live映像"               ]             }           ]         }       ]     }   ] }

こんな風なテキストファイルを用意する。メモ帳で書くと泣きそうになるので JSON editor (例えばここ) とかで編集する。
これを「c:\xampp\htdocs\llss_mini.json」
として保存し、※要文字コードUTF-8形式
http://<ゆかりのIP>/limitlist.php?data=llss_mini.json
にアクセスすると
このようなリストが表示され、
青や緑のアイコンやファイル名が書いてある枠を押すことでリクエストまで飛べるようになっている。
また、設定画面で、
と設定しておくと、
上部メニューのいろいろ検索のなかに
もリストに入るための項目が表示されるようになる。

この方式が、リストの見やすさやボタンの押しやすさなどのユーザー操作性や、メニュー対応やカラオケ配信リクエスト、BGVリクエストなどに対応し、一番操作する側にとってやりやすいものになっています。
ただ、リストのJSON形式のテキストを作るのが大変なのが。。。。JSON Editorになれるとそこそこ楽に作れます。

2. 外部Webサーバー方式

トップページメッセージのついでにできるようにした、外部のWebサーバー(まあゆかり上のhtdocsの中のどこかでもいいんだけど)にゆかりに戻ってくるリンクを自力で作ってくる方式
「トップページメッセージの説明からコピペ」

  • トップ画面メッセージの応用

TOPページメッセージに自ホスト名置換文字列機能
・TOPページメッセージに#yukarihost#と書いておくと「ゆかり」が動作しているホスト名に置換。
リンク先にGET Methodでホスト名を渡したい時などに使えます。

たとえばサンプルとして

<?php

$songlist[] = array( 'kind' => 'movie', 'title' => '君の心は輝いているかい?' , 'filename'=>'[Aqours]君のこころは輝いてるかい?_ラブライブ!サンシャイン!!_Live映像_Live-OffVocal-CD音源切替.mp4', 'desc' => '歌 : Aqours, ラブライブ!サンシャイン!!1stシングル' );
$songlist[] = array( 'kind' => 'movie', 'title' => 'Step Zero to One' ,'filename'=>'[Aqours]Step! ZERO to ONE_ラブライブ!サンシャイン!!_Live映像_CD音源切替.mp4', 'desc' => '歌 : Aqours, 君の心は輝いているかい?カップリング' );
$songlist[] = array( 'kind' => 'movie', 'title' => 'Aqours☆HEROES' ,'filename'=>'(仮作成)[Aqours]Aqours☆HEROES_ラブライブ!サンシャイン!!_Live映像_Live-CD音源切替.mp4', 'desc' => '歌 : Aqours, 君の心は輝いているかい?カップリング' );
$songlist[] = array( 'kind' => 'movie', 'title' => '恋になりたいAQUARIUM' ,'filename'=>'【ニコカラHD】恋になりたいAQUARIUM【ラブライブ!サンシャイン!!】Off Vocal.mp4', 'desc' => '歌 : Aqours, ラブライブ!サンシャイン!!2ndシングル' );
$songlist[] = array( 'kind' => 'movie', 'title' => '青空Jumping Heart' , 'filename'=>'[Aqours]青空Jumping Heart_ラブライブ!サンシャイン!!アニメOP_OnOffr3.mp4','desc' => '歌 : Aqours, ラブライブ!サンシャイン!!アニメ第1期オープニング' );
$songlist[] = array( 'kind' => 'haisin', 'title' => 'ハミングフレンド' , 'filename'=>'', 'desc' => '【配信】歌 : Aqours, 青空JumpingHeartカップリング' );

$alllist = array( 'itemname' => 'ラブライブ!サンシャイン!!' , 'songs' => $songlist);

$yukarihost = 'localhost';

if(array_key_exists("yukarihost", $_REQUEST)) {
    $yukarihost = $_REQUEST["yukarihost"];
}

$yukarisearchlink='http://'.$yukarihost.'/search.php?searchword=';
$yukariconfirmlink='http://'.$yukarihost.'/request_confirm.php?shop_karaoke=1';
http://localhost/request_confirm.php?shop_karaoke=1

?>

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>ラブライブ!サンシャイン!!曲リスト</title>
  <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
  <!--[if lt IE 9]>
    <script src="js/html5shiv.min.js"></script>
    <script src="js/respond.min.js"></script>
  <![endif]-->
</head>
 
<body>
<?php
foreach($alllist as  $key => $value){
    if($key === 'itemname' ){
        print '<h1>'.$value.'</h1>';
    }else if($key === 'songs' ){
        foreach($value as $songinfo){
             print '<div class="bg-info">';
             if($songinfo['kind'] == 'movie'){
               print '<h2 class="bg-primary">'.$songinfo['title'].'</h2>';
               $link = $yukarisearchlink.$songinfo['filename'];
               print '<p><a href="'.$link.'" class="btn btn-default" > この曲を予約 </a></p>';
               print '<p>'.$songinfo['desc'].'</p>';
             }else if($songinfo['kind'] == 'haisin' ){
               print '<h2 class="bg-primary">'.$songinfo['title'].'</h2>';
               print '<p><a href="'. $yukariconfirmlink . '&filename='  .  $songinfo['title'] . '" class="btn btn-default"> この曲を配信で予約 </a></p>';
               print '<p>'.$songinfo['desc'].'</p>';
             }
             print '</div>';
        }
    }
}

?>

<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</body>
</html>

https://t.co/iZYGCGqZXL < 実物はこちらからダウンロード可能

のようなものを作ってどこかのWebサーバーかゆかり動作PCの「c:\xampp\htdocs\」以下のどこか置いておく。
今回はllsonglist.phpという名前にしている。

トップ画面メッセージの設定に、さっきのPHPを置いたWebサーバへのリンクをこんな風に設定する。

トップページに、リンクが表示されるのでそちらをクリック

リンク先はこうなっている(こうなるように作った)

ここで例えば青空Jumping Heartの「この曲を予約」ボタンを押すと その曲の検索結果が表示(フルファイル名で検索しているので1つだけ見つかる)されるので以降、いつも通り予約できます。

llsonglist.phpの

$songlist[] = array( 'kind' => 'movie', 'title' => '君の心は輝いているかい?' , 'filename'=>'[Aqours]君のこころは輝いてるかい?_ラブライブ!サンシャイン!!_Live映像_Live-OffVocal-CD音源切替.mp4', 'desc' => '歌 : Aqours, ラブライブ!サンシャイン!!1stシングル' );

の行を増やせばどんどんリストを増やせるし、htmlを頑張れば見やすい画面にできるので、リスト作成の手間はちょっとは楽になる。
ゆかり側ではほとんど何もしない他人任せリスト機能だったりする。

3. 固定HTML方式

外部Webサーバー方式では、多少内部処理を行うものを作らないといけなかったけど、
完全に固定のHTMLのリストでゆかりのリクエスト用の画面に戻ってくる方式。

なんでもいいのでURLから外部のHTMLを取得。
TDタグの中が動画ファイルの拡張子で終わっているものをゆかりの検索結果かリクエスト確認画面へのリンクに変える

特定のフォルダの中のファイル一覧をHTML化するには
「FileInfoList」 http://njp.la.coocan.jp/software/fil/index.html
というソフトが使えます。

引数
listurl : リストのあるURL.相対パスでも絶対パスでもhttp://からはじまるフルパスでもいいはず
backconfirm : 戻り先を検索結果ページにするか、リクエスト確認ページにするか
1 : リクエスト確認ページに戻る。(リストのファイル名のファイルがなかった時の動作は保証できない(再生時スキップするはず)
1以外(もしくは無指定) : ファイル検索結果ページに戻る
listurlをリンクで記載する場合は URLendodeすること推奨 (http://urlencode.net/ 等を使って)

指定例 「c:\xampp\htdocs\list\2017年秋アニメ.html」をトップページメニューで指定する場合
http://urlencode.net/ にて
「list/2017年秋アニメ.html」

「list%2F2017%94N%8FH%83A%83j%83%81.html」
とエンコードされるので

トップページメッセージなどに
<a href=”list3replace.php?listurl=list%2F2017%94N%8FH%83A%83j%83%81.html&backconfirm=0″ > 2017年秋アニメ </a>
と書けば、ファイル名が検索結果ページに戻ってくるリンクに変わる。
<a href=”list3replace.php?listurl=list%2F2017%94N%8FH%83A%83j%83%81.html&backconfirm=1″ > 2017年秋アニメ </a>
と書けば、ファイル名が検索結果ページに戻ってくるリンクに変わる。

例)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta name="GENERATOR" content="FileInfoList 1.6.0.0">
<style type="text/css">
</style>
    <title></title>
</head>
<body>
    <div class="alignC">
        <p class="header"></p>
        <table border="1" align="center" summary="FileList">
            <tr class="header_background_color"><th class="header_nowrap" abbr="ファイル名">名前</th></tr>
            <tr><td class="item_nowrap partition_background_color">ラブライブ!</td></tr>
            <tr><td class="item_nowrap">[μ’s]WonderFul Rush_ラブライブ!μ’s5thシングル_OnOff.mp4</td></tr>
            <tr><td class="item_nowrap">Snow halation_ラブライブμ’s2ndシングル_(OnVocal、OffVocal、2.5次元切替)_HD音源.mp4</td></tr>
            <tr><td class="item_nowrap partition_background_color">ラブライブ!サンシャイン!!</td></tr>
            <tr><td class="item_nowrap">[Aqours]君のこころは輝いてるかい?_ラブライブ!サンシャイン!!_Live映像_Live-OffVocal-CD音源切替.mp4</td></tr>
            <tr><td class="item_nowrap">[Aqours]青空Jumping Heart_ラブライブ!サンシャイン!!アニメOP_OnOffr3.mp4</td></tr>
        </table>
    </div>
</body>
</html>

このようなHTMLファイルを作成し、「c:\xampp\htdocs\list\ラブライブ!リスト.html 」というファイル名で保存する。

http://urlencode.net/  サイトで
「list/ラブライブ!リスト.html」 は、「list%2F%83%89%83u%83%89%83C%83u%81I%83%8A%83X%83g.html」となることを確認
(※\を/に書き換えていることに注意)

設定画面のトップページメッセージに

<center>
<p> <a href="list3replace.php?listurl=list%2F%83%89%83u%83%89%83C%83u%81I%83%8A%83X%83g.html&backconfirm=0" > ラブライブ!シリーズ曲リスト </a></p>
</center>

と設定してみる。
トップページにリストへのリンクが現れ、
リンクの先に、リストが表示される。
たとえばここで、「青空Jumping Heart」のファイル名を押すと、
検索結果画面に移動して、以降いつもと同じように予約できる。

また、
設定画面のトップページメッセージに

<center>
<p> <a href="list3replace.php?listurl=list%2F%83%89%83u%83%89%83C%83u%81I%83%8A%83X%83g.html&backconfirm=1" > ラブライブ!シリーズ曲リスト </a></p>
</center>

と「backconfirm=1」として設定してみると、
同じようなリストの画面から、「君のこころは輝いてるかい?」のファイル名を押すと、
リクエスト確認画面に直接飛ぶようになる。(ファイルがなくてもリクエストできてしまうので、ファイルがないと再生しようとした際スキップされることになります。)
今後のサポート予定
・td以外のタグ( ddとか)対応
・HTML内にリンクがあった場合、その先でも使えるようにする
など、余裕があれば。。。

No Comments

「ゆかり」オンライン動作をプライベートIP回線でやる裏技

前回の「ゆかり」オンライン動作の説明では、グローバルIPを持つ回線が必要ということになっている。

データ契約のMVNOは短期解約しても解約金とられないところが多いので、グローバルIPがもらえる業者に気軽に契約しなおせば済むと思うんだけど、
とはいうものの、世の中のほとんどの回線業者はプライベートIPしかもらえないので、グローバルIPがもらえる業者と契約しなおす合間にでもプライベートIPでも「ゆかり」をオンライン動作させる方法を書いておきます。

前提

・ゆかりの通常セットアップが終わってすでにxamppが動作している状態
・プライベートIP経由でいいのでインターネットに接続されている状態(可能であればモバイルルーターかテザリングスマホとはWifiではなくUSBでネット接続したほうがいいです)

接続ツール

まず、ここからゆかりプライベートIPオンライン接続用のソフトをダウンロードします。
https://www.pcgame-r18.jp/owncloud/index.php/s/BHubCTxS1FCbBcU

ZIPファイルを解凍して、任意の実行フォルダにでも移動しておきます。(著者的にはそういうものはいつも「c:\progns\」においてます)

初回だけ「setup.bat」を実行します。

黒いコマンドプロンプト画面が現れて、

Store key in cache? (y/n)
と聞かれるのでyを入力してEnterを押します。

すると


login as:
と表示されるのでコマンドプロンプトの右上の×を押して終了させます。
【この作業は次回からは必要ありません】

次に、設定画面にて

ユーザー接続ポートに、接続用ポート番号を設定します。
下に割り当て表があるのでそちら範囲の数字を、
お試しなら「11090~11100」あたりを使用してください。

ユーザー接続ポートを入力して、その直下の「設定」を押して、

次にオンライン接続用ホスト名に反映されていることを確認して
その直下の「更新」を押す。

そして、プログラム起動停止の横の「起動」を押すと、
タスクバーにPCが斜めに2台並んだようなアイコンが現れます。
このアイコンが現れれば接続完了になります。

もし、このアイコンに赤い×が付いているとエラー状態で、インターネット接続ができていないか、最初のsetup.batの実行を忘れているかもしれません。

「更新」ボタンを押すと現れる「オンライン版接続確認」にOKが表示されれば接続可能状態になっています。

この状態で、「help等」のメニューの中にある「接続情報表示」の画面を表示すると
オンライン版で接続可能なURLとそのQRコードが表示されるので、そちらに参加者の方に接続してもらってください。

以上で使えるようになると思います。(試しにつないでみるまではできたけど、オフ会実践投入はできていない。。。)

ポート番号割り当て表

使用者(敬称略) ポート番号 備考
ゆーふうりん 11000~11009
ぬこ 11010~11015
成田 11021~11022
スフィーナ 11024~11025
くろっかす 11026
タマ兄 11028
たち 11030
フックン 10031
SHINTA 11032~11035
よしの 11036
しょーきん 11037
プリパライム 11038
ポケ鉄 11040~11041
死神フィル 11042~11043
Mad Hatter 11044
kuruani 11045
火神 11046
カボスSP+ 11047
ぬー 11048
クロP 11051~11055
11056
すみた 11058
つぼはち 11059
れん 11060
百合川 11061
楽シャア 11062
なぎ 11063
naoo 11064
あにょん 11065
芝ちゃん 11066
crom 11067
けんしん 11068
けんちぃ 11069
 黒河  11070-11071
 tokka-ta 11072
コウ艦長 11073
tukinowa 11074
がいばー 11075
v3 11077
のんでるん 11078
まどか 11079
ひろりん 11080-11081
ヤマテル 11082
にいくら 11083
タカヒロ&Lass 11084~11086
MiO 11087
星崎 11088
月代 11089
えみち 11101
るえ 11102
お試し用 11090~11100 被るの覚悟でお試しで使っていい番号にします

トラブルシューティング

Q.なんか途中で繋がらなくなった。
A.インターネット接続がちゃんと動作しているか確認してみてください。(例えばブラウザでhttp://www.yahoo.co.jp にアクセスしてみるとか)
それから、プログラム起動停止の横の「停止」を押してから、「起動」を押してpfwdの再起動をしてみてください。
それでだめだったら一度機材PCを再起動してみるところから。。。

あとがき

プライベートIPでも外からつなげられるように、サーバーを立てたり、既存のpfwdソフトを改造したりして何とかアクセスできるようにしてみました。
この環境は、僕が急死したり、ドメインやサーバー維持費が払えなくなるくらい生活が困窮してしまうと維持できなくなるので、アンオフィシャルな方法ということにしておいてください。

No Comments

「ゆかり」オンライン動作の説明

ちょっとしたメモ書き程度では説明しきれないので、「ゆかり」のオンライン接続のセットアップの仕方などを説明しておこう。
(BGVモードもちゃんと説明かけよって言われそうだな。。。)

「ゆかり」とは

動画を持ち込んだ持ち込みカラオケのために、
パソコンをカラオケ店などに持ち込み、持ち寄ったリムーバルディスク(USBHDDやUSBメモリ)の中にある
動画や音声ファイル検索したり、
検索した結果を再生予約したり、
予約された動画を順番に再生したり、
するツール。

カラオケだけでなく、イベント中のBGMを参加者が選べるようなイベントとかにも使えたりするはず。

「Universal KAraoke Request tool」 略して「ゆかり」

「オンライン接続」とは

今まで、Wifi環境を持ち込んで同じWifiアクセスポイントに接続しないと使用できなかった。
同じWifiアクセスポイントに多数の端末が接続されると動作が不安定になったり、Wifiの電波の届きが悪いと通信できなかったりするので、
各自自前のインターネット回線から接続するようにする接続方法のこと。
今までの接続(「ローカル接続」と呼んでおく)と併用もできる。

「オンライン接続」のデメリット

  • 使用する回線にグローバルIPが必要。
    グローバルIPがもらえるモバイル回線業者は
    「OCN モバイル ONE」 http://www.ntt.com/personal/services/mobile/one.html
    「インターリンクLTE SIM」 https://www.interlink.or.jp/service/sim/
    「ASAHIネット LTE」 http://asahi-net.jp/service/mobile/lte/
    「UQ Wimax2+ withグローバルIPアドレスオプション」 http://www.uqwimax.jp/plan/wimax/option/global_ip/
    「docomo mopera-u 接続」 https://www.mopera.net/
    「au LTE NET for DATA接続」  https://www.au.com/mobile/charge/internet-connection/ltenet-for-data/
    とかがあるらしい。(Biglobe SIMは2017年1月でグローバルIPをやめるらしい)一応、グローバルIPがなくても使うための回避策は後ほど書いておくけど、安定して動作する自信はない。。。。
  • インターネット通信量が増える
    「ローカル接続」では、ほとんどの通信が、
    「ゆかり動作PC」 – (wifi) – 操作端末
    で行っていたので、ほとんどインターネット接続の通信が発生しなかったところ、
    「ゆかり動作PC」 –  (インターネット) –  操作端末
    となるので、全部の通信がインターネットに乗り通信する量が増える。
    今まで、格安SIMの低速モードで充分と言っていたところが低速モードで事足りるかどうかの自信はない。。。
    (ついでに、参加者も通信量が増える。。。)

ということなので、「ローカル接続」と併用する使い方がいいんじゃないかと思われます。
(特に手持ちの端末からの転送(アップロード)とかする場合はローカル接続推奨です。

設定方法

まず、Wifiルーターでポート開放を行う

簡単にUPnPを使う例を紹介 (手動でポート開放する方法は「オンラインゲーム ポート開放」とかでググればいくらでも出てくるのでそちらを見てね)
モバイルルーター MR04LNの設定例です。(ほかの機種でも似たような設定があるはず)
1. 回線のIPアドレスを見てみる。
Web設定メニューで「情報」→「現在の状態」ページ内のWAN側接続状態の中の「IPアドレス」に記載されている内容を確認


もし、IPアドレスが
10.??.??.??
172.??.??.??
192.168.??.??
100.??.??.??
になっていると、残念ながらグローバルIPではないので、ポート開放では「オンライン接続」が使えません。

2. 「UPnP機能」を有効にする
Web設定メニューで「詳細設定」→「その他の設定」ページ内の「UPnP機能」を「使用する」にチェックを入れて「設定」ボタンで反映する。

3. PCでUPnPポート開放ツールを実行

http://www.vector.co.jp/soft/dl/winnt/hardware/se457733.html
このあたりからBssUpNpをダウンロードしてきて解凍した中にある、
BssUpNp.exe を起動
「Configure Router」ボタンの右のボックスに「80」を記入し
「Configure Router」ボタンを押す。
下のメッセージに「Router Configured Successfully」が表示されればOK。

以上で設定完了。
確認としてはモバイルルーターのWeb設定メニューで「情報」→「UPnPの状態」の中に
IPアドレスがゆかり実行PCのIPアドレス、ポート番号に80(TCP)のようになっているものが現れていればOK。

続けてゆかり上の設定

4. DDNSの設定
DDNSを使用する場合は、
「オンライン接続用」のDDNS設定画面のIPアドレスの部分にその環境でのグローバルIPが自動で入力されているので
今まで同様、pcgame-r18.jp用のホスト名やmydns用のID,パスワードを入力して「更新」ボタンを押します。


ローカルと併用するには別のホスト名にしたほうがいいので、別のホスト名かmydnsのアカウントを用意が必要です。

5. オンライン用ホスト名の設定
DDNSで設定したホスト名、もしくはDDNSを使用しない場合は下のDDNS設定にあるIPをそのまま
「オンライン接続用ホスト名」に入力して直下の「更新」ボタンを押します。

設定画面を再表示すると、「オンライン接続用ホスト名」の直下に
「オンライン版接続確認」に接続状態が表示されます。これが「OK」になっていたら「オンライン接続」が使用可能です。

この状態で、「Help等」メニュー内の「接続状態表示」を表示すると
「オンライン版接続先」が表示されるので、その内容でユーザーは接続可能です。(オンライン版接続確認に失敗する状態では表示されません)

オンライン接続先は、「別部屋URL設定」のところに書いておくと、ユーザーが切り替えができるようになって便利かもしれない。

仕組みは作ってみたものの、まだ実践投入していないのでどのくらい使い物になるかは不明。

グローバルIP版でも不安なのに、さらに動作に不安があるプライベートIP回線での接続のやり方はまた次回!

No Comments

ニコカラ的ニコ動強制再エンコード画質検証【フルHD60fps編】

どうやっても再エンコードされるので、UPする動画は極力1.5GBに近づけておくというFAは出ているんだけど、いつもUPしているフルHD60fps動画を今のニコ動にUPするとどうなるかを見てみる。(画像はクリックすると原寸大で見れるはず)
1.5GBくらいになると100MB程度サイズが変わっても大して画質が変わらないので適当に1.3~1.4GB程度にエンコードするのがおすすめ

【1.5GBファイル】

http://www.nicovideo.jp/watch/sm29924773

とりあえずセオリー通り、1.5GBでUPして、ブラウザで一番高画質が反映されるであろうHTML5 Playerで再生してみてスクショをとってみる

細かいところが潰れてかなりきつい><。再エンコードの最大画質が2000kbpsしかないのは辛い。倍くらいほしいよ。画質でyoutubeに対抗しようとしてほしいもんです。

iPadのニコニコ公式アプリでは
PCのブラウザと変わんないか。

投稿した元動画は

1.4GBくらいになるようにエンコードしたので、圧縮によるノイズのようなものは見えるわけないよね。

これをニコ生の動画紹介で再生されるとこうなる

ひでーなこれ、もはや泡があったかどうかもわからんw

【100Mファイル編】

http://www.nicovideo.jp/watch/sm30411680

旧仕様の時と同じように「つんでれんこ」さんにお任せして100MBにしてUPしてみたところ

ニコ動HTML5 Playerでは

泡があるのかあんまりわからないくらい劣化してしまった。。。

iPadのニコニコ公式アプリ

PCのブラウザと変わんないね。

元の動画は、100Mでエンコードしたので
この程度で、けっこうもやもやが目立ってしまってます。(泡の存在はわかるくらい)
ぶっちゃけ、100MBに抑えようとするとビットレートが2800kbpsになってただでさえ足りない。

これをニコ生の動画紹介で再生されると


おや?綺麗。再エンコされていない!!
先日Pangelinoさんの動画紹介で紹介されたときに見た時に、「SHINTA(翔星 P)」先生に「fullhd60fpsか?」って聞かれたのでもしやニコ生では非再エンコ動画が流れるんじゃないか?と思って確認してみたらどうやらどのとおりらしい。

ニコ生紹介用だと今まで通り100MBエンコードでもいいらしい。(そんな使い方に何の意味があるかといわれると。。。。)

【旧仕様】

http://www.nicovideo.jp/watch/sm29481166

参考までに旧仕様で100MB UPした動画の場合

ニコ動HTML5 Player

元動画

ニコ生再生

はいっ変わりません。再エンコードされないから当たり前だよね。

このころは良かった。。。

結論

  • 101MB以上1.5GB以下にエンコードしてアップロード
    ブラウザ再生 → 新サーバー(新サーバー仕様再エンコード) → 画質〇
    ニコ生再生 → 旧サーバー(再エンコード) → 画質×
    ニコ動ダウンロード → 旧サーバー(再エンコード) →画質×
  • 100MB以下にエンコードしてアップロード
    ブラウザ再生 → 新サーバー(新サーバー仕様再エンコード) → 画質△
    ニコ生再生 → 旧サーバー(再エンコードなし) → 画質◎
    ニコ動ダウンロード → 旧サーバー(再エンコードなし) →画質◎

ここまで自分がアップロードする観点で書いてきたけど、人がUPしたものをダウンロードしようとする場合は、
新サーバーと、旧サーバーの両方をダウンロードしてきて、ファイルサイズが大きい方が高画質になるってことで。

 

ニコ生再生の検証に http://com.nicovideo.jp/community/co2266142 および http://com.nicovideo.jp/community/co1979030 のコミュニティの生放送を使わせていただきました。ありがとうございます。

 

No Comments