MODIFIER LES SOUS TITRES. [LINUX]

Mic32768 Messages postés 9 Date d'inscription jeudi 28 avril 2005 Statut Membre Dernière intervention 11 juin 2007 - 9 juin 2007 à 09:45
cs_anjayl Messages postés 1 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 22 novembre 2007 - 22 nov. 2007 à 00:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43043-modifier-les-sous-titres-linux

cs_anjayl Messages postés 1 Date d'inscription mardi 6 novembre 2007 Statut Membre Dernière intervention 22 novembre 2007
22 nov. 2007 à 00:37
Bonjour à tous.

Je débarque un peu au hasard pour tout vous dire... et je ne suis pas du tout trempé dans la programmation.

J'ai effectivement pas mal de fichiers .srt en décalage, souvent de 2 à 5 secondes; et pour que je comprenne bien, tout ce qu'il y a au dessus n'est absolument pas abordable pour un newbie comme moi... ? navré si je dérange, je recherche juste un petit programme tout simple qui permette de décaler les sous titres, et gogole m'a envoyé ici...

Mais je comprends qu'à moins d'être un programmeur, il n'y a aucune solution... hu?!

bonne route
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
11 juin 2007 à 08:19
D'autant plus que, pour ce qui est du DotNet, c'est très facile de vérifier l'implémentation via Reflector : cet outil gratuit permet de voir le code pré-assembleur MSIL désassemblé dans le langage de ton choix, donc de vérifier les optimisations du compilateur.
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 juin 2007 à 07:01
Bon là, je vais reformuler tout ça, car j'ai fais plein d'erreurs:

Mic32768 >> Mon exemple est très bien structuré. Aussi, je n'est jamais vue de compilateur refuser l'optimisation parce qu'il y a un jmp volontairement ajouté dans le code.

Pour le reste, BruNews a totalement raison. Il ne faut pas croire
sur parole tout ce qui sort de la bouche des "grands" programmeurs. Il faut aussi se baser sur sa déduction et sur le résultat (le listing par exemple). Si tu trouve que les goto n'ont pas leur place, c'est que tu ne sais pas où et comment bien les utiliser tout simplement, car les goto on leur raison d'être (je ne crois pas que Ritchie les aient intégrés au langage pour rien).

Il peut, en effet, exister un moyen de se passer des goto. Cependant, on peut générer une structure de code bien plus difficile à lire et voir même à coder.
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 juin 2007 à 05:07
Bon d'accord, mon exemple n'est peut-être pas si dur changer car il est extrêmement basique:
void fonction (...)
{
...
if(x) {
...
if(y) {
...
}
fclose(file);
}
free(mem);
}

N'empêche que sur des codes légèrement plus complexes, on ne peut pas utiliser cette méthode sans dupliquer des morceaux de codes et aussi rendre le code très compliqué à lire et très peu "élégant".
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 juin 2007 à 04:14
Mic32768 >> Mon exemple est parfaitement structuré et je n'est jamais vue de compilateur refuser l'optimisation parce qu'il y a un jmp volontairement ajouté dans le code. Je serais curieux de voir comment tu peux reproduire l'exemple que j'ai donné plus haut avec ta soi-disent programmation structuré et optimisé.
Pour le reste, BruNews a totalement raison. Il ne faut pas croire tout ce qui sort de la bouche de ces "programmeurs". Si tu trouve que les goto n'ont pas leurs place, c'est que tu ne sais pas les utiliser tout simplement.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 juin 2007 à 00:34
"... devrait JAMAIS être utilisé ..."
Il n'y a rien qui ne doit jamais être utilisé en prog, faut comparer et mesurer ce qui sort du compilo. Tout le reste est discours de secte et philo nuisible.
Il ne faut pas se laisser bourrer le crane par les soit disant grands gourous, encore moins essayer de refourguer aux autres ce qu'on t'a inculqué.
Va donc lire Michael Abrash et tu verras ce qu'il en est des tabous quand il s'agit d'optimiser.
Mic32768 Messages postés 9 Date d'inscription jeudi 28 avril 2005 Statut Membre Dernière intervention 11 juin 2007
11 juin 2007 à 00:10
Au contraire, les goto n'aident en rien l'optimisation du code. Si tu crois que mettre des goto optimisent le code, et bien c'est totalement faux puisque le compilateur optimisera bien mieux que le programmeur. Or, certains compilateur vont jusqu'à ne pas optimiser du tout une fonction qui contient un goto. Il faut également savoir que l'on ne parle pas ici d'assembleur, mais bien de C où le programmeur se doit de structurer correctement son programme. Gardons également à l'esprit que c'est un langage de haut niveau. Les jump et tout le tralala, c'est au compilateur de gérer ça, pas au programmeur. Les goto brisent une bonne structure de programme et prendre l'habitude de mettre des goto, surtout dans l'exemple de SAKingdom qui peut revenir très souvent, est mal programmer. Je vois très mal un programme utiliser des goto à chaque fois que le code de ton exemple revient. En basic, on utilisait les goto, mais là on est en C et on a bien assez d'outils plus évolués(et surtout un compilateur qui fait de l'excellent travail) que le goto pour s'en sortir. Mettre des goto en croyant que l'on optimise le code, c'est faire le contraire. À part pour sortir des boucles(bien que ce ne soit pas élégant du tout), goto ne devrait JAMAIS être utilisé avec un langage comme le C ou le C++.
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
10 juin 2007 à 08:14
Tout à fait d'accord avec SAKingdom : les Goto et les Return permettent d'avoir un code optimisé et lisible, il ne faut donc pas écouter bêtement ce que les jargonneux veulent nous faire croire, à savoir que le code source doit être pénible à écrire, lent en exécution et difficile à lire :-)
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 juin 2007 à 03:36
Petite erreur dans mes exemples. J'ai oublié de changer le type de retour de la fonction:

Sans goto
void fonction (...)
{
...
if(!x) {
free(mem);
return;
}
...
if(!y) {
free(mem)
fclose(file);
return;
}

...

free(mem);
fclose(file);
}

free revient 3 fois, fclose 2 fois et return 3 fois.

Avec goto
void fonction (...)
{
...
if(!x) goto freebuf;
...
if(!y) goto closefile;
...
closefile:
fclose(file);
freebuf:
free(mem);
}

fclose free et return n'apparaisse qu'une seule fois et 2 goto.
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
10 juin 2007 à 03:22
Salut il a l'air sympa ce programme.

Le type bool a été introduit avec le C99.

Pour le goto... Sujet qui a usé beaucoup de claviers. En fait le goto évoque le BASIC, donc péjoratif. Or le code C est transformé par le compilateur en instructions assembleur. Si quelqu'un trouve un jour un programme asembleur sans instruction jump je lui paye la bière et le café. L'optimisation de code C passe par le goto: un exemple qui peut inspirer http://fr.wikipedia.org/wiki/Optimisation_de_code

Je suis également pour l'utilisation des return;

Bonne prog et vive Linux.
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 juin 2007 à 03:13
Mais qui parle d'habitude ? Et quel est le rapport avec la POO ? Ce n'est pas parce que quelqu'un a dis que les goto n'étaient pas bon qu'il faut forcément l'exclure de tout. Ce que je dis, c'est qu'un goto bien utilisé empêche une duplication du code comme par exemple (très basique):

Sans goto
int fonction (...)
{
...
if(!x) {
free(mem);
return;
}
...
if(!y) {
free(mem)
fclose(file);
return;
}

...

free(mem);
fclose(file);
}

free revient 3 fois, fclose 2 fois et return 3 fois.

Avec goto
int fonction (...)
{
...
if(!x) goto freebuf;
...
if(!y) goto closefile;
...
closefile:
fclose(file);
freebuf:
free(mem);
return 0;
}

fclose free et return n'apparaisse qu'une seule fois et 2 goto.
Mic32768 Messages postés 9 Date d'inscription jeudi 28 avril 2005 Statut Membre Dernière intervention 11 juin 2007
10 juin 2007 à 02:53
C'est franchement une mauvaise habitude à prendre, surtout si l'on veut se mettre au C++ et à la POO plus tard. Il y a presque toujours une solution alternative aux goto pour peu que l'on soit capable d'être assez logique.
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 juin 2007 à 01:48
Il n'y a absolument rien de stupide là dedans. Bien sûr, je ne parle pas d'en mettre partout mais uniquement à des endroits "stratégiques". Si on sait comment l'utiliser, on peut éviter une duplication inutile de code.
manta7 Messages postés 105 Date d'inscription samedi 25 janvier 2003 Statut Membre Dernière intervention 13 décembre 2008
10 juin 2007 à 01:04
Avec un langage structuré comme le C, meme si c'est directement un héritage de l'assembleur, c'est assez stupide pour utiliser un goto quand meme...
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 juin 2007 à 00:18
Parce que s'il travail en C, les bool n'existes tout simplement pas.

Et pourquoi devrait-on éviter de mettre plusieurs return dans une fonction ? Faire un return direct d'une valeur ou variable est plus rapide que de transférer la valeur dans une variable temporaire puis retourner ensuite.
Deplus, il n'y a aucune raison de ne pas utiliser de goto dans un code si ce n'est d'une question d'esthétique qui d'ailleurs, dans certains cas, peut être remit en cause.
Mic32768 Messages postés 9 Date d'inscription jeudi 28 avril 2005 Statut Membre Dernière intervention 11 juin 2007
9 juin 2007 à 18:48
Pourquoi pas de bool?
manta7 Messages postés 105 Date d'inscription samedi 25 janvier 2003 Statut Membre Dernière intervention 13 décembre 2008
9 juin 2007 à 10:31
Et puis hors de question de mettre des bool dans mon programme :)
manta7 Messages postés 105 Date d'inscription samedi 25 janvier 2003 Statut Membre Dernière intervention 13 décembre 2008
9 juin 2007 à 10:04
En tout cas dites moi si ça vous sert et si y'a d'autres fonctions qui pourrait vous aider c'est toujours sympa a coder..
Mic32768 Messages postés 9 Date d'inscription jeudi 28 avril 2005 Statut Membre Dernière intervention 11 juin 2007
9 juin 2007 à 10:02
Patrice99: C'est sur que c'est plus simple à lire, mais on ne devrait jamais mettre plusieurs return dans une fonction à moins de ne pas avoir le choix. C'est vrai que sa fonction est plus simple à lire, mais il faut tout de même faire éviter de faire ainsi, c'est comme mettre des goto. Remarque également qu'un switch aurait aussi fait l'affaire car plus lisible, mais c'est inutile de faire un switch avec seulement 2 tests.

Les fichiers .ass sont un autre format de fichiers de sous-titres que j'utilise souvent.

Salut et bonne chance, je vais me coucher il est 4h du matin chez moi :sommeil:
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
9 juin 2007 à 09:55
Je ne suis pas du même avis : il vaut mieux mettre If ... Return, que de mettre des If ... Else à n'en plus finir : la raison est que la première solution est une procédure linéaire simple à lire, alors que la seconde est hiérarchique donc plus difficile à lire, surtout s'il y a d'autre If imbriqués.
manta7 Messages postés 105 Date d'inscription samedi 25 janvier 2003 Statut Membre Dernière intervention 13 décembre 2008
9 juin 2007 à 09:52
Ok pour les return je savais pas que ma fonction dix était moche.
Par contre je suis d'accord ça aurait pu etre plus poussé, plus performant et mieux codé mais j'ai fait ça en 2 jours pour pouvoir modifier d'une demi seconde les sous titres de scanner for a darkly :) donc je me suis pas fait chier a faire un truc optimal

Genre la fonction ajout qui fait

# t[0]=expression[11];
# t[1]=expression[10];
# t[2]=expression[9];
# m=ctoi(t,3);
#
# t[0]=expression[7];
# t[1]=expression[6];
# p1=ctoi(t,2);
#
# t[0]=expression[4];
# t[1]=expression[3];
# p2=ctoi(t,2);
#
# t[0]=expression[1];
# t[1]=expression[0];
# p3=ctoi(t,2);

c'est sur qu'il aurait mieux valu faire une fonction que l'on appelle 4 fois plutot que ça

Sinon c'est quoi les fichier .ass ?
Mic32768 Messages postés 9 Date d'inscription jeudi 28 avril 2005 Statut Membre Dernière intervention 11 juin 2007
9 juin 2007 à 09:45
Salut, bravo pour l'idée qui est très bonne, et ton programme qui peut être très utile!

Cependant, j'ai quelques remarques chiantes à faire.

Premièrement, on n'est pas censé mettre des return partout comme ça, c'est de la mauvaise programmation. Il faut que le programme se déroule de manière fluide et élégante si possible, mais là ça coupe partout. Mettre autant de return ne vaut pas mieux qu'utiliser les goto! Essaie plutôt d'utiliser des boucles while avec des variables bool pour gérer si le programme doit quitter, mais surtout pas plein de return!

Pourquoi mettre "return;" à une procédure void? On sait de toute façon qu'elle ne retourne pas de valeur!

Cette fonction est franchement horrible:

int dix(int x)
{
if(x==0)
return 1;
if(x==1)
return 10;
if(x==2)
return 100;

return 0;
}

Tu aurais pu remplacer par:

int dix(int x)
{
int retour = 0;
if(x == 1)
retour = 10;
else if(x == 2)
retour = 100;
return retour;
}

qui est déjà un peu mieux, même si je suis certain qu'il y a moyen de faire mieux. Mais là, c'est quand même la base, tu devrais essayer de t'améliorer niveau algorithmie!

De plus, il y a beaucoup trop de nombres magiques ce qui rendra ton programme très difficile à modifier.

Chose certaine, tu devrais revoir la logique de ton programme, parce qu'il y a (trop) place à l'amélioration!

Désolé de faire le chialeux, mais il fallait que je le dise, je veux juste t'aider. Mais encore une fois, je te dis bravo d'avoir pensé à ça et je me servirais surement de ce prog s'il prenait en charge les fichiers .ass!
Rejoignez-nous