Fedora Online Forum

Il forum della comunità italiana di Fedora

#1 07-03-2013 01:41:44

mitma
Redattore
Da Pisa
Registrato: 27-11-2010
Messaggi: 47
Sito web

[Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

Salve a tutti!

Da un paio di giorni ho voluto provare la spin di Fedora 18 Xfce a 64bit. Esplorandola, non essendoci gnome-shell, ho visto che mancava la possibilità della combinazione di tasti CTRL+ALT+SHIFT+R per lanciare uno screencasting (registrazione video dello schermo), che tra l'altro nel desktop di Fedora 18 era priva di audio, anche se di buona qualità! Così, ricordando l'applet Byzanz, conosciuto sotto il desktop gnome di Ubuntu, ho pensato di reinstallarlo per vedere se in Fedora Xfce ricompariva nell'elenco degli applet del pannello (con gnome-shell, in Fedora 18, non compariva), ma nulla. Rimane però sempre la possibilità di utilizzarlo da riga di comando, e la registrazione, comprensiva di audio, ho visto che viene molto bene con il comando:

byzanz-record -v -a -c --display=:0.0 --width=1366 --height=768 --duration=86400 --delay=0 ~/Video/test.flv

Come potete vedere, il problema però è la necessità di dover impostare l'opzione --duration, per indicare la durata della registrazione, essendo altrimenti di default limitata a soli 10 secondi, mentre avrei voluto che potesse essere indefinita, ed interrotta solo quando voluto; in Ubuntu, infatti, il programma prevedeva un applet da poter inserire sul pannello di gnome che al click iniziava la registrazione e al successivo click la interrompeva, dando anche la possibilità di un pannello di configurazione selezionabile dal menu contestuale del click destro sull'icona, in cui si poteva impostare l'estensione per l'output, la presenza o meno dell'audio e così via...tutte le opzioni che in pratica si possono comunque dare anche da riga di comando, ma manca la possibilità di interrompere la registrazione con un semplice click. Ho pensato allora di creare due script, uno per l'avvio e l'altro per l'interruzione della registrazione:

  • Per l'avvio:

    #!/bin/bash
    byzanz-record -v -a -c --display=:0.0 --width=1366 --height=768 --duration=86400 --delay=0 ~/Video/test.flv
    exit

    in pratica, la durata del comando deve essere impostata in secondi, e non essendoci la possibilità di rendere indefinito il tempo di registrazione fino ad avvenuta interruzione, ho impostato la durata per un giorno intero convertito in secondi, ovvero 86400 secondi (per avere un largo eccesso).

  • Per l'interruzione:

    #!/bin/bash
    pid1=$(ps -ax | grep ' byzanz-record ')
    kill ${pid1}
    pid2=$(ps -ax | grep ' kill_byzanz-record ')
    kill ${pid2}
    exit

    ho creato due variabili d'ambiente, ${pid1} e ${pid2}, la prima per individuare il PID del programma byzanz-record da killare successivamente, e la seconda per individuare e killare il PID del lanciatore kill_byzanz-record che mi chiude l'applicazione byzanz-record. Non ho trovato un metodo più dolce per la chiusura del programma, ma comuque ho visto che il risultato finale è buono.

Il problema è che il file test.flv che ottengo, per quanto abbia un'ottima resa di audio e video, vede una formale durata di 24 ore (gli 86400 secondi impostati per la durata), anche se poi in realtà il video dura meno, e si rende difficilissimo scorrere con lo slider per la ricerca nella timeline del video.

Allora sto cercando ora di modificare i due script. L'idea che ho avuto è quella di inserire come valore dell'opzione --duration una variabile d'ambiente, ovvero l'output del comando:

ps -p <PID> -o etime=

(con <PID> sostituito dal PID del mio processo), che mi dice da quanto tempo è in corso il mio processo identificato dal PID, ma dato che questo output mi viene espresso nel formato hh:mm:ss, avrei bisogno di convertirlo in soli secondi, che pensavo quindi di inserire come variabile d'ambiente nell'opzione --duration (quindi un primo step, dopo quel comando, è la conversione in secondi di quel formato in hh:mm:ss, e fin qui ce l'ho fatta da solo). Per raggiungere lo scopo, inoltre penso che dovrei maggiorare l'opzione --duration di ulteriori tot secondi (ad esempio 3 secondi) per permettere al processo di partire, altrimenti mi finirebbe nello stesso istante in cui parte, e in questa maniera dovrei forse riuscire ad ottenere una durata indefinita, fino al kill generato dall'altro script, ottenendo alla fine un file con una durata temporale pressoché reale, a meno di quei tot secondi di maggiorazione (es. 3 secondi)... L'idea era quindi questa. Ora stavo cercando di trasformarla in bash per testarla.

Sono riuscito a convertire l'output di quel comando in soli secondi; per testarlo ho usato come comando l'avvio di firefox:

firefox &
pid_firefox=$(ps -o pid --no-headers -C "firefox")
sec_firefox=$(ps -p ${pid_firefox} -o etime= > /tmp/firefox_elapsed_time && more /tmp/firefox_elapsed_time | sed -E 's/(.*):(.+):(.+)/\1*3600+\2*60+\3/;s/(.+):(.+)/\1*60+\2/' | bc)
echo ${sec_firefox}

Quindi ora si tratta di provare a usare quella variabile d'ambiente ${sec_firefox} come valore dell'opzione --duration maggiorata ad esempio di 3 secondi. Ho provato in questa maniera:

#!/bin/bash
pid_byzanz=$(ps -o pid --no-headers -C "byzanz-record")
sec_byzanz=$(ps -p ${pid_byzanz} -o etime= > /tmp/byzanz_elapsed_time && more /tmp/byzanz_elapsed_time | sed -E 's/(.*):(.+):(.+)/\1*3600+\2*60+\3/;s/(.+):(.+)/\1*60+\2/' | bc)
x=$(( ${sec_byzanz} + 3 ))
byzanz-record -v -a -c --display=:0.0 --width=1366 --height=768 --duration=$x --delay=0 /home/Riccardo/Video/test.flv
exit

ma la registrazione, per quanto parta, dura solo 3 secondi. In pratica non mi fa la somma dei 3 secondi con il tempo trascorso dall'avvio di byzanz-record (ovvero la variabile d'ambiente ${sec_byzanz}), che dovrebbe essere in continua crescita, rendendo quindi di durata indefinita il processo, secondo la mia idea.

Vorrei un aiuto da qualcuno più esperto di me, essendo agli inizi nel bash script, grazie.

Riccardo

Ultima modifica di mitma (09-03-2013 23:25:59)


"The limits of my language mean the limits of my world" (Ludwig Wittgenstein)

Non in linea

#2 08-03-2013 22:25:31

mitma
Redattore
Da Pisa
Registrato: 27-11-2010
Messaggi: 47
Sito web

Re: [Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

Ho forse capito perché lo script non funziona...

#!/bin/bash
pid_byzanz=$(ps -o pid --no-headers -C "byzanz-record")
sec_byzanz=$(ps -p ${pid_byzanz} -o etime= > /tmp/byzanz_elapsed_time && more /tmp/byzanz_elapsed_time | sed -E 's/(.*):(.+):(.+)/\1*3600+\2*60+\3/;s/(.+):(.+)/\1*60+\2/' | bc)
x=$(( ${sec_byzanz} + 3 ))
byzanz-record -v -a -c --display=:0.0 --width=1366 --height=768 --duration=$x --delay=0 /home/Riccardo/Video/test.flv
exit

Ho verificato che la riga pid_byzanz=$(ps -o pid --no-headers -C "byzanz-record") dà valore nullo, dal momento che, al momento dell'avvio dello script, byzanz-record non è attivo come processo; infatti, non appena lanciato lo script, se do il comando:

echo ${pid_byzanz}

ho una riga vuota, essendo la variabile d'ambiente ${pid_byzanz} priva di contenuti, e quindi la riga successiva con:

ps -p ${pid_byzanz} -o etime=

ha output nullo, come tempo di attività "${sec_byzanz}" del processo, non essendoci un processo con PID uguale a ${pid_byzanz}, e quindi la variabile $x risulta nei soli 3 secondi in più settati. Quindi, forse, la sommatoria x=$(( ${sec_byzanz} + 3 )) (che pensavo essere il problema) non è sbagliata, ma il problema è semplicemente che il valore di ${sec_byzanz} è nullo per quanto detto.... Il comando ps dice solo da quanto tempo un processo già attivo è in corso, e non fa riferimento a un processo futuro.

Ora, stavo pensando a una scappatoia, ed ho avuto un'idea, ma se qualcuno mi può aiutare a convertirla in bash ne sarei grato e la potrei anche testare:

La base è scegliere un grosso numero iniziale, e questo lo avevo già fatto impostando 86400 secondi, ovvero 24 ore, che corrisponderebbero a:

24h = "86400 seconds" = "tempo di registrazione" + "tempo eccedente"

A me serve il "tempo di registrazione" come valore per la mia opzione "--duration", per cui potrei fare qualcosa del genere, forse:

  • Se il mio processo byzanz-record non è in corso, allora la mia variabile d'ambiente $x è quel largo numero impostato, ovvero 86400 secondi;

  • Se il mio processo byzanz-record è in corso, invece, la mia variabile d'ambiente $x diventa uguale al "tempo di registrazione" = "86400 secondi" - "tempo eccedente" = "86400 secondi" - ("86400 secondi" - "tempo di registrazione"), dove il "tempo di registrazione" diventa l'output del comando:

    ps -p ${pid_byzanz} -o etime=

Potrebbe funzionare? Se qualcuno esperto si può esprimere in proposito sarei grato.

Saluti,

Riccardo

Ultima modifica di mitma (08-03-2013 23:06:51)


"The limits of my language mean the limits of my world" (Ludwig Wittgenstein)

Non in linea

#3 09-03-2013 23:05:25

mitma
Redattore
Da Pisa
Registrato: 27-11-2010
Messaggi: 47
Sito web

Re: [Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

Sono riuscito alla fine a creare da solo lo script!! big_smile...e finalmente ora byzanz-record funziona perfettamente anche su Fedora, e ovunque lo si installerà, senza che ci sia il bisogno dell'applet sul pannello per l'avvio e l'interruzione della registrazione, e con la possibilità di scegliere se registrare o meno anche l'audio oltre che stabilire il formato di esportazione, che può essere nel formato flv od ogg (entrambi con la possibilità di abilitare l'opzione per la registrazione dell'audio), ma anche gif, anch'essa molto utile, ma senza la possibilità di utilizzo ovviamente dell'opzione audio, a meno di errore. Si può anche scegliere se seguire o meno il cursore (utile se si vuole esportare una gif) e scegliere la risoluzione dello schermo ecc...comuque il man di byzanz-record riporta tutto. Il problema del comando da teminale l'ho esposto sopra, ma la soluzione ora c'è:

Si tratta di fare 2 scripts, uno di avvio e l'altro di chiusura del programma:

  • Lo script di avvio:

    intanto gli ho dato un nome arbitrario, "OK_chek_byzanz"; "check", perché lo script controlla se il processo è in esecuzione, per cui, se non è in esecuzione, lo avvia, mentre se è già in esecuzione, si previene un ulteriore avvio, se si clicca nuovamente su "OK_chek_byzanz", evitando una sovrascrittura del file di registrazione. Se il lancio dello script avviene da terminale, compariranno a schermo delle voci descrittive del processo in corso, il ché è anche interessante per sapere quanto tempo è già trascorso, dato che ad esempio YouTube pone dei limiti non tanto sulla dimensione in byte (che è abbastana alta), quanto sulla dimensione temporale dei files che vengono caricati, ad esempio, per cui è possibile monitorare da terminale il processo wink. Lo script va reso avviabile con:

    $ chmod +x ./OK_chek_byzanz

    Il suo contenuto è il seguente:

    #!/bin/bash
    if [ "$(pidof byzanz-record)" ] 
    then
      # process was found
      pid_byzanz=$(ps -o pid --no-headers -C "byzanz-record") && time1_byzanz=$(ps -p ${pid_byzanz} -o etime=) && time2_byzanz=$(ps -p ${pid_byzanz} -o etime= > /tmp/byzanz_elapsed_time && more /tmp/byzanz_elapsed_time | sed -E 's/(.*):(.+):(.+)/\1*3600+\2*60+\3/;s/(.+):(.+)/\1*60+\2/' | bc) && h=$(( $time2_byzanz / 3600 )) && m=$(( ( $time2_byzanz / 60 ) % 60 )) && s=$(( $time2_byzanz % 60 )) && hh_mm_ss=$(printf "%02d:%02d:%02d\n" $h $m $s)
      echo -e "\nbyzanz-record è già stato avviato. Il suo PID è $pid_byzanz, e il suo tempo di attività è $time1_byzanz, ovvero $time2_byzanz secondi, che possono anche essere espressi come $hh_mm_ss.\n\nQuest'ultimo formato sarà utilizzato come informazione da passare a ffmpeg per tagliare il file temporaneo generato da byzanz-record e salvato nel percorso ~/byzanz_temp_recording.flv.\n\nNB: Questo script, se lanciato da terminale, può anche semplicemente stampare a schermo il solo tempo di attività trascorso, nel formato hh:mm:ss, che verrà passato automaticamente come informazione a ffmpeg, senza questa parte discorsiva. Per fare questo, è sufficiente modificare il codice con la rimozione del carattere cancelletto (#) posto alla fine di questa riga, per attivare il pipe (|) seguito dal comando \"echo \$hh_mm_ss\" (senza le virgolette).\n" # | echo $hh_mm_ss
    else
      # process not found
      echo -e "\nbyzanz-record non è un processo aperto e verrà ora avviato!" && byzanz-record -v -a -c --display=:0.0 --width=1366 --height=768 --duration=86400 --delay=0 ~/byzanz_temp_recording.flv &
    fi
    exit

    A volerlo descrivere, si parte dalla condizione che vede se il processo è già attivo:


    • se il processo è attivo (vedere "# process was found"), allora ne consegue tutta quella parte:

        pid_byzanz=$(ps -o pid --no-headers -C "byzanz-record") && time1_byzanz=$(ps -p ${pid_byzanz} -o etime=) && time2_byzanz=$(ps -p ${pid_byzanz} -o etime= > /tmp/byzanz_elapsed_time && more /tmp/byzanz_elapsed_time | sed -E 's/(.*):(.+):(.+)/\1*3600+\2*60+\3/;s/(.+):(.+)/\1*60+\2/' | bc) && h=$(( $time2_byzanz / 3600 )) && m=$(( ( $time2_byzanz / 60 ) % 60 )) && s=$(( $time2_byzanz % 60 )) && hh_mm_ss=$(printf "%02d:%02d:%02d\n" $h $m $s)
        echo -e "\nbyzanz-record è già stato avviato. Il suo PID è $pid_byzanz, e il suo tempo di attività è $time1_byzanz, ovvero $time2_byzanz secondi, che possono anche essere espressi come $hh_mm_ss.\n\nQuest'ultimo formato sarà utilizzato come informazione da passare a ffmpeg per tagliare il file temporaneo generato da byzanz-record e salvato nel percorso ~/byzanz_temp_recording.flv.\n\nNB: Questo script, se lanciato da terminale, può anche semplicemente stampare a schermo il solo tempo di attività trascorso, nel formato hh:mm:ss, che verrà passato automaticamente come informazione a ffmpeg, senza questa parte discorsiva. Per fare questo, è sufficiente modificare il codice con la rimozione del carattere cancelletto (#) posto alla fine di questa riga, per attivare il pipe (|) seguito dal comando \"echo \$hh_mm_ss\" (senza le virgolette).\n" # | echo $hh_mm_ss

      con la quale si creano diverse variabili d'ambiente: $pid_byzanz che memorizza il PID del processo byzanz-record già in corso, $time1_byzanz che memorizza da quanto tempo il processo è in corso, scrivendolo in un formato che però varia, ovvero mm:ss (minuti:secondi), finché ci sono solo i secondi, per poi diventare hh:mm:ss (ore:minuti:secondi) quando i tempi si allungano, mentre io avevo la necessità di avere un formato costante del tipo hh:mm:ss da passare dopo (nel secondo script) a ffmpeg, per cui mi sono creato una variabile $time2_byzanz che mi converte tutto in secondi, e una successiva variabile finale, $hh_mm_ss, che mi converte i secondi esclusivamente nel mio formato voluto, ovvero hh:mm:ss, che poi passerò a ffmpeg nel secondo script! Ho poi usato le variabili create per descrivere semplicemente il processo in corso facendo uso di echo, ma la descrizione può essere anche bypassata come output da terminale andando a timuovere il carattere # a livello di:

      # | echo $hh_mm_ss

      che deve quindi diventare:

      | echo $hh_mm_ss

      per ottenere come output solo $hh_mm_ss, ovvero il tempo trascorso nel formato hh:mm:ss!

      Se per caso si dovesse lanciare di nuovo lo script "OK_chek_byzanz", si avrebbe un aggiornamento delle variabili, permettendo così di monitorare il processo di registrazione come durata, per non eccedere ad esempio rispetto ai tempi imposti da YouTube.

    • Se invece, all'avvio dello script "OK_chek_byzanz", il processo byzanz-record non dovesse essere in corso, allora si ottiene quella seconda parte dello script (vedere # process not found), che notifica che il processo non è in esecuzione, per cui lo avvia, indicando che verrà iniziata una registrazione di 86400 secondi, ovvero 24 ore: non preoccupatevi, è voluta la cosa, e serve per dare un grosso margine di eccesso che poi verrà ridimensionata al tempo reale di registrazione grazie al comando di interruzione fornito dal secondo script! Queste notifiche, come al solito, compaiono solo lanciando lo script "OK_chek_byzanz" da terminale (al momento almeno smile...pensavo di provare a fare anche una versione grafica, ma credo che tutto sommato non serva poi tanto oramai, impostate così le cose, come vi farò vedere), ma se, come vedremo, si fa uso di lanciatori, tutto accade in background, e alla fine si avrà solo il nostro file video (nel formato specificato nel sorgente, che può essere, ripeto, flv od ogg o gif: vedere il man di byzanz-record) nella nostra home (a meno di modifiche del codice riportato).

  • Lo script di interruzione:


    Anche in questo caso, gli ho dato un nome arbitrario, "OK_kill_byzanz"; "check", perché lo script anche qui controlla se il processo è in esecuzione:

    #!/bin/bash
    if [ "$(pidof byzanz-record)" ] 
    then
    # process was found
    pid_byzanz=$(ps -o pid --no-headers -C "byzanz-record") && time1_byzanz=$(ps -p ${pid_byzanz} -o etime=) && time2_byzanz=$(ps -p ${pid_byzanz} -o etime= > /tmp/byzanz_elapsed_time && more /tmp/byzanz_elapsed_time | sed -E 's/(.*):(.+):(.+)/\1*3600+\2*60+\3/;s/(.+):(.+)/\1*60+\2/' | bc) && h=$(( $time2_byzanz / 3600 )) && m=$(( ( $time2_byzanz / 60 ) % 60 )) && s=$(( $time2_byzanz % 60 )) && hh_mm_ss=$(printf "%02d:%02d:%02d\n" $h $m $s) && echo -e "\nIl processo byzanz-record, identificato dal PID $pid_byzanz, verrà ora interrotto ed elaborato da ffmpeg per dare l'output finale nel percorso ~/byzanz_final_output.flv!\n\nIl suo tempo di attività è stato $time1_byzanz, ovvero $time2_byzanz secondi, che posso anche esprimere come $hh_mm_ss.\n" && killall byzanz-record && ffmpeg -y -ss 00:00:00 -t $hh_mm_ss -i ~/byzanz_temp_recording.flv -vcodec copy -acodec copy ~/byzanz_final_output.flv && rm ~/byzanz_temp_recording.flv
    else
      # process not found
      echo -e "\nbyzanz-record non è avviato! Non c'è alcun processo da interrompere.\n"
    fi
    exit

    Si parte sempre dal controllo se il processo è in esecuzione:

    • Se byzanz-record è in esecuzione (vedere # process was found), si usano le variabili ambientali impostate nel precedente script per descrivere sempre il processo con echo, ma soprattutto, dopo interruzione del processo con killall byzanz-record, la variabile $hh_mm_ss mi permette ora di tagliare tutta la parte del video eccedente, ricordando che il tempo di registrazione lo avevo impostato con largo eccesso su 24h, e le impostazioni di ffmpeg sono tali da non manipolare la qualità video ed audio ottenuta da byzanz-record, avendo posto copy come valore per le rispettive opzioni, per cui viene lasciata la traccia originale, ed ottengo nella home dell'utente in uso un file finale byzanz_final_output.flv, con un tempo reale di durata per la timeline, permettendo lo scrolling per la ricerca nel video! Perfetto!! smile Il tutto poi è accompagnato da tempi rapidissimi, dal momento che byzanz-record codifica al volo, e ffmpeg non ricodifica, dato che lascia le tracce audio-video originali, per cui ci si trova immediatamente il file finale byzanz_final_output.flv, al click del secondo script "OK_kill_byzanz".

    • Se invece si esegue il click su "OK_kill_byzanz" quando byzanz-record non è in esecuzione, si ottiene (da terminale) la notifica da parte di echo, riportata a livello di # process not found, che avvisa dicendo: "byzanz-record non è avviato! Non c'è alcun processo da interrompere." smile

Obiettivo così raggiunto, che si può accessoriare di due lanciatori che fanno riferimento ai due script (resi entrambi eseguibili col comando detto), uno per l'avvio e l'altro per la chiusura, inseriti poi in /usr/share/applications col comando:

# mv ./Avvia\ byzanz-record.desktop /usr/share/applications
# mv ./Interrompi\ byzanz-record.desktop /usr/share/applications

che potremo poi rapidamente avviare tramite il pacchetto gnome-do (che consiglio vivamente di installare, insieme a tutti i suoi plugins), installato con:

# yum install gnome-do

accedendovi con la rapida combinazione di tasti predefinita TastoWindows+Space, eventualmente anche personalizzabile dalle preferenze di gnome-do.
Perfetto!

Anche a voi ora questa risorsa! wink

Riccardo

Ultima modifica di mitma (11-03-2013 19:15:20)


"The limits of my language mean the limits of my world" (Ludwig Wittgenstein)

Non in linea

#4 10-03-2013 00:32:36

bebo_sudo
Collaboratore
Da Trento+Trieste
Registrato: 28-02-2011
Messaggi: 1'845
Sito web

Re: [Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

Wow..bella lotta wink

Posso consigliarti un altro perfezionamento?
Potresti fare in modo di creare un file nascosto nella tua home in cui siano contenute delle variabili, da leggere prima dell'esecuzione, qualcosa del genere:

SAVE_DIR="~/Video/video_catturati/"

ma forse questo va un po' al di là dell'utile.
Potresti invece aggiungere un passaggio nello script in modo che integri data e ora nel file di output, così si evita di andare a sovrascrivere sempre sullo stesso. Che ne dici?

Non in linea

#5 10-03-2013 04:46:31

mitma
Redattore
Da Pisa
Registrato: 27-11-2010
Messaggi: 47
Sito web

Re: [Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

Ciao Alberto!! big_smile e si, ma la soddisfazione ora è tanta big_smile...è la prima volta che mi cimento così!.. Dici di nominare il file aggiungendo al nome delle variabili d'ambiente in pratica? ...Così in effetti, anche se non si rimuove il file dalla home, il successivo non lo sovrascriverebbe!! Giusto! smile Grazie come sempre big_smile...Anche l'altra volta, a fine topic hai messo la ciliegina sulla torta smile. Allora provvedo alla modifica nel file OK_kill_byzanz:

#!/bin/bash
if [ "$(pidof byzanz-record)" ] 
then
# process was found
pid_byzanz=$(ps -o pid --no-headers -C "byzanz-record") && time1_byzanz=$(ps -p ${pid_byzanz} -o etime=) && time2_byzanz=$(ps -p ${pid_byzanz} -o etime= > /tmp/byzanz_elapsed_time && more /tmp/byzanz_elapsed_time | sed -E 's/(.*):(.+):(.+)/\1*3600+\2*60+\3/;s/(.+):(.+)/\1*60+\2/' | bc) && h=$(( $time2_byzanz / 3600 )) && m=$(( ( $time2_byzanz / 60 ) % 60 )) && s=$(( $time2_byzanz % 60 )) && hh_mm_ss=$(printf "%02d:%02d:%02d\n" $h $m $s) && mydate=$(date +"time-%H.%M") && echo -e "\nIl processo byzanz-record, identificato dal PID $pid_byzanz, verrà ora interrotto ed elaborato da ffmpeg per dare l'output finale nel percorso ~/byzanz_output_\$mydate.flv!\n\nIl suo tempo di attività è stato $time1_byzanz, ovvero $time2_byzanz secondi, che posso anche esprimere come $hh_mm_ss.\n" && killall byzanz-record && ffmpeg -y -ss 00:00:00 -t $hh_mm_ss -i ~/byzanz_temp_recording.flv -vcodec copy -acodec copy ~/byzanz_output_$mydate.flv && rm ~/byzanz_temp_recording.flv
else
  # process not found
  echo -e "\nbyzanz-record non è avviato! Non c'è alcun processo da interrompere.\n"
fi
exit

La parte aggiunta, diversamente da prima, è && mydate=$(date +"time-%H.%M"), insieme a verrà ora interrotto ed elaborato da ffmpeg per dare l'output finale nel percorso ~/byzanz_output_\$mydate.flv! e -vcodec copy -acodec copy ~/byzanz_output_$mydate.flv, ottenedo il nome nel formato byzanz_output_time-hh.mm.flv, e così giustamente non c'è più il rischio di sovrascrittura, mentre il file temporaneo viene comunque rimosso alla fine di ogni ciclo di registrazione tramite lo script! Magico big_smile..... Ho caricato un video esemplificativo su YouTube smile da vedere con la massima risoluzione selezionabile nel menu apposito... L'upload decodifica il video originale abbassando la reale risoluzione originale... Comunque si può vedere il sincronismo tra video ed audio, e come l'immagine non sgrani con i quadrati che invece mi compaiono usando Istanbul e recordMydesktop, provati in precedenza...La combinazione di tasti CTRL+ALT+SHIFT+R di gnome-shell ha invece il deficit dell'audio, per quanto il video sia molto buono...Byzanz-record mi sembra sia l'ideale così sistemato ora!! smile

Ciao!

Riccardo

Ultima modifica di mitma (10-03-2013 05:00:09)


"The limits of my language mean the limits of my world" (Ludwig Wittgenstein)

Non in linea

#6 10-03-2013 04:54:42

mitma
Redattore
Da Pisa
Registrato: 27-11-2010
Messaggi: 47
Sito web

Re: [Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

PS. Il discorso del file nascosto era per snellire il codice dello script?...Se fosse per quello, era per non disseminare tanti files, e raccogliere il tutto in due soli, a meno dei lanciatori .desktop. Sarebbe bello invece traslarlo in applicazione grafica...ho letto che si potrebbe...ma cmq non vedo l'utilità grossa, dal momento che a parte l'iniziale impostazione per la risoluzione dello schermo e la scelta se registrare o meno l'audio o seguire o meno il cursore, le opzioni del comando sono da darsi solo nel file "OK_chek_byzanz" alla riga 9! Il resto non va toccato, a meno di non voler scegliere un percorso diverso e un nome diverso per il salvataggio, e in tal caso bisogna cambiare solo la fine della riga 5 in "OK_kill_byzanz".

Ultima modifica di mitma (12-03-2013 02:00:09)


"The limits of my language mean the limits of my world" (Ludwig Wittgenstein)

Non in linea

#7 10-03-2013 12:32:30

bebo_sudo
Collaboratore
Da Trento+Trieste
Registrato: 28-02-2011
Messaggi: 1'845
Sito web

Re: [Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

Vorrei consigliarti di rendere lo script più verticale.
Ad esempio, quando nomini delle variabili che non dipendono dal passaggio precedente, come quella della data, potresti evitare di "legarla" con &&, dato che il controllo lo fai all'inizio, nell'if, così rendi lo script anche più leggibile.

Il file lo pensavo per impostare alcuni valori a delle variabili da usare nello script, come ad esempio la directory di destinazione, e da leggere prima dell'esecuzione. Ma si possono semplicemente inserire all'inizio dello script, senza ricorrere a file esterni.
Mi sono permesso di dare una sistemata allo script. Che ne dici? smile

#!/bin/bash

#dichiarazione cartella in cui infilare l'output
OUT_DIR="~/Video_byzanz"

if [ "$(pidof byzanz-record)" ]; then # process was found

	pid_byzanz=$(ps -o pid --no-headers -C "byzanz-record")
	#tempo in minuti:secondi
	time1_byzanz=$(ps -p ${pid_byzanz} -o etime=)
	#tempo in secondi
	time2_byzanz=$(ps -p ${pid_byzanz} -o etime= |sed -E 's/(.*):(.+):(.+)/\1*3600+\2*60+\3/;s/(.+):(.+)/\1*60+\2/' |bc)

	#ricavo da quanto tempo sta girando byz
	h=$(( $time2_byzanz / 	3600 ))
	m=$(( ( $time2_byzanz / 60 ) % 60 ))
	s=$(( $time2_byzanz % 60 ))
	hh_mm_ss=$(printf "%02d:%02d:%02d\n" $h $m $s)
	echo -e "\nIl processo byzanz-record, identificato dal PID $pid_byzanz, verrà ora interrotto ed elaborato da ffmpeg per dare l'output finale nel percorso ~/byzanz_output_\$mydate.flv!\n\nIl suo tempo di attività è stato $time1_byzanz, ovvero $time2_byzanz secondi, che posso anche esprimere come $hh_mm_ss.\n"
	killall byzanz-record

	#creazione directory dove mettere i file
	test -d $OUT_DIR || mkdir $OUT_DIR
	#processo del file con ffmpeg
	ffmpeg -y -ss 00:00:00 -t $hh_mm_ss -i ~/byzanz_temp_recording.flv -vcodec copy -acodec copy $OUT_DIR/byzanz_output_$(date +"time-%H.%M").flv
	rm -f ~/byzanz_temp_recording.flv

else # process not found
	echo -e "\nbyzanz-record non è avviato! Non c'è alcun processo da interrompere.\n"
fi
#superfluo
exit 0

Non in linea

#8 10-03-2013 18:28:41

mitma
Redattore
Da Pisa
Registrato: 27-11-2010
Messaggi: 47
Sito web

Re: [Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

smile Grazie per la pulizia del codice e i suggerimenti...lo stavo provando, ma mi da errore nell'esistenza della cartella di salvataggio...non so come mai...il problema è a livello di:

test -d $OUT_DIR || mkdir $OUT_DIR

non conoscevo il comando test e il || smile . Ho capito a cosa serve guardando qui: what does " ||" mean? ( Double pipe) wink

Ho notato una cosa..non so come mai la variabile $hh_mm_ss non venga passata così com'è a ffmpeg: se ad esempio $hh_mm_ss = 00:00:39, in ffmpeg diventano time=00:00:27.38...quindi mi sa che conviene esprimere $hh_mm_ss indicando anche i centesimi di secondo, per ottenere un taglio esatto!

Ho provato una cosa del genere:

	#PID del processo byzanz-record
	pid_byzanz=$(ps -o pid --no-headers -C "byzanz-record")
	#tempo di esecuzione in minuti:secondi
	time1_byzanz=$(ps -p ${pid_byzanz} -o etime=)
	#tempo di esecuzione in secondi
	time2_byzanz=$(ps -p ${pid_byzanz} -o etime= |sed -E 's/(.*):(.+):(.+)/\1*3600+\2*60+\3/;s/(.+):(.+)/\1*60+\2/' |bc)
	#tempo di esecuzione in ore:minuti:secondi, necessario a ffmpeg
	h=$(( $time2_byzanz / 	3600 ))
	m=$(( ( $time2_byzanz / 60 ) % 60 ))
	s=$(( $time2_byzanz % 60 ))
	hh_mm_ss=$(printf "%02d:%02d:%02d\n" $h $m $s)

	# arrotondamento in eccesso dei secondi, per il taglio eseguito da ffmpeg
	if [ "$s" -gt 0 ] # vero se "$s" è maggiore di 0
	then
	  # "$s" è maggiore di 0
	  sr=$(( $s + 2 ))
	else
	  # "$s" è uguale a 0
	  sr=$(( $s + 0 ))
	fi

	ffmpeg_hh_mm_ss=$(printf "%02d:%02d:%02d\n" $h $m $sr)

nota $sr al posto di $s (sr = rounded seconds) per dire che, se i secondi sono maggiori di 0, aggiungici 2, per aumentare i secondi a livello dei quali fare il taglio, passando a ffmpeg la variabile $ffmpeg_hh_mm_ss anziché $hh_mm_ss, ma non cambia...il taglio avviene sempre un po' prima del tempo reale di registrazione indicato da $hh_mm_ss. Alla fine il video riesce comunque bene...ma era solo una pignoleria wink...forse risolvibile precisando anche i centesimi di secondo in $hh_mm_ss..sarebbe ancora da provare. Cmq ok, e grazie per la correzione del codice!!

PS. cosa cambia dallo scrivere:

#!/bin/bash
if [ "$(pidof byzanz-record)" ] 
then
  # process was found

al posto di:

#!/bin/bash
if [ "$(pidof byzanz-record)" ]; then # process was found

Qual è l'indice di errore?

Ciao

Ultima modifica di mitma (10-03-2013 18:34:07)


"The limits of my language mean the limits of my world" (Ludwig Wittgenstein)

Non in linea

#9 10-03-2013 18:48:49

mitma
Redattore
Da Pisa
Registrato: 27-11-2010
Messaggi: 47
Sito web

Re: [Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

Aspetta!... mi sono accorto ora che il tuo script mi aveva creato la cartella "Video_byzanz" in "/home/Riccardo/Programmi/Nautilus-Script/Miei-scripts/Byzanz/~/Video_byzanz", da cui in realtà lanciavo lo script che risiede in "/home/Riccardo/Programmi/Nautilus-Script/Miei-scripts/Byzanz". Ho modificato così:

OUT_DIR="/home/$USER/Video_byzanz"

Ultima modifica di mitma (10-03-2013 18:52:47)


"The limits of my language mean the limits of my world" (Ludwig Wittgenstein)

Non in linea

#10 10-03-2013 19:32:37

mitma
Redattore
Da Pisa
Registrato: 27-11-2010
Messaggi: 47
Sito web

Re: [Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

Forma finale per lo script di interruzione, "OK_kill_byzanz":

#!/bin/bash

#dichiarazione cartella in cui infilare l'output
OUT_DIR="/home/$USER/Byzanz videos"

if [ "$(pidof byzanz-record)" ]; then # process was found

	#PID del processo byzanz-record
	pid_byzanz=$(ps -o pid --no-headers -C "byzanz-record")
	#tempo di esecuzione in minuti:secondi
	time1_byzanz=$(ps -p ${pid_byzanz} -o etime=)
	#tempo di esecuzione in secondi
	time2_byzanz=$(ps -p ${pid_byzanz} -o etime= |sed -E 's/(.*):(.+):(.+)/\1*3600+\2*60+\3/;s/(.+):(.+)/\1*60+\2/' |bc)
	#tempo di esecuzione in ore:minuti:secondi, necessario a ffmpeg
	h=$(( $time2_byzanz / 	3600 ))
	m=$(( ( $time2_byzanz / 60 ) % 60 ))
	s=$(( $time2_byzanz % 60 ))
	hh_mm_ss=$(printf "%02d:%02d:%02d\n" $h $m $s)
	#ora di esportazione del file, da includere nel suo nome
	mydate=$(date +"EndTime-%H.%M.%S")

	echo -e "\n\nIl processo byzanz-record, identificato dal PID $pid_byzanz, verrà ora interrotto ed elaborato da ffmpeg per dare l'output finale nel percorso ~/Byzanz videos/Byzanz_output_EndTime-h.m.s.flv; notare come il file ottenuto incorpora l'ora a cui è stato generato, espressa nel formato ora.minuto.secondo, evitando in tal modo la possibilità che possa essere sovrascritto, se avviato un successivo processo tramite lo script \"OK_chek_byzanz\".\n\nIl tempo di attività è stato $time1_byzanz, ovvero $time2_byzanz secondi, esprimibili anche come $hh_mm_ss.\n\n"
	killall byzanz-record

	#creazione directory dove mettere i file salvato da ffmpeg
	test -d "$OUT_DIR" || mkdir "$OUT_DIR"
	#processazione dell'output di byzanz-record, operata da ffmpeg
	ffmpeg -y -ss 00:00:00 -t $hh_mm_ss -i ~/byzanz_temp_recording.flv -vcodec copy -acodec copy "$OUT_DIR"/Byzanz_output_$mydate.flv
	rm -f ~/byzanz_temp_recording.flv
	echo -e "\n\nIl processo è terminato. Il file è pronto nel percorso "$OUT_DIR"/Byzanz_output_$mydate.flv.\n\n"

else # process not found
	echo -e "\nbyzanz-record non è avviato! Non c'è alcun processo da interrompere.\n"
fi
#superfluo
exit 0

"The limits of my language mean the limits of my world" (Ludwig Wittgenstein)

Non in linea

#11 10-03-2013 20:33:26

bebo_sudo
Collaboratore
Da Trento+Trieste
Registrato: 28-02-2011
Messaggi: 1'845
Sito web

Re: [Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

Strano che ti abbia creato la cartella lì.
Sostituisci al variabile così, secondo me è meglio wink

OUT_DIR="$HOME/Byzanz\ videos"

con lo slash se c'è lo spazio, altrimenti bash potrebbe interpretarla come due comandi.
E cambierei ogni ~ con $HOME, che viene espansa "meglio".

PS. cosa cambia dallo scrivere:

#!/bin/bash
if [ "$(pidof byzanz-record)" ] 
then
  # process was found

al posto di:

#!/bin/bash
if [ "$(pidof byzanz-record)" ]; then # process was found

Qual è l'indice di errore?

Non capisco cosa tu intenda per indice di errore..
Non c'è alcuna differenza di valore, solo che per me è più facile ricordarmi la sintassi dell'if con il then dopo le parentesi smile
Bash, a meno che non glielo dica tu esplicitamente usando altri operatori logici (&, &&, ||, ecc..), alla fine di ogni riga considera come ci fosse un ;, che ha significato diverso da &&. Spiego con un paio di esempi:

comando1; comando2

esegue comando1, quando questo finisce i suoi compiti esegue comando2, senza stare a vedere se comando1 ha funzionato.

comando1 & comando2

esegue comando1 in background e immediatamente dopo comando2, senza fregarsene del valore di uscita del comando precedente.

comando1 && comando2

esegue comando1 e, solo e soltanto se ha dato esito positivo, esegue comando2.

comando1 || comando2

esegue comando1 e se ha dato esito negativo esegue il seguente.

E dopo di questo leggiti anche il manuale di bash, ne scopri una nuova ogni giorno wink

$ man bash

Possiamo considerare risolto quindi??

Non in linea

#12 11-03-2013 03:37:03

mitma
Redattore
Da Pisa
Registrato: 27-11-2010
Messaggi: 47
Sito web

Re: [Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

Si risolto ............ ma ho combinato ora un casino io sul mio computer ...non so cosa ho installato, fatto sta che ad un certo punto, quando lanciavo lo script di avvio da terminale mi dava un fastidioso:

WARNING **: Couldn't register with accessibility bus: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.

(non ricordo bene, e non riesco più a riprodurlo, ma ogni tanto compariva anche con altri programmi lanciati da terminale, pur avviandosi; anche byzanz) per il quale ho cercato una soluzione trovando questa discussione, dove, al post #6, si fa riferimento a gconftool-2 che ho provato a rimuovere con:

[[email protected] ~]$ sudo yum remove gconftool-2
[sudo] password for Riccardo: 
Plugin abilitati:fastestmirror, langpacks, presto
Nessuna corrispondenza per l'argomento: gconftool-2
Nessun pacchetto marcato per la rimozione
[[email protected] ~]$

quindi ho dato:

[[email protected] ~]$ yum provides gconftool-2

...

GConf2-3.2.5-3.fc18.i686 : A process-transparent configuration system
Repo         : fedora
Corrispondenza trovata in:
Nome file   : /usr/bin/gconftool-2

GConf2-3.2.5-3.fc18.x86_64 : A process-transparent configuration system
Repo         : fedora
Corrispondenza trovata in:
Nome file   : /usr/bin/gconftool-2

decidendo, alla fine malauguratamente, di rimuovere GConf2 (dato che sto usando Fedora Xfce, e avevo in precendenza installato dei pacchetti di gnome che in Xfce sembra siano superflui e non lo sapevo) disinstallando oltre 400MB di roba ... tra cui anche byzanz e non so che altro...mi sono un po' preoccupato e ho annotato qualche pacchetto che, scorrendo nell'output, mi sembrava necessario, tra cui gnome-do, inkscape, google-chrome (che comunque non ho reinstallato - da solo voleva già 150MB - tenendomi solo firefox), gnome-panel, gdm, gconf-editor, thunar-vfs, e non so quanti altri...fatto sta che ora che ho reinstallato byzanz, ottengo un errore e non mi parte ... mi dice:

(byzanz-record:2350): GStreamer-CRITICAL **: gst_bin_get_by_name: assertion `GST_IS_BIN (bin)' failed
**
ERROR:byzanzencodergstreamer.c:132:byzanz_encoder_gstreamer_run: assertion failed: (gstreamer->audiosrc)

Ho installato tutti i pacchetti di gstreamer che sono riuscito a trovare, ma nulla... Ci sto smanettando da un po' e mi viene voglia di reinstallare tutto di nuovo ...... cavolo.

Comunque, poi corrego gli scripts e li posto nella forma finale che pensi anche tu possa andare bene. Avevo aggiunto un ulteriore controllo per l'esito del kill, con scrittura, via terminale, se il processo era andato a buon fine o meno, e dove era stato eventualmente salvato il file.
Aggiungo poi i tuoi ulteriori consigli e poi posto tutto. Grazie per le istruzioni!!... wink

Non colgo però una grossa differenza tra:

comando1; comando2
#esegue comando1, quando questo finisce i suoi compiti esegue comando2, senza stare a vedere se comando1 ha funzionato.

e

comando1 & comando2
#esegue comando1 in background e immediatamente dopo comando2, senza fregarsene del valore di uscita del comando precedente.

A parte questo problema al mio computer, adesso, gli scripts comunque funzionano!

Ciao Alberto,

Riccardo

Ultima modifica di mitma (12-03-2013 14:59:12)


"The limits of my language mean the limits of my world" (Ludwig Wittgenstein)

Non in linea

#13 11-03-2013 13:19:45

bebo_sudo
Collaboratore
Da Trento+Trieste
Registrato: 28-02-2011
Messaggi: 1'845
Sito web

Re: [Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

Posta questo:

$ yum list gstreamer*

Sicuro di non aver cancellato nient'altro di "vitale" per il pc? Tutto il DE ti funziona bene?
In caso proverei anche un:

# yum reinstall @xfce

Per farti capire, ; aspetta che comando1 sia eseguito e quando ha finito esegue comando2.
Mentre & esegue comando1 e immediatamente dopo comando2. In pratica "slega" comando1 dal resto.

Non in linea

#14 11-03-2013 14:24:12

marcomotta
Moderatore
Da Roma
Registrato: 18-01-2009
Messaggi: 2'798
Sito web

Re: [Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

mitma ha scritto:

Si risolto ............ ma ho combinato ora un casino io sul mio computer ... [cut] avevo letto l'attribuzione a un componente di GConf2, che ho pensato, alla fine malauguratamente, di rimuovere (dato che sto usando Fedora Xfce, e avevo in precendenza installato dei pacchetti di gnome che in Xfce sembra siano superflui e non lo sapevo) disinstallando oltre 400MB di roba ... tra cui anche byzanz e non so che altro...mi sono un po' preoccupato e ho annotato qualche pacchetto che, scorrendo nell'output, mi sembrava necessario, tra cui gnome-do, inkscape, google-chrome (che comunque non ho reinstallato - da solo voleva già 150MB - tenendomi solo firefox), gnome-panel, gdm, gconf-editor, thunar-vfs, e non so quanti altri...fatto sta che ora che ho reinstallato byzanz, ottengo un errore e non mi parte ...

# yum history

Cerca il numero corrispondente alla rimozione (dovrebbe essere il più alto di tutti, se non hai più installato, rimosso o aggiornato nulla, altrimenti controlla). Poi

 # yum history undo XX

(al posto di XX metti il numero che hai identificato con il comando precedente, per esempio 41).

Ultima modifica di marcomotta (11-03-2013 14:24:46)


La filosofia è una disciplina con obiettivi, ma senza regole. La matematica è una disciplina con regole, ma senza obiettivi.
Un giorno ho incontrato un uomo che non aveva né obiettivi né regole. Studiava filosofia della matematica.

Non in linea

#15 11-03-2013 18:28:33

mitma
Redattore
Da Pisa
Registrato: 27-11-2010
Messaggi: 47
Sito web

Re: [Risolto] - Bash script per l'avvio e la chiusura di byzanz-record

Ciao Alberto, ciao marcomotta,

grazie per l'aiuto... è rincuorante! smile

Allora il comando

$ yum list gstreamer*

mi dà:

Pacchetti installati
gstreamer.i686                               0.10.36-2.fc18  @fedora                      
gstreamer.x86_64                             0.10.36-2.fc18  @fedora                      
gstreamer-devel.x86_64                       0.10.36-2.fc18  @fedora                      
gstreamer-ffmpeg.x86_64                      0.10.13-5.fc18  @rpmfusion-free              
gstreamer-plugins-bad.x86_64                 0.10.23-2.fc18  @rpmfusion-free              
gstreamer-plugins-bad-free.i686              0.10.23-13.fc18 @fedora                      
gstreamer-plugins-bad-free.x86_64            0.10.23-13.fc18 @fedora                      
gstreamer-plugins-bad-free-extras.x86_64     0.10.23-13.fc18 @fedora                      
gstreamer-plugins-bad-nonfree.x86_64         0.10.23-1.fc18  @rpmfusion-nonfree           
gstreamer-plugins-base.i686                  0.10.36-3.fc18  @fedora                      
gstreamer-plugins-base.x86_64                0.10.36-3.fc18  @fedora                      
gstreamer-plugins-base-devel.x86_64          0.10.36-3.fc18  @fedora                      
gstreamer-plugins-espeak.x86_64              0.4.0-1.fc18    @fedora                      
gstreamer-plugins-ugly.i686                  0.10.19-5.fc18  @/gstreamer-plugins-ugly-0.10.19-5.fc18.i686
gstreamer-plugins-ugly.x86_64                0.10.19-5.fc18  @rpmfusion-free              
gstreamer-python.x86_64                      0.10.22-3.fc18  @fedora                      
gstreamer-tools.x86_64                       0.10.36-2.fc18  @fedora                      
gstreamer1.x86_64                            1.0.5-1.fc18    @updates                     
gstreamer1-devel.x86_64                      1.0.5-1.fc18    @updates                     
gstreamer1-libav.x86_64                      1.0.2-2.fc18    @rpmfusion-free              
gstreamer1-plugins-bad-free.x86_64           1.0.5-1.fc18    @updates                     
gstreamer1-plugins-base.x86_64               1.0.5-3.fc18    @updates                     
gstreamer1-plugins-good.x86_64               1.0.5-3.fc18    @updates                     
gstreamer1-plugins-good-extras.x86_64        1.0.5-3.fc18    @updates                     
Pacchetti disponibili
gstreamer-devel.i686                         0.10.36-2.fc18  fedora                       
gstreamer-devel-docs.noarch                  0.10.36-2.fc18  fedora                       
gstreamer-ffmpeg.i686                        0.10.13-5.fc18  rpmfusion-free               
gstreamer-java.x86_64                        1.5-4.fc18      fedora                       
gstreamer-java-javadoc.x86_64                1.5-4.fc18      fedora                       
gstreamer-java-swt.x86_64                    1.5-4.fc18      fedora                       
gstreamer-plugin-crystalhd.i686              3.10.0-2.fc18   fedora                       
gstreamer-plugin-crystalhd.x86_64            3.10.0-2.fc18   fedora                       
gstreamer-plugins-bad.i686                   0.10.23-2.fc18  rpmfusion-free               
gstreamer-plugins-bad-free-devel.i686        0.10.23-13.fc18 fedora                       
gstreamer-plugins-bad-free-devel.x86_64      0.10.23-13.fc18 fedora                       
gstreamer-plugins-bad-free-devel-docs.x86_64 0.10.23-13.fc18 fedora                       
gstreamer-plugins-bad-free-extras.i686       0.10.23-13.fc18 fedora                       
gstreamer-plugins-base-devel.i686            0.10.36-3.fc18  fedora                       
gstreamer-plugins-base-devel-docs.noarch     0.10.36-3.fc18  fedora                       
gstreamer-plugins-base-tools.x86_64          0.10.36-3.fc18  fedora                       
gstreamer-plugins-entrans.i686               0.10.4-2.fc18   fedora                       
gstreamer-plugins-entrans.x86_64             0.10.4-2.fc18   fedora                       
gstreamer-plugins-entrans-docs.noarch        0.10.4-2.fc18   fedora                       
gstreamer-plugins-espeak.i686                0.4.0-1.fc18    fedora                       
gstreamer-plugins-fc.i686                    0.2-4.fc18      fedora                       
gstreamer-plugins-fc.x86_64                  0.2-4.fc18      fedora                       
gstreamer-plugins-good.i686                  0.10.31-5.fc18  fedora                       
gstreamer-plugins-good.x86_64                0.10.31-5.fc18  fedora                       
gstreamer-plugins-good-devel-docs.noarch     0.10.31-5.fc18  fedora                       
gstreamer-plugins-good-extras.i686           0.10.31-5.fc18  fedora                       
gstreamer-plugins-good-extras.x86_64         0.10.31-5.fc18  fedora                       
gstreamer-plugins-ugly-devel-docs.noarch     0.10.19-5.fc18  rpmfusion-free               
gstreamer-python.i686                        0.10.22-3.fc18  fedora                       
gstreamer-python-devel.i686                  0.10.22-3.fc18  fedora                       
gstreamer-python-devel.x86_64                0.10.22-3.fc18  fedora                       
gstreamer-rtsp.i686                          0.10.8-3.fc18   fedora                       
gstreamer-rtsp.x86_64                        0.10.8-3.fc18   fedora                       
gstreamer-rtsp-devel.i686                    0.10.8-3.fc18   fedora                       
gstreamer-rtsp-devel.x86_64                  0.10.8-3.fc18   fedora                       
gstreamer-rtsp-python.x86_64                 0.10.8-3.fc18   fedora                       
gstreamer-rtsp-vala.x86_64                   0.10.8-3.fc18   fedora                       
gstreamer1.i686                              1.0.5-1.fc18    updates                      
gstreamer1-devel.i686                        1.0.5-1.fc18    updates                      
gstreamer1-devel-docs.noarch                 1.0.5-1.fc18    updates                      
gstreamer1-plugins-bad-free.i686             1.0.5-1.fc18    updates                      
gstreamer1-plugins-bad-free-devel.i686       1.0.5-1.fc18    updates                      
gstreamer1-plugins-bad-free-devel.x86_64     1.0.5-1.fc18    updates                      
gstreamer1-plugins-bad-free-extras.i686      1.0.5-1.fc18    updates                      
gstreamer1-plugins-bad-free-extras.x86_64    1.0.5-1.fc18    updates                      
gstreamer1-plugins-bad-freeworld.x86_64      1.0.5-1.fc18    rpmfusion-free-updates       
gstreamer1-plugins-base.i686                 1.0.5-3.fc18    updates                      
gstreamer1-plugins-base-devel.i686           1.0.5-3.fc18    updates                      
gstreamer1-plugins-base-devel.x86_64         1.0.5-3.fc18    updates                      
gstreamer1-plugins-base-devel-docs.noarch    1.0.5-3.fc18    updates                      
gstreamer1-plugins-base-tools.x86_64         1.0.5-3.fc18    updates                      
gstreamer1-plugins-good.i686                 1.0.5-3.fc18    updates                      
gstreamer1-plugins-good-extras.i686          1.0.5-3.fc18    updates                      
gstreamer1-plugins-ugly.x86_64               1.0.5-1.fc18    rpmfusion-free-updates       
gstreamer1-plugins-ugly-devel-docs.noarch    1.0.5-1.fc18    rpmfusion-free-updates       
gstreamermm.i686                             0.10.11-1.fc18  updates                      
gstreamermm.x86_64                           0.10.11-1.fc18  updates                      
gstreamermm-devel.i686                       0.10.11-1.fc18  updates                      
gstreamermm-devel.x86_64                     0.10.11-1.fc18  updates                      
gstreamermm-doc.noarch                       0.10.11-1.fc18  updates                      

mentre:

# yum history

mi dà:

[[email protected] Riccardo]# yum history
Plugin abilitati:fastestmirror, langpacks, presto
ID     | Linea di comando         | Data e ora       | Azione/i       | Modific
-------------------------------------------------------------------------------
   109 | install fedorautils      | 2013-03-11 02:38 | Install        |    5 EE
   108 | groupinstall Development | 2013-03-11 02:33 | Install        |   35   
   107 |                          | 2013-03-11 02:27 | Install        |    9   
   106 | reinstall gstream*       | 2013-03-11 02:19 | Reinstall      |   25   
   105 | install libtool          | 2013-03-11 01:50 | Install        |    1   
   104 | install gtk3 gtk3-devel  | 2013-03-11 01:47 | Install        |    2   
   103 | install recordmydesktop  | 2013-03-11 01:39 | Install        |    1   
   102 | install gstreamer1-plugi | 2013-03-11 01:17 | Install        |    1   
   101 | install gstreamer1-libav | 2013-03-11 01:15 | Install        |    1   
   100 | install gstreamer1-devel | 2013-03-11 01:14 | Install        |    1   
    99 | install gstream-devel    | 2013-03-11 01:13 | Install        |    4   
    98 | update                   | 2013-03-11 00:34 | Update         |   32   
    97 | install inkscape         | 2013-03-11 00:07 | Install        |    1   
    96 | install gnome-do         | 2013-03-11 00:05 | Install        |    8   
    95 | install byzanz           | 2013-03-11 00:03 | Install        |    3 EE
    94 | remove GConf2            | 2013-03-10 23:55 | Erase          |   73   
    93 | install byzanz           | 2013-03-10 23:42 | Install        |    1   
    92 | install ffmpeg           | 2013-03-10 23:41 | Install        |    1   
    91 | remove ffmpeg            | 2013-03-10 23:41 | Erase          |    1   
    90 | remove byzanz            | 2013-03-10 23:40 | Erase          |    1   
history list

Grazie! E' proprio:

    94 | remove GConf2            | 2013-03-10 23:55 | Erase          |   73   

e sembra che il comando successivo per reinstallare byzanz abbia avuto 3 errori, sembra di capire:

    95 | install byzanz           | 2013-03-11 00:03 | Install        |    3 EE

Avevo provato ad installare anche fedorautils per vedere se mi forniva codec o altro che magari si era disinstallato nel tutto, e sembra che anche quel processo abbia riportato 5 errori:

   109 | install fedorautils      | 2013-03-11 02:38 | Install        |    5 EE

...sempre che EE indichi "errore".

Quindi dovrei provare a fare:

# yum remove byzanz fedorautils gnome-do inkscape recordmydesktop 
# yum history undo 94

Domanda: rimuovo byzanz e gli altri pacchetti con il primo comando, perché il successivo (sempre se giusto) li dovrebbe reintegrare (eccetto recordmydesktop, che ho voluto installare come prova, per vedere se funzionava, visto che byzanz non partiva...non mi ero accorto però dei 3 errori al momento della sua installazione...c'è da capire perché, come anche per fedorautils, che comunque lo stavo installando solo per vedere di risolvere il problema)?

PS -  nell'output di:

$ yum list gstreamer*

è normale che compaiano dei pacchetti terminanti con ".i686", se il sistema è a 64bit?...Non sono un tecnico smile

Notate una cosa importante, comunque:

nell'output del comando:

# yum history

gli ID 90 e 93 vanno a buon fine! Solo dopo la rimozione di GConf2 (ID 94, che scorrendo nell'output ricordo che mi stava disinstallando anche byzanz), la successiva reinstallazione di byzanz (ID 95) mi dà errore. Quindi è un problema di dipendenze non risolte sembra...fornite dal pacchetto GConf2; i comandi:

# yum remove byzanz fedorautils gnome-do inkscape recordmydesktop 
# yum history undo 94

se riescono, forse dovrebbero risolvere, anche se non il messaggio di Warning che ha generato il tutto, perché significherebbe ritornare al punto iniziale...

Ultima modifica di mitma (11-03-2013 18:59:35)


"The limits of my language mean the limits of my world" (Ludwig Wittgenstein)

Non in linea

Piè di pagina