youtube-dl, now yt-dlp
Written by pmd - - no commentsyoutube-dl is a usefull packet to download youtube video through command line. GitHub.
List what to download
First step is to list what youtube video you wanna download and convert to mp3 file:
2 files to put on a web server which are:
- liste.txt which must be
chmod 777
(index.php will write links in this file) - index.php
<html>
<head>
<title>youtube-dl</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
width: 550px;
font-size: 75%;
}
p {
font-family: "Lucida Console", "Courier New", monospace;
white-space: nowrap
}
li {
font-family: "Lucida Console", "Courier New", monospace;
white-space: nowrap
}
hr {
border: 0;
border-bottom: 1px dashed #CCCCCC;
background: #FFFFFF;
}
input[type=text], select {
width: 80%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
}
input[type=submit] {
width: 80%;
background-color: #4CAF50;
color: white;
padding: 14px 20px;
margin: 8px 0;
border: none;
border-radius: 4px;
cursor: pointer;
}
input[type=submit]:hover {
background-color: #45a049;
}
div {
border-radius: 5px;
background-color: #f2f2f2;
padding: 20px;
overflow:auto;
width: 500px;
}
</style>
</head>
<body>
<span style="white-space: nowrap">
<div>
<p>
<?php
if(isset($_POST['field1']))
{
$data = $_POST['field1'] . "\r\n";
$ret = file_put_contents('liste.txt', $data, FILE_APPEND | LOCK_EX);
if($ret === false) {
echo "There was an error writing this file.";
}
else {
echo "$ret bytes written to file.";
}
}
else {
echo "No post data to process.";
}
?>
</p>
</div>
<hr>
<div>
<p>Format to be respected:</p>
<ol>
<li>« https://www.youtube.com/watch?v=1YRW1QRKTBc »</li>
<li>« https://youtu.be/9cBtJYI6itg »</li>
<li>« https://soundcloud.com/hungry-music/nto-alter-ego »</li>
</ol>
<form action="index.php" method="POST">
<input type="text" id="fname" name="field1" placeholder="https://www.youtube.com/watch?v=1YRW1QRKTBc"><br />
<input type="submit" value="Submit">
</form>
</div>
<hr>
<div>
<p>Next link(s) to be downloaded and saved to mp3 files:</p>
<p>
<?php
echo nl2br(file_get_contents( "liste.txt" ));
?>
</p>
</div>
<hr>
<div>
<p>
Logs (last 200 lines): <br />
<?php
//echo nl2br(file_get_contents( "/path/to/history.txt" ));
echo nl2br(trim(implode("", array_slice(file("/path/to/history.txt"), -200))));
?>
</p>
</div>
</body>
</html>
Secure input form
https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/
http://www.htaccesstools.com/htpasswd-generator/
auth_basic "Иди на хуй мозгоёб!!!";
auth_basic_user_file /path/to/.htpasswd;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}
Restart nginx:
Download script
He depends on:
- /path/to/liste_en_cours.txt
- /path/to/history.txt
filename="$1"
liste_en_cours=/path/to/Downloads/youtube_auto/liste_en_cours.txt
cp -f $1 $liste_en_cours
sleep 1
echo -n > $1
echo " " >> /path/to/Downloads/youtube_auto/history.txt
date >> /path/to/Downloads/youtube_auto/history.txt
while read -r line
do
name="$(echo $line | sed 's/\r//g')"
echo -n "$name | " >> /path/to/Downloads/youtube_auto/history.txt
page="$(wget -O - $name)"
echo $page | sed -n 's/.*<title>\(.*\)<\/title>.*/\1/ip;T;q' >> /path/to/Downloads/youtube_auto/history.txt
/usr/local/bin/youtube-dl -f bestaudio $name --extract-audio --audio-format mp3 -o "/path/to/Downloads/youtube_auto/downloads/%(title)s.%(ext)s" | grep ffmpeg | grep mp3 | sed 's/.*\//===> /' | sed 's/mp3.*/mp3/' >> /path/to/Downloads/youtube_auto/history.txt
done < "$liste_en_cours"
mv -f /path/to/Downloads/youtube_auto/downloads/* /path/to/Music/youtube
#All big files goes to folder Mixes
for file in /path/to/Music/youtube/*; do
SIZE="$(stat --printf="%s" "$file")"
if (( $SIZE > 25000000 )); then
mv -f "$file" /path/to/Music/Mixes
fi
done
Source homemade. Now execute it with cron job by example.
Switching to yt-dlp
youtube-dl is notmaintained anymore. It now fails with "Unable to extract uploader id" error using version 2021.12.17. yt-dlp is a youtube-dl fork based on the now inactive youtube-dlc. The main focus of this project is adding new features and patches while also keeping up to date with the original project.
Use SSH to connect to Raspberry Pi. Run the following command to download the latest version of yt-dlp from GitHub repository:
Set read and execute permissions for a file:
Now yt-dlp command will be available for all users as a system-wide command.
We can check yt-dlp version as follows:
We can update yt-dlp to the latest version by using the following command:
So in above script I replace /usr/local/bin/youtube-dl by /usr/local/bin/yt-dlp.