Importar Canales Enteros en PeerTube

En Youtube hay muchos canales muy interesantes. Claramente no está bien apropiarse de su trabajo así que os recomiendo que vayáis a ver los videos originales en youtube.

Pero resulta que necesitamos tener una copia de seguridad precisamente de estos videos en el caso llegue una tormenta solar y nos quedamos con internet de rodillas sin posibilidad que se recuperes en poco tiempo.
Así que la idea es la de bajar los vídeos para uso particular y visible solo para mi. De esta forma salvaguardamos los derechos del legitimo propietario y la necesitad de archivar estas informaciones muy útiles.

…pero hay una falla muy grave en PeerTube… no lo puede hacer desde la interfaz y tampoco desde la CLI (comandos internos de peertube desde el terminal)

En teoría hay un script en javascript que hace esto, pero no funciona, así que me he puesto programar un poco en bash y he creado mi propria versión del «importador de canales de youtube».

Funciona así: Hay que instalar la CLI de PeerTube siguiendo las instrucciones oficiales

https://docs.joinpeertube.org/maintain-tools

Yo he instalado estas herramientas en /root/PeerTube del mismo servidor donde tengo mi instancia: videos.tormentasolar.win Dado que esta es una herramienta que voy a usar solo yo, no hay problema. A lo mejor para seguridad lo mejor sería usar una cuenta de usuario en lugar de root… pero estaba experimentando en un servidor experimental 🙂

Una vez que lo tengas tienes que instalar youtube-dl y jq

sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl
sudo apt install jq -y

Crea un fichero llamado Video_upload.sh dale permisos de ejecución (chmod 750 Video_upload.sh) y pegale dentro es script a bajo

#!/bin/bash

# Substitute wrapper for peertube-import-videos.js.
# This script uses youtube-dl and jq to download the youtube videos and upload them to your PeerTube instance
# using the peertube-upload.js script from the PeerTube CLI suite.
#
# Works on Debian10 Not tested on other distributions.
#
# sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
# sudo chmod a+rx /usr/local/bin/youtube-dl
# sudo apt install jq -y
#
# I suggest you use "screen" to put the script in the background.
# Channel import can take many hours (or days) and if your session is via ssh, it could crash due network problems.
#
# Change variable fields
# IN="Channel URL or PlayList URL"
# resolution="18" # 18 = 360p (640x360 mp4) | 22 = 720p (1280x720 mp4)
# channel="peertubechannel"  Please create it before and paste here the sanitize name without spaces and lowercase
# server="https://yourPeerTubeInstanceUrl"
# username="username of PeerTube Instance"
# password="yourPassword"
#
# please before run this script install the CLI tools following the documentation
# https://docs.joinpeertube.org/maintain-tools
# ... and then register a remote user with
# peertube auth add -u 'PEERTUBE_URL' -U 'PEERTUBE_USER' --password 'PEERTUBE_PASSWORD'
# peertube auth list.
#
# on 2021-02-21
# maxlinux2000@gmail.com

# Variables Zone
#############################################################

IN="https://www.youtube.com/channel/UCZbQ0skloTaFmXAdiEKGb8w"
resolution="18" # 18=360p | 22=720p
channel="huertoadictos" # Channel name destination
server="https://videos.tormentasolar.win" # Your Instace URL
username="maxlinux2000" # YoutUserName
password="YourPassword"

#############################################################
# From here do not touch anything unless you know what you are doing. 

PWD=$(pwd)

upload() {
    id=$1
    echo id=$id
    youtube-dl --write-info-json -f "$resolution" $id
    json=$(cat *-$id.info.json)
    title=$(echo $json | jq .fulltitle | tr -d '"')
    file=$(ls *$id.mp4)
    file=$(echo "$PWD/$file")
    echo file=$file
    description=$(echo $json | jq .description | tr -d '"' | sed 's|\\n|\n|g')
    lang=$(echo $json | jq . | grep "lang=" | head -n1 | cut -d '?' -f2 | cut -d '&' -f1 | sed 's|lang=||g')
    node $PWD/dist/server/tools/peertube-upload.js -n "$title" -C "$channel" -d "$description" -L "$lang" -U "$username" -p "$password" -f "$file"
    rm "$file"
    rm *.info.json
}

:>yt-list
youtube-dl --playlist-reverse --get-id $IN | tee -a yt-list

for id in $(cat yt-list); do
    echo processing $id
    upload $id
done

Los videos empezarán a bajarse de Youtube y serán subidos en PeerTube en el canal que has elegido. Considera que va a tardar un tiempo antes que sean visibles, porqué PeerTube tiene antes que transcodificarlos.
Si son muchos vídeos y el servidor es lento…. bueno, vete a tomar un bocadillo y una cerveza 🙂

Como que puede tardar mucho pero mucho tiempo a bajarse los vídeos de youtube, sobretodo si se trata de un canal o una playlist con muchos vídeos, te recomiendo que uses screen. En este enalce un articulo que te explica de que sirve

https://www.rackaid.com/blog/linux-screen-tutorial-and-how-to/

Para instalarlo:

apt install screen

screen para lanzarlo y pulsa Espacio o Enter para sali de la presentación

CTRL-A d para salir pero dejando el processo funcionando

screen -r para recuperar la session

exit para salir y cerrar screen

si te sale algo parecido a esto:

There are several suitable screens on:
	6632.pts-0.peertube	(02/22/21 09:17:04)	(Detached)
	6620.pts-0.peertube	(02/22/21 09:16:50)	(Detached)
	18181.pts-0.peertube	(02/22/21 00:12:14)	(Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.

Es que tienes 3 sessiones de screen abiertas. Para recuperar una en concreto tienes que decirle cual, con por ejemplo

screen -r 6632 # para la primera

o

screen -r 18  # para la tercera. No hace falta poner el identificativo completo siendo la única que empieza por 1.

Y con esto creo que es suficiente de momento

Comentarios cerrados.