Vous n'êtes pas identifié(e).
Hors ligne
… je pourrais en brancher un second pour
tester, mais j'ai un peu la flemme de d'ouvir le capot du pc pour ça.
J'ai ajouté un lecteur en usb, c'est pas top mais ça ma permis de vérifier.
Je le vire maintenant car il me fout la mer... au montage
INFO_LPCM=$(lsdvd_x "$i" | grep 'lpcm' | awk '{print$4}')
Tu peux mettre directement :
pas besoin de grep.
Dernière modification par enicar (14-06-2019 18:27:06)
Hors ligne
Par :
Comme tu extrais le 8ème champ avec « awk '{ print $8 }' », on est sûr
qu'il ne comporte pas de séparateurs de champ. Ensuite, tu le repasses
dans awk pour compter le nombre de champs pour chaque ligne avec
« awk '{x=x+NF} END{print x}' ». Comme il n'y en a plus qu'un champ
par ligne ça revient au même que de compter le nombre de lignes qui
contiennent le motif « lpcm » (avec « grep -c 'lpcm' »).
Hors ligne
Ce qui fait qu'on a une énorme branche pour le « if » et qu'il n'y a
rien à faire sinon. Puisqu'on est dans un boucle on peut utiliser
« continue » qui permet de court-circuiter le reste de la boucle et
de commencer une nouvelle itération.
Ce que je propose c'est :
J'ai juste inversé le sens du test, c'est à dire que j'effectue le
« continue » si le temps est plus court qu'un certain temps.
Dans ce cas, je trouve qu'on gagne en clarté.
EDIT : D'ailleurs on se rend compte qu'on pourrait
mettre le test pour la limite du temps dès le début de la boucle.
C'est à dire avant le traitement des différents langages. Pas besoin
de faire tout ça, si on ne s'en sert pas .
Du coup on aurait (schématiquement) :
Je trouve que ça s'améliore
Dernière modification par enicar (14-06-2019 19:14:03)
Hors ligne
Et hop !
Hors ligne
On peut mettre :
J'ai remplacé le grep par grep -E pour bénéficier des expressions
régulières étendues. Ça évite de mettre des « \| ». C'est souvent
préférable d'utilser « grep -E », mais pas tout le temps…
L'option « -c » permet de compter les lignes pour lesquelles le motif
correspond, comme tu l'auras compris.
Bon ça te fait du pain sur la planche
D'une manière générale pour compter les lignes de la sortie d'une
commande on peut utiliser « wc -l », ça renvoit juste le nombre de
lignes. Mais dans ce cas, ce n'est pas la peine, grep peut le faire.
Hors ligne
On peut écrire :
On tire une règle générale, dès que tu fais :
Tu peux écrire :
Il y a un autre « pattern » que tu utilises régulièrement que tu peux
simplifier. Dès que tu fais :
Tu peux écrire :
En prenant soin d'apdater le « motif ». Dans awk les expressions
régulières sont des expressions régulières étendues.
Il y a peut-être quelques exceptions… C'est l'enfer les expressions
régulière, chaque programme a sa propre version !
Hors ligne
...
COUNT_AC3_DTS_MPEG1=$(lsdvd_x "$i" | grep -E -c 'ac3,|dts,|mpeg1,')
C'est la dessus que j'étais mais je ne trouvais pas le -E
J'ai rajouté dans le script pour ma part, une sortie pour un mkv qu'en français + sub VF
voulez-vous supprimer le fichier multilangue viendra après. Ce sera en choix.
C'est la dessus que j'étais mais je ne trouvais pas le -E
C'est dans la page manuelle
Hors ligne
Anonyme a écrit :C'est la dessus que j'étais mais je ne trouvais pas le -E
C'est dans la page manuelle
j'y pense jamais.
Bon ça c'est OK
En tous cas, ça fonctionne.
pour le map, je ne sais pas si je l'ai expliqué, c'est parce mplayer et ffmpeg ont une différence de nommage de l'aid pour le mp2. Donc ne pas le toucher si on ne veux pas un croisement entre les audios et les tags .... "audio fr - tag eng"
Dernière modification par Anonyme (14-06-2019 22:08:29)
Dans le côté motif tu utilises une ancre (le $) qui demande à sed
de trouver un nombre quelconque de « , » (éventuellement aucune) situées
à la fin de la chaîne. Le g est donc inutile. Le g sert par exemple
dans :
Retour :
Sans le g :
retour :
Bref, tu peux supprimer le g.
On peut faire bien mieux. On a pas besoin de sed. Au lieu
d'afficher les chaînes séparés par des virgules, on va accumuler
ces chaînes dans une variables dans awk. Et à la fin, on supprime les
virgules à la fin de cette chaîne, puis on l'affiche.
Voilà comme ça se présente :
qui devrait fonctionner, si je ne me suis pas trompé.
Un petit script qui démontre son fonctionnement :
Lorsqu'on exécute ce script, ça affiche :
EDIT : J'ai modifié le code de l'acquisition de la variable INFO_AC3_DTS_MPEG1.
Il y a avait un « \ » en trop. En effet, dans bash, les chaînes comprise entre deux « ' » peuvent
tenir sur plusieurs lignes.
Dernière modification par enicar (15-06-2019 15:52:56)
Hors ligne
Dernière modification par Anonyme (14-06-2019 22:36:50)
Est-ce correct ?
COUNT_SID_FR=$(mplayer_identify "$i" | grep -E -c 'subtitle ( sid ):|language: fr')
En tous cas, ça fonctionne.
Remarque que c'est très différent de :
Dans le premier cas on compte les lignes où l'un des motifs
existent. C'est à dire qu'il pourrait exister des lignes avec
seulement « subtitle ( sid ): » mais qui n'aurait pas
« language: fr » qui serait compté (et inversement).
Par contre dans le second cas on ne compte que les lignes qui comportent
le motif « subtitle ( sid ): » et le motif « language: fr ».
Pour le faire en un seul grep, si le motif « subtitle ( sid ): »
arrive toujours avant le motif « language: fr » :
Comme ça c'est presque complètement équivalent sauf si les motifs
peuvent être trouvés dans l'autre sens…
Hors ligne
pour le map, je ne sais pas si je l'ai expliqué,
De fait, tu n'as pas expliqué grand chose au sujet de ton script…
et des explications seraient vraiment les bienvenues
Hors ligne
Hors ligne
Bonjour,
Un dvd récalitrant "ALEXANDRE" avec la commande de mon post 1 :
ffmpeg -hwaccel cuvid -c:v mpeg2_cuvid -i "$i-$TITLE.vob" -map 0:v -metadata title="$TITLE" -c:v h264_nvenc -preset hq -profile:v high -level 4.2 -loglevel repeat+verbose $MAP_ID_STREAMS -c:a copy $TAGS_ID_STREAMS -movflags +faststart -qmin 18 -qmax 23 -y $i-$TITLE.mkv
Impossible to convert between the formats supported by the filter 'Parsed_null_0' and the filter 'auto_scaler_0'
Passer -hwaccel cuvid en auto semble résoudre le problème.
ffmpeg -hwaccel auto -c:v mpeg2_cuvid -i "$i-$TITLE.vob" -map 0:v -metadata title="$TITLE" -c:v h264_nvenc -preset hq -profile:v high -level 4.2 -loglevel repeat+verbose $MAP_ID_STREAMS -c:a copy $TAGS_ID_STREAMS -movflags +faststart -qmin 18 -qmax 23 -y $i-$TITLE.mkv
la vitesse d'encodage en sera juste réduite de moitié
Je reviens sur ce message. C'est certainement parce que dans ce cas,
le décodeur mpeg2_cuvid n'est pas utilisé.
Hors ligne
Dernière modification par Anonyme (15-06-2019 15:50:29)
Je propose :
D'abord on peut remplacer « grep "aspect ratio:" | awk '{print $11} » par
« awk '/Aspect ratio:/ { print $11 }'
Ensuite on intégre le « head -3 » (qui n'affiche que les trois
premières lignes) dans awk grâce à « NR <= 3 ». Ce qui donne
Le dernier sed fait juste une subsitution sur toutes les lignes. On peut
l'intégrer dans awk :
J'ai juste gardé le sed qui supprime le dernier caractère de la
dernière ligne. On peut l'intégrer à awk, mais ça devient un peu plus
complexe. Je vais voir dans le manuel de gawk ce que je peux faire.
Ça serait simple si on savait à l'avance combien de ligne
correspondent au motif « /Aspect ratio:/ ». Sinon on peut utiliser
un tableau (de awk) et faire le traitement à dans le bloc END avec
l'affichage.
Hors ligne
Anonyme a écrit :Bonjour,
Un dvd récalitrant "ALEXANDRE" avec la commande de mon post 1 :
ffmpeg -hwaccel cuvid -c:v mpeg2_cuvid -i "$i-$TITLE.vob" -map 0:v -metadata title="$TITLE" -c:v h264_nvenc -preset hq -profile:v high -level 4.2 -loglevel repeat+verbose $MAP_ID_STREAMS -c:a copy $TAGS_ID_STREAMS -movflags +faststart -qmin 18 -qmax 23 -y $i-$TITLE.mkv
Impossible to convert between the formats supported by the filter 'Parsed_null_0' and the filter 'auto_scaler_0'
Passer -hwaccel cuvid en auto semble résoudre le problème.
ffmpeg -hwaccel auto -c:v mpeg2_cuvid -i "$i-$TITLE.vob" -map 0:v -metadata title="$TITLE" -c:v h264_nvenc -preset hq -profile:v high -level 4.2 -loglevel repeat+verbose $MAP_ID_STREAMS -c:a copy $TAGS_ID_STREAMS -movflags +faststart -qmin 18 -qmax 23 -y $i-$TITLE.mkv
la vitesse d'encodage en sera juste réduite de moitié
Je reviens sur ce message. C'est certainement parce que dans ce cas,
le décodeur mpeg2_cuvid n'est pas utilisé.
Ou plus utilisé, voir mon post précédent.
Pour que les actions ne soient effectuées que lorsque le motif correspond.
Sans l'antislash, la ligne entière est affichée dès que le motif correspond
(c'est comme si on avait « { print $0 } à la suite de « /motif/) et les
actions sont effectuées pour toutes les lignes en entrées (même si le motif
ne correspond pas).
Dernière modification par enicar (15-06-2019 16:14:52)
Hors ligne
Note : j'ai modifié la définition de la variable INFO_AC3_DTS_MPEG1 dans le post #215.
L'ancienne définition ne devait pas fonctionner, mais je n'en suis pas sûr.
À vérifier.
Celle-ci ?