node-ytdl-core, 在javascript中,Youtube下载程序

分享于 

8分钟阅读

GitHub

  繁體 雙語
Youtube video downloader in javascript.
  • 源代码名称:node-ytdl-core
  • 源代码网址:http://www.github.com/fent/node-ytdl-core
  • node-ytdl-core源代码文档
  • node-ytdl-core源代码下载
  • Git URL:
    git://www.github.com/fent/node-ytdl-core.git
    Git Clone代码到本地:
    git clone http://www.github.com/fent/node-ytdl-core
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/fent/node-ytdl-core
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    node-ytdl-core

    另一个youtube下载 MODULE。 仅使用Javascript和节点友好的流接口编写。

    Build StatusDependency Statuscodecov

    对于CLI版本,请查看 ytdlpully。

    用法
    constfs=require('fs');constytdl=require('ytdl-core');ytdl('http://www.youtube.com/watch?v=A02s8omM_hI')
    . pipe(fs.createWriteStream('video.flv'));
    API

    ytdl ( url,选项)

    尝试从给定的网址下载视频。 返回可以读的流 options 可以具有下列键

    • quality - 下载视频质量。 可以是 itag值值。itag值的列表或者 highest/lowest/highestaudio/highestvideo 值。 highestaudio/highestvideo 只分别偏爱音频/视频。 默认为 highest
    • filter - 可以为包含视频和音频,包含视频和包含视频的格式的格式,包含视频的格式,没有附加音频跟踪的格式进行筛选。 也可以是 audio 或者 audioonly。 你可以提供一个过滤函数,该函数通过每个可用的格式调用。 用于决定要下载的格式。 这里函数将 format 对象作为第一个参数,如果格式比较合适,则应该使用 return true。
    • format - 这可以是从 getInfo 返回的特定 format 对象。 这主要用于下载特定的视频或者音频流。 注:提供这里选项将忽略 filterquality 选项,因为格式是显式提供的。
    • range - 窗体中的字节范围 {start: INT, end: INT} 指定要下载的文件的一部分。 IE {start: 10355705,结束:12452856 }. 注意:这里下载文件的一部分,而不是单独拼接的视频。
    • begin - 开始下载视频的时间,支持格式 00: 00: 00,or,0,0或者毫秒数。 示例:1: 30,05: 10,123,10 m30s。 这个选项不能在超短( 小于 30 s ) 视频上运行,而且必须在or或者 上面 秒,见 #129. 它也可能不适用于某些格式,参见 #219
    • requestOptions 将合并到 miniget 调用的请求选项中,例如头。
    • highWaterMark - 视频下载到内存中的多少。 有关更多信息,请参阅 node的文档。
    • retries 在终止流之前允许执行的重试ytdl的数目。 默认值设置为 5.
    • lang - 语言的2个字符符号。 默认设置为"en"。
    // Example with `filter` option.ytdl(url, { filter: (format) =>format.container==='mp4' })
    . pipe(fs.createWriteStream('video.mp4'));
    事件:'信息"'
    • Object - 信息。
    • Object - 格式。

    获取视频哈希的info 时发出。 以及选择的格式元数据下载。 如果给定 startformat.url 可能会不同。

    有关信息和格式的示例的示例在示例文件夹中。

    事件:'''
    • http.ServerResponse - 响应。

    在找到视频响应并开始下载时发出。 可以用于获取下载的大小。 如果下载或者它需要重新连接到 YouTube,也会发出这个错误。

    事件:'''
    • Number - 块长度。
    • Number - 下载的总数。
    • Number - 总下载长度。

    每当接收到新区块时发出。 传递值descriping下载进度和已经解析的百分比。

    Stream#destroy ( )

    破坏基础连接。

    ytdl.getInfo(url, [options], [callback(err, info)] )

    如果只想从视频获取元信息,请使用这里选项。 如果未给出 callback,则返回 promise。

    ytdl.downloadFromInfo(info, options )

    一旦你接收到带有 getInfo 函数的视频的元数据,你可以传递该 info,以及它的他 optionsdownloadFromInfo

    ytdl.chooseFormat(formats, options )

    如果你希望使用选项 上面 选项自己选择格式,则可以使用。

    ytdl.getInfo(videoID, (err, info) {
     if (err) throw err;
     var format =ytdl.chooseFormat(info.formats, { quality:'134' });
     if (format) {
     console.log('Format found!');
     }
    })

    ytdl.filterFormats(formats, filter )

    ytdl.getInfo(videoID, (err, info) {
     if (err) throw err;
     var audioFormats =ytdl.filterFormats(info.formats, 'audioonly');
     console.log('Formats with only audio: '+audioFormats.length);
    })

    如果你只想使用某些格式,可以使用 filter 选项 上面

    ytdl.validateID(id )

    如果给定字符串满足youtube格式的ID,则返回 true。

    ytdl.validateURL(url )

    如果能够解析有效的视频标识,则返回 true。

    ytdl.getURLVideoID(url )

    从YouTube网址返回视频标识。

    ytdl.getVideoID(str )

    上面 ytdl.getURLVideoID() 相同,但可以直接调用视频,在这种情况下它返回它。 这是ytdl在内部使用的。

    限制

    ytdl无法下载属于以下内容的视频

    处理单独的流

    通常 1080p 或者更高的视频没有音频编码的音频。 音频必须单独下载,并通过适当的编码库进行合并。 ffmpeg 是使用最广泛的工具,有许多 node.js 模块可用。 使用从 ytdl.getInfo 返回的format 对象下载特定流以满足你的需要。 查看示例/ffmpeg。js的例子,以获得这样做的示例。

    如果它停止工作?

    Youtube一直在更新他们的网站,这并不是为了停止工作。 如果它不适用于你,你使用最新版本,请随时打开问题。 确保检查是否有一个已经存在相同错误的。

    如果你想帮助解决这个问题,首先看看错误的类型。 最常见的是

    
    Could not extract signature deciphering actions
    
    
    
    

    为了确保这实际上是ytdl内核的问题,在 test/irl-test.js 上运行测试。

    
    mocha test/irl-test.js
    
    
    
    

    这些测试不会被模仿,它们实际上试图开始下载一些视频。 如果这些失败,那么现在是调试的时候了。

    首先,你可以查看 /lib/sig.js 中的extractActions() 函数。

    安装
    
    npm install ytdl-core
    
    
    
    
    测试

    测试是用 mocha 编写的。

    npm test

    相关文章