-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Optimize videos and gif images #4091
Comments
なので、ユーザーが上げたものは極力変換したくないです。 |
それもそうですね。「ファイルの最適化」というドライブの機能の一つとして実装するのはどうでしょう。 |
ふーむ それはあまり需要がなさそう |
misskey.xyzなどの高容量を許容するインスタンスではあまり需要はないかもしれないが、そうでないインスタンスなどでは需要が発生しそう。 |
Related to #3969 |
Related to #2098 |
It would definitely help to reduce traffic if misskey would convert/compress files uploaded. Perhaps this could be an instance wide configuration option so it can be disabled if traffic isnt a problem? edit: |
これやっぱり iOS ユーザーが画面録画を MOV で投稿して閲覧不可とかあるのでやりたい。 |
あと WebM でこれの逆が発生する。 |
今更ですが
のようなインスタンスはFFmpegで動画等を変換するスペックもないのでは |
ストレージとマシンスペックは別なのでは? |
そのぐらいのストレージしか用意できないってことはマシンスペックも相対的に下がるのではって話です。 もちろん極端にストレージだけ少なくて、マシンスペックの高いインスタンスもあるでしょうが、殆どはVPSやクラウド等で運用されていると思うのでストレージにお金が出せない管理者のインスタンスは相対的にマシンスペックも下がると思います。 |
まあそれはそうですね。ぶっちゃけストレージの件は Outdated な話題なので、どちらかというとコーデックと再生可能なデバイスの関係に視点を置いた方が良いかも知れません。 |
あと、代案としてはAWS Elemental MediaConvert等の外部サービスに対応する等ですかね |
うーん、まあ小規模インスタンスなら Transloadit の無料枠とかで事足りそうではあると思うのですが。 |
そんなサービスがあったんですね あとはいくらスペックの高いインスタンスでも流石に動画の変換はサーバー全体に負荷がかかるので、FFmpegだけ別で実行できるシステムを組んだほうが良さそうな気がしますね。 |
とりあえず長い動画については置いておいて、 #3969 (gif, apng, animated webp, 短い無音動画の処理) ぐらいはやりたい |
長い動画はPeerTubeの連携を強化する(アカウント連携でアップロード→引用できるようにするとか?)とかでもよさそう |
正直クライアントサイドで再エンコードさせたい なぜクライアントサイド?とにかくGPU支援でないと動画エンコードは厳しい。 再エンコード先のターゲットは?Misskeyは動画サイトではないので、720p60を上限にして良さそう(その代わり画質をちょっとよくしたい) 問題はコーデック(とコンテナ)だが… 手法A: WebCodecs, VideoEncoderを使うブラウザネイティブAPIであるWebCodecs, VideoEncoderなどを使う でだ、なんと、WebCodecsではコンテナを扱うことができない! ということでWeb APIだけではMux/Demuxできないので他の手段を用いる必要がある(ffmpegと組み合わせればいける、Uint8Arrayでしか引渡できないのでメモリを食い潰す懸念があるが、Misskeyのアップロード制限は100MB以下が多いため問題になる場面は少ないだろう) FirefoxはWebCodecsに対応していないが、圧縮しなければ良さそう B: wasmでなんとかする?ffmpeg.wasmでffmpegが扱える GPU支援なんてなく、CPUエンコードなのであまり現実的ではない(wasmからGPUの動画エンコーダーを扱うのは極めて困難ではなかろうか…) |
|
一般人は動画の再エンコードなんてしないし私が面倒
SafariはTPに来ているらしいので製品実装してくれると信じている
クライアントサイドで複数ファイル生成させるのはサードパーティ対応的に微妙かなと。微小サイズならサーバーサイドでCPUエンコードでもさほど問題にはならないかも(画像含めて互換性重視ファイルの生成の機運が高まっている?)
avc/H.264をターゲットにしてしまうと結局これになってしまう |
それを言い出すと結局クライアントサイド再エンコ自体が微妙っちゃ微妙 |
ふむ?クライアントサイドでエンコードする場合オリジナルはアップロードしない予定 再エンコードの品質はクライアントに依存するにはするが、マシなファイルがアップロードされるだろうという性善説を取っておく |
動画トランスコードを他のサーバーで実行させたい、(PeerTube(やMisskey)は分散型を標榜しているので下手にTransloaditやAWS Elemental MediaConvertを実装してしまうとロックインに繋がるのでナシ)、でも動画トランスコードを他のサーバーで実行させるような規格やOSSは低調 という感じかしら |
(外部のサーバーで動画トランスコードができるからと言って運営者の負担がそこまで減るわけではないんだよな…) |
https://w3c.github.io/webcodecs/samples/ ではmp4box.jsとwebm-writerを使っていますので同じ方法で何とか実装できそうです(mux/demux自体はそこまでCPUリソース必要ないはずですので) 試してみたい |
ISOBMFF のパース(→そのまま再生可能な形式にできそうなら muxing も)は普通にやってよいと思うというか割と優先度高めでやりたい |
無理にクライアントでやらなくてもいいし圧縮しなくてもいいからさっさとやりたくなってきた |
iOS からのアップロードだと yuvj420p になるけど Web で広く再生可能なピクセルフォーマットなのか要調査って感じだ |
こんなところか
|
わかる |
大型サーバーの負担がかなり大きくなりそうな気がします
これはつまりどうなりますか? |
負荷に耐えられるサーバーを用意できる場合だけオンにすれば良さそう |
-movflags +faststartする(全ロードを待たずにすぐ再生できるようにする) |
すれば再生確率が上がるが iOS 動画とかは無理
すれば大概のデバイスで再生できていい感じになる |
フロントエンドの実装は
に分けてオプションが散らからないようにすればいいかなと思ってる |
あるいはもうなんかファイルをアップロードするダイアログかなんか新設しても良いかもだけど |
一回 Cloudflare Stream にアップロードして再エンコードされたやつをダウンロードして削除したらいい感じになる説 |
一つのサービスに依存するような実装はなしで(同一のAPIを受け付けるサーバーがOSSライセンスで提供されているならアリ) |
(このくらいなら自分たちで作れるのでは |
Summary
FFmpegが依存関係に導入されたので、ついでにGIF画像や動画ファイルを表示用に最適化された動画ファイル(要議論)に変換して通信量の削減を図りたい。
Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.
The text was updated successfully, but these errors were encountered: