Need help with java-youtube-downloader?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

sealedtx
154 Stars 48 Forks Other 84 Commits 4 Opened issues

Description

Simple, almost zero-dependency java parser for retrieving youtube video metadata

Services available

!
?

Need anything else?

Contributors list

# 173,940
Shell
MATLAB
yolov2
Kotlin
58 commits
# 314,689
Scala
HTML
Android
4 commits

java-youtube-downloader

Simple java parser for retrieving youtube video metadata.

Library is not stable, because Youtube often changes web structure of its pages. I don't use this library regularly to find the errors. Thats why errors are fixed as soon as someone finds it and opens an issue. Feel free to report an error or sumbit a PR.

WARNING: Youtube API does not support a video download. In fact, it is prohibited - Terms of Service - II. Prohibitions.
WARNING: Downloading videos may violate copyrights!

This project is only for educational purposes. I urge not to use this project to violate any laws.

Usage

// init downloader
YoutubeDownloader downloader = new YoutubeDownloader();

// you can easly implement or extend default parsing logic YoutubeDownloader downloader = new YoutubeDownloader(new Parser()); // downloader configurations downloader.setParserRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"); downloader.setParserRetryOnFailure(1);

// parsing data String videoId = "abc12345"; // for url https://www.youtube.com/watch?v=abc12345 YoutubeVideo video = downloader.getVideo(videoId);

// video details VideoDetails details = video.details(); System.out.println(details.title()); ... System.out.println(details.viewCount()); details.thumbnails().forEach(image -> System.out.println("Thumbnail: " + image));

// get videos with audio List videoWithAudioFormats = video.videoWithAudioFormats(); videoWithAudioFormats.forEach(it -> { System.out.println(it.audioQuality() + " : " + it.url()); });

// filtering only video formats List videoFormats = video.findVideoWithQuality(VideoQuality.hd720); videoFormats.forEach(it -> { System.out.println(it.videoQuality() + " : " + it.url()); });

// itags can be found here - https://gist.github.com/sidneys/7095afe4da4ae58694d128b1034e01e2 Format formatByItag = video.findFormatByItag(136); if (formatByItag != null) { System.out.println(formatByItag.url()); }

File outputDir = new File("my_videos"); Format format = videoFormats.get(0);

// sync downloading File file = video.download(format, outputDir);

// async downloading with callback Future future = video.downloadAsync(videoFormats.get(0), outputDir, new OnYoutubeDownloadListener() { @Override public void onDownloading(int progress) { System.out.printf("Downloaded %d%%\n", progress); }

@Override
public void onFinished(File file) {
    System.out.println("Finished file: " + file);
}

@Override
public void onError(Throwable throwable) {
    System.out.println("Error: " + throwable.getLocalizedMessage());
}

});

// async downloading without callback Future future = video.downloadAsync(format, outputDir); File file = future.get(5, TimeUnit.SECONDS);

// cancel downloading future.cancel(true); // true is required to interrupt downloading thread

// live videos and streams if (video.details().isLive()) { System.out.println("Live Stream HLS URL: " + video.details().liveUrl()); }

// naming // by default file name will be same as video title on youtube, // but you can specify output file name File myAwesomeFile = video.download(format, outputDir, "myAwesomeName"); System.out.println(file.getName()); // myAwesomeName.mp4 // if file with such name already exits sufix will be added myAwesomeFile(1).mp4 // you may disable this feature by passing overwrite flag File myAwesomeFile = video.download(format, outputDir, "myAwesomeName", true);

// subtitles // you can get subtitles from video captions if you have already parsed video meta List subtitles = video.subtitles(); // NOTE: includes auto-generated // if you don't need video meta, but just subtitles use this instead List subtitles = downloader.getVideoSubtitles(videoId); // NOTE: does not include auto-generated

for (SubtitlesInfo info : subtitles) { Subtitles subtitles = info.getSubtitles() .formatTo(Extension.JSON3) .translateTo("uk"); // sync download String subtitlesData = subtitles.download(); // async download Future subtitlesFuture = subtitles.downloadAsync(callback/optional/); // to download using external download manager String downloadUrl = subtitles.getDownloadUrl(); }

// playlists

// parsing data String playlistId = "abc12345"; // for url https://www.youtube.com/playlist?list=abc12345 YoutubePlaylist playlist = downloader.getPlaylist(playlistId);

// playlist details PlaylistDetails details = playlist.details(); System.out.println(details.title()); ... System.out.println(details.videoCount());

// get video details PlaylistVideoDetails videoDetails = playlist.videos().get(0); System.out.println(videoDetails.title()); ... System.out.println(videoDetails.index());

// get video YoutubeVideo video = downloader.getVideo(videoDetails.videoId());

Include

Maven

  
    jitpack.io
    https://jitpack.io
  

  com.github.sealedtx
  java-youtube-downloader
  2.5.0

Gradle

allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
  }
}
dependencies {
  implementation 'com.github.sealedtx:java-youtube-downloader:2.5.0'
}

Android

android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
  // For Kotlin projects
  kotlinOptions {
    jvmTarget = "1.8"
  }
}

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.