El formato OGV se reproduce correctamente en mi computadora, pero la transcodificación elimina fotogramas (¿duplicados?)

11

Hice un conjunto de screencasts usando recordmydesktop en ubuntu 12.10. El resultado es un archivo ogv. Cuando veo el archivo ogv usando el reproductor de películas predeterminado (tótem), se ve bien: el audio y el video están sincronizados. Cuando se transcodifica (por mí o por YouTube), el audio y el video no están sincronizados. Parece que me salto una diapositiva o dos mientras narro.

Actualizar

Sospecho que el problema se caracteriza más adecuadamente por la caída de fotogramas duplicados durante la transcodificación. La conversión de video donde se mueve el mouse parece funcionar normalmente bien. Pero cuando solo estoy hablando durante una diapositiva, esos cuadros duplicados se descartan.

Vi esto pero no es mi situación (tratando de pasar de ogv -> cualquier cosa) /superuser/436187/ffmpeg-convert-video-w-dropped-frames-out-of-sync

¡Los archivos AVI parecen traducirse correctamente! Supongo que esto será una gran pista para alguien. Todavía me gustaría rastrear el problema subyacente. Estoy probando la conversión de mis videos anteriores a AVI, pero esto lleva un tiempo ya que tengo que verificar cada transición.

Ejemplos

Este es el archivo OGV original de gtk-recordmydesktop: http://dl.dropbox.com/u/64693533/sync_test/sync_test1.ogv

El video comienza con una diapositiva de 10 segundos, luego avanza a 3 diapositivas más de 5 segundos cada una. Cada vez que avanzo las diapositivas, también toco el micrófono (10s, 15s, 20s, 25s).

Aquí hay algunas conversiones que se hicieron (cada una muestra sus propios problemas de sincronización de video):

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

  • Este muestra la primera diapositiva en el primer cuadro, pero avanza rápidamente.
  • esto se hizo usando el ffmpeg de stock

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

  • este está bastante cerca, aunque por alguna razón a los 13 años decide avanzar
  • Esto se hizo utilizando la compilación estática de ffmpeg de hace unos días.

Aquí está en youtube: puede ver que alrededor de los 13 segundos avanza temprano (de la diapositiva 1 -> diapositiva 2):

Aquí está la prueba de que el archivo OGV funciona correctamente:

ffmpeg traducción

Al usar ffmpeg o avconv, parece que obtengo resultados similares a los de YouTube (las transiciones parecen ocurrir temprano pero no necesariamente al mismo tiempo).

Aquí está el comando que uso (con una compilación estática reciente de ffmpeg) y la salida:

$ ~ / ffmpeg / ffmpeg -i JSP.ogv JSP.mp4
ffmpeg versión N-50025-gb8bb661 Copyright (c) 2000-2013 los desarrolladores de FFmpeg
  construido el 17 de febrero de 2013 05:23:03 con gcc 4.6 (Debian 4.6.3-1)
  configuración: --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] No se implementan múltiples fisbone para la misma secuencia. Actualice su versión de FFmpeg a la más nueva de Git. Si el problema persiste, significa que su archivo tiene una característica que no se ha implementado.
[ogg @ 0x34d4640] Error al analizar el encabezado para la secuencia 0
[ogg @ 0x34d4640] Archivo roto, fotograma clave no marcado correctamente.
Entrada # 0, ogg, de 'JSP.ogv':
  Duración: 00: 12: 49.67, inicio: 0.000000, velocidad de bits: 224 kb / s
    Secuencia # 0: 0: Datos: ninguno
    Stream # 0: 1: Video: theora, yuv420p, 1600x880 [SAR 1: 1 DAR 20:11], 15 fps, 15 tbr, 15 tbn, 15 tbc
    Metadatos
      RECORDMYDESKTOP: 0.3.8.1
    Secuencia # 0: 2: Audio: vorbis, 22050 Hz, mono, fltp, 89 kb / s
[libx264 @ 0x369c5e0] usando SAR = 1/1
[libx264 @ 0x369c5e0] utilizando capacidades de CPU: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
Perfil [libx264 @ 0x369c5e0] Alto, nivel 4.0
[libx264 @ 0x369c5e0] 264 - núcleo 129 r2230 1cffe9f - Códec AVC H.264 / MPEG-4 - Copyleft 2003-2012 - http://www.videolan.org/x264.html - opciones: cabac = 1 ref = 3 deblock = 1: 0: 0 analizar = 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 subprocesos = 6 lookahead_threads = 1 sliced_threads = 0 nr = 0 diezmar = 1 entrelazado = 0 bluray_compat = 0 constreñido_intra = 0 bframes = 3 b_pyramid = 2 b_adapt = 1 b_bias = 0 directo = 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
Salida # 0, mp4, a 'JSP.mp4':
  Metadatos
    codificador: 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 mil millones , 15 tbc
    Metadatos
      RECORDMYDESKTOP: 0.3.8.1
    Stream # 0: 1: Audio: aac ([64] [0] [0] [0] / 0x0040), 22050 Hz, mono, s16, 128 kb / s
Mapeo de flujo:
  Stream # 0: 1 -> # 0: 0 (theora -> libx264)
  Secuencia # 0: 2 -> # 0: 1 (vorbis -> libvo_aacenc)
Presione [q] para detener, [?] Para obtener ayuda
[ogg @ 0x34d4640] Archivo roto, sin fotograma clave no marcado correctamente.
    Último mensaje repetido 2 veces
Archivo roto, sin fotograma clave no marcado correctamente. = 00: 00: 08.37 bitrate = 28.7kbits / s dup = 66 drop = 0    
Archivo roto, el fotograma clave no está marcado correctamente.hora = 00: 00: 51.01 tasa de bits = 125.3kbits / s dup = 675 caída = 0    
Archivo roto, el fotograma clave no está marcado correctamente.hora = 00: 00: 55.05 velocidad de bits = 140.2kbits / s dup = 782 caída = 0    
Archivo roto, fotograma clave no marcado correctamente.hora = 00: 00: 59.60 bitrate = 140.5kbits / s dup = 836 drop = 0    
[ogg @ 0x34d4640] Archivo roto, fotograma clave no marcado correctamente.
Archivo roto, fotograma clave no marcado correctamente. Tiempo = 00: 01: 08.00 velocidad de bits = 143.0kbits / s dup = 900 drop = 0    
Archivo roto, el fotograma clave no está marcado correctamente. Tiempo = 00: 01: 11.86 tasa de bits = 141.6kbits / s dup = 910 caída = 0    

... repetido muchas veces ...

Archivo roto, fotograma clave no marcado correctamente.hora = 00: 12: 47.62 bitrate = 153.0kbits / s dup = 9087 drop = 0    
marco = 11521 fps = 87 q = -1.0 Tamaño de L = 14849kB tiempo = 00: 12: 49.48 bitrate = 158.1kbits / s dup = 9087 drop = 0    
video: 2401kB audio: 12024kB subtítulo: 0 encabezados globales: 0kB sobrecarga de muxing 2.938094%
[libx264 @ 0x369c5e0] fotograma I: 49 Promedio QP: 16.05 tamaño: 29658
[libx264 @ 0x369c5e0] cuadro P: 2912 Promedio QP: 9.88 tamaño: 114
[libx264 @ 0x369c5e0] fotograma B: 8560 Promedio QP: 12.76 tamaño: 78
[libx264 @ 0x369c5e0] tramas B consecutivas: 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% omitir: 99.9%
[libx264 @ 0x369c5e0] mb B I16..4: 0.0% 0.0% 0.0% B16..8: 0.3% 0.0% 0.0% directo: 0.0% omisión: 99.7% L0: 65.3% L1: 34.6% BI: 0.1%
[libx264 @ 0x369c5e0] transformación 8x8 intra: 0.5% inter: 15.8%
[libx264 @ 0x369c5e0] codificado 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-Frames ponderados: 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

El video todavía avanza temprano pero en diferentes momentos. Parece que gtk-recordmydesktop está generando un "archivo roto". Lo que es molesto es que el OGV funciona, por lo que parece que debería poder hacer que esto funcione con algún conjunto de opciones.

He descubierto que puedo reproducir el video en kdenlive y parece que funciona allí. Todavía me gustaría saber qué está pasando. kdenlive hace un trabajo mucho mejor, pero a veces todavía avanza temprano.

Amir T
fuente
2
Muestre su comando ffmpeg y la salida de consola completa resultante.
llogan
Buena idea @ LordNeckbeard Agregué el comando y la salida. Noto un error / advertencia: se alcanzó max_analyze_duration.
Amir T
¿Sigue ocurriendo el problema si usa una versión estática reciente de ffmpeg ? Esto descartará cualquier error potencial que pueda encontrar y que ya se haya solucionado con una versión más reciente de ffmpeg. No es necesario instalar ni nada. Simplemente descargue, extraiga el archivo y luego ejecute el ffmpegbinario incluido .
llogan
¿Puede proporcionar un archivo de entrada de muestra con el que se pueda reproducir el problema?
llogan
Buena idea, prepararé uno pequeño y lo publicaré más tarde esta noche.
Amir T

Respuestas:

4

¿Por qué convertirme a OGV cuando tu carga final va a ser a YouTube? Puedo estar equivocado, pero puedes convertirlo a un códec de video x264 con AAC Audio incluso en Linux y subirlo a YouTube teniendo en cuenta que eso es lo que prefieren cargar de todos modos. ¿Has intentado hacer un h264 y subirlo a youtube en lugar del archivo OGV y ver si ese era el problema? Porque apostaría que si eso lo resuelve, entonces sabes que era un problema con el OGV que se estaba cargando en YouTube, y si no lo resuelve, podría ser un problema de velocidad de fotogramas con la interpretación de YouTube o algo similar.

Ha habido muchos problemas con los archivos OGV cargados en YouTube en el pasado. No puedo imaginar que esté 100% fijo incluso en este punto.

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

EDITAR: también noté que su metraje original está a 15 fps ... esta podría ser la fuente del problema

EDITAR 2: Parece que he leído un poco mal la pregunta ... ya que estás comenzando con un archivo de video que es OGV, y vi que vas a MP4 ... esto cambia un poco las cosas ... .pero voy a adivinar que tiene algo que ver con el audio de 15 fps y 22050 Hz ... Sé que la frecuencia de muestreo no tiene nada que ver con la sincronización del audio, pero por experiencia cuando se usan frecuencias de cuadros y frecuencias de muestreo de audio no estándar, He tendido a ver a la deriva ... hacer que estos se sincronicen puede ser bastante difícil sin poder editarlos después de la grabación inicial con un editor de video barato ...

Si bien el software ha mejorado con respecto a la deriva de audio, sigue siendo un problema común cuando se usan tasas de cuadros y frecuencias de muestreo poco comunes, ya que los puntos de sincronización de fotogramas clave no son estándar y podrían redondear fotogramas clave, etc.

Verá dónde dice "Archivo roto, fotograma clave no marcado correctamente". a eso se refiere ...

mi consejo para ti sería acercarlo lo más posible, llevarlo a un editor de video y deslizar y cortar el audio para que coincida como lo deseas. Desafortunadamente a veces así es como se soluciona

Los transcodificadores basados ​​en software no siempre funcionan como deberían ... teniendo en cuenta por qué una configuración de protocolos y / o una configuración ávida vendría con hardware para garantizar aún más las capacidades de sincronización y velocidades de cuadros constantes, etc.

Otra cosa que podría intentar es convertir el metraje a una velocidad de fotogramas estándar e intentar volver a casar el audio ... ya que estoy bastante seguro de que es la deriva del video ... probablemente disminuyendo ligeramente y luego acelerando hacia al final o viceversa.

EDITAR: pude hacer que el video se sincronice con el original usando este comando ffmpeg ... puede que necesite la cláusula rate, que es lo que sospechaba

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

Chris James Champeau
fuente
El archivo original es Theora video y Vorbis audio en contenedor ogv. Amir T no está volviendo a codificar en este formato, que yo sepa, pero cuando intenta volver a codificar el original con ffmpeg o YouTube, el problema de sincronización se manifiesta.
llogan
El formato de entrada es ogv, que es lo que genera gtk-recordmydesktop. Estoy tratando de llegar a otra cosa que no sea ogv (flv, etc.).
Amir T
Lea mi respuesta actualizada ... Creo que es un problema de FPS
Chris James Champeau
1
Agregar -r 15es lo mismo que omitirlo porque ffmpeg heredará la velocidad de fotogramas de entrada de forma predeterminada, y los archivos de salida resultantes, con o sin, -r 15son exactamente iguales con ffmpeg de git head (versión N-50285-gad89952). Si está trabajando para usted usando una versión anterior de ffmpeg, esto podría ser una regresión y debería informarse al rastreador de errores de FFmpeg .
llogan
1
Estoy con @LordNeckbeard, deberías informar esto como un error a FFMPEG
Chris James Champeau
3

Luché con un problema similar en Ubuntu 12.04.3 LTS. Solucioné el problema usando la compilación estática ffmpeg que está disponible en http://johnvansickle.com/ffmpeg/

usuario2768
fuente
1
También probé una compilación estática y funcionó un poco mejor. Quizás se haya solucionado el error, en cuyo caso podría ser útil agregar el número de versión de la compilación estática a su respuesta.
Amir T
0

Intente simplemente cambiar el contenedor a avi en lugar de transcodificar, lo que parece funcionar mejor para YouTube:

ffmpeg -i JSP.ogv -vcodec copy -acodec copy JSP.avi
CpnCrunch
fuente
Intenté esto, y la carga nunca termina el procesamiento, como si cargara OGV. Como esta respuesta es anterior a que YouTube acepte OGV, debe ser ese cambio. Molesto que ffmpeg todavía tenga este problema de conversión cuatro años después.
mcr
Mi ffpmeg es: 3.2.14-1 ~ deb9u1 (apt-get instal)
mcr
He intentado todas las variaciones anteriores, con compilaciones estáticas (git-20191029), y aunque mejora un poco, el audio y el video no se sincronizan. Si intenta uno necesita un valor grande --max_muxing_queue_size. Solía ​​40960.
mcr