GoTube
Overview
This repository contains a single-file implementation of YouTube video downloader written in Go. It does not require any third-party packages, only built-in packages from the standard library. The code is compact and easily-readable.
Installation
You can fetch one of the executable binaries (preferably latest one) from Releases. The binaries only support Windows (32 and 64 bit) and Linux (32 and 64 bit) this time.
You can also install GoTube directly from command line. Simply just type a command below in your terminal:
go get github.com/marethyu/gotube
Building From Source
Run the following commands:
git clone https://github.com/marethyu/gotube.git
cd gotube
go get golang.org/x/sync/errgroup
go build gotube.go
How It Works?
When GoTube receives a YouTube video URL as an input, it will extract a video id portion of the URL. Then it sends a HTTP GET request to a server through URL https://www.youtube.com/get_video_info
with the video id as a query string. The GET request will return an encoded data containing YouTube video data which will be decoded by GoTube. It will then extract the video's title, file format and its download URL from the data. After getting all necessary data, GoTube makes a video file with specified title and file format in User's OS and sends another HTTP GET request to the download URL. The data received through the GET request will be copied to the created video file.
Steps:
- GoTube begins by extracting a video id from a YouTube URL (ex. if the URL is
https://www.youtube.com/watch?v=9aUlHLaVmkc
, GoTube will extract 9aUlHLaVmkc
part).
- GoTube sends an HTTP GET request to a server through
https://www.youtube.com/get_video_info
with the video id as a query string (ex. using id from the previous example, https://www.youtube.com/get_video_info?video_id=9aUlHLaVmkc
).
- GoTube retrieves the video's title, file format and its download URL from an encoded data received through the GET request.
- GoTube creates a video file in User's OS and make another GET request through the download URL.
- GoTube copies contents of data received through the GET request to the created video file.
Example Usage
Basic (install to the current directory):
gotube https://www.youtube.com/watch?v=2fsMUqYix0c
Download multiple videos:
gotube https://www.youtube.com/watch?v=2fsMUqYix0c https://www.youtube.com/watch?v=wJMkvlTAzHc
Install to the specified download directory (<download directory>):
gotube -outdir=<download directory> https://www.youtube.com/watch?v=MXStYQSLd_M
With verbose option:
gotube -v https://www.youtube.com/watch?v=wJMkvlTAzHc
Option to download audio (requires ffmpeg, get one here if you don't have one installed):
gotube -a https://www.youtube.com/watch?v=Hh_HyNfyOKs
TODO
Contributing
I appreciate any kind of contributions. It can include code changes, new features and recommendations.
License
It's licensed under BSD-3-Clause.