Autore Topic: (N-ESIMA) domanda su exec e shell  (Letto 687 volte)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
(N-ESIMA) domanda su exec e shell
« il: 29 Settembre 2016, 14:51:42 »
Codice: [Seleziona]
Public Sub RunEncoder()
Dim Encoded As String[] 'la lista delle path di tutti i file dalla sorgente da codificare
Dim I As Integer
Dim OutputFileName As String

  Encoded = FileChooser_Sorgente.SelectedPaths
 
  Do While Not ((bChiudo = True) Or (Encoded.count = 0)) 'fino a che non ho codificato tutti i file, oppure fino a quando non si preme "cancel"
    'codifica    'ffmpeg -i  "$f" -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2  "$( sed -e's/\.mpg/.mkv/g' <<< $f )"
    'Debug Encoded[0]
    OutputFileName = File.BaseName(Encoded[0])
    OutputFileName = Replace(OutputFileName, " ", "_")
    '$hProcess = Exec ["ffmpeg", "-i", Encoded[0], "-c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2 ", FileChooser_Destinazione.Dir & "/" & File.Name(Encoded[0]) & ".mkv"] Wait
    '$hProcess = Exec ["ffmpeg", "-i", Encoded[0], "-c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2", FileChooser_Destinazione.Dir & "/" & "test.mkv"] Wait
    Debug "ffmpeg -i " & Encoded[0] & " -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2 " & FileChooser_Destinazione.Dir & "/" & OutputFileName & ".mkv"
    'Shell "ffmpeg -i " & Encoded[0] & " -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2 " & FileChooser_Destinazione.Dir & "/" & OutputFileName & ".mkv" wait
    $hProcess = Shell "ffmpeg -i " & Encoded[0] & " -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2 " & FileChooser_Destinazione.Dir & "/" & OutputFileName & ".mkv"
    'se la codifica e' andata bene allora lo rimuovo
    Encoded.Remove(0)
  Loop
 
 
End

c'e' ne fosse una delle righe di codifica che mi funziona ......

grande mistero .....
« Ultima modifica: 29 Settembre 2016, 17:25:46 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #1 il: 29 Settembre 2016, 17:57:00 »
A parte il problema del funzionamento delle righe, ma in sostanza con quel codice cosa devi ottenere ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #2 il: 29 Settembre 2016, 18:55:43 »
a parte le mille righe tentete piu' o meno in confusione, lo spezzone di codice riempie un vettore di stringhe con la lista di file da ricodificare in h265.

l'idea e' processare il primo, verificare che il processo sia terminato sensa errori, eliminare il primo elemento dal vettore e continuare a codificare.

Fino a che il vettore non e' vuoto o si e' premuto il tasto annulla 8nel qual caso si ritorna all'interfaccia originale).

In pratica e' un encoder batch di file video.

Il problema e' che (a parte passare tutto il comando ad una shell, in modo un po' brutale), non riesco ad ottenere nulla da ffmpeg (che passato direttamente da terminale va benissimo).

Codice: [Seleziona]
    OutputFileName = File.BaseName(Encoded[0])
    OutputFileName = Replace(OutputFileName, " ", "_")
    OutputFileName = FileChooser_Destinazione.Dir & "/" & OutputFileName & ".mkv"
    comando = "ffmpeg -i " & Encoded[0] & " -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2 " & OutputFileName
    $hProcess = Shell comando

manda il processo in esecuzione e questo non si ferma piu' e non genera nel filesystem ALCUN file mkv.

Avere un'idea dello stato di codifica di ffmpeg sarebbe chiedere troppo, ma almeno vedere un file che cresce di dimensione .....
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #3 il: 30 Settembre 2016, 00:12:47 »
manda il processo in esecuzione e questo non si ferma piu'....
Inizierei a controllare il ciclo: ma...... non è che sarebbe meglio un ciclo Do....Loop Until ?
Codice: [Seleziona]
Do
   .......
   .......
Loop Unitl Not ((bChiudo = True) Or (Encoded.count = 0))   '  Gira fino a che la variabile "bChiudo" non diventa "Not True" (ossia "False")  oppure fino a che "Encoded.Count" non diventa = 0


Prova un po'.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #4 il: 30 Settembre 2016, 02:07:28 »
Il ciclo gira. Con il solo debug mi lista tutti gli elementi del vettore (e con il controllo in testa mi esce subito se il vettore è  vuoto).
Il problema è  proprio il funzionamento di ffmpeg con Shell.
Sembra come se li dentro succedesse qualcosa.
Anche in consolle vedo le prime righe dell'output di ffmpeg ma poi nulla....  E nessun feedback,  neanche indiretto (tipo un nuovo file,  anche vuoto).
Boh..  L'ho lasciato girare nella notte.  Domani mattina vi faccio sapere.
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #5 il: 30 Settembre 2016, 02:11:26 »
Un'altra cosa: ...ma nel tuo sistema è presente la libreria libx265 ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #6 il: 30 Settembre 2016, 11:04:25 »
si, di suo ffmpeg in un terminale funziona benissimo, se io prendo quello che scrive debug e lo butto in un terminale, da qualunque parte del filesystem io sia, ffmpeg inizia a leggere il file mpg e butta re fuori il file mkv codificato x265 ....

Codice: [Seleziona]
Public Sub RunEncoder()
Dim Encoded As String[] 'la lista delle path di tutti i file dalla sorgente da codificare
Dim I As Integer
Dim OutputFileName As String

Dim comando As String

  Encoded = FileChooser_Sorgente.SelectedPaths
 
  Do While Not ((bChiudo = True) Or (Encoded.count = 0)) 'fino a che non ho codificato tutti i file, oppure fino a quando non si preme "cancel"
    'codifica    'ffmpeg -i  "$f" -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2  "$( sed -e's/\.mpg/.mkv/g' <<< $f )"
    OutputFileName = File.BaseName(Encoded[0])
    OutputFileName = Replace(OutputFileName, " ", "_")
    OutputFileName = FileChooser_Destinazione.Dir & "/" & OutputFileName & ".mkv"
   
    comando = "ffmpeg -i " & Encoded[0] & " -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2 " & OutputFileName
   
    Debug comando
   
    Shell comando
   
 
    '$hProcess = Exec ["ffmpeg", "-i", Encoded[0], "-c:v", "libx265", "-preset", "medium", "-crf", "28", "-c:a", "aac", "-b:a", "128k", "-strict -2" & user.Home & "/Scrivania/test" & ".mkv"]
   
    '$hProcess = Exec ["ffmpeg", "-i", Encoded[0], "-c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2 ", OutputFileName] Wait
    '$hProcess = Exec ["ffmpeg", "-i", Encoded[0], "-c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2", FileChooser_Destinazione.Dir & "/" & "test.mkv"] Wait
    'Shell "ffmpeg -i " & Encoded[0] & " -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2 " & FileChooser_Destinazione.Dir & "/" & OutputFileName & ".mkv" wait
    '$hProcess = Shell "ffmpeg -i " & Encoded[0] & " -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2 " & FileChooser_Destinazione.Dir & "/" & OutputFileName & ".mkv"
    'se la codifica e' andata bene allora lo rimuovo
    Encoded.Remove(0)
  Loop
 
  ToggleButton_encode.Value = 0
 
End

per esempio comando mi da':
Citazione
FMain.RunEncoder.119: ffmpeg -i /home/v1p3r/TG/2014/tg_01102014.mpg -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2 /home/v1p3r/TG/tg_01102014.mkv
e se io prendo il comando di ffmpeg e lo butto in un terminale, l'encoder parte senza problemi:
Citazione
ffmpeg -i /home/v1p3r/TG/2014/tg_01102014.mpg -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2 /home/v1p3r/TG/tg_01102014.mkvffmpeg version 2.8.6-1ubuntu2 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.3.1 (Ubuntu 5.3.1-11ubuntu1) 20160311
  configuration: --prefix=/usr --extra-version=1ubuntu2 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mpeg, from '/home/v1p3r/TG/2014/tg_01102014.mpg':
  Duration: 00:20:57.00, start: 0.270000, bitrate: 6281 kb/s
    Stream #0:0[0x1e0]: Video: mpeg2video (Main), yuv420p(tv), 720x576 [SAR 16:15 DAR 4:3], max. 9500 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0:1[0x1c0]: Audio: mp2, 48000 Hz, stereo, s16p, 224 kb/s
x265 [info]: HEVC encoder version 1.9
x265 [info]: build info [Linux][GCC 5.3.1][64 bit] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
x265 [info]: Main profile, Level-3 (Main tier)
x265 [info]: Thread pool created using 8 threads
x265 [info]: frame threads / pool features       : 3 / wpp(9 rows)
x265 [warning]: Source height < 720p; disabling lookahead-slices
x265 [info]: Coding QT: max CU size, min CU size : 64 / 8
x265 [info]: Residual QT: max TU size, max depth : 32 / 1 inter / 1 intra
x265 [info]: ME / range / subpel / merge         : hex / 57 / 2 / 2
x265 [info]: Keyframe min / max / scenecut       : 25 / 250 / 40
x265 [info]: Lookahead / bframes / badapt        : 20 / 4 / 2
x265 [info]: b-pyramid / weightp / weightb       : 1 / 1 / 0
x265 [info]: References / ref-limit  cu / depth  : 3 / 1 / 1
x265 [info]: AQ: mode / str / qg-size / cu-tree  : 1 / 1.0 / 32 / 1
x265 [info]: Rate Control / qCompress            : CRF-28.0 / 0.60
x265 [info]: tools: rd=3 psy-rd=2.00 signhide tmvp strong-intra-smoothing
x265 [info]: tools: deblock sao
Output #0, matroska, to '/home/v1p3r/TG/tg_01102014.mkv':
  Metadata:
    encoder         : Lavf56.40.101
    Stream #0:0: Video: hevc (libx265), yuv420p, 720x576 [SAR 16:15 DAR 4:3], q=2-31, 25 fps, 1k tbn, 25 tbc
    Metadata:
      encoder         : Lavc56.60.100 libx265
    Stream #0:1: Audio: aac ([255][0][0][0] / 0x00FF), 48000 Hz, stereo, fltp, 128 kb/s
    Metadata:
      encoder         : Lavc56.60.100 aac
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg2video (native) -> hevc (libx265))
  Stream #0:1 -> #0:1 (mp2 (native) -> aac (native))
Press [q] to stop, [?] for help

mentre dentro a gambas si ferma (la codifica, l'applicazione risponde in modo fluido) dopo aver invocato ffmpeg. Sembra come se ffmpeg facesse partire un processo separato che pero' non va a buon fine :D

ps: nella consolle i gambas l'output di shell comando e' tipo questo:
Citazione
FMain.RunEncoder.122: ffmpeg version 2.8.6-1ubuntu2 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.3.1 (Ubuntu 5.3.1-11ubuntu1) 20160311
  configuration: --prefix=/usr --extra-version=1ubuntu2 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100

.... e non va oltre.

Ho anche provato ad inserire la creazione di un file di statistiche con l'opzione
Codice: [Seleziona]
-vstats_file " & User.Home & "/MFRfile.txt "
nel comando di ffmpeg (che da terminale genera perfettamente tale file di statistica), ma dopo l'avvio del comando da "shell comando" (nell'applicativo gambas), del file di statistiche non c'e' ne e' traccia ...
« Ultima modifica: 30 Settembre 2016, 11:48:12 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #7 il: 30 Settembre 2016, 12:47:36 »
AGGIORNAMENTO!
Quello pugnettoso (scusate il francesismo) sembrerebbe ffmpeg.

Utilzzando mencoder (che puo' utilizzare anche libac per la codifica, quindi ffmpeg sotto il cofano) shell comand
Codice: [Seleziona]
comando = "mencoder " & Encoded[0] & " -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video -oac lavc -lavcopts acodec=mp2:abitrate=224  -o " & OutputFileName
   
    Debug comando
   
    Timer_Encode_status.Start
   
    Shell (comando)

mi genera il file video transcodificato e mi ritorna in consolle il progresso dell'operazione:
Citazione
...................
[mpeg1video @ 0x7f9ac08cc540]AVFrame.format is not set
[mpeg1video @ 0x7f9ac08cc540]AVFrame.width or height is not set
Pos: 913.2s  22830f (100%) 358.16fps Trem:   0min 112mb  A-V:0.045 [795:224]

Skipping frame!
Pos: 913.2s  22831f (100%) 358.17fps Trem:   0min 112mb  A-V:0.044 [795:224]

Flushing video frames.
Writing index...

Overhead: 1.305% (1518976 / 116396672)
Writing header...

Video stream:  795.951 kbit/s  (99493 B/s)  size: 90853772 bytes  913.160 secs  22831 frames

Audio stream:  224.000 kbit/s  (28000 B/s)  size: 25563552 bytes  912.984 secs


ora o risolvo direttamente con ffmpeg (che preferirei per evitare di dover avere 2 applicazioni nella macchina di deploy e per questioni di efficienza), OPPURE mi studio come passare gli stessi paramentri di ffmpeg attraverso mencoder :-(
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #8 il: 30 Settembre 2016, 14:55:30 »
..... OPPURE mi studio come passare gli stessi paramentri di ffmpeg attraverso mencoder :-(
....ma ovviamente se ti mettessi a correre, moriresti stanco.       ;D


Ad ogni modo io ho la ZenZaZione che potresti ottenere tutto utilizzando gli opportuni plugin di GStreamer mediante le Classi MediaPipeline e MediaControl del Componente gb.media di Gambas.   :-X
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #9 il: 30 Settembre 2016, 15:36:56 »
sicuramente gstreamer potrebbe essere adatto, ma tende ad essere un po' instabile .... e anche abbastanza complicato da maneggiare.

Insuperabile come flessibilita' per maneggiare strumenti multimediali (o crearne di nuovi), ma in teoria avconv/ffmpeg dovrebbero essere proprio pensati per fare quel che serve a me ...transcodificare ...

boh ... vedremo ...

forse utiizzando direttamente libav come da tuo tutorial sul wiki ...
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #10 il: 30 Settembre 2016, 16:27:00 »
gstreamer ....... tende ad essere un po' instabile
Dici ?   :-\


.... e anche abbastanza complicato da maneggiare.
...in questi giorni mi sono un po' messo a correre  ;D con gb.media:
http://www.gambas-it.org/wiki/index.php?title=La_gestione_dei_file_audio_mediante_il_componente_gb.media

V'è da aggiungere che esiste un apposito plugin di GStreamer che fa uso della libreria ffmpeg.



ma in teoria avconv/ffmpeg dovrebbero essere proprio pensati per fare quel che serve a me ...transcodificare ...

forse utiizzando direttamente libav come da tuo tutorial sul wiki ...
Bisogna trovare qualche breve, semplice esempio pratico scritto in C.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #11 il: 03 Ottobre 2016, 18:10:35 »
Per il momento mi arrangio con questa modifica:
Codice: [Seleziona]
Public Sub RunEncoder()
Dim Encoded As String[] 'la lista delle path di tutti i file dalla sorgente da codificare
Dim I As Integer
Dim OutputFileName As String

'provo a farmi un file con tutti i singoli comandi ffmpeg da lanciare   
Dim hFile As File

Dim comando As String

  Encoded = FileChooser_Sorgente.SelectedPaths
 
  'apre il file dello script per mettere il comando di codifica
  hFile = Open FileChooser_Destinazione.Dir & "/long_script.sh" For Write Create
 
  Do While Not ((bChiudo = True) Or (Encoded.count = 0)) 'fino a che non ho codificato tutti i file, oppure fino a quando non si preme "cancel"
   
    OutputFileName = File.BaseName(Encoded[0])
    OutputFileName = Replace(OutputFileName, " ", "_")
    OutputFileName = FileChooser_Destinazione.Dir & "/" & OutputFileName & ".mkv"
   
    'comando che in teoria dovrebbe andare bene con tanto di file delle stitistiche da spulciare per avere il progresso della codiifca
    comando = "ffmpeg -i " & Encoded[0] & " -c:v libx265 -preset medium -crf 28 -c:a aac -b:a 128k -strict -2 -vstats_file " & User.Home & "/MFRfile.txt " & OutputFileName

    Print #hFile, comando

    Sleep 0.1
   
    'se la codifica e' andata bene allora lo rimuovo
    Encoded.Remove(0)
  Loop
 
  'chiude il file dello script
  Close #hFile
 
  ToggleButton_encode.Value = 0
 
End

che in pratica genera il file di testo che con chmod +x trasformo in uno script da lanciare in un terminale.

Qui' tutto funziona .....

Appena ho tempo provero' a vedere come passare paramentri piu' complessi a mplayer (devo dare attravero mencoder il parametro -strict -2 a ffmpeg).
Sempre che non ho apito perche' ffmpeg diretta emnte mi manda a quel paese .....
« Ultima modifica: 03 Ottobre 2016, 19:46:37 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #12 il: 04 Ottobre 2016, 10:19:35 »
...in extremis si potrebbe pensare all''uso di una libreria dinamica condivisa .so ad hoc, scritta in C.   :-X
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #13 il: 04 Ottobre 2016, 12:14:00 »
Come forse avrai notato sono una mezza ciofeca con il C e similari.
Qualcosa ho trovato qui':
https://github.com/FFmpeg/FFmpeg/tree/master/doc/examples

ma e' veramente un po' troppo low level per una cosa (lanciare un comando ffmpeg) che dovrebbe essere fattibile in quattro linee di codice gambas e una chiamata shell ...
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.266
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:(N-ESIMA) domanda su exec e shell
« Risposta #14 il: 04 Ottobre 2016, 12:17:45 »
Preliminarmente si potrebbe esperire una cosa analoga a questa:
Codice: [Seleziona]
' int Lancia_Comando(const char * comando)
' Chiama la libreria ad hoc per l'uso della funzione esterna "system()"
Private Extern Lancia_Comando(comando As String) As Integer In "/tmp/libadhoc"


Public Sub Main()

  Dim s As String
 
    Creaso()
   
    s = "cvlc /percorso/file/audio"
   
    Lancia_Comando(s)
   
End


Private Procedure Creaso()
 
  File.Save("/tmp/libadhoc.c", "#include <stdlib.h>\n\n" &
            "int Lancia_Comando(const char * comando) {\n\n" &
            "   system(comando);\n\n" &
            "   return (0);\n\n}")
 
  Shell "gcc -o /tmp/libadhoc.so /tmp/libadhoc.c -shared -fPIC" Wait
 
End
« Ultima modifica: 04 Ottobre 2016, 15:30:52 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »