Il formato OGV viene riprodotto correttamente sul mio computer ma la transcodifica elimina i frame (duplicati?)


11

Ho realizzato una serie di screencast usando recordmydesktop su Ubuntu 12.10. L'output è un file ogv. Quando guardo il file ogv usando il lettore di film predefinito (totem), tutto sembra a posto: audio e video sono sincronizzati. Quando viene transcodificato (da me o da YouTube) l'audio e il video non sono sincronizzati. Mi sembra di saltare una diapositiva o due mentre narravo.

Aggiornare

Ho il sospetto che il problema sia più propriamente caratterizzato dal rilascio di frame duplicati durante la transcodifica. La conversione di video in cui si sposta il mouse sembra normalmente funzionare correttamente. Ma quando sto solo parlando durante una diapositiva, quei frame duplicati vengono eliminati.

Ho visto questo, ma non è proprio la mia situazione (provando a passare da ogv -> nulla) /superuser/436187/ffmpeg-convert-video-w-dropped-frames-out-of-sync

I file AVI sembrano tradurre correttamente! Presumo che questo sarà un grande suggerimento per qualcuno. Vorrei ancora rintracciare il problema di fondo. Sto testando la conversione dei miei video precedenti in AVI, ma ci vuole un po 'di tempo poiché devo controllare ogni transizione.

Esempi

Questo è il file OGV originale da gtk-recordmydesktop: http://dl.dropbox.com/u/64693533/sync_test/sync_test1.ogv

Il video inizia con una diapositiva per 10 secondi, quindi passa ad altre 3 diapositive di 5 secondi ciascuna. Ogni volta che faccio avanzare le diapositive, tocco anche il microfono (10s, 15s, 20s, 25s).

Ecco alcune conversioni che sono state eseguite (ognuna mostra i propri problemi di temporizzazione video):

http://dl.dropbox.com/u/64693533/sync_test/sync_test1.mp4

  • questo mostra la prima diapositiva nel primo fotogramma ma avanza rapidamente oltre
  • questo è stato fatto usando stock ffmpeg

http://dl.dropbox.com/u/64693533/sync_test/sync_test1.ffmpeg-static.mp4

  • questo è piuttosto vicino - per qualche motivo a 13 anni decide di avanzare però
  • questo è stato fatto usando la build statica di ffmpeg di qualche giorno fa

Eccolo su YouTube - puoi vedere che a circa 13 secondi avanza presto (dalla diapositiva 1 -> diapositiva 2):

Ecco la prova che il file OGV funziona correttamente:

traduzione ffmpeg

Usando ffmpeg o avconv mi sembra di ottenere risultati simili a quelli di YouTube (le transizioni sembrano avvenire presto ma non necessariamente allo stesso tempo).

Ecco il comando che uso (con una recente build statica di ffmpeg) e output:

$ ~ / ffmpeg / ffmpeg -i JSP.ogv JSP.mp4
versione ffmpeg N-50025-gb8bb661 Copyright (c) 2000-2013 gli sviluppatori FFmpeg
  costruito il 17 febbraio 2013 05:23:03 con gcc 4.6 (Debian 4.6.3-1)
  configurazione: --prefix = / root / ffmpeg-static / 64bit --extra-cflags = '- I / root / ffmpeg-static / 64bit / include -static' --extra-ldflags = '- L / root / ffmpeg- static / 64bit / lib -static '--extra-libs =' - lxml2 -lexpat -lfreetype '--enable-static --disable-shared --disable-ffserver --disable-doc --enable-bzlib --enable -zlib --enable-postproc --enable-runtime-cpudetect --enable-libx264 --enable-gpl --enable-libtheora --enable-libvorbis --enable-libmp3lame --enable-grey --enable-libass - -enable-libfreetype --enable-libopenjpeg --enable-libspeex --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-version3 --enable-libvpx
  libavutil 52. 17.101 / 52. 17.101
  libavcodec 54. 91.103 / 54. 91.103
  libavformat 54. 63.100 / 54. 63.100
  libavdevice 54. 3.103 / 54. 3.103
  libavfilter 3. 38.100 / 3. 38.100
  libswscale 2. 2.100 / 2. 2.100
  libswresample 0. 17.102 / 0. 17.102
  libpostproc 52. 2.100 / 52. 2.100
[ogg @ 0x34d4640] Il fisbone multiplo per lo stesso flusso non è implementato. Aggiorna la tua versione di FFmpeg alla versione più recente di Git. Se il problema persiste, significa che il tuo file ha una funzione che non è stata implementata.
[ogg @ 0x34d4640] L'analisi dell'intestazione non è riuscita per il flusso 0
[ogg @ 0x34d4640] File rotto, fotogramma chiave non contrassegnato correttamente.
Immettere # 0, ogg, da 'JSP.ogv':
  Durata: 00: 12: 49.67, inizio: 0.000000, bitrate: 224 kb / s
    Stream # 0: 0: Dati: nessuno
    Stream # 0: 1: Video: theora, yuv420p, 1600x880 [SAR 1: 1 DAR 20:11], 15 fps, 15 tbr, 15 tbn, 15 tbc
    Metadati:
      RECORDMYDESKTOP: 0.3.8.1
    Stream # 0: 2: Audio: vorbis, 22050 Hz, mono, fltp, 89 kb / s
[libx264 @ 0x369c5e0] utilizzando SAR = 1/1
[libx264 @ 0x369c5e0] utilizzando le funzionalità della cpu: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x369c5e0] profilo Alto, livello 4.0
[libx264 @ 0x369c5e0] 264 - core 129 r2230 1cffe9f - codec AVC H.264 / MPEG-4 - Copyleft 2003-2012 - http://www.videolan.org/x264.html - opzioni: cabac = 1 ref = 3 deblock = 1: 0: 0 analizza = 0x3: 0x113 me = hex subme = 7 psy = 1 psy_rd = 1.00: 0.00 mixed_ref = 1 me_range = 16 chroma_me = 1 trellis = 1 8x8dct = 1 cqm = 0 deadzone = 21,11 fast_pskip = 1 chroma_qp_offset = -2 thread = 6 lookahead_threads = 1 sliced_threads = 0 nr = 0 decimate = 1 interlaced = 0 bluray_compat = 0 vincined_intra = 0 bframes = 3 b_pyramid = 2 b_adapt = 1 b_bias = 0 diretto = 1 pesob = 1 open_gop = 0 weightp = 2 keyint = 250 keyint_min = 15 scenecut = 40 intra_refresh = 0 rc_lookahead = 40 rc = crf mbtree = 1 crf = 23.0 qcomp = 0.60 qpmin = 0 qpmax = 69 qpstep = 4 ip_ratio = 1.40 aq = 1: 1.00
Uscita # 0, mp4, su "JSP.mp4":
  Metadati:
    encoder: Lavf54.63.100
    Stream # 0: 0: Video: h264 ([33] [0] [0] [0] / 0x0021), yuv420p, 1600x880 [SAR 1: 1 DAR 20:11], q = -1--1, 15360 tbn , 15 tbc
    Metadati:
      RECORDMYDESKTOP: 0.3.8.1
    Stream # 0: 1: Audio: aac ([64] [0] [0] [0] / 0x0040), 22050 Hz, mono, s16, 128 kb / s
Mappatura stream:
  Stream # 0: 1 -> # 0: 0 (theora -> libx264)
  Stream # 0: 2 -> # 0: 1 (vorbis -> libvo_aacenc)
Premere [q] per interrompere, [?] Per aiuto
[ogg @ 0x34d4640] File rotto, senza fotogramma chiave non contrassegnato correttamente.
    L'ultimo messaggio è stato ripetuto 2 volte
File rotto, senza fotogramma chiave non contrassegnato correttamente. = 00: 00: 08.37 bitrate = 28.7kbit / s dup = 66 drop = 0    
File rotto, fotogramma chiave non contrassegnato correttamente. Tempo = 00: 00: 51,01 bitrate = 125.3kbit / s dup = 675 drop = 0    
File rotto, fotogramma chiave non contrassegnato correttamente. Tempo = 00: 00: 55,05 bitrate = 140,2 kbit / s dup = 782 drop = 0    
File rotto, fotogramma chiave non contrassegnato correttamente.time = 00: 00: 59.60 bitrate = 140.5kbit / s dup = 836 drop = 0    
[ogg @ 0x34d4640] File rotto, fotogramma chiave non contrassegnato correttamente.
File rotto, fotogramma chiave non contrassegnato correttamente.time = 00: 01: 08.00 bitrate = 143.0kbits / s dup = 900 drop = 0    
File rotto, fotogramma chiave non contrassegnato correttamente. Tempo = 00: 01: 11,86 bitrate = 141,6kbit / s dup = 910 drop = 0    

... ripetuto molte volte ...

File rotto, fotogramma chiave non contrassegnato correttamente. Tempo = 00: 12: 47.62 bitrate = 153.0kbit / s dup = 9087 drop = 0    
frame = 11521 fps = 87 q = -1,0 Lsize = 14849kB tempo = 00: 12: 49.48 bitrate = 158.1kbit / s dup = 9087 drop = 0    
video: 2401kB audio: 12024kB sottotitoli: 0 intestazioni globali: 0kB overhead di muxing 2.938094%
[libx264 @ 0x369c5e0] frame I: 49 QP medio: 16.05 dimensione: 29658
[libx264 @ 0x369c5e0] frame P: 2912 QP medio: 9,88 dimensioni: 114
[libx264 @ 0x369c5e0] frame B: 8560 QP medio: 12,76 dimensioni: 78
[libx264 @ 0x369c5e0] fotogrammi B consecutivi: 0,9% 0,1% 0,2% 98,9%
[libx264 @ 0x369c5e0] mb I I16..4: 90,8% 0,4% 8,8%
[libx264 @ 0x369c5e0] mb P I16..4: 0,0% 0,0% 0,0% P16..4: 0,0% 0,0% 0,0% 0,0% 0,0% salta: 99,9%
[libx264 @ 0x369c5e0] mb B I16..4: 0,0% 0,0% 0,0% B16..8: 0,3% 0,0% 0,0% diretto: 0,0% salta: 99,7% L0: 65,3% L1: 34,6% BI: 0,1%
[libx264 @ 0x369c5e0] 8x8 trasformazione intra: 0,5% inter: 15,8%
[libx264 @ 0x369c5e0] codificato y, uvDC, uvAC intra: 6.4% 0.1% 0.1% inter: 0.0% 0.0% 0.0%
[libx264 @ 0x369c5e0] i16 v, h, dc, p: 94% 4% 2% 0%
[libx264 @ 0x369c5e0] i8 v, h, dc, ddl, ddr, vr, hd, vl, hu: 19% 22% 44% 1% 2% 2% 3% 1% 6%
[libx264 @ 0x369c5e0] i4 v, h, dc, ddl, ddr, vr, hd, vl, hu: 35% 17% 19% 4% 5% 5% 5% 5% 5%
[libx264 @ 0x369c5e0] i8c dc, h, v, p: 100% 0% 0% 0%
[libx264 @ 0x369c5e0] P-Frame ponderati: Y: 0,0% UV: 0,0%
[libx264 @ 0x369c5e0] ref P L0: 82,5% 1,4% 11,9% 4,3%
[libx264 @ 0x369c5e0] ref B L0: 47,2% 52,4% 0,4%
[libx264 @ 0x369c5e0] ref B L1: 99,2% 0,8%
[libx264 @ 0x369c5e0] kb / s: 25.60

Il video avanza ancora presto ma in momenti diversi. Sembra che gtk-recordmydesktop stia generando un "file rotto". La cosa fastidiosa è che l'OGV funziona, quindi sembra che dovrei essere in grado di farlo funzionare con alcune opzioni.

Ho scoperto che posso rendere il video in kdenlive e sembra funzionare lì. Mi piacerebbe ancora sapere cosa sta succedendo. kdenlive fa un lavoro molto migliore, ma a volte avanza ancora presto.


2
Mostra il comando ffmpeg e l'output della console completo risultante.
Llogan,

Buona idea @LordNeckbeard Ho aggiunto il comando e l'output. Ho notato un errore / avviso: max_analyze_duration raggiunto.
Amir T

Il problema si verifica ancora se si utilizza una build statica recente di ffmpeg ? Ciò escluderà eventuali bug che potresti riscontrare e che sono già stati corretti con una versione più recente di ffmpeg. Non è necessario installare o altro. Basta scaricare, estrarre l'archivio e quindi eseguire il file ffmpegbinario incluso .
llogan

Potete fornire un file di input di esempio con il quale è possibile riprodurre il problema?
Llogan,

Buona idea, ne tirerò fuori uno piccolo e lo pubblicherò più tardi stasera.
Amir T

Risposte:


4

Perché convertire in OGV quando il tuo upload finale sarà su YouTube, potrei sbagliarmi, ma puoi convertire in codec video x264 con AAC Audio anche su Linux e caricarlo su YouTube considerando che è quello che preferiscono essere comunque caricati. Hai provato a creare un h264 e caricarlo su YouTube invece del file OGV e vedere se quello era il problema. Perché scommetto che se ciò lo risolve, allora sai che era un problema con l'OGV che veniva caricato su YouTube, e se non lo risolve, potrebbe essere un problema di frame rate con l'interpretazione di YouTube o qualcosa di simile.

Ci sono stati molti problemi con i file OGV caricati su YouTube in passato. Non riesco a immaginare che sia fissato al 100% anche a questo punto.

http://support.google.com/youtube/bin/answer.py?hl=en&answer=1722171

EDIT: ho anche notato che il tuo filmato originale è a 15 fps ... questo potrebbe benissimo essere la fonte del problema

EDIT 2: Mi è sembrato di aver letto un po 'male la domanda un po' ... essendo che stai iniziando con un file video che è OGV, e ho visto che stai andando in MP4 ... questo cambia un po 'le cose .. .Ma ho intenzione di indovinare che ha qualcosa a che fare con l'audio a 15 fps e 22050 Hz ... So che la frequenza di campionamento non ha nulla a che fare con la sincronizzazione dell'audio, ma per esperienza nell'uso di frame rate e campionatori audio non standard, Ho avuto la tendenza a vedere alla deriva ... ottenere questi da sincronizzare potrebbe essere piuttosto difficile pur non potendo modificarli dopo la registrazione iniziale con un editor video economico ...

Mentre il software è migliorato alla deriva dell'audio, è ancora un problema comune quando si utilizzano framerate e campionamenti non comuni poiché i punti di sincronizzazione dei fotogrammi chiave non sono standard e potrebbero arrotondare i fotogrammi chiave ecc ...

Viene visualizzato il messaggio "File interrotto, fotogramma chiave non contrassegnato correttamente". questo è ciò a cui si riferisce ...

il mio consiglio per te sarebbe quello di avvicinarlo il più vicino possibile, prenderlo in un editor video e scivolare e tagliare l'audio per farlo corrispondere nel modo desiderato. Purtroppo a volte è così che viene risolto ...

I transcodificatori basati su software non funzionano sempre come dovrebbero ... il motivo per cui una configurazione di protools e / o una configurazione avida verrebbero con hardware per garantire ulteriormente capacità di sincronizzazione e frame rate costanti ecc ...

Un'altra cosa che potresti provare è convertire il filmato in un framerate standard e provare a riordinare l'audio ... dato che sono abbastanza sicuro che si tratti di un video che va alla deriva ... probabilmente rallentando leggermente e poi accelerando verso la fine o viceversa.

EDIT: Sono stato in grado di sincronizzare il video con l'originale usando questo comando ffmpeg ... potrebbe aver bisogno della clausola rate che è quello che sospettavo

ffmpeg -i sync_test1.ogv -strict experimental -pix_fmt yuv420p -r 15 -vcodec h264 -acodec aac sync_test1.mp4


Il file originale è Theora video e audio Vorbis nel contenitore ogv. Amir T non ricodifica in questo formato, per quanto ne so, ma quando tenta di ricodificare l'originale con ffmpeg o YouTube si manifesta il problema di sincronizzazione.
Llogan,

Il formato di input è ogv che è ciò che gtk-recordmydesktop genera. Sto cercando di arrivare a qualcosa di diverso da ogv (flv, ecc.).
Amir T

Leggi la mia risposta aggiornata ... Penso che sia un problema di FPS
Chris James Champeau,

1
L'aggiunta -r 15equivale a ometterla perché ffmpeg erediterà la frequenza dei fotogrammi di input per impostazione predefinita e i file di output risultanti, con o senza, -r 15sono esattamente gli stessi con ffmpeg da git head (versione N-50285-gad89952). Se funziona con una versione precedente di ffmpeg, questa potrebbe essere una regressione e dovrebbe essere segnalata al tracker dei bug di FFmpeg .
Llogan,

1
Sono con @LordNeckbeard dovresti segnalarlo come un bug a FFMPEG
Chris James Champeau,

3

Ho lottato con un problema simile su Ubuntu 12.04.3 LTS. Ho risolto il problema utilizzando la build statica di ffmpeg che è disponibile da http://johnvansickle.com/ffmpeg/


1
Ho anche provato una build statica e ha funzionato un po 'meglio. Forse il bug è stato corretto, nel qual caso potrebbe essere utile aggiungere il numero di versione dalla build statica alla tua risposta?
Amir T

0

Prova a cambiare il contenitore in avi anziché transcodificare, che sembra funzionare meglio per YouTube:

ffmpeg -i JSP.ogv -vcodec copy -acodec copy JSP.avi

Ho provato questo e il caricamento non ha mai terminato l'elaborazione, come se avessi caricato OGV. Dato che questa risposta precede l'accettazione di OGV da parte di YouTube, deve essere proprio questo cambiamento. Fastidioso che ffmpeg abbia ancora questo problema di conversione quattro anni dopo.
marzo

Il mio ffpmeg è: 3.2.14-1 ~ deb9u1 (apt-get installato)
mcr

Ho provato tutte le varianti sopra, con build statiche (git-20191029), e mentre migliora un po ', l'audio e il video non sono sincronizzati. Se provi uno ha bisogno di un grande valore --max_muxing_queue_size. Ho usato 40960.
mcr
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.