web-dev-qa-db-fra.com

Comment extraire en vrac des données de débit binaire à partir de vidéos et les exporter dans un fichier texte?

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.

3
Martin JS

à 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
...
2
mature