Capture de la sortie de mencoder [résolu] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 02-10-2006 à 15:39:17
wedgeant a écrit : |
je ne suis pas expert en encodage et c'est la (en gras) que je comprend pas?
cela voudrais dire que l'encoder saute des frames?
Marsh Posté le 02-10-2006 à 15:49:05
memaster a écrit : je ne suis pas expert en encodage et c'est la (en gras) que je comprend pas? |
Nope, fps c'est l'abbréviation pour "Frames Per Second"
Donc en gros, quand j'encode sans capture texte, je tourne environ à 27 fps (sachant que quand on lit un film, la vitesse de base est 25 fps). Quand je tourne en mode capture, je descend à 21 fps (c'est dû aux accès disques qui font ralentir le processus).
Wala
Sinon, t'as pas une idée sur la manière de faire ?
Marsh Posté le 02-10-2006 à 16:05:43
wedgeant a écrit : Nope, fps c'est l'abbréviation pour "Frames Per Second" |
ahhhh!!!
donc tu encodes en temps réel (cad en regardant le dvd) et tu perds sur la durée
totale de l'encodage.
pour la solution, je ne sais pas
Marsh Posté le 02-10-2006 à 16:21:44
0x90 a écrit : essaye ca: |
Fonctionne pas ...
La sortie qui m'intéresse se trouvé déjà sur le stdout et pas sur le stderr
edit: corrigé une tite erreur au passage
Marsh Posté le 02-10-2006 à 16:23:13
memaster a écrit : ahhhh!!! |
Non, pas en regardant le dvd, juste quand je redirige la sortie "texte" de la commande dans un fichier, ça fait de gros accès disques et donc ça ralentit le tout
Marsh Posté le 02-10-2006 à 16:26:17
ben alors, je ne comprends pas la nature même de cette perte de fps
à la fin ton dvd il est bien encodé comme il faut dixit sans perte d'aucune frame?
Marsh Posté le 02-10-2006 à 16:38:45
memaster a écrit : ben alors, je ne comprends pas la nature même de cette perte de fps |
On va reprendre du début, papleurer
Quand tu lances mencoder, il n'ouvre pas de lecteur video, il affiche simplement sur la console le résultat de ce qu'il est en train de faire : l'avancement de l'encodage.
En gros, ça donne une sortie qui ressemble à ça:
Code :
|
Je voudrais "capturer" cette sortie pour traiter les informations intéressantes (le % d'avancement, la durée restante, etc ...).
Seulement, cet affichage se passe sur une seule ligne, c'est à dire qu'à chaque fois la ligne est réécrite sur elle même (via un \r à la fin au lieu d'un \n).
Et impossible donc de le traiter simplement via un tail ou un grep.
Par contre, je peux rediriger cette sortie vers un fichier sur disque, mais ça fait écrire environ une 10 aine de lignes par seconde, donc de très gros accès disques d'où un ralentissement conséquent de l'encodage derrière et une perte de fps, même si le dvd est bien encodé à la fin
Marsh Posté le 02-10-2006 à 16:46:55
wedgeant a écrit : |
si tu as une perte de fps, c'est que dans ton encodage final, il va te manquer quelques images intermédiaires qui n'ont pas été traités et donc une perte d'information même si ton
fichier final encodé va à 25img/s.
c'est juste que qd tu as une perte de fps dans ton traitement, l'encodeur va calculer/extrapoler
des images entre les images qu'il n'aura pas pu lire.
ce que je ne comprend donc pas, c'est la perte de 20min?
sinon c'est que tu as un faux pb
pour ta solution, essaye d'encoder en désactivant ta swap disque : si c'est possible?
tu vas peut etre pouvoir recuperer des fps manquant même en écrivant ton log
sur le disque. tu peux essayer aussi d'envoyer ta sortie dans un log sur le réseau (un disque nfs par exemple),
ainsi ta machine principale (celle qui encode) ne ralentira pas (enfin, je crois).
Marsh Posté le 02-10-2006 à 17:06:06
t'as toujours pas compris cette histoire de fps
L'encodeur ne perds pas des frames, il met juste plus de temps pour faire l'encodage.
Si pour encoder un film de 1h30 il te faut 1h30, tu as encodé en moyenne à 25fps.
Si pour encoder un film de 1h30 il te faut 1h50, tu as encodé en moyenne à 21fps. Et t'as perdu 20 de temps de ta précieuse vie
C'est juste une mesure de vitesse, comme en bagnole tu va a 100km/h au lieu de 130km/h, tu perds du temps pour un trajet donné, mais t'as pas sauté des bouts de route
Marsh Posté le 02-10-2006 à 17:10:20
ok, d'ac
ma question est donc?
es tu as 20min près?
après ben vois si mes propositions te semblent aider pour te faire gagner du temps.
Marsh Posté le 02-10-2006 à 17:15:06
perdre 20min simplement pour un pb de recup des infos en sortie, ca fait qand même chier
Marsh Posté le 02-10-2006 à 17:20:46
tu devrais peut-être regarder du côté d'AcidRip : il doit faire à peu près ce que tu veux...
Marsh Posté le 03-10-2006 à 08:17:39
franceso a écrit : tu devrais peut-être regarder du côté d'AcidRip : il doit faire à peu près ce que tu veux... |
Mon script est inspiré du fonctionnement d'acidrip
Maintenant, pourquoi j'ai voulu en faire un moi même à la main ? Tout simplement parce que j'ai constaté qu'avec acidrip, il y avait la même perte (encodage environ à 21/22 fps au lieu de 27/28)
Sinon, memaster62: non, je ne suis pas à 20 minutes près personellement, mais comme le dir 0x90, perdre 20 minutes d'encodage pour seulement une récupération d'informations, ça fait lourd
Pour les solutions:
Merci bien sinon
Marsh Posté le 03-10-2006 à 09:26:59
il y a surement un moyen d'utiliser une partie de ta ram pour en faire un "mount point".
et je me demande si un hdd flash (genre une CF sur usb) pourrais te convenir car ils ont des temps d'accès
beaucoup mois elevé, etant donné que ici pour ecrire du txt, ce n'est pas le debit qui
va être un handicap.
Marsh Posté le 03-10-2006 à 09:38:40
memaster a écrit : il y a surement un moyen d'utiliser une partie de ta ram pour en faire un "mount point". |
Yep, j'ai déjà /tmp qui est en RAM ... c'est ce que je vais faire, mais comme mon but final est la distribution de ce script, je cherche une solution qui soit la plus générale possible
Marsh Posté le 03-10-2006 à 14:45:20
wedgeant a écrit : Bonjour à tous |
pourquoi ne pas contacter l'équipe de tuxrip ? (qui passe régulièrement sur HFR)
http://tuxrip.free.fr/
http://forum.hardware.fr/hardwaref [...] 8446-1.htm
Marsh Posté le 03-10-2006 à 14:56:22
Mjules a écrit : pourquoi ne pas contacter l'équipe de tuxrip ? (qui passe régulièrement sur HFR) |
Yep, je verrais avec eux
Merci pour l'info que je n'avais pas vue
[edit: je suis un boulet ]
Marsh Posté le 03-10-2006 à 16:07:46
et tu pourrais pas faire un petit programme C qui te fait une lecture de ligne terminée par '\r' plutôt que '\n' ?
C'est vrai que ça te force à ne pas tout faire en shell, mais c'est peut-être un moyen rapide d'arriver à tes fins...
Marsh Posté le 03-10-2006 à 16:14:45
et modifier les sources aussi, histoire de balancer le retour à la ligne
(je n'y avais même pas pensé )
Marsh Posté le 03-10-2006 à 16:25:36
memaster a écrit : et modifier les sources aussi, histoire de balancer le retour à la ligne |
Mwaif, moyen quand même, si je veux pouvoir distribuer ce script, ça veut dire distribuer aussi un patch pour Mplayer et obliger les gens à recompiler ... le but final reste une quasi non intervention de l'utilisateur lors d'un rip de dvd : nom du film, répertoire de destination et basta
franceso a écrit : et tu pourrais pas faire un petit programme C qui te fait une lecture de ligne terminée par '\r' plutôt que '\n' ? |
J'y ai pensé, mais ça me gène un peu pour la même raison, obliger les gens à compiler quelque chose
Marsh Posté le 03-10-2006 à 16:50:19
Si c'est juste la compilation qui te gêne, tu peux le faire en perl :
getline.pl
Code :
|
> echo -ne "toto\rtutu" | ./getline.pl |
Marsh Posté le 03-10-2006 à 16:52:14
franceso a écrit : Si c'est juste la compilation qui te gênes, tu peux le faire en perl : |
Déjà testé, le traitement via perl fait perdre environ le même temps qu'en envoyant la sortie dans un fichier
Marsh Posté le 03-10-2006 à 17:03:11
Il y a deux ou trois ans de ça j'avais fait un script qui faisait la même chose... Et pour traiter la sortie de mencoder, j'avais été obligé de faire comme toi, envoyer tout dans un fichier log et traiter celui ci. J'avais pas souvenir que ça ralentissait particulièrement le processus mais c'est fort possible.
Tout ça pour faire signe que t'es pas seul à te poser la question. En passant par un FIFO ça serait pas plus rapide ? Ou bien faudrait trouver le moyen de réduire la fréquence de rafraîchissement de la sortie stdout de mencoder....
edit : Autre chose tant que j'y suis, as-tu fais des tests pour voir si, par hasard, ce qui ralentit tant c'est le fait de traiter le log plutôt que de l'écrire ? Je viens de me souvenir que l'affichage de mon script qui montrait la progression du rippage n'était mis à jour que toutes les 30 secondes, justement pour des questions de perfs... ?
Marsh Posté le 03-10-2006 à 17:07:55
wedgeant a écrit : Déjà testé, le traitement via perl fait perdre environ le même temps qu'en envoyant la sortie dans un fichier |
même si tout ton script est en perl ?
là je vois pas trop ce que tu pourrais faire de mieux...
Marsh Posté le 04-10-2006 à 08:18:06
Nonor_ a écrit : Il y a deux ou trois ans de ça j'avais fait un script qui faisait la même chose... Et pour traiter la sortie de mencoder, j'avais été obligé de faire comme toi, envoyer tout dans un fichier log et traiter celui ci. J'avais pas souvenir que ça ralentissait particulièrement le processus mais c'est fort possible. |
Merci pour ta réponse, je vois que je suis pas tout seul à me gratouiller les neurones à ce propos
Pour tes propositions:
Marsh Posté le 04-10-2006 à 09:31:18
En fouillant sourceforge, j'ai trouvé un script python qui utilise mencoder, je vais essayer de le tester ce soir pour voir ce qu'il donne et je regarderais au niveau du code comment ils s'en sortent pour traiter la sortie, je vous tiendrais au courant
Marsh Posté le 04-10-2006 à 14:21:26
ReplyMarsh Posté le 04-10-2006 à 14:59:10
0x90 a écrit : mencoder blahblahblah | tr '\033' '\n' |
Ouuuuhhh, je le sens bien ça
J'essaye ce soir, mais y'a peut-être de fortes chances pour que ça fonctionne
Marsh Posté le 05-10-2006 à 11:45:32
En fait, il fallait faire
Code :
|
C'était tout con, mais fallait y penser, merci beaucoup 0x90 !!!
Marsh Posté le 02-10-2006 à 08:31:12
Bonjour à tous
Je suis en train de mettre en place un script shell de rip dvd -> avi qui nécessite une intervention extrèmement minime de l'utilisateur (titre du film, taille finale, langue audio, langue sous-titres et c'est tout ). Pour ça j'utilise (entre autres) mencoder (encodeur de mplayer).
Actuellement, le script fonctionne sans aucun souci, mais je souhaiterais capturer sa sortie pour cacher tous les messages pas zoulis et traiter les informations de sortie (% d'avancement, temps restant etc ...).
Mon seul problème est que l'affichage de ces informations est traité avec un "\r" final (à priori, faudrait que je regarde les sources, pas eu le temps) et qu'un traitement du style
ne permet pas de capturer cette ligne, de même avec grep ou awk ...
J'ai bien trouvé un moyen qui consiste à envoyer la sortie de mencoder vers un fichier puis de faire un tail sur le fichier, mais avec cette méthode je perds environ 5 fps (passage de 27 fps à 21/22 fps) et donc pas loin de 20 min d'encodage par film
Je cherche donc un moyen de récupèrer la sortie en RAM ou un moyen de la traiter en direct (en évitant perl qui fait perdre autant de temps que le passage par fichier).
Je précise que j'ai testé les méthodes du style
et ça ne donne rien d'utilisable (en fait, text est vide )
Merci bien
Message édité par wedgeant le 05-10-2006 à 11:46:06
---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW