很多人喜欢逛油管看视频,自然就会有一些喜欢的收藏集或者视频作者,有时候想要下载下来保存在本地播放,这样的话就不用每次FQ,毕竟有些代理的速度并不是很理想(如果你的代理速度炒鸡快的话,请忽略这篇文章)。

当你想下载油管视频,又觉得一些下载网站或者工具无法满足你的要求的时候,比如我想定制下载的清晰度,我想只下载视频或者只下载音频,又或者想下载字幕等等。这时候下载工具就无法满足你了,今天这里就安利一个强大的工具youtube-dl.看github上3W多个star,就知道这工具很厉害了。下面简单说下如何使用

安装youtube-dl:

youtube-dl is a command-line program to download videos from YouTube.com and other video

这里推荐使用pip安装(需要python环境):

$ pip install youtube-dl

检查安装是否成功:

$ youtube-dl
Usage: youtube-dl [OPTIONS] URL [URL...]

youtube-dl: error: You must provide at least one URL.Type youtube-dl --help to see a list of all options.

安装ffmpeg

ffmpeg是一个用来合成转换音频视频的工具:

A complete, cross-platform solution to record, convert and stream audio and video.

youtube-dl下载完音频视频后会调用这个工具进行合成,所以也需要安装一下ffmpeg:

1.windows安装:

直接在官网下载zip包,解压后,将path/to/ffmpeg/bin目录加入环境变量即可.这里不多说了

2.ubuntu安装:

ffmpeg在ubuntu14.04中已经被libav取代。但这个决定已经被逆转了,在ubuntu15.04中又可用了。所以如果你使用的是ubuntu15.04以上的版本,可以使用sudo apt-get install ffmpeg命令进行安装,如果你是ubuntu14.04及以下的版本,需要从mc3man ppa源安装:

  • 添加源

    $ sudo add-apt-repository ppa:mc3man/trusty-media
  • 出现以下提示,请安

*Please note that if using this ppa I would *not* try upgrading to 14.10/15.04, ect. Do a fresh install instead. The intent here is just for users wishing to stay on 14.04*
If upgrading anyway use ppa-purge first -
sudo ppa-purge  ppa:mc3man/trusty-media

Also note that with apt-get a sudo apt-get dist-upgrade is needed for initial setup & with some package upgrades
 More info: https://launchpad.net/~mc3man/+archive/ubuntu/trusty-media
Press [ENTER] to continue or ctrl-c to cancel adding it
  • 更新package list:

    $ sudo apt-get update
    $ sudo apt-get dist-upgrade
  • 安装ffmpeg:

    $ sudo apt-get install ffmpeg
  • 检查是否安装成功:

    $ ffmpeg
    ffmpeg version N-89777-g6e80079a28 Copyright (c) 2000-2018 the FFmpeg developers
      built with gcc 7.2.0 (GCC)
      configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-amf --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
      libavutil      56.  7.100 / 56.  7.100
      libavcodec     58.  9.100 / 58.  9.100
      libavformat    58.  3.100 / 58.  3.100
      libavdevice    58.  0.100 / 58.  0.100
      libavfilter     7. 11.101 /  7. 11.101
      libswscale      5.  0.101 /  5.  0.101
      libswresample   3.  0.101 /  3.  0.101
      libpostproc    55.  0.100 / 55.  0.100
    Hyper fast Audio and Video encoder
    usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

    使用youtube-dl

命令使用也很简单:

$ youtube-dl [OPTIONS] URL [URL...]

其强大之处就在于命令选项非常丰富,支持各种功能,下面简单介绍一些:

1.查看视频所有类型:

$ youtube-dl -F <url>
## 或者:
$ youtube-dl --list-formats <url>

该命令会列出该视频所存在的所有格式,并不会进行下载

shell $ youtube-dl -F https://www.youtube.com/watch?v=dfnCAmr569k [youtube] sRVRN2DlDp4: Downloading webpage [youtube] sRVRN2DlDp4: Downloading video info webpage [youtube] sRVRN2DlDp4: Extracting video information [info] Available formats for sRVRN2DlDp4: format code extension resolution note 249 webm audio only DASH audio 55k , opus @ 50k, 1.83MiB 250 webm audio only DASH audio 71k , opus @ 70k, 2.37MiB 140 m4a audio only DASH audio 128k , m4a_dash container, mp4a.40.2@128k, 4.72MiB 171 webm audio only DASH audio 131k , vorbis@128k, 4.01MiB 251 webm audio only DASH audio 137k , opus @160k, 4.58MiB 278 webm 256x144 144p 99k , webm container, vp9, 24fps, video only, 3.32MiB 160 mp4 256x144 144p 113k , avc1.4d400c, 24fps, video only, 2.71MiB 242 webm 426x240 240p 228k , vp9, 24fps, video only, 6.75MiB 133 mp4 426x240 240p 248k , avc1.4d4015, 24fps, video only, 5.10MiB 243 webm 640x360 360p 415k , vp9, 24fps, video only, 12.19MiB 134 mp4 640x360 360p 637k , avc1.4d401e, 24fps, video only, 12.23MiB 244 webm 854x480 480p 769k , vp9, 24fps, video only, 20.70MiB 135 mp4 854x480 480p 1187k , avc1.4d401e, 24fps, video only, 22.97MiB 247 webm 1280x720 720p 1539k , vp9, 24fps, video only, 40.88MiB 136 mp4 1280x720 720p 2364k , avc1.4d401f, 24fps, video only, 42.75MiB 248 webm 1920x1080 1080p 2703k , vp9, 24fps, video only, 74.20MiB 137 mp4 1920x1080 1080p 4331k , avc1.640028, 24fps, video only, 78.09MiB 271 webm 2560x1440 1440p 9057k , vp9, 24fps, video only, 197.73MiB 264 mp4 2560x1440 1440p 10409k , avc1.640032, 24fps, video only, 203.63MiB 313 webm 3840x2160 2160p 18092k , vp9, 24fps, video only, 577.79MiB 17 3gp 176x144 small , mp4v.20.3, mp4a.40.2@ 24k 36 3gp 320x180 small , mp4v.20.3, mp4a.40.2 43 webm 640x360 medium , vp8.0, vorbis@128k 18 mp4 640x360 medium , avc1.42001E, mp4a.40.2@ 96k 22 mp4 1280x720 hd720 , avc1.64001F, mp4a.40.2@192k (best)

上述示例展示了一个油管视频的每种清晰度,格式 以及format code

2.下载指定质量的视频和音频并自动合并

$ youtube-dl -f <format code> <url>

其中format code 就是youtube-dl -F <url>命令列出来的第一列结果。这里其实隐含了对ffmpeg的使用,youtube-dl会去寻找ffmpeg并用其进行音视频合并操作

3.对视频质量和音频进行定制下载:

$ youtube-dl -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" <url>

上述示例的意思是:下载最高质量的mp4格式,或者没有mp4格式的情况下 下载最高质量的其他格式,其他示例请参考format-selection-examples

4.下载字幕

对于国内的同学来说,有可能需要字幕,那么youtube-dl也支持字幕下载。

# 下载字幕
$ youtube-dl --write-sub <url> 

# 下载该视频所有可用的字幕
$ youtube-dl --write-sub --all-subs <url>

# 下载自动生成的字幕(仅限youtube)
$ youtube-dl --write-auto-sub <url>

5.字幕选择和转换

对于国内大多数播放器来说,youtube下载的vtt字幕并不能正确加载,而如果能转换成srt字幕就完美了,youtube-dl自然也支持这种功能啦,还可以选择对应语言的字幕进行下载呢:

# 选择英文字幕并转换成srt格式,同时下载视频
$ youtube-dl --sub-lang en --convert-subs srt --write-sub <url>

6.下载视频列表

如果你一个视频列表需要下载,youtube-dl也是支持的,用法没啥不同:

$ youtube-dl <palylist_url>

youtube-dl 会识别你的url是单个视频还是视频列表,并进行下载。

  1. 下载视频自定义文件名:

    # 使用 -o 参数
    $ youtube-dl -o "%(upload_date)s-%(title)s.%(ext)s" <url>

    上述命令指定下载的视频文件采用 上传日期 + 视频名称+视频扩展名 作为文件名。更多参数请看youtube-dl output-template

组合上面所说的指定视频质量,下载字幕,转换字幕等命令在一起:

$ youtube-dl -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best" --sub-lang en --convert-subs srt -o "%(upload_date)s-[%(title)s].%(ext)s" --write-sub https://www.youtube.com/watch?v=dfnCAmr569k

这样下载下来的视频,就可以直接享用了

对了,本地下载需要你的代理开启全局模式。如果不想开启全局模式的话,需要在每一条命令后面加上代理设置:--proxy "https://127.0.0.1:1080"

嵌入youtube-dl

youtube-dl不但是一个很好的命令行工具,而且还支持嵌入代码使用,下面看一个简单的示例:

from __future__ import unicode_literals
import youtube_dl

class MyLogger(object):
    def debug(self, msg):
        print(msg)

    def warning(self, msg):
        print(msg)

    def error(self, msg):
        print(msg)

def my_hook(d):
    if d['status'] == 'finished':
        print('Done downloading, now converting ...')

ydl_opts = {
    'format': 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best',
    'outtmpl':'%(upload_date)s-[%(title)s].%(ext)s',
    'writeautomaticsub':True,
    'subtitleslangs':'en',
    'logger': MyLogger(),
    'progress_hooks': [my_hook],
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download(['https://www.youtube.com/watch?v=dfnCAmr569k'])

代码很简单,重点在于ydl_opts这个字典,里面的每一项就是命令行中youtube-dl的一个参数,是不是很方便?

自定义转换字幕文件

如果youtube-dl的字幕转换无法满足要求的话,你还可以自己写代码进行转换,这里再安利一个字幕转换的库pycaption。支持各种流行的视频字幕格式

demo:

from pycaption import WebVTTReader, SRTWriter

def vtt_to_srt():
    vtt_content = """WEBVTT Kind: captions Language: en   00:00:03.000 --> 00:00:04.766 size:88% position:56% ♪ I WANNA BE YOUR END GAME ♪   00:00:06.000 --> 00:00:08.000 ♪ I WANNA BE YOUR FIRST STRING ♪ """

    caption_set = WebVTTReader().read(vtt_content)
    srt_content = SRTWriter().write(caption_set)
    print(srt_content)

vtt_to_srt()

怎么样,是不是很简单?

好了,差不多介绍完了,关于youtube-dl的更多使用姿势,请自行解锁(逃)。


参考:

本文同时发布在掘金segmentfault

一键下载你的youtube视频的更多相关文章

  1. YouTube视频下载的12个软件(Win和Mac)

    如今,观看视频已经成为人们生活中重要的一部分.很多时候,我们都需要用到视频,比如教育用途.会议报告.休闲娱乐以及广告宣传等.如果你觉得有时候资源不好找的话,不放去看下YouTube.YouTube是世 ...

  2. YouTube视频下载方法汇总

    YouTube是一个视频共享网站,YouTuber们自己拍摄并制作视频,上传到YouTube,然后用户观看.分享并评论这些内容.虽然在线观看很方便,但是有些时候你却只能处于离线的状态,比如出差.旅游. ...

  3. You-Get 一键下载全网视频资源

      下载视频 无论是单纯的下载视频收藏,还是以便离线收看,都离不开“下载”,好的工具让你把注意力更好的放在视频的本身,而不用考虑要如何下载视频.下载视频从来不乏方法,之前也介绍了下载 Youtube ...

  4. youtube视频下载

    开你的电脑,然后打开你的浏览器,浏览器可以是IE.Chrome.Firefox等等   在浏览器中输入这个网址:en.savefrom.net,点击Enter键,进入这个网页:   打开你需要下载的y ...

  5. 下载的youtube视频

    youtube 视频下载方法[详解]   1.打开网址: http://kej.tw/flvretriever/. 2.输入要下载的youtube视频的网址. 3.点击右侧RETRIEVE NOW ! ...

  6. 在线Youtube视频下载,修改文本,剪切制作动画的最新方法

    刚刚(减去编写本文章的时间,大概20分钟前吧)在看国外最新技术资讯的时候发现有个方法可以让我们快速去下载Youtube上面的视频,不敢独享,我自己都没有怎么玩就所以立刻post上来广而告之,希望对大家 ...

  7. Python:使用youtube-dl+ffmpeg+FQ软件下载youtube视频

    声明:本文所述内容都是从http://blog.csdn.net/u011475134/article/details/71023612博文中学习而来. 背景: 一同学想通过FQ软件下载一些youtu ...

  8. youtube-dl下载youtube视频时查看分辨率以及选择分辨率下载

    1.查看分辨率: youtube-dl -F https://www.youtube.com/watch?v=_NMf1TpiFwY 2.根据分辨率下载,比如下载1280*720的mp4,前面的数字是 ...

  9. python下载youtube视频

    谷歌开源了一个新的数据集,BoundingBox,(网址在这里)这个数据集是经过人工标注的视频数据集,自然想将它尽快地运用在实际之中,那么首先需要将其下载下来:可以看到网址上给出的是csv文件,该文件 ...

随机推荐

  1. TCP传输中序号与确认序号的交互

    本实验通过SSH远程登录server,然后使用Wireshark抓包分析. 开头的三次握手已经省略.关于序号的交互过程.须要记住一点:TCP首部中的确认序号表示已成功收到字节,但还不包括确认序号所指的 ...

  2. 前端笔记---塌陷top

    一.在设置盒子div的子元素的外边框margin-top,子元素属性不起作用,父元素下沉: <!DOCTYPE html> <html lang="en"> ...

  3. junit初探

    由于公司规模不大,所以测试方面一直不是很正规,都是做完一个功能,稍微测试一下,没有做单元测试,所以自然也没有接触过类似于junit这类测试的工具. 今天有空研究了一下junit,顾名思义,这是给jav ...

  4. 自学WPF之Binding(二)

    没有Source的Binding,使用ContentText作为Binding源: 上一篇是把CLR类型对象当作指定为Binding的Source,两种方法:一是把对象赋值给Binding.Sourc ...

  5. 翻译:CREATE DATABASE语句

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  6. 深入理解计算机系统_3e 第六章家庭作业 CS:APP3e chapter 6 homework

    6.22 假设磁道沿半径均匀分布,即总磁道数和(1-x)r成正比,设磁道数为(1-x)rk: 由题单个磁道的位数和周长成正比,即和半径xr成正比,设单个磁道的位数为xrz: 其中r.k.z均为常数. ...

  7. python self

    Python要self的理由 Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数(self),但在调用这个方法的时候不必为这个参数赋值(显胜于隐的引发). Pyt ...

  8. 【Web性能进阶】1.无线网络基础

    一.无所不在的连接 针对不通的使用场景,无线网络技术有很多种. 鉴于无线网络技术如此多样,笼统地概括所有无线网络的性能优化手段是不可能的.好在大多数无线技术的原理都是相通的,衡量性能的指标和约束条件也 ...

  9. 关于close和shutdown

    我们知道TCP是全双工的,可以在接收数据的同时发送数据.假设有主机A在和主机B通信,可以认为是在两者之间存在两个管道.就像这样:A ---------> BA <--------- B 1 ...

  10. 【转】Android开发之数据库SQL

    android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 android中采用的数据库是SQLi ...