#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
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 faireshopt -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
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
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
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
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
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 lecturePS : 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 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
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
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 :
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
@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
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 )
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 ), mais du coup j'ai quand même fait le test
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é
PS : Merci pour les compliments (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
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 , je retourne me documenter et en apprendre un peu plus sur la CLI
Bonne soirée a vous !
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne