#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
Ma musique ici => https://nicolas-merle.bandcamp.com/
Hors ligne
#3 Le 10/02/2008, à 08:54
- plmegalo
Re : Jurassic Script / Regina-REXX
Mais qui t'es toi pour parler de bide
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...
#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 !
Ma musique ici => https://nicolas-merle.bandcamp.com/
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
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
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 24.10 Wayland Plasma 6.1.5 KDE 6.6.0 Qt 6.6.2 et noyau 6.11.0-9 Asus B760+D4 i5-12400F 4.4Ghz DDR4 32Go nvidia RTX 3060 12GB
Utilisez les drivers libres avant d’ installer une brother avec le script de demonipuch
J’utilise le clavier french AFNOR
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
Ma musique ici => https://nicolas-merle.bandcamp.com/
Hors ligne
#8 Le 11/02/2008, à 08:33
- plmegalo
Re : Jurassic Script / Regina-REXX
... nan mais ça décolle des tuiles...
#9 Le 11/02/2008, à 08:35
- plmegalo
Re : Jurassic Script / Regina-REXX
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
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
#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"
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
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
Salut Plmegalo,
Un langage interprété sans le source !!!Comme quoi avec OORexx tout est possible.
AAAAAH c'est vieux power
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...
ça va, ça va, je sors....
Dernière modification par Superamak (Le 09/03/2008, à 16:39)
#14 Le 07/03/2008, à 19:03
- plmegalo
Re : Jurassic Script / Regina-REXX
Moi REXX ça me plus penser à Jurassic Park qu'à Back to the future...
ça va, ça va, je sors....
#! 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)
#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
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 )
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
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
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 cropdetectpuis les valeurs adequat du bitrate et des options...
http://www.mplayerhq.hu/DOCS/HTML/fr/menc-feat-enc-libavcodec.htmlMais 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.
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 !!
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 :
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
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 ), 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 ,
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