有没有办法在node.js中使用ffprobe(fluent-ffmpeg)输入和读取流?

5kgi1eie  于 2023-03-29  发布在  Node.js
关注(0)|答案(1)|浏览(242)

我在我的代码中使用fluent-ffmpeg,我的主要目标是获得音频/视频持续时间,我需要使用流作为我的输入。
根据文件,https://github.com/fluent-ffmpeg/node-fluent-ffmpeg#reading-video-metadata

ffmpeg('/path/to/file1.avi')
  .input('/path/to/file2.avi')
  .ffprobe(function(err, data) {
    console.log('file2 metadata:');
    console.dir(data);
  });

ffmpeg('/path/to/file1.avi')
  .input('/path/to/file2.avi')
  .ffprobe(0, function(err, data) {
    console.log('file1 metadata:');
    console.dir(data);
  });

我试过这些

const ffmpeg = require('fluent-ffmpeg')
const fs = require('fs')

filepath = './scratch_file/assets_audios_10000.wav'
stream = fs.createReadStream(filepath)
ffmpeg(stream)
.input(filepath) // have to put a file path here, possible path dependent
.ffprobe(function (err, metadata) {
    if (err){throw err}
    console.log(metadata.format.duration);
}) //success printing the duration

上面成功返回了持续时间

ffmpeg(stream)
.input(stream) //
.ffprobe(function (err, metadata) {
    if (err){throw err}
    console.log(metadata.format.duration);
}) // failed

以上失败。

ffmpeg(stream)
.ffprobe(function (err, metadata) {
    if (err){throw err}
    console.log(metadata.format.duration);
}) //returned "N/A"

返回N/A
有人能帮忙吗?我需要一些
ffmpeg.ffprobe(stream, (metadata) => {console.log(metadata.format.duration)} )
谢谢大家。

bybem2ql

bybem2ql1#

下面的代码对我有用。

let ffmpeg = require('fluent-ffmpeg')

  // create a new readable stream from whatever buffer you have
  let readStream = new Readable()
  readStream._read = () => {}
  readStream.push(imageBufferObject.buffer)
  readStream.push(null)

 // I used a call to a promise based function to await the response
 let metadata = await get_video_meta_data(readStream)
 console.log(metadata)

 async function get_video_meta_data(stream){
  return new Promise((resolve, reject)=>{
    ffmpeg.ffprobe(stream, (err, meta)=>{
      resolve(meta)
    })
 })
}

简单地将可读流输入到ffmpeg.ffprobe()中,它期望的文件路径似乎对我有用,因为我可以提取 meta数据而不写入磁盘。

相关问题