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