node- Fluent-ffmpeg 转换为 mp3 不会触发任何“结束”或“完成”事件

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

我正在使用 ytdl-core 下载视频并使用 node- Fluent-ffmpeg 将其转换为 mp3。 ffmpeg 转换后的代码似乎在转换完成之前执行,因为尝试将 .mp3 文件上传到 Google Cloud Storage 存储桶会引发错误。我正在尝试检测“结束”或“完成”事件,但没有触发任何事件。

代码:

ytdl(url?.toString() as string)
    .once('data', (data) => {
      console.log('start', data);
    })
    .on('progress', async function (progress, downloaded, total) {
      console.log(parseInt(((downloaded / total) * 100).toString()) + '%');
      
    })
    .on('finish', async function () {
      console.log('Download finished...');
      
      console.log('using ffmpeg to convert into mp3');
      Ffmpeg({ source: `/Users/user/project/server/output/${videoId}.mp4` })
        .setFfmpegPath(ffmpeg.path)
        .toFormat('mp3')
        .saveToFile(`/Users/user/project/server/output/${videoId}.mp3`)
        .on('finish', () => {
          console.log('finished conversion');
        });
      console.log('after ffmpeg mp3 conversion');

      const storage = new Storage({
        keyFilename: `./key.json`,
      });

      const bucketName = 'bucketname';
      const bucket = storage.bucket(bucketName);
      let mp3_url;
      console.log(
        fs.existsSync(`/Users/user/project/server/output/${videoId}.mp3`)
      ); // returns false
      bucket.upload(
        `/Users/user/project/server/output/${videoId}.mp3`,
// Error uploading: Error: ENOENT: no such file or directory, open '/Users/me/project/server/output/RMvenf7E-Dg.mp3'
        {
          destination: `${userId}/${videoId}.mp3`,
        },
        function (err, file) {
          if (err) {
            console.error(`Error uploading: ${err}`);
          } else {
            console.log(`mp3 uploaded to ${bucketName}.`);
            console.log(file?.publicUrl());
          }
        }
      );

      
    .pipe(
      fs.createWriteStream(`/Users/me/project/server/output/${videoId}.mp4`)
    );

  console.log('after download and conversion');

  req.on('close', async () => {
    res.end();
  });
Error uploading: Error: ENOENT: no such file or directory, open '/Users/polo/makeklips/server/output/RMvenf7E-Dg.mp3'
[1] /Users/me/project/server/node_modules/.pnpm/[email protected]/node_modules/fluent-ffmpeg/lib/processor.js:182
[1]           handleExit(new Error('ffmpeg exited with code ' + code));
[1]                      ^
[1] Error: ffmpeg exited with code 1: Output #0, mp3, to '/Users/me/project/server/output/RMvenf7E-Dg.mp3':
[1] Output file #0 does not contain any stream
node.js google-cloud-platform ffmpeg fluent-ffmpeg ytdl
1个回答
0
投票

您的文件有多个路径(仔细检查

${userId}
是什么)。

  1. 您正在通过管道输出到
    /Users/me/[...]
    但之后
  2. 尝试从
    /User/user/[...]
  3. 上传
  4. 错误提示
    /Users/polo/makeklips/server/
© www.soinside.com 2019 - 2024. All rights reserved.