Convertir un video a formato OGG para HTML5

  • 20 Feb 2015
  • ffmpeg, Linux, media

Una buena práctica para publicar videos en la web es la de ofrecerlo en más de un formato.. uno de estos es el formato OGG.. que en realidad se trata de un contenedor que recomienda utilizar Theora para el video y Vorbis para el audio audio.

El requerimiento mínimo que me pongo es que el video se vea con la misma calidad.. aunque tenga que pagar más hosting. Para esto, será necesitario descubrir un poco de información sobre el video original.

# ffmpeg -i mivideo.mp4 
ffmpeg version 2.5.4 Copyright (c) 2000-2015 the FFmpeg developers
  built on Mar  1 2015 21:31:55 with gcc 4.8 (SUSE Linux)
  configuration: --shlibdir=/usr/lib64 --prefix=/usr --mandir=/usr/share/man --libdir=/usr/lib64 --enable-shared --disable-static --enable-debug --disable-stripping --extra-cflags='-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g' --enable-pic --optflags='-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g' --enable-gpl --enable-x11grab --enable-version3 --enable-pthreads --datadir=/usr/share/ffmpeg --enable-avfilter --enable-libpulse --enable-libvpx --enable-libopus --enable-libass --enable-libx265 --enable-libmp3lame --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libxvid --enable-libx264 --enable-libschroedinger --enable-libgsm --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-postproc --enable-libdc1394 --enable-librtmp --enable-libfreetype --enable-avresample --enable-libtwolame --enable-libvo-aacenc --enable-gnutls --enable-frei0r --enable-libcelt --enable-libcdio --enable-ladspa
  libavutil      54. 15.100 / 54. 15.100
  libavcodec     56. 13.100 / 56. 13.100
  libavformat    56. 15.102 / 56. 15.102
  libavdevice    56.  3.100 / 56.  3.100
  libavfilter     5.  2.103 /  5.  2.103
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'mivideo.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2015-02-19 05:19:03
  Duration: 00:00:29.98, start: 0.000000, bitrate: 1290 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 1096 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default)
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 192 kb/s (default)
    Metadata:
      creation_time   : 2015-02-19 05:19:03
      handler_name    : IsoMedia File Produced by Google, 5-11-2011

De la información que nos ofrece ffmpeg, saco lo necesario:

  • Video: 1280x720 1096 kb/s

  • Audio: 192 kb/s

Con estos datos, ahora sí, el comando para convertir el video original al formato OGG sería:

ffmpeg -i mivideo.mp4 \
 -acodec libvorbis -vcodec libtheora \ 
 -ac 2 -ab 96k -ar 44100 -b:v 1346764 -b:a 196608 -s 1280x720 mivideo.ogv

Para convertir el video utilizando VBR (variable bitrate) utilzar las opciones -qscale:v y -qscale:a con valores del 0 al 10, donde 10 es la calidad más alta y 0 la más baja. Con valores de 5 a 7 se obtiene un buena calidad

ffmpeg -i input.mkv -codec:v libtheora -qscale:v 6 -codec:a libvorbis -qscale:a 6 output.ogv

Por último, de yapa, con este comando se convierte a formato mkv

ffmpeg -i input.mp4  -c:v libx264 -preset slow -qp 0 output.mkv

Eso es todo amigos!