Published: Thu 13 April 2023
By Arnaud
In Misc .
tags: français
Pendant mes trajets en voiture, j'aime écouter des podcasts. Ma voiture supporte la connection Bluetooth avec un téléphone mais pour diverses raisons, je préfère utiliser une bonne vieille clé USB.
Je récupère les épisodes à l'aide de l'application GNOME Podcast qui récupère les flux RSS/Atom.
Les scripts ci-dessous me permettent d'écouter La semaine des 5 heures pendant des heures, étant donné qu'ils sont passés à une formule quotidienne. J'écoute également d'excellents podcasts de France Inter: Blockbusters et La Science, CQFD sur France Culture.
RTBF AUVIO
Il y a quelques mois, le site Auvio de la RTBF a changé et les liens des podcasts n'étaient plus autant mis en avant. Je suis nénmoins tombé sur ce forum qui m'a aidé à trouver la solution:
Le nom du programme en toutes lettres est remplacé par des chiffres, identiques au code d'Auvio, la plateforme de Replay/Podcast de la RTBF.
Ainsi, la semaine de 5h, l'émission cinéma dont l'identifiant 1451
voit ses addresses évoluer comme ceci:
AUVIO https://auvio.rtbf.be/emission/la-semaine-des-5-heures-1451
Podcast http://rss.rtbf.be/media/rss/audio/1451.xml
Scripts de conversion et renommage
Par ailleurs, ma voiture ne sait pas lire les fichiers m2a
récupérés par l'application. Je les convertis à l'aide de FFMPEG afin de les lire. J'utilise les scripts ci-dessous pour lire le tout.
Le premier converti les fichiers en mp3 et le second les renommes en fonction de la date de l'épisode.
Conversion en mp3
#!/bin/bash
EXT = ".m2a"
FILES = " $1 " /*" $EXT "
DIRECTORY = " $1 "
/usr/bin/python3 podcast_rename.py " $DIRECTORY "
for filename in ` find " $DIRECTORY " -name "* $EXT " -type f` ; do
echo " $filename "
ffmpeg -i " $filename " -acodec mp3 " $filename " .mp3
rm " $filename "
done
exit 0
Renommage des fichiers mp3
Les fichiers téléchargés suivent une séquence propre au programme GNOME Podcast mais il est parfois intéressant de savoir à quelle date correspond ce fichier. C'est particulièrement utile pour suivre les sorties cinéma.
Pour cela, j'analyse les metadata des fichiers m2a et j'extrait la date à partir du titre ou du tag date
.
Le programme suivant
recherche les fichiers m2a
dans un dossier donné
renomme le fichier en se basant sur la date présente dans les métadata (titre ou champs date).
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from datetime import datetime
import ffmpeg
import glob
import logging
import os
import re
import sys
logging . basicConfig ( level = logging . INFO )
logger = logging . getLogger ()
def _get_date ( input_str , datetime_format ):
"""
Return the datetime object from the string containing the date of the media file
:param input_str: string to analyze
:param: regex_date: regex format of the date
:return: datetime object
"""
match = re . search ( r '(\d+(-|\/)\d+(-|\/)\d+)' , input_str )
date_str = match and match . group ( 1 )
return date_str and datetime . strptime ( date_str , datetime_format )
def _rename_file ( media_file , date_obj ):
"""
Rename media file based on datetime object
:param media_file: input filename
:param date_obj: datetime of the media file
:return:
"""
vals = media_file . rsplit ( '.' , 1 )
res = False
if vals and date_obj :
dst_name = f " { vals [ 0 ] } - { date_obj . strftime ( ' %d -%m-%Y' ) } .m2a"
logger . info ( f "Trying to rename { media_file } --> { dst_name } " )
os . rename ( media_file , dst_name )
res = True
return res
def rename_on_title_date ( media_file , metadata ):
"""
Rename a m2a file based on the date present in the title. Example:
La Semaine des 5 Heures - TITLE OF THE DAY - 03/04/2023
:param media_file: fullpath of the m2a filename
:param metadata: metadata dictionary of the file
:return: True if the file could be renamed. Otherwise False or None
"""
tags = metadata . get ( 'format' , {}) . get ( 'tags' )
title = tags and tags . get ( 'title' )
if not title :
return
date_obj = _get_date ( title , " %d /%m/%Y" )
res = _rename_file ( media_file , date_obj )
return res
def rename_on_record_date ( media_file , metadata ):
"""
Rename a m2a file based on the date present in the record date metadata.
Example: 2023-03-23
:param media_file: fullpath of the m2a filename
:param metadata: metadata dictionary of the file
:return: True if the file could be renamed. Otherwise False
"""
tags = metadata . get ( 'format' , {}) . get ( 'tags' )
date_str = tags and tags . get ( 'date' )
if not date_str :
return
date_obj = _get_date ( date_str , "%Y-%m- %d " )
res = _rename_file ( media_file , date_obj )
return res
def launch ( dir_name ):
path = os . path . join ( dir_name , '*.m2a' )
files = glob . glob ( path )
for media_file in files :
metadata = ffmpeg . probe ( media_file )
res = rename_on_title_date ( media_file , metadata )
if not res :
res = rename_on_record_date ( media_file , metadata )
if not res :
logger . error ( f "The file could not be renamed { media_file } " )
if __name__ == '__main__' :
if len ( sys . argv ) < 2 :
raise UserWarning ( "You need to provide a directory name" )
directory = sys . argv [ 1 ]
launch ( directory )