Je combine bash, ffmpeg, sed pour écrire dans un fichier uniquement les informations métadonnées de base qui m'intéressent : type de fichier et nom, titre(s), détails des flux vidéo, audio et sous-titres. Un seul fichier ou tous les fichiers dans un dossier. Linux. Seulement testé sur une poignée de vidéos mkv au fait.
script: ffmpeg_metadata.sh
fichier de sortie: ffmpeg_metadata.txt
Les commandes sed font toutes sortes de choses pour 'purifier' la sortie ffmpeg donnée.
Voici non pas l'ensemble du script mais le code qui fait des choses (j'espère que cela rend bien, car j'ai eu des problèmes avec les sauts de ligne dans ce post)...
echo -e "Nom(s) de fichier (spécifique ou générique,
pas d'espaces ou de caractères spéciaux, sauf '-' '_')?"
read -p "" INPUT
echo
for i in ${INPUT}; do ffmpeg -i "$i" -hide_banner; done |& tee ./ffmpeg_metadata.txt
sed -r -i "/Input|title|Stream/!d;s/[[:space:]]*[[:space:]]/ /g;s/^[[:space:]]//g;s/[[:space:]]:/:/g;s/Input/\n&/g;1i METADONNÉES MULTIMÉDIA" ./ffmpeg_metadata.txt
le /Input|title|Stream/!d
dit : ne supprimez pas les lignes contenant exactement ces mots aka chaînes. Autrement dit, gardez uniquement ces lignes.
Ici, pour deux fichiers mkv, cela donne :
METADONNÉES MULTIMÉDIA
Input #0, matroska,webm, depuis 'film1.mkv':
title: film1
Stream #0:0: Video: h264 (High), yuv420p(progressive), 1276x686 \[SAR 1:1 DAR 638:343\], SAR 343:359 DAR 638:359, 23.97 fps, 23.97 tbr, 1k tbn, 47.94 tbc (default)
title: film1\_Track
Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, fltp (default)
title: film1\_Track
Input #0, matroska,webm, depuis 'film2.mkv':
title: film2
Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 640x360 \[SAR 1:1 DAR 16:9\], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
title: film2\_Track
Stream #0:1(eng): Audio: aac (LC), 44100 Hz, stereo, fltp (default)
title: film2\_Track
Stream #0:2(eng): Subtitle: ass (default)
title: film2\_Track
Stream #0:3(es): Subtitle: subrip (default)
title: film2\_Track
Pourrait être encore réduit en laissant de côté le mot 'title' dans sed. Donc, seulement le nom de fichier et les flux. Ou, par exemple, on pourrait ajouter les lignes contenant le mot 'Duration', qui incluent également le débit binaire. Etcetera, etcetera. Le jour où le développement de ffmpeg commence à épeler des mots différemment, ce script devra aussi être réécrit :-D
Au revoir (non inclus dans le fichier de sortie ;-) )!