Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 08/05/2007, à 21:44

brizou

script basé sur une commande mencoder (débutant)

Bonjour à tous .
Voilà ma question j'utilise actuellement mencoder pour incruster mes sous-titres dans mes videos (avidemux me décale le son et le sous-titres de temps en temps donc...).
Ce que je voudrais faire c'est créer un petit programme ou je choisisse le sous-titre, la video et le nom du fichier terminé, tous ça renverait à la commande

mencoder -sub tonfilm.srt -fontconfig -font Arial -subfont-text-scale 3  -oac copy -ovc xvid -xvidencopts bitrate=900 tonfilm.avi -o tonfilmSTFR.avi

Est-il possible de faire cela et en quel language, bash peut-être ?

P.S : Je n'ai jamais rien codé mais je suis en grandes vacances donc j'ai le temps pour apprendre .

Hors ligne

#2 Le 09/05/2007, à 00:16

kaworu

Re : script basé sur une commande mencoder (débutant)

brizou a écrit :

Bonjour à tous .
Voilà ma question j'utilise actuellement mencoder pour incruster mes sous-titres dans mes videos (avidemux me décale le son et le sous-titres de temps en temps donc...).
Ce que je voudrais faire c'est créer un petit programme ou je choisisse le sous-titre, la video et le nom du fichier terminé, tous ça renverait à la commande

mencoder -sub tonfilm.srt -fontconfig -font Arial -subfont-text-scale 3  -oac copy -ovc xvid -xvidencopts bitrate=900 tonfilm.avi -o tonfilmSTFR.avi

Est-il possible de faire cela et en quel language, bash peut-être ?

P.S : Je n'ai jamais rien codé mais je suis en grandes vacances donc j'ai le temps pour apprendre .

Salut !
Bash est sans doute une bonne solution. Si tu as du temps, je te conseil de lire ce guide Bash, qui pour moi est la référence (et il existe traduit en français) :
http://abs.traduc.org/

Il est très complet mais un peu abrupt pour commencer. Pour commencer en douceur, je te conseil la documentation de Gentoo GNU/Linux (distribution réputée pour sa bonne documentation) qui malheureusement n'est pas encore traduite :
http://www.gentoo.org/doc/en/articles/b … ple-p1.xml

Pour t'aider un peu, voilà une version "brut" d'un script qui fait ce que tu veux :
mencoder.sh

#!/bin/bash
mencoder -sub "$1" -fontconfig -font Arial -subfont-text-scale 3  -oac copy -ovc xvid -xvidencopts bitrate=900 "$2" -o "$3"

Ce script prend 3 paramètres : le premier est le fichier de sous-titres, le deuxième le fichier vidéo de base, et le dernier le fichier de sortie. Par exemple :

mencoder.sh tonfilm.srt tonfilm.avi tonfilmSTFR.avi

tu peux voir que dans le script, $1 est remplacé par le premier argument, $2 le second etc.
pour l'améliorer il faudrait par exemple tester qu'il y a bien 3 arguments qui sont donnés, que le fichier de sous-titre et le fichier vidéo de base sont des fichiers qui existent, que le fichier de sortie n'existe pas encore, etc. Pour tout ça je te laisse te documenter et essayer un peu.
Si tu as besoin d'aide, n'hésite pas wink

k.


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#3 Le 09/05/2007, à 00:20

abetsic

Re : script basé sur une commande mencoder (débutant)

Bonjour,

Un script bash me semble en effet bien approprié

Tu peux essayer quelque chose du genre :

#!/bin/sh
SUBTITLE=$1
AVIFILE=$2
mencoder -sub $SUBTITLE -fontconfig -font Arial -subfont-text-scale 3  -oac copy -ovc xvid -xvidencopts bitrate=900 $AVIFILE -o $(AVIFILE%.avi}STFR.avi

Tu l'enregistres sous incrust_sub.sh, tu donnes les droits d'execution (chmod +x incrust_sub.sh) et tu l'executes de la manière suivante :
./incrust_sub.sh ton_fichier_sous_titres.srt ton_fichier.avi

Tu peux aussi modifier le script pour qu'il te propose de choisir le fichier de sous-titres et le fichier avi par une boite de dialogue, tu dois pouvoir faire ça avec zenity il me semble.

Hors ligne

#4 Le 09/05/2007, à 11:21

brizou

Re : script basé sur une commande mencoder (débutant)

Ok merci à tout les deux, je vais essayer de le parametrer pour qu'il me demande les fichiers à ouvrir avec zenity .
Encore merci je vais me pencher là dessus

Hors ligne

#5 Le 12/05/2007, à 15:23

Alain.g

Re : script basé sur une commande mencoder (débutant)

Salut

Je prépare pour moi quelque chose d'assez proche, alors voici ce que pourrait donner ce que tu souhaites avec Zenity

#!/bin/bash

cd "$HOME" # indiquer ici l'emplacement où se trouvent habituellement les vidéos

if vid=$(zenity \
		--file-selection \
		--title="Sélection de la vidéo "\
	)
then 
	st=$(zenity \
		--file-selection \
		--title="Sélection du fichier de sous-titres correspondant "\
	); [ $? = 1 ] && exit 1

	vidout=$(zenity \
		--entry \
		--entry-text="`basename "${vid%.*}-vostfr.avi"`" \
		--text="Indiquer le nom de la vidéo à créer" \
		--title="Nom de la vidéo" \
		--width="500"\
	); [ $? = 1 ] && exit 1
else exit 1;
fi

debut="`date +%H:%M:%S`"

mencoder "$vid" -sub "$st" -o "${vid%/*}/$vidout" \
	-fontconfig \
	-font Arial \
	-subfont-text-scale 3  \
	-oac copy \
	-ovc xvid \
	-xvidencopts bitrate=900 \
	2>&1 | awk -vRS="\r" '$1 ~ /Pos/ {gsub(/Pos:/,"  ");gsub(/%\)/," ");gsub(/ \(/," ");print $3"\n#Position :\\t"$1"\\nTrame :\\t"$2"\\nEffectué :\\t"$3"%\\nVitesse :\\t"$4"\\nReste :\\t"$6"\\nTaille :\\t"$7; fflush();}'|\
	zenity --progress --auto-close --title="$vidout" --width="250"

fin="`date +%H:%M:%S`"

zenity --info --text="L'opération est terminée!\n\nCommencée à\t$debut\nFinie à\t\t$fin"

exit 0

Je conseille d'indiquer l'emplacement du dossier dans lequel se trouve habituellement les vidéos afin que la boîte de dialogue s'ouvre directement au bon endroit (idem pour les sous-titres).
La vidéo sera créee dans le même dossier que la vidéo originale.

Pendant l'encodage une fenêtre Zenity affichera une barre de progression avec quelques infos :
captureal8.png
Il n'est donc pas indispensable de lancer le script en console.

Ps : si tu es sous Feisty, une modif est à faire pour améliorer la vitesse d'encodage de xvid :
https://bugs.launchpad.net/ubuntu/+source/xvidcore/+bug/84705
http://forum.ubuntu-fr.org/viewtopic.php?id=112531

Dernière modification par Alain.g (Le 14/05/2007, à 04:25)


Xubuntu Karmic !

Hors ligne

#6 Le 13/05/2007, à 14:10

brizou

Re : script basé sur une commande mencoder (débutant)

Salut, alors je n'ai pas trop eu le temps de faire le script car j'ai trouvé un peu de boulot en ce moment .
Je viens d'essayer ton script et il ne fonctionne pas chez moi, il me met que l'opération est terminée alors que rien n'a commencé, aucun  fichier vost n'a été créé ...

Dernière modification par brizou (Le 13/05/2007, à 14:45)

Hors ligne

#7 Le 13/05/2007, à 15:11

Alain.g

Re : script basé sur une commande mencoder (débutant)

hum bizarre.. je viens de tester sur plusieurs vidéos (avec par exemple des espaces dans les noms ou des apostrophes) et ça a fonctionné à tous les coups hmm

C'est peut-être mencoder qui n'a pas supporté ta vidéo  ?  Ou la ligne de awk qu'il faut adapter si tu utilises une version de Mencoder plus ancienne (je suis sous Feisty, je me base sur la dernière version de Mencoder)
ou alors tu as inversé la sélection des sous-titres et de la vidéo...
Sinon je ne vois pas vraiment hmm si quelqu'un a une idée...

J'en ai profité pour faire une légère variante avec boucles pour traiter autant de vidéos qu'on souhaite :

#!/bin/bash

cd "$HOME" # indiquer ici l'emplacement où se trouvent habituellement les vidéos
l=0

while [ $? = 0 ]; do
	if vid[$l]=$(zenity \
			--file-selection \
			--title="Sélectionnez la vidéo "\
		)
	then 
		st[$l]=$(zenity \
			--file-selection \
			--title="Sélectionnez le fichier de sous-titres"\
		); [ $? = 1 ] && exit 1
		vidout[$l]=$(zenity \
			--entry \
			--entry-text="`basename "${vid[$l]%.*}-vostfr.avi"`" \
			--text="Indiquer le nom de la vidéo de sortie" \
			--title="Nom de la vidéo à créer" \
			--width="500"\
		); [ $? = 1 ] && exit 1 
	else exit 1;
	fi
	let l++
	zenity --question --text="voulez-vous sélectionner une autre vidéo ?" title="continuer ?"
done

IFS='
'
m=0

zenity \
	--question \
	--title="Récapitulatif" \
	--text="Vérifiez s'il n'y a pas d'erreur puis validez :\n\n$(for v in ${vid[*]}; do [ $l -gt 1 ] && echo -n "$((m+1))/$l\) "; echo -e "Vidéo source :\t$v\nSous-titres:\t${st[$m]}\nVidéo à créer:\t${v%/*}/${vidout[$m]}\n"; let m++; done)"
[ $? = 1 ] && exit 1


debut="`date +%H:%M:%S`"
m=0

for v in ${vid[*]}; do
	mencoder "$v" -sub "${st[$m]}" -o "${v%/*}/${vidout[$m]}" \
		-fontconfig \
		-font Arial \
		-subfont-text-scale 3  \
		-oac copy \
		-ovc xvid \
		-xvidencopts bitrate=900 \
		2>&1 | awk -vRS="\r" '$1 ~ /Pos/ {gsub(/Pos:/,"  ");gsub(/%\)/," ");gsub(/ \(/," ");print $3"\n#Position :\\t"$1"\\nTrame :\\t"$2"\\nEffectué :\\t"$3"%\\nVitesse :\\t"$4"\\nReste :\\t"$6"\\nTaille :\\t"$7; fflush();}'|\
		zenity --progress --auto-close --title="`[ $l -gt 1 ] && echo $((m+1))/$l` ${vidout[$m]}" --width="250"
	let m++
done

fin="`date +%H:%M:%S`"

zenity --info --text="L'opération est terminée!\n\nCommencée à\t$debut\nFinie à\t\t$fin"

exit 0

Dernière modification par Alain.g (Le 14/05/2007, à 04:26)


Xubuntu Karmic !

Hors ligne

#8 Le 13/05/2007, à 21:49

brizou

Re : script basé sur une commande mencoder (débutant)

Alors la je comprends pas je suis sous feisty aussi et je pense avoir la dernière version de mencoder enfin apt-get me dit que c'est la dernière et j'ai essayé dans tout les sens pour la sélection vidéo/sous-titres rien n'y fait . J'ai essayé avec d'autres vidéo aussi .
Etrange...

Dernière modification par brizou (Le 13/05/2007, à 21:51)

Hors ligne

#9 Le 13/05/2007, à 23:12

Alain.g

Re : script basé sur une commande mencoder (débutant)

Peux-tu essayer de copier ce code, tout d'un coup, dans la console. Cela va télécharger une petite vidéo (10 secondes) dans le dossier temporaire, puis menconder y incruste un sous-titre (j'ai gardé les mêmes paramètres, juste une taille plus grande)  et zenity affiche une barre de progression (avec un effet un peu bizarre car la vidéo est très courte) :

cd /tmp; wget "http://uranus.it.swin.edu.au/~jn/media/saylinux.avi" &&  \
echo -e "1\n00:00:00,000 --> 00:00:010,000\nAlors ça a fonctionné brizou?">sous-titres.srt && \
mencoder saylinux.avi -sub sous-titres.srt -o vid.avi \
	-fontconfig \
	-font Arial \
	-subfont-text-scale 5  \
	-oac copy \
	-ovc xvid \
	-xvidencopts bitrate=900 \
	2>&1 | awk -vRS="\r" '$1 ~ /Pos/ {gsub(/Pos:/,"  ");gsub(/%\)/," ");gsub(/ \(/," ");print $3"\n#Position :\\t"$1"\\nTrame :\\t"$2"\\nEffectué :\\t"$3"%\\nVitesse :\\t"$4"\\nReste :\\t"$6"\\nTaille :\\t"$7; fflush();}'|\
	zenity --progress --auto-close --width="250" && \
mplayer vid.avi

Si ça marche il faudrait commenter les deux lignes à partir de "2>&1 | awk" dans le script et le lancer en console pour voir exactement le message d'erreur de mencoder.

@ golgot200 : oui c'est parfaitement possible. Je peux pas m'y étendre tout de suite mais je repasserai.
On peut par exemple supprimer le "[ $? = 1 ] && exit 1" afin que le script puisse continuer même si la sélection est annulée. Ensuite on teste $st pour n'afficher l'option -sub de mencoder que s'il contient quelque chose.

Ou principe différent : plus de fenêtre de sélection, on cherche simplement s'il y a un .srt du même nom que la vidéo, si oui on propose de l'incruster.

Dernière modification par Alain.g (Le 14/05/2007, à 04:27)


Xubuntu Karmic !

Hors ligne

#10 Le 13/05/2007, à 23:27

brizou

Re : script basé sur une commande mencoder (débutant)

ça ne foctionne pas il me met :

awk: line 1: regular expression compile failed (missing '(')
%)
MPlayer 2:1.0~rc1-0ubuntu9 (C) 2000-2006 MPlayer Team
CPU: AMD Turion(tm) 64 X2 Mobile Technology TL-50 (Family: 15, Model: 72, Stepping: 2)
CPUflags:  MMX: 1 MMX2: 1 3DNow: 1 3DNow2: 1 SSE: 1 SSE2: 1
Compiled with runtime CPU detection.
Can't open joystick device /dev/input/js0: No such file or directory
Can't init input joystick
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing vid.avi.
File not found: 'vid.avi'
Failed to open vid.avi.


Exiting... (End of file)

Hors ligne

#11 Le 14/05/2007, à 04:43

Alain.g

Re : script basé sur une commande mencoder (débutant)

Ok. Si ça fonctionnait pour moi, c'est que j'ai Gawk d'installé (alors que toi vraisemblablement pas). En désinstallant Gawk, jai la même erreur que toi avec Mawk.

J'ai fait une petite correction pour que ça passe avec les deux, ceci-dit le résultat est beaucoup moins fluide avec mawk.
Donc pour un meilleur résultat :

sudo apt-get install gawk

Xubuntu Karmic !

Hors ligne

#12 Le 14/05/2007, à 08:15

brizou

Re : script basé sur une commande mencoder (débutant)

Ça marche big_smile
merci c'est vraiment super
En plus le fait que l'on puisse en prévoir plusieurs est vraiment sympa
Encore merci pour ce petit script bien sympa.

Hors ligne

#13 Le 11/06/2007, à 20:30

patmomo

Re : script basé sur une commande mencoder (débutant)

Bonjour,

Alain.g a écrit :

Pendant l'encodage une fenêtre Zenity affichera une barre de progression avec quelques infos :
captureal8.png
Il n'est donc pas indispensable de lancer le script en console.

Ps : si tu es sous Feisty, une modif est à faire pour améliorer la vitesse d'encodage de xvid :
https://bugs.launchpad.net/ubuntu/+source/xvidcore/+bug/84705
http://forum.ubuntu-fr.org/viewtopic.php?id=112531

Les lignes reste, taille et effectué restent à 0 et je ne trouve pas la solution. Vous avez une idée ?

Merci

Dernière modification par patmomo (Le 11/06/2007, à 20:31)

Hors ligne

#14 Le 11/06/2007, à 20:48

patmomo

Re : script basé sur une commande mencoder (débutant)

Bon, j'ai rien dis.

Hier soir impossible de faire fonctionner et aujourd'hui ça roule.

Merci encore pour le script big_smile

Hors ligne

#15 Le 05/08/2007, à 19:27

fazerick

Re : script basé sur une commande mencoder (débutant)

trop fort ton script alain.g !!!!!!!!!
mainteant je peux incruster mes sous-titres de series en une seule fois:D


sous (k)(x)ubuntu depuis 2 an et heureux avec ce systeme :)
http://lxde.free.fr

Hors ligne

#16 Le 08/07/2009, à 22:28

thurston

Re : script basé sur une commande mencoder (débutant)

Bravo effectivement à alain.g
Le code fonctionne à la perfection.
Question: as tu déjà controlé la perte en temps d'encodage incombant à cette fenetre graphique.
Je veux dire:
avec la fenetre de progression = 1 heure
sans la fenetre de progression = 45min

A+
Thurston

Hors ligne

#17 Le 11/10/2009, à 01:33

aKroG

Re : script basé sur une commande mencoder (débutant)

Je viens de découvrir ce topic et je suis en train de tester le script de Alain.g et juste merci, pour l'instant tout a l'air de bien marcher. Le fait de pouvoir en programmer plusieurs a la suite c'est vraiment exelent!
Bref merci boucoup pour ce script wink

Hors ligne