我正在尝试使用 fluent-ffmpeg
的ffprobe
获取文件的元数据并将其添加到列表中,但我想将获取元数据的过程与检查文件相关的方法分开,主要是因为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/