Newsgroup: it.comp.software.divx
Titolo: Keyframe e altre meraviglie

Ho un file avi (xvid, audio ac3).
Si tratta di diversi episodi concatenati.
Mi piacerebbe separare gli episodi.
Nessun problema a farlo con virtualdubmod, tranne che per il fatto
che il keyframe non cade tra i due episodi, ma poco dopo la sigla
iniziale di ciascun episodio.
Quando tento di salvare le porzioni selezionate non ottengo
esattamente quello che volevo: lo spezzone successivo comincia
dal keyframe immediatamente precedente la selezione.
In pratica un episodio inizia con la fine della sigla
di quello precedente. Niente di grave, ma un lavoro pulito
sarebbe preferibile.
E' possibile rimediare?

 E' possibile rimediare?
Forse decomprimendo tutto quanto alla massima qualità (usando qualche
codec tipo MJPEG), tagliare nei punti giusti e ricomprimere.
-- 
Saluti, Kap - 
www.lordkap.it
 - ¥'s Fan #01 - 
www.pianetalibri.com
 - VCC
Beh, c'è rimedio a tutto tranne alla morte, che certamente un giorno o
l'altro ci stenderà. - Miguel de Cervantes y Saavedra

 codec tipo MJPEG), tagliare nei punti giusti e ricomprimere.
in realta' non c'e' bisogno di fare come hai detto:
il vincolo del taglio sul keyframe si ha solo se non si vuole
ricodificare (direct stream copy del video);
se si e' disposti a ricodificare, non c'e' nessuna ragione per avere
tale vincolo, quindi si puo' tagliare in qualsiasi frame.
avete controllato se VDub (e sue varianti) lo permette?

 keyframe.
da quanto dici, sembra che sia in grado di ricodificare solo dal
punto di taglio fino al primo keyframe successivo...
a prima vista non mi sembra un'operazione facilissima, faro' delle
prove...
comunque, volevo dire che la versione che ho io (2.0.22) e' buggy;
ti faccio un esempio.
apro un AVI/DivX (codec 5 commerciale).
lui usa libavcodec per estrarre i frame dallo stream:
------------------
 Decoder init: FFMpeg MPEG4 video vop packed  decoder initialized!
------------------
fin qui tutto ok.
a questo punto clicco ripetutamente sulla freccina singola a sinistra
("next frame") e sembra tutto ok: i frame scorrono sulla finestra e
il contatore nel riquadro "Frame" avanza di una unita' per volta.
quando arrivo al frame 46, clicco ancora una volta e il contatore
passa a 47, e il frame viene aggiornato, e noto che c'e' un cambio
di scena. (fin qui tutto ok).
il frame in questione e' un keyframe (controllo con altri mezzi), e
questo lo trovo plausibile perche' si tratta di un brusco cambio di
scena.
a questo punto clicco sulla freccina singola a destra ("previous
frame") per vedere se gestisce bene gli spostamenti in tutte le
direzioni... sorpresa! adesso il contatore segna correttamente 46,
ma il frame mostrato non e' quello che veniva mostrato prima!
in altre parole:
- se giungo al frame 46 da una strada, mi viene mostrato un certo
  frame;
- se giungo al frame 46 da un'altra strada, me ne viene mostrato
  un altro.
eppure il frame 46 e' uno e solo uno.
ho aperto lo stesso DivX con il mio programma, e ho applicato lo
stesso procedimento: nel mio caso, andando acanti e indietro, il
programma mostra sempre gli stessi frame alle stesse posizioni!
anche il mio programma usa libavcodec, ma mi ricordo che dovetti
faticare non poco per implementare l' "accesso casuale" alla
decodifica dei frame (purtroppo libavcodec non ti permette di
accedere a un frame arbitrario, devi essere tu (utente della
libreria) ad "alimentare" un buffer con i dati dello stream e a
tenere conto del numero progressivo dei frame... questo e' molto
facile se il filmato viene decompresso dall'inizio alla fine
senza interruzioni, ma diventa moooolto complicato quando si
vuole decodificare il frame n-esimo senza voler prima
decodificare tutti i precedenti 0, 1, 2, 3, ..., n-1).
e' per questo motivo che a suo tempo feci subito questo test,
e constatai che avidemux2 (almeno, la versione 2.0.22) non era
corretto nell'accesso ai frame...
comunque, appena posso provero' la versione piu' recente e ti
faro' sapere se questo bug e' stato in seguito risolto.

 a questo punto clicco sulla freccina singola a destra ("previous
[...]
ehm, ho sbagliato a scrivere, invertendo "destra" e "sinistra":
la freccia a sinistra corrisponde a "previous", mentre la destra
a "next"

 keyframe.
Era più o meno l'idea che era venuta a me.
Salvo il segmento tra i due keyframe.
Ricodifico solo quella parte (e chi se ne frega se perdo un po'
in qualità, tanto è la sigla) e poi "riappiccico" gli spezzoni
al posto giusto.
Il problema è nel riprodurre lo stesso identico formato, immagino.

> Io faccio queste operazioni con avidemux2 su Linux,
Frank> che versione usi?  io ne trovai un rpm di oltre due anni fa
Frank> (2.0.22), e vedo adesso che la piu' recente e' la 2.1.2
Frank> (rilasciata il 5 marzo scorso).
[...]
Io uso la 2.0.40, ho provato a compilare la 2.1.x disponibile,
ma richiede se ricordo bene gtk-2.6, che la mia distribuzione Linux
(CentOs 4.2) per quanto so non supporta, e mi sono dovuto fermare.
Uso avidemux2 sostanzialmente per rimuovere la pubblicita' dai
programmi TV che registro, e devo dire che non ho riscontrato problemi
nei risultati prodotti.  Certo ha il bug fastidioso che non riordina
correttamente la sequenza dei frame mpeg4 quando riproduce, come
avevamo discusso in passato.
Ciao,
-- 
Alberto

 avete controllato se VDub (e sue varianti) lo permette?
Non ci ho badato, ma se ricordo bene ci si può spostare di frame in
frame.
-- 
Saluti, Kap - 
www.lordkap.it
 - ¥'s Fan #01 - 
www.pianetalibri.com
 - VCC
I puri di cuore sono benedetti perché hanno tante più cose di cui
parlare. - Edith Wharton

 frame.
Con VirtualDubMod ti puoi spostare di frame in frame,
ma se lavori in direct stream copy, nel momento in
cui salvi, il taglio si sposta sul keyframe precedente
per il taglio d'inizio e sul successivo per il taglio
finale.

 taglio finale.
Giusto.
-- 
Saluti, Kap - 
www.lordkap.it
 - ¥'s Fan #01 - 
www.pianetalibri.com
 - VCC
La civiltà è cospirazione... La vita moderna è il patto segreto della
gente benestante per mantenere le apparenze. - John Buchan