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 09/02/2008, à 20:04

plmegalo

Jurassic Script / Regina-REXX

J'ai découvert récemment que l'on pouvait utiliser le langage REXX (langage procédural initialement normé par IBM sur ses Mainframes et ses OS2) sous Linux.

Pour ceux que ça interresserait (je sais d'avance qu'il seront peu, mais bon...), le mot à  chercher sous Google ou dans d'éventuels paquets à  installer c'est "regina".

Je me suis donc amuser à écrire un script qui me permet à partir de mes listes M3U de tagger mes Oggs.

Je le poste ici, si j'en vois qui bougent, j'en rajouterai une couche voir plusieurs pour des explications de texte...

#!/usr/bin/regina
trace off
PARSE ARG DEBUG

'ls *.m3u -a >temp.lst'
imax=lines('temp.lst','C')
i=1
do while i<=imax 
	M3UList=linein('temp.lst')
	
	posAlbumName=index(M3ULIST,' - ')+3

	if posAlbumName=3 then do
		say 'WARNING -no album name found for 'M3UList
        end
	else do
		lengthAlbumName=length(M3UList)-posAlbumName-3
		albumName=substr(M3UList,posAlbumName,lengthAlbumName)
		
		say 'INFO -'M3UList'-'albumName'-'
		j=1
		tn=1
		jmax=lines(M3UList,'C')
		
		do while j<=jmax 
			currentLine=linein(M3UList)
			posArtistTitle=lastpos('OGG/',currentLine)+4
			ArtistTitle=substr(currentLine,posArtistTitle)
			posTitle=index(ArtistTitle,' - ')+3
			Artist=substr(ArtistTitle,1,posTitle-3)
			Title=substr(ArtistTitle,posTitle)
			posOggInTitle=lastpos('.ogg',Title)
			If posOggInTitle\=0 then Title=substr(Title,1,posOggInTitle-1)
			if substr(currentLine,1,2)='/m' then do
				If DEBUG='TST' then say 'vorbiscomment -w -R "'currentLine'" -t "ARTIST='Artist'" -t "TITLE='Title'" -t "ALBUM='albumName'" -t "TRACKNUMBER='tn'"'
				               else 'vorbiscomment -w -R "'currentLine'" -t "ARTIST='Artist'" -t "TITLE='Title'" -t "ALBUM='albumName'" -t "TRACKNUMBER='tn'"'
				If DEBUG='YES' then 'vorbiscomment -l "'currentLine'"'
				tn=tn+1
			end
			j=j+1
		END
	END
	i=i+1
END
exit

Dernière modification par plmegalo (Le 26/03/2008, à 17:48)

#2 Le 10/02/2008, à 03:21

Ghost33

Re : Jurassic Script / Regina-REXX

hum... je crois que ton post, c'est un bide cool

Hors ligne

#3 Le 10/02/2008, à 08:54

plmegalo

Re : Jurassic Script / Regina-REXX

Mais qui t'es toi pour parler de bide smile
La prochaine fois je parlerai du compilateur COBOL de Linux.. non c'est une blague.

Ils ne savent pas ce qu'ils perdent, parce que le script REXX c'est super facile et vachement rapide...
enfin, c'est pas grave je le remet dans ma culotte... wink

#4 Le 10/02/2008, à 12:43

Ghost33

Re : Jurassic Script / Regina-REXX

Mais qui t'es toi pour parler de bide

En "bide" je suis un expert !

Hors ligne

#5 Le 10/02/2008, à 23:00

LittleWhite

Re : Jurassic Script / Regina-REXX

Euh c'est cool ton truc au moins j'ai apris qu'il existé une langage nommée REXX wink
Mais je m'y lancerai pas dedans

c'est pas un bide car ça peut servir au gars d'IBM ( s'ils ecoutent de la musique ) ou au gars qui utilisent OS2
Donc tu as pas posté sur le bon forum lol


Linux ou mourir
Pour avoir des problemes : demarrer Windows
Script de compression multi archive : http://forum.ubuntu-fr.org/viewtopic.php?id=225297

Hors ligne

#6 Le 10/02/2008, à 23:05

eric63

Re : Jurassic Script / Regina-REXX

salut
ca me rappelle le bon temps de l'amiga
rexx c'est bien c'est bon mangez en


Kubuntu 23.10 - WAYLAND- 64 bits + backports bêta = plasma 5.27.10 KDE 5.112.0 Qt 5.15.10 et noyau 6.5.0-17  4x intel i5-4570 3.2Ghz 12Go nvidia GTX 1060 6GB 3écrans
Comment installer une brother avec le script de demonipuch

J’utilise le clavier french AFNOR de chez LDLC c‘est fort

Hors ligne

#7 Le 11/02/2008, à 01:07

Ghost33

Re : Jurassic Script / Regina-REXX

Pfff l'amiga à part lancer des fusées à la Nasa ça casse pas des briques tongue

Hors ligne

#8 Le 11/02/2008, à 08:33

plmegalo

Re : Jurassic Script / Regina-REXX

... nan mais ça décolle des tuiles...
lol

#9 Le 11/02/2008, à 08:35

plmegalo

Re : Jurassic Script / Regina-REXX

LittleWhite a écrit :

c'est pas un bide car ça peut servir au gars d'IBM ( s'ils ecoutent de la musique ) ou au gars qui utilisent OS2
Donc tu as pas posté sur le bon forum lol

Alors quoi, il faut que je post d'abord sur Mainframe.fr pour dire qu'on peut venir sur Linux.fr voir des proc REXX qui fonctionnent sous Linux...
trop compliqué tout ça... je vais faire un script smile

#10 Le 02/03/2008, à 17:29

Papik

Re : Jurassic Script / Regina-REXX

Salut Plmegalo,

Comme toi je suis un fan de Rexx. En un peu plus d'1/4 de siècle chez IBM j'ai appris pas mal de langages allant du COBOL, PL/1 au PLS/3 (Confidentiel IBM) en passant par l'assembleur et l'APL/2. Et le plus "chouette" de tous ces langages est certainement Rexx.
Je n'ai jamais compris pourquoi il n'avait aucun succès en France. Sans doute parce qu'il était gratuit ! Mais aussi certainement parce que IBM l'a toujours présenté comme un langage "procédural". Et là, je ne suis pas d'accord. Même si Rexx est un langage interprété, Rexx peut tout faire. Et plus particulièrement la dernière mouture d'OORexx (Oriented Object Rexx).
Sans parler de NetRexx qui permet à un débutant de créer des classes Java sans connaitre Java.

Pour moi l'instruction la plus importante est "Trace '?I'". Vous en connaissez vous des langages qui vous expliquent ce qu'ils font ? Comment ils ont interprétè votre code ?

J'ai personnellement écrit de nombreuses applications commerciales, sensibles, entièrement en Rexx (via RexxIUCV car plusieurs systèmes internationaux devaient communiquer) mais j'étais chez IBM.

Le principal reproche que l'on pouvait faire à Rexx c'est que nous devions livrer le code source en production. Hors aujourd'hui, il est possible de partager ses programmes Rexx sans en divulguer le source. Je vous laisse réfléchir : Un langage interprété sans le source !!!

Comme quoi avec OORexx tout est possible.

#11 Le 03/03/2008, à 13:39

mikedafunk

Re : Jurassic Script / Regina-REXX

Tous les jours, "je - apprends" big_smile
Merci pour ces infos qui m'ont font chaud au cœur, étant encore utilisateur à mes heures de cet ordinateur génial qu'est l'Amiga...
Tant pis pour ceux qui ne comprennent pas tongue


Lubuntu 22.04 sur Lenovo AX81 et pas mal d'Amiga
Mon blog : http://mikedafunk.over-blog.org

Hors ligne

#12 Le 07/03/2008, à 18:45

plmegalo

Re : Jurassic Script / Regina-REXX

Papik a écrit :

Salut Plmegalo,
Un langage interprété sans le source !!!

Comme quoi avec OORexx tout est possible.

AAAAAH c'est vieux power  lol

Ouais, j'ai utilisé le (pré) compilateur rexx qui était quelque fois installé sur certaine bécane. Un trux qui met le code dans un état pré-compilé pour l'interprêteur ... est-ce bien à cela que tu fais allusion?

Sinon, pour les bécanes qui n'avaient pas ce merveilleux (pré) compilateur, j'avais écrit un brouilleur de code qui rendait celui-ci illisible (ou presque) et difficilement maintenable.

Tous ceux qui ont un peupratiqué le rexx savent que c'est de la balle dsesmort de ta maman en tong qui (censuré) des pinguins... ça tombe bien ça marche sous Linux.

Du coup je me suis fait un autre script pour copier et tagger mes sauvegardes FLAC à partir des listes M3U... le vlà

#!/usr/bin/regina
trace off
PARSE ARG DEBUG

'ls *.m3u -a >temp.lst'
imax=lines('temp.lst','C')
i=1
do while i<=imax 
	M3UList=linein('temp.lst')
	
	posAlbumName=index(M3ULIST,' - ')+3

	if posAlbumName=3 then do
		say 'WARNING -no album name found for 'M3UList
        end
	else do
		lengthAlbumName=length(M3UList)-posAlbumName-3
		albumName=substr(M3UList,posAlbumName,lengthAlbumName)
		say 'INFO -'M3UList'-'albumName'-'
		j=1
		tn=1
		jmax=lines(M3UList,'C')
		
		do while j<=jmax 
			currentLine=linein(M3UList)
			posWavInCurrentLine=lastpos('.wav',currentLine)
			If posWavInCurrentLine\=0 then FileName=substr(currentLine,1,posWavInCurrentLine-1)
			DestinationFlacFileName=FileName'.flac'
			posArtistTitle=lastpos('/',FileName)+1
			ArtistTitle=substr(FileName,posArtistTitle)
			posTitle=index(ArtistTitle,' - ')+3
			Artist=substr(ArtistTitle,1,posTitle-3)
			Title=substr(ArtistTitle,posTitle)
			OriginalFlacFileName.=''
			posDollar=index(ArtistTitle,'$')
			if posDollar\=0 then ArtistTitle=substr(ArtistTitle,1,posDollar-1)"\"substr(ArtistTitle,posDollar)
			posOpen=index(ArtistTitle,'[')
			if posOpen\=0 then ArtistTitle=substr(ArtistTitle,1,posOpen-1)"\"substr(ArtistTitle,posOpen)
			posClose=index(ArtistTitle,']')
			if posClose\=0 then ArtistTitle=substr(ArtistTitle,1,posClose-1)"\"substr(ArtistTitle,posClose)
			if substr(currentLine,1,2)='/m' then do
				ADDRESS SYSTEM 'find "/home/pl/Tout/Sauvegardes/Sauvegarde Fichiers Sons/" -name "'ArtistTitle'.flac" ' WITH OUTPUT STEM OriginalFlacFileName.
				if OriginalFlacFileName.1="" then do
					say 'WARNING -'ArtistTitle'.flac not found in flac files'
				end
				else do
					If DEBUG='TST' then do 
						say 'cp "'OriginalFlacFileName.1'" "'DestinationFlacFileName'"'
						say 'metaflac --no-utf8-convert --remove-all-tags --dont-use-padding --set-tag="ARTIST='Artist'" --set-tag="TITLE='Title'" --set-tag="ALBUM='albumName'" --set-tag="TRACKNUMBER='tn'" "'DestinationFlacFileName'"'
					end
					else do 
						'cp "'OriginalFlacFileName.1'" "'DestinationFlacFileName'"'
				     		'metaflac --no-utf8-convert --remove-all-tags --dont-use-padding --set-tag="ARTIST='Artist'" --set-tag="TITLE='Title'" --set-tag="ALBUM='albumName'" --set-tag="TRACKNUMBER='tn'" "'DestinationFlacFileName'"'
					end
					tn=tn+1
				end
			end
			j=j+1
		END
	END
	i=i+1
END
exit

Un pti gadget interressant dans ce tas de code, l'instruction ADDRESS... les amateurs apprécieront...

++ sous KWRITE, on a une zouli coloration syntaxique REXX...

Amusez-vous bien

Dernière modification par plmegalo (Le 07/03/2008, à 18:54)

#13 Le 07/03/2008, à 18:55

compte supprimé

Re : Jurassic Script / Regina-REXX

Moi REXX ça me fait plus penser à Jurassic Park qu'à Back to the future... big_smile

ça va, ça va, je sors.... tongue

Dernière modification par Superamak (Le 09/03/2008, à 16:39)

#14 Le 07/03/2008, à 19:03

plmegalo

Re : Jurassic Script / Regina-REXX

Superamak a écrit :

Moi REXX ça me plus penser à Jurassic Park qu'à Back to the future... big_smile

ça va, ça va, je sors.... tongue

#! usr/bin/secteVaudouJurrassique
Mais non, voyons, tu peux rester, tous les avis sont les bienvenus. 
Raconte-nous ta petite enfance et ce qui t'a fait tant souffrir pour que la colère dicte ainsi tes propos...
exit 0

C'est pas beau de s'attaquer à des fossiles sans défenses (donc pas des Mamouths) lol

#15 Le 16/03/2008, à 00:11

plmegalo

Re : Jurassic Script / Regina-REXX

Et voilà, je vais encore frappé...

Un pti script de conversion de vidéo pour le Meizu M6, à coller dans votre répertoire #HOME (son pti nom c'est MeizuVideoConverterRx.sh) :

#!/usr/bin/regina
trace off
PARSE ARG filenames

/* parseur des noms de fichier */
posSlash=index(filenames,'/')
filename.=''
i=1
do while posSlash=1
	secondPosSlash=index(filenames,' /',2)
   	if secondPosSlash>0 then do
   		filename.i=substr(filenames,posSlash,secondPosSlash-1)
   		filenames=substr(filenames,secondPosSlash+1)
	end
	else do
   		filename.i=filenames
   		filenames=''
	end
	posSlash=index(filenames,'/')
	i=i+1
end

/* boucle d'encodage des fichiers */
plurVerb='nt'
imax=i-1
i=1
do while i<=imax

	/* messages d'info */
	lastPosSlash=lastpos('/',filename.i)
	if lastPosSlash\=0 	then outputFilename=substr(filename.i,1,lastPosSlash)'[MZ]'substr(filename.i,lastPosSlash+1)
				else outputFilename='[MZ]'filename.i
	if lastPosSlash\=0 	then tempOutputFilename=substr(filename.i,1,lastPosSlash)'[TMP]'substr(filename.i,lastPosSlash+1)
				else tempOutputFilename='[TMP]'filename.i
	posMpg=index(tempOutputFilename,'.mpg')
	if posMpg=length(tempOutputFilename)-3 	then tempOutputFilename=substr(tempOutputFilename,1,posMpg-1)'.avi'
						else tempOutputFilename=tempOutputFilename'.avi'
	posMpg=index(outputFilename,'.mpg')
	if posMpg=length(outputFilename)-3 	then outputFilename=substr(outputFilename,1,posMpg-1)'.avi'
						else outputFilename=outputFilename'.avi'
	say 'INFO -'
	say 'INFO -Encodage de ' filename.i 
	say 'INFO -         => ' outputFilename
	say 'INFO -'
	if i<imax then do
		if imax-i=1 then plurVerb=''
		say 'INFO -Reste'plurVerb' à encoder :'
		j=i+1		
                do while j<=imax
			say 'INFO -'filename.j 
			j=j+1
		end
		say 'INFO -'
	end

	/* encodage */

	ADDRESS SYSTEM 'mencoder -quiet -msglevel all=-1 "'filename.i'" -idx -noodml -ignore-start -delay -0.3 -ofps 20 -vf scale=320:-2,expand=:240:::1,crop=320:240,rotate=1 -af volnorm -ovc lavc -ffourcc XVID -lavcopts vcodec=mpeg4:vbitrate=384:vmax_b_frames=0:vhq -sws 9 -srate 44100 -oac mp3lame -lameopts cbr:br=192:mode=0 -o "'outputFilename'"' WITH OUTPUT STEM mencoderlog.

	/* contenu des messages de l'encodeur : changer le msglevel pour changer le contenu */
	k=1
	do mencoderlog.0
   		say 'LOG -'mencoderlog.k
		k=k+1
	end
	i=i+1
end

avec en plus le .desktop pour Konqueror/KDE qui va bien, à coller dans votre répertoire des servicesmenu (.../.../share/apps/konqueror/servicemenus, les "..." dépendent de votre ditrib et le pti nom du service c'est par exemple "meizu-video-convert.desktop" ) :

[Desktop Entry]
ServiceTypes=video/mpeg,video/msvideo,video/quicktime,video/vnd.rn-realvideo,video/x-avi,video/x-fli,video/x-flic,video/x-ms-asf,video/x-ms-wmv,video/x-msvideo
Actions=Encoder_pour_le_Meizu_MiniPlayer

X-SuSE-translate=true
[Desktop Action Encoder_pour_le_Meizu_MiniPlayer]
Name=Encode for Meizu Mini Player
Name[fr]=Encoder pour le Meizu Mini Player

Icon=video
Exec=konsole -e ~/MeizuVideoConverterRx.sh %F

Et avec ça, il n'y a plus qu'à faire un clic droit sur vos vidéos sélectionnées dans konqueror et choisir l'option "Encoder pour le Meizu Mini Player" dans le menu "Actions"
[EDIT] une petite mise à jour du script pour :
- l'affichage des messages d'information
- l'encodage avec normalisation du son et le rattrappage du décalage vidéo du Meizu M6
[/EDIT]

Dernière modification par plmegalo (Le 22/03/2008, à 16:11)

#16 Le 23/03/2008, à 11:01

alban.lopez

Re : Jurassic Script / Regina-REXX

Salut,

Moi je vois pas bien l'avantage/difference par raport a un script *.sh en bash, mais si un petit tuto fait son apparition sur ubuntu-fr alors promis je me penche sur le Rexx ou meme le OORexx.

Genre :
- Instalation
- Mise en oeuvre
- Exemple...

et bon, une dizaines de post sur un tel sujet prouve au moins que les linuxiens te lise ;-)

Dernière modification par alban.lopez (Le 23/03/2008, à 11:04)


Admin système Windows et linux
Windows 2012R2 et Ubuntu 14.04

Hors ligne

#17 Le 23/03/2008, à 15:50

plmegalo

Re : Jurassic Script / Regina-REXX

alban.lopez a écrit :

Salut,

Moi je vois pas bien l'avantage/difference par raport a un script *.sh en bash, mais si un petit tuto fait son apparition sur ubuntu-fr alors promis je me penche sur le Rexx ou meme le OORexx.

Genre :
- Instalation
- Mise en oeuvre
- Exemple...

et bon, une dizaines de post sur un tel sujet prouve au moins que les linuxiens te lise ;-)

Y'en a un dizaine parce que je répond beaucoup aussi !!!
Honnètement, ceux qui ont l'habitude du bash ou sh me semblent pas être les clients idéaux en effet...

Le REXX a comme avantage d'être facile, lisible, maintenable (même si on peut écrire comme un cochon comme pour n'importe quel langage).
Les goûts, ça ne se discutent pas. Je fais un peu de bash et de sh, mais franchement j'aime pas. Bien que puissant, c'est souvent illisible. Le REXX est plus explicite mais par conséquent plus verbeux et ça peut gaver les bashistes (néologisme?)
De plus le REXX ne peut en aucun cas remplacer complètement le sh, celui-ci étant forcément indissociable de Linux.

Pour la doc, elle existe déjà et le site suivant http://regina-rexx.sourceforge.net/
me semble suffisant pour démarrer (en tout cas c'est ce que j'ai pu faire sans problème et je suis pas un fou de la compil !!)
Il suffit d'installer les paquets qui vont bien sur ton système et ça roule tout seul.
les paquets officiels sont des RPM mais un pti coup d'alien devrait faire l'affaire.
[EDIT]
comme d'hab, j'en ai révé Linux l'a fait : les paquets sont direct dans le gestionnaire Adept de la Gutsy sous le nom regina-rexx (suffisait de taper "regina" dans la box de recherche)
[/EDIT]
Il y'a aussi des .deb qui trainent sur le net, mais j'ai pas essayé.
Pour la mise en oeuvre, y'a rien à faire à part mettre

#!/usr/bin/regina

au début de ton script.
Pour les exemples, la doc en contient déjà quelques un qui m'ont servis de base.
Sinon j'en posterai d'autres et libre à d'autres d'en poster ici.

En tout cas les sources ne manquent pas et c'est pas trop périlleux d'essayer du moment qu'on programme pas n'importe quoi (genre rm/censuré/ ou je ne sais quelle commande dont on a pas le droit de diffuser le contenu sur ce forum sans risque pour les dédélulus du Linux dans mon genre smile)

En attendant, je viens de finir une version de mon Meizu Video Converter avec Kdialog. C'est assez chouette et je pense que je vais généraliser ça à tous mes scripts.

Dernière modification par plmegalo (Le 24/03/2008, à 19:09)

#18 Le 24/03/2008, à 12:54

plmegalo

Re : Jurassic Script / Regina-REXX

Bon,

Je viens de terminer une première version du Meizu Video Encoder

Il comprend un choix d'options et l'affichage de la progression des opérations via Kdialog.

#!/usr/bin/regina
trace off
PARSE ARG filenames

/* parseur des noms de fichier */
fileSize.=0
totalSize=0
cr=x2c('0A')
tb=x2c('09')

/* parsage des noms de fichiers                             */
/* + calcul de leur taille,                                 */
/* du total et des des tailles de chaque fichier            */
/* proportionnellement au total                             */
filename.=''

i=1

do while totalSize=0
	if filenames='' then do
		ADDRESS SYSTEM 'kdialog --icon ~/Meizu_icon.png --miniicon ~/Meizu_icon.png --title "Meizu Video Encoder" --getopenfilename :label0  --multiple "video/mpeg video/msvideo video/quicktime video/vnd.rn-realvideo video/x-avi video/x-fli video/x-flic video/x-ms-asf video/x-ms-wmv video/x-msvideo"' WITH OUTPUT STEM fileList. 
		if rc\=0 then exit
		filenames=fileList.1
	end
	posSlash=index(filenames,'/')
	do while posSlash=1
		secondPosSlash=index(filenames,' /',2)
		if secondPosSlash>0 then do
			filename.i=substr(filenames,posSlash,secondPosSlash-1)
			filenames=substr(filenames,secondPosSlash+1)
		end
		else do
			filename.i=strip(filenames)
			filenames=''
		end
		posSlash=index(filenames,'/')
		ADDRESS SYSTEM 'du "'filename.i'"' WITH OUTPUT STEM currentFileSize.
		if rc=0 then do
			currentFileSize.1=delword(currentFileSize.1,2)
			fileSize.i=currentFileSize.1
			totalSize=totalSize+currentFileSize.1
		end
		else do
			filename.i=''
		end
		i=i+1
	end
	imax=i-1
end

proportionnalSize.=0
p=1
do while p<=imax
    proportionnalSize.p=format(fileSize.p*100/totalSize,3,0)
    p=p+1
end
elapseTime=totalSize/400000

/* choix des options d'encodage */
ADDRESS SYSTEM 'kdialog  --icon ~/Meizu_icon.png --miniicon ~/Meizu_icon.png --title "Meizu Video Encoder" --separate-output --checklist "Choisissez les options d''encodage simplifiées" 1 "Correction du décalage Audio/Vidéo" off 2 "Gain de volume" off 3 "Son Haute Qualité" off 4 "Egalisation" off 5 "Transfert en séquence" off 6 "Encodage direct sur la cible" off' WITH OUTPUT STEM listOptions.
if rc\=0 then exit

af=''
volume=''
delayOption=''
volnormOption=''
equalizerOption=''
audioQualityOption='192'
gain=0
equalize=0
transfer=0
direct=0
l=1
pref='[MZ'
do listOptions.0
	if listOptions.l='1' then do
		pref=pref'-'
		delayOption='-ignore-start -delay -0.3 '
	end
	if listOptions.l='2' then do 
		af='-af '
		gain=1
	end 
	if listOptions.l='3' then do
		pref=pref'+'
		audioQualityOption='256'
	end
	if listOptions.l='4' then do 
		af='-af '
		equalize=1
	end 
	if listOptions.l='5' then transfer=1
	if listOptions.l='6' then do
		transfer=0
		direct=1
	end
	l=l+1
end

/* choix des options de règlage du volume */
if (gain) then do
	ADDRESS SYSTEM 'kdialog  --icon ~/Meizu_icon.png --miniicon ~/Meizu_icon.png --title "Meizu Video Encoder"  --combobox "Volume +dB" "1" "2" "3" "4" "5" "6" "8" "10" "12" "15" "20" "30"'  WITH OUTPUT STEM volLev.
	if rc=0 then do   
		pref=pref'^'volLev.1
		volume='volume='volLev.1' '
		af='-af '
	end
end

/* choix des options d'égalisation */
if (equalize) then do
	if volume='' 	then virg=' '
			else virg=','
	ADDRESS SYSTEM 'kdialog  --icon ~/Meizu_icon.png --miniicon ~/Meizu_icon.png --title "Meizu Video Encoder"  --combobox "Egalisation pour :" "Ecouteurs Meizu" "Koss PortaPro" "Ecouteurs neutres"'  WITH OUTPUT STEM speakersType.
	if rc\=0 then do
		equalizerOption=''		
	end    
	if speakersType.1='Koss PortaPro' 	then do
		pref=pref'~K'
		equalizerOption='equalizer=0:-1:0:0:0:0:0:-1:1:0'virg
	end
	if speakersType.1='Ecouteurs Meizu' 	then do
		pref=pref'~M'
		equalizerOption='equalizer=4:3:2:2:1:0:0:-4:0:1'virg
	end
	if speakersType.1='Ecouteurs neutres' 	then equalizerOption=''
	if volume='' & equalizerOption='' then af=''
end


pref=pref']'

/* choix de la directory cible en cas de transfert en séquence */
if (transfer | direct) then do
	ADDRESS SYSTEM 'kdialog  --icon ~/Meizu_icon.png --miniicon ~/Meizu_icon.png --title "Meizu Video Encoder" --getexistingdirectory :label1'  WITH OUTPUT STEM dir.
	if rc\=0 then do
		exit
	end    
end

/* initialisation de la barre de progression pour chaque fichier */
ADDRESS SYSTEM 'kdialog  --icon ~/Meizu_icon.png --miniicon ~/Meizu_icon.png --title "Meizu Video Encoder" --progressbar "Début de l''encodage" '100 WITH OUTPUT STEM dialogCode.
ADDRESS SYSTEM 'dcop "'dialogCode.1'" showCancelButton true' WITH OUTPUT STEM dcopLog.

/* boucle d'encodage des fichiers */
previousTailLine=''
progressSize=0
i=1
do while i<=imax & filename.i\=''
	
	/* détermination du nom du fichier de sortie */
	lastPosSlash=lastpos('/',filename.i)
	
	if direct 	then destDir=dir.1'/'
			else destDir=substr(filename.i,1,lastPosSlash)
	if lastPosSlash\=0	then outputFilename=destDir''pref''substr(filename.i,lastPosSlash+1)
				else outputFilename=pref''filename.i
	posMpg=index(outputFilename,'.mpg')
	if posMpg=length(outputFilename)-3	then outputFilename=substr(outputFilename,1,posMpg-1)'.avi'
						else outputFilename=outputFilename'.avi'
	
	say outputFilename
	/* mise en place de l'affichage des informations d'encodage */
	fileLabel=substr('Encodage de'tb''tb'-'tb''filename.i' ',1,100,' ')
	destLabel=substr('Encodage en'tb''tb'-'tb''outputFilename' ',1,100,' ')
	if transfer then destLabel=destLabel''cr''substr('Transfert demandé vers'tb'-'tb''dir.1' ',1,100,' ')
	progressLabel=cr''cr'Progression de l''encodage total'

	
	currentLabel=fileLabel''cr''destLabel''cr''cr'Taille estimée'tb''tb'-'tb'   'cr
	currentLabel=currentLabel'Pourcentage encodé'tb'-'tb' 'cr
	currentLabel=currentLabel'Temps restant'tb''tb'-'tb'   'cr
	currentLabel=currentLabel'Image par seconde'tb'-'tb'  'progressLabel


	'dcop "'dialogCode.1'" setLabel "'currentLabel'"'
	ADDRESS SYSTEM 'dcop "'dialogCode.1'" setProgress 'progressSize WITH OUTPUT STEM dcopLog.
	ADDRESS SYSTEM 'dcop "'dialogCode.1'" wasCancelled ' WITH OUTPUT STEM wasCanceled.
	if wasCanceled.1='true' then do
	ADDRESS SYSTEM 'dcop "'dialogCode.1'" close ' WITH OUTPUT STEM dcopLog.
		exit
	end    
	
	/* encodage */

	'mencoder  -msglevel all=-1:avsync=5 "'filename.i'" -idx -noodml 'delayOption'-ofps 20 -vf scale=320:-2,expand=:240:::1,crop=320:240,rotate=1 'af''equalizerOption''volume'-ovc lavc -ffourcc XVID -lavcopts vcodec=mpeg4:vbitrate=384:vmax_b_frames=0:vhq -sws 9 -srate 44100 -oac mp3lame -lameopts cbr:br='audioQualityOption':mode=0 -o "'outputFilename'" >~/progressFile &'
	if rc\=0 then do
		ADDRESS SYSTEM 'dcop "'dialogCode.1'" close ' WITH OUTPUT STEM dcopLog.
		exit
	end    
	
	/* barre de progression pour chaque fichier */
	fileProgress=0
	do while fileProgress<100
		ADDRESS SYSTEM 'tail -n 5 ~/progressFile' WITH OUTPUT STEM tailLine.
		lastLine=tailLine.0
		posPos=index(tailLine.lastLine,'Pos')
		posPar=index(tailLine.lastLine,'(')
		posTrem=index(tailLine.lastline,'Trem: ')
		posMin=index(tailLine.lastline,'min ')
		posMb=index(tailLine.lastLine,'mb ')
		posFps=index(tailLine.lastLine,'fps ')
		posPer=index(tailLine.lastLine,'%')
		lengthProgress=posPer-posPar-1
		if posPos=1 & posPar\=0 & lengthProgress>0 then do    
			curFps=strip(substr(tailLine.lastline,posPer+2,posFps-posPer-2))
			curMb=strip(substr(tailLine.lastline,posMin+3,posMb-posMin-3))
			curTrem=strip(substr(tailLine.lastline,posTrem+5,posMin-posTrem-5))
			fileProgress=strip(substr(tailLine.lastLine,posPar+1,lengthProgress))
			currentLabel=fileLabel''cr''destLabel''cr''cr'Taille estimée'tb''tb'-'tb''curMb' mb'cr
			currentLabel=currentLabel'Pourcentage encodé'tb'-'tb''fileProgress' %'cr
			currentLabel=currentLabel'Temps restant'tb''tb'-'tb''curTrem' min'cr
			currentLabel=currentLabel'Image par seconde'tb'-'tb''curFps' fps'progressLabel
			'dcop "'dialogCode.1'" setLabel "'currentLabel'" ' 
			'dcop "'dialogCode.1'" setProgress 'progressSize+format(proportionnalSize.i*fileProgress/100,3,0)
		end
		if (fileProgress='99' | fileProgress=0) & previousTailLine=tailLine.lastLine then fileProgress='100'
		previousTailLine=tailLine.lastLine
		'sleep 'min(2,elapseTime) 
		ADDRESS SYSTEM 'dcop "'dialogCode.1'" wasCancelled ' WITH OUTPUT STEM wasCanceled.
		if wasCanceled.1='true' then do
			ADDRESS SYSTEM 'dcop "'dialogCode.1'" close ' WITH OUTPUT STEM dcopLog.
			'killall mencoder'
			exit
		end    
	end
		
	progressSize=progressSize+proportionnalSize.i
		
	/* barre de progression : fin d'encodage d'un fichier */
	/* copie éventuelle à la destination choisie          */
	if transfer then do
		currentLabel=currentLabel''tb''tb''tb''tb'Transfert vers 'dir.1
	end
	'dcop "'dialogCode.1'" setLabel "'currentLabel'" ' 
	ADDRESS SYSTEM 'dcop "'dialogCode.1'" setProgress 'progressSize WITH OUTPUT STEM dcopLog.
	ADDRESS SYSTEM 'dcop "'dialogCode.1'" wasCancelled ' WITH OUTPUT STEM wasCanceled.
	if wasCanceled.1='true' then do
		ADDRESS SYSTEM 'dcop "'dialogCode.1'" close ' WITH OUTPUT STEM dcopLog.
		exit
	end    
		
	/* copie des fichiers si le transfert est demandé */
	if transfer then do
		ADDRESS SYSTEM 'cp -f "'outputFilename'" 'dir.1 WITH OUTPUT STEM cpLog.
		k=1
		do cplog.0
			say 'LOG -'cplog.k
			k=k+1
		end
	end
	
	i=i+1
end

/* fin de l'encodage */
ADDRESS SYSTEM 'dcop "'dialogCode.1'" setLabel "Fin de l''encodage" ' WITH OUTPUT STEM dcopLog.
ADDRESS SYSTEM 'dcop "'dialogCode.1'" setProgress 'progressSize WITH OUTPUT STEM dcopLog.
'sleep 0.5'
ADDRESS SYSTEM 'dcop "'dialogCode.1'" close ' WITH OUTPUT STEM dcopLog.

[EDIT] la version postée ci dessus est modifiée pour fonctioner sous Kubuntu 7.10 avec la version courante de mencoder[/EDIT]
[EDIT2] l'option volnorm, ça marche pas des masse bien. J'ai remplacé le principe par un pti dialogue de choix du volume[/EDIT2]
[EDIT3] fonctionne également sur Ubuntu Feisty standard [EDIT3]
En combinant avec mes précédents post sur le sujet, vous pouvez ainsi encoder et transférer sous KDE/Konqueror d'un simple click droit

Bon Meizu smile

Dernière modification par plmegalo (Le 26/03/2008, à 17:41)

#19 Le 24/03/2008, à 23:53

alban.lopez

Re : Jurassic Script / Regina-REXX

Ca tombe bien je cherche justement a creer un script qui genere les commandes Mencoder
d'abort une recup efficace du CROP
mplayer dvd://1 -dvd-device /home/sctfic/MyDVD -vf cropdetect

puis les valeurs adequat du bitrate et des options...
http://www.mplayerhq.hu/DOCS/HTML/fr/menc-feat-enc-libavcodec.html

Mais peux tu nous en dire plus sur ton script


Admin système Windows et linux
Windows 2012R2 et Ubuntu 14.04

Hors ligne

#20 Le 25/03/2008, à 01:43

plmegalo

Re : Jurassic Script / Regina-REXX

alban.lopez a écrit :

Ca tombe bien je cherche justement a creer un script qui genere les commandes Mencoder
d'abort une recup efficace du CROP
mplayer dvd://1 -dvd-device /home/sctfic/MyDVD -vf cropdetect

puis les valeurs adequat du bitrate et des options...
http://www.mplayerhq.hu/DOCS/HTML/fr/menc-feat-enc-libavcodec.html

Mais peux tu nous en dire plus sur ton script

Bah, pour mencoder, j'ai utilisé les options conseillées pour le Meizu M6 en y apportant des petites retouches en me basant sur le man mencoder.

Le script permet maintenant, via différents petits dialog Kdialog :
- De choisir les fichiers à encoder s'ils ne sont pas en paramètre ou si l'on passe par un appel direct du script.
- De choisir parmi les options d'encodage suivantes
1/ décalage audio/vidéo de 0.3 secondes pour corriger les problèmes de décalage du Meizu sur certaines vidéo
2/ normalisation du son (-af volnorm)
3/ 192kbps ou 256kbps pour le son
4/ égalisation du son suivant deux schémas : un pour les écouteurs du Meizu, un pour le Koss PortaPro, l'égalisation neutre étant une manière de ne pas égaliser quant on a choisi l'option par erreur
5/ le transfert vers un dossier choisi après encodage
6/ l'encodage direct sur le media choisi

Le script gère aussi l'affichage d'une barre de progression et des informations d'encodage en cours.

Je l'ai testé sous Kubuntu (je suis sous openSuse, pour le courant de mon utilisation) et il semble fonctionner sans problème à condition d'avoir comme option de msglevel "avsync" à la place de "statusline". (les versions de mencoder diffèrent entre Ubuntu et Suse).

Si tu as besoin d'autres exemples, il y'en a à foison sur le net (dont la plupart en bash ou sh), c'est de ça que je me suis inspiré pour faire le mien. Le plus compliqué étant la gestion de la barre de progression.

L'installation de regina-rexx sous Kubuntu 7.10 est extrèmement simple (voir plus haut dans ce thread) et il suffit de copier le script pour le faire fonctionner. Un petit plus : créer une icône Meizu_icon.png sur son home pour avoir toute la panoplie. smile

Dernière modification par plmegalo (Le 25/03/2008, à 01:47)

#21 Le 31/03/2008, à 14:43

plmegalo

Re : Jurassic Script / Regina-REXX

Une version "standalone"/Kommander du MeizuVideoEncoder est maintenant dispo ici :
http://www.kde-apps.org/content/show.php?content=78104

L'utilisation du Rexx permet notamment de gérer le parsage de paramètre de façon simple et ré-utilisable

#22 Le 11/04/2008, à 09:25

plmegalo

Re : Jurassic Script / Regina-REXX

REXX rules !! smile

http://www.kde-apps.org/content/show.php?content=78104

#23 Le 06/08/2008, à 13:41

Papik92

Re : Jurassic Script / Regina-REXX

Bonjour à tous,

J'avais oublié cette discussions. Mais je n'ai pas oublié Rexx.

Tout d'abord un grand merci à Plmegalo pour l'avoir initié. Si en février certains pensaient que c'était un "bide", je note la remarque d'Alban :

alban.lopez a écrit :

et bon, une dizaines de post sur un tel sujet prouve au moins que les linuxiens te lise ;-)

Alors un petit complément d'information pour tous ceux qui pensent que Rexx n'est qu'un shell de plus. Je suis sur une application Web professionnelle, qui va être entièrement écrite en Rexx.
   RexxSQL pour accéder les bases de données
   Mais aussi Mod_Rexx pour que mon serveur Apache n'ait plus besoin de PHP. Mes pages ne s'appellent plus page.php, page.rsp et dans mes pages on trouve :

<?rexx
   /* Mon code Rexx */
    ....
    ....
    ....
?>

Un exemple tout simple, en français, chez "Henri Henault & Sons"

Un même langage pour votre Shell et vos pages Web ! Çà ne vous tente pas ? Avec toutes les possibilité du Shell dans vos pages...

Personellement j'ai installé OORexx depuis le .deb disponible chez SourceForge.net sans aucune difficulté.

Par contre j'ai rencontré quelques difficultés à installer "proprement" Mod_Rexx sur Apache2. Pour ceux que ça intéresse suivre la discussion [Apache2] configuration Mod_Rexx. Faute de réponse je vais y ajouter ma solution.

Pour revenir à "Un langage interprété sans le source" la solution était plus simple que le pré-compilateur. Je ne sais pas si elle est pérenne dans les nouveaux environnements, mais sous 0S/2, à la première exécution d'un programme Rexx, le code pré-compilé est ajouté au fichier source, derrière l'EOF. Et à chaque ouverture il y a une recherche de ce code. S'il est présent, c'est celui-ci qui est exécuté. Il "suffit" donc de modifier le fichier source tout en conservant la suite invisible du fichier.

Amusez vous bien...

Hors ligne

#24 Le 06/08/2008, à 17:17

plmegalo

Re : Jurassic Script / Regina-REXX

Papik92 a écrit :

Bonjour à tous, ...

Salut et de rien... en tout cas j'apprend plein de trucs sur les "nouvelles" possibilités du rexx grâce à toi.

Le coup des pages web, je trouve ça très cool par exemple.

Pour le compilé dans le source (ou inversement smile), j'avoue être plus perplexe. J'ai pas trop regardé sous Linux, mais il ne me semble pas qu'il y ait des outils de précompilation ou d'intégration du code.
Perso, j'avais écris un "crypteur" qui permettait de garder le code en le rendant presque totalement illisible. Un petit gadget amusant.

En tout cas merci pour tes infos, c'est de la balle.

#25 Le 18/12/2009, à 21:38

Jean-M

Re : Jurassic Script / Regina-REXX

Bonsoir,

Pour sortir ce post très intéressant de la poussière !:/

REXX n'est pas un langage mort, au contraire, il est de plus en plus utilisé sur Mainframe. Où les scripts REXX remplacent très efficacement les CLIST sous TSO. En fait, son seul défaut c'est d'avoir disparu des coursives après l'abandon de OS2 (dans le monde des PC).

Sur PC, pourquoi apprendre un nouveau langage comme Perl, Python ou Ruby si  un Rexx peut faire la même chose wink,

Jean-M

PS: En fin 70 quand j'ai commencé dans l'informatique on disait le COBOL mort, mais le canard est toujours vivant et aucun DSI ne prendra le risque de faire réécrire une application stratégique dans un nouveau langage car cela couterai trop cher (souvent plusieurs milliers et quelques fois millions de lignes Cobol) à convertir et pour s'offrir plusieurs années de problèmes (dits bugs),,,:(:(


Jean-M -- Retraité au Pays basque ex-Ingénieur d'Études Grands Systèmes IBM et Consultant Qualité
Équipement : Ubuntu Linux 22.04 à jour (sur Minisforum B550 R7-5700g 32Go et sur Portable Dell 2en1 I7-10510+MX250 16Go)

Hors ligne