gpt4 book ai didi

javascript - 流畅的ffmpeg没有同步运行

转载 作者:行者123 更新时间:2023-12-04 22:45:10 24 4
gpt4 key购买 nike

我正在编写一个程序,我需要使用 ffmpeg 多次处理视频。 ffmpeg 代码(如下)位于 promise 的“then”语句中。

ffmpeg(path)
.size('640x?')
.aspect('1:1')
.autopad('#682BAB')
.saveToFile(`${userDirPath}/11-${userFileName}`)
.on('end', () => {
ffmpeg()
.input('test-11-start.mp4')
.mergeAdd(`${userDirPath}/11-${userFileName}`)
.mergeAdd('test-11-end.mp4')
.mergeToFile(`${userDirPath}/11-final-${userFileName}`, 'temp/')
.on('end', () => console.log('FFmpeg done!'));
});

在此之后还有另一个 ffmpeg 函数(相同,但具有不同的纵横比),然后是带有其他一些函数的“then”语句。

问题是这个 ffmpeg 函数异步运行,并且下一个语句(使用 ffmpeg func 的结果文件)在它完成执行之前执行,所以我希望它同步运行。我已经尝试过异步等待(如下),但它仍然异步运行。代码有什么问题?
async function ffmpegMerge() {
try {
await ffmpeg(path)
.size('640x?')
.aspect('1:1')
.autopad('#682BAB')
.saveToFile(`${userDirPath}/11-${userFileName}`)
.on('end', () => {
ffmpeg()
.input(`test-11-start.mp4`)
.mergeAdd(`${userDirPath}/11-${userFileName}`)
.mergeAdd(`test-11-end.mp4`)
.mergeToFile(`${userDirPath}/11-final-${userFileName}.mp4`, 'temp/')
.on('end', () => console.log('FFmpeg done!'));
})
}
catch (err) {
return Promise.reject(new Error(err));
}
}

最佳答案

创建 functionpromise并使用 await等到function已解决。
这是使用 ffmpeg 的示例同步:

function ffmpegSync(){
return new Promise((resolve,reject)=>{
ffmpeg(path)
.size('640x?')
.aspect('1:1')
.autopad('#682BAB')
.saveToFile(`${userDirPath}/11-${userFileName}`)
.on('end', () => {
ffmpeg()
.input(`test-11-start.mp4`)
.mergeAdd(`${userDirPath}/11-${userFileName}`)
.mergeAdd(`test-11-end.mp4`)
.mergeToFile(`${userDirPath}/11-final-${userFileName}.mp4`, 'temp/')
.on('end', () => console.log('FFmpeg done!'));
resolve()
})
on('error',(err)=>{
return reject(new Error(err))
})
})
}
现在只需使用函数 ffmpegSyncawait .

关于javascript - 流畅的ffmpeg没有同步运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59331821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com