ビデオのトランスコーディングは、最初にデコードしてからエンコードするプロセスであり、それによって元のビデオを必要なビデオに変換します。この変換には、さまざまな形式 (mp4/avi/flv など)、解像度、ビット レート、フレーム レートなどが含まれる場合があります。従来のビデオ トランスコーディングでは、非常に一般的に使用されるツールは FFmpeg です。 FFmpeg は、デジタル オーディオとビデオの記録、変換、ストリームへの変換に使用できるオープン ソース コンピューター プログラムのセットです。 nodejs には、node-fluent-ffmpeg と呼ばれる FFmpeg もあります。 node-fluent-ffmpeg はノードで利用可能な ffmpeg であり、使用する前に ffmpeg をインストールする必要があります。この記事では、主に NodeJS でビデオをトランスコーディングするためのサンプル コードを共有し、皆様のお役に立てれば幸いです。
ffmpeg
FFmpeg は、デジタル オーディオとビデオを記録、変換し、ストリームに変換するために使用できるオープン ソースのコンピューター プログラムのセットです。 LGPL または GPL ライセンスを使用します。オーディオとビデオの記録、変換、ストリーミングのための完全なソリューションを提供します。非常に高度なオーディオ/ビデオのエンコードおよびデコード ライブラリ libavcodec が含まれており、高い移植性とエンコードとデコードの品質を確保するために、libavcodec の多くのコードは最初から開発されています
以下では、NodeJS でビデオをトランスコードする方法を紹介します。
1. FFmpeg をインストールします (MAC の場合)
MAC では、brew コマンドを直接使用してインストールできます: brew install ffmpeg。
インストールが成功したら、コマンドラインを使用して ffmpeg コマンドを使用してビデオをトランスコードできます。たとえば、input.avi を output.ts にトランスコードし、ビデオ コード レートを 640kbps に設定するには、実行する必要があるコマンドは次のとおりです。
ffmpeg -i input.avi -b:v 640k output.ts
fluent-ffmpeg モジュール
node-fluent-ffmpeg は基本的に、nodejs を通じてターミナルで FFmpeg コマンドを実行します。 node-fluent-ffmpeg のインストールと基本的な導入は他の npm モジュールと同じです。 npm (npm install fluent-ffmpeg) を介してインストールした後、require を使用して js ファイル内でそれを参照するだけです。基本的な使用法は次のとおりです。
var ffmpeg = require(‘fluent-ffmpeg'); var command = new ffmpeg(这里可以传入视频文件路径,或者流);
このようにして、コマンド ラインがインスタンス化され、トランスコードされるビデオ ファイルを渡す必要があり、データ ストリームの形式もサポートされます。
3. 使用例
以下はビデオトランスコーディングにnode-fluent-ffmpegを使用する例です:
var ffmpeg = require('../index'); var command = ffmpeg('testvideo-5m.mpg') // set video bitrate .videoBitrate(1024) // set aspect ratio .aspect('16:9') // set size in percent .size('50%') // set fps .fps(24) // set audio bitrate .audioBitrate('128k') // set audio codec .audioCodec('libmp3lame') // set number of audio channels .audioChannels(2) // set custom option .addOption('-vtag', 'pX') // set output format to force .format('avi') // setup event handlers .on('end', function() { console.log('file has been converted succesfully'); }) .on('error', function(err) { console.log('an error happened: ' + err.message); }) // save to file .save('outtest.avi');
node-fluent-ffmpegは上記のようにチェーンコールを行うことができます。インスタンス化では、一連のビデオ属性がチェーン内に設定され、最後にビデオがトランスコードされたことを示す終了イベントが監視されます。完了後、save() メソッドを呼び出して、ビデオ ファイルを対応するディレクトリに保存できます。
4.node-fluent-ffmpeg でできること
node-fluent-ffmpeg は、ffmpeg でできることはすべて実行でき、ビデオに対してあらゆる処理を実行できます。さらに、nodejs を使用すると、node-fluent-ffmpeg は、ビデオの長さを読み取って動的に返すこと、必要に応じてビデオを任意の形式にトランスコードすることなど、他の多くのことも実行できます。具体的なメソッドは github で参照できます。メソッドの概要が記載されています。使用する場合は、必要なものを選択するだけで簡単にビデオのトランスコードを完了できます。
5. ビデオトランスコーディングのいくつかの要素
上記の関数は、ビデオのさまざまな属性と、それに対応する ffmpeg のノードフルエントメソッドを簡単に紹介します。
1.fps: ビデオのフレーム レート。1 秒間に画像が更新される回数を示します。ゲームをプレイするとき、fps が低いとゲームが非常に遅くなることがわかります。これが fps の役割です。特定の範囲内で fps が高いほど、1 秒あたりにビデオが更新される回数が多くなり、人間の目にはより滑らかに見えます。この属性に対応するメソッドは fps() で、設定したいフレーム レート値を渡すだけです。
2. 解像度: ビデオのサイズを設定するために使用され、対応するメソッドは幅 x 高さを渡します。
3. ビットレート: ビデオ分野では、一般的にビットレートはビットレートを指します。データ送信時の単位時間当たりに送信されるデータのビット数をkbps単位で表します。この値はビデオの品質に影響します。値が大きいほどビデオの品質は高くなりますが、同時にビデオ ファイルのサイズも大きくなります。したがって、ファイル サイズが制限を超えない範囲で品質をできるだけ高くするには、トランスコーディング時にコード レートを合理的に設定する必要があります。
4. フォーマット: 言うまでもなく、フォーマットは format メソッドを通じて設定できます。
関連する推奨事項:
phpは、画像へのbase64トランスコーディングを実装します
以上がビデオトランスコーディング用の NodeJS サンプルコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。