Autor Tema: Time-stretch en Matroska  (Leído 4889 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Overdrive80

  • Colaborador
  • ******
  • Desconectado Desconectado
  • Registrado: 25/08/2010
  • Mensajes: 2.046
  • Valoración: 71
  • Depravado sin remedio
Time-stretch en Matroska
« Mensaje inicial: 09 de Enero de 2014, 22:05 »
Manual Time-Stretch para matroska

Este manual nace de la necesidad que tenemos algunos de combinar ficheros de diferentes sistemas, PAL y NTSC, en un único archivo. Como es de suponer, esta guía se va a centrar en como cargar estos archivos y que puedan ser correctamente visualizados, manteniendo sincronía entre las pistas sin necesidad de recodificar pistas de video o audio.

Voy a centrarme en un caso en específico, aunque debéis saber que es posible hacerlo desde otra perspectiva, pero eso queda a vuestra elección. En este ejemplo, vamos a disponer de:

  •     Video en formato FILM (NTSC), a 23.976 frames por segundo (24000/1001). Duración: 50mn 16s.
  •     Audio 1 con una duración en concordancia a un video de 25 frames por segundo. Duración: 48mn 12s.
  •     Audio 2 con duración acorde al video FILM (23.976fps). Duración: 50mn 16s.
  •     Subtítulos sincronizados con el video FILM. Duración: 50mn 16s.

Cargamos nuestras pistas en mkvmerge, viendo algo así:



  • CAMBIO FRAMERATE DEL VIDEO

     
    Lo primero que haremos será adaptar la duración del video con la del audio con menor duración. Y para eso tendremos que cambiarle el framerate, vía contenedor. De esa manera, el video parecerá que se reproduce un poco más rápido, justamente a la misma velocidad que vemos nuestros videos en PAL.
     
    En ‘Pistas, capítulos y etiquetas’ seleccionamos con el ratón, la primera pista que es la del video. Una vez seleccionada, nos iremos a la pestaña central de la parte inferior que cita como: ‘Opciones específicas de formato’. Y veremos algo así:


    Una vez que hemos editado el framerate ya podemos dirigirnos y seleccionar la pista que provenía de la fuente NTSC, y que tenía la misma duración que el video; puesto que nuestro audio proveniente de la fuente PAL, la dejaremos intacta.
    Nótese, que estoy suponiendo que el video PAL y NTSC (tras conversión a PAL), se adaptan perfectamente, frame a frame.  Si fuese así, podríamos saltarnos lo que voy explicar a continuación, y es referente a la problemática de la sincronía entre pistas.

  • SINCRONIZACION DE VIDEO / AUDIO

    Dependiendo de cómo fuese editada la película PAL, es posible que tengamos que resincronizar previamente la pista de audio en PAL. Y en este punto nos podremos encontrar con dos problemáticas, la primera es que sería necesario hacer un soft-sync o hard-sync.

       
    • Soft-sync.
       
      Este caso se refiere a la necesidad, únicamente, de un delay (desfase) de la pista de audio. Para saber si existe un desfase hay varios métodos. El más común sería importar las dos pistas de audio, tanto la PAL y la NTSC. A esta última habría que acortarle la duración, mediante un speedup.
       
      A continuación, buscaríamos un sonido de un efecto concreto entre ambas pistas, y las alinearíamos para encontrar el desfase inicial.
       
      Otra alternativa sería editar el video. Si disponemos de video PAL y NTSC, cargaríamos un script como el que os voy a poner:
       
      Citar
      #CARGA VIDEO PAL
       
      DGDecode_mpeg2source("E:\Movies\Pelicula PAL\PAL.d2v", info=3)
       
      ColorMatrix(hints=true, threads=0)
       
      VideoA=last.subtitle(string("PAL")).spline36resize(width-width/4,height-height/4)
       
      #CARGA VIDEO NTSC
       
      DGDecode_mpeg2source("E:\Movies\Pelicula NTSC\NTSC.d2v", info=3).Assumefps(25)
       
      ColorMatrix(hints=true, threads=0)
       
      VideoB=last.subtitle(string("NTSC tras conversión")).spline36resize(width-width/4,height-height/4)
       
      #UNION
       
      StackVertical(VideoA, VideoB)

      Así podríamos saber cuántos frames iniciales se llevan de diferencia, y recortarlos.
       

    •     Hard-sync.
       
      Este es el peor caso con el que nos podemos encontrar y no por ello, el más complicado. Sería un caso en el que un delay inicial no bastaría para sincronizar, sino que necesitaríamos editar el audio a lo largo de toda la extensión del video, sincronizándolos.
       
      Para esto, necesitaríamos usar un editor de video y audio y así sincronizar nuestra pista de audio PAL, al video NTSC convertido a los efectos, en video PAL.
       
      Como yo trabajo con Premiere, explicaré como cargar el video rápidamente sin tener que codificarlo.
       
      - Requisitos:
       

          AVFS. http://forum.doom9.org/showthread.php?t=133313
          PFMap. http://www.pismotechnic.com/download/pfmap-170-win.exe

       
      Instalamos PFMAP, y AVFS lo ponemos en el directorio de plugins de avisynth. A continuación, creamos un archivo *.bat para registrar la *.dll.
       
      Citar
      @echo off
      Title Registro de avfs
       
      Pfm register "C:\Program Files (x86)\AviSynth 2.5\plugins\avfs.dll"
       
      ::Para eliminar el registro
      Rem pfm unregister "C:\Program Files (x86)\AviSynth 2.5\plugins\avfs.dll"
       
      Pause&exit

      Lo siguiente, sería crear el script de carga y conversión para Adobe Premiere. Un script de ejemplo sería:
       
      Citar
      DGDecode_mpeg2source("E:\Movies\Pelicula NTSC\NTSC.d2v", info=3).Assumefps(25)
       
      ColorMatrix(hints=true, threads=0)
       
      assumefps(25)
       
      converttorgb24() #Esta línea es muy importante para poder cargar con Adobe Premiere.

      Después de crear el script, lo seleccionamos con el ratón y con el botón derecho, del mismo; seleccionamos “Quick Mount”. Momentos después aparecerá una carpeta con un *.avi en su interior, de gran tamaño. Este archivo nos serviría para empezar a editar y sincronizar nuestro video con nuestro audio.


  • TIME-STRETCH AUDIO

    Teniendo ya nuestra pista de audio PAL, en perfecta sincronía con nuestro video NTSC (solo convertido a PAL para sincronizar, cuando lo cargamos en mkvmerge, estará a su framerate original 23.976)
     
    Lo idóneo, quizás sería hacer un cambio de samplerate al audio o al menos dejarlo en manos del contenedor para que le informe al reproductor que haga un resample. De hecho, en el encabezado del archivo matroska hay campos con respecto a esto, pero yo no he conseguido que funcione correctamente de esa manera. Sin embargo, usando el campo “Extensión por” de mkvmerge si es posible conseguir que las pistas estén sincronizadas.

    Tal y como hicimos con el video, en ‘Pistas, capítulos y etiquetas’ seleccionamos con el ratón, la segunda pista que es la del audio con la misma duración que el video FILM (NTSC). Una vez seleccionada, nos iremos a la pestaña central de la parte inferior que cita como: ‘Opciones específicas de formato’. Y veremos algo así:
     

    El campo “Extensión por”, en inglés denominado time-stretch, hace alusión a la cantidad que queremos que el tiempo sea extendido o acortado. La numeración que viene en ese campo proviene de:
     
    Time-stretch (FILM-->PAL) = Framerate FILM/Framerate PAL = 23.976/25 = (24000/1001)/25=
                                                              24000/25025=960/1001
     
    Otras conversions serían:
     
    Time-stretch (PAL -->FILM) = Framerate PAL/Framerate FILM = 1001/960
     
    Time-stretch (NTSC-->PAL) = 30000/25025 = 1200/1001
     
    Time-stretch (PAL-->NTSC) = 25025/30000 = 1001/1200

  • TIME-STRETCH SUBTITULOS

    Con los subtítulos, procederíamos de igual manera que con el punto anterior.


NOTA: Lo último seria multiplexar las pistas y crear el archivo final. De manera que cuando seleccionemos las pistas todo estará en sincronía. Dependiendo del render que usemos, notaremos que cuando seleccionemos la pista de audio sometida a time-stretch, puede que veamos “tirones” en el video. Pero es la única desventaja que tenemos con este método pues de esta manera no tendremos que hacer conversiones innecesarias de nuestros video o audio, y dejándolo todo en su estado original.


DESCARGA:
Código: [Seleccionar]
https://db.tt/PToo4Mqe



Davinchi

  • Miembro senior
  • ***
  • Desconectado Desconectado
  • Registrado: 20/03/2012
  • Mensajes: 165
  • Valoración: 2
Re: Time-stretch en Matroska
« Respuesta #1: 09 de Enero de 2014, 22:28 »
Muchas gracias por el manual overdrive80

LUCHOO

  • Moderador
  • ******
  • Desconectado Desconectado
  • Registrado: 10/02/2004
  • Mensajes: 5.389
  • Valoración: 26
  • Sexo: Masculino
Re: Time-stretch en Matroska
« Respuesta #2: 10 de Enero de 2014, 03:41 »
Gracias Overdrive ...  una vez más  :arriba:
責任者

ElMagno90

  • Colaborador
  • ******
  • Desconectado Desconectado
  • Registrado: 27/10/2009
  • Mensajes: 2.193
  • Valoración: 37
  • Sexo: Masculino
Re: Time-stretch en Matroska
« Respuesta #3: 10 de Enero de 2014, 21:55 »
Excelente :arriba:

Saludos :saludo:

Overdrive80

  • Colaborador
  • ******
  • Desconectado Desconectado
  • Registrado: 25/08/2010
  • Mensajes: 2.046
  • Valoración: 71
  • Depravado sin remedio
Re: Time-stretch en Matroska
« Respuesta #4: 11 de Enero de 2014, 00:51 »
Espero que os sea de utilidad, yo he empezado ahora a montar cosas, de esa manera. Saludos.

tebasuna51

  • Colaborador
  • ******
  • Desconectado Desconectado
  • Registrado: 22/02/2010
  • Mensajes: 3.671
  • Valoración: 154
Re: Time-stretch en Matroska
« Respuesta #5: 11 de Enero de 2014, 04:28 »
Yo la verdad es que no confío mucho en este sistema de Time-Stretch.

La idea es extrapolar lo que en video no tiene mayor problema:

hay unos timecodes asociados a cada imagen que indican al reproductor cuanto tiempo deben mantenerla en pantalla hasta ser sustituida por la siguiente, así la misma secuencia de imagenes se reproduce a 25 fps si cambiamos de imagen cada 40 ms. Si cambiamos la imagen cada 41,667ms reproducimos a 24 fps.

Pero cuando se reproduce audio, supongamos AC3, los timecodes indican cuando deben reproducirse cada frame AC3, que decodificada son 1536 muestras de audio. Y los dispositivos de audio no permiten que una muestra de audio se reproduzca un tiempo arbitrario, solo se admiten unos samplerates muy concretos 32000, 44100, 48000, etc. La única solución que puede tomar el reproductor es eliminar muestras de audio (si estamos comprimiendo) o dejar silencio entre frames (si estamos alargando).

Visto de otra manera, una Extensión por 960/1001, como en el ejemplo, debe implicar que el reproductor solo reproduzca 960 muestras de cada 1001.
¿Cómo lo hace? ¿Reproduce 960 y luego ignora 41, o lo hace a prorrateo?
Lo que desde luego no va a hacer es el proceso de interpolación de muestras, que el software especializado hace, para mantener la calidad lo máximo posible.

Mi opinión es que sigue siendo necesaria una conversión previa y no confiar en que una simple anotación en el contenedor nos solucione la papeleta.

Overdrive80

  • Colaborador
  • ******
  • Desconectado Desconectado
  • Registrado: 25/08/2010
  • Mensajes: 2.046
  • Valoración: 71
  • Depravado sin remedio
Re: Time-stretch en Matroska
« Respuesta #6: 11 de Enero de 2014, 04:52 »
Bueno, yo lo he probado y funciona correctamente.

¿Cómo funciona exactamente?

Pues no soy ningun entendido de audio, asi que no te sabría decir, aunque sospecho que no hace nada al audio sino que manipula tb el video pero de otra perspectiva. Pues como ya he citado anteriormente, he afirmado que lo apropiado sería hacer un resample o time-stretch con un editor de audio, y he estado explorando el editor de encabezado donde aparecen valores del sample; pero este metodo es una alternativa y te aseguro que funciona.

Te animo a que lo pruebes.

EDITO: Te mando un MP con unos enlaces de una peli que he editado y veas el resultado.

EDITO2: Tb he citado que al reproducir la pista 2 de audio, es probable que segun el render tengamos mininos paradas del video, algo que yo prefiero que pase en una pista que apenas usaré y asi mantendré todo en su estado original.

NOTA: ESTE MANUAL NO NACE CON LA INTENCIÓN DE IMPLANTAR UN NUEVO METODO DE TRABAJO, SIMPLEMENTE ES UNA ALTERNATIVA.
« Última modificación: 11 de Enero de 2014, 05:08 por overdrive80 »

tebasuna51

  • Colaborador
  • ******
  • Desconectado Desconectado
  • Registrado: 22/02/2010
  • Mensajes: 3.671
  • Valoración: 154
Re: Time-stretch en Matroska
« Respuesta #7: 11 de Enero de 2014, 10:36 »
No te enfades overdrive, como dices cada render (según reproductores) puede hacer un método distinto y es difícil garantizar un resultado correcto en todos los dispositivos.

Intentaré estudiar el ejemplo que me mandas.

En mi experiencia pasada como beta-tester del Xtreamer encontré casos de reproducciones incorrectas cuando se ajustaba la duración del audio con este método, que se solucionaban al usar una corrección del audio externa con eac3to o BeHappy. Y por ello lo comentaba, pero desde luego puede ser dependiente del reproductor el que sea audible o no.

Overdrive80

  • Colaborador
  • ******
  • Desconectado Desconectado
  • Registrado: 25/08/2010
  • Mensajes: 2.046
  • Valoración: 71
  • Depravado sin remedio
Re: Time-stretch en Matroska
« Respuesta #8: 11 de Enero de 2014, 17:17 »
No me he enfadado, tranquilo solo he expuesto mi punto de vista. Y he hecho una nota aclaratoria pq no kiero ser el germen de una nueva modalidad de edición. El manual este y otros que hecho son fruto de mis pruebas, y las comparto. Como he citado no soy experto en audio ni en video. saludos

Overdrive80

  • Colaborador
  • ******
  • Desconectado Desconectado
  • Registrado: 25/08/2010
  • Mensajes: 2.046
  • Valoración: 71
  • Depravado sin remedio
Re: Time-stretch en Matroska
« Respuesta #9: 04 de Octubre de 2014, 10:53 »
Siento el repost. Bueno despues de mucho tiempo, probando y probando, debo decir que la unica configuración que me permite realizar este proceso sin problemas de reproducción es con este esquema:

Video: Codificado a 23.976 fps, y aumentado a 25 fps via contenedor.
Audio: Audio 1, con duración equivalente al video a 25 fps (Cualquier formato de compresión)
           Audio 2, con duración equivalente al video a 23.976 fps (Sólo con audio en formato FLAC o WAV). No válido con AC3, DTS.

Imagino que tendrá que ver con los frames del audio.  :decabeza:

tebasuna51

  • Colaborador
  • ******
  • Desconectado Desconectado
  • Registrado: 22/02/2010
  • Mensajes: 3.671
  • Valoración: 154
Re: Time-stretch en Matroska
« Respuesta #10: 04 de Octubre de 2014, 12:22 »
La verdad es que nunca he probado con FLAC/WAV, no sé como guarda los timecodes en ese caso. A ver si investigo sobre ello.

En caso de audio AC3/DTS se que guarda un timecode por cada frame, de manera que al reproducir un audio alargado/comprimido lo que debe pasar es que duplique/elimine algunas frames con un resultado no deseado y audible en muchas ocasiones.

Overdrive80

  • Colaborador
  • ******
  • Desconectado Desconectado
  • Registrado: 25/08/2010
  • Mensajes: 2.046
  • Valoración: 71
  • Depravado sin remedio
Re:Time-stretch en Matroska
« Respuesta #11: 17 de Enero de 2015, 13:52 »
Buenas estoy probando esta opción nuevamente con OPUS, y la verdad es que la visualización es correcta pero es necesario regular un delay de aproximadamente 8 frames. Desconozco el motivo, pero hecho eso el resultado es muy bueno la verdad.

Para codificar el archivo de entrada, que es un wav a 24 bitdepth, he usado estas opciones de codificación para OPUS: --bitrate 192 --comp 10 --max-delay 0

El material de partida es un video codificado a 24 fps, de 24:40 min de duración. El audio usado tiene una duración de 23:39 min (adaptado para PAL). En matroska, time-stretch usado es 1001/960, y el delay necesario: +320 ms. Procedente de:

Código: [Seleccionar]
PAL to NTSC

Time-stretch
1001/960

Delay necesario para mantener sincronía

Si es conversion PAL a NTSC

1000/25 * 8 frames = +320 ms

Sencillamente desconozco porque se produce esa asincronía constante de 8 frames, pero la reproducción del video es fluída.


Kyaneos

  • Miembro junior
  • **
  • Desconectado Desconectado
  • Registrado: 11/09/2014
  • Mensajes: 55
  • Valoración: 0
Re:Time-stretch en Matroska
« Respuesta #12: 30 de Abril de 2017, 01:45 »
Una duda, al igual que se usa el 960/1001 para que unos subtítulos, originalmente a 23.976 fps, vayan a 25 fps, ¿qué parámetro debería utilizar para que estos mismos subtítulos a 23.976 fps vayan a una velocidad de 24 fps?.

Un saludo.

Overdrive80

  • Colaborador
  • ******
  • Desconectado Desconectado
  • Registrado: 25/08/2010
  • Mensajes: 2.046
  • Valoración: 71
  • Depravado sin remedio
Re:Time-stretch en Matroska
« Respuesta #13: 30 de Abril de 2017, 01:51 »
1000/1001

Kyaneos

  • Miembro junior
  • **
  • Desconectado Desconectado
  • Registrado: 11/09/2014
  • Mensajes: 55
  • Valoración: 0
Re:Time-stretch en Matroska
« Respuesta #14: 30 de Abril de 2017, 02:06 »
1000/1001

Muchísimas gracias Overdrive  ;-)

Un saludo.