nodejs의 원격 비디오 URL에서 부분 콘텐츠를 다운로드하는 방법은 무엇입니까?

nodejs의 원격 비디오 URL에서 부분 콘텐츠를 다운로드하는 방법은 무엇입니까?

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

관련 정보