sci*_*lic 5 javascript ffmpeg node.js async-await fluent-ffmpeg
我正在编写一个程序,需要使用 ffmpeg 多次处理视频。ffmpeg 代码(如下)位于承诺的“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!'));
});
Run Code Online (Sandbox Code Playgroud)
此后还有另一个 ffmpeg 函数(相同,但宽高比不同),然后是带有一些其他函数的“then”语句。
问题是这个 ffmpeg 函数异步运行,并且下一个语句(使用 ffmpeg func 的结果文件)在完成执行之前执行,所以我希望它同步运行。我尝试过 async wait (如下),但它仍然异步运行。代码有什么问题?
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));
}
}
Run Code Online (Sandbox Code Playgroud)
小智 12
创建一个function
withpromise
并使用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))
})
})
}
Run Code Online (Sandbox Code Playgroud)
现在只需使用函数ffmpegSync
和await
。
归档时间: |
|
查看次数: |
9555 次 |
最近记录: |