initial commit

This commit is contained in:
2025-05-27 00:28:27 +02:00
parent 4d3be5c80a
commit a81db2b8d1
7 changed files with 204 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
yt_download
ytdlp-honey.sh

2
Makefile Normal file
View File

@ -0,0 +1,2 @@
yt_download:
gcc -ansi -I . -L. -ggdb -o yt_download yt_download.c -Wl,-Bstatic -lstrops -Wl,-Bdynamic

23
move_audio.sh Executable file
View File

@ -0,0 +1,23 @@
#!/usr/bin/env bash
[[ -z $1 ]] && echo 'No arguments specified' && exit 1
if [[ -d $1 ]]; then
cd "$1"
else
echo 'Specified path does not exist' && exit 1
fi
folders=("audio" "thumbnails" "metadata" "descriptions")
for folder in "${folders[@]}"; do
[[ ! -d $folder ]] && mkdir "$folder"
done
mv *.opus audio > /dev/null 2>&1
mv *.jpg thumbnails > /dev/null 2>&1
mv *.jpeg thumbnails > /dev/null 2>&1
mv *.png thumbnails > /dev/null 2>&1
mv *.webp thumbnails > /dev/null 2>&1
mv *.info.json metadata > /dev/null 2>&1
mv *.description descriptions > /dev/null 2>&1

24
move_video.sh Executable file
View File

@ -0,0 +1,24 @@
#!/usr/bin/env bash
[[ -z $1 ]] && echo 'No arguments specified' && exit 1
if [[ -d $1 ]]; then
cd "$1"
else
echo 'Specified path does not exist' && exit 1
fi
folders=("video" "thumbnails" "metadata" "descriptions" "subs")
for folder in "${folders[@]}"; do
[[ ! -d $folder ]] && mkdir "$folder"
done
mv *.mkv video
mv *.jpg thumbnails
mv *.jpeg thumbnails
mv *.png thumbnails
mv *.webp thumbnails
mv *.info.json metadata
mv *.description descriptions
mv *.vtt subs

25
yt-dlp_audio.conf Normal file
View File

@ -0,0 +1,25 @@
# Uses best audio
-f bestaudio
# Extracts the audio
--extract-audio
# Uses best quality
--audio-quality 0
# opus is the best you can get from youtube
--audio-format opus
# Concurrent download of fragments
--concurrent-fragments 8
# Cache
--cache-dir /tmp/yt-dlp/cache
# Cookies
--cookies /mnt/youtube/cookies.txt
# Chill out
--sleep-requests 1.25
--min-sleep-interval 60
--max-sleep-interval 90

41
yt-dlp_video.conf Normal file
View File

@ -0,0 +1,41 @@
# best video and audio
-f bestvideo+bestaudio
# Thumbnail
--write-thumbnail
--embed-thumbnail
# Add chapters
--embed-chapters
# Embed info json
--write-info-json
--embed-info-json
# Metadata
--embed-metadata
# Description
--write-description
# Subtitles
--sub-langs en.*
--write-subs
--embed-subs
# Concurrent download of fragments
--concurrent-fragments 8
# Cache
--cache-dir /tmp/yt-dlp/cache
# Cookies
--cookies /mnt/youtube/cookies.txt
# Merge downloaded video and audio into a mkv file
--merge-output-format mkv
# Chill out
--sleep-requests 1.25
--min-sleep-interval 60
--max-sleep-interval 90

87
yt_download.c Normal file
View File

@ -0,0 +1,87 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int download(char *path, char *url, char is_audio) {
int ret;
char *args[10];
args[0] = "yt-dlp";
args[1] = "--config-locations";
if (is_audio) {
args[2] = "/mnt/youtube/yt-dlp_audio.conf";
} else {
args[2] = "/mnt/youtube/yt-dlp_video.conf";
}
args[3] = "--download-archive";
if (is_audio) {
char *buf = malloc(strlen(path) + 1);
sprintf(buf, "%s/downloaded_audio.txt", path);
args[4] = buf;
} else {
char *buf = malloc(strlen(path) + 1);
sprintf(buf, "%s/downloaded_video.txt", path);
args[4] = buf;
}
args[5] = "--paths";
args[6] = path;
args[7] = "--yes-playlist";
args[8] = url;
args[9] = 0;
int pid = fork();
if (pid == -1) {
printf("Couldn't fork'\n");
return 1;
} else if (pid > 0) {
waitpid(pid, &ret, 0);
} else {
execvp(args[0], args);
}
free(buf);
return ret;
}
int main(int argc, char **argv) {
if (argc != 4) {
fprintf(stderr, "Incorred amount of arguments\n");
}
char *path;
char *url;
char is_audio;
size_t i;
for (i = 1; i < 4; i++) {
if (argv[i][0] == '-') {
if (strcmp(argv[i], "-audio") == 0) {
is_audio = 1;
} else if (strcmp(argv[i], "-video") == 0) {
is_audio = 0;
} else {
fprintf(stderr, "Invalid option: %s\n", argv[i]);
return 1;
}
} else if (strstr(argv[i], "https://")) {
url = argv[i];
} else {
path = argv[i];
}
}
if (!path) {
fprintf(stderr, "No path specified\n");
return 1;
}
if (!url) {
fprintf(stderr, "No valid url specified\n");
return 1;
}
int ret;
ret = download(path, url, is_audio);
if (ret != 0) {
fprintf(stderr, "Download Failed\n");
return 1;
}
return 0;
}