我试了好几个小时都没有好结果。
我想借助Google云功能创建hls流(通过mp4视频)。
这是我到目前为止提出的:
const remoteReadStream = myBucket.file(vidPath).createReadStream();
const remoteWriteStream = myBucket.file(vidPath.replace('.mp4', '.m3u8')).createWriteStream();
var proc = ffmpeg()
.input(remoteReadStream)
// Base url
// include all the segments in the list
.addOption('-hls_time',4)
.addOption('-c:a aac')
.addOption('-ar 48000')
.addOption('-c:v h264')
.addOption('-profile:v main')
.addOption('-crf 20')
.addOption('-sc_threshold 0')
.addOption('-g 48')
.addOption('-keyint_min 48')
.addOption('-hls_playlist_type vod')
.addOption('-b:v 800k')
.addOption('-maxrate 856k')
.addOption('-bufsize 1200k')
.addOption('-b:a 96k')
.addOption('-hls_segment_filename', 'this_is_not_working_%03d.ts')
*tried gs://.../videos/$03d.ts' as well as other paths...
.outputOptions('-f hls')
.on('progress', function(progress) {
var processing_str = 'Processing:' + progress.percent + '% done';
console.log(processing_str);
})
.on('end', function() {
console.log('file has been ffmpeg succesfully');
})
.on('error', (err, stdout, stderr) => {
console.error('An error occured during encoding', err.message);
console.error('stdout:', stdout);
console.error('stderr:', stderr);
})
.pipe(remoteWriteStream, { end: true });
这将给我m3u8文件,但是不会创建头文件(ts文件),导致无法保存它们。 m3u8文件是流,因此已保存。
打开'xxx.ts'进行写入无法为输出文件#0写入标题(编解码器参数不正确?)
我想将它们保存在同一文件夹中,但是我无法通过存储桶访问它。 有谁知道如何在ffmpeg配置中“创建”多个文件(赋予存储桶的确切路径)?
也许将它们另存为流将是答案,但是我不知道如何将该流(.createWriteStream();)作为参数传递。
预先感谢