Mostrando entradas con la etiqueta mkv. Mostrar todas las entradas
Mostrando entradas con la etiqueta mkv. Mostrar todas las entradas

jueves, 30 de enero de 2020

Reordenar las pistas en un fichero mkv

En estas últimas semanas he tenido un pequeño problema en la manera de reordenar las pistas en ficheros matroska. Todo nace en que una de mis televisiones no lee formato flac de sonido. A los ficheros matroska con alguna pista de sonido con formato flac suelo extraerle la/s pista/s flac (para más detalles, ya lo hemos visto aquí):


mkvextract origen.mkv tracks x:salida.flac

y convertirlas a aac con soundkonverter, una máscara gráfica de diferentes conversores de audio, muy fácil de usar, que permite muchos tipos de codificación y facilita la configuración de la transformación con mucho detalle.
Una vez transformadas, simplemente inyectamos la pista aac en el fichero matroska a través de MKVToolNix Gui, de una forma gráfica y mucho más sencilla que mkvmerge.


Una vez insertada, la colocaba en la posición que deseaba simplemente picando con el ratón y moviéndola a mi gusto. Sin embargo desde hace alguna versiones no es posible recolocarlas de esta manera. No tiene más importancia, pero en ocasiones nos interesa colocarla en algún lugar particular, por ejemplo para que sea la segunda pista de sonido, justo después de la predefinida, o para que se pueda ver entre un montón de pistas, cuando por ejemplo hay muchos subtítulos. Pues ayer decidí comprobar por fin de qué manera se puede mover las pistas sin la ayuda del ratón. La forma más fácil es mantener pulsado Ctrl y ordenar mediante las flechas direccionales. Para más información para curiosos, os dejo el enlace a este vídeo que es bastante aclaratorio. No me han funcionado todas las maneras indicadas en él, pero ahora ya puedo volver a colocar las pistas como quiero. ¡Qué cosa tan sencilla y lo que he tardado en averiguar como funcionaba!

martes, 7 de enero de 2020

Conversión de sonido TrueHD: la vieja confiable ffmpeg

En estos días de Navidad nos han dado muchas cosas, y entre ellas un fichero matroska de una de las películas que más me ha gustado en mi vida. Jamás había visto ninguna versión, original o copia, con esa calidad. Sin embargo, presentaba varías características que me hizo difícil verla como yo quería; primero, la pista del sonido en lengua original estaba en TrueHD 5.1; segundo, los subtítulos estaban en formato PGS (Presentation Graphic Stream subtitle format). Estos formatos no generan ningún problema en el ordenador, pero prefiero ver una película como esta con más calidad, con más tamaño y con un sonido mejor que el que puede generar un monitor de 24' con altavoces de 2W. Ninguna de las dos televisiones LG de las que dispongo pudo decodificar el sonido TrueHD ni los subtítulos PGS. Ya hemos explicado en una entrada anterior como se transforma un subtítulo PGS, que es una imagen, a un formato texto srt; sin embargo, como es un trabajo laborioso y como entre las muchas versiones de las que dispongo de esa película se incluye —incluía, por que ésta la ha sustituido—  una Versión Final con la misma duración con subtítulos srt extraje esos ficheros del mkv. Pero una cosa muy distinta es el sonido. El formato TrueHD ofrece un sonido sin pérdida de calidad en la compresión y no merecía la pena recurrir a un AC3 antiguo, con lo que el primer objetivo fue la transformación del TrueHD a un formato que mis dispositivos pudieran leer. La extracción siempre es sencilla utilizando mkvextract

mkvextract origen.mkv tracks x:salida.ingles.truehd

siendo x el número de pista que queremos extraer, y teniendo en cuenta que mkvextract empieza a contar sobre cero; es decir, si vídeo = 0, sonido español = 1, sonido inglés TrueHD = 2, PGS Español = 3...
La extracción fue la parte fácil. En general, cuando se trata de transformar un audio extraído de esa manera —en mi caso casi siempre para convertir FLAC a AAC—, utilizo soundkonverter, que es una máscara gráfica —GUI, de Graphical User Interface o a veces wrapper— de ffmpeg, software que lo convierte todo.


Sin embargo, soundkonverter no reconocía el fichero con sonido TrueHD, así que busqué alternativas en el mundo —en google—. Las opciones que aparecían eran:
- de truehd a flac con audiomuxer; es de windows y prefiero no pasar por flac (maneja 5.1?; la televisión más grande y gorda que tengo no lee flac...)
- popcorn mkvaudioconverter: y eto que é?
- eac3to

De todos ellos, incluso intenté usar eac3to en wine, pero faltaban codecs intermedios y no era capaz de construir adecuadamente el comando. Cuando todo falla, tendemos a recurrir a la vieja confiable, que nos soluciona todo; es decir, un simple comando de ffmpeg sin máscaras

ffmpeg -i sonido.in.truehd sonido.in.aac

y todo lo demás lo ajustó directamente ffmpeg. Vean al final de la entrada la salida en el terminal.
Además, al incorporar los subtítulos srt DESPUÉS de los PGS, las máquinas LG tampoco pudieron leerlos, así que finalmente eliminé los PGS. La pista TrueHD no la eliminé, simplemente añadí la aac después, por si algún otro dispositivo lo puede leer TrueHD en el futuro, o en alguna actualización de las LG tienen a bien incorporar este codec. Por cierto, el sonido TrueHD ocupa, para 1h58m 3,2GB, miestras que aac comprimido a máxima calidad —sí, con perdida, lo sé, pero FLAC no leen mis dispositivos y PCM ocupa hasta el infinito y más allá— ocupa la décima parte.

Qué no encuentras una solución nueva, ¡usa la de toda la vida!


Resultado del comando en el terminal
$ ffmpeg -i blader.in.truehd blader.in.aac
ffmpeg version 4.2.1 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9 (GCC)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --docdir=/usr/share/doc/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' --extra-ldflags='-Wl,-z,relro -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld ' --extra-cflags=' ' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable-fontconfig --enable-frei0r --enable-gcrypt --enable-gnutls --enable-ladspa --enable-libaom --enable-libdav1d --enable-libass --enable-libbluray --enable-libcdio --enable-libdrm --enable-libjack --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libmp3lame --enable-nvenc --enable-openal --enable-opencl --enable-opengl --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librsvg --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libvidstab --enable-libvmaf --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzvbi --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-libmfx --enable-runtime-cpudetect
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
Input #0, truehd, from 'blader.in.truehd':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Audio: truehd, 48000 Hz, 5.1(side), s32 (24 bit)
Stream mapping:
  Stream #0:0 -> #0:0 (truehd (native) -> aac (native))
Press [q] to stop, [?] for help
[aac @ 0x55ed8a510b80] Using a PCE to encode channel layout "5.1(side)"
Output #0, adts, to 'blader.in.aac':
  Metadata:
    encoder         : Lavf58.29.100
    Stream #0:0: Audio: aac (LC), 48000 Hz, 5.1(side), fltp (24 bit), 394 kb/s
    Metadata:
      encoder         : Lavc58.54.100 aac
size=  341245kB time=01:57:36.85 bitrate= 396.1kbits/s speed=17.8x    
video:0kB audio:338984kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.667078%
[aac @ 0x55ed8a510b80] Qavg: 418.332







martes, 11 de octubre de 2016

Subtitulos PGS en matroska. Conversión a srt

Tengo unos ficheros interesantes de una serie antigua con doblaje español, pero el doblaje original era muy famoso y pude conseguirlo en un montaje de peor calidad de visión. La solución es simplemente extraer el sonido original e incorporarlo a la versión española. Eso añade la necesidad de unos subtítulos para entender mejor la lengua de Shakespeare. Los subtítulos tienen formato PGS (Presentation Graphic Stream subtitle format) que no se ven en muchos lectores de vídeo. La razón es que los subtítulos PGS, al igual que los VOBSUB, no son texto, son imágenes de bits que contienen los subtítulos en pixeles, no un texto con sus letras, fuentes etc. La solución pasa por:

1. Extracción del subtítulo PGS. Seguiremos los pasos del terminal indicados en esta entrada de hace tiempo

mkvextract tracks fichero.mkv 2:subtitulo.sup


2. Conversión del formato bitmap (nombrado sup al extraerlo) a texto mediante OCR ("Optical Character Recognition"). Para eso usamos suprip. Este programa permite hacer el OCR sobre el sup extraído. Es un programa para Windows; aunque puede ser utilizado en Linux con Wine, no lo recomiendo si el subtítulo tiene mas de 20 o 30 líneas. La razón es que el programa va creando su diccionario de reconocimiento y a los 5 minutos ya casi es autónomo, pero bajo wine no continúa hasta que encuentra un caracter no reconocido, sino que para en cada línea, y se hace interminable. Conservar el diccionario de reconocimiento (temp.font que guarda en /home/usuario/.wine/drive_c/users/usiario/Application Data/Suprip bajo wine o el correspondiente en Windows, si bien es cierto que luego lo puedes localizar en el directorio de suprip).
Cuando acaba, exportar el resultado a srt.

3. Revisar, por que nunca queda perfecto.

Una vez conseguidos los subtítulos, ya solo queda montar con mkvtoolnix-gui el doblaje original y los subtítulos srt que leen todos los lectores.

Todo esto, si los audios están ya sincronizados. Si no es así, habrá que sincronizar audios y subtítulos, pero esa es otra batallita.

jueves, 28 de julio de 2016

LG 49UB850V y x265

Hace unos meses decidí comprarme una televisión 4k, en concreto una LG 49UB850V.


Las razones eran varias; por supuesto, para ver mejor el cine, para aumentar el área de visión (de 25 a 49 pulgadas), para bajar de peso —la anterior era aun de tubo y debía pesar 40kg— y, por supuesto, poder ver todos los formatos de vídeo, audio y foto desde el dispositivo sin añadir ningún aparato más. No; no para ver mejor los canales de televisión, que solo veo snooker y Canal Cocina.
Bien, realmente habíamos cubierto CASI todo lo previsto; se ve mejor —mucho mejor—, pesa menos, pero no mucho menos, por que es ENORME, y se ve todo, mejor dicho, casi todo, por que los matroska con codev x265 (también llamado HEVC —High Efficiency Video Coding—, como queráis llamarle) no se podían reproducir... hasta la última actualización. Ayer ya pude probar un x265 con una película remasterizada de 2h y 20 minutos en un contenedor matroska de solo 1,4GB con una calidad pasmosa, para tan escaso peso. En resumen, una maravilla. Había muchos comentarios de que este tipo de televisiones anteriores al  2016 llevaban chips que no tendrían potencia suficiente para descodificar un x265, pero sí, esta puede. Como nota al pie, no se podía utilizar la función de avance y retroceso, y había que manejar los tiempos, pero nada importante.
Disfrutémoslo con unas palomitas

jueves, 13 de noviembre de 2014

Extracción de imágenes desde un vídeo mkv

Recordemos ese vídeo que extraímos hace unos días de un DVD y convertimos en mkv utilizando de Handbrake, y que luego recortamos mediante avidemux. De ese vídeo me han preguntado si era capaz de extraer unas imágenes en jpg para utilizarlas individualmente sin tener que incluir un vídeo. Por supuesto dije que sí. Luego estuve valorando las diferentes posibilidades.
Primera, avidemux, pero no descubrí la forma de extraer imágenes fuera de ir pidiendo de una en una (File -> Save image). Siempre es mejor sacar tiras completas para escoger la que nos de la mejor visualización.
Segunda opción por mi conocida; si disponemos de un vídeo con formato adecuado para él, VirtualDub nos convierte un vídeo en una tira de imágenes en milésimas de segundo. Aunque es una aplicación pensada para windows, podemos utilizarla en Linux, por que VirtualDub funciona perfectamente por wine. El problema es que nos exigiría una codificación más, ya que VirtualDub solo admite "Video for Windows (VFW) compatible codec..."


y es preferible evitarlo, ya que HandBrake ya lo ha recodificado una vez, y ahora otra más siempre genera pérdida de calidad; eso sin olvidar de que para convertirla a imagen JPG se va a recodificar otra.

Tercera, y más sencilla y adecuada, ffmpeg. En concreto en sus FAQ encontramos la instrucción básica

ffmpeg -i movie.mkv movie%d.jpg

Perfecto. El único problema es que el vídeo dura 1 hora y 5 minutos y solo se necesitan para lo que queremos 13 segundos. La orden directamente sobre el vídeo nos generaría 97500 imágenes (65minutos x 60 segundos x 25fps). Así que lo mejor es ejecutar solo sobre la porción menor posible del vídeo.
Podríamos volver a dividir mediante avidemux, pero genera diferentes problemas en función de la localización de los "keyframes", los fotogramas base sobre los que se marca la compresión de todos los siguientes. Sin embargo, la división mediante mkvmerge GUI no generó ningún problema y lo pudimos dejar en 13 segundos (primero en cortes de 20 minutos, luego 5 del que nos interesaba, luego 1 minuto y luego de 20 segundos, que el programa dejó en 13)


En la pestaña de Opciones generales, Modo de corte (Dividir según duración) y luego los segundos (formato horas:minutos:segundos).

Luego aplicamos la orden ffmpeg y se obtienen un lote completo de fotos. Ahora solo nos queda elegir las mejores y las podemos poner en una presentación, sin tener que cargar un vídeo.

PD. Por cierto, aplicaciones gráficas, pero al final, recurrimos al terminal

miércoles, 22 de octubre de 2014

Eliminar principio y fin de un MKV

Como indicábamos en la entrada anterior, de un DVD de una cadena de televisión he extraído un fichero mkv para evitar tener que usar un disco óptico. El problema reside en que los productores del Dvd te lo dan con "restos" inútiles al principio (95 segundos de bandas de color y 30 segundos más de pantalla en negro)


y final (11 minutos y 48 segundos de otros programas codificados o lo que sea)


Así que para terminar nuestro trabajo, lo mejor es eliminar esos trozos. Primero quise ejecutar ffmpeg

ffmpeg -i 'video.mkv' -v:c copy -a:c copy -ss 02:05:00 -t 63:19:00 'video2.mkv'

pero como resultado generó una serie de errores que tengo aun que analizar:

Invalid loglevel "copy". Possible levels are numbers or:
"quiet"
"panic"
"fatal"
"error"
"warning"
"info"
"verbose"
"debug"

Revisando mkvmerge descubrí que realmente no puedes seleccionar un trozo en particular, sino que permite dividir en trozos idénticos según diferentes parámetros.


Eso nos obligaría a dividirlo en trozos con la duración del primero a eliminar, ajustar el último que queramos aprovechar dividiéndolo según el último trozo que quede para eliminar y finalmente unir los cortes válidos por orden. Demasiado trabajo.

Así que recurrí a avidemux.


Mediante los marcadores (1 y 2 en la imagen) se marcan las zonas a borrar, teniendo siempre cuidado de copiar directamente el audio (3) y vídeo (4) para no provocar una nueva recodificación y simplemente copiar la parte deseada directamente. Con el fin de no cambiar el formato del contenedor, se elige el mismo (5). Con esto y 3 segundos, listo. No se ha cambiado la resolución ni la calidad de la imagen y sonido y hemos eliminado casi 14 minutos de vídeo "basura".
En resumen, hemos utilizado una serie completa de aplicaciones de código abierto que nos ha permitido convertir un DVD óptico (técnica poco funcional en los días que corren) a un fichero MKV de alta calidad (vídeo avc1 h264 720x576; sonido AC3 382kbps) en 1,1GB, que entra en cualquier unidad USB, incluso en las que regalan.

Solo me falta saber que pasó con ffmpeg.

lunes, 20 de octubre de 2014

Linux y un codificador de DVD: Handbrake

Esta entrada nace de un cierto "desconocimiento" de la forma de ripear y codificar un DVD. Mi abandono de Windows, alrededor de 2007, supuso también un abandono de ripear y descodificar, por que encontré cosas mejores en las que divertirme. Pasado tanto tiempo, ni me acordaba como usaba antes Gordian Knot ni decenas de programas más. Sin embargo, unos comerciales me pasaron unos DVDs de publicidad, sin protección, para utilizar en clase. En esas circunstancias no siempre dispones de unidades ópticas para proyectar los DVDs, así que tenía la necesidad de extraer vídeos que pudiera llevar en un lápiz USB sin más historias. De los programas indicados en algunas páginas web (por ejemplo, ésta) para extraer vídeo de DVDs en linux, y aunque ya había usado Dvd::Rip, el que más me interesaba era Handbrake. Además, mucha gente también piensa así.
El primer problema es que no esta disponible en los repositorios de Fedora. Como se puede ver en la Web de HandBrake, parece que solo se hacen binarios para Debian/Ubuntu; sin embargo, rápidamente encontré una página para bajar un binario rpm e instalarlo.
Luego el ripeo fue sencillo, ya que no eran DVDs protegidos, y la conversión se hizo rápidamente. El contenedor, en vez de mp4 decidí escoger MKV y listo.


Por cierto, a pesar de usar un ordenador bastante antiguo, los dos DVDs de 40 y 20 minutos se ripearon y transformaron en unos 10 minutos.

martes, 13 de mayo de 2014

Extraer pistas de audio de un fichero matroska. Una más del terminal

Hoy tenía dos ficheros mkv del mismo vídeo.


Uno, de bastante buena calidad, dual. El otro, de más alta calidad aun, solo VOSE (Versión Original Subtitulada en Español). Aun reconociendo las ventajas de la versión original, me cuesta seguir el inglés en las películas y no me gusta pasarme 90 minutos leyendo los subtítulos. Mi intención era probar si el doblaje de un fichero estaba sincronizado para el otro. Lo primero es extraer el sonido. Si bien hace años hice mis pinitos en ripeos y codificaciones, desde hace mucho tiempo lo he dejado para la nueva generación, así que nunca he extraído un sonido de un contenedor mkv. En una búsqueda rápida la primera entrada dice "...Este método sólo funciona en Windows, ya que el MKVextractGUI-2 sólo está disponible para este S.O.".
Como usuario de Linux me fastidió algo la afirmación, así que en la búsqueda puse como primera palabra Linux. Como era de esperar, tenemos un montón de formas de hacerlo, y entre las muchas posibilidades decidí la más sencilla, la del terminal:

mkvextract tracks fichero.mkv 2:fichero.ac3

y listo.

Ahora queda comprobar la sincronización del sonido A con el vídeo B, aunque tienen el mismo origen y deberían funcionar.

lunes, 30 de julio de 2012

mkvtoolnix : ficheros matroska y el terminal

Hoy me encontrado en una situación de la que solo se sale con el terminal. Había obtenido dos versiones de la misma película animada en contenedores matroska. La primera, con resolución 720p, dual y con subtítulos, tanto en español (forzado y completo) como en inglés. La segunda, a 1080p, Dual, pero solo con subtítulos en inglés. La versión a 1080p tiene una calidad tal que he estado varios minutos disfrutando de diferentes escenas y viendo la calidad que se puede alcanzar. El problema está en que para que los niños puedan utilizar esas películas para algo más que divertirse (familiarizarse con el inglés, en resumen), es preciso que dispongan de subtítulos es español. Nunca había intentado extraer pistas de un contenedor matroska, y para su introducción (en general doblaje español) utilizo la GUI -aplicación gráfica- mkvtoolnix-gui. Sin embargo no he encontrado la forma gráfica de extraer las pistas, pero gracias a algún usuario, he visto que a través de las mkvtoolnix mediante línea de comandos -CLI- es muy fácil extraer los subtítulos en el terminal. Simplemente aplicamos inicialmente

mkvinfo fichero.mkv

con lo cual podemos leer a que número de pista corresponden los subtítulos. Una vez conocido, simplemente supone ejecutar

mkvextract tracks fichero.mkv 4:fichero_for.srt
mkvextract tracks fichero.mkv 5:fichero.srt

y ya dispongo de los subtítulos -forzados y completos- en español. Luego simplemente introducirlos en la versión de 1080p. Perfecto, simple, rápido (2 minutos). En una palabra, terminal y aplicaciones CLI.

Para más ayuda,

mkvextract --help

o visitar esta página web.

No discuto que haya aplicaciones gráficas que lo puedan hacer; es posible, yo no lo sé; simplemente, el terminal funciona.

miércoles, 6 de junio de 2012

Transformación de vídeos de Youtube. Episodio 2

Tras diferentes intentos sobre los vídeos comentados en la entrada anterior, podemos resumir los resultados obtenidos hasta ahora.
1. Los ficheros obtenidos con formato webm son fáciles de cortar y, a pesar de que los ficheros originales presentan un error de duplicación de imágenes, debido a que ese contenedor depende del formato matroska, las mkvtoolnix nos permite unirlos aunque la frecuencia de imágenes de los dos cortes no sea idéntica. Con ello logramos un corte webm de 6 minutos que queda perfecto (no lo cuelgo por que no creo tener derechos para hacerlo, ya que seguramente existen Copyright).
2. El objetivo de tener un formato más abierto choca con los errores de los ficheros originales. Todos los tipos de ficheros bajados con youtube-dl (flv, mp4 y webm) generan pérdidas de "frames" que hacen que los cortes tengan frecuencias distintas de imágenes y no se puedan unir mediante mencoder o, incluso, VirtualDub.
3. El intento de VirtualDub me ha sorprendido, ya que al hacerlo a través de wine, sin codecs en el emulador, creí que sería posible. Primero he transformado los flv de la parte 2 y 3 a un contenedor avi  con codec xvid de vídeo y mp3 de audio mediante mencoder (30 frames perdidas en la parte 2 y 1 en la parte 3)

mencoder vXto9zcwlZg.flv -o salida1.avi -oac mp3lame -lameopts br=128 -ovc xvid -xvidencopts bitrate=1200

mencoder KNjQBzp-q5Y.flv -o salida2.avi -oac mp3lame -lameopts br=128 -ovc xvid -xvidencopts bitrate=1200

Sin embargo, al intentar unirlos por un simple append en VirtualDubMod 1.5.2 me ha dado un mensaje claro; la diferente frecuencia no hace posible la unión


4. Sorprendentemente, si he podido unir esos esos mismos ficheros avi mediante avidemux. Además he podido cortar el inicio, el fin. Los anuncios solo he podido eliminarlos en parte, seguramente debido a que se han generado imágenes maestras con gran separación, con lo que no es posible cortar después de la última imagen maestra. Se podría corregir, supongo, marcando en la transformación con mencoder una frecuencia por ejemplo de 1 cada 30, en vez de 1 cada 300, que suele ser lo habitual (aunque en mencoder no lo sé). Sin embargo el resultado final es bueno en imagen, pero el sonido acaba varios segundos antes que el vídeo, a pesar de que en los los dos avis transformados el propio mencoder había sincronizado midiendo el "delay" de 0,026 segundos al transformar.

Para terminar, se ha logrado el vídeo deseado, pero solo en formato webm. Los intentos de conseguir un formato más "estándar" han provocado desincronías de imagen y sonido debido a errores en los vídeos originales. Curiosamente, a pesar de haber trabajado mucho más con winff hasta el día de hoy, hemos logrado mejores resultados con mencoder que con ffmpeg.

No quiero olvidarme de dar las gracias a hckorootx por todo el tiempo que ha dedicado para encontrar una posible solución que nos permitiera obtener el vídeo que buscábamos.


viernes, 1 de junio de 2012

Vídeos webm; cortar y unir

Por razones de docencia, me interesaba unos minutos del episodio sobre el Ártico de Beyond Survival. Como es natural, es muy sencillo conseguirlo en Youtube, ya que en general estos programas están colgados en su versión inglesa. Si alguién tiene curiosidad, en Youtube solo hay que buscar beyond survival artic, y encontrará el programa dividido en 5 partes. el problema reside en que lo que nos interesa era el final de la parte 2 y el principio de la parte 3. ¿Como lograrlo?

1. Bajar los ficheros. Tenemos varias opciones; lo más fácil es usar la extensión DownloadHelper en Firefox. En Chrome/Chromium tenéis aplicaciones o extensiones para que os aparezca en los ficheros de youtube la opción de descarga. Finalmente, en terminal (¡por supuesto!) existe la aplicación youtube-dl. Bajamos mediante youtube-dl todas las partes

youtube-dl url

Las partes 2 y 3 corresponden por ejemplo a:

youtube-dl http://www.youtube.com/watch?v=vXto9zcwlZg
youtube-dl http://www.youtube.com/watch?v=KNjQBzp-q5Y

Los ficheros que obtuve fueron del formato webm, descrito en su faq como

"WebM is an open media file format designed for the web. WebM files consist of video streams compressed with the VP8 video codec and audio streams compressed with the Vorbis audio codec. The WebM file structure is based on the Matroska media container."

Los que prefieran trabajar en otros formatos, la solución es

youtube-dl --all-formats url

Y así bajará todos los contenedores presentes (webm, flv, mp4...).

Se observaron los vídeos, anotando los segundos iniciales y finales de cada parte para los siguientes pasos.

2. Recortar los vídeos. Las GUI de las que disponía no me permitieron cortar de forma fácil el vídeo, así que me fui a las aplicaciones CLI. Lo más sencillo es recurrir a ffmpeg

ffmpeg -i video.webm -vcodec copy -ss 190 -t 320 -acodec copy corte1.avi

siendo
-vcodec copy y -acodec copy significa que no alteramos los vídeos, manteniendo los codecs de video y audio, ya que solo queremos cortar
-ss 190 el segundo donde empieza el corte (en este caso de la parte 2)
-t 320 el tiempo de duración en segundos que yo quiero a partir de ese 190


3. Unir los dos cortes. No todos los formatos de vídeo permiten la unión con una simple concatenación. En el caso de que fuera así, con un simple cat los podemos unir

cat video1.mpeg video2.mpeg > video.mpeg

El ejemplo indica vídeos mpeg, ya que vídeos así sí se pueden concatenar. En el caso de webm no funciona. Una solución es la transformación previa , por ejemplo a mpeg, pero eso supone una pérdida de calidad, solo para unir, así que hay que evitarlo. Gracias a esta dirección, descubrí que se pueden unir utilizando las mkvtoolnix

mkvmerge -o video.webm corte1.webm +corte2.webm

lo que tiene sentido, si el formato webm está basado (ver arriba) en el contenedor matroska. Según otras páginas, tambien es posible hacerlo de forma gráfica, con las mkvtoolnix-gui, pero no lo he probado.

Todo ello me ha dejado un vídeo de unos 6 minutos que contienen exactamente lo que yo quería, una piel de caribu con larvas de Hypoderma tarandi, es decir, con barros. De esta forma podemos enseñar diferentes especies de estas moscas parásitas afectando a otros hospedadores diferentes a los de aquí, las vacas.

4. Recodificación
Solo queda un último paso, que es la transformación de ese webm a otro formato que se pueda proyectar en casos en que no haya disponibilidad de red y con ordenadores de pocas prestaciones, antiguos, sin codecs, etc... Sin embargo, por ahora he tenido problemas. Winff gráfico y las ffmpeg en terminal indican errores que impiden la conversión. Debido a dependencias de librerías, solo puedo instalar transmageddon en la versión 0.16-1, y no lo puedo configurar adecuadamente para conseguir un vídeo razonable. Mencoder en terminal

mencoder video.webm -ovc xvid -oac mp3lame -lameopts abr:br=128 -xvidencopts bitrate=1200 -o video.avi

genera un video con desincronización de sonido respecto al vídeo. y de una calidad baja, así que tendré que leer más sobre mencoder. Las aplicaciones gráficas generan órdenes de decenas o centenares de líneas, que exigen un conocimiento a alto nivel que no tengo.

Lo logrado por ahora genera un vídeo perfecto para lo que queremos y que podemos usar fácilmente en muchas circunstancias. El problema es, por ejemplo, si queremos introducirlo como tal dentro de una presentación, si vamos a usar un portatil desconocido sin conexión a Internet en aulas aisladas, conferencias donde no sabemos de que vamos a disponer etc... Para evitar esos problemas, es recomendable llevar varios formatos del vídeo en el bolsillo. Seguiremos indagando.

jueves, 19 de enero de 2012

NTFS, MKV y totem

He detectado un nuevo problema en el uso de discos externos. Coincide además con discos NTFS. La copia es la siguiente, de un disco NTFS a otro NTFS, con un ordenador con Fedora 16 64bits como "ejecutor" de la acción, y siendo los ficheros multimedia contenedores matroska de vídeo. La orden de copia se hace desde un nautilus como administrador llamado desde un terminal

$ su -
palabra
# nautilus

A lo largo de la larga copia aparece en el terminal un mensaje cada minuto diciendo que totem-video-thumbnailer era incapaz de leer la imagen, lo que contribuye al consumo de recursos (no grabé ninguna imagen por que el ordenador estaba muy "ocupado"). Para terminar, al intentar desmontar de forma gráfica, aparece este bloqueo.


Tuve que desmontar en terminal. Este error solo aparece en discos con ficheros matroska (MKV). Quizá totem sea una de las causas de este gran consumo de CPU.