Ideenquelle

Video

Compression de vidéos via ffmpeg

Tout d’abord, les vidéos dans le cadre d’archive familliale, je n’y crois pas. Nous sommes bombardés d’activités en tous genres que nous n’avons pas le temps de regarder des photos (déjà les sauvegarder et les trier sont parfois des missions impossibles).

Dans un soucis de garder quand même quelques archives familliales, je regarde pour faire un backup selon la règle 3-2-1. Cela risque de tourner à 3-3-1 mais c’est une autre discussion. Pour minimiser l’espace de disque dur et suite à un shaarli, j’ai passé la collection de vidéos à la moulinette ffmpeg pour réduire les vidéos et avoir un seul codec (c’est un effet collatéral).

sebsauvage a proposé le code suivant :

ffmpeg -i entree.mkv -map 0:v -c:v libsvtav1 -preset 4 -crf 30 -tune 0 -pix_fmt yuv420p10le -g 120 -map 0:a? -c:a copy -map 0:s? -c:s copy sortie.mkv

A l’arrivé, les fichiers varient entre 27 et 80% de la taille d’origine. Chez moi, c’est assez variable car les vidéos familliales sont parfois petites (quelques secondes). Ils arrivent donc qu’à l’arrivée, le mkv soit plus lourd que l’original. Je fais le choix de quand même garder car cela uniformise l’ensemble. Même s’il y a donc des ratés, dans l’ensemble, les mkv font entre 25 et 50% de la taille d’origine.

via sebsauvage

Pour aller plus loin C’est bien d’avoir une ligne de commande qui permette de réduire la taille des vidéos. Toutefois, comme je suis sur une bibliothèque de plusieurs années, il est important de faire cela sur l’ensemble.

Combien de vidéos ai-je chez moi ? Bonne question ! Je ne sais pas. J’en ai profité pour savoir ce que j’avais comme type de fichier. Après quelques prompts avec l’IA, j’ai une liste des extensions existants dans mon dossier de photos/vidéos familliales. J’ai quelques trucs exotiques. L’IA me confirme, a priori, l’utilisation de certaines extensions. Je conçois un programme bash pour convertir tous les fichiers dont l’extension s’apparente à une vidéo vers un conteneur mkv. Il m’a fallu plusieurs itérations pour trouver la bonne méthodologie (sur un dossier, sur une extension, vérifier les tailles). J’y suis arrivé. petit script

J’ai essayé avec le Raspberry Pi. En un mot : OUBLIEZ ! Puis avec le famille, en sachant que ce dernier est une récupération de PC de bureau (donc pas de carte graphique digne de ce nom et RAM limité), cela avance. C’est consommateur de puissance. Donc le PC a parfois du mal à tout gérer. Madame s’est plainte (en même temps, c’est le pc qu’elle utilise hors boulot).

Finalement, je me suis résolu à lancer cela sur ma machine du boulot, qui, sans être une bête de course, est plus rapide et me permet de gérer l’activité du processus (je dors, tu peux y aller; je travaille, tu t’arrêtes). ffmpeg est installable en version portable. La version full possède le codec en question. J’ai du réconcevoir mon programme bash pour qu’il fonctionne sous/avec PowerShell. J’ai également fait le choix de transférer toutes les vidéos sur un disque dur qui n’est pas celui du serveur de backup avant de compresser les vidéos. Quand le processus est fait, je transfère les nouveaux fichiers et je vérifie qu’il y ait bien des doublons (en ne regardant pas les extensions) puis je supprime le fichier original. petit script

Quand le démarrage sera fini, l’idée est de mettre cela au propre et automatiser la compression/sauvegarde/…

widefrog

widefrog est un programme permettant de télécharger des vidéos sur des plateformes de streaming. Intrinsèquement, il ne s’agit pas de piratage car widefrog n’outrepasse pas les accès demandés par les services. Autrement dit, si vous souhaitez récupérer des vidéos sur auvio.be (lié à la télévision belge francophone), vous devez avoir un compte sur le site et avoir une IP belge. widefrog permet donc juste de récupérer les vidéos facilement. widefrog est diffusé sur le forum de videohelp.

#Outils préalables Pour utiliser widefrog, il faut quelques outils préalables :

  1. Update/upgrade le système sudo apt-get update && sudo apt-get upgrade

  2. Python, ffmpeg, mkvmerge sudo apt-get install python3 python3-pip unrar zip unzip ffmpeg mkvtoolnix mkvtoolnix-gui mediainfo mediainfo-gui aria2 Dans le guide trouvé sur le forum, il recommande également d’installer curl, git, nano, vlc, mpv et asciinema. Autant les premiers sont déjà installés, autant vlc et mpv sont deux programmes au même usage.

  3. N_m3u8DL-RE

curl -kLO https://github.com/nilaoda/N_m3u8DL-RE/releases/download/v0.3.0-beta/N_m3u8DL-RE_v0.3.0-beta_linux-x64_20241203.tar.gz

## (Debian 13/Trixie does not allow to unpack/untar directly into the "/usr/local/bin/" DIRectory);

# Check the package is OK;
gunzip -tv vimeo-dl_0.2.0_linux_amd64.tar.gz
# Check what is inside the TAR.GZ archive;
tar -tvvf N_m3u8DL-RE_v0.3.0-beta_linux-x64_20241203.tar.gz
# Unpack;
tar -xvf N_m3u8DL-RE_v0.3.0-beta_linux-x64_20241203.tar.gz N_m3u8DL-RE
# Move to "/usr/local/bin/";
sudo mv N_m3u8DL-RE /usr/local/bin/
# Make the BInary file "EXEcutable;
sudo chmod a+rx /usr/local/bin/N_m3u8DL-RE
# List the file;
ls -ilha /usr/local/bin/N*
# Check the version
N_m3u8DL-RE --version
  1. mp4decrypt
curl -kL https://www.bok.net/Bento4/binaries/Bento4-SDK-1-6-0-641.x86_64-unknown-linux.zip -o ~/Downloads/Bento4-SDK-1-6-0-641.x86_64-unknown-linux.zip
sudo unzip -j Bento4-SDK-1-6-0-641.x86_64-unknown-linux.zip 'Bento4-SDK-1-6-0-641.x86_64-unknown-linux/bin/*' -d /usr/local/bin/
ls -ilha /usr/local/bin/
mp4decrypt
mp4info
  1. shaka-packager
sudo curl -kL https://github.com/shaka-project/shaka-packager/releases/download/v2.6.1/packager-linux-x64 -o /usr/local/bin/shaka-packager
sudo chmod a+rx /usr/local/bin/shaka-packager
shaka-packager --version

L’idée est de pouvoir utiliser les programmes directement depuis n’importe quel dossier, juste en les appellant par leur nom.

#Installation de widefrog Quand c’est fait, il faut encore récupérer widefrog. La version à l’heure actuelle est la 3.2. Idéalement, extraire le fichier dans un dossier propre à widefrog. Pour la suite et afin d’éviter les soucis de version de packages Python, on active un environnement de travail :

pip install virtualenv
virtualenv venv
venv\Scripts\activate

On installe les dépendances :

#windows
FOR /F %k in (requirements.txt) DO ( if NOT # == %k ( pip install %k ) )
#linux
grep -v '^#' requirements.txt | xargs -n 1 pip install
#macos
grep -v '^#' requirements.txt | xargs -n 1 pip3 install

Et on peut également mettre à jour urllib3 (pas certain que ce soit utile):

pip install urllib3 --upgrade

On octroye des droits d’exécution aux parties de widefrog :

sudo chmod +x "terminal/*"

L’installation est normalement finie.

#Utilisation de widefrog Pour utiliser widefrog, il faut veiller à avoir l’environnement actif. Pour cela, quand nous sommes dans le dossier de widefrog, il faut utiliser la commande source myvenv/bin/activate. Pour sortir de l’environnement, il faut utiliser : deactivate

Première utilisation

Pour la première utilisation, il faut créer la configuration via

python widefrog.py
[INFO] The app_files\config.json file was created. Edit the file and run the program.

Avant d’éditer la configuration, vous pouvez utiliser les commandes suivantes pour en savoir plus :

python widefrog.py --help
python widefrog.py --config

Utilisation

Je reprends ici l’utilisation dont j’ai besoin, càd pour le site auvio. Une IP belge est nécessaire ainsi qu’un compte au service auvio. Je recopie les exemples données sur le forum qui permettent de comprendre comment cela fonctionne. :

#video
python widefrog.py "https://auvio.rtbf.be/media/attraction-attraction-s01-3018437"
python widefrog.py "https://auvio.rtbf.be/emission/titane-27377"
#audio
python widefrog.py "https://auvio.rtbf.be/media/un-jour-dans-le-sport-14-aout-2004-3164197"
#livestream video
python widefrog.py "https://auvio.rtbf.be/live/roland-garros-2024-31-mai-direct-tipik-526661"
#livestream audio
python widefrog.py "https://auvio.rtbf.be/chaine/classic-21-5" --query=:2::2
#list
python widefrog.py "https://auvio.rtbf.be/widget/19164" --query=:5::7
python widefrog.py "https://auvio.rtbf.be/widget/22508?context%5BprogramId%5D=8340" --query=:2::4
python widefrog.py "https://auvio.rtbf.be/emission/la-theorie-du-y-11043/bonus" --query=:6::7
python widefrog.py "https://auvio.rtbf.be/emission/pandore-20618" --query=:5::8
python widefrog.py "https://auvio.rtbf.be/chaine/musiq3-7" --query=:2::3
#series
python widefrog.py "https://auvio.rtbf.be/emission/le-cactus-4043" --query=2017:180:2018:5
python widefrog.py "https://auvio.rtbf.be/emission/l-art-du-crime-27164" --query=3:2:4:2

Il faut savoir que widefrog accepte également les fichiers en entrée. Les fichiers seront composés pour chaque ligne du lien à télécharger.