2016-11-12 21 views
0

제 문제는 일련의 jpeg를 webm 비디오로 변환하려고 할 때입니다. Webm 파일을 하나의 프레임 또는 webm 파일에 아무것도 넣지 않습니다 (0 kb).ffmpeg jpeg stream to webm은 하나의 프레임 (스냅 샷) 또는 빈 .webm 파일 (mjpeg)로 파일 .webm을 만듭니다.

var fs = require('fs'); 
var path = require('path'); 

var outStream = fs.createWriteStream(__dirname+'/output.webm'); 
var ffmpeg = require('fluent-ffmpeg'); 

이 하나는 mjpeg 스트림 URL입니다. 아무것도없는 파일을 생성합니다.

//var proc = new ffmpeg({source:'http://xxx.xxx.xxx.xxx/goform/stream?cmd=get&channel=0',timeout:0}) 

이 하나는 스냅 샷 URL입니다. 단일 프레임으로 파일을 생성합니다.

var proc = new ffmpeg({source:'http://xxx.xxx.xxx.xxx/snapshot/view0.jpg',timeout:0}) 

.fromFormat('mjpeg') 
.size('2048x1536') 
.toFormat('webm') 
.withVideoBitrate('800k') 
.withFps(20) 

내가 대신 파이프를 사용하려고 노력하지만 주사위 :(

//.pipe(outStream,{end:false}); 
.writeToStream(outStream,{end:false}) 

어떤 도움에 감사드립니다.

이 시점에서 내가 간부와 기본 쉘 명령을 사용하여 가입 모르지만, . 난 그냥 또한 오류를 얻을 때 그래, 내가 멍청한 놈 말할 것도 없다

사이드 참고 :.

저는 zoneminder와 같은 것들을 시도했지만 카메라와 카메라의 수와는 다릅니다. 그래서 나는 그것들을 기록하기 위해 뼈의 해결책을 만들고 있습니다. 현재의 클라우드 서비스를 통해 우리는 매우 중요한 순간과 그 에너지 및 시간에 더 많은 비용을 들이지 않고 있습니다.

답변

0

감사보고를했고, 난이 방법을 몇 가지 성공이 있었다

: 그것을 알아 내려고 시도 모두. 기본적으로 MJPEG 대신 스냅 숏 URL에서 작동합니다. 이 요청을 사용합니다. 이 방법은 파이프을 사용하기 때문에 기술적으로 아무것도 사용할 수 없습니다. image2pipe.

var spawn = require('child_process').spawn; 
var request = require('request'); 
var args = '-f image2pipe -r 1 -vcodec mjpeg -i - -f webm -r 1 test3.webm'; 
var encoder = spawn('ffmpeg', args.split(' ')); 
encoder.stderr.pipe(process.stdout); 
var interval = function(){ 
    request('http://xxx.xxx.xxx.xxx/snapshot/view0.jpg',function(er){ 
     if(er){console.log(er)} 
     setTimeout(function(){interval()},1000) 
    }).pipe(encoder.stdin,{end:false}) 
} 
interval(); 

은 내가 setInterval을사용할 수도 있지만, 난 단지가 요청을 완료 한 후 다시 시도하고 싶었다.

편집 : 내 카메라는 내가 그것을 작동하는지 확실하지 그래서 메신저 초기 질문에 방법을 사용하려고 할 때 다운 된 밝혀 ...하지만 난이 MJPEG에 대한

var spawn = require('child_process').spawn; 
var args = '-f mjpeg -framerate 1 -i http://xxx.xxx.xxx.xxx/goform/stream?cmd=get&channel=0 -vcodec libvpx -framerate 1 -bitrate 256k video_file.webm -y'; 
console.log(args) 
var encoder = spawn('ffmpeg', args.split(' ')); 
encoder.stderr.pipe(process.stdout); 
을 수행 알고