Javascript 使用node.js的YouTube下载程序
所以我使用node.js创建YouTube下载程序。问题是我运行代码后已经创建了文件,但是文件是0kb,并且打印成功。我想要的是,当我成功下载视频时,程序必须打印成功,也不能创建文件。该文件必须在一个视频成功下载后创建Javascript 使用node.js的YouTube下载程序,javascript,node.js,Javascript,Node.js,所以我使用node.js创建YouTube下载程序。问题是我运行代码后已经创建了文件,但是文件是0kb,并且打印成功。我想要的是,当我成功下载视频时,程序必须打印成功,也不能创建文件。该文件必须在一个视频成功下载后创建 const播放列表=[ { 标题:“什么是DevOps”, 视频URL:“https://www.youtube.com/watch?v=mBBgRdlC4sc", }, { 标题:“DevOps简介”, videoId:“Me3ea4nUt0U”, 视频URL:“https:
const播放列表=[
{
标题:“什么是DevOps”,
视频URL:“https://www.youtube.com/watch?v=mBBgRdlC4sc",
},
{
标题:“DevOps简介”,
videoId:“Me3ea4nUt0U”,
视频URL:“https://www.youtube.com/watch?v=Me3ea4nUt0U",
},
{
标题:“DevOps初学者教程”,
videoId:“YSkDtQ2RA_c”,
视频URL:“https://www.youtube.com/watch?v=YSkDtQ2RA_c",
},
];
常数fs=要求(“fs”);
常量ytdl=需要(“ytdl核心”);
常量长度=playlist.length;
playlist.forEach((pl,i)=>{
const{videoUrl,title}=pl;
常数项=i+1;
ytdl(视频URL{
格式:“mp4”,
}).pipe(fs.createWriteStream(`${title}.mp4`));
log(`${item}/${length}-${title}下载成功`);
});代码>在编写完成之前,您正在记录“下载成功”。你有一些可能性。人们可能正在“WriterStream”上收听某些事件
从文档中:
//创建可写流
const writeableStream=fs.createWriteStream(`${title}.mp4`);
//正在侦听“完成”事件
writeableStream.on('finish',()=>{
log(`${item}/${length}-${title}下载成功`);
});
//将其插入ReadableStream
ytdl(视频URL{
格式:“mp4”,
}).管道(可写流);
现在,这将在写入开始时创建一个新文件。我建议使用一个临时名称,如filename.temp.mp4
,然后在完成编写后重命名它。Hey@kennethreyt!一旦进程开始将/写入文件,就会创建该文件。你通常看到的是“临时”文件的使用。同一个文件,但带有前缀,例如“temp_filename”或“filename.temp.mp4”。一旦完成,它将被重命名。另一方面,您正在处理异步代码。在写作结束之前,您正在记录“成功”。非常感谢您,先生,我感谢您的评论。我将在成功下载视频+1后重命名它。另一方面,如果与问题中的.forEach
一起使用,这将并行下载所有视频。要以系列方式下载它们,可以使用for
循环和async/await:非常感谢,先生,非常感谢您的评论。我将尝试在成功下载后重命名该文件。我可以提供帮助