javascript - 使用 fluent-ffmpeg 将 ffprobe 元数据返回到另一个函数

标签 javascript ffmpeg fluent-ffmpeg

我正在尝试使用 fluent-ffmpegffprobe获取文件的元数据并将其添加到列表中,但我想将获取元数据的过程与检查文件相关的方法分开,主要是因为addFileToList()函数很长,ffprobe例程也很长。
我已经尝试了以下代码,但它没有给出我期望的结果:

export default {
  // ...
  methods: {
    getVideoMetadata (file) {
      const ffmpeg = require('fluent-ffmpeg')
      ffmpeg.ffprobe(file.name, (err, metadata) => {
        if (!err) {
          console.log(metadata)  // this shows the metadata just fine
          return metadata
        }
      })
    },
    addFileToList (file) {
      // file checking routines
      console.log(this.getVideoMetadata(file))  // this returns null
      item.metadata = this.getVideoMetadata(file)
      // item saving routines
    }    
  }
}
我已经尝试嵌套 getVideoMetadata()里面的套路addFileToList() ,它起作用了,但没有达到预期的效果,因为执行了这些操作,但不是第一次,只有第二次。这似乎是一个异步问题,但我不知道如何解决这个问题。
我能做些什么?我应该坚持我的脱钩想法吗getVideoMetadata()或者我应该将它嵌套在 addFileToList() 中和 async 搏斗/await ?

最佳答案

事实证明,对元数据的探测引入了竞争条件,因此我们应该构造代码,以便在回调之后流程继续:

const ffmpeg = require('fluent-ffmpeg')
var data
ffmpeg.ffprobe(file.name, (err, metadata) => {
    if (!err) {
        data = metadata
        continueDoingStuff()
    }
})

关于javascript - 使用 fluent-ffmpeg 将 ffprobe 元数据返回到另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67280181/

相关文章:

node.js - 如何将流从 h265 转换为 h264

javascript 在 Internet Explorer 中抛出异常

java - 如何在应用程序的文本字段中包含笑脸符号?

batch-file - 拖放ffmpeg批处理文件

c++ - 使用 FFmpeg(或类似工具)将应用程序输出录制为视频

javascript - FFMPEG 制作的 MP4 无法播放/打开

javascript - 如何用 Prestashop 产品列表中的图片替换第三个产品?

javascript - 动态更改 $.Dialog 上的 css 属性

android - FFMPEG 输出文件不包含任何流 [Android] video concat

ffmpeg - 在不中断 rtmp 流的情况下更新 ffmpeg 过滤器