nodejs http.get() を使用してビデオの特定の部分(範囲)をダウンロードする次のコードがあります。
const fileUrl = 'https://www.example.com/path/to/video.mp4'
const fs = require('fs')
const http = require('https')
const fileName = 'video.mp4'
const options = {
hostname: 'https://www.example.com',
path: '/path/to/video.mp4',
method: 'GET',
headers: {
'range': 'bytes=0-444444', //the size I'm requesting is the first 444.4 kB of the video
}
const req = http.get(options)
req.on('response', (res) => {
console.log(res.headers) //just to see headers
})
req.on('response', (res) => {
let file = fs.createWriteStream(fileName)
let size
res.on('data', (chunk) => {
file.write(chunk)
size = fs.statSync(file.path).size
console.log(size)
})
})
問題は、'range'
タイトルを設定するとダウンロードした動画がうまく再生されるのに、ダウンロードした動画に'range': 'bytes=0-anyValue'
設定すると破損して再生されないことです。'range'
'range': 'bytes=[anyValue>0]-anyValue'
'range': 'bytes=0-anyValue'
受信応答ヘッダーが次のような場合:
{
'content-length': '444445',
'content-range': 'bytes 0-444444/17449469',
'accept-ranges': 'bytes',
'last-modified': 'Tue, 07 May 2019 11:45:38 GMT',
etag: '"f13a255d30ef81d2abf8ba2e4fefc2fd-1"',
'x-amz-meta-s3cmd-attrs': 'md5:4e3127acff74ac20b52e1680a5e0779d',
'cache-control': 'public, max-age=2592000',
'content-disposition': 'attachment; filename="Rim.Of.The.World.2019.720p.Trailer.mp4";',
'content-encoding': 'System.Text.UTF8Encoding',
'x-amz-request-id': 'tx0000000000000001bfccc-00602060b1-1b3f92b-default',
'content-type': 'application/octet-stream',
date: 'Sun, 07 Feb 2021 21:50:41 GMT',
connection: 'close'
}
そしてダウンロードした映像を再生できます。
ただし、'range': 'bytes=[anyValue>0]-anyValue
着信応答ヘッダー
{
'content-length': '443890',
'content-range': 'bytes 555-444444/17449469',
'accept-ranges': 'bytes',
'last-modified': 'Tue, 07 May 2019 11:45:38 GMT',
etag: '"f13a255d30ef81d2abf8ba2e4fefc2fd-1"',
'x-amz-meta-s3cmd-attrs': 'md5:4e3127acff74ac20b52e1680a5e0779d',
'cache-control': 'public, max-age=2592000',
'content-disposition': 'attachment; filename="Rim.Of.The.World.2019.720p.Trailer.mp4";',
'content-encoding': 'System.Text.UTF8Encoding',
'x-amz-request-id': 'tx00000000000000e8c5225-006020613d-1afef1a-default',
'content-type': 'application/octet-stream',
date: 'Sun, 07 Feb 2021 21:53:01 GMT',
connection: 'close'
}
ダウンロードした動画が破損して再生できません
私は何が間違っていましたか?
私の目標を正しく達成するには?
よろしくお願いします。
答え1
ffmpegコマンドラインツールを使用して、次のように要求された操作を実行できます。
ffmpeg -ss [start timestamp] -i [video path or url] -t [duation] [outputname.mp4] or other format
あなたの場合、nodejsは以下を使用する必要があります。流暢なffmpeg基準寸法:
const ffmpeg = require('fluent-ffmpeg')
const url = 'www.example.com/video.mp4'
ffmpeg(url).seekInput(30) //cut from the first 30th second
.duration(10) //duration I want to cut
.output('video.mp4) //output video name
.run() //run the process