ホームページ >ウェブフロントエンド >jsチュートリアル >ビデオトランスコーディング用の NodeJS サンプルコード

ビデオトランスコーディング用の NodeJS サンプルコード

小云云
小云云オリジナル
2017-12-09 11:20:422581ブラウズ

ビデオのトランスコーディングは、最初にデコードしてからエンコードするプロセスであり、それによって元のビデオを必要なビデオに変換します。この変換には、さまざまな形式 (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トランスコーディングを実装します

よく使用されるファイルトランスコーディングツールの概要

文字セットを決定しトランスコードするためのphp関数コード

以上がビデオトランスコーディング用の NodeJS サンプルコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。