J'ai plusieurs vidéos dans un dossier.
~/Downloads/movie1.mkv
~/Downloads/movie2.mkv
~/Downloads/movie3.mkv
Je voudrais extraire le débit de chaque fichier et exporter les données dans un seul fichier texte ou dans une liste de sortie que je peux copier et coller dans un fichier texte.
J'ai installé ffmpeg.
Ainsi, par exemple, la sortie de fffmpeg -i movie1.mkv est;
Metadata:
encoder : libebml v1.2.0 + libmatroska v1.1.0
creation_time : 2011-04-09T18:18:05.000000Z
Duration: 00:04:27.71, start: 0.000000, bitrate: 10698 kb/s
Stream #0:0(eng): Video: h264 (High), yuv420p(progressive), 1920x1038, SAR 1:1 DAR 320:173, 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Metadata:
title : movie1
Stream #0:1(eng): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 1536 kb/s (default)
Metadata:
title : DTS-ES 5.1 @ 1509 Kbps
Stream #0:2(eng): Audio: ac3, 48000 Hz, stereo, fltp, 192 kb/s
Metadata:
title : Commentary
Stream #0:3(eng): Subtitle: subrip
Stream #0:4(eng): Subtitle: subrip
Le "bitrate: 10698 kb/s" est la partie cruciale que je recherche après.
Supposons que les trois films ont le même débit.
Je voudrais extraire les informations de bitrate des trois vidéos et les faire sortir au format;
movie1.mkv 10698
movie2.mkv 10698
movie3.mkv 10698
Comment pourrais-je extraire et sortir cette information en bloc?
J'ai essayé une combinaison de recherche par nom de fichier, ffmpeg, puis | à grep. par exemple ; find . -name "*.mkv" -exec ffmpeg -i "${1%.mkv}" | grep "bitrate:"
Tentatives en cours;
1. La commande; ffmpeg -i movie1.mkv 2> & 1 | grep bitrate | sed 's/bitrate: (. *), kb/\ 1/g'
Résultats;
Duration: 00:04:27.71, start: 0.000000, bitrate: 10698 kb/s
2. La commande;find . -name "*.mkv" -exec ffprobe -v error -show_entries format=bit_rate -of default=noprint_wrappers=1:nokey=1 "${~/Downloads/1%.mkv}" ';
'
Résultats
~/Downloads/1%.mkv: No such file or directory
~/Downloads/1%.mkv: No such file or directory
~/Downloads/1%.mkv: No such file or directory
Je sens que je suis proche de là, et qu'il y a juste quelque chose qui ne va pas avec la découverte et qui rappelle le résultat de find dans ffprobe.
à l'écran:
find . -name "*.mkv" -print0 | xargs -0 -i{} sh -c " echo -n '{} ' && ffmpeg -i '{}' 2>&1 | sed -n -e 's/^.*bitrate: //p' "
Pour file result.txt:
find . -name "*.mkv" -print0 | xargs -0 -i{} sh -c " echo -n '{} ' && ffmpeg -i '{}' 2>&1 | sed -n -e 's/^.*bitrate: //p' " > result.txt
Vous verrez dans le fichier result.txt:
somefile1.mkv 1788 kb/s
somefile2.mkv 1681 kb/s
...
Exemple de sortie formatée:
find . -name "*.mkv" -print0 | xargs -0 -i{} sh -c " echo -n 'Filename: {}, Bitrate is: ' && ffmpeg -i '{}' 2>&1 | sed -n -e 's/^.*bitrate: //p' " > result.txt
Vous verrez dans le fichier result.txt:
Filename: somefile1.mkv, Bitrate is: 1788 kb/s
Filename: somefile2.mkv, Bitrate is: 1681 kb/s
...