Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/01/2020, à 17:21

iznobe

[ RESOLU ] nombre de piste audio dans fichiers videos recursivement

Bonjour , j ' ai un repertoire videos avec beaucoup de videos .

j ' aimerais savoir si il existe un moyen ( simple , CLI ) de savoir quels fichiers comporte plus d' une piste audio .

ce sont principalement des fichiers .mkv mais il y a aussi des .mp4 , des .ts et d ' autres que je ne me rappelle plus .

merci d ' avance pour vos lumieres sur le sujet .

Dernière modification par iznobe (Le 10/09/2020, à 21:11)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#2 Le 21/01/2020, à 19:20

Bertrand49

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

Bonsoir,

Le logiciel mkv-extractor, bien connu ici permet de visualiser ce qu'il y a dans le conteneur. Cependant, il va proposer de convertir les mp4 en mkv s'il s'agit d'un mp4 au départ, pour les .ts, il faudra les ouvrir avec: mkvtoolnix-gui, un outil qui permet d'ajouter, d'enlever des pistes, ajouter des sous-titires etc. Pour les AVI, je crains que ça ne fonctionne pas, sans convertir le format en mkv.

Hors ligne

#3 Le 21/01/2020, à 19:41

kamaris

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

En te basant sur la sortie de ffmpeg -i, quelque chose comme

ffmpeg -i fichier 2> >(grep 'Stream #0:2.*: Audio')

Hors ligne

#4 Le 21/01/2020, à 22:11

Funix

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

avec mplayer simplement dans un shell, tu vois les pistes audio et autre sous titres dispo


FUNIX - https://www.funix.org
Mettez un pingouin dans votre PC
Blog - https://olivier.hoarau.org

Hors ligne

#5 Le 24/01/2020, à 09:08

iznobe

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

Bonjour ,

Merci a tous pour vos reponses , mais je voudrais une commande qui me donne le resultats en explorant recursivement les sous dossiers si possible , car aller dans chaque sous dossier , puis lancer une commande avec le titre du fichier ca ne vas pas le faire , j ' ai environ 300 videos ... chacune dans un sous dossiers .

Dernière modification par iznobe (Le 24/01/2020, à 09:08)


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#6 Le 24/01/2020, à 14:13

kamaris

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

Un man bash peut aider, tu y trouveras la possibilité de faire des boucles for par exemple, avec divers procédés de développement d'expressions par le shell.
En l'occurrence, en nommant « rep » le répertoire de base (où se trouvent tous les fichiers vidéo, éventuellement dans des sous-répertoires), on peut faire

shopt -s globstar && for f in rep/**/*.{mp4,mkv,ts}; do ffmpeg -i "$f" 2> >(grep -q 'Stream #0:2.*: Audio' && echo "$f"); done

Hors ligne

#7 Le 27/01/2020, à 22:37

iznobe

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

kamaris a écrit :

Un man bash peut aider, tu y trouveras la possibilité de faire des boucles for par exemple, avec divers procédés de développement d'expressions par le shell.
En l'occurrence, en nommant « rep » le répertoire de base (où se trouvent tous les fichiers vidéo, éventuellement dans des sous-répertoires), on peut faire

shopt -s globstar && for f in rep/**/*.{mp4,mkv,ts}; do ffmpeg -i "$f" 2> >(grep -q 'Stream #0:2.*: Audio' && echo "$f"); done

Salut et grand merci pour la commande qui fonctionne impec !

j ' ai deja fait quelques pseudo scripts sous bash , je connais les conditions , les comparaisons et les boucles , mais mon niveau est debutant tongue

d' ailleurs , je ne connais pas la moitié des commandes que vous avez utilisés dans la commande proposée et je m' atendais a quelquechose de plus simple que cela .

shopt => jamais vu
globstar => jamais vu

&& for f in rep/**/*.{mp4,mkv,ts}; do ffmpeg -i "$f" 2> >  => ca je connais et ai compris ( bien que je ne connaisse pas le quart des  les options de ffmpeg )
f => variable fichier ( nom ) reutiliser dans la boucle pour le traitement suivant et afficher le nom en sortie .
grep je sais que ca sert ( si je ne dis pas de betise a effectuer un tri )

&& echo "$f" => puis affiche le nom du fichier contenu dans le repertoire scanner ( sous rep  => ** , * ) dans la sortie terminal . ca c ' est mon niveau tongue

le reste j ' aurais meme pas pu entrevoir le bout de la solution , et j ' ai pourtant essayer , j' ai fait une dizaine de script differents avec la commande ls notamment , mais deja je bloquais pour passer le nom du fichier dans la commande suivante ...

en tout cas merci beaucoup !

je vais jeter un oeil au man pour les commandes que je ne connais pas du tout wink


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#8 Le 28/01/2020, à 00:30

kamaris

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

En fait il y a mieux que de passer par ffmpeg + grep : il y a ffprobe.
Voir man ffprobe pour référence, et ce lien (et sous-liens) pour quelques exemples : https://stackoverflow.com/questions/214 … sent-in-it
On peut donc faire :

shopt -s globstar && for f in rep/**/*.{mp4,mkv,ts}; do test -n "$(ffprobe -loglevel error -show_streams -select_streams a:1 "$f")" && echo "$f"; done

Ça devrait être un peu plus rapide et surtout plus sûr au niveau du résultat : on demande directement à ffprobe, qui est fait pour, d'aller chercher le contenu du second flux audio.
Pour le reste tout est dans man bash, bonne lecture wink

PS : si tu ne veux pas avoir d'erreurs lorsque dans un répertoire il n'y a pas un certain type de fichier (mp4, mkv, ts ou autre), tu peux rajouter l'option shell nullglob après globstar :

shopt -s globstar nullglob && …

Là encore, voir man bash.

Dernière modification par kamaris (Le 28/01/2020, à 02:36)

Hors ligne

#9 Le 29/01/2020, à 12:05

iznobe

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

kamaris a écrit :

En fait il y a mieux que de passer par ffmpeg + grep : il y a ffprobe.
Voir man ffprobe pour référence, et ce lien (et sous-liens) pour quelques exemples : https://stackoverflow.com/questions/214 … sent-in-it
On peut donc faire :

shopt -s globstar && for f in rep/**/*.{mp4,mkv,ts}; do test -n "$(ffprobe -loglevel error -show_streams -select_streams a:1 "$f")" && echo "$f"; done

Ça devrait être un peu plus rapide et surtout plus sûr au niveau du résultat : on demande directement à ffprobe, qui est fait pour, d'aller chercher le contenu du second flux audio.
Pour le reste tout est dans man bash, bonne lecture wink

PS : si tu ne veux pas avoir d'erreurs lorsque dans un répertoire il n'y a pas un certain type de fichier (mp4, mkv, ts ou autre), tu peux rajouter l'option shell nullglob après globstar :

shopt -s globstar nullglob && …

Là encore, voir man bash.


Salut et merci pour l ' info

man bash , renvoi 4500 ligne yikes ouch !!

il y a tellement d ' options et de combinaisons que ca fait peur a un novice comme moi , bien que ca soit super instructif .

je testerai la nouvelle commande , car la premiere renvoi un resultat faussé si une piste audio a un id de 3 et qu ' il n ' y a pas de piste audio avec id 2 , mais deja , ca degrossi a 99 % le boulot big_smile

apres test , je vous tiendrais au jus , merci encore !


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#10 Le 29/01/2020, à 12:49

kamaris

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

Eh oui, ça ne m'étonne pas qu'il y ait des ratés avec la première commande, ça n'était qu'un bricolage sans certitude sur la constance du format de sortie de ffmpeg.
Avec ffprobe, par contre, tu dois tout attraper, car c'est fait pour.
Pour man bash, c'est effectivement gros et aussi pas toujours très lisible, il faut bien le dire, mais tout y est : ça doit servir de référence quand on connait déjà un peu.
Pour débuter, utilise une introduction à bash plus didactique, comme par exemple ça : http://aral.iut-rodez.fr/fr/sanchis/ens … index.html

PS : pour man bash, et les grosses pages de manuel en général, tu peux utiliser aussi un logiciel comme man2html.
Ça te permettra de pouvoir lire les pages de manuel au format html en local, avec toutes les fonctions de recherche habituelles du navigateur, et le confort de lecture qui va avec.
Personnellement, j'aime bien smile

Dernière modification par kamaris (Le 29/01/2020, à 12:53)

Hors ligne

#11 Le 29/01/2020, à 15:33

Sciensous

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

HS:
@ kamaris: tu peux rappeler à quoi sert le double * dans

for f in rep/**/*

merci
/fin du HS


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#12 Le 29/01/2020, à 16:35

melixgaro

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

Bonjour,

… ou utiliser mediainfo qui renvoie une sortie plus stable et plus facilement analysable (on peut même demander du json).


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#13 Le 29/01/2020, à 17:00

kamaris

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

@Sciensous : le double * sert à faire du récursif, à une profondeur arbitraire, à condition d'avoir activé l'option shell globstar :

man bash a écrit :

When the globstar shell option is enabled, and * is used in a pathname expansion context, two adjacent *s used as a single pattern will match all files and zero or more directories and subdirectories. If followed by a /, two adjacent *s will match only directories and subdirectories.

$ tree
.
└── d0
    └── d1
        └── d2

3 directories, 0 files
$ echo *
d0
$ echo **
d0
$ shopt -s globstar
$ echo **
d0 d0/d1 d0/d1/d2
$ 

@melixgaro : je pense que la sortie de ffprobe est stable (mais peut-être disais-tu « plus stable » par rapport à ffmpeg ?), et ffprobe peut également sortir du json (-print_format json).

Hors ligne

#14 Le 29/01/2020, à 17:28

melixgaro

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

kamaris a écrit :

@melixgaro : je pense que la sortie de ffprobe est stable (mais peut-être disais-tu « plus stable » par rapport à ffmpeg ?), et ffprobe peut également sortir du json (-print_format json).

Oui par rapport à ffmpeg. C'est vrai que ffprobe sort du JSON, je m'en sers d'ailleurs de temps en temps wink
En relisant mieux la demande d'iznobe, ta solution est probablement la meilleure car tu sondes directement la deuxième piste audio (et l'absence de retour signifie son absence).

Avec mediainfo, il faudrait faire :

mediainfo --Inform="Audio;%StreamCount%" video.mp4

et voir si c'est strictement supérieur à 1 (remarque : je n'ai pas sous la main de vidéo avec plus d'une piste audio pour tester ma proposition).

Peut-être qu'une façon est plus rapide que l'autre (s'il fallait absolument un critère pour nous départager wink)


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#15 Le 29/01/2020, à 18:28

kamaris

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

Non pas que je cherche absolument un critère pour nous départager (d'ailleurs, s'il devait y en avoir un, ce serait plutôt celui de la connaissance de ces outils : bien supérieure chez toi que chez moi, assurément wink), mais du coup j'ai quand même fait le test big_smile
Le vainqueur est ffprobe, d'un bon facteur 2 chez moi, sur une liste de 151 fichiers vidéo (des .mkv en l'occurrence) : 30 secondes pour ffprobe, 1 minute pour mediainfo.
Voici les résultats complets avec les commandes, pour info :

$ for f in Vidéos/*.mkv; do test -f "$f" && ! test -h "$f" && echo "$f"; done | wc -l
151
$ 
$ time for f in Vidéos/*.mkv; do test -f "$f" && ! test -h "$f" && test $(mediainfo --Inform="Audio;%StreamCount%" "$f") -gt 1 && echo "$f"; done > mediainfo.out

real	1m4,296s
user	0m36,645s
sys	0m6,926s
$ 
$ time for f in Vidéos/*.mkv; do test -f "$f" && ! test -h "$f" && test -n "$(ffprobe -loglevel error -show_streams -select_streams a:1 "$f")" && echo "$f"; done > ffprobe.out

real	0m31,774s
user	0m21,705s
sys	0m6,364s
$ 
$ sdiff -s mediainfo.out ffprobe.out 
$ 

Hors ligne

#16 Le 29/01/2020, à 18:45

melixgaro

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

Merci pour le test très complet (avec notamment le diff à la fin) ! Ça confirme mon intuition que mediainfo est lent à extraire les infos. Je pensais qu'en demandant seulement une donnée (ici, donc, le nombre de piste audio), ça irait mieux… mais non.
À toi la coupe et la première place du podium ! C'est amplement mérité big_smile

PS : Merci pour les compliments wink (mais tu sur-estimes un peu mes capacités)

Dernière modification par melixgaro (Le 29/01/2020, à 19:03)


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#17 Le 30/01/2020, à 21:00

iznobe

Re : [ RESOLU ] nombre de piste audio dans fichiers videos recursivement

Re bonjour ,

alors la derniere commande que vous avez indiquez est effectivement bien plus pertinente et parfaite sur les tests que j' ai pu realiser chez moi smile

sur plus de 1500 fichiers differents , aucune erreur d' interpretation , tous les fichiers nommés , comportait bien 2 flux videos au moins , et aucun des fichiers nommés n ' avait pas ou qu ' un seul flux videos .

je n' ai pas tester la commande a base de media info .

En tout cas bravo a vous pour votre savoir et votre partage big_smile , je retourne me documenter et en apprendre un peu plus sur la CLI tongue

Bonne soirée a vous !


retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne