フォームを使用してユーザーからサーバーにビデオをアップロードする Ruby on rails で記述された Web アプリケーションがあります (実際には、s3 に直接アップロードする jquery アップローダーを使用していますが、これは関係ないと思います)。
ビデオのアップロード時間を短縮するために、ビデオのサイズを 1000x2000 ピクセルに縮小したい場合、500x1000 に縮小したいと考えています。ビデオがクライアント側にアップロードされている間にそうする方法はありますか? それを行うことができるjavascriptライブラリはありますか?
5099 次
2 に答える
2
ビデオの再圧縮は重要な問題であり、ブラウザーですぐに発生することはありません。
HTML5 の変更により、いくつかの問題を克服できれば、理論的には可能です。
- File APIを使用して、ユーザーが要素を使用して選択したファイルの内容を読み取ります
<input type="file">
。ただし、ファイル全体をコードに渡す前にメモリにFileReader
読み込むように見えます。これは、大きなビデオ ファイルを処理する場合に望ましくないことです。残念ながら、これはどうしようもない問題です。それでも動作する可能性はありますが、10 ~ 20 MB 程度を超えると、おそらくパフォーマンスが受け入れられなくなります。 - ファイルのデータを取得したら、実際にそれを解釈する必要があります。これは通常、デマルチプレクサを使用してコンティナー (mpeg など) ファイルをビデオとオーディオ ストリームに分割し、コーデックを使用してこれらのストリームを生の画像/オーディオ データに解凍します。OS にはいくつかのコーデックが実装されていますが、JavaScript からアクセスできるものはありません。JSビデオ および オーディオ コーデックの実装がいくつかありますが、それらは実験的なものであり、非常に遅いです。decompressorのみを実装するため、出力の作成に関しては行き詰まります。
- オーディオとビデオの解凍、スケーリング、および再圧縮は、プロセッサに非常に負荷がかかります。これはまさに、JavaScript (および一般的なスクリプト言語) が最も苦手とする種類のワークロードです。少なくとも、Web ワーカーを使用して別のスレッドでコードを実行する必要があります。
- この作業はすべて、数 回 にわたって行われました。あなたは車輪を再発明しています。
現実的には、これはサーバー側で行わなければならないことであり、その場合でも簡単な作業ではありません。
絶望的な場合は、圧縮を処理するプラグイン/ActiveX コントロールのようなものを試すことができますが、ユーザーにプラグインをインストールするよう説得する必要があります (yuck)。
于 2012-04-16T15:50:20.540 に答える
1
Carrierwave (https://github.com/jnicklas/carrierwave) のような宝石を使用できます。ファイルを保存する前に処理する機能があります。最初に JavaScript を使用して直接 S3 にアップロードした場合でも、Carrierwave でファイルを取得して処理し、再度保存することができます。
それ以外の場合は、Carrierwave に最初からファイルを処理させることができます (Heroku でホストしていて、S3 に直接移動してタイムアウトを回避する必要がある場合を除く)。
于 2012-04-16T14:19:22.120 に答える