我正在使用 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
您的文件有多个路径(仔细检查
${userId}
是什么)。
/Users/me/[...]
但之后/User/user/[...]
和 /Users/polo/makeklips/server/