teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

CSSアニメーションを追記

2018/05/02 14:40

投稿

miyabi-sun
miyabi-sun

スコア21461

answer CHANGED
@@ -63,4 +63,22 @@
63
63
  だから転送量超過で怒られてから考えた方が良いと思うわ。
64
64
 
65
65
  アドバイスするなら、そのサイトがヒットした時に備えて独自ドメインだけは取っておきなさい。
66
- そうすれば、いざ転送量過多でレンタルサーバから追い出されても、もっと強力なサーバに移行出来るわよ。
66
+ そうすれば、いざ転送量過多でレンタルサーバから追い出されても、もっと強力なサーバに移行出来るわよ。
67
+
68
+ ---
69
+
70
+ おまけ: CSSアニメーションに関して
71
+
72
+ もしかしてBlob云々は興味本位であって、
73
+ ムービー的なものなら何でも良かったのかしら?
74
+
75
+ 参考サイト: [drop out](https://magical-girl.site/)
76
+
77
+ このサイト、実は全部CSSアニメーションよ。
78
+ だから手間暇は掛かってるしレンダリングがそこそこ重いけど、ファイルサイズ自体はとても軽い。
79
+ このサイトは大量のPNG画像を使ってるから8MBの超力作になってるけど、2MBはアニメーションとは関係ない画像だし、PNGを極力さけてSVG中心にしていけばもう2MB程は削れるかもしれないわね。
80
+
81
+ このクオリティでmpegにしたら多分20〜30MBくらいになるんじゃないかしら?
82
+ 動画はあまり詳しくないからヤマカンだけど、線をきっちり出そうとすると1000Kbpsくらいにはなるわよね?
83
+
84
+ 質問の根底がmpegの動画ファイルではなく、可愛いアニメーションで魅せたいという要望なら、実現出来ると思うからCSSアニメーションについて調べてみてね。

3

更に考察をすすめた

2018/05/02 14:39

投稿

miyabi-sun
miyabi-sun

スコア21461

answer CHANGED
@@ -2,20 +2,25 @@
2
2
 
3
3
  > クライアント側で動画生成⇒blob形式のデータをダウンロード
4
4
 
5
- 確かに一度HTMLJSファイルをダウンロードしてしまえば、それ以上の通信は発生しないわね。
5
+ 確かに一度HTMLJS、CSS、画像データはダウンロードしてしまえば、それ以上の通信は発生しないわね。
6
6
  動画のバイナリデータはたった数秒でも凄まじいサイズになる。
7
- 例えばmidiという音楽楽譜ファイルを落として、ローカルで音を鳴らすような仕組みを構築出来れば通信量を抑えられるのではな考えたわけよね?
7
+ [midi](https://ja.wikipedia.org/wiki/MIDI)のような仕組みを構築したいという要望よね?
8
- まず、この考え方自体は合ってるわ。
9
8
 
9
+ まぁ扱うモノにもよるわね。
10
+ 例えばゲームのプレイングムービーのようなものをコマ枚に画像データにして、パラパラ漫画のように差し込んでいく作り方をするなら完全に無駄よ。
11
+ 動画のエンコーダーも賢いから時系列で色が変わってない箇所は色の情報を削ったりして軽量化してるから逆に重くなる。
12
+ でも逆に、写真や図形を切り貼りして音楽を付けたようなものなら確実に軽くなるでしょうね。
13
+
14
+ わざわざ質問する位だから後者の使い方なのよね?そちらの想定で話を進めましょう。
15
+
10
16
  次、作ったBlob形式の動画データ。
11
- FileAPIを使ってフォルダを指定してあげてそこに改めて書き込むか、BlobをURLに変換させてDLさせるという違いこそあるけど、
17
+ FileAPIを使ってフォルダを指定してあげてそこに改めて書き込むか、BlobをURLに変換させてDLさせるという違いこそあるけど、どちらもメモリ空間上のデータをそのまま保存するから転送量は一切かからない。
12
- どちらもメモリ空間上のデータをそのまま保存するだけだから転送量は一切かからない。
13
18
  これも質問文の通りね。
14
19
 
15
20
  だから転送量対策としては一考の余地があるわね。
16
21
  でも、どうやって動画を生成するの?
17
22
  フロントエンドエンジニアのほぼ全員が即答で無理と答えるくらい難易度が高いわよ。
18
- (調査したら多分いけるという事は分かったけど、ネットワークの負荷対策としは酷いからオススメはしない)
23
+ (調査したら多分いけるという事は分かったけど、根本的な解決になっいからオススメはしない)
19
24
 
20
25
  HTML5で実装されたのは主に「動画を再生」する機能、動画を生成する機能はとてもしょぼいのよ。
21
26
  バイナリデータを触れるってだけで、JavaScriptはそもそもバイナリデータを触る為の言語じゃないし。
@@ -41,6 +46,10 @@
41
46
  動画データをエンコードするのは凄まじい負荷が掛かるから、普通にDLするより絶対時間かかるし、スマホで見ようとすると燃えるように発熱するでしょうね。
42
47
  GUI操作のパソコンの動画メーカーみたいなソフトをWeb上で自作するつもりでなければオススメしないわ。
43
48
 
49
+ よしんば動画データにできても、今度はその動画データを再生するところまでがゴールでしょ?
50
+ ブラウザの種別によってコンパイルする動画データを切り替えるような処理も必要になりそうね。
51
+ 私だったら何百万積まれても絶対やらないわ。
52
+
44
53
  ---
45
54
 
46
55
  > サーバー(レンタルを想定しています)には転送量制限

2

やり方が見つかったので出来る調に変更

2018/05/02 14:14

投稿

miyabi-sun
miyabi-sun

スコア21461

answer CHANGED
@@ -7,23 +7,22 @@
7
7
  例えばmidiという音楽の楽譜ファイルを落として、ローカルで音を鳴らすような仕組みを構築出来れば通信量を抑えられるのではないかと考えたわけよね?
8
8
  まず、この考え方自体は合ってるわ。
9
9
 
10
+ 次、作ったBlob形式の動画データ。
10
- FileAPIを使ってフォルダを指定してあげてそこに改めて書き込むか、
11
+ FileAPIを使ってフォルダを指定してあげてそこに改めて書き込むか、BlobをURLに変換させてDLさせるという違いこそあるけど、
11
- BlobをURLに変換させてDLさせるという違いこそあるけど、
12
12
  どちらもメモリ空間上のデータをそのまま保存するだけだから転送量は一切かからない。
13
13
  これも質問文の通りね。
14
14
 
15
15
  だから転送量対策としては一考の余地があるわね。
16
16
  でも、どうやって動画を生成するの?
17
- フロントエンドエンジニアのほぼ全員が即答で無理と答えるでしょうね
17
+ フロントエンドエンジニアのほぼ全員が即答で無理と答えるくらい難易度が高いわよ
18
+ (調査したら多分いけるという事は分かったけど、ネットワークの負荷対策としては酷いからオススメはしない)
18
19
 
19
- 下に理由は書いておくけど、ローカルで動画をというのは呼吸をするように何で自動化たり作れる凄腕のエンジニアでもなければほ無理よ。
20
+ HTML5実装されたのは主に「動画を再生」す機能、動画生成する機能はとてもしいのよ。
21
+ バイナリデータを触れるってだけで、JavaScriptはそもそもバイナリデータを触る為の言語じゃないし。
20
- 私も回避策色々練ってみたけど、難易度が高すぎてプロトタイプ作るのだけでも数ヶ月スパンで掛かる…仕事という形では残念なが引き受け
22
+ 私も「HTML5 Web標準API バイブル」という書籍眺めたけど、MediaRecorderという機能くいしか見つからなかったわ
23
+ `new MediaRecorder(stream)`で作成する時にChromeの画面を60fpsでパシャパシャ記録する`stream`を自作すればいけるんじゃないかしら?
24
+ まぁ、このstreamの作り方は私も皆目見当がつかないし、多分答えられる人は居ないんじゃないかしら。
21
25
 
22
- HTML5で実装された機能は「動画を再生」する機能は豊富だけど、動画を生成する機能はとてもしょぼいわよ。
23
- 私も「HTML5 Web標準API バイブル」という書籍を眺めたけれど、ワンチャンあるのがMediaRecorderという機能のみ。
24
- `new MediaRecorder(stream)`で作成する時にChromeの画面を60fpsでパシャパシャ記録する`stream`を自作すればいける……かも。
25
- まぁ、このstreamの作り方は私も皆目見当がつかないし、多分答えられる人はTeratailやStackOverflow合わせても多分誰も居ないんじゃないかしらね。
26
-
27
26
  もしくは[AviUtl](https://github.com/VFR-maniac/L-SMASH-Works/tree/master/AviUtl)みたいなC言語で書かれている動画作成ソフトをゴリ押しで移植して使う方法ね。
28
27
  こっちも質問しても答えは帰って来ないわよ。
29
28
 
@@ -31,6 +30,19 @@
31
30
  [Emscripten](http://kripken.github.io/emscripten-site/index.html)というソフトを使えば移植は可能だけど、C言語がある程度触れないとスタートラインに立てないわ。
32
31
  動画を扱うなら専用のパーサはC言語で付け足す必要があるし、私は二度とやりたくないわね……
33
32
 
33
+ 【追記】
34
+ もしかしたらあるかも…と思って探したら案の定見つかったわ。
35
+ [videoconverter.js](https://github.com/bgrins/videoconverter.js)
36
+
37
+ > FFmpeg library into JavaScript, using Emscripten.
38
+
39
+ コマンドライン操作でAviファイルを生成するFFmpegというソフトがあって、それをEmscriptenでJSにコンパイルしなおしたもののようね。
40
+ でも、出来ると言ってもEmscriptenで生成したJSファイルは死ぬほど扱いが難しいし、
41
+ 動画データをエンコードするのは凄まじい負荷が掛かるから、普通にDLするより絶対時間かかるし、スマホで見ようとすると燃えるように発熱するでしょうね。
42
+ GUI操作のパソコンの動画メーカーみたいなソフトをWeb上で自作するつもりでなければオススメしないわ。
43
+
44
+ ---
45
+
34
46
  > サーバー(レンタルを想定しています)には転送量制限
35
47
 
36
48
  どうせ貴方が作った無名のサイトなんて誰も利用しないわよ。

1

文頭を構成:;(∩´﹏`∩);:

2018/05/02 13:52

投稿

miyabi-sun
miyabi-sun

スコア21461

answer CHANGED
@@ -2,15 +2,22 @@
2
2
 
3
3
  > クライアント側で動画生成⇒blob形式のデータをダウンロード
4
4
 
5
- JavaScript上で扱うデタはAjax通信等で取得てこない限り全てクライアント側にあるの
5
+ 確かに一度HTMLやJSファイルをダウンロドしてしまえば、それ以上の通信は発生しないわね
6
+ 動画のバイナリデータはたった数秒でも凄まじいサイズになる。
6
- メモリ空間上に存在してそれをダウンロードした場合、表示上だけダウンロードという扱いになるけど、内部はメモリ空間上のデータそのまま保存するだけだか転送は一切かからないわよ
7
+ 例えばmidiという音楽の楽譜ファイルを落として、ローカルすような仕組みを構築出来れば通信を抑えれるのではないかと考えたね?
8
+ まず、この考え方自体は合ってるわ。
7
9
 
10
+ FileAPIを使ってフォルダを指定してあげてそこに改めて書き込むか、
8
- そのための素材ファイル山ほどダウンロードさせてたら余り意味なのだど、
11
+ BlobURLに変換させてDLさせるとう違いこそあるけど、
12
+ どちらもメモリ空間上のデータをそのまま保存するだけだから転送量は一切かからない。
9
- 転送量対策としては一考余地があるわね。
13
+ これも質問文通りね。
10
14
 
15
+ だから転送量対策としては一考の余地があるわね。
11
16
  でも、どうやって動画を生成するの?
12
- まともなエンジニアのほぼ全員が即答で無理と答えるでしょうね。
17
+ フロントエンドエンジニアのほぼ全員が即答で無理と答えるでしょうね。
18
+
13
19
  下に理由は書いておくけど、ローカルで動画を作るというのは呼吸をするように何でも自動化したり作れる凄腕のエンジニアでもなければほぼ無理よ。
20
+ 私も回避策を色々練ってみたけど、難易度が高すぎてプロトタイプ作るのだけでも数ヶ月スパンで掛かる…仕事という形では残念ながら引き受けられない。
14
21
 
15
22
  HTML5で実装された機能は「動画を再生」する機能は豊富だけど、動画を生成する機能はとてもしょぼいわよ。
16
23
  私も「HTML5 Web標準API バイブル」という書籍を眺めたけれど、ワンチャンあるのがMediaRecorderという機能のみ。