2017-10-24 11 views
0

AWSに配置されたサーバーレスWebアプリケーションがあり、アップロードされたビデオからS3にスクリーンショットを取らなければなりません。私はffmpegをスクリーンショットを抽出するために使用していますが、唯一の欠点は、ビデオファイルをダウンロードしてffmpegを最初にダウンロードしなければならないことです。
実際に私がAWS Lambdaを使用していて、ビデオの長さに制限がないことを知っていると、大きなファイルをアップロードすると、AWS Lambdaが保存容量の上限に達することがあります。
これを解決するには、ビデオの小さな塊をダウンロードし、ffmpegと一緒にサムネイルを抽出することを考えました。ffmpegはファイルの塊をダウンロードできましたが、理解できませんでした。ここ
は私のコードです:NodeJSを使用して部分的にビデオファイルを保存する

s3.getObject({ 
    Bucket: bucketName, 
    Key: key, 
    Range: 'bytes=0-1048576' 
}, (err, data) => { 
    fs.writeFile(fileName, data.Body, error => { 
    if (error) 
     console.log(error) 
    else 
     console.log('File saved'); 
    }) 
}) 

とサムネイルを抽出するためのコード:

const ffmpeg = require('fluent-ffmpeg'); 
new ffmpeg(fileName).screenshots({ 
    timestamps: [0], 
    filename: 'thumb.png', 
    folder: '.' 
}) 

そして私は、私は問題がある知っているffmpeg

Error: ffmpeg exited with code 1: ./test.mp4: Invalid data found when processing input 

からこのエラーを取得していますこのようなファイルを保存するには、私は私の問題を解決する任意の解決策を見つけることができませんでした。もし誰かに感謝する人がいれば。

UPDATE:
それはffmpegが私のためにこれを行うことが判明し、私はちょうどそれをurlを与え、それがローカルにファイルをダウンロードすることなく、スクリーンショットをレンダリングするために必要なものダウンロードしたコードは次のようになります:あなたがMP4のフォーマットを理解し、あなたがフレーム境界に沿って並ぶのに十分なデータを取得していることを確認し、その後、ffmpegのは、一部のデータを理解できるように、任意のヘッダを変更する必要があることを行うために

const ffmpeg = require('fluent-ffmpeg'); 
new ffmpeg(url).screenshots({ 
    timestamps: [0], 
    filename: 'thumb.png', 
    folder: '.' 
}) 

答えて

0

とそれはちょうど破損したファイルがあるとは思わない。

あなたはAWSエコシステムの中にいますが、エラスティックトランスコードを使用してビデオをトランスコードし、サムネイルを生成するように頼むことができますか?

http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/preset-settings.html#preset-settings-thumbnails

+0

私は、ビデオを変換したくないという理由だけで、弾性トランスコーダを使用する必要はありません。私は、ビデオの最初のフレームのスクリーンショットが必要です。 – Sami

関連する問題