为什么 Fluent-ffmpeg 不能在异步 Promise 中工作?

问题描述 投票:0回答:1

我正在尝试同步流畅的 ffmpeg 和

await
它的完成。我把它包裹在
promise
中并等待它解决。

问题是在处理第二个块后它停止执行任何操作。我得到的输出是:

Processing: NaN% done
Processing: 12.710198594559962% done
Processing: 25.846254358525282% done

然后它就挂起并且什么都不做。我正在使用 NodeJS 的

PassThrough
将数据从 ffpmeg 传输到。如果我删除
promise
并正常使用,那么它就可以正常工作。但我需要承诺,因为此后还有其他代码必须等待 ffmpeg 首先完成。

import {PassThrough} from 'node:stream';
import FFMpeg from 'fluent-ffmpeg';

let PassThroughStream = new PassThrough();
    
function ffmpegPromise() {
               return new Promise((resolve, reject) => {
                    FFMpeg('/testvid.mp4')
                        .videoCodec('libx264')
                        .audioCodec('libmp3lame')
                        .size('640x480')
                        // Stream output requires manually specifying output formats
                        .format('mp4')
                        .outputOptions('-movflags dash')
                        .on('progress', function (progress) {
                            console.log('Processing: ' + progress.percent + '% done');
                        })
                        .on('error', function (err) {
                            console.log('An error occurred: ' + err.message);
                            reject(err);
                        })
                        .on('end', function () {
                            console.log('FFMpeg Processing finished!');
                            resolve()
                        })
                        .output(PassThroughStream, {end: false}).run();
    
            })
    
            }

await ffmpegPromise();
javascript node.js ffmpeg
1个回答
0
投票

通过这个方法你可以得到你需要的Promise。

为了同步进行处理,您需要删除await关键字。

这仍然允许您使用 Promise 并强制您的代码等待,而不是将其作为委托发送。

在这里阅读更多内容:MDN等待

© www.soinside.com 2019 - 2024. All rights reserved.