Forum Programmation.shell Informations de fichiers videos

Posté par  . Licence CC By‑SA.
0
13
août
2015

Bonjour, d'habitude je ne post jamais sur des forums, je les parcours pour trouver une solution mais la je ne trouve rien pour éclairer ce que je veux faire..

J'ai des fichiers mkv qui contiennent des multipistes, et j'aimerais via un script qu'il m'affiche certaine informations, j'ai essayer mediainfo, ffprobe, etc mais je trouve pas ou sais pas comment le coder et quand je voit du sed et awk je prend peur x)

Le resultat attendu serait :

Audio : 1 French AC3 384 6 channels
2 Spanish AAC 128 2 channels
3 Russian DTS 768 6 channels
Subs : 1 French
2 French French Forced

Et il faudrait aussi pouvoir géré le fais que French peux y avoir un track d'Audiodescription au quel cas le titre de la piste son et nomer "Audiodescription" idem pour les French Forced (mais ça y a l'option Forced Yes de la documentation)

Ce que je n'arrive pas a faire c'est avoir les infos des pistes qui les range par ordre et qui arrive a prendre les infos sans que j'ai a faire des cut -f15 enfin faire une variable pour chaque piste audio potentiel sinon mediainfo peux avoir un xml si plus simple, ou sinon le parser mais je suis pas du tout doué dans ce domaine.

Merci beaucoup pour vos reponses !

  • # j'ai pas cherché loin

    Posté par  . Évalué à 4.

    http://lmgtfy.com/?q=extract+file+info+from+mkv

    ca m'envoie par exemple sur l'outil mkvinfo qui semble etre l'outil qui fait ce que tu veux (j'ai pas testé, j'ai pas de MKV)

    ensuite en effet, si ca sort un gros paté, ben il faut jouer de grep, sed, awk pour filtrer les infos utiles, reformater la sortie.

    sinon avec mediainfo,
    mediainfo --fullscan input.mkv.

    qui nous sort un truc comme ca

    General
    Unique ID              : 239093944660469735839645243666869007606 (0xB3DFD199E22F0E7CBAE1FE52206834F6)
    Complete name     : input.mkv
    Format                   : Matroska
    Format version                           : Version 2
    File size                                : 39.6 MiB
    Duration                                 : 20s 288ms
    Overall bit rate mode                    : Variable
    Overall bit rate                         : 16.4 Mbps
    Movie name                               : My best movie
    Encoded date                             : UTC 2012-11-10 16:42:02
    Writing application                      : mkvmerge v5.8.0 ('No Sleep / Pillow') built on Sep  2 2012 15:37:04
    Writing library                          : libebml v1.2.3 + libmatroska v1.3.0
    Produzent                                : ??? ???????
    Thanks to                                : Bruce Davey
    Lead performer                           : Rudy Youngblood
    Remixed by                               : ©????
    
    Video
    ID                                       : 1
    Format                                   : AVC
    Format/Info                              : Advanced Video Codec
    Format profile                           : High@L4.0
    MultiView_Count                          : 2
    Format settings, CABAC                   : Yes
    Format settings, ReFrames                : 2 frames
    Format settings, GOP                     : M=2, N=13
    Muxing mode                              : Header stripping
    Codec ID                                 : V_MPEG4/ISO/AVC
    Duration                                 : 20s 280ms
    Bit rate mode                            : Variable
    Bit rate                                 : 15.8 Mbps
    Maximum bit rate                         : 16.0 Mbps
    Width                                    : 1 920 pixels
    Height                                   : 1 080 pixels
    Display aspect ratio                     : 16:9
    Frame rate mode                          : Constant
    Frame rate                               : 25.000 fps
    Color space                              : YUV
    Chroma subsampling                       : 4:2:0
    Bit depth                                : 8 bits
    Scan type                                : Interlaced
    Scan order                               : Top Field First
    Bits/(Pixel*Frame)                       : 0.304
    Stream size                              : 38.2 MiB (96%)
    Title                                    : Sony Hardware Video H.264 Encoder
    Language                                 : English
    Default                                  : Yes
    Forced                                   : No
    
    Audio
    ID                                       : 2
    Format                                   : AC-3
    Format/Info                              : Audio Coding 3
    Mode extension                           : CM (complete main)
    Format settings, Endianness              : Big
    Muxing mode                              : Header stripping
    Codec ID                                 : A_AC3
    Duration                                 : 20s 288ms
    Bit rate mode                            : Constant
    Bit rate                                 : 256 Kbps
    Channel(s)                               : 2 channels
    Channel positions                        : Front: L R
    Sampling rate                            : 48.0 KHz
    Bit depth                                : 16 bits
    Compression mode                         : Lossy
    Delay relative to video                  : -80ms
    Stream size                              : 634 KiB (2%)
    Title                                    : Sony Hardware Audio AC3 Encoder
    Language                                 : Russian
    Default                                  : Yes
    Forced                                   : No
    
    Text
    ID                                       : 3
    Format                                   : PGS
    Muxing mode                              : zlib
    Codec ID                                 : S_HDMV/PGS
    Codec ID/Info                            : The same subtitle format used on BDs/HD-DVDs
    Title                                    : Sony Hardware PGS Encoder
    Language                                 : English
    Default                                  : Yes
    Forced                                   : No

    avec un simple egrep apres mediainfo on peut avec un truc comme ca

    monuser@mamachine: ~$ mediainfo --fullscan input.mkv | egrep 'ID|Video|Audio|Text|Language'
    Unique ID : 239093944660469735839645243666869007606 (0xB3DFD199E22F0E7CBAE1FE52206834F6)
    Video
    ID : 1
    Language : English
    Audio
    ID : 2
    Language : Russian
    Text
    ID : 3
    Language : English
    • [^] # Re: j'ai pas cherché loin

      Posté par  . Évalué à 1.

      J'ai fais quelque test via la doc de mediainfo :

      audio=$(mediainfo --Inform="General;%Audio_Language_List%" $1 | sed 's/\///')
      audio_bitrate=$(mediainfo --Inform="Audio;%BitRate/String%" $1 | sed 's/s/s /')
      audio_codec=$(mediainfo "--Inform=General;%Audio_Codec_List%" $1 | sed 's/\///')
      audio_channels=$(mediainfo "--Inform=Audio;%Channel(s)/String%" $1 | sed 's/s/s /')

      Les variables contiennent :

      French English
      192 Kbps 128 Kbps
      AC3 AC3
      2 channels 2 channels

      J'aimerais les faire s'afficher comme ça :

      French AC3 192 Kbps 2 channels
      English AC3 128 Kbps 2 channels

      et le faire tourné dans une boucle ou nTrack est le nombre de pistes présente (ex = 2)

      PS : problème quand codec rend AAC LC AC3 faudrait supprimer le LC et si AAC affecté par défaut un débit de 160 vue que les AAC n'affiche pas le bitrate

      • [^] # Re: j'ai pas cherché loin

        Posté par  . Évalué à 2.

        c'est deja un bon debut,

        tu as donc autant de colonne que de piste.

        suffit alors de faire un awk '{print $1}' fichier.txt pour n'afficher que la premier colonne.
        pipe ca dans un sed pour enlever les retours à la ligne, et tu devrais obtenir French AC3 192 2

        donc le script d'avant, si tu remplaces les espaces par des _
        tu aurais alors
        French English
        192_Kbps 128_Kbps
        AC3 AC2
        2_Channels 2_Channels

        le awk print $1 donnera alors
        French 192_Kbps AC3 2_Channels

        si tu fais un awk '{print $2}' fichier.txt
        tu recupere les 2e colonnes
        tu supprimes les retour à la ligne :
        English 128_Kbps AC3 2_Channels

        • [^] # Re: j'ai pas cherché loin

          Posté par  . Évalué à 1.

          French English
          192_Kbps 128_Kbps
          AC3_/ AC3
          2_channel 2_channels

          French French
          Sourds_&_Malentendants
          NoNo

          Sauf que audio_codec=$(mediainfo "--Inform=General;%Audio_Codec_List%" $1 | | sed 's/ /_/')

          affiche : AC3_/ AC3 mais sa marche quand AAC : AAC_LC / AC3
          autre problème si AAC le bitrate = 384_Kbps car AAC pas de débit renseigné
          Pour les sous titres idem, French mais celui ci n'a pas de Titre, j'ai pas moyen de savoir qui y a rien,
          et pour Savoir si le sous titres est forced je sais pas comment séparer ne YesYes ou YesNo NoYes NoNo et tout les autres cas possibles, je test le awk la :)

      • [^] # Re: j'ai pas cherché loin

        Posté par  (site web personnel) . Évalué à 2.

        Magie noire (plus ou moins, vu que tu avais l'idée) :

        mediainfo "--Inform=Audio;%Language/String% %Format% %BitRate/String% %Channel(s)/String%\n" %1

        (et ça a l'avantage de parser le fichier qu'une fois)

      • [^] # Re: j'ai pas cherché loin

        Posté par  (site web personnel) . Évalué à 2.

        la doc de mediainfo

        Heureux d'apprendre qu'il y a de la doc de mediainfo.
        Question idiote : où?

        • [^] # Re: j'ai pas cherché loin

          Posté par  . Évalué à 1. Dernière modification le 15 août 2015 à 11:37.

          J ai finalement changer d'outil et réalisé ce que je voulez via ffprobe avec du json et en utilisant des boucles pour n éléments de pistes et sa marche a merveille :D

          Je vous remercie de votre aide :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.