Pattern multiriga

http://unix.stackexchange.com/questions/112132/how-can-i-grep-patterns-across-multiple-lines

sed -n '/capo/{:start /coda/!{N;b start};/una regex/p}' mio_file
  • -n è l’ equivalente di –quiet, –silent : sopprime la scrittura automatica del “pattern space”
  • /capo/{} cerca capo ed esegue le parentesi graffe. Sostituire capo con l’ inizio del pattern cercato.
  • :start è un’ etichetta che serve per continuare il loop finchè non si trova la fine della regex.
  • /coda/!{} esegue le parentesi graffe finchè non trova la riga che contiene coda. Sostituire coda con la fine del pattern cercato.
  • N appende la riga al buffer attivo (il pattern space di sed).
  • b start salta incondizionatamente all’ etichetta start, cioè permette di eseguire la precedente istruzione per tutte le righe che non contengono coda.
  • /una regex/p stampa il pattern cercato su più righe.

AVCONV: join mp4 video

la guida contiene alcuni errori:
https://trac.ffmpeg.org/wiki/How%20to%20concatenate%20%28join,%20merge%29%20media%20files

il modo per concatenare più video mp4 (tutti con la stessa codifica) è quello di cambiare il loro “contenitore” in MPEGts (MPEG transport stream) SENZA TRANSCODIFICARE IL FLUSSO !

ottenuti i video MPEGts si possono concatenare con il protocollo “concat” di avconv: qui nasce un problema sul flusso AUDIO se si specifica il bitstream filter aac_adtstoasc che secondo la documentazione sarebbe necessario. invece, se lo si omette, l’ errore non si presenta, ma dopo la concatenazione si ottiene un file con un contenitore diverso da quelli di origine.

vediamo i passaggi:

# conversione del video:
avconv -i R1.mp4 -an -vcodec copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
avconv -i R2.mp4 -an -vcodec copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts

avconv -i "concat:intermediate1.ts|intermediate2.ts" -an -vcodec copy video.mp4

#conversione dell' audio:
avconv -i R1.mp4 -vn -acodec copy -f mpegts audio1.ts
avconv -i R2.mp4 -vn -acodec copy -f mpegts audio2.ts

avconv -i "concat:audio1.ts|audio2.ts" -vn -acodec copy audio.m4a

# riunire i flussi audio e video (mux audio/video):
avconv -i video.mp4 -i audio.m4a -c copy -map 0:v -map 1:a output.mp4

per trattare contemporaneamente audio e video:

avconv -i R1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
avconv -i R2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
avconv -i "concat:intermediate1.ts|intermediate2.ts" -c copy video.mp4

come si vede dai parametri di avconv, il flusso non viene ricodificato, ma COPIATO.

C’è però il cambio di container, come detto sopra.
Lo si può vedere con avprobe:

$ avprobe R1.mp4 
avprobe version 11-6:11-2, Copyright (c) 2007-2014 the Libav developers
  built on Oct 19 2014 21:50:10 with gcc 4.9.1 (Debian 4.9.1-15)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'R1.mp4':
  Metadata:
    major_brand     : MSNV
    minor_version   : 512
    compatible_brands: MSNV
    creation_time   : 2014-07-02 11:05:12
  Duration: 00:12:30.00, start: 0.000000, bitrate: 2715 kb/s
    Stream #0.0(eng): Video: h264 (Main), yuv420p, 848x480 [PAR 1:1 DAR 53:30], 2585 kb/s, 25 fps, 25k tbn, 50 tbc (default)
    Metadata:
      creation_time   : 2014-07-02 11:05:12
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, fltp, 125 kb/s (default)
    Metadata:
      creation_time   : 2014-07-02 11:05:12
# avprobe output
$ avprobe output.mp4 
avprobe version 11-6:11-2, Copyright (c) 2007-2014 the Libav developers
  built on Oct 19 2014 21:50:10 with gcc 4.9.1 (Debian 4.9.1-15)
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.1.0
  Duration: 00:24:35.96, start: 0.000000, bitrate: 2678 kb/s
    Stream #0.0(und): Video: h264 (Main), yuv420p, 848x480 [PAR 1:1 DAR 53:30], 2546 kb/s, 25 fps, 90k tbn, 50 tbc (default)
    Stream #0.1(eng): Audio: aac, 48000 Hz, stereo, fltp, 128 kb/s (default)
# avprobe output

La stessa cosa si può fare senza passare per i file intermedi: bisogna soltanto creare tante FIFO (named pipe) quanti sono i file mp4 da unire.
Il “trucco” consiste nel mettere le FIFO in attesa dei dati da parte del comando avconv che genera i MPEGts.
Poi si lancia il comando avconv che esegue la concatenazione:

mkfifo temp1 temp2
avconv -i R1.mp4 -c copy -f mpegts -bsf h264_mp4toannexb -y temp1 &
avconv -i R2.mp4 -c copy -f mpegts -bsf h264_mp4toannexb -y temp2 &
avconv -f mpegts -i "concat:temp1|temp2" -c copy output.mp4
rm temp1 temp2

Estrazione immagini da Flash SWF

http://stackoverflow.com/questions/11679113/command-line-extract-from-swf

La Adobe indica che
http://www.adobe.com/content/dam/Adobe/en/devnet/swf/pdf/swf_file_format_spec_v10.pdf

The header begins with a three-byte signature of either 0x46, 0x57, 0x53 (“FWS”); or 0x43, 0x57, 0x53 (“CWS”).

An FWS signature indicates an uncompressed SWF file;
CWS indicates that the entire file after the first 8 bytes (that is, after the FileLength field) was compressed by using the ZLIB open standard. The data format that the ZLIB library uses is described by Request for Comments (RFCs) documents 1950 to 1952. CWS file compression is permitted in SWF 6 or later only.

Infatti, preso un SWF qualsiasi contenente un’ immagine, ottengo:

$ hexdump -C RIMUOVERE\ BYTES.swf | head -n 1
00000000  43 57 53 06 04 d9 03 00  78 da b4 ba 79 38 d4 5f  |CWS.....x...y8._|

Perciò bisogna

  1. rimuovere i primi 8 byte
  2. decomprimere con ZLIB ciò che viene dopo

Ecco uno script bash che fa questo lavoro:

#!/bin/bash
for swf in "$@"
do
    signature=$(dd if="$swf" bs=1 count=3 2> /dev/null)
    case "$signature" in
        FWS)
            echo -e "uncompressed\t$swf"
            ;;
        CWS)
            targetname="$(dirname "$swf")/uncompressed_$(basename "$swf")"
            echo "uncompressing to $targetname"

            dd if="$swf" bs=1 skip=8 2>/dev/null |
                (echo -n 'FWS'; 
                 dd if="$swf" bs=1 skip=3 count=5 2>/dev/null;
                 zlib-flate -uncompress) > "$targetname"
            ;;
        *)
            {
                echo -e "unrecognized\t$swf"
                file "$swf"
            } > /dev/stderr
            ;;
    esac

done

AVCONV e pipe

per convertire un file audio/video con avconv basta scrivere una riga come questa:
avconv -i input.mpg output.mp4

però se si vuole usare un encoder “personalizzato” è possibile inviare l’ output non compresso tramite una pipe. ad esempio:
avconv -i input.m4a -f s32be -af atrim=10:45 pipe: | lame -r --big-endian --bitwidth 32 -ms -q0 --vbr-new -V3 - test.mp3
in cui si può notare che il flusso decompresso nel formato raw PCM signed a 32 bit big-endian viene trimmato tra i 10 e i 45 secondi e poi inviato alla pipe.

lame poi deve essere istruito riguardo al flusso che riceve dallo STDIN (indicato dal carattere “-” come input): si indica “-r –big-endian –bitwidth 32 -ms” per segnalare il formato del flusso raw (32 bit big endian e modalità stereo; signed è di default).

dopodichè viene compresso alla massima qualità e VBR 3.

in modo simile si può operare per i video: decomprimere, trattare il flusso (ad esempio trim o concat) ed inviarlo alla pipe.
riceverlo in stdin indicando tutti i parametri del flusso.

Multischermo su S3

Dopo l’ aggiornamento ad Android 4.3, il multi schermo non parte (normalmente si avvia tenendo premuto il tasto “indietro” per circa 1 secondo).

Per far funzionare nuovamente questa funzione, fare queste semplici operazioni:

1) disattivare il multischermo
2) andare in impostazioni, poi Dispositivo, e poi Schermata Home
3) toccare modalità semplificata e poi rimettere subito modalità standard
4) premere Applica

Ora, uscendo dai menù, e riattivando il multischermo, basta premere per circa un  secondo il tasto “indietro” per veder comparire la barra laterale con le applicazioni.

Non serve neanche riavviare.

Mega: 50GB storage gratuito – Altri cloud storage

Mega offre lo SDK.
Sarath ha creato un client per linea di comando Linux: megacmd

Altri servizi di cloud storage: (Dati aggiornati Mar 2014)

  • Qihoo 360: 36 TB (Terabite!) – espandibili a 50 TB
  • Tencent Cloud: 10 TB (Terabite!)
  • Yunio: 100 GB
  • Cloud Mail.ru: 100 GB
  • Mega: 50 GB
  • ADrive Personal Basic: 50 GB
  • Firedrive: 50 GB
  • Hubic: 25 GB
  • BitCasa Free: 20 GB
  • Copy: 15 GB – espandibili a 20 GB
  • Google Drive: 15 GB
  • 4synch: 15 GB
  • Mediafire: 10 GB – espandibili a 50 GB
  • Box Personal Free: 10 GB
  • OneDrive: 7 GB – espandibili a 15 GB
  • Apple ICloud: 5 GB
  • Amazon Cloud Drive: 5 GB
  • IDrive: 5 GB – espandibili senza limiti
  • Ubuntu One Free: 5 GB
  • Mozy Home Free: 2 GB – espandibili senza limiti
  • Dropbox: 2 GB – espandibili a 18 GB
  • TeamDrive: 2 GB – espandibili a 10 GB