package main
import (
"fmt"
"log"
"github.com/kkdai/youtube/v2"
)
// location to save your Videos in Windows directoray
var path string = "C:/Users/ayoubali/Downloads/Video"
func finish() {
fmt.Println("download done")
}
func downloadSingleVideo() {
var link string
fmt.Print("Please enter the video URL: ")
fmt.Scanln(&link)
client := youtube.Client{}
video, err := client.GetVideo(link)
if err != nil {
log.Fatalf("Error getting video: %v", err)
}
fmt.Printf("The video duration is:\n %v minutes\n -------------------\n", video.Duration.Minutes())
stream, _, err := client.GetStream(video, &video.Formats[0])
if err != nil {
log.Fatalf("Error getting video stream: %v", err)
}
err = client.Download(stream, path, video.Title+".mp4")
if err != nil {
log.Fatalf("Error downloading video: %v", err)
}
finish()
}
func downloadAudio() {
var link string
fmt.Print("Please enter the video URL: ")
fmt.Scanln(&link)
client := youtube.Client{}
video, err := client.GetVideo(link)
if err != nil {
log.Fatalf("Error getting video: %v", err)
}
fmt.Printf("The audio duration is:\n %v minutes\n -------------------\n", video.Duration.Minutes())
stream, _, err := client.GetStream(video, &video.Formats[len(video.Formats)-2])
if err != nil {
log.Fatalf("Error getting audio stream: %v", err)
}
err = client.Download(stream, path, video.Title+".mp3")
if err != nil {
log.Fatalf("Error downloading audio: %v", err)
}
finish()
}
func downloadPlaylist() {
var playlistLink string
fmt.Print("Please enter the playlist URL: ")
fmt.Scanln(&playlistLink)
client := youtube.Client{}
playlist, err := client.GetPlaylist(playlistLink)
if err != nil {
log.Fatalf("Error getting playlist: %v", err)
}
for _, video := range playlist.Videos {
stream, value, err := client.GetStream(video, &video.Formats[0])
if err != nil {
log.Printf("Error getting video stream for %v: %v", value+1, video.Title, err)
continue
}
err = client.Download(stream, path, video.Title+".mp4")
if err != nil {
log.Printf("Error downloading video %v: %v", video.Title, err)
continue
}
}
finish()
}
func main() {
var userInput string
fmt.Println(`Choose, What do you want to download ?
"s" => Single video
"a" => Audio
"l" => Playlist`)
fmt.Scanln(&userInput)
switch userInput {
case "s":
downloadSingleVideo()
case "a":
downloadAudio()
case "l":
downloadPlaylist()
default:
fmt.Printf(`sorry this command "%v" is not found`, userInput)
}
}
Created
April 27, 2023 08:37
-
-
Save ayoubzulfiqar/98a59b8102f6d350a14a72c98da94484 to your computer and use it in GitHub Desktop.
This is simple golang script that download YOUTUBE Videos, Audios, as well as Playlist
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment