Petit projet perso : Kbps2Mo

Bonjour à tous !

Je viens de finir de coder un petit programme tout simple mais qui pourrait servir à certains utilisateurs de MEncoder entre autres…

Depuis un moment je réencode beaucoup de HDRIP (720P/1080p) en DivX de bonne qualité. J’ai trouvé en MEncoder le parfait logiciel pour faire ceci, c’est à dire avoir un bon compromis entre qualité et taille. Ouais bon, là je raconte un peu ma vie… :smt003

Mais comme vous devez le savoir dans MEncoder, il faut spécifier non pas une taille de sortie, mais un debit (bitrate) en Kbps. J’ignore si il est possible de spécifier une taille, mais il me semble que non, du moins je l’espère…

C’était donc pas facile au début car le débit ne me parlait pas forcément et je n’avais aucune idée de la taille que feraient mes fichiers à la fin de l’encodage. Étant débutant en programmation, j’ai eu l’idée de me faire un programme me permettant de convertir un débit en taille et vice-versa. Et vu que ça fonctionnait plutôt pas mal en C, je me suis dis que j’allais développer une version pour Windows mais sous Visual Basic (car j’apprends le VB aussi) avec GUI, etc…

Et puis pourquoi ne pas les mettre à disposition des autres utilisateurs potentiellement intéressés.

Pour l’instant il semble que la version Visual Basic ne tourne que sous XP, mais je n’en suis pas sûr je n’ai pas de quoi tester pour le moment.

Version Windows (VB)
Version C
Sources

Voilà donc si ça peut servir… :smt002

Si jamais vous rencontrez des problèmes faites m’en part :smt001

Hum, j’ai regardé les sources, c’est dommage que tu fasses ça en interactif et sans tenir compte de l’audio. Si ça t’intéresse, regardes http://boisson.homeip.net/Encode, c’est un script que j’ai fait au fur et à mesure, j’ai intégré une option Taille qui permet de viser une taille donnée avec mencoder. Par exemple

$ Encode film.mpg Garde Auto Taille 400

encodera le film en visant une taille de 400M. Cela tient compte de l’encodage video mais bien sûr il y a un souci avec les film ayant beaucoup de trames dupliquées, mencoder n’encode pas avec le bon taux dans ce cas. Un bon exemple récemment a été «Le Père Noël est une ordure» (il a fallu lui donné un taux de 1800 pour obtenir un taux final de 900, chaque trame était dupliquée)

Voici du vite fais mal fait pour pouvoir l’utiliser en ligne de commande :

[code]#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char **argv){
float bitrate = 0, taille = 0, temps = 0;
int c;

if(strcmp(argv[0], “kbps2mo”) == 0){
char abitrate;
char atemps;
while ((c = getopt (argc, argv, “d:t:”)) != -1)
switch ©{
case ‘d’:
abitrate = optarg;
break;
case ‘t’:
atemps = optarg;
break;
case ‘?’:
if (optopt == ‘t’ || optopt == ‘d’)
fprintf (stderr, “Option -%c requires an argument.\n”, optopt);
else if (isprint (optopt))
fprintf (stderr, “Unknown option -%c'.\n", optopt); else fprintf (stderr, "Unknown option character\x%x’.\n”,
optopt);
return 1;
default:
abort ();
}
bitrate = atof(abitrate);
temps = atof(atemps);
if (((bitrate > 0) && (bitrate < 20000)) && ((temps > 0) && (temps < 100000))) {
taille = (temps
bitrate
1024/8/1024/1024);
printf("%f\n", taille);
}
else {
puts(“Veuillez indiquer un débit compris entre 0 et 20000 et un temps compris entre 0 et 100000.\nsdkhs”);
}
} else if(strcmp(argv[0], “mo2kbps”) == 0){
char *ataille;
char *atemps;
while ((c = getopt (argc, argv, “s:t:”)) != -1)
switch ©{
case ‘s’:
ataille = optarg;
break;
case ‘t’:
atemps = optarg;
break;
case ‘?’:
if (optopt == ‘t’ || optopt == ‘s’)
fprintf (stderr, “Option -%c requires an argument.\n”, optopt);
else if (isprint (optopt))
fprintf (stderr, “Unknown option -%c'.\n", optopt); else fprintf (stderr, "Unknown option character\x%x’.\n”,
optopt);
return 1;
default:
abort ();
}
taille = atof(ataille);
temps = atof(atemps);
if (((taille > 0) && (taille < 200000)) && ((temps > 0) && (temps < 100000))) {
bitrate = ((taille/temps)81024);
printf("%f\n", bitrate);
}
else {
puts(“Veuillez indiquer un débit compris entre 0 et 20000 et un temps compris entre 0 et 100000.\n”);
}
}

return 0;
}[/code]
Tu l’utilise comme ça :

Salut et merci à vous deux de vos réponses.

Ouais c’est vrai, y’a des choses à améliorer…

Oui je vais regarder ça, comme je vais regarder aussi ce que MisterFreez à pris la peine de faire. Je vais essayer de décortiquer, comprendre, et tester tout ça dans la semaine qui arrive :slightly_smiling:

En tout cas merci à vous !

Au non ce n’est pas une peine, j’en ai surtout profité pour essayer d’utilise getopt() que je n’avais jamais utilisé :slightly_smiling:

Wah, tout ca pour definir le bitrate a utiliser pour viser une taille de fichier definie ?
Perso, pas besoin de script pour ca : une calculette, un petit ‘taille cible en Mo’*8192/‘duree de la video en secondes’ me donne le bitrate en kbps, que je n’ai plus qu’a diviser a mon gout en ‘bitrate audio’+‘bitrate video’…

Pourquoi faire complique quand on peut faire simple ?

PS : Je ne critique pas la demarche, je ne connais rien de plus captivant que de developper son propre petit script pour un usage donne en partant de rien, puis l’optimiser, le bichonner chaque jour, le completer, le simplifier… C’est peut-etre de la masturbation mais p*t**n qu’est-ce que c’est bon !

Je trouve ceci :mencoder -debit $(mo2kbps -s 700 -t 3600)
Encore plus simple, mais le programme en lui même ne fais qu’un bête calcul la taille viens de l’amusement d’un geek quand il programme. :laughing:

Ouais c’est sûr que ça part surtout du fait que j’ai envie de faire un petit programme et que j’avoue n’avoir eu aucune idée meilleure que celle-ci (vu mes connaissances en programmation).

[quote]Perso, pas besoin de script pour ca : une calculette, un petit ‘taille cible en Mo’*8192/‘duree de la video en secondes’ me donne le bitrate en kbps, que je n’ai plus qu’a diviser a mon gout en ‘bitrate audio’+‘bitrate video’…

Pourquoi faire complique quand on peut faire simple ?[/quote]

Mais justement, si j’ai fais ce petit programme à la base qu’en C, c’était pour “automatiser” la tâche répétitive du calcul à la calculatrice. Maintenant je n’ai plus qu’à presser F12 pour faire apparaître mon Tilda et taper “kbps2mo” puis voilà, c’est réglé… Après c’est sûr que c’est pas le genre de programme super utile, c’était surtout pour me simplifier la vie et pour le plaisir de “coder”. :mrgreen:

un lien qui peux peut etre vous interesse mai bon c est sous M$

ripp-it.com/
je m’en servai par le passer et ej doit dire que ce soft est complet et for bien pratique :slightly_smiling:
et en plus pour un noob pas de souci.

Pétard, c’est le forum programmation, il veut programmer et demande un avis sur un programme et il existe des tas de façon d’encoder sous linux avec ou sans calculette alors si il y a un message inadapté, c’est fournir un soft sous windows… Ou alors il faut aller sur Pause Café…

“Pétard”?? Comme tu y va :smt003

Sinon, fran.b, un petit screen dans le fil approprié pour admirer ton nouveau desktop??

il me semble que les source son disponible enfin a l’époque , donc sa pourrait lui servir. après si c est plus dispo j’ai rien dit. si j’ai parler de ce soft c’est parce qu’il a mentionné VB qui tourne sous windows.

Enjoy :smt006