MPlayer - El reproductor de Películas para LINUX

http://www.mplayerhq.hu

Licencia

Este programa es software libre; usted puede distribuirlo y/o modificarlo bajo los términos de la Licencia Pública General GNU, tal y como está publicada por la Free Software Foundation; ya sea la versión 2 de la Licencia, o (a su elección) cualquier versión posterior.

Este programa se distribuye con la intención de ser útil, pero SIN NINGUNA GARANTÍA; incluso sin la garantía implícita de USABILIDAD O UTILIDAD PARA UN FIN PARTICULAR. Vea la Licencia Pública General GNU para más detalles.

Usted debería haber recibido una copia de la Licencia Pública General GNU junto a este programa; si no es así, escriba a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.


Como leer esta documentación
1. Introducción
2. Instalación
2.1. Requerimientos de Software
2.2. Características
2.3. ¿Qué hay acerca de la GUI?
2.4. Subtítulos y OSD
2.4.1. El formato de subtítulos propio de MPlayer (MPsub)
2.4.2. Instalando OSD y subtítulos
2.4.3. Menú en pantalla
2.5. instalación de codecs
2.5.1. XviD
2.6. RTC
3. Uso
3.1. Línea de órdenes
3.2. Control
3.2.1. Configuración de los controles
3.2.1.1. Nombres clave
3.2.1.2. Órdenes
3.2.2. Control desde LIRC
3.2.3. Modo esclavo
3.3. Streaming desde la red o tuberías
3.4. Flujos remotos
3.4.1. Compilando el servidor
3.4.2. Usando flujos remotos
3.5. Unidades de CD/DVD
3.6. Reproducción de DVD
3.7. Reproducción de VCD
3.8. Listas de Decisión de Edición (EDL)
3.8.1. Usando un archivo EDL
3.8.2. Haciendo un archivo EDL
3.9. Entrada de TV
3.9.1. Compilación
3.9.2. Consejos de Uso
3.9.3. Ejemplos
3.10. Radio
3.10.1. Usage tips
3.10.2. Examples
4. Dispositivos de salida de video
4.1. Configurando MTRR
4.2. Salidas de video para tarjetas de video tradicionales
4.2.1. Xv
4.2.1.1. Tarjetas 3dfx
4.2.1.2. Tarjetas S3
4.2.1.3. Tarjetas nVidia
4.2.1.4. Tarjetas ATI
4.2.1.5. Tarjetas NeoMagic
4.2.1.6. Tarjetas Trident
4.2.1.7. Tarjetas Kyro/PowerVR
4.2.2. DGA
4.2.3. SDL
4.2.4. SVGAlib
4.2.5. Salida en framebuffer (FBdev)
4.2.6. Framebuffer de Matrox (mga_vid)
4.2.7. Soporte 3Dfx YUV
4.2.8. Salida OpenGL
4.2.9. AAlib - reproduciendo en modo texto
4.2.10. libcaca - Biblioteca de Arte AsCii en color
4.2.11. VESA - salida en VESA BIOS
4.2.12. X11
4.2.13. VIDIX
4.2.13.1. Tarjetas ATI
4.2.13.2. Tarjetas Matrox
4.2.13.3. Tarjetas Trident
4.2.13.4. Tarjetas 3DLabs
4.2.13.5. Tarjetas nVidia
4.2.13.6. Tarjetas SiS
4.2.14. DirectFB
4.2.15. DirectFB/Matrox (dfbmga)
4.3. Decodificadores MPEG
4.3.1. DVB salida y entrada
4.3.2. DXR2
4.3.3. DXR3/Hollywood+
4.4. Otro hardware de visualización
4.4.1. Zr
4.4.2. Blinkenlights
4.5. Soporte de salida-TV
4.5.1. Tarjetas Matrox G400
4.5.2. Tarjetas Matrox G450/G550
4.5.3. Tarjetas ATI
4.5.4. Voodoo 3
4.5.5. nVidia
4.5.6. Neomagic
5. Adaptaciones
5.1. Linux
5.1.1. Empaquetado para Debian
5.1.2. Empaquetado RPM
5.1.3. ARM Linux
5.2. *BSD
5.2.1. FreeBSD
5.2.2. OpenBSD
5.2.3. Darwin
5.3. Sun Solaris
5.4. HP UX
5.5. QNX
5.6. Windows
5.6.1. Cygwin
5.6.2. MinGW
5.7. Mac OS
6. Codificando con MEncoder
6.1. Codificación MPEG-4 en 2 o 3-pasadas ("DivX")
6.2. Codificando a formato MPEG
6.3. Reescalando películas
6.4. Copia de flujos
6.5. Arreglando AVIs con índice roto o interpolado
6.5.1. Uniendo mútiples archivos AVI
6.6. Codificando con la familia de codecs de libavcodec
6.7. Codificando desde múltiples archivos de imágenes de entrada (JPEGs, PNGs o TGAs)
6.8. Extrayendo subtítulos DVD a archivo Vobsub
6.9. Preservando relación de aspecto
6.10. Matrices inter/intra personalizadas
6.11. Haciendo un MPEG4 ("DivX") de alta calidad al ripear una película en DVD
6.11.1. Recortando
6.11.2. Nivel de calidad
6.11.3. Archivos más grandes de 2GB
6.11.4. Desentrelazado
6.11.5. Inversión de telecine
6.11.6. Escalado y razón de aspecto
6.11.7. Sumando todo esto
6.12. Cómo tratar con telecine y entrelazado con DVDs NTSC
6.12.1. Cómo decir el tipo de video que tiene
6.12.1.1. Progresivo
6.12.1.2. Telecine
6.12.1.3. Entrelazado
6.12.1.4. Mezcla progresiva y telecine
6.12.1.5. Mezcla de progresivo y entrelazado
6.12.2. Cómo codificar cada categoría
6.12.2.1. Progresivo
6.12.2.2. Telecine
6.12.2.3. Entrelazado
6.12.2.4. Mezcla de progresivo y telecine
6.12.2.5. Mezcla de progresivo y entrelazado
6.12.3. Notas a pie de página
7. Encoding with MEncoder
7.1. Making a high quality MPEG-4 ("DivX") rip of a DVD movie
7.1.1. Preparing to encode: Identifying source material and framerate
7.1.1.1. Identifying source framerate
7.1.1.2. Identifying source material
7.1.2. Constant quantizer vs. multipass
7.1.3. Constraints for efficient encoding
7.1.4. Cropping and Scaling
7.1.5. Choosing resolution and bitrate
7.1.5.1. Computing the resolution
7.1.6. Filtering
7.1.7. Interlacing and Telecine
7.1.8. Encoding interlaced video
7.1.9. Notes on Audio/Video synchronization
7.1.10. Choosing the video codec
7.1.11. Audio
7.1.12. Muxing
7.1.12.1. Improving muxing and A/V sync reliability
7.1.12.2. Limitations of the AVI container
7.1.12.3. Muxing into the Matroska container
7.2. How to deal with telecine and interlacing within NTSC DVDs
7.2.1. Introduction
7.2.2. How to tell what type of video you have
7.2.2.1. Progressive
7.2.2.2. Telecined
7.2.2.3. Interlaced
7.2.2.4. Mixed progressive and telecine
7.2.2.5. Mixed progressive and interlaced
7.2.3. How to encode each category
7.2.3.1. Progressive
7.2.3.2. Telecined
7.2.3.3. Interlaced
7.2.3.4. Mixed progressive and telecine
7.2.3.5. Mixed progressive and interlaced
7.2.4. Footnotes
7.3. Encoding with the libavcodec codec family
7.3.1. libavcodec's video codecs
7.3.2. libavcodec's audio codecs
7.3.2.1. PCM/ADPCM format supplementary table
7.3.3. Encoding options of libavcodec
7.3.4. Encoding setting examples
7.3.5. Custom inter/intra matrices
7.3.6. Example
7.4. Encoding with the Xvid codec
7.4.1. What options should I use to get the best results?
7.4.2. Encoding options of Xvid
7.4.3. Encoding profiles
7.4.4. Encoding setting examples
7.5. Encoding with the x264 codec
7.5.1. Encoding options of x264
7.5.1.1. Introduction
7.5.1.2. Options which primarily affect speed and quality
7.5.1.3. Options pertaining to miscellaneous preferences
7.5.2. Encoding setting examples
7.6. Encoding with the Video For Windows codec family
7.6.1. Video for Windows supported codecs
7.6.2. Using vfw2menc to create a codec settings file.
7.7. Using MEncoder to create QuickTime-compatible files
7.7.1. Why would one want to produce QuickTime-compatible Files?
7.7.2. QuickTime 7 limitations
7.7.3. Cropping
7.7.4. Scaling
7.7.5. A/V sync
7.7.6. Bitrate
7.7.7. Encoding example
7.7.8. Remuxing as MP4
7.7.9. Adding metadata tags
7.8. Using MEncoder to create VCD/SVCD/DVD-compliant files
7.8.1. Format Constraints
7.8.1.1. Format Constraints
7.8.1.2. GOP Size Constraints
7.8.1.3. Bitrate Constraints
7.8.2. Output Options
7.8.2.1. Aspect Ratio
7.8.2.2. Maintaining A/V sync
7.8.2.3. Sample Rate Conversion
7.8.3. Using libavcodec for VCD/SVCD/DVD Encoding
7.8.3.1. Introduction
7.8.3.2. lavcopts
7.8.3.3. Examples
7.8.3.4. Advanced Options
7.8.4. Encoding Audio
7.8.4.1. toolame
7.8.4.2. twolame
7.8.4.3. libavcodec
7.8.5. Putting it all Together
7.8.5.1. PAL DVD
7.8.5.2. NTSC DVD
7.8.5.3. PAL AVI Containing AC-3 Audio to DVD
7.8.5.4. NTSC AVI Containing AC-3 Audio to DVD
7.8.5.5. PAL SVCD
7.8.5.6. NTSC SVCD
7.8.5.7. PAL VCD
7.8.5.8. NTSC VCD
8. Preguntas de Usuario Frecuentes
A. Cómo reportar errores
A.1. Cómo corregir fallos
A.2. Cómo informar de errores
A.3. Dónde informar de los errores
A.4. De qué informar
A.4.1. Información del Sistema
A.4.2. Hardware y controladores
A.4.3. Problemas de configuración
A.4.4. Problemas de compilación
A.4.5. Problemas de reproducción
A.4.6. Cuelgues
A.4.6.1. Cómo conservar información acerca de un error reproducible
A.4.6.2. Cómo extraer información significativa desde un volcado core
A.5. Yo sé lo que estoy haciendo...
B. Formato del skin de MPlayer
B.1. Visión general
B.1.1. Directorios
B.1.2. Formato de las imágenes
B.1.3. Componentes del skin
B.1.4. Archivos
B.2. El archivo de skin
B.2.1. Ventana principal y barra de reproducción
B.2.2. Subventana
B.2.3. Menú del skin
B.3. Tipografías
B.3.1. Símbolos
B.4. Mensajes GUI

Como leer esta documentación

Si es la primera vez que va a instalarlo: asegúrese de leer todo desde aquí hasta el final de la sección de instalación, y siga los enlaces que vaya encontrando. Si tiene otras preguntas, vuelva a la Tabla de Contenidos y busque el asunto particular, lea las preguntas frecuentes, o intente usando grep entre los archivos. La mayoría de las cuestiones debe estar contestadas en algún lugar de por aquí y el resto probablemente ya haya sido preguntado en nuestras listas de correo. Compruebe los archivos, hay un montón de información valiosa allí.

Capítulo 1. Introducción

MPlayer es un reproductor de películas para Linux (corre en muchos otros Unices, y en CPUs no-x86, vea la sección de adaptaciones). Puede reproducir casi todos los archivos MPEG, VOB, AVI, OGG/OGM, VIVO, ASF/WMA/WMV, QT/MOV/MP4, FLI, RM, NuppelVideo, yuv4mpeg, FILM, RoQ, PVA y Matroska, soportado por muchos codecs nativos, de XAnim, de RealPlayer y de DLL de Win32. Puede ver películas en formato VideoCD, SVCD, DVD, 3ivx, RealMedia, Sorenson, Theora, y DivX también (¡y no es necesaria la librería avifile!). Otra gran característica de MPlayer es el amplio rango de controladores de salida soportados. Funciona con X11, Xv, DGA, OpenGL, SVGAlib, fbdev, AAlib, libcaca, DirectFB, ¡pero también puede usar GGI y SDL (y de esta manera todos sus controladores) y algunos controladores de bajo nivel específicos de algunas placas (para Matrox, 3Dfx y Radeon, Mach64, Permidia3)! Casi todos ellos soportan escalado por software o hardware, por lo que puede disfrutar de las películas en pantalla completa. MPlayer soporta mostrado sobre algunas placas decodificadoras por hardware de MPEG, como la DVB y DXR3/Hollywood+. ¿Y que tal los grandes y bonitos subtítulos sombreados y con efecto antialias ( se soportan 10 tipos de subtítulos) con fuentes Europeas/ISO 8859-1,2 (Húngara, Inglesa, Checa, etc), Cirílica, Coreana, y el mostrado en pantalla (OSD)?

El reproductor es solido como una piedra reproduciendo archivos MPEG dañados (útil para algunos VCDs), y reproduce archivos AVI incorrectos que no es posible reproducirlos con el famoso reproductor de medios de Windows. Hasta archivos AVI sin la información de índice, y puede temporalmente reconstruir sus índices con la opción -idx, o permanentemente con MEncoder, ¡y con eso permitir la búsqueda! Como ve, la estabilidad y la calidad son muy importantes, pero la velocidad también es asombrosa.

MEncoder (el codificador de películas de MPlayer) es un codificador de películas simple, diseñado para codificar películas que MPlayer pueda reproducir (AVI/ASF/OGG/DVD/VCD/VOB/MPG/MOV/VIV/FLI/RM/NUV/NET/PVA) a otros formatos también reproducibles por MPlayer (ver más abajo). Puede codificar con varios codecs, como DivX4 (1 o 2 pasadas), libavcodec, audio PCM/MP3/VBR MP3. Además posee un poderoso sistema de plugin para la manipulación de vídeo.

Características de MEncoder

  • Codificación desde una amplia variedad de formato de archivos y decodificadores de MPlayer

  • Codificación a todos los codecs soportados por ffmpeg libavcodec

  • Codificación de vídeo desde un sintonizador de TV compatible con V4L

  • Codificación/Multiplexación de archivos AVI entrelazados con su respectivo índice.

  • Creación de archivos desde flujos de audio externos.

  • Codificación en 1, 2 o 3 pasadas.

  • Audio MP3 VBR

    Importante

    ¡El audio MP3 VBR no siempre se reproduce muy bien en los reproductores de Windows!

  • audio PCM

  • Copia de flujos (de audio y vídeo)

  • Sincronización de entrada de A/V (basada en PTS, puede ser desactivada con la opción -mc 0)

  • Corrección de cuadros por segundo con la opción -ofps (útil cuando se esta codificando 29.97 cps VOB a AVI con 24 cps).

  • Usa nuestro poderoso sistema de plugin (cortar, expandir, invertir, post-procesar, rotar, escalar, conversión rgb/yuv)

  • Puede codificar DVD/VOBsub yel texto de subtítulos en el archivo de salida

  • Puede extraer los subtítulos de DVD al formato VOBsub

Características planeadas

  • Aun una variedad más amplia de formatos de de/codificación de formatos/codecs (creación de archivos VOB con flujos DivX4/Indeo5/VIVO :).

MPlayer y MEncoder pueden ser distribuidos bajo los términos de la Licencia GNU General Public License Version 2 (GPL v.2).

Capítulo 2. Instalación

Una guía de instalación rápida puede encontrarse en el archivo README. Por favor, léala primero y luego vuelva aquí para obtener el resto de detalles sanguinolientos.

En esta sección trataré de guiarlo a través del proceso de compilación y configuración de MPlayer. No es fácil, pero no necesariamente difícil. Si experimenta un comportamiento diferente al que explico, por favor busque en esta documentación y encontrará las respuestas. Si ve un enlace, por favor sigalo y lea atentamente su contenido. Le llevará algún tiempo, pero vale la pena.

Necesita un sistema relativamente reciente. En Linux, un sistema con núcleo 2.4.x es recomendado.

2.1. Requerimientos de Software

  • binutils - la versión sugerida es 2.11.x. Este programa es el responsable de generar instrucciones MMX/3DNow!/etc, por lo tanto muy importante.

  • gcc - versiones recomendadas son 2.95 y 3.3+. 2.96 y 3.0.x generan código con fallas, 3.1 y 3.2 tambien tuvieron sus problemas.

  • XFree86 - versión sugerida siempre la más nueva (4.3). Normalmente, todos quieren esto, desde XFree 4.0.2, viene con la extensión XVideo (referida en varios lugares como Xv) que se usa en efecto para activar la aceleración YUV por hardware (mostrado rápido de imagen) en placas que lo soportan. Asegúrese que el paquete de desarrollo este también instalado, de otra manera no funcionará. Para algunas placas de vídeo no se necesita XFree86. Vea el listado abajo.

  • make - versión sugerida siempre la última (por lo menos la 3.79.x). Esto normalmente no es importante.

  • SDL - no es obligatoria, pero puede ayudar en algunos cosas (audio malo, placas de vídeo que sufren retardo extraños con el controlador xv). Siempre use la versión más actual (empezando por 1.2.x).

  • libjpeg - decodificador opcional de JPEG, usado por la opción -mf y algunos archivos MOV de QT. Útil para ambos MPlayer y MEncoder si planea trabar con archivos jpeg.

  • libpng - recomendado y decodificador por omisión de (M)PNG. Necesario para la IGU. Útil para ambos MPlayer y MEncoder.

  • lame - recomendado, necesario para codificar audio en MP3 audio con MEncoder, la versión recomendada es siempre la más nueva (por lo menos 3.90).

  • libogg - opcional, necesaria para reproducir archivos con formato OGG.

  • libvorbis - opcional, necesario para reproducir archivos de audio OGG Vorbis.

  • LIVE.COM Streaming Media - opcional, necesario para reproducir flujos RTSP/RTP.

  • directfb - opcional, de http://www.directfb.org

  • cdparanoia - opcional, para soporte de CDDA

  • libfreetype - opcional, para soporte de fuentes TTF Versión mínima requerida es 2.0.9.

  • libxmms - opcional, para soporte de plugins de entrada de XMMS La versión mínima necesaria es 1.2.7.

  • libsmb - opcional, para soporte Samba.

  • libmad - opcional, para decodificación rápida de MP3 en plataformos sin FPU.

2.2. Características

  • Decida si necesita GUI (interfaz gráfica de usuario). Si lo necesita, vea la sección GUI antes de compilar.

  • Si desea instalar MEncoder (nuestro gran codificador multiproposito), vea la sección MEncoder.

  • Si tiene una placa sintonizadora de TV compatible con V4L, y desea usarla para ver/capturar y codificar películas con MPlayer, lea la sección entrada de TV.

  • Existe un buen soporte de Menu en Pantalla listo para ser usado. Verifique la sección Menú en Pantalla.

Lo siguiente es armar MPlayer:

./configure
make
make install

En este punto, MPlayer ya está listo para usar. El directorio $PREFIX/share/mplayer contiene el archivo codecs.conf, que se lo usa para decirle al programa todos los codecs y sus posibilidades. Este archivo es necesario solo cuando quiera cambiar sus propiedades, ya que el archivo ejecutable principal contiene una copia interna del mismo. Revise si tiene el archivo codecs.conf en su directorio de inicio (~/.mplayer/codecs.conf) olvidado de alguna instalación previa de MPlayer y borrela.

Note que si tiene un codecs.conf en ~/.mplayer/, el codecs.conf interno y el de sistema serán ignorados por completo. No use esto a menos que quiera trapichear con las cosas internas de MPlayer lo que puede ocasionarle problemas. Si quiere cambiar el órden de búsqueda de los codecs, use la opción -vc, -ac, -vfm, o -afm en la línea de órdenes o en su archivo de configuración (vea la página de manual).

Los usuarios de Debian pueden construir un paquete .deb, es muy simple. Simplemente ejecute

fakeroot debian/rules binary

en el directorio raíz de MPlayer. Vea la sección paquetes de Debian para instrucciones más detalladas.

Siempre revise la salida de ./configure, y el archivo config.log, ellos contienen información acerca de lo que se compilará, y que no. Quizá quiera ver también los archivos config.h y config.mak. Si alguna de las librerías que tiene instaladas no fueron detectadas por ./configure, por favor revise si tiene los archivos de encabezados correspondientes (normalmente los paquetes -dev) y que sus versiones sean las mismas. El archivo config.log normalmente dice que falta.

Aunque no es obligatorio, las fuentes deberían ser instaladas para poder usar el texto en pantalla (OSD) y los subtítulos. El método recomendado es instalar una fuente TTF y avisarle a MPlayer que lo use. Vea la sección Subtítulos y OSD para más detalles.

2.3. ¿Qué hay acerca de la GUI?

La GUI necesita GTK 1.2.x (no es totalmente GTK, pero los paneles son). Las pieles están guardadas en formato PNG, por lo tanto GTK, libpng (y sus archivos de desarrollos, normalmente llamados gtk-dev y libpng-dev) deben estar instalados. Puede compilarlo especificando la opción --enable-gui a ./configure. Luego de compilarlo, puede usar el modo GUI, ejecutando el binario gmplayer.

Actualmente no se puede usar la opción -gui en la línea de comandos, debido a razones técnicas.

Como MPlayer no tiene una piel incluida, debe bajarlas si desea usar la GUI. Vea la página de descargas. Deberían ser extraídas al directorio global de pieles normal ($PREFIX/share/mplayer/skins/), o al directorio personal $HOME/.mplayer/skins/. MPlayer por omisión busca en esos directorios por un directorio llamado default, pero puede usar la opción -skin pielnueva, o usar la directiva skin=pielnueva en el archivo de configuración para usar el directorio */skins//pielnueva.

2.4. Subtítulos y OSD

MPlayer puede mostrar subtítulos juntos con los archivos de películas. Actualmente los siguientes formatos están soportados:

  • VobSub

  • OGM

  • CC (closed caption)

  • MicroDVD

  • SubRip

  • SubViewer

  • Sami

  • VPlayer

  • RT

  • SSA

  • PJS (Phonenix Japanimation Society)

  • MPsub

  • AQTitle

  • JACOsub

MPlayer puede volcar los formatos de subtítulos listados anteriormente (con excepción de los 3 primeros) en los siguientes formatos de salida con las opciones correspondientes:

  • MPsub: -dumpmpsub

  • SubRip: -dumpsrtsub

  • MicroDVD: -dumpmicrodvdsub

  • JACOsub: -dumpjacosub

  • Sami: -dumpsami

MEncoder puede volcar subtítulos de DVD en formato VobSub.

La linea de comando difiere levemente para los diferentes formatos:

Subtítulos VobSub.  Los subtítulos VobSub consisten de un gran (varios megabytes) archivo .SUB, y opcionalmente un archivo .IDX y/o un archivo .IFO. Si tiene archivos como ejemplo.sub, ejemplo.ifo (opcional), ejemplo.idx - entonces debe pasarle a MPlayer la opción -vobsub ejemplo [-vobsubid id] (la ruta completa es opcional). La opción -vobsubid es como la opción -sid para DVDs, puede elegir entre pistas de subtítulos (lenguajes) con ella. En el caso que -vobsubid se omita, MPlayer tratará de usar el lenguaje dado por la opción -slang y sino usará el langidx en el archivo .IDX para configurar el lenguaje de los subtítulos. Si esto falla no habrá subtítulos.

Otros subtítulos.  Los otros formatos consisten de un archivo de texto simple conteniendo el tiempo y la información del texto a colocar. Uso: si tiene un archivo como ejemplo.txt, debe pasarle a MPlayer la opción -sub ejemplo.txt (la ruta completa es opcional).

Ajustando la sincronización de subtítulos y su ubicación:

-subdelay seg

Retrasa los subtítulos en seg segundos. Puede ser un número negativo.

-subfps TASA

Especifica la tasa de cuadros por segundo del archivo de subtítulos (número flotante).

-subpos 0-100

Especifica la posición de los subtítulos.

Si experimenta un retraso creciente de retraso entre la película y los subtítulos cuando esta usando un archivo de subtítulos de MicroDVD, lo más probable es que la tasa de cuadros por segundo de la película y de los subtítulos sea diferente. Note que el formato de subtítulos de MicroDVD usa números de cuadros absoluto para su temporización, y por lo tanto la opción -subfps no puede ser usada con este formato. Como MPlayer no tiene una manera de adivinar la tasa de cuadros por segundo del archivo de subtítulos, debe convertirlo manualmente. Hay un pequeño guión de perl en el directorio contrib del sitio FTP deMPlayer que hace esa conversión.

Para más información acerca de subtítulos para DVD, lea la sección DVD.

2.4.1. El formato de subtítulos propio de MPlayer (MPsub)

MPlayer introduce un nuevo formato de subtítulos llamado MPsub. Fue diseñado por Gabucino. Básicamente su característica más importante es ser basado dinámicamente en el tiempo (a pesar de que tiene un modo por cuadros también). Un ejemplo (de DOCS/tech/mpsub.sub):

FORMAT=TIME
# primer número  : espera esto desde que el subtitulo anterior desapareció
# segundo número : mostrar el subtitulo actual esta cantidad de segundos

15 3
Hace mucho, mucho tiempo atrás...

0 3
en una galaxia muy lejana...

0 3
Naboo estaba bajo un ataque.

Como puede ver, el objetivo principal fue hacer la edición/temporización/unión y cortado de subtítulos más fácil. Y, si - por decirlo - consigue un subtitulo SSA pero esta mal temporizado o tiene problemas de retraso con su versión de la película, entonces puede hacer

mplayer vacío.avi -sub fuente.ssa -dumpmpsub

. Un archivo dump.mpsub se creara en el directorio actual, que contendrá la fuente del texto de los subtítulos, pero en el formato MPsub. Ahora puede agregar/quitar segundos a los subtítulos.

Los subtítulos son mostrados con una técnica llamada 'OSD', On Screen Display (Muestra en Pantalla). La muestra en pantalla se muestra para mostrar el tiempo, la barra de volumen, la barra de búsqueda, etc.

2.4.2. Instalando OSD y subtítulos

Necesita un paquete de tipografías para MPlayer para poder usar OSD/subtítulos. Hay muchas maneras de conseguirlo:

  • Use la herramienta generadora de tipografías en TOOLS/subfont-c. Es una herramienta completa para convertir una tipografía TTF/Type1/etc a tipografía pkg de MPlayer (lea TOOLS/subfont-c/README para más detalles).

  • Use el plugin de GIMP generador de tipografías en TOOLS/subfont-GIMP (nota: debe tener también el plugin HSI RAW, vea http://realtime.ssu.ac.kr/~lethean/mplayer/).

  • usando una tipografía TrueType (TTF), gracias a la biblioteca freetype. ¡La versión debe ser 2.0.9 o mayor! Entonces tiene 2 métodos:

    • use la opción -font /ruta/a/tipografía_ejemplo.ttf para especificar un archivo de tipografía TrueType en cada ocasión

    • cree un enlace simbólico:

      ln -s /ruta/a/tipografía_ejemplo.ttf ~/.mplayer/subfont.ttf

    Si MPlayer fue compilado con soporte para fontconfig, los métodos de arriba no funcionarán, en su lugar la opción -font espera un nombre de tipografía fontconfig y por defecto se usa la tipografía sans-serif. Para obtener una lista de los tipos de letra que conoce fontconfig, use fc-list. Ejemplo: -font 'Bitstream Vera Sans'

  • Descargue paquetes de fuentes listos para usar del sitio de MPlayer. Nota: actualmente las fuentes disponibles están limitadas al soporte ISO 8859-1/2, pero existen algunas otras fuentes (incluyendo Koreano, Ruso, ISO 8859-8, etc)en la sección contrib/font del FTP, hechas por los usuarios.

    Las fuentes deberían tener el archivo apropiado font.desc que mapea las posiciones de la fuente unicode al código de página real del texto de los subtítulos. Otra solución es tener los subtítulos codificados en formato UTF8 y usar la opción -utf8 o simplemente nombrar a los archivos de subtítulos <nombre_del_video>utf y tenerlo en el mismo directorio que el archivo de vídeo. La recodificación desde diferentes códigos de página a UTF8 lo puede hacer usando los programas konwert o iconv.

    Tabla 2.1. Algunas URLs

    URLComentario
    ftp://ftp.mplayerhq.hu/MPlayer/releases/fonts/ Fuentes ISO
    ftp://ftp.mplayerhq.hu/MPlayer/contrib/fonts/ varias fuentes hechas por usuarios
    http://realtime.ssu.ac.kr/~lethean/mplayer/ Tipografías Coreanas y plugin RAW


Si elige fuentes no TTF, descomprima el archivo que haya descargado a ~/.mplayer o $PREFIX/share/mplayer. Entonces renombre o enlace simbólicamente uno de los directorios extraídos a font, por ejemplo:

ln -s ~/.mplayer/arial-24 ~/.mplayer/font

Ahora debería ver un reloj en la esquina superior izquierda de la película (apaguelo pulsado la tecla o).

(los subtítulos están siempre activos, para desactivarlos por favor lea la página del manual).

OSD tiene 4 estados (cambielo con o):

  1. barra de volumen + barra de búsqueda (por omisión)

  2. barra de volumen + barra de búsqueda + reloj + posición porcentual del archivo cuando se busca

  3. barra de volumen + barra de búsqueda + reloj + duración total de la pelicula

  4. solamente subtítulos

Puede cambiar el comportamiento por omisión cambiando la variable osdlevel en el archivo de configuración, o con la opción -osdlevel de la línea de comando.

2.4.3. Menú en pantalla

MPlayer trae una interfaz de Menú en pantalla completamente configurable por el usuario.

Nota

¡el menú Preferencias no esta actualmente implementado!

Instalación

  1. compile MPlayer pasándole la opción --enable-menu a ./configure

  2. asegúrese de tener una fuente OSD instalada

  3. copie el archivo etc/menu.conf a su directorio .mplayer

  4. copie el archivo etc/input.conf a su directorio .mplayer, o al directorio general de configuración de MPlayer (por omisión: /usr/local/etc/mplayer)

  5. verifique y edite el archivo input.conf para activar las teclas de movimiento en el menú (está descripto en el archivo).

  6. inicie MPlayer como en el ejemplo:

    $ mplayer -menu archivo.avi

  7. pulse cualquier tecla de menú que haya definido

2.5. instalación de codecs

2.5.1. XviD

XviD es una derivación del desarrollo del codec OpenDivX. Esto ocurrió cuando ProjectMayo cambió OpenDivX a código cerrado DivX4 (ahora DivX5), y la gente del no-ProjectMayo que trabajaba en OpenDivX se cabreó, e inició XviD. Este es el motivo de que ambos proyectos tengan el mismo origen.

INSTALANDO XVID CVS

Actualmente está disponible solo desde CVS. Aquí tiene instrucciones para descargarlo e instalarlo (necesita al menos autoconf 2.50, automake y libtool):

  1. cvs -z3 -d:pserver:anonymous@cvs.xvid.org:/xvid login

  2. cvs -z3 -d:pserver:anonymous@cvs.xvid.org:/xvid co xvidcore

  3. cd xvidcore/build/generic

  4. ./bootstrap.sh

  5. ./configure

    Puede añadir algunas opciones (examine la salida de

    ./configure --help

    ).

  6. make && make install

  7. Si ha especificado --enable-divxcompat, copie ../../src/divx4.h a /usr/local/include/.

  8. Recompile MPlayer con --with-xvidlibdir=/ruta/a/libxvidcore.a --with-xvidincdir=/ruta/a/xvid.h

2.6. RTC

Existen tres métodos de temporización en MPlayer.

  • Para usar el método viejo, no tiene que hacer nada. Usa usleep() para ajustar la sincronización A/V, con una precisión de +/- 10ms. Sin embargo muchas veces la sincronización debe ser más precisa.

  • El nuevo código temporizador usa el RTC (Reloj de Tiempo Real) de su PC para esta tarea, ya que tiene precisión de 1ms. Es activado automágicamente cuando está disponible, pero requiere privilegios de administrador, que el archivo ejecutable de MPlayer tenga permiso de SUID root o un núcleo configurado apropiadamente. Si utiliza un núcleo 2.4.19pre8 o más nuevo entonces puede ajustar la frecuencia máxima del RTC para usuarios normales a través del sistema de archivo /proc. Use este comando para habilitar el RTC para usuarios normales:

    echo 1024 > /proc/sys/dev/rtc/max-user-freq

    Si no posee dicho núcleo actualizado, puede también cambiar una línea en el archivo drivers/char/rtc.c y recompilar el núcleo. Busque la sección que dice:

           * We don't really want Joe User enabling more
           * than 64Hz of interrupts on a multi-user machine.
           */
          if ((rtc_freq > 64) && (!capable(CAP_SYS_RESOURCE)))
       

    y cambie el 64 por 1024. Debería realmente saber lo que esta haciendo de todas maneras. Puede ver la eficiencia del nuevo temporizador en la línea de estado. Las funciones de administración de energía de BIOS de algunas notebooks con cambio de velocidad de CPUs interactúan muy mal con el RTC. El vídeo y el audio puede salirse de sincronía. Enchufar el conector de energía externo antes de encender su notebook parece ayudar a solucionar la situación. Siempre que desee puede apagar el soporte de RTC con la opción -nortc. En algunas combinaciones de hardware (confirmado durante el uso de un disco no-DMA de DVD en una placa ALi1541) el uso del RTC puede causar defectos en la reproducción. Es recomendado usar el tercer método en esos casos.

  • El tercer código de temporización es activado con la opción -softsleep. Tiene la eficiencia del RTC, pero no usa el RTC. Por otro lado requiere más CPU.

Nota

¡NUNCA instale un archivo ejecutable de MPlayercon permisos de SUID root en un sistema multiusuario! Es una manera fácil para cualquiera de convertirse en administrador.

Capítulo 3. Uso

3.1. Línea de órdenes

MPlayer utiliza un árbol de juego complejo. Consiste en escribir las opciones globales las primeras, por ejemplo

mplayer -vfm 5

y las opciones escritas después de los nombres de archivos, que se aplican solamente al nombre de archivo/URL/lo que sea, por ejemplo:

mplayer -vfm 5 pelicula1.avi pelicula2.avi -vfm 4

Puede agrupar nombres de archivo/URLs usando { y }. Esto es útil con la opción -loop:

mplayer { 1.avi - loop 2 2.avi } -loop 3

La órden de arriba reproduce los archivos en este orden: 1, 1, 2, 1, 1, 2, 1, 1, 2.

Reproduciendo un archivo:

mplayer [opciones] [ruta/]nombre-archivo

Reproduciendo más archivos:

mplayer [opciones por defecto] [ruta/]nombre-archivo1 [opciones para nombre-archivo1] nombre-archivo2 [opciones para nombre-archivo2] ...

Reproduciendo VCD:

mplayer [opciones] vcd://npista [-cdrom-device /dev/cdrom]

Reproduciendo DVD:

mplayer [opciones] dvd://ntitulo [-dvd-device /dev/dvd]

Reproduciendo desde la WWW:

mplayer [opciones] http://sitio.com/archivo.asf

(las listas de reproducción también pueden ser usadas)

Reproduciendo desde RTSP:

mplayer [opciones] rtsp://servidor.ejemplo.com/nombreFlujo

Ejemplos:

mplayer -vo x11 /mnt/Pelis/Contact/contact2.mpg
mplayer vcd://2 -cd-rom-device /dev/hdc
mplayer -afm 3 /mnt/DVDtrailers/alien4.vob
mplayer dvd://1 -dvd-device /dev/hdc
mplayer -abs 65536 -delay -0.4 -nobps ~/pelis/prueba.avi

3.2. Control

MPlayer tiene una capa de control completamente configurable, dada por órdenes, que le permite controlar MPlayer con el teclado, el ratón, la palanca de juegos o el mando a distancia (usando LIRC). Vea la página de manual para una lista completa de los controles de teclado.

3.2.1. Configuración de los controles

MPlayer permite asignar una tecla/botón a cualquier órden de MPlayer usando un archivo de configuración simple. La sintaxis consiste en un nombre clave seguido por la órden. El archivo de configuración por defecto es $HOME/.mplayer/input.conf pero puede ser cambiado usando la opción -input conf (ruta relativa a $HOME/.mplayer).

Ejemplo 3.1. Un archivo de control simple

##
## Archivo de control de entrada de MPlayer
##

RIGHT seek +10
LEFT seek -10
- audio_delay 0.100
+ audio_delay -0.100
q quit
> pt_step 1
< pt_step -1
ENTER pt_step 1 1

3.2.1.1. Nombres clave

Puede obtener una lista completa ejecutando mplayer -input keylist.

Teclado

  • Cualquier caracter imprimible

  • SPACE

  • ENTER

  • TAB

  • CTRL

  • BS

  • DEL

  • INS

  • HOME

  • END

  • PGUP

  • PGDWN

  • ESC

  • RIGHT

  • LEFT

  • UP

  • DOWN

Ratón (solo funciona bajo X)

  • MOUSE_BTN0 (Botón izquierdo)

  • MOUSE_BTN1 (Botón derecho)

  • MOUSE_BTN2 (Botón central)

  • MOUSE_BTN3 (Rueda)

  • MOUSE_BTN4 (Rueda)

  • ...

  • MOUSE_BTN9

Palanca de juegos (para que funcione debe habilitarse durante la compilación)

  • JOY_RIGHT o JOY_AXIS0_PLUS

  • JOY_LEFT o JOY_AXIS0_MINUS

  • JOY_UP o JOY_AXIS1_MINUS

  • JOY_DOWN o JOY_AXIS1_PLUS

  • JOY_AXIS2_PLUS

  • JOY_AXIS2_MINUS

  • ...

  • JOY_AXIS9_PLUS

  • JOY_AXIS9_MINUS

3.2.1.2. Órdenes

Puede obtener una lista completa de órdenes ejecutando mplayer -input cmdlist.

  • seek (int) val [(int) type=0]

    Se posiciona en un lugar de la película. Tipo 0 es posicionamiento relativo en +/- val segundos. Tipo 1 se posiciona a un valor en val% de la película.

  • audio_delay (float) val

    Ajusta el retardo de audio en val segundos

  • quit

    Salir de MPlayer

  • pause

    Pausa/continúa la reproducción

  • grap_frames

    ¿Alguien lo sabe?

  • pt_step (int) val [(int) force=0]

    Va a la entrada siguiente/previa en la lista de reproducción. El signo de val dice la dirección. Si no hay otra entrada disponible en la dirección dada no ocurre nada a no ser que force no sea 0.

  • pt_up_step (int) val [(int) force=0]

    Igual que pt_step pero salta a siguiente/previo en la lista actual. Esto es útli para romber bucles internos en el árbol de reproducción.

  • alt_src_step (int) val

    Cuando hay más de una fuente disponible selecciona la siguiente/previa (solo funciona en listas de reproducción asx).

  • sub_delay (float) val [(int) abs=0]

    Ajusta el retardo de subtítulos en +/- val segundos o lo establece en val segundos cuando abs no es cero.

  • osd [(int) level=-1]

    Cambia el modo de osd o establece el invel cuando el nivel > 0.

  • volume (int) dir

    Incrementa/reduce el volumen

  • contrast (int) val [(int) abs=0]

  • brightness (int) val [(int) abs=0]

  • hue (int) val [(int) abs=0]

  • saturation (int) val [(int) abs=0]

    Establece/Ajusta los parámetros de video. Rango de val entre -100 y 100.

  • frame_drop [(int) type=-1]

    Cambia/Establece el modo de salto de marcos.

  • sub_visibility

    Ajusta la visibilidad de los subtítulos.

  • sub_pos (int) val

    Ajusta la posición de los subtítulos.

  • vobsub_lang

    Cambia el idioma de los subtítulos VobSub.

  • vo_fullscreen

    Cambia el modo de pantalla completa.

  • vo_ontop

    Cambia siempre-visible. Soportado por controladores que usen X11, excepto SDL, así como directx y gl2 bajo Windows.

  • tv_step_channel (int) dir

    Selecciona el canal de tv siguiente/previo.

  • tv_step_norm

    Cambia la norma de TV.

  • tv_step_chanlist

    Cambia la lista de canales.

  • gui_loadfile

  • gui_loadsubtitle

  • gui_about

  • gui_play

  • gui_stop

  • gui_playlist

  • gui_preferences

  • gui_skinbrowser

    Acciones para el GUI

3.2.2. Control desde LIRC

Linux Infrared Remote Control - use un receptor-IR facil de hacer y fabricar en casa, un (casi) arbitrario control remoto ¡y controle su linux con él! Más acerca de esto en www.lirc.org.

Si tiene instalado el paquete-lirc, configure lo autodetectará. Si todo va bien, MPlayer escribirá un mensaje como "Setting up lirc support..." durante su inicio. Si ocurre algún error le informará de ello. Si no le dice nada acerca de LIRC es porque se ha compilado sin tenerlo en cuenta. Eso es todo :-)

El nombre de la aplicación para MPlayer es - oh que maravilla - mplayer. Puede usar las órdenes de MPlayer e incluso pasar más de una órden separándolas con \n. No olvide activar el marcador repeat en .lircrc cuando tenga sentido (posición, volumen, etc). Aquí hay un extracto de mi .lircrc:

begin
     button = VOLUME_PLUS
     prog = mplayer
     config = volume 1
     repeat = 1
end

begin
    button = VOLUME_MINUS
    prog = mplayer
    config = volume -1
    repeat = 1
end

begin
    button = CD_PLAY
    prog = mplayer
    config = pause
end

begin
    button = CD_STOP
    prog = mplayer
    config = seek 0 1\npause
end

Si no le gusta la localización estándar del archivo de configuración de lirc (~/.lircrc) use el conmutador -lircconf nombre-archivo para especificar otro archivo.

3.2.3. Modo esclavo

El modo esclavo le permite construir una interfaz gráfica de manera simple para MPlayer. Cuando se activa (con la opción -slave) MPlayer lee las órdenes separándolsa por el caracter de nueva línea (\n) desde la entrada estándar stdin.

3.3. Streaming desde la red o tuberías

MPlayer puede reproducir archivos desde la red, usando el protocolo HTTP, FTP, MMS o RTSP/RTP.

La reprodución comienza símplemente añadiendo la URL en la línea de órdenes. MPlayer también tiene en cuenta a la variable de entorno http_proxy, y usa el proxy si está disponible. El uso de proxy también puede forzarse con:

mplayer http_proxy://proxy.micorsops.com:3128/http://micorsops.com:80/stream.asf

MPlayer puede leer desde la entrada estádar (no desde tuberías nombradas). Esto puede ser usado por ejemplo para reproducir desde FTP:

wget ftp://micorsops.com/algo.avi -O - | mplayer -

Nota

Nota: también es recomendable activar la -cachecuando se reproduce desde la red:

wget ftp://micorsops.com/algo.avi -O - | mplayer -cache 8192 -

3.4. Flujos remotos

Los flujos remotos le permiten acceder a la mayoría de los tipos de flujo para MPlayer desde un host remoto. El propósito principal de esta característica es hacer posible la reproducción directa usando CD o DVD de otro ordenador a través de la red (suponiendo que tiene el ancho de banda requerido). En el lado bajo algunos tipos de flujos (actualmente TV y MF) no se pueden usar de manera remota debido a que están implementados a nivel de demultiplexor. De todos modos para MF y TV debería de tener una cantidad insana de ancho de banda.

3.4.1. Compilando el servidor

Después de que tenga MPlayer compilado vaya a TOOLS/netstream para compilar el binario del servidor. Puede hacer una copia del binario de netstream al lugar correcto en su sistema (normalmente /usr/local/bin en Linux).

3.4.2. Usando flujos remotos

Lo primero que tiene que hacer es iniciar el servidor en el ordenador al que quiere hacer el acceso remoto. Actualmente el servidor es muy básico y no tiene ningún argumento en la línea de órdenes nada más que escribir netstream. Ahora puede por ejemplo reproducir una segunda pista de un VCD en el servidor con :

mplayer -cache 5000 mpst://nombre-servidor/vcd://2

También puede acceder a los archivos en este servidor :

  mplayer -cache 5000 mpst://nombre-servidor//usr/local/peliculas/lol.avi

Note que las rutas que no empiezan con un / deben ser relativas al directorio donde el servidor está corriendo. La opción -cache no es necesaria pero es altamente recomendable.

Tenga cuidado con que actualmente el servidor no es para nada seguro. No se queje de la cantidad tan numerosa de fallos de seguridad que es posible que tenga. En lugar de eso, envíe algunos (buenos) parches para mejorarlo o escriba su propio servidor.

3.5. Unidades de CD/DVD

Extracto de documentación de Linux:

Las unidades de CD-ROM modernas pueden alcanzar velocidades de lectura muy altas, a pesar de ello algunas unidades de CD-ROM son capaces de funcionar a velocidades reducidas. Hay varias razones que pueden hacer considerar cambiar la velocidad de la unidad de CD-ROM:

  • Ha habido varios informes de errores de lectura a velocidades altas, especialmente en unidades de CD-ROM en mal estado. Reducir la velocidad puede prevenir la pérdida de datos bajo estas circunstancias.

  • Algunas unidades de CD-ROM son molestamente ruidosas, a menor velocidad se puede reducir el ruido.

Puede reducir la velocidad de las unidades de CD-ROM IDE con hdparm o con un programa llamado setcd. Funciona de la siguiente manera:

hdparm -E [velocidad] [dispositivo de cdrom]

setcd -x [velocidad] [dispositivo cdrom]

Si tiene privilegios de root la siguiente órden puede también ayudarle:

echo file_readahead:2000000 > /proc/ide/[cdrom device]/settings

Esto establece prelectura de 2MB del archivo, lo cual ayuda en CD-ROMs rayados. Si establece un valor demasiado alto, la unidad puede estar contínuamente girando y parando, y puede decrementar dramáticamente el rendimiento. Se recomienda que también afine su unidad de CD-ROM con hdparm:

hdparm -d1 -a8 -u1 cdrom device

Esto activa el acceso DMA, pre-lectura, y desenmascarado de IRQ (lea la página de manual de hdparm para una explicación detallada).

Por favor, diríjase a "/proc/ide/cdrom device/settings" para ajuste-fino de su CD-ROM.

Las unidades SCSI no tienen una manera uniforme para estableces estos parámetros (¿conoce alguna? ¡Díganoslo!) Aquí hay una herramienta que funciona para unidades Plextor SCSI.

FreeBSD:

Speed: cdcontrol [-f dispositivo] speed velocidad

DMA: sysctl hw.ata.atapi_dma=1

3.6. Reproducción de DVD

Para una lista completa de opciones disponibles, lea por favor la página de manual. La Sintaxis para un Disco Versátil Digital (DVD) estándar es la siguiente:

mplayer dvd://<pista> [-dvd-device <dispositivo>]

Ejemplo:

mplayer dvd://1 -dvd-device /dev/hdc

El dispositivo DVD por defecto es /dev/dvd. Si su configuración es diferente, haga un enlace simbólico o especifique el dispositivo correcto en la línea de órdenes con la opción -dvd-device.

Soporte para el DVD de Nuevo-estilo (mpdvdkit2).  MPlayer usa libdvdread y libdvdcss para desencriptación y reproducción. Estas dos bibliotecas están contenidas en el subdirectorio libmpdvdkit2/ del árbol de código fuente de MPlayer, no tiene que instalarlo por separado. Hemos optado por esta solución porque hemos corregido un error de libdvdread y aplicado un parche que añade soporte para cacheo de claves CSS crackeadas para libdvdcss. Esto resulta en un gran incremento de velocidad porque las claves no tienen que ser crackeadas cada vez que se reproduce.

MPlayer puede usar también bibliotecas libdvdread del sistema y libdvdcss, pero esta solución no se recomienda, porque puede resultar en fallos, incompatibilidades de bibliotecas y velocidad más lenta.

Nota

En caso de problemas de decodificación de DVD, pruebe a deshabilitar supermount, o cualquier otra utilidad de este tipo.

Estructura de DVD.  Los discos de DVD tienen 2048 bytes por sector con ECC/CRC. Normalmente tienen un sistema de archivos UDF en una pista simple, conteniendo varios archivos (archivos pequeños .IFO y .BUK y archivos grandes (1GB) .VOB). Son archivos reales y pueden ser copiados/reproducidos desde un sistema de archivos montado de un DVD sin encriptar.

Los archivos .IFO contienen la información de navegación por la película (capítulos/títulos/mapas de ángulos, tablas de idiomas, etc) y son necesarios para leer e interpretar el contenido del .VOB (la película). Los archivos .BUK son copias de seguridad de estos. Usan sectores por todos sitios, por lo que necesita usar direccionamiento crudo de sectores del disco para implementar navegación DVD o desencriptar el contenido.

El soporte DVD necesita acceso basado en sectores al dispositivo. Desafortunadamente debe (bajo Linux) ser root para obtener la dirección de un sector dentro de un archivo. Este es el motivo por el que no se usa el controlador interno del sistema de archivos del kernel, en su lugar se ha reimplementado en el espacio de usuario. libdvdread 0.9.x y libmpdvdkit hacen esto. El controlador de sistema de archivos UDF del kernel no es necesario ya que tenemos nuestro propio controlador de sistema de archivos UDF. Además el DVD no necesita estar montado ya que solo se usa acceso a nivel de sectores.

Algunas veces /dev/dvd no puede ser leído por los usuarios, por lo que los autores de libdvdread han implementado una capa de emulación que transfiere el direccionamiento por sectores a nombres de archivo + desplazamiento, para emular un acceso crudo sobre un sistema de archivos montado o incluso en un disco duro.

libdvdread incluso acepta un punto de montaje en lugar del nombre del dispositivo para acceso crudo y comprueba /proc/mounts para obtener el nombre del dispositivo. Esto ha sido desarrollado por Solaris, donde los nombres de los dispositivos son asignados dinámicamente.

El dispositivo por defecto de DVD es /dev/dvd. Si su configuración no coincide con esto, haga un enlace simbólico, o especifique el dispositivo correcto en la línea de órdenes con la opción -dvd-device.

Autenticación para DVD.  La autenticación y el método de desencriptación del soporte de DVD al nuevo-estilo se ha hecho usando una versión modificada de libdvdcss (vea más arriba). Este método peude ser especificado a través de la variable de entorno DVDCSS_METHOD, que puede ser establecido a key, disk o title.

Si no se especifica nada se prueban los siguientes métodos (por defecto: key, petición de título):

  1. bus key: Esta clave es negociada durante la autenticación (una larga mezcla de ioctls y varios intercambios de claves, material de encriptación) y es usada para encriptar el título y las claves de disco antes de enviarlas sobre el bus sin proteger (para prevenir robos de claves). El bus key necesita obtener y predesencriptar la clave encriptada de disco.

  2. cached key: MPlayer mira a ver si el título ya ha sido crackeado con una clave almacenada en el directorio ~/.mplayer/DVDKeys (rápido ;).

  3. key: Si no hay una clave disponible en caché, MPlayer intenta desencriptar la clave del disco con un conjunto de claves de reproductor incluidas.

  4. disk: Si el método key falla (p.e. no hay claves de reproductor incluídas), MPlayer crackeará la clave del disco usando un algoritmo de fuerza bruta. Este proceso usa la CPU de manera intensiva y requiere 64 MB de memoria (una tabla hash de 16M 32Bit entradas) para almacenamiento temporal de datos. Este método debe funcionar siempre (lento).

  5. title request: Con la clave del disco MPlayer pide las claves encriptadas de los títulos que están dentro de sectores escondidos usando ioctl(). La protección por región de unidades RPC-2 se hace en este paso y puede fallas en algunas unidades de disco. Si funciona bien, las claves de títulos son desencriptadas con las claves de bus y de disco.

  6. title: Este método es usado si la búsqueda de título falla y no sale en ningun intercambio de clave con la unidad de DVD. Usa un ataque de encriptación para buscar la clave del título directamente (encontrando un patrón que se repita en el contenido del VOB desencriptado y comprobando que el texto plano corresponde a los primeros bytes encriptados como una continuación del patrón). El método es también conocido como "ataque de texto plano conocido" o "DeCSSPlus". En raras ocasiones esto falla porque no hay suficientes datos desencriptados en el disco para realizar un ataque estadístico o porque las claves cambian en mitad de un título. Este método es la única manera de desencriptar un DVD almacenado en un disco duro o en un DVD con la región incorrecta en una unidad RPC2 (lento).

Las unidades de DVD RPC-1 solo protegen la configuración de región a través de software. Las unidades RPC-2 tienen una protección por hardware que permite tan solo 5 cambios. Puede ser necesario/recomendable actualizar el firmware a RPC-1 si tiene una unidad RPC-2. Las actualizaciones de firmware puede encontrarse en esta página del firmware. Si no hay una actualización del firmware disponible para su dispositivo, use la herramienta regionset para establecer el código de región de su unidad de DVD (bajo Linux). Advertencia: Solo puede establecer la región 5 veces.

3.7. Reproducción de VCD

Para una lista completa de las opciones disponibles, lea por favor la página de manual. La sintaxis para un Video CD (VCD) estándar es la siguiente:

mplayer vcd://<track> [-cdrom-device <device>]

Ejemplo:

mplayer vcd://2 -cdrom-device /dev/hdc

El dispositivo para VCD Por defecto es /dev/cdrom. Si su configuracio no coincide con esto, haga un enlace simbólico o especifique el dispositivo correcto en la línea de órdenes con la opción -cdrom-device.

Nota

Al menos las unidades de CD-ROM SCSI Plextor y algunas Toshiba tienen un rendimiento horrible leyendo VCDs. Esto es porque el ioctl CDROMREADRAW no está completamente implementado en estas unidades. Si tiene conocimientos sobre la programación SCSI, por favor ayúdenos a implementar soporte SCSI genérico para VCDs.

En la actualidad puede extraer datos desde VCDs con readvcd y reproducir el archivo resultante con MPlayer.

Estructura de un VCD. Los discos de VCD consisten en una o más pistas:

  • La primera piesta es una pista pequeña de datos 2048 bytes/sector con un sistema de archivos iso9660, normalmente conteniendo programas reproductores de VCD para Windows o quizá alguna otra información (imágenes, texto, etc).

  • La segunda y otras pistas son 2324 bytes/sector crudas de MPEG (película), conteniendo un paquete de datos MPEG PS por sector en lugar de un sistema de archivos. De manera similar a las pistas de CD de audio, estas pistas no pueden ser montadas (¿Alguna vez ha montado un CD de audio para reproducirlo?). Como las películas están dentro de esta pista, debería probar vcd://2 primero.

  • Existen discos de VCD sin la primera pista (pista simple y sin ningún sistema de archivos). Siguen siendo reproducibles, pero no pueden ser montadas.

Acerca de los archivos .DAT.  Los archivos visibles de ~600 MB en la primera pista de un VCD montado ¡no son archivos reales! Son llamadas puertas de acceso ISO, creadas para permitir a Windows administrar estas pistas (Windows no permite acceso crudo al dispositivo en ninguna de sus aplicaciones). Bajo Linux no puede copiar o reproducir estos archivos (solo contienen basura). Bajo Windows es posible que el controlador iso9660 emule lectura cruda de las pistas en estos archivos. Para reproducir un archivo .DAT necesita el controlador del kernel que se encuentra en la versión para Linux de PowerDVD. Contiene un controlador de sistema de archivos iso9660 modificado (vcdfs/isofs-2.4.X.o), que permite emular las pistas crudas a través de este archivo de sombra .DAT. Si monta el disco usando ese controlador, puede copiar e incluso reproducir los archivos .DAT con MPlayer. ¡Pero no funciona con el controlador estandar iso9660 del kernel de Linux! Use vcd:// en su lugar. Alternativas para copiar un VCD son los nuevos controladores del kernel cdfs (que no forman parte del kernel oficialmente) que muestran sesiones de CD como archivos de imagen y cdrdao, un programa para grabar/copiar CD bit-por-bit.

3.8. Listas de Decisión de Edición (EDL)

El sistema de listas de decisión de edición (EDL) le permite automáticamente saltar o silenciar secciones de vídeos durante la reproducción, basado en un archivo de configuración de EDL especifico de una película.

Esto es útil para aquellos que quieran mirar una película "de manera familiar". Puede cortar secciones de violencia, profanidad, Jar-Jar Binks... de una película de acuerdo a sus preferencias personales. A un lado de esto, tiene otros usos, como pasar automáticamente comerciales en archivos de vídeos que mire.

El formato de archivo EDL es muy simple. Una vez que el sistema EDL haya alcanzado cierto nivel de maduración, es muy probable que se implemente un formato de archivo basada en XML (manteniendo compatibilidad con los formatos previos de EDL).

3.8.1. Usando un archivo EDL

Incluya la opción -edl <archivo> cuando quiera correr MPlayer, con el nombre del archivo EDL que quiere que se le aplique al vídeo.

3.8.2. Haciendo un archivo EDL

El actual formato de un archivo EDL es:

[segundo de inicio] [segundo final] [acción]

Donde los segundos son números de punto flotante y la acción es o bien 0 para saltar esa parte o 1 para silenciarla. Por ejemplo:

5.3   7.1    0
15    16.7   1
420   422    0

Esto hará que se salten del segundo 5.3 al segundo 7.1 del vídeo, entonces silenciar en el segundo 15, volver el sonido a los 16.7 segundos y saltar desde el segundo 420 al segundo 422 del vídeo. Estas acciones serán realizadas cuando el reloj de reproducción alcance los tiempos dados en el archivo.

Para crear un archivo EDL para poder trabajar, use la -edlout <archivo>. Durante la reproducción, cuando quiera marcar los dos segundos previos para ser saltados, pulse i. Se guardara una entrada en el archivo para ese momento. Luego puede volver atrás y ajustar a mano el archivo EDL generado.

3.9. Entrada de TV

Esta sección es acerca de como poder mirar/capturar desde un dispositivo sintonizador de TV compatible con V4L. Vea la página del manual para una descripción de las opciones de TV y los controles del teclado.

3.9.1. Compilación

  1. Primero, deberá recompilar. ./configure detectará los archivos de encabezados de las cosas de v4l y la existencia de las entradas /dev/video*. Si existen, el soporte de TV se compilará (vea la salida de ./configure).

  2. Asegúrese de que su sintonizador funcione bien con otro software de TV en Linux, como por ejemplo con XawTV.

3.9.2. Consejos de Uso

El listado completo de opciones esta disponible en la página del manual. Aquí hay solamente un par de consejos:

  • Use la opción channels(canales). Ejemplo:

    -tv channels=26-MTV,23-TV2

    Explicación: usando esta opción, solo se podrá ver el canal 26 y el 23 y habrá un bonito texto en pantalla (OSD) por cada cambio de canal, mostrando el nombre del canal. Los espacios en el nombre del canal deben ser reemplazados por el carácter "_".

  • Elija varias dimensiones de imagen razonables. Las dimensiones de la imagen resultante deberían ser divisibles por 16.

  • Si captura el vídeo con una resolución vertical más grande que la mitad de la resolución total (por ejemplo: 288 para PAL o 240 para NTSC), asegúrese que activó el desentrelazado. De otro modo obtendrá una película la cual esta distorsionada durante las escenas con movimientos rápidos y el controlador de tasa de bits probablemente no podrá ser capaz de retener la cantidad de información necesaria ya que el entrelazado produce una gran cantidad de detalles y por lo tanto consume una gran cantidad de ancho de banda. Puede activar el desentrelazado con la opción -vf pp=DEINT_TYPE. Normalmente pp=lb funciona bien, pero es un problema de preferencias personales. Vea otros algoritmos de desentrelazado en el manual y pruebelos.

  • Corte el área no usada. Cuando captura vídeo, las áreas en los bordes normalmente son negras y contienen algo de ruido. Esto también consume un montón de ancho de banda innecesario. Más precisamente no son las áreas en negro por si mismas pero si las bruscas transcisiones entre el negro y la imagen de vídeo brillante pero por ahora eso no es importante por ahora. Antes de empezar a capturar, ajuste los argumentos de la opción crop de tal manera que todo lo negro quede afuera. Nuevamente, no se olvide de mantener las dimensiones de manera razonables.

  • Observe la carga de CPU. La mayoría del tiempo no debería cruzar el límite del 90%. Si tiene un gran buffer de captura, MEncoder puede sobrevivir una sobrecarga por unos pocos segundos y nada más. Es mejor apagar los salvadores de pantalla 3D OpenGL y ese tipo de cosas.

  • No se meta con el reloj del sistema. MEncoder usa el reloj del sistema para mantener sincronía entre Audio y Vídeo. Si ajusta el reloj del sistema (particularmente volviendo hacia atrás en el tiempo), MEncoder se confunde y pierde cuadros. Esto es un problema importante si está conectado a una red y corre algún tipo de software de sincronización como NTP. Debería desactivar NTP durante el proceso de captura si quiere capturar en forma confiable.

  • No cambie la opción outfmt a menos que sepa lo que está haciendo o su tarjeta/controlador realmente no soporte la opción por omisión (espacio de color YV12). En las versiones viejas de MPlayer/ MEncoder era necesario especificar el formato de salida. Este problema se debería estar resuelto en las versiones actuales y la opción outfmt no se requiere más, ya que la opción por omisión sirve para la mayoría de los propósitos. Por ejemplo si está capturando en DivX usando libavcodec y especifica outfmt=RGB24 para incrementar la calidad de las imágenes capturadas, las imágenes capturadas serán realmente convertidas nuevamente a YV12 por lo que lo único que logra es un desperdicio masivo de ciclos de CPU.

  • Para especificar el espacio de colores I420 (outfmt=i420), deberá agregar una opción -vc rawi420 debido a un conflicto de fourcc con un codec de vídeo de Intel Indeo.

  • Hay muchas maneras de capturar audio. Puede capturar el sonido ya sea usando su tarjeta de sonido por medio de un cable de conexión externo entre la placa sintonizadora y la linea de entrada, o usando el chip ADC incorporado en el chip bt878. En este ultimo caso, deberá cargar el controlador btaudio . Lea el archivo linux/Documentation/sound/btaudio (en el árbol de directorio del núcleo, no el de MPlayer) para instrucciones de como usar este controlador.

  • Si MEncoder no puede abrir el dispositivo de audio, asegúrese que este realmente disponible. Puede haber algunos problemas con algunos servidores de sonido como arts (KDE) o esd (GNOME). Si tiene una placa de sonido full dúplex (casi todas las placas decentes lo soportan hoy en día), y está usando KDE, trate activando la opción "full dúplex" en el menú de preferencias del servidor de sonido.

3.9.3. Ejemplos

Salida ficticia, a AAlib :)

mplayer -tv driver=dummy:width=640:height=480 -vo aa tv://

Entrada desde un dispositivo estándar V4L:

mplayer -tv driver=v4l:width=640:height=480:outfmt=i420 -vc rawi420 -vo xv tv://

Un ejemplo más sofisticado. Esto hace que MEncoder capture la imagen completa PAL, corte los margenes y desentrelazando la imagen usando un algoritmo linear blend. El audio es comprimido con una tasa de bits constante de 64kbps, usando el codec LAME. Esta configuración es satisfactoria para capturar películas.

     mencoder -tv driver=v4l:width=768:height=576 \
     -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=900 \
     -oac mp3lame -lameopts cbr:br=64 \
     -vf crop=720:544:24:16,pp=lb -o salida.avi tv://

Esto adicionalmente escalará la imagen a 384x288 y comprimirá el vídeo a una tasa de bits de 350kbps en modo alta calidad. La opción vqmax suelta al cuantizador y le permite al compresor de vídeo alcanzar tasas de bits muy bajas a expensas de la calidad. Esto puede ser usado para capturar series de TV largas, donde la calidad del vídeo no es tan importante.

     mencoder -tv driver=v4l:width=768:height=576 \
     -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=350:vhq:vqmax=31:keyint=300 \
     -oac mp3lame -lameopts cbr:br=48 \
     -vf crop=720:540:24:18,pp=tn/lb,scale=384:288 -sws 1 \
     -o salida.avi tv://

Es posible especificar una dimensión de imagen más chica en la opción -tv y omitir el escalado de software pero este enfoque usa la máxima cantidad de información disponible y es un poco más resistente al ruido. Los chips bt8x8 pueden hacer el promediado de pixels solo en dirección horizontal debido a limitaciones de hardware.

3.10. Radio

This section is about how to enable listening to radio from a V4L-compatible radio tuner. See the man page for a description of radio options and keyboard controls.

3.10.1. Usage tips

The full listing of the options is available in the manual page. Here are just a few tips:

  • Make sure your tuner works with another radio software in Linux, for example XawTV.

  • Use the channels option. An example:

    -radio channels=104.4-Sibir,103.9-Maximum

    Explanation: With this option, only the 104.4 and 103.9 radio stations will be usable. There will be a nice OSD text upon channel switching, displaying the channel's name. Spaces in the channel name must be replaced by the "_" character.

  • There are several ways of capturing audio. You can grab the sound either using your sound card via an external cable connection between video card and line-in, or using the built-in ADC in the saa7134 chip. In the latter case, you have to load the saa7134-alsa or saa7134-oss driver.

  • MEncoder cannot be used for audio capture, because it requires a video stream to work. So your can either use arecord from ALSA project or use -ao pcm:file=file.wav. In the latter case you will not hear any sound (unless you are using a line-in cable and have switched line-in mute off).

3.10.2. Examples

Input from standard V4L (using line-in cable, capture switched off):

mplayer radio://104.4

Input from standard V4L (using line-in cable, capture switched off, V4Lv1 interface):

mplayer -radio driver=v4l radio://104.4

Playing second channel from channel list:

mplayer -radio channels=104.4=Sibir,103.9=Maximm radio://2

Passing sound over the PCI bus from the radio card's internal ADC. In this example the tuner is used as a second sound card (ALSA device hw:1,0). For saa7134-based cards either the saa7134-alsa or saa7134-oss module must be loaded.

mplayer -rawaudio rate=32000 radio://2/capture \
    -radio adevice=hw=1.0:arate=32000:channels=104.4=Sibir,103.9=Maximm

Nota

When using ALSA device names colons must be replaced by equal signs, commas by periods.

Capítulo 4. Dispositivos de salida de video

4.1. Configurando MTRR

Es MUY recomendable comprobar si los registros MTRR están correctamente establecidos, porque pueden proporcionar un aumento considerable de rendimiento.

Haga cat /proc/mtrr:

--($:~)-- cat /proc/mtrr
reg00: base=0xe4000000 (3648MB), size=  16MB: write-combining, count=9
reg01: base=0xd8000000 (3456MB), size= 128MB: write-combining, count=1

Esto es lo correcto, muestra mi Matrox G400 con 16MB de memoria. Tengo esto por usar XFree 4.x.x, que configura los registros MTRR automáticamente.

Si no funciona, deberá hacerlo de manera manual. Primero, debe encontrar la dirección base. Tiene 3 formas de encontrarla:

  1. desde los mensajes de inicio de X11, por ejemplo:

    (--) SVGA: PCI: Matrox MGA G400 AGP rev 4, Memory @ 0xd8000000, 0xd4000000
    (--) SVGA: Linear framebuffer at 0xD8000000

  2. de /proc/pci (use la órden lspci -v):

    01:00.0 VGA compatible controller: Matrox Graphics, Inc.: Unknown device 0525
    Memory at d8000000 (32-bit, prefetchable)
      

  3. de los mensajes del controlador del kernel mga_vid kernel (use dmesg):

    mga_mem_base = d8000000

Después encuentre el tamaño de la memoria. Esto es muy fácil, convierta el tamaño de la memoria RAM de video a hexadecimal, o use esta tabla:

1 MB0x100000
2 MB0x200000
4 MB0x400000
8 MB0x800000
16 MB0x1000000
32 MB0x2000000

Ahora ya conoce la dirección base y el tamaño de la memoria, ¡vamos a configurar los registros MTRR! Por ejemplo, para la tarjeta Matrox de antes (base=0xd8000000) con 32MB ram (size=0x2000000) ejecute:

echo "base=0xd8000000 size=0x2000000 type=write-combining" >| /proc/mtrr

No todas las CPUs soportan MTRRs. Por ejemplo K6-2's antiguos (alrededor de 266MHz, stepping 0) no soportan MTRR, pero stepping 12's lo soportan (cat /proc/cpuinfo para comprobarlo).

4.2. Salidas de video para tarjetas de video tradicionales

4.2.1. Xv

Bajo XFree86 4.0.2 o posterior, puede usar las rutinas de hardware YUV de su tarjeta gráfica usando la extensión XVideo. Esto es lo que usa la opción -vo xv. Además, este controlador soporta ajustes de brillo/contraste/saturación/etc (a menos que use el antiguo, lento codec DirectShow DivX, que tiene soporte siempre), vea la página de manual.

Para que esto funcione, asegúrese de comprobar lo siguiente:

  1. Tiene que usar XFree86 4.0.2 o posterior (otras versiones no tienen XVideo)

  2. Su tarjeta actualmente soporta aceleración hardware (las modernas lo hacen)

  3. X carga la extensión XVideo, esto es algo como:

    (II) Loading extension XVideo

    en /var/log/XFree86.0.log

    Nota

    Esto carga solo la extensión de XFree86. En una instalación buena, siempre es cargado, y no importa si el soporte XVideo para la tarjeta ha sido cargado!

  4. Su tarjeta tiene soporte Xv bajo Linux. Para comprobarlo, pruebe xvinfo, es parte de la distribucióno XFree86. Debe mostrar un texto largo, similar a éste:

    X-Video Extension version 2.2
    screen #0
      Adaptor #0: "Savage Streams Engine"
        number of ports: 1
        port base: 43
        operations supported: PutImage
        supported visuals:
          depth 16, visualID 0x22
          depth 16, visualID 0x23
        number of attributes: 5
    (...)
        Number of image formats: 7
          id: 0x32595559 (YUY2)
            guid: 59555932-0000-0010-8000-00aa00389b71
            bits per pixel: 16
            number of planes: 1
            type: YUV (packed)
          id: 0x32315659 (YV12)
            guid: 59563132-0000-0010-8000-00aa00389b71
            bits per pixel: 12
            number of planes: 3
            type: YUV (planar)
    (...etc...)

    Debe soportar formatos de pixel YUY2 packed, y YV12 planar para ser usables con MPlayer.

  5. Y finalmente, compruebe si MPlayer fue compilado con soporte 'xv'. Haga mplayer -vo help | grep xv. Si fue compilado con soporte 'xv', aparecerá una línea similar a:

      xv    X11/Xv

4.2.1.1. Tarjetas 3dfx

Controladores antiguos 3dfx se sabe que tienen problemas con la aceleración XVideo, no soportan ni YUY2 ni YV12, ni nada. Verifique que tiene XFree86 versión 4.2.0 o posterior, este funciona bien con YV12 y YUY2. Versiones previas, incluyendo 4.1.0, falla con YV12. Si experiencia efectos extraños usando -vo xv, pruebe SDL (tiene XVideo también) y vea si eso puede ayudarle. Compruebe la sección SDL para más detalles.

¡O, pruebe el NUEVO controlador -vo tdfxfb! Vea la sección tdfxfb.

4.2.1.2. Tarjetas S3

Las S3 Savage3D deben funcionar bien, pero para Savage4, use XFree86 version 4.0.3 o posterior (en caso de problemas con la imagen, pruebe 16bpp). Como para S3 Virge: hay soporte xv, pero la tarjeta es lenta por sí misma, será mejor que la venda.

Nota

Actualmente no está claro qué modelos de Savage carecen de soporte YV12, y convierten por controlador (lento). Si sospecha de su tarjeta, obtenga un controlador nuevo, o pregunte de forma correcta en la lista de correo mplayer-users por un controlador con soporte para MMX/3DNow.

4.2.1.3. Tarjetas nVidia

nVidia no es siempre una buena elección bajo Linux ... El controlador de código abierto de XFree86 tiene soporte en la mayoría de los casos, pero para algunas tarjetas, tiene que usar un controlador de código-cerrado de nVidia, disponible en el sitio web de nVidia. Siempre necesitará ese controlador de todos modos si quiere también aceleración 3D.

Las tarjetas Riva128 no tienen soporte XVideo con el controlador nVidia de XFree86 :( Las quejas a nVidia.

Sin embargo, MPlayer contiene un controlador VIDIX para la mayoría de las tarjetas nVidia. Actualmente está en estado beta, y tiene algunos problemas. Para más información, vea la sección nVidia VIDIX.

4.2.1.4. Tarjetas ATI

El controlador GATOS (que es el que debería de usar, a menos que tenga una Rage128 o Radeon) tiene VSYNC activado por defecto. Esto significa que tiene velocidad de decodificación (!) sincronizado con la tasa de refresco del monitor. Si la reproducción es lenta, pruebe a desactivar VSYNC, o establezca una tasa de refresco a n*(fps de la película) Hz.

Radeon VE - si necesita X, use XFree86 4.2.0 o posterior para esta tarjeta. No tiene soporte de salida de TV. Por supuesto con MPlayer puede felizmente obtener gráficos acelerados, con o sin salida TV, y no se necesitan bibliotecas o X. Lea la sección VIDIX.

4.2.1.5. Tarjetas NeoMagic

Estas tarjetas se pueden encontrar en algunos portátiles. Debe usar XFree86 4.3.0 o posterior, o incluso los controladores de Stefan Seyfried Xv-capable. Elija el que corresponda a su versión de XFree86.

XFree86 4.3.0 incluye soporte Xv, a pesar de eso Bohdan Horst envió un pequeño parche contra los fuentes de XFree86 que aceleran las operaciones de framebuffer (y XVideo por tanto) hasta cuatro veces. El parche ha sido incluido en XFree86 CVS y deberá estar en la siguiente liberación después de la 4.3.0.

Para permitir reproducción de contenido de tamaño de DVD cambie su XF86Config como este:

Section "Device"
    [...]
    Driver "neomagic"
    Option "OverlayMem" "829440"
    [...]
EndSection

4.2.1.6. Tarjetas Trident

Si quiere usar xv con una tarjeta trident, sepa que no funciona con 4.1.0, instale XFree 4.2.0. 4.2.0 añade soporte para Xv en pantalla completa con la tarjeta Cyberblade XP.

Alternativamente, MPlayer contiene un controlador VIDIX para la tarjeta Cyberblade/i1.

4.2.1.7. Tarjetas Kyro/PowerVR

Si quiere usar Xv con una tarjeta basada en Kyro (por ejemplo Hercules Prophet 4000XT), debe descargar los controladores desde el sitio de PowerVR

4.2.2. DGA

PREÁMBULO.  Este documento intenta explicar en pocas palabras que es DGA en general y que puede hacer el controlador de video DGA de MPlayer (y qué no puede hacer).

QUÉ ES DGA.  DGA es una abreviatura para Direct Graphics Access y eso significa que es un programa que pasa por alto el servidor X y modifica directamente la memoria de framebuffer. Técnicamente hablando esto se hace mapeando la memoria del framebuffer en el rango de memoria de su proceso. Esto es permitido por el kernel solo si tiene privilegios de superusuario. Puede obtenerlos identificandose como root o estableciendo el bit SUID en el ejecutable de MPlayer (no recomendado).

Hay dos versiones de DGA: DGA1 es usado por XFree 3.x.x y DGA2 fue introducido con Xfree 4.0.1.

DGA1 provee solo acceso directo al framebuffer como se describe más arriba. Para cambiar la resolución de la señal de video debe apoyarse en la extensión XVidMode.

DGA2 incorpora las características de la extensión XVidMode y también permite cambiar la profundidad de color de la pantalla. Con eso puede, básicamente ejecutar un servidor X con profundidad de color de 32 bit, cambiando a una profundidad de 15 bits y viceversa.

Sin embargo DGA tiene algunos problemas. Parece ser muy dependiente del chip gráfico que usa en la implementación del controlador de video en el servidor X que controla a este chip. Por eso no funciona en todos los sistemas...

INSTALANDO SOPORTE DGA PARA MPlayerPrimero asegura que X carga la extensión DGA, mira en /var/log/XFree86.0.log:

(II) Loading extension XFree86-DGA

Vea, ¡XFree86 4.0.x o posterior es altamente recomendado! El controlador DGA de MPlayer es autodetectado por ./configure, o puede forzarlo con --enable-dga.

Si el controlador no puede cambiar a una resolución menor, experimente con opciones -vm (solo con X 3.3.x), -fs, -bpp, -zoom para encontrar un modo de video donde quepa la película. No hay un conversor bueno por ahora :(

Hágase root. DGA necesita acceso root para permitir escribir directamente en la memoria de video. Si quiere ejecutarlo como usuario, entonces instale MPlayer SUID root:

chown root /usr/local/bin/mplayer
chmod 750 /usr/local/bin/mplayer
chmod +s /usr/local/bin/mplayer

Ahora funciona como usuario simple, también.

Riesgos de seguridad

¡Esto es un gran riesgo de seguridad! Nunca haga esto en un servidor o en un ordenador que pueda ser accedido por otra gente porque pueden ganar privilegios de root a través del MPlayer SUID root.

Ahora use la opción -vo dga, y ya debe ir! (espero :) También debe probar si la opción -vo sdl:dga funciona para usted! ¡Esto es mucho más rápido!

CAMBIOS DE RESOLUCIÓN.  El controlador DGA le permite cambiar la resolución de la señal de salida. Esto evita tener que hacer escalado por software (lento) y al mismo tiempo provee imagen a pantalla completa. Idealmente debe cambiarse a la resolución exacta (excepto para respetar relación de aspecto) de los datos de video, pero el servidor X solo permite cambiar resoluciones predefinidas en /etc/X11/XF86Config /etc/X11/XF86Config (/etc/X11/XF86Config-4 para XFree 4.X.X respectivamente). Estas son definidas por las llamadas modelines y dependen de las capacidades de su hardware de video. El servidor X escanea este archivo de configuración durante el inicio y desactiva los modelines que no sirvan para su hardware. Puede encontrar que modos sobreviven en el archivo de historial de X11. Puede encontrarse en: /var/log/XFree86.0.log.

Se sabe que estas entradas funcionan bien con un chip Riva128, usando el modulo de controlador nv.o del servidor X.

Section "Modes"
  Identifier "Modes[0]"
  Modeline "800x600"  40     800 840 968 1056  600 601 605 628
  Modeline "712x600"  35.0   712 740 850 900   400 410 412 425
  Modeline "640x480"  25.175 640 664 760 800   480 491 493 525
  Modeline "400x300"  20     400 416 480 528   300 301 303 314 Doublescan
  Modeline "352x288"  25.10  352 368 416 432   288 296 290 310
  Modeline "352x240"  15.750 352 368 416 432   240 244 246 262 Doublescan
  Modeline "320x240"  12.588 320 336 384 400   240 245 246 262 Doublescan
EndSection

DGA & MPlayer DGA es usado en dos lugares con MPlayer: El controlador SDL puede prepararse para que lo use (-vo sdl:dga) y el controlador DGA (-vo dga. Lo mencionado más arriba es correcto para ambos; en las siguientes secciones explicaré cómo funciona el controlador DGA para MPlayer.

CARACTERISTICAS.  El controlador DGA es invocado especificando -vo dga en la línea de órdenes. El comportamiento por defecto es cambiar a una resolución que coincida con la resolución original del video o tan cercana como sea posible. De forma deliberada ignora las opciones -vm y -fs (activando el cambio de modo de video y pantalla completa) - siempre intenta cubrir tanta área de su pantalla como sea posible cambiando el modo de video, lo que lo hace usar un ciclo adicional de su CPU para escalar la imagen. Si no le gusta este modo que elije puede forzar que se elija el modo que se ajuste más a la resolución especificada por -x y -y. Proporcionando la opción -v, el controlador DGA imprimirá, junto con otro montón de cosas, una lista de todas las resoluciones soportadas por su archivo XF86Config actual. Teniendo DGA2 también puede forzar que se use cierta profundidad de color usando la opción -bpp. Profundidades de color válidas son 15, 16, 24 y 32. Depende de su hardware que estén soportadas de manera nativa o que se hagan mediante una conversión por software (posiblemente lento).

Si tiene la suerte suficiente para tener memoria fuera de pantalla restante donde colocar una imagen entera, el controlador DGA usará doblebuffering, lo que puede resultar en una reproducción de la película mucho más suave. Le informará de cuándo está activado o no el doble-buffer.

Doblebuffering significa que el siguiente marco de su video está siendo dibujado en alguna zona de memoria fuera de la pantalla mientras se muestra el marco actual. Cuando el siguiente marco está listo, el chip de gráficos solo dice la posición en memoria donde se encuentra y muestra los datos que hay allí. Mientras tanto el otro buffer en memoria es rellenado de nuevo con nuevos datos de video.

Doblebuffering puede ser activado usando la opción -double y desactivado con -nodouble. Actualmente la opción por defecto es doblebuffering desactivado. Cuando use el controlador DGA, la información en pantalla (OSD) solo funciona si está el doblebuffering activado. Sin embargo, activar doblebufferint puede resultar en una falta grande de velocidad (en mi K6-II+ 525 usa un 20% adicional de tiempo de CPU!) dependiendo de la implementación de DGA para su hardware.

ASUNTOS SOBRE VELOCIDAD.  Generalmente hablando, el acceso DGA al framebuffer debe ser al menos tan rápido como usar el controlador X11 con el beneficio adicional de obtener una imagen a pantalla completa. Los porcentajes de velocidad son impresos por MPlayer y se tienen que interpretar con cuidado, por ejemplo, con el controlador X11 no se incluye el tiempo usado por el servidor X necesario para realizar el dibujo en pantalla. Conecte un terminal serie a su equipo e inicie top para ver qué es realmente lo que está ocurriendo en su equipo.

Generalmente hablando, el aumento de velocidad por usar DGA frente al uso 'normal' usando X11 depende en gran medida de su tarjeta gráfica y de cómo de optimizado esté el módulo del servidor X.

Si tiene un sistema lento, mejor use 15 o 16 bit de profundidad de color porque requieren solo la mitad de ancho de banda de memoria que una pantalla de 32 bit.

Usar una profundidad de color de 24 bit sigue siendo incluso buena idea aunque su tarjeta soporte 32 bit de forma nativa porque transfiere 25% menos datos que el modo 32/32.

He visto algunos archivos AVI reproducidos en un Pentium MMX 266. Las CPUs AMD K6-2 deben funcionar a 400 MHz o superior.

FALLOS CONOCIDOS.  Bien, de acuerdo con algunos desarrolladores de XFree, DGA es bastante bestia. Ellos aconsejan que es mejor no usarlo. Su implementación no funciona bien con todos los controladores de chipsets para XFree existentes.

  • Con XFree 4.0.3 y nv.o hay un fallo que resulta en extraños colores.

  • El controlador ATI requiere cambiar el modo original más de una vez una vez finaliza el uso de DGA.

  • Algunos controladores símplemente fallan al volver a la resolución normal (use Ctrl+Alt+Keypad + y Ctrl+Alt+Keypad - para volver al modo normal de manera manual).

  • Algunos controladores símplemente muestran colores extraños.

  • Algunos controladores se quejan de la cantidad de memoria que intenta mapear el espacio de direcciones del proceso, incluso cuando vo_dga no quiere usar doblebuffering (¿SIS?).

  • Algunos controladores parecen fallar informando de un único modo válido. En este caso el controlador DGA falla diciendole que no tiene sentido el modo 100000x100000 o algo así.

  • OSD solo funciona con doblebuffering activado (si no parpadea).

4.2.3. SDL

SDL (Simple Directmedia Layer) es básicamente una interfaz unificada de video/audio. Los programas que la usan solo tienen que preocuparse de SDL, y no del controlador de video o audio que SDL esté usando. Por ejemplo una versión de Doom que use SDL puede usarse en svgalib, aalib, X, fbdev, y otros, solo tiene que especificar el (por ejemplo) controlador de video a usar con la variable de entorno SDL_VIDEODRIVER. Bueno, teóricamente.

Con MPlayer, se usa la característica del escalador software del controlador X11 para tarjetas/controladores que no soportan XVideo, hasta que hagamos nuestro propio (más rápido, más bonito) escalador por software. También usamos su salida aalib, pero ahora tenemos el nuestro propio que es más confortable. Su modo DGA fue mejor que el nuestro, hasta hace poco. ¿Lo quiere probar ahora? :)

También ayuda con algunos controladores/tarjetas con fallos si el video va a saltos (sin ser un problema de sistema lento), o el audio va con retardo.

La salida de video SDL permite mostrar los subtítulos debajo de la película, en la (si está presente) banda negra.

Hay varias opciones en la línea de órdenes para SDL:

-vo sdl:nombre

especifica el controlador de SDL de video a usar (i.e. aalib, dga, x11)

-ao sdl:nombre

especifica el controlador de SDL de audio a usar (i.e. dsp, esd, arts)

-noxv

desactiva la aceleración hardware XVideo

-forcexv

intenta forzar la aceleración XVideo

Tabla 4.1. Teclas solo para SDL

TeclaAcción
c cambia entre los modos de pantalla completa disponibles
n regresa al modo normal

Fallos conocidos:

  • Al pulsar teclas bajo una consola sdl:aalib el controlador la repite indefinidamente. (¡Mejor use la opción -vo aa!) Es un fallo de SDL, yo no puedo cambiarlo (probado con SDL 1.2.1).

  • ¡NO USE SDL con GUI! El comportamiento no será el esperado.

4.2.4. SVGAlib

INSTALACIÓN.  Debe instalar svgalib y su paquete de desarrollo para construir MPlayer con el controlador SVGAlib (es autodetectado, aunque también puede forzarse), y no se olvide de editar /etc/vga/libvga.config para configurar su tarjeta y su monitor.

Nota

Asegúrese de no usar la opción -fs, porque cambia el estado del uso del escalador software, y es lento. Si realmente lo necesita, use la opción -sws 4 lo que le producirá peor calidad, pero es algo más rápido.

SOPORTE EGA (4BPP).  SVGAlib incorpora EGAlib, y MPlayer tiene la posibilidad de mostrar cualquier película en 16 colores, de manera que se puede usar con las siguientes configuraciones de equipos:

  • Tarjeta EGA con monitor EGA: 320x200x4bpp, 640x200x4bpp, 640x350x4bpp

  • Tarjeta EGA con monitor CGA: 320x200x4bpp, 640x200x4bpp

El valor bpp (bits por pixel) debe establecerse a 4 manualmente: -bpp 4

La película probablemente deberá ser escalada para ajustarse al modo EGA:

-vf scale=640:350

o

-vf scale=320:200

Para eso se necesita una rutina de escalado de mala calidad pero rápida:

-sws 4

Quizá la corrección automática de relación de aspecto deberá desactivarse:

-noaspect

Nota

De acuerdo con mi experiencia la mejor calidad de imagen en pantallas EGA puede obtenerse decrementando el brillo un poco: -vf eq=-20:0. También necesité bajar la tasa de muestreo en mi equipo, porque el sonido no funcionaba a 44kHz: -srate 22050.

Puede activar OSD y subtítulos solo con el filtro expand, vea la página de manual para los parámetros concretos.

4.2.5. Salida en framebuffer (FBdev)

Si se construye o no el objetivo FBdev es autodetectado durante el ./configure. Lea la documentación del framebuffer en los fuentes del núcleo (Documentation/fb/*) para más información.

Si su tarjeta no soporta el estándar VBE 2.0 (tarjetas ISA/PCI antiguas, tales como S3 Trio64), solo VBE 1.2 (¿o anterior?): Bueno, VESAfb sigue funcionando, pero necesitará cargar SciTech Display Doctor (formalmente UniVBE) antes de iniciar Linux. Use un disco de inicio DOS o similar. Y no olvide registrar UniVBE ;))

La salida FBdev toma parámetros adicionales sobre los otros:

-fb

especifica el dispositivo framebuffer a usar (/dev/fb0)

-fbmode

nombre del modo a usar (de acuerdo con /etc/fb.modes)

-fbmodeconfig

archivo de configuración de modos (por defecto /etc/fb.modes)

-monitor-hfreq, -monitor-vfreq, -monitor-dotclock

valores importantes important, vea example.conf

Si desea cambiar a un modo específico, use

mplayer -vm -fbmode nombre_del_modo nombrearchivo

  • -vm sin más opciones elije el mejor modo desde /etc/fb.modes. Puede usarse junto con las opciones -x y -y también. La opción -flip está soportada solo si el formato de pixel de la película coincide con el formato de pixel del modo de video. Preste atención al valor bpp, el controlador fbdev intentará usar el actual, o si especifica uno con la opción -bpp, pues ese.

  • La opción -zoom no está soportada (use -vf scale). No puede usar modos de 8bpp (o menos).

  • Posiblemente quiera desactivar el cursor:

    echo -e '\033[?25l'

    o

    setterm -cursor off

    y el protector de pantalla:

    setterm -blank 0

    Para volver a activar el cursor:

    echo -e '\033[?25h'

    o

    setterm -cursor on

Nota

Los cambios de modo de video para FBdev no funcionan con el framebuffer VESA, y no nos pida que funcione, porque no es una limitación de MPlayer.

4.2.6. Framebuffer de Matrox (mga_vid)

Esta sección se encarga de describir el soporte de Matrox G200/G400/G450/G550 BES (Back-End Scaler), el controlador del núcleo mga_vid. Está en activo desarrollo poro A'rpi, y tiene soporte de VSYNC por hardware con triple buffering. Funciona tanto en consola con frambuffer como bajo X.

Aviso

¡Esto es solo en Linux! En sistemas no-Linux (probado en FreeBSD), puede usar en su lugar VIDIX!

Instalación:

  1. Para usarlo, primero tendrá que compilar mga_vid.o:

    cd drivers
    make

  2. Cree ahora el dispositivo /dev/mga_vid:

    mknod /dev/mga_vid c 178 0

    y cargue el controlador con

    insmod mga_vid.o

  3. Deberá verificar la autodetección del tamaño de memoria usando la órden dmesg. Si es incorrecta, use la opción mga_ram_size (antes haga rmmod mga_vid), especifique el tamaño de la memoria de la tarjeta gráfica en MB:

    insmod mga_vid.o mga_ram_size=16

  4. Para que se cargue/descargue automáticamente cuando sea necesario, primero inserte la siguiente línea al final de /etc/modules.conf:

    alias char-major-178 mga_vid

    Después copie el módulo mga_vid.o al lugar apropiado bajo /lib/modulesversión de kernel/dondesea.

    Y después ejecute

    depmod -a

  5. Ahora deberá (re)compilar MPlayer, ./configure detectará /dev/mga_vid y construirá el controlador 'mga'. Luego lo podrá usar con MPlayer mediante -vo mga si tiene una consola matroxfb, o -vo xmga bajo XFree86 3.x.x ó 4.x.x.

El controlador mga_vid coopera con Xv.

El archivo de dispositivo /dev/mga_vid puede ser leído para obtener informaión, por ejemplo mediante

cat /dev/mga_vid

y puede se escrito para realizar cambios en el brillo:

echo "brightness=120" > /dev/mga_vid

4.2.7. Soporte 3Dfx YUV

Este controlador usa el controlador framebuffer del kernel tdfx para reproducir las películas con aceleración YUV. Necesita un kernel con soporte tdfxfb, y recompilar con

./configure --enable-tdfxfb

4.2.8. Salida OpenGL

MPlayer permite mostrar películas usando OpenGL, pero si su plataforma/controlador soporta xv como es el caso en un PC con Linux, usa xv en su lugar, el rendimiento en OpenGL es considerablemente peor. Si tiene una implementación de X11 sin soporte para xv, OpenGL es una alternativa viable.

Desafortunadamente no todos los controladores soportan esta característica. Los controladores Utah-GLX (para XFree86 3.3.6) lo soportan para todas las tarjetas. Vea http://utah-glx.sourceforge.net para detalles sobre su instalación.

XFree86(DRI) 4.0.3 o posterior soportan OpenGL con tarjetas Matrox y Radeon, 4.2.0 o posterior soportan Rage128. Vea http://dri.sourceforge.net para instrucciones de descarga e instalación.

Un consejo de uno de nuestros usuarios: la salida de video GL puede usarse para obtener salida de TV con sincronización vertical. Puede establecer una variable de entorno (por lo menos con nVidia):

export $__GL_SYNC_TO_VBLANK=1

4.2.9. AAlib - reproduciendo en modo texto

AAlib es una biblioteca para mostrar gráficos en modo texto, usando un render ASCII potente. Hay montones de programas que tienen soporte para AAlib, como Doom, Quake, etc. MPlayer contiene un controlador que funciona bastante bien para ello. Si ./configure detecta que aalib está instalado, el controlador aalib libvo será compilado.

Puede usar algunas teclas en la ventana AA para cambiar las opciones de renderizado:

TeclaAcción
1 reducir contraste
2 aumentar contraste
3 reducir brillo
4 aumentar brillo
5 cambiar renderizado rápido activado/desactivado
6 establece el modo de difuminado (ninguno, distribución de error, Floyd Steinberg)
7 invierte la imagen
8 cambia entre control de aa y MPlayer

Pueden usarse las siguientes opciones en la línea de órdenes:

-aaosdcolor=V

cambia el color OSD

-aasubcolor=V

cambia el color de los subtítulos

donde V puede ser: 0 (normal), 1 (oscuro), 2 (negrita), 3 (tipografía negrita), 4 (invertido), 5 (especial).

AAlib provee por sí mismo una gran cantidad de opciones. Aquí están algunas de las más importantes:

-aadriver

establecer el controlador aa recomendado (X11, curses, Linux)

-aaextended

usar los 256 caracteres

-aaeight

usar ASCII de ocho bit

-aahelp

muestra todas las opciones de aalib

Nota

El renderizado hace un uso intensivo de la CPU, especialmente usando AA-en-X (usando aalib bajo X), y hace un uso menos intenso de CPU en una consola estándar, sin framebuffer. Use SVGATextMode para establecer un modo texto grande, ¡y disfrútelo! (en las tarjetas Hercules con pantalla secundaria queda muy bien :)) (pero en mi humilde opinión puede usar la opción -vf 1bpp para obtener gráficos en hgafb :)

Use la opción -framedrop si su ordenador no es lo suficientemente rápido para renderizar todos los marcos!

Al reproducir en un terminal puede obtener mejor velocidad y calidad usando el controlador Linux, en lugar del curses (-aadriver linux). Pero lo malo es que necesita permisos de escritura en /dev/vcsa<terminal>! Esto no es automáticamente detectado por aalib, pero vo_aa intenta encontrar el mejor modo. Vea http://aa-project.sourceforge.net/tune para más detalles y ajustes.

4.2.10. libcaca - Biblioteca de Arte AsCii en color

La biblioteca libcaca es una biblioteca gráfica que tiene como salida texto en lugar de pixels, de modo que funicona en cualquier tarjeta gráfica antigua o en terminales de texto. No es como la famosa biblioteca AAlib. libcaca necesita un terminal para funcionar, esto es funciona en todo sistema Unix (incluyendo Mac OS X) usando bien la biblioteca slang o bien la biblioteca ncurses, en DOS usando la biblioteca conio.h, y en sistemas Windows usando bien slang o ncurses (a través de emulación Cygwin) o conio.h. Si ./configure detecta libcaca, el controlador de salida caca libvo será construido.

Las diferencias con AAlib son las siguientes:

  • 16 colores disponibles para la salida de caracteres (256 pares de colores)

  • difuminado del color de la imagen

Pero libcaca también tiene las siguientes limitaciones:

  • no soporta brillo, contraste, gamma

Puede usar algunas teclas en la ventana caca para cambiar opciones de renderizado:

TeclaAcción
d Cambia los métodos de difuminado de libcaca.
a Cambia el antialiasing en libcaca.
b Cambia el fondo en libcaca.

libcaca también mira algunas variables de entorno:

CACA_DRIVER

Establece el controlador caca recomendado, e.g. ncurses, slang, x11.

CACA_GEOMETRY (solo X11)

Especifica el número de filas y columnas. e.g. 128x50.

CACA_FONT (solo X11)

Especifica la tipografía a usar. e.g. fixed, nexus.

Use la opción -framedrop si su ordenador no es suficientemente rápido para renderizar todos los marcos de imagen.

4.2.11. VESA - salida en VESA BIOS

Este controlador fue diseñado e introducido como un controlador genérico para cualquier tarjeta gráfica que tenga una BIOS compatible con VESA VBE 2.0. Otra ventaja de este controlador es que intenta forzar la activación de la salida de TV. VESA BIOS EXTENSION (VBE) Version 3.0 Fecha: 16 de Septiembre, 1998 (Página 70) dice:

Diseños de controlador-dual.  VBE 3.0 soporta el diseño de controlador-dual asumiendo que ambos controladores norlmanmente son proporcionados por el mismo OEM, bajo el control de una ROM BIOS única en la misma tarjeta gráfica, es posible esconder el hecho de que hay dos controladores presentes para la aplicación. Esto tiene la limitación de prevenir el uso simultáneo de controladores independientes, pero permite a las aplicaciones que se hayan desarrollado antes de la liberación de VBE 3.0 operar normalmente. La función VBE 00h (Devuelve Información sobre el Controlador) devuelve información combinada de ambos controladores, incluyendo una lista combinada de los modos disponibles. Cada una de las funciones VBE restantes operan en el controlador activo.

Por ello puede hacer que la salida-TV funcione usando este controlador. (Yo creo que la salida-TV normalmente tiene una cabeza individual o al menos una salida individual.)

VENTAJAS

  • Le permite ver sus películas incluso si Linux no conoce su hardware de video.

  • No necesita tener instalado nada relacionado con gráficos en su Linux (como X11 (también conocido como XFree86), fbdev ni nada por el estilo). Este controlador puede funcionar en modo-texto.

  • Puede hacer funcionar la salida-TV. (Esto es conocido al menos para las tarjetas ATI).

  • Este controlador llama al manejador int 10h y no realiza una emulación - hace llamas reales de BIOS real en modo-real. (actualmente en modo vm86).

  • Puede usar VIDIX con él, obteniendo pantalla de gráficos acelerados y salida TV al mismo tiempo! (Recomendado para tarjetas ATI.)

  • Si tiene VESA VBE 3.0+, y especifica monitor-hfreq, monitor-vfreq, monitor-dotclock en algún sitio (archivo de configuración, o línea de órdenes) podrá obtener la tasa de refresco mayor posible. (Usando la Fórmula de Temporización General). Para activar ésta característica debe especificar todas las opciones de su monitor.

DESVENTAJAS

  • Solo funciona en sistemas x86.

  • Solo puede ser usado por root.

  • En la actualidad solo está disponible para Linux.

Importante

No use este controlador con GCC 2.96! ¡No funcionará!

OPCIONES EN LA LÍNEA DE ÓRDENES PARA VESA

-vo vesa:opts

reconocidas actualmente: dga para forzar el modo dga y nodga para desactivar el modo dga. En modo dga puede activar doble buffering mediante la opción -double. Nota: puede omitir estos parámetros activando autodetección del modo dga.

PROBLEMAS CONOCIDOS Y SUS SOLUCIONES

  • Si tiene instalada una tipografía NLS en su equipo Linux y ejecuta el controlador VESA en modo-texto entonces después de terminar MPlayer tendrá cargada una tipografía ROM en lugar de la nacional. Puede cargar de nuevo la tipografía nacional usando la utilidad setsysfont de la distribución Mandrake por ejemplo. (Consejo: La misma utilidad se usa para la localización de fbdev).

  • Algunos controladores gráficos para Linux no actualizan el modo BIOS activo en la memoria DOS. Si tiene ese problema - use siempre el controlador VESA solo en modo-texto. De otro modo el modo texto (#03) será activado de todas maneras y tendrá que reiniciar la computadora.

  • Además puede obtener una pantalla negra cuando el controlador VESA termine. Para volver al estado original de la pantalla - símplemente cambie a otra consola (pulsando Alt+F<x>) y vuelva a la consola original del mismo modo.

  • Para hacer que funcione la salida-TV deberá tener conectado el conector de TV antes de iniciar el PC porque la BIOS de video lo inicia automáticamente durante el proceso POST.

4.2.12. X11

Evite usarlo si es posible. La salida a X11 (usa la extensión de memoria compartida), sin ninguna aceleración hardware. Soporta (acelerado por MMX/3DNow/SSE, pero sigue siendo lento) escalado por software, use las opciones -fs -zoom. La mayoría de las tarjetas tienen soporte de escalado por hardware, use la salida -vo xv para obtenerlo, o -vo xmga para las Matrox.

El problema es que la mayoría de los controladores de las tarjetas no soportan aceleración hardware en un monitor/TV secundario. En esos casos, puede ver una ventana de color verde/azul en lugar de la película. Aquí es donde entra en escena este controlador, pero necesitará una CPU potente para escalar por software. No use el escalador+salida por software de SDL, ¡obtendrá una peor calidad de imagen!

El escalado por software es muy lento, mejor pruebe a cambiar el modo de video. Es muy simple. Vea los la sección de modos de DGA, e insertela en su XF86Config.

  • Si tiene XFree86 4.x.x: use la opcioón -vm. Esto cambiará a una resolución donde la película se ajuste. Si no lo hace:

  • Con XFree86 3.x.x: tiene que cambiar entre las resoluciones disponibles con las teclas Ctrl+Alt+plus y Ctrl+Alt+minus.

Si no puede encontrar los modos que ha insertado, consule la salida de XFree86. Algunos controladores no pueden usar pixelclocks bajos que son necesarios para modos de video de baja resolución.

4.2.13. VIDIX

PREÁMBULO.  VIDIX es la abreviatura para VIDeoInterface para *niX. VIDIX ha sido diseñado e introducido como una interfaz para los controladores de espacio de usuario que proveen tanto rendimiento de video como mga_vid lo hace para las tarjetas Matrox. También es muy portable.

Esta interfaz ha sido diseñada como un intento por ajustar las interfaces de aceleración de video existentes (conocidas como mga_vid, rage128_vid, radeon_vid, pm3_vid) en un esquema fijo. Provee una interfaz de alto nivel a los chips que es conocida como BES (BackEnd scalers) u OV (Video Overlays). No provee interfaz a bajo nivel de cosas conocidas por los servidores gráficos. (No quiero competir con el equipo X11 en el cambio de modos de gráfidcos). Es decir, el principal objetivo de esta interfaz es maximizar la velocidad de la reproducción de video.

USO

  • Puede usar un controlador de salida de video individual: -vo xvidix. Este controlador ha sido desarrollado como u front end de X11 a la tecnología VIDIX. Requiere un servidor X y puede funcionar solo bajo un servidor X. Note que, como accede directamente al hardware y no usa el controlador X, los mapas de pixels en caché en la memoria de la tarjeta gráfica pueden estar corruptos. Puede prevenir esto limitando la cantidad de memoria de video usada por X con la opción "VideoRam" de XF86Config en la sección device. Debe establecer el valor a la cantidad de memoria instalada en su tarjeta menos 4MB. Si tiene menos de 8MB de ram de video, puede usar la opción "XaaNoPixmapCache" en la sección screen en su lugar.

  • Hay un controlador de consola VIDIX: -vo cvidix. Requiere un framebuffer inicializado y funcionando para muchas tarjetas (o fastidiará su pantalla), y obtendrá un efecto similar al que se obtiene con -vo mga o -vo fbdev. Las tarjetas nVidia, sin embargo, son capaces de mostrar gráficos reales de video sobre una consola de texto real. Vea la sección nvidia_vid para más información.

  • Puede usar el subdispositivo VIDIX aplicado a varios controladores de salida de video, tales como: -vo vesa:vidix (solo en Linux) y -vo fbdev:vidix.

Como ve no impora qué controlador de salida de video se usa con VIDIX.

REQUISITOS

  • La tarjeta gráfica debe estar en modo gráfico (excepto las tarjetas nVidia con el controlador de salida -vo cvidix.

  • El controlador de salida de video de MPlayer debe conocer el modo de video activo y ser capaz de decir al subdispositivo VIDIX algunas características de video del servidor.

MODOS DE USO.  Cuando VIDIX se usa como subdispositivo (-vo vesa:vidix) entonces la configuración del modo de video es hecha por el dispositivo de salida de video (vo_server en pocas palabras). Por ese motivo puede pasar en la línea de órdenes de MPlayer las mismas teclas que para vo_server. Además entiende -double como un parámetro visible globalmente. (Recomiendo usar esto con VIDIX por lo menos en tarjetas ATI). Como para -vo xvidix, actualmente reconoce las siguientes opciones: -fs -zoom -x -y -double.

También puede especificar el controlador VIDIX directamente con un tercer argumento en la línea de órdenes:

mplayer -vo xvidix:mga_vid.so -fs -zoom -double archivo.avi

o

mplayer -vo vesa:vidix:radeon_vid.so -fs -zoom -double -bpp 32 archivo.avi

Pero esto es peligroso, y no debería hacerlo. En ese caso el controlador se ve forzado y el resultado puede ser impredicible (puede incluso dejar colgado su ordenador). Debe hacerlo SOLO si está absolutamente seguro de que funciona, y MPlayer no lo hace automáticamente. Por favor en ese caso dígaselo a los desarrolladores. La manera correcta de usar VIDIX es sin argumentos para activar la autodetección del controlador.

VIDIX es una tecnología nueva y es extremadamente posible que en su sistema no funcione. En ese caso la única solución para usted es portarlo (principalmente con libdha). Pero se supone que debe de funcionar en los sistemas en los que funciona X11.

Debido a que VIDIX requiere acceso directo al hardware puede ejecutarlo como root o establecer el bit SUID en el binario de MPlayer (Advertencia: ¡eso es un riesgo de seguridad!). De manera alternativa, puede usar un módulo especial del kernel, como esto:

  1. Descargue la versión de desarrollo de svgalib (por ejemplo 1.9.17), O descargue una versión hecha por Alex especialmente para usar con MPlayer (no necesita el código fuente de svgalib para compilar) desde aquí.

  2. Compile el módulo en el directorio svgalib_helper (puede encontrarse dentro del directorio svgalib-1.9.17/kernel/ si ha descargado el código fuente del sitio de svgalib) e insmodéelo.

  3. Para crear los dispositivos necesarios en el directorio /dev, haga un

    make device

    en el directorio svgalib_helper como root.

  4. Mueva el directorio svgalib_helper a mplayer/main/libdha/svgalib_helper.

  5. Requerido si descarga el código fuente desde el sitio de svgalib: Borre el comentario antes de la línea CFLAGS que contiene la cadena "svgalib_helper" en libdha/Makefile.

  6. Recompile e instale libdha.

4.2.13.1. Tarjetas ATI

Actualmente la mayoría de las tarjetas ATI están soportadas de manera nativa, desde la Mach64 hasta las más nuevas Radeons.

Hay dos binarios compilados: radeon_vid para Radeon y rage128_vid para tarjetas Rage 128. Puede forzar uno o dejar que el sistema VIDIX pruebe automáticamente todos los controladores disponibles.

4.2.13.2. Tarjetas Matrox

Hemos sido informados de que funcionan Matrox G200, G400, G450 y G550.

El controlador soporta ecualizadores de video y debe ser casi tan rápido como el Matrox framebuffer

4.2.13.3. Tarjetas Trident

Hay un controlador disponible para los chipset Trident Ciberblade/i1, que puede ser encontrado en las placas base VIA Epia.

El controlador ha sido escrito y es mantenido por, Alastair M. Robinson.

4.2.13.4. Tarjetas 3DLabs

Aunque hay un controlador para los chips 3DLabs GLINT R3 y Permedia3, ninguno ha sido probado, así que cualquier comentario o informe será bienvenido.

4.2.13.5. Tarjetas nVidia

Hay controladores para nVidia relativamente recientes, se sabe que funcionan bien con los chipset Riva 128, TNT y GeForce2, también se nos ha informado de que funciona con otros.

LIMITACIONES

  • Es recomendable usar los controladores binarios de nVidia para X antes de usar el controlador VIDIX, porque algunos de los registros que es necesario inicializar aún no han sido descubiertos, por lo que probablemente falle con el controlador de Código Abierto de XFree86 nv.o.

  • Actualmente solo los codecs que tienen salida en el espacio de color UYVY son los que funcionan junto con este controlador. Desafortunadamente, esto excluye todo decodificador simple de la familia libavcodec. Esto nos deja con los siguientes codecs populares usables: cvid, divxds, xvid, divx4, wmv7, wmv8 y algunos otros. Por favor tenga en cuenta que esto es solo algo temporal. La sintaxis de uso es la siguiente:

        mplayer -vf format=uyvy -vc divxds archivodivx3.avi
      

Una característica única del controlador nvidia_vid es la habilidad de mostrar video en una consola de texto solo, plano y puro - sin framebuffer o X magic ni nada. Para conseguir esto, se ha de usar la salida de video cvidix, como muestra el siguiente ejemplo:

    mplayer -vf format=uyvy -vc divxds -vo cvidix ejemplo.avi
  

¡Esperamos que nos informe!

4.2.13.6. Tarjetas SiS

Se trata de un código muy experimental, al igual que el nvidia_vid.

Ha sido probado en SiS 650/651/740 (los chipset más comunes usados en las versiones SiS de las placas base "Shuttle XPC")

¡Esperamos que nos informe!

4.2.14. DirectFB

"DirectFB es una biblioteca de gráficos que ha sido diseñada con los sistemas embebidos en mente. Ofrece el máximo rendimientdo en aceleración hardware con el mínimo uso de recursos y sobrecarga." - cita de http://www.directfb.org

No incluiré las características de DirectFB en esta sección.

Aunque MPlayer no está reconocido como un "proveedor de video" en DirectFB, este controlador de salida debe activar la reproducción de video a través del DirectFB. Tiene - por supuesto - aceleración, en mi Matrox G400 la velocidad para DirectFB es la misma que con XVideo.

Intente usar siempre la versión más reciente de DirectFB. Puede usar las opciones de DirectFB en la línea de órdenes, usando la opción -dfbopts. La capa de selección puede hacerse con el método de subdispositivo, p.e.: -vo directfb:2 (la capa -1 se usa por defecto: autodetectado)

4.2.15. DirectFB/Matrox (dfbmga)

Lea por favor la sección principal de DirectFB para información general.

Este controlador de salida de video activa CRTC2 (en un segundo monitor) en la tarjeta G400/G450/G550, mostrando video independiente en el monitor principal.

Ville Syrjala tiene un LEAME y un COMO en su página web que explica cómo sacar salida de TV con DirectFB en tarjetas Matrox.

USO

(no)bes

activa el uso de Matrox BES (backend scaler). Da resultados muy buenos en cuanto a velocidad y calidad de salida como procesado de imágenes interpoladas por hardware. Funciona solo en la salida primaria. Por defecto: desactivado

(no)spic

hace uso de la capa de sub imagen para mostrar el OSD de MPlayer. Por defecto: activado

(no)crtc2

activa la salida TV en la segunda salida. La calidad de la salida es sorprendente ya que da una imagen completamente entrelazada con sincronización correcta en cada campo par/impar. Por defecto: activada

(no)input

usa el código de teclado de DirectFB en lugar del código de teclado normal de MPlayer. Por defecto: desactivado

buffermode=single|double|triple

Doble y triple buffer da mejores resultados si quiere evitar problemas de desgarramientos de imagen. Triple buffer es más eficiente que el doble buffer ya que no bloquea MPlayer mientras que espera al refresco vertical. El buffer simple debe evitarse. Por defecto: triple

fieldparity=top|bottom

controla el orden de salida de los marcos de imagen entrelazados. Valores válidos son top = campos superiores primero, bottom = campos inferiores primero. Esta opción no tiene efecto en material de película progresivo como lo son las películas MPEG. Necesitará activar esta opción si tiene problema de desgarros de imagen o movimiento no suave mientras ve material entrelazado. (Buenos ejemplos de material filmográfico entrelazado en DVD son Star Trek Enterprise y Star Trek DS9) Por defecto: desactivado (no establecido)

tvnorm=pal|ntsc|auto

establece la norma de TV en las tarjetas Matrox sin la necesidad de modificar /etc/directfbrc. Normas válidas son pal = PAL, ntsc = NTSC. Una norma especial es auto (auto-ajuste usando PAL/NTSC) porque decide qué norma usar mirando la tasa de imágenes por segundo de la película. Por defecto: desactivado (no establecido)

Nota

La primera versión de DirectFB que hace que esto funcione fue 0.9.17 (tiene fallos, necesita el parche surfacemanager de la URL de más arriba). De todos modos se está trabajando para portar el código de CRTC2 a mga_vid.

4.3. Decodificadores MPEG

4.3.1. DVB salida y entrada

MPlayer soporta tarjetas con el chipset Siemens DVB de vendedores como Siemens, Technotrend, Galaxis o Hauppauge. Los últimos controladores DVB están disponibles en el sitio de Linux TV. Si quiere hacer transcoding de software deberá usar al menos una CPU de 1GHz.

configuredebe detectar su tarjeta DVB. Si no lo hace, fuerce la detección con

./configure --enable-dvb

Si tiene cabeceras ost en una ruta no estándar, establezca la ruta con

./configure --extra-cflags=directorio de fuentes de DVB/ost/include

Y luego compile e instale del modo habitual.

USO.  Decodificación por hardware (reproducción de archivos estándar MPEG1/2) puede hacerse con esta órden:

mplayer -ao mpegpes -vo mpegpes archivo.mpg|vob

Decodificación software o transcoding de formatos diferentes a MPEG1 puede hacerse usando una órden como esta:

mplayer -ao mpegpes -vo mpegpes suarchivo.ext
mplayer -ao mpegpes -vo mpegpes -vf expand yourfile.ext

Tenga en cuenta que las tarjetas DVB solo soportan altugas de 288 y 576 para PAL o 240 y 480 para NTSC. Usted debe escalar para otras alturas añadiendo scale=ancho:alto con el ancho y el alto que quiera para la opción -vf. Las tarjetas DVB aceptan varios anchos, como 720, 704, 640, 512, 480, 352 etc y hacen el escalado por hardware en dirección horizontal, de modo que no necesita escalar horizontalmente en la mayoría de los casos. Para un DivX de 512x384 (aspecto 4:3) pruebe:

mplayer -ao mpegpes -vo mpegpes -vf scale=512:576

Si tiene una película widescreen y no quiere escalar a altura completa, puede usar el filtro expand=w:h para añadir bandas negras. Para ver un DivX de 640x384, pruebe:

mplayer -ao mpegpes -vo mpegpes -vf expand=640:576 archivo.avi

Si su CPU es demasiado lenta para un DivX de tamaño completo de 720x576, pruebe a subescalar:

mplayer -ao mpegpes -vo mpegpes -vf scale=352:576 archivo.avi

Si la velocidad no mejora, pruebe a subescalar verticalmente, también:

mplayer -ao mpegpes -vo mpegpes -vf scale=352:288 archivo.avi

For OSD and subtitles use the OSD feature of the expand filter. So, instead of Para OSD y subtítulos use la característica OSD del filtro expand. Para ello, en lugar de expand=w:h o expand=w:h:x:y, use expand=w:h:x:y:1 (el 5º parámetro :1 al final habilitará el renderizado OSD). Puede que quiera mover la imagen hacia arriba un poco para obtener una zona negra más grande para los subtítulos. También puede mover los subtítulos hacia arriba, si quedan fuera de la pantalla de TV, use la opción -subpos <0-100> para ajustar esto (-subpos 80) es una buena elección).

Para reproducir películas que no sean de 25fps en una TV PAL o con una CPU lenta, añada la opción -framedrop.

Para mantener la razón de aspecto de los archivos DivX y obtener los parámtros óptimos de escalado (escalado horizontal por hardware y escalado vertical por software manteniendo la razón de aspecto correcta), use el filtro dvbscale:

para una TV 4:3: -vf dvbscale,scale=-1:0,expand=-1:576:-1:-1:1
para una TV 16:9: -vf dvbscale=1024,scale=-1:0,expand=-1:576:-1:-1:1

TV Digital (módulo de entrada DVB). Puede usar su tarjeta DVB para ver TV Digital.

Tiene que tener los programas scan y szap/tzap/czap intalados; estos están incluidos en el paquete de controladores.

Verifique que sus controladores están funcionando correctamente con un programa como dvbstream (que es la base del módulo de entrada DVB).

Ahora debe compilar un archivo ~/.mplayer/channels.conf, con la sintaxis aceptada por szap/tzap/czap, o tener scan compilado por usted mismo.

Si tiene más de un tipo de tarjeta (e.g. Satélite, Terrestre y Cable) puede guardar sus archivos de canales como ~/.mplayer/channels.conf.sat, ~/.mplayer/channels.conf.ter y ~/.mplayer/channels.conf.cbl, respectivamente, de ese modo se indica implícitamente a MPlayer que uso esos archivos en lugar de ~/.mplayer/channels.conf, y solo tiene que especificar qué tarjeta usar.

Asegúrese de que tiene solo canales Free to Air en su archivo channels.conf, o MPlayer intentará saltar al siguiente visible, pero puede tardar mucho si hay varios canales consecutivos encriptados.

Para mostrar el primero de los canales presentes en su lista, ejecute

  mplayer dvb://

Si quiere ver un canal específico, tal como R1, ejecute

  mplayer dvb://R1

Para cambiar canales pulse la teclas h (siguiente) y k (previo), o use el menú OSD (requiere un subsistema OSD funcionando).

Si su ~/.mplayer/menu.conf contiene una entrada <dvbsel>, como una del archivo de ejemplo etc/dvb-menu.conf (el cual puede usar para sobreescribir ~/.mplayer/menu.conf),el menú principal mostrará una entrada de un submenú que le permitirá elegir uno de los canales presentes en su channels.conf.

Si quiere grabar un programa en disco puede usar

  mplayer -dumpfile r1.ts -dumpstream dvb://R1

si quiere grabar en un formato diferente (re-codificando) en su lugar puede usar una órden como

  mencoder -o r1.avi -ovc xvid -xvidencopts bitrate=800 -oac mp3lame -lameopts cbr:br=128 -pp=ci dvb://R1

Lea la página de manual para una lista de opciones que puede pasar al módulo de entrada de DVB.

FUTURO.  Si tiene alguna pregunta o desea oir anuncios sobre características futuas y tomar parte en discusiones acerca de estos asuntos, únase a nuestra lista de correo MPlayer-DVB Por favor, recuerde que el idioma en la lista de correo es el Inglés.

En el futuro puede esperar la habilidad de mostrar OSD y subtítulos usando las características nativas de OSD de las tarjetas DVB, así como una reproducción más fluida de películas que no estén a 25fps y transcoding en tiempo real entre MPEG2 y MPEG4 (descompresión parcial).

4.3.2. DXR2

MPlayer soporta reproducción acelerada por hardware con la tarjeta Creative DXR2.

Lo primero que necesita tener es los controladores DRX2 correctamente instalados. Puede encontrar estos controladores e instrucciones para su instalación en el sitio DXR2 Resource Center.

USO

-vo dxr2

activa la salida TV

-vo dxr2:x11 o -vo dxr2:xv

activa la salida Overlay en X11

-dxr2 <opción1:opción2:...>

Esta opción se usa para manejar el controlador DXR2.

El chipset de overlay usado en DXR2 tiene una calidad bastante mala pero la configuración por defecto debe funcionar para todo el mundo. El OSD puede ser usable con overlay (no en una TV) dibujando sobre el colorkey. Con la configuración de colorkey por defecto puede obtener resultados variables, normalmente verá el colorkey alrededor de los caracteres o algún otro efecto divertido. Pero si ajusta bien la configuración del colorkey debe ser capaz de obtener resultados aceptables.

Por favor, vea la página de manual para ver las opciones disponibles.

4.3.3. DXR3/Hollywood+

MPlayer soporta reproducción acelerada por hardware con las tarjetas Creative DXR3 y Sigma Designs Hollywood. Ambas tarjetas usan el chip decodificador em8300 MPEG de Sigma Designs.

Lo primero que necesita es tener el controlador DXR3/H+ correctamente instalado, versión 0.12.0 o posterior. Puede encontrar estos controladores e instrucciones para su instalación en el sitio DXR3 & Hollywood Plus para Linux. configure debe detectar su tarjeta automáticamente, y la compilación debe funcionar sin problemas.

USO

-vo dxr3:prebuf:sync:norm=x:dispositivo

overlay activa overlay en lugar de TVOut. Requiere que tenga una configuración de overlay que funcione correctamente. La manera facil de configurar el overlay es iniciar primero autocal. Después ejecute MPlayer con salida dxr3 y sin overlay, ejecute dxr3view. En dxr3view puede tocar la configuración de overlay y ver los efectos en tiempo real, quizá esta característica esté soportada en el GUI de MPlayer en el futuro. Cuando overlay está correctamente configurado ya no necesitará usar más dxr3view. prebuf activa el prebuffering. Prebuffering es una característica del chip em8300 que se activa para mantener más de un marco por video al mismo tiempo. Esto significa que cuando está ejecutando con prebufferint MPlayer intentará mantener lleno el buffer de video con datos todo el tiempo. Si está en una máquina lenta MPlayer probablemente usa un valor cercano a, o totalmente de 100% de CPU. Esto ocurre normalemente si reproduce flujos MPEG (como DVDs, SVCDs a.s.o.) ya que MPlayer no tiene recodificador a MPEG y llena el buffer muy rápido. Con reproducción de video con prebufferint es mucho menos sensible a otros programas que quieran uso de CPU, no elimina marcos a menos que alguna aplicación aproveche la CPU un largo periodo de tiempo. Cuando ejecuta sin prebuffering el em8300 es mucho más sensible a cargar la CPU, por lo que le sugerimos que active en MPlayer la opción -framedrop para evitar posibles pérdidas de sincronización. sync activa el nuevo motor de sincronización. Esta es actualmente una característica experimental. Con la característica de sincronización activada en el reloj interno de em8300 se monitoriza todas las veces, si comienza a desviarse del reloj de MPlayer es puesto a cero causando que em8300 se salte algunos marcos que están comenzando a tener retardo. norm=x establece la norma de TV de la tarjeta DXR3 sin la necesidad de herramientas externas como em8300setup. Normas válidas son 5 = NTSC, 4 = PAL-60, 3 = PAL. Normas especiales son 2 (auto-ajuste usando PAL/PAL-60) y 1 (auto-ajuste usando PAL/NTSC) porque deciden qué norma usar consultando la tasa de imágenes por segundo de la película. norm = 0 (por defecto) no cambia la norma actual. dispositivo = número de dispositivo a usar si tiene más de una tarjeta em8300. Cualquiera de esas opciones se pueden dejar sin especificar. :prebuf:sync parece que se obtiene un mejor funcionamiento cuando se reproducen películas DivX. La gente ha informado sobre problemas usando la opción prebuf mientras se reproducían archivos MPEG1/2. Puede que desee intentar la reproducción sin ninguna opción primero, y si tiene problemas de sincronía, o problemas con los subtítulos, probar con la opción :sync.

-ao oss:/dev/em8300_ma-X

Para la salida de audio, donde X es el número de dispositivo (0 si hay una tarjeta).

-aop list=resample:fout=xxxxx

El em8300 no puede reproducir tasas de muestreo menores de 44100Hz. Si la tasa de muestreo es mejor que 44100Hz elija 44100Hz o 48000Hz dependiendo de cual se ajuste mejor. P.e. si la pelíula usa 22050Hz use 44100Hz ya que 44100 / 2 = 22050, si es 24000Hz use 48000Hz porque 48000 / 2 = 24000 y de ese modo con cualquier valor que tenga. Esto no funciona con salida de audio digital (-ac hwac3).

-vf lavc/fame

Para ver contenido no-MPEG en el em8300 (p.e. DivX o RealVideo) deberá especificar un filtro de video MPEG1 como libavcodec (lavc) o libfame (fame). Actualmente lavc es más rápido y da mejor calidad de imagen, por lo que le sugerimos que lo use a menos que tenga algún problema con él. Vea la página de manual para más información acerca de -vf lavc/fame. El uso de lavc es altamente recomendado. Actualmente no hay manera de establecer los fps del em8300 lo que significa que son fijos a 29.97fps. Debido a esto es altamente recomendable que use -vf lavc=quality:25 especialmente si está usando prebuffering. ¿Y por qué 25 y no 29.97? bien, el motivo es que cuando usa 29.97 la imagen se vuelve un poco saltarina. La razón de por qué ocurre esto no la conocemos. Si establece un valor entre 25 y 27 la imagen se vuelve estable. Por ahora todo lo que puede haer es aceptar esto sin preguntarse por qué.

-vf expand=-1:-1:-1:-1:1

A pesar de que el controlador DXR3 puede poner OSD en el video MPEG1/2/4, tiene una calidad mucho peor que el tradicional OSD de MPlayer, además de varios problemas de refresco. La línea de órdenes de arriba convertirá primero la entrada de video a MPEG4 (esto es obligatorio, lo siento), y después aplicará un filtro de expansión que no expandirá nada (-1: por defecto), pero servirá para aplicar OSD normal sobre la imagen (esto es lo que hace el "1" del final).

-ac hwac3

El em8300 permite la reproducción de audio AC3 (sonido surround) a través de la salida de audio digital de la tarjeta. Vea la opción -ao oss de más arriba, debe usarse para especificar salida DXR3 en lugar de una tarjeta de sonido.

4.4. Otro hardware de visualización

4.4.1. Zr

Se trata de un controlador de pantalla (-vo zr) para un número de tarjetas de captura/reproducción de MJPEG (probado con DC10+ y Buz, y también debe funcionar con LML33, el DC10). El controlador funciona codificando el marco a JPEG y enviándolo luego a la tarjeta. Para la codificación JPEG se usa libavcodec, y además es obligatorio usarlo. Con el modo especial cinerama, puede ver películas en wide screen real suponiendo que tiene dos proyectores y dos tarjetas MJPEG. Dependiendo de la configuración de resolución y calidad, este controlador puede requerir una gran cantidad de potencia de CPU, recuerde especificar -framedrop si su máquina es demasiado lenta. Nota: Mi AMD K6-2 350MHz es (con -framedrop) bastante adecuada para reproducir material del tamaño de VCD y escalar a menor tamaño del original las películas.

Este controlador se comunica con el controlador del kernel disponible en http://mjpeg.sourceforge.net, por eso antes de nada deberá tener este funcionando. La presencia de una tarjeta MJPEG es autodetectada por el script configure, si la autodetección falla, fuércela con

./configure --enable-zr

La salida puede ser controlada con varias opciones, una descripción larga de las opciones puede encontrarse en la página de manual, una lista corta de las opciones puede verse ejecutando

mplayer -zrhelp

Piense que el escalado y el OSD (información en pantalla) no son manejados por este controlador pero pueden hacerse usando filtros de video. Por ejemplo, suponta que tiene una película con una resolución de 512x272 y desea verla en pantalla completa con su DC10+. Hay tres posibilidades principalmente, puede escalar la película a un ancho de 768, 384 o 192. Por motivos de rendimiento y calidad, puede que quiera elegir escalar la película a 384x204 usando el escalador por software rápido bilineal. La línea de órdenes es

mplayer -vo zr -sws 0 -vf scale=384:204 película.avi

Se puede recortar con el filtro crop y también por este controlador directamente. Supongamos que tenemos una película que es demasiado ancha para mostrarla en su Buz y que quiere usar -zrcrop para hacer la película menos ancha, entonces puede que le sea útil la siguiente órden

mplayer -vo zr -zrcrop 720x320+80+0 benhur.avi

si quiere usar el filtro crop, puede que desee hacer

mplayer -vo zr -vf crop=720:320:80:0 benhur.avi

Si aparece -zrcrop más veces invoca el modo cinerama, p.e. si quiere distribuir la película en varias TV's o proyectores para crear una pantalla más grande. Supongamos que tiene dos proyectores. Uno lo conecta a su Buz en /dev/video1 y el otro lo conecta a su DC10+ en /dev/video0. La película tiene una resolución de 704x288. Supongamos también que que quiere el proyector de la derecha en blanco y negro y el otro debe tener imágenes JPEG con calidad 10, para todo esto deberá usar la siguiente órden

mplayer -vo zr -zrdev /dev/video0 -zrcrop 352x288+352+0 -zrxdoff 0 -zrbw \
    -zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10 \
        movie.avi

Puede ver que las opciones que aparecen antes del segundo -zrcrop solo se aplican al DC10+ y que las opciones después del segundo -zrcrop se aplican al Buz. El número máximo de tarjetas MJPEG que pueden participar en el modo cinerama es cuatro, de modo que puede construirse una pantalla de 2x2.

Finalmente un apunte importante: No inicie o pare XawTV en el dispositivo de reproduccion durante la misma, porque puede colgar su ordenador. Sin embargo sí va bien si PRIMERO inicia XawTV, DESPUÉS inicia MPlayer, espera a que MPlayer termine y DESPUÉS detiene XawTV.

4.4.2. Blinkenlights

Este controlador permite la reproducción usando el protocolo UDP Blinkenlinghts. Si no sabe qué es Blinkenlinghts no necesita este controlador.

4.5. Soporte de salida-TV

4.5.1. Tarjetas Matrox G400

Bajo Linux tiene dos maneras de que la salida de TV de la G400 funcione:

Importante

para instrucciones sobre salida-TV de Matrox G450/G550 , ¡vaya a la sección siguiente!

XFree86

Usando el controladoro y el módulo HAL, disponible en el sitio web de Matrox. Esto hará que tenga salida de TV bajo X.

Este método no obtiene reproducción acelerada ¡como bajo Windows! La segunda salida tiene solo framebuffer YUV, el BES (Back End Scaler, el escalador YUV en las tarjetas G200/G400/G450/G550) no funciona allí! El controlador de windows arregla esto de algún modo, probablemente usando el motor 3D para el zoom, y el framebuffer YUV para mostrar la imagen ampliada. Si realmente desea usar X, use las opciones -vo x11 -fs -zoom, pero irá LENTO, y tendrá la protección de Macrovision activada (puede saltarse la protección de Macrovisión usando éste script en perl).

Framebuffer

Usando los módulos matroxfb en los kernel 2.4. Los kernel 2.2 no tienen la característica de TVout, por lo que no se pueden usar para esto. Tiene que activar todas las características específicas de matroxfb durante la compilación (excepto MultiHead), ¡y compilarlo como módulos! También necesita activar I2C.

  1. Entre en TVout y escriba ./compile.sh. Instale TVout/matroxset/matroxset en cualquier lugar de su PATH.

  2. Si no tiene fbset instalado, ponga TVout/fbset/fbset en cualquier lugar de su PATH.

  3. Si no tiene con2fb instalado, ponga TVout/con2fb/con2fb en cualquier lugar de su PATH.

  4. Después entre en el directorio TVout/ de los fuentes de MPlayer, y ejecute ./modules como root. Su consola de modo-texto entrará en modo framebuffer (¡no hay marcha atrás!).

  5. A continuación, EDITE y ejecute el script ./matroxtv. Esto mostrará un menú muy simple. Pulse 2 y Enter. Ahora debe tener la misma imagen en su monitor, y TV. Si la imagen TV (PAL por defecto) tiene algunos efectos extraños, el script no ha sido capaz de establecer la resolución correcta (a 640x512 por defecto). Pruebe otras resoluciones desde el menúo experimente un poco con fbset.

  6. Bueno. La siguiente tarea es hacer que el cursor en tty1 (o donde sea) desaparezca, y desactive el apagado automático del monitor. Ejecute las siguientes órdenes:

    echo -e '\033[?25l'
    setterm -blank 0

    or

    setterm -cursor off
    setterm -blank 0

    Probablemente desee poner lo de arriba en un script, y también limpiar la pantalla. Para hacer que regrese el cursor:

    echo -e '\033[?25h'

    o

    setterm -cursor on

  7. Muy bien chaval. Inicie la reproducción con

    mplayer -vo mga -fs -screenw 640 -screenh 512 nombrearchivo

    (Si usa X, ahora cambie a matroxfb con por ejemplo Ctrl+Alt+F1.) Cambie 640 y 512 si establece otra resolución...

  8. ¡Disfrute de la salida de TV ultra-rápida ultra-buena de Matrox (mejor que Xv)!

Fabricando un cable de salida de TV para Matrox.  Nadie se hace responsable, ni se ofrece ninguna garantía por ningún daño causado por esta documentación.

Cable para G400.  El conector de cuatro contactos de CRTC2 es una señal de video compuesto. La toma de tierra son los contactos sexto, séptimo y octavo. (información proporcionada por Balázs Rácz)

Cable para G450.  Los cuatro primeros contactos del conector CRTC2 son la señal de video compuesto. La tierra es el quinto, sexto, séptimo, y decimoquinto contactos (5, 6, 7, 15). (información proporcionada por Balázs Kerekes)

4.5.2. Tarjetas Matrox G450/G550

El soporte para salida de TV en estas tarjetas ha sido introducido recientemente, y aún no está en la rama principal del kernel. Actualmente el módulo mga_vid no puede usarse AFAIK, porque el controlador de G450/G550 funciona solo en una configuración: el primer chip CRTC (con muchas más características) en la primera pantalla (en el monitor), y el segundo CRTC (no BES - para explicación sobre BES, vea la sección de G400 más arriba) en TV. Actualmente solo puede usar el controlador de salida fbdev de MPlayer.

Actualmente el primer CRTC no puede ser enrutado hacia el segundo monitor. El autor del controlador del kernel matroxfb - Petr Vandrovec - quizá añada soporte para ello, mostrando la salida del CRTC primario en ambas pantallas al mismo tiempo, como recomendamos actualmente para G400, vea la sección anterior.

El parche para el kernel necesario y un 'como' detallado es descargable desde http://www.bglug.ca/matrox_tvout/

4.5.3. Tarjetas ATI

PREÁMBULO.  Actualmente ATI no soporta ningún chip de salida de TV bajo Linux, debido a los problemas de licencia de la tecnología Macrovision.

ESTADO DE LA SALIDA DE TV DE LAS TARJETAS ATI EN LINUX

  • ATI Mach64: soportado por gatos.

  • ASIC Radeon VIVO: soportado por gatos.

  • Radeon y Rage128: soportados por MPlayer! Consulte el controlador VESA y la secciones VIDIX.

  • Rage Mobility P/M, Radeon, Rage 128, Mobility M3/M4: soportado por atitvout.

En otras tarjetas, use el controlador VESA, sin VIDIX. Lo malo es que se necesita una CPU potente.

Lo único que necesita hacer - Tener el conector de TV conectado antes de iniciar su PC porque la BIOS de video se inicializa por sí misma solo una vez durante el proceso POST.

4.5.4. Voodoo 3

Consulte esta URL.

4.5.5. nVidia

Lo primero, DEBE descargar los controladores de fuente-cerrada desde http://nvidia.com. No voy a describir el proceso de instalación y configuración porque no es el objetivo que pretende cubrir esta documentación.

Después de que XFree86, XVideo, y la aceleración 3D estén funcionando correctamente, edite su sección Devide sobre la tarjeta en el archivo XF86Config, de acuerdo con el siguiente ejemplo (adaptado para su tarjeta/TV):

Section "Device"
        Identifier      "GeForce"
        VendorName      "ASUS"
        BoardName       "nVidia GeForce2/MX 400"
        Driver          "nvidia"
        #Option         "NvAGP" "1"
        Option          "NoLogo"
        Option          "CursorShadow"  "on"

        Option          "TwinView"
        Option          "TwinViewOrientation" "Clone"
        Option          "MetaModes" "1024x768,640x480"
        Option          "ConnectedMonitor" "CRT, TV"
        Option          "TVStandard" "PAL-B"
        Option          "TVOutFormat" "Composite"

EndSection

Por supuesto lo importante es la parte del TwinView.

4.5.6. Neomagic

Probado en un Toshiba Tecra 8000. Su chip de salida de TV es una cagada miserable. Evítelo si es posible.

Debe usar -vo vesa. El chip probado tiene capacidad solo para una relación de aspecto 1.333333, por lo que debe asegurarse de que usa las opciones -x, -y y/o los filtros -vf scale,crop,expand si la imagen no le deja habilitar la salida de TV. La resolución máxima es 720*576 a 16bpp.

Problemas conocidos: solo-VESA, limitación 1.33333, la imagen no está siempre centrada, la película aparece en 4bpp cada 10 minutos, y se queda de esa forma. Cuelgues frecuentes de hardware, problemas de representación en pantalla LCD.

Capítulo 5. Adaptaciones

5.1. Linux

La principal plataforma de desarrollo es Linux en x86, sin embargo MPlayer funciona en muchas otras adaptaciones de Linux. Los paquetes binarios de MPlayer están disponibles desde muchos sitios. Sin embargo ninguno de estos paquetes tiene soporte. Reporte los problemas a sus autores, no a nosotros.

5.1.1. Empaquetado para Debian

Para construir un paquete de Debian, ejecute la siguiente órden en el directorio de fuentes de MPlayer:

fakeroot debian/rules binary

Y después puede instalar el paquete .deb como root de la manera habitual:

dpkg -i ../mplayer_version.deb

Christian Marillat ha hecho los paquetes no oficiales de MPlayer para Debian, de MEncoder y de tipografías para que en un momento, pueda (apt-)obtenerlos desde su página personal.

5.1.2. Empaquetado RPM

Dominik Mierzejewski ha creado y mantiene los paquetes oficiales RPM para Red Hat de MPlayer. Están disponibles en su página personal.

Los paquetes RPM para Mandrake están disponibles en el P.L.F.. SuSE los usa para incluir una versión mutilada de MPlayer en su distribución. Esta versión será eliminada en sus próximas liberaciones. Puede obtener RPMs que funcionan desde links2linux.de.

5.1.3. ARM Linux

MPlayer funciona en PDAs con Linux en CPU ARM p.e. Sharp Zaurus, Compaq Ipaq. La manera más facil de obtener MPlayer es bajarlo desde uno de los sitios de paquetes de OpenZaurus. Si desea compilarlo usted mismo, debe mirar en mplayer y el directorio libavcodec en el raiz de la distribución de OpenZaurus. Ahí siempre tienen los Makefile y parches más recientes usados para construir un MPlayer desde CVS con libavcodec. Si necesita un entorno GUI, puede usar xmms-embebido.

5.2. *BSD

MPlayer funciona en FreeBSD, OpenBSD, NetBSD, BSD/OS y Darwin. Hay versiones ports/pkgsrc/fink/etc de MPlayer disponibles que son probablemente más faciles de usar que nuestras fuentes en crudo.

Para construir MPlayer necesita GNU make (gmake - el make nativo de BSD no funciona) y una versión reciente de binutils.

Si MPlayer se queja de que no encuentra /dev/cdrom o /dev/dvd, cree un enlace simbólico apropiado:

ln -s /dev/(su_dispositivo_de_cdrom) /dev/cdrom

Para usar DLLs Win32 con MPlayer necesita re-compilar el kernel con la "opción USER_LDT" (a no ser que ejecute FreeBSD-CURRENT, donde es así por defecto).

5.2.1. FreeBSD

Si su CPU tiene SSE, recompile el kernel con "la opción CPU_ENABLE_SSE" (FreeBSD-STABLE o parches del kernel son requeridos).

5.2.2. OpenBSD

Debido a limitaciones en diferentes versiones de gas (relocalización frente a MMX), puede ser necesario compilar en dos pasos: Primero asegúrate de que el no-nativo está el primero en tu $PATH y haz gmake -k, después asegúrate de que la versión nativa es la que se usa y haz gmake.

5.2.3. Darwin

Vea la sección Mac OS.

5.3. Sun Solaris

MPlayer debería funcionar en Solaris 2.6 o posterior.

En UltraSPARCs, MPlayer tiene la ventaja de las extensiones VIS (equivalentes a MMX), actualmente solo en libmpeg2, libvo y libavcodec, pero no en mp3lib. Puede ver un archivo VOB en una CPU a 400MHz. Necesita tener mLib instalado.

Para contruir el paquete necesita GNU make (gmake, /opt/sfw/gmake), el make nativo de Solaris no funciona. Errores típicos que puede obtener construyendo con el make de Solaris en lugar de con el make de GNU:

   % /usr/ccs/bin/make
   make: Error fatal en lector: Makefile, línea 25: Fin de línea visto inesperado

En Solaris SPARC, necesita el Compilador GNU C/C++; no importa si el compilador GNU C/C++ está configurado con o sin el ensamblador GNU.

En Solaris x86, necesita el ensamblador GNU y el compilador GNU C/C++, ¡configurado para usar el ensamblador GNU! El código de MPlayer en la plataforma x86 hace dificil el uso de las instrucciones de MMX, SSE y 3DNOW! que no puede ser compilado usando el ensamblador de Sun /usr/ccs/bin/as.

El script configure intenta encontrarlo, qué programa ensamblador es usado por tu órden "gcc" (en caso de que la autodetección falle, use la opción --as=/donde/este/instalado/gnu-as para decirle al script configure donde puede encontrar el "as" de GNU en su sistema).

Mensaje de error de configure en un sistema Solaris x86 usando GCC sin el ensamblador GNU:

   % configure
   ...
   Comprobando ensamblador (/usr/ccs/bin/as) ... , fallo
   Por favor, actualice(baje versión) de binutils a 2.10.1...

(Solución: Instalar y usar un gcc configurado con --with-as=gas)

Error típico que se obtiene cuando se construye con un compilador GNU C que no usa GNU as:

   % gmake
   ...
   gcc -c -Iloader -Ilibvo -O4 -march=i686 -mcpu=i686 -pipe -ffast-math
        -fomit-frame-pointer  -I/usr/local/include   -o mplayer.o mplayer.c
   Assembler: mplayer.c
   "(stdin)", line 3567 : Illegal mnemonic
   "(stdin)", line 3567 : Error de sintaxis
   ... más errores "Illegal mnemonic" y "Error de sintaxis" ...

Debido a fallos en Solaris 8, puede que no se puedan reproducir discos DVD mayores de 4 GB:

  • El controlador sd(7D) en Solaris 8 x86 tiene un error cuando accede a un bloque de disco >4GB en un dispositivo usando un tamaño de bloque lógico != DEV_BSIZE (p.e. CD-ROM y medios DVD). Debido a un error de desbordamiento de entero de 32Bit, un módulo de 4GB de dirección de disco es accedido. (http://groups.yahoo.com/group/solarisonintel/message/22516). Este problema no existe en la versión SPARC de Solaris 8.

  • Un error similar está presente en el código de sistema de archivos hsfs(7FS) (aka ISO9660), hsfs no puede soportar particiones/discos mayores de 4GB, todos los datos se acceden módulo 4GB (http://groups.yahoo.com/group/solarisonintel/message/22592). El problema hsfs puede ser corregido instalando el parche 109764-04 (sparc) / 109765-04 (x86).

En Solaris con una CPU UltraSPARC, puede obtener alguna velocidad extra usando las instrucciones VIS de la CPU para algunas operaciones que consumen un tiempo. La acelación VIS puede ser usada en MPlayer llamando a funciones en la mediaLib de Sun.

Las operaciones aceleradas de mediaLib son usadas por el decodificador mpeg2 de video y por la conversión en espacio de color en los controladoers de salida de video.

5.4. HP UX

Martin Gansser mantiene un COMO de mucho valor acerca de cómo compilar MPlayer en HP-UX. ¡Tiene incluso una sección de FAQ!

De todos modos, nuestro código crudo de MPlayer se usa para compilar en HP-UX sin problemas.

5.5. QNX

Funciona. Necesita descargar SDL para QNX, e instalarlo. Después ejecute MPlayer con las opciones -vo sdl:photon y -ao sdl:nto y debe ir rápido.

La salida -vo x11 puede ser más lenta que en Linux, porque QNX solo tiene emulación de X que es MUY lenta. Use SDL.

5.6. Windows

Sí, MPlayer funciona en Windows bajo Cygwin y MinGW. No tiene aún una interfaz gráfica (GUI), pero la versión en línea de órdenes es casi completamente funcional. Los parches son siempre bienvenidos. Debe consultar también la lista de correo mplayer-cygwin para obtener ayuda y la información de última hora.

Se obtienen mejores resultados con el controlador de salida DirectX nativo (-vo directx) y el controlador nativo de salida de audio de Windows (-ao win32). Alternativas son OpenGL y SDL, pero el rendimiento de OpenGL varía en gran medida entre sistemas y se sabe que SDL distorsiona el sonido y la imagen o bloquea algunos sistemas. Si la imagen se ve distorsionada, pruebe a desactivar la aceleración por hardware con -vo directx:noaccel. Descargue los archivos de cabecera de DirectX 7 para compilar el controlador de salida de video de DirectX.

PUede usar codecs Win32 y Real Win32 (los Real de Linux no) si lo desea. Ponga los codecs en algún lugar de su ruta/path o pase la opción --codecsdir=c:/ruta/a/sus/codecs (alternativamente --codecsdir=/ruta/a/sus/codecs solo en Cygwin) a configure. Tenemos informes de que las DLLs de Real deben tener permisos de escritura para el usuario que usa MPlayer, pero solo en algunos sistemas. Pruebe ha dar permisos de escritura si tiene problemas. Las DLLs de QuickTime también funcionan, pero debe colocarlas en su directorio de sistema de Windows (C:\Windows\system\ o similar).

La consola de Cygwin/MinGW es extrañamente lenta. Redirigir la salida o usar la opción -quiet se ha informado que mejora el rendimiento en algunos sistemas. El renderizado directo (-dr) también puede ayudar. Puede prevenir el parpadeo de OSD a través de doble buffer con la opción -double. Si la reproducción va a saltos, pruebe -autosync 100. Si alguna de estas opciones le ayuda, puede que desee ponerlas en su archivo de configuración.

Sascha Sommer libera binarios oficiales para Windows de vez en cuando, Joey Parrish hace paquetes completos para Windows no oficiales con instalador. Búsquelos en la sección de Windows de nuestra página de proyectos.

5.6.1. Cygwin

Versiones de Cygwin anteriores a la 1.5.0 no incluyen inttypes.h. Ponga esto inttypes.h en /usr/include/ para hacer que MPlayer compile.

Los archivos de cabecera de DirectX han de ser extraidos a /usr/include/ o a /usr/local/include/.

Las instrucciones y los archivos para hacer que SDL funcione bajo Cygwin pueden encontrarse en el sitio de libsdl.

Puede reproducir VCDs reproduciendo los archivos .DAT o .MPG que Windows muestra en los VCDs. Esto funciona de la siguiente manera (ajuste para la letra de unidad de su CD-ROM):

mplayer d:/mpegav/avseq01.dat
mplayer /cygdrive/d/MPEG2/AVSEQ01.MPG

Para DVDs también funciona, ajuste -dvd-device para la letra de unidad de su DVD-ROM:

mplayer dvd://<título> -dvd-device '\\.\d:'

5.6.2. MinGW

Instalar una versión de MinGW que pueda usarse para compilar MPlayer es bastante artificioso, pero ya funciona fuera de la caja. Solo instale MinGW 3.1.0 o posterior y MSYS 1.0.9 o posterior y diga a MSYS en la postinstalación que MinGW está instalado.

Si usa una versión de MinGW anterior a la 3.1.0, necesita reemplazar /mingw/include/sys/types.h con esta types.h.

Extraiga los archivos de cabecera de DirectX a /mingw/include/.

VCDs y DVDs funcionan casi como en Cygwin (ajustando la letra de la unidad de su CD-ROM/DVD-ROM):

mplayer d:/mpegav/avseq01.dat
mplayer /d/MPEG2/AVSEQ01.MPG
mplayer dvd://i<título> -dvd-device /d/

5.7. Mac OS

Solo Mac OS X 10.2 y superiores están soportados por el código en crudo de MPlayer. ¡Siéntase libre para añadir soporte para versiones más antiguas de Mac OS y envíe parches!

El GCC 3.x modificado por Apple es el preferido para compilar MPlayer especialmente usando libavcodec ya que el GCC 2.95.x modificado por Apple no soporta bien la sintaxis C99.

Solo puede obtener un GUI Aqua para MPlayer junto con los binarios compilados de MPlayer para Mac OS X desde el proyecto MPlayerOSX.

Capítulo 6. Codificando con MEncoder

Para una lista completa de las opciones de MEncoder y ejemplos, vea por favor la página de manual. Para una serie de ejemplos prácticos y guias detalladas usando varios parámetros de codificación, lea los consejos-de-codificación donde se recopilan varias conversaciones en la lista de correo mplayer-users. Busque los archivos para obtener abundantes discusiones acerca de todos los aspectos y problemas relacionados con la codificación con MEncoder.

6.1. Codificación MPEG-4 en 2 o 3-pasadas ("DivX")

Codificación en 2-pasadas.  El nombre viene del hecho de que este método codifica el archivo dos veces. La primera codificación (pasada aislada) crea algunos archivos temporales (*.log) con un tamaño de unos pocos megabytes, no los borre todavía (puede borrar el AVI). En la segunda pasada, el archivo de salida de 2-pasadas es creado, usando los datos de tasa de bits de los archivos temporales. El archivo resultante debe tener así mucha más calidad de imagen. Si es la primera vez que oye hablar de esto, debería consultar algunas guías disponibles en la Red.

Este ejemplo muestra como codificar un DVD a AVI MPEG-4 de 2-pasadas ("DivX"). Solo se necesitan dos órdenes:

rm frameno.avi

borre este archivo, que puede ser de una codificación previa en 3-pasadas (e interfiere con el actual)

mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o pelicula.avi
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o pelicula.avi

Codificación en 3-pasadas.  Esta es una extensión de la codificación en 2-pasadas, donde la codificación del au dio se hace en una pasada diferente. Este método estima la tasa de bits de video necesaria para ajustar el tamaño para un CD. Además, el audio es codificado una sola vez, y no como en el modo 2-pasadas. De manera esquemática:

  1. Borre el archivo temporal conflictivo:

    rm frameno.avi

  2. Primera pasada:

    mencoder file/DVD -ovc frameno -oac mp3lame -lameopts vbr=3 -o frameno.avi

    Se crea un archivo avi solo-audio, que contiene únicamente el flujo de audio requerido. No olvide -lameopts, si necesita establecer algunos parámetros. Si está codificando una película larga, MEncoder muestra las tasas de bits recomendadas para tamaños 650MB, 700MB, y 800MB, una vez que finaliza esta pasada.

  3. Segunda pasada:

    mencoder file/DVD -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1:vbitrate=bitrate

    Esta es la primera pasada de la codificación de video. Opcionalmente puede especificar la tasa de bits de video que predijo MEncoder cuando terminó la primera pasada.

  4. Tercera pasada:

    mencoder file/DVD -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:vbitrate=bitrate
    

    Esta es la segunda pasada de la codificación del video. Especifique la misma tasa de bits que en la pasada anterior a menos que sepa realmente lo que está haciendo. En esta pasada, el audio de frameno.avi se inserta en el archivo de destino... y ¡ya está todo hecho!

Ejemplo 6.1. Ejemplo de codificación en 3-pasadas

rm frameno.avi

borre este archivo, que puede ser de una codificación en 3-pasadas anterior (e interferir con el actual)

mencoder dvd://2 -ovc frameno -o frameno.avi -oac mp3lame -lameopts vbr=3
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o pelicula.avi
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o pelicula.avi


6.2. Codificando a formato MPEG

MEncoder puede crear archivos con formato de salida MPEG (MPEG-PS). Probablemente esto sea util con el codec mpeg1video de libavcodec, porque los reproductores - excepto MPlayer - esperan video MPEG1, y audio en MPEG1 layer 2 (MP2) en los archivos MPEG.

Esta característica no es muy útil ahora, por un lado probablemente tenga muchos fallos, pero lo más importante es porque MEncoder actualmente no codifica audio MPEG1 layer 2 (MP2), que es lo que otros reproductores esperan en los archivos MPEG.

Para cambiar el formato del archivo de salida de MEncoder, use la opción -of mpeg.

Ejemplo:

mencoder -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video -oac copy otras opciones media.avi -o output.mpg

6.3. Reescalando películas

A menudo surge la necesidad de reescalar el tamaño de las imágenes de las películas. Las razones pueden ser varias: reducir el tamaño del archivo, ancho de banda de la red, etc. La mayoría de la gente incluso reescala cuando convierte DVDs o SVCDs a AVI DIVX. Esto es malo. En lugar de hacer eso, lea la sección Conservando la razón de aspecto.

El proceso de escalado es manejado por el filtro de video scale: -vf scale=ancho:alto. La calidad puede ser establecida con la opción -sws. Si no se especifica, MEncoder usará 0: bilineal rápido.

Uso:

mencoder entrada.mpg -ovc lavc -lavcopts vcodec=mpeg4 -vf scale=640:480-o salida.avi

6.4. Copia de flujos

MEncoder puede manejar flujos de entrada de dos maneras: codificandolos o copiandolos. Esta sección habla del modo copiandolos.

  • Flujo de video (opción -ovc copy): con esto se pueden hacer cosas muy bonitas :) Como, poner (¡convertir no!) ¡video FLI o VIVO o MPEG1 en un archivo AVI! Por supuesto solo MPlayer puede reproducir estos archivos :) Y probablemente no tenga ningún valor en la vida real. Razonadamente: la copia de flujo de video puede ser útil por ejemplo cuando solo ha de ser codificado el flujo de audio (como, PCM sin comprimir a MP3).

  • Flujo de audio (opción -oac copy): sinceramente. Es posible usar un archivo de audio externo (MP3, WAV) y multiplexarlo dentro del flujo de salida. Use para ello la opción -audiofile filename.

6.5. Arreglando AVIs con índice roto o interpolado

Es lo más facil. Símplemente copia los flujos de audio y video, y MEncoder genera el índice. Por supuesto esto no puede arreglar posibles errores en los flujos de audio y/o video. También arregla archivos con interpolado incorrecto, es decir la opción -ni ya no será necesaria nunca más.

Órden:

mencoder -idx entrada.avi -ovc copy -oac copy -o salida.avi

6.5.1. Uniendo mútiples archivos AVI

Como un efecto co-lateral, la función de corregir AVI's sin índice habilita a MEncoder para unir 2 (o más) archivos AVI:

Órden:

cat 1.avi 2.avi | mencoder -noidx -ovc copy -oac copy -o salida.avi -

Nota

Esto espera que 1.avi y 2.avi usen los mismos codecs, resolución, tasa de flujo etc, y al menos 1.avi no esté roto. Puede que necesite corregir sus archivos AVI de entrada primero, como se describe más arriba.

6.6. Codificando con la familia de codecs de libavcodec

libavcodec provee un montón de interesantes formatos de video y audio (actualmente sus codecs de audio no están soportados). Puede codificar con los siguientes codecs (más o menos actualizado):

Nombre del codecDescripción
mjpeg Motion JPEG
ljpeg Lossless JPEG
h263 H263
h263p H263 Plus
mpeg4 ISO estándar MPEG-4 (compatible con DivX 5, XVID)
msmpeg4 pre-standard MPEG-4 variant by MS, v3 (aka DivX3)
msmpeg4v2 pre-standard MPEG-4 by MS, v2 (usado en archivos asf antiguos)
wmv1 Windows Media Video, version 1 (aka WMV7)
wmv2 Windows Media Video, version 2 (aka WMV8)
rv10 un codec RealVideo antiguo
mpeg1video MPEG1 video
mpeg2video MPEG2 video
huffyuv compresión sin pérdidas
asv1 ASUS Video v1
asv2 ASUS Video v2
ffv1 codec de video si pérdidas de FFmpeg

La primera columna contiene los nombres de los codecs que deben pasarse después de la configuración vcodec, como: -lavcopts vcodec=msmpeg4

Un ejemplo, con compresión MJPEG:

mencoder dvd://2 -o título2.avi -ovc lavc -lavcopts vcodec=mjpeg -oac copy

6.7. Codificando desde múltiples archivos de imágenes de entrada (JPEGs, PNGs o TGAs)

MEncoder es capaz de crear películas desde uno o más archivos JPEG, PNG o TGA. Con framecopy simple crea archivos MJPEG (Motion JPEG), MPNG (Motion PNG) o MTGA (Motion TGA).

Explicación del proceso:

  1. MEncoder decodifica las imágenes de entrada con libjpeg (cuando decodifica PNGs, usa libpng).

  2. MEncoder alimenta entonces con la imagen decodificada al compresor de video elegido (DivX4, Xvid, ffmpeg msmpeg4, etc.).

Ejemplos.  La explicación de la opción -mf puede encontrarse más abajo en la página de manual.

Creating a DivX4 file from all the JPEG files in the current dir:

mencoder -mf on:w=800:h=600:fps=25 -ovc divx4 -o output.avi \*.jpg

Creando un archivo DivX4 desde algunos archivos JPEG en el directorio actual:

mencoder -mf on:w=800:h=600:fps=25 -ovc divx4 -o salida.avi frame001.jpg,frame002.jpg 

Creando un archivo Motion JPEG (MJPEG) desde todos los archivos JPEG en el directorio actual:

mencoder -mf on:w=800:h=600:fps=25 -ovc copy -o salida.avi \*.jpg

Creando un archivo sin comprimir desde todos los archivos PNG en el directorio actual:

mencoder -mf on:w=800:h=600:fps=25:type=png -ovc raw -o salida.avi \*.png

Nota

El ancho debe ser múltiplo entero de 4, esto es una estimación del formato AVI RAW RGB.

Creando un archivo Motion PNG (MPNG) desde todos los archivos PNG en el directorio actual:

mencoder -mf on:w=800:h=600:fps=25:type=png -ovc copy -o salida.avi \*.png

Creando un archivo Motion TGA (MTGA) desde todos los archivos TGA en el directorio actual:

mencoder -mf on:w=800:h=600:fps=25:type=tga -ovc copy -o salida.avi \*.tga

6.8. Extrayendo subtítulos DVD a archivo Vobsub

MEncoder es capaz de extraer subtítulos desde un DVD a archivos con formato Vobsub. Esto consiste en un par de archivos que terminan en .idx y .sub y normalmente son empaquetados en un archivo .rar simple. MPlayer puede reproducir esto con las opciones -vobsub y -vobsubid.

Puede especificar el nombre base (p.e. sin la extensión .idx o .sub) de los archivos de salida con -vobsubout y el índice para este subtítulo en los archivos resultantes con -vobsuboutindex.

Si la entrada no es desde un DVD debe usar -ifo para indicar el archivo .ifo necesario para reconstruir el archivo resultante .idx.

Si la entrada no es desde un DVD y no tiene el archivo .ifo necesario deberá usar la opción -vobsubid para decir qué id de idioma poner en el archivo .idx.

Cada ejecución añade el subtítulo que se está usando si los archivos .idx y .sub ya existen. Debería borrarlos antes de comenzar.

Ejemplo 6.2. Copiando dos subtítulos desde un DVD mientras se hace la codificación en 3-pasadas

rm subtitles.idx subtitles.sub
mencoder dvd://1 -vobsubout subtitles -vobsuboutindex 0 -sid 2 -o frameno.avi -ovc frameno
mencoder dvd://1 -oac copy -ovc divx4 -pass 1
mencoder dvd://1 -oac copy -ovc divx4 -pass 2 -vobsubout subtitles -vobsuboutindex 1 -sid 5

Ejemplo 6.3. Copiando un subtítulo francés desde un archivo MPEG

rm subtitles.idx subtitles.sub
mencoder pelicula.mpg -ifo pelicula.ifo -vobsubout subtitles -vobsuboutindex 0 -vobsuboutid fr -sid 1

6.9. Preservando relación de aspecto

Los archivos de DVDs y SVCDs (p.e. MPEG1/2) contienen un valor sobre la relación de aspecto, que describe cómo debe el reproductor escalar el flujo de video, los humanos tienen un huevo por cabeza (ej.:480x480 + 4:3 = 640x480). Sin embargo cuando se codifica a archivo AVI (DivX), debe estar advertido de que los encabezados AVI no almacenan este valor. Reescalar la película es repugnante y consume tiempo, ¡siempre debe haber un camino mejor!

Esto es

MPEG4 tiene una característica única: el flujo de video puede contener la razón de aspecto necesaria. Sí, igual que MPEG1/2 (DVD, SVCD) y los archivos H263. Por lástima, no hay reproductores de video ahí fuera que soporten esta característica de MPEG4, excepto MPlayer.

Esta característica puede ser usada solo con el codec mpeg4 de libavcodec. Tenga en mente: aunque MPlayer puede reproducir correctamente el archivo creado, otros reproductores pueden usar una razón de aspecto incorrecta.

Seriamente debe recortar las bandas negras que hay por encima y por debajo de la imagen. Vea la página de manual para usar los filtros cropdetect y crop.

Uso

mencoder sample-svcd.mpg -ovc lavc -lavcopts vcodec=mpeg4:autoaspect -vf crop=714:548:0:14 -oac copy -o salida.avi

6.10. Matrices inter/intra personalizadas

Con ésta característica de libavcodec puede personalizar las matrices inter (marcos-I/marcos clave) e intra (marcos-P/marcos de predicción). Está soportado por muchos codecs: mpeg1video y mpeg2video se ha informado que funcionan.

Un uso normal de esta característica es establecer las matrices preferidas por las especificaciones KVCD.

La Matriz de Cuantización de KVCD "Notch"

Intra:

 8  9 12 22 26 27 29 34
 9 10 14 26 27 29 34 37
12 14 18 27 29 34 37 38
22 26 27 31 36 37 38 40
26 27 29 36 39 38 40 48
27 29 34 37 38 40 48 58
29 34 37 38 40 48 58 69
34 37 38 40 48 58 69 79

Inter:

16 18 20 22 24 26 28 30
18 20 22 24 26 28 30 32
20 22 24 26 28 30 32 34
22 24 26 30 32 32 34 36
24 26 28 32 34 34 36 38
26 28 30 32 34 36 38 40
28 30 32 34 36 38 42 42
30 32 34 36 38 40 42 44

Uso:

$ mencoder input.avi -o output.avi -oac copy -ovc lavc -lavcopts inter_matrix=...:intra_matrix=...

$ mencoder input.avi -ovc lavc -lavcopts
vcodec=mpeg2video:intra_matrix=8,9,12,22,26,27,29,34,9,10,14,26,27,29,34,37,
12,14,18,27,29,34,37,38,22,26,27,31,36,37,38,40,26,27,29,36,39,38,40,48,27,
29,34,37,38,40,48,58,29,34,37,38,40,48,58,69,34,37,38,40,48,58,69,79
:inter_matrix=16,18,20,22,24,26,28,30,18,20,22,24,26,28,30,32,20,22,24,26,
28,30,32,34,22,24,26,30,32,32,34,36,24,26,28,32,34,34,36,38,26,28,30,32,34,
36,38,40,28,30,32,34,36,38,42,42,30,32,34,36,38,40,42,44 -oac copy -o svcd.mpg

6.11. Haciendo un MPEG4 ("DivX") de alta calidad al ripear una película en DVD

Ripear un título de DVD en un archivo MPEG4 (DivX) de alta calidad involucra algunas consideraciones. Más abajo encontrará un ejemplo del proceso cuando el objetivo no es conseguir un tamaño determinado para el archivo (sino quizá ajustar el resultado en 2GB). libavcodec será usado para el video, y el audio será copiado como esté sin cambios.

6.11.1. Recortando

Reproduzca el DVD y ejecute el filtro de detección de recorte (-vf cropdetect) en él. Esto le dará un rectángulo de recorte para usar en la codificación. La razón para el recorte es que muchas películas no están en las relaciones de aspecto estándar (16/9 o 4/3), o, por cualquier razón, la imagen no se ajusta bien dentro del marco de imagen. Además querrá recortar las bandas negras durante el ripeo. También mejora la calidad de la imagen porque el filo de las bandas negras consume un montón de bits. Un aspecto común es 2.35, el que se llama cinemascope. La mayoría de las películas de blockbuster tienen esta razón de aspecto.

6.11.2. Nivel de calidad

A continuación debe elegir el nivel de calidad deseado. Cuando no necesite ajustar el tamaño resultante en un CD o en lo que sea, usar una cuantización constante, AKA calidad constante es una buena elección. De este modo cada marco de imagen toma tantos bits como necesite para mantener el nivel de calidad deseado, pero sin necesitar múltiples pasadas en la codificación. Con libavcodec, obtendrá una calidad constante usando -lavcopts vqscale=N. vqscale=3 debe darle un archivo por debajo de los 2GB de tamaño, dependiendo principalmente de la duración de la película y del ruido en el video (a más ruido, más difícil de comprimir será).

6.11.3. Archivos más grandes de 2GB

Si el archivo resultante codificado con calidad constante es más grande de 2GB, deberá crear un índice para poder luego verlos correctamente. Puede

  • reproducir el archivo con -forceidx para crear un índice sobre la marcha o bien

  • usar -saveidx para escribir un índice a un archivo una sola vez y luego -loadidx para usarlo cuando reproduzca el archivo.

Si esto le incomoda, quizá quiera mantener el tamaño por debajo de los 2GB.

Hay tres maneras de evitar esto. Puede intentar codificar de nuevo usando vqscale=4 y ver si tiene el tamaño de archivo y la calidad de imagen aceptables. También peude usar codificación en 2 pasadas. Como va a copiar la pista de audio como está y conoce por eso su tasa de bits, y además sabe la duración de la película, puede calcular la tasa de bits de video requerida para dar a la opción -lavcopts vbitrate=bitrate sin usar codificación en 3 pasadas.

La tercera y posiblemente la mejor opción puede ser rebajar ligeramente la resolución. El rebajado suaviza ligeramente y la pérdida de detalle es visualmente menos dañina que el ver bloques y otros artifactos causados por la compresión MPEG. Escalar a un tamaño menor también reduce de manera efectiva el ruido en la imagen, lo que es aún mejor, ya que el ruido es más dificil de comprimir.

6.11.4. Desentrelazado

Si la película está entrelazada, puede que quiera desentrelazarla como parte del ripeo. Es debatible si debe desentrelazarse en esta etaba. El beneficio es que al desentrelazar mientras convierte a MPEG4 ocasiona una mejor compresión, y luego es más fácil de ver con menos CPU en monitores de ordenador ya que no es necesario el desentrelazado en ese momento.

Desentrelazar durante la etapa de ripeo es una buena idea dependiendo del DVD. Si el DVD está hecho desde una película, y tiene 24 fps, puede desentrelazar durante el ripeo. Si, sin embargo, el original es un video a 50/60 fps, convertirlo en un video desentrelazado a 23.976/25 fps puede perder información. Si decide desentrelazar, puede experimentar con distintos filtros de desentrelazado después. Vea http://www.wieser-web.de/MPlayer/ para ejemplos. Un buen punto de partida es -vf pp=fd.

Si está haciendo las dos cosas, recortando y desentrelazando, desentrelace antes de recortar. Actualmente, no es necesario si el desplazamiento de recorte es vertical y múltiplo de 2 pixels. Sin embargo con algunos otros filtros, como dering, deberá siempre hacer el recorte lo último, es un buen hábito poner el filtro de recortado el último.

6.11.5. Inversión de telecine

Si está ripeando un DVD PAL, con 25 fps, no necesita pensar en los fps. Use directamente 25 fps. Los DVDs NTSC por otro lado están a 29.97 fps (a menudo rondan los 30 fps, pero no tiene por qué). Si la película fue grabada desde TV, no necesita de nuevo tocar los fps. Pero si la película fue grabada desde una película, y por lo tanto a (exactamente) 24 fps, debe ser convertida a 29.97 fps cuando haga el DVD. Esta conversión donde se añaden 12 campos a cada 24 marcos de imagen de la película se llama telecine. Para más información acerca de telecine, vea una búsqueda en Google de "telecine field 23.976".

En caso de que tenga un DVD telecine, puede que quiera hacer inversión del telecine, lo que significa convertir la película a 23.976 fps (29.97*4/5). De otro modo las panorámicas de cámara irán a trompicones y muy mal. Puede usar -ofps 23.976 para ello. Cualquier cosas que esté en películas y necesite telecine inverso, no se mostrará en TV.

6.11.6. Escalado y razón de aspecto

Para mejor calidad, no escale la película durante el ripeo. El escalado a tamaño menor obviamente pierde detalle, y el escalado a mayor tamaño causa artefactos y hace el archivo mayor en tamaño. Los pixels en las películas DVD no son cuadrados, por eso las películas en DVD incluyen información acerca de la razón de aspecto correcta. Es posible almacenar la razón de aspecto en la cabecera del archivo de salida MPEG4. La mayoría de los reproductores de video ignoran esta información pero MPlayer la usará. Si solo va a usar MPlayer para ver el archivo ripeado, no necesitará escalar la película, solo pase -lavcopts autoaspect a MEncoder y las cosas funcionarán bien automágicamente. Si debe escalar la película, tenga cuidado con el tamaño dado especialmente si está recortándola.

6.11.7. Sumando todo esto

Con todo lo mencionado más arriba en mente, se puede usar una órden de codificación como la siguiente

mencoder dvd://1 -aid 128 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vqscale=3:vhq:v4mv:trell:autoaspect \
  -ofps 23.976 -vf crop=720:364:0:56 -o Harry_Potter_2.avi
  

Aquí dvd://1 indica el título de DVD a ripear. La opción -aid 128 indica el uso de la pista 128, y -oac copy para copiarla como está. Puede usar MPlayer para encontrar los valores correctos para las opciones.

Las opciones vhq:v4mv:trell para -lavcopts mejoran la calidad frente a la tasa de bits, pero hacen que la codificacion dure más. Especialmente trell ralentiza la codificación pero incrementa la calidad visiblemente. Si quiere desentrelazar, añada un filtro pp a -vf, por ejemplo -vf pp=fd,crop=720:364:0:56 (en ese orden). Si no necesita invertir el telecine, quite -ofps 23.976.

6.12. Cómo tratar con telecine y entrelazado con DVDs NTSC

Introducción.  Le sugiero que visite esta página si no entiende mucho lo que está escrito en este documento: http://www.divx.com/support/guides/guide.php?gid=10 Esta URL enlaza a una descripción de lo que es telecine inteligible y razonablemente comprensible.

Por razones técnicas pertinentes a las limitaciones de reciente hardware de televisión, todos los videos que están pensados para ser reproducidos en una televisión NTSC deben tener 59.94 campos por segundo. Las películas hechas-para-TV y los espectáculos son grabados directamente a 24 o 23.976 marcos por segundo. Cuando una película para cine DVD es masterizada, el video es entonces convertido para la televisión usando un proceso llamado telecine.

En un DVD, el video nunca se almacena como 59.94 campos por segundo. Para video que es originalmente a 59.94, cada par de campos es combinado para formar un marco de imagen, resultando en 29.97 marcos por segundo. Los reproductores de DVD por hardware entonces leen un indicador embebido en el flujo de video para determinar si son las líneas pares o las impares las que deben formar el primer campo.

Normalmente, 23.976 marcos de imagen por segundo se mantienen así cuando son codificados en un DVD, y el reproductor de DVD debe realizar el telecine sobre la marcha. Algunas veces, sin embargo, el video es pasado por el proceso de telecine antes de ser almacenado en el DVD; incluso aunque tenga originalmente 23.976 marcos de imagen por segundo, se hace que tenga 59.94 campos por segundo, y es almacenado en disco como 29.97 marcos de imagen por segundo.

Cuando se observan como marcos individuales formados por 59.94 campos por segundo de video, telecine o viceversa, el entrelazado es claramente visible en cuanto hay movimiento, porque un campo (digamos, las líneas numeradas pares) representa un momento en el tiempo 1/59.94 de un segundo después de otro. Al reproducir video entrelazado en un ordenador se ve mal porque el monitor tiene una resolución mayor y porque el video es mostrado marco-tras-marco en lugar de campo-tras-campo.

Notas:

  • Esta sección solo se aplica a DVDs NTSC, y no a PAL.

  • El ejemplo MEncoder que hay a lo largo del documento no está comprendido para uso normal. Símplemente tiene lo mínimo requerido para codificar la categoría de video pertinente. Cómo hacer ripeados de DVD buenos o ajuste fino de libavcodec para máxima calidad no es el objetivo de este documento.

  • Hay un montón de notas a pie de página específicas en esta guia, enlazadas como esto: [1]

6.12.1. Cómo decir el tipo de video que tiene

6.12.1.1. Progresivo

Video progresivo fue grabado originalmente a 23.976 fps, y almacenado en el DVD sin alteración.

Cuando reproduce un DVD progresivo en MPlayer, MPlayer mostrará la siguiente línea tan pronto como comience la película:

 demux_mpg: 24fps progressive NTSC content detected, switching framerate.

Desde este punto de vista, demux_mpg nunca debe decir que encuentra "contenido a 30fps NTSC."

Cuando vea video progresivo, nunca debe ver ningún entrelazado. Tenga cuidado, sin embargo, porque algunas veces hay un poco de telecine mezclado, donde no se lo espera. He encontrado DVDs de espectáculos de TV que tienen un segundo de telecine en cada cambio de escena, o en lugares aleatorios incluso. Una vez vi un DVD que tenía el primer campo progresivo, y el segundo campo era telecine. Si quiere realmente saberlo, puede escanear la película entera:

mplayer dvd://1 -nosound -vo null -benchmark

Usando -benchmark hace que MPlayer reproduzca la película tan rápido como pueda; tenga en cuenta, dependiendo de su hardware, puede tardar bastante. Cada vez que demux_mpg informa de un cambio de tasa de bits, la línea inmediatamente por encima le dirá el tiempo en el que el cambio ha ocurrido.

Algunas veces el video progresivo es referido como "soft-telecine" porque está pensado para ser procesado en telecine por el reproductor de DVD.

6.12.1.2. Telecine

Video con telecine fue grabado originalmente a 23.976 fps, pero fue pasado por proceso de telecine antes de ser escrito en el DVD.

MPlayer no (nunca) informa de cambios en la tasa de bits cuando reproduce video con telecine.

Al ver video con telecine, verá artefactos de entrelazado, que parecen "parpadear": repetidamente aparecen y desaparecen. Puede verlo de cerca con

  1. mplayer dvd://1 -speed 0.1
  2. Busque una parte con movimiento.

  3. Localice un patrón de búsqueda-entrelazada y búsqueda-progresiva en marcos de imagen. Si el patrón que ve es PPPII,PPPII,PPPII,... entonces el video es con telecine. Si ve algún otro patrón, entonces el video puede que esté con telecine usando algún método no estándar y MEncoder no puede convertirlo sin pérdidas en progresivo. Si no ve ningún patrón, entonces lo más seguro es que sea entrelazado.

Algunas veces el video telecine es referido como "hard-telecine".

6.12.1.3. Entrelazado

El video entrelazado fue originalmente grabado a 59.94 campos por segundo, y almacenado en el DVD como 29.97 marcos por segundo. El entreñazado es el resultado de combinar pares de campos en marcos, porque en cada marco de imagen, cada campo ocupa 1/59.94 segundos.

Como en el video en telecine, MPlayer nunca debe informar de ningún cambio en la tasa de bits mientras reproduce contenido entrelazado.

Cuando ve video entrelazado de cerca con -speed 0.1, puede ver que cada marco simple es entrelazado.

6.12.1.4. Mezcla progresiva y telecine

Todo video "mezcla progresivo y telecine" originalmente es a 23.976 marcos por segundo, pero algunas partes de él terminan siendo en telecine.

Cuando MPlayer reproduce esta categoria, (a menudo de forma repetida) cambia entre "30fps NTSC" y "24fps progresivo NTSC". Consulte la parte de abajo de la salida de MPlayer para ver estos mensajes.

Deberá consultar las secciones de "30fps NTSC" para asegurarse de que es telecine, y no simplemente entrelazado.

6.12.1.5. Mezcla de progresivo y entrelazado

En el contenido "mezcla de progresivo y entrelazado", el video progresivo y entrelazado se colocan juntos.

Esta categoría es similar a "mezcla progresivo y telecine", hasta que examine las secciones de 30fps y vea que no tiene el patrón de telecine.

6.12.2. Cómo codificar cada categoría

Como dije antes al principio, las líneas de ejemplo de MEncoder de más abajo no son para ser usadas; solo son para demostrar los parámetros mínimos para codificar en cada categoría.

6.12.2.1. Progresivo

El video progresivo no requiere un filtrado especial para codificarlo. El único parámetro que seguramente necesita usar es -ofps 23.976. Si no lo hace, MEncoder intentará codificar a 29.97 fps y marcos duplicados.

mencoder dvd://1 -nosound -ovc lavc -ofps 23.976

6.12.2.2. Telecine

Telecine puede ser invertido para obtener el contenido 23.976 original, usando un proceso llamado telecine-inverso. MPlayer contiene dos filtros para conseguir esto: detc y ivtc. Puede leer la página de manual para ver las diferencias, pero para DVDs nunca he tenido problemas con ivtc. Note que siempre deberá hacer telecine-inverso antes de cualquier reescalado; a menos que realmente sepa lo que está haciendo, telecine-inverso antes de recortar también [1]. De nuevo, necesitará -ofps 23.976 también.

mencoder dvd://1 -nosound -vf ivtc=1 -ovc lavc -ofps 23.976

6.12.2.3. Entrelazado

Para la mayor parte de los casos prácticos no es posible obtener un video progresivo completo de un contenido entrelazado. La única manera de hacerlo sin perder la mitad de la resolución vertical es doblar la tasa de imágenes por segundo e intentar "adivinar" como se obtienen las correspondientes líneas para cada campo (esto ocasiona problemas - vea el método 3).

  1. Codifique el video en formato entrelazado. Normalmente, el entrelazado permite al codificador comprimir bien, pero libavcodec tiene dos parámetros específicos para jugar con video entrelazado un poco mejor: ildct y ilme. Además, es altamente recomendable usar mbd=2 [2] porque codifica los macrobloques como no entrelazados en lugares donde no hay movimiento. Note que -ofps NO es necesario aquí.

    mencoder dvd://1 -nosound -ovc lavc -lavcopts ildct:ilme:mbd=2

  2. Use un filtro de desentrelazado antes de codificar. Hay varios filtros disponibles para elegir, cada uno con sus ventajas y sus desventajas. Consulte mplayer -pphelp para ver qué hay disponible (grep "deint"), y busque en las listas de correo MPlayer para encontrar discusiones acerca de varios filtros. De nuevo, la tasa de bits por segundo no cambia, nada de -ofps. Además, el desentrelazado debe hacerse después del recortado [1] y antes del escalado.

    mencoder dvd://1 -nosound -vf pp=lb -ovc lavc

  3. Desafortunadamente, esta opción tiene fallos con MEncoder; funcionará bien con MEncoder G2, pero todavía no está disponible. Puede experimentar cuelgues del sistema. De todos modos, el propósito de -vf tfields es crear una tasa de bits completa por campo, que haga que la tasa completa sea de 59.94. La ventaja de esta aproximación es que no hay pérdida de datos; sin embargo, como cada marco viene solo con un campo, las líneas que faltan tienen que se interpoladas de alguna manera. No hay buenos métodos para generar estos datos que faltan, y el resultado será un poco similar al que se obtiene cuando se usan algunos filtros de desentrelazado. La generación de las líneas que faltan crean otros problemas, símplemente porque se dobla la cantidad de datos. Por eso, tasas de bits más altas para la codificación son requeridas para mantener la calidad, y se usa más potencia de CPU para la codificación y la decodificación. tfields tiene varias opciones distintas para crear las líneas que faltan en cada marco. Si usa este método, refiérase al manual, y elija la opción que mejor se ajuste para su material. Note que cuando use tfields tiene que especificar -fps y -ofps para doblar la tasa de bits de su fuente original.

    mencoder dvd://1 -nosound -vf tfields=2 -ovc lavc -fps 59.94 -ofps 59.94

  4. Si planea subescalar dramáticamente, puede codificar solo uno de los dos campos. Por supuesto, perderá la mitad de la resolución vertical, pero si planea subescalar a al menos 1/2 del original, la pérdida no importa mucho. El resultado será un archivo progresivo de 29.97 marcos por segundo. El procedimiento es usar -vf field, entonces recortar [1] y escalar apropiadamente. Recuerde que tiene que ajustar la escala para compensar la resolución vertical que está siendo perdida.

    mencoder dvd://1 -nosound -vf field=0 -ovc lavc

6.12.2.4. Mezcla de progresivo y telecine

Para mezclar video progresivo y telecine en un video completamente progresivo, las partes en telecine tienen que pasar por el proceso de telecine-inverso. Hay dos filtros que realizan esto nativamente, pero una solución mejor casi siempre es usar dos filtros conjuntamente (lea más adelante para más detalles).

  • Actualmente el método más fiable para tratar este tipo de video es, en lugar de hacer telecine-inverso con las partes en telecine, pasar a telecine las partes que no lo son y luego hacer telecine-inverso del video completo. ¿Suena confuso? softpulldown es un filtro que hadce que el video se haga completamente en telecine. Si se sigue softpulldown con alguno de entre detc o ivtc, el resultado final será completamente progresivo. El recortado y el escalado debe hacerse después de las operaciones de telecine-inverso, y -ofps 23.976 es necesario.

    mencoder dvd://1 -nosound -vf softpulldown,ivtc=1 -ovc lavc -ofps 23.976

  • -vf pullup está diseñado para hacer telecine-inverso con material en telecine mientras que deja el video progresivo como datos aislados. Pullup no funciona muy bien con el MEncoder actual, realmente está hecho para ser usado con MEncoder G2 (cuando esté listo). Funciona bien sin -ofps, pero -ofps se necesita para prevenir salida con saltos. Con -ofps, algunas veces falla. Los problemas vienen de mantener la sincronización entre el audio y el video: elimina marcos antes de enviarlos a la cadena de filtros, en lugar de después. Como resultado, pullup algunas veces pierde los datos que necesita.

    Si MEncoder descarta demasiados marcos de imagen en una fila, se carga los buffers pullup y causa el fallo del programa.

    Incluso si MEncoder solo descarta un marco, pullup sigue sin verse bien, y puede resultar en una secuencia incorrecta de marcos de imagen. Incluso si no causa un fallo del sistema, pullup es capaz de hacer decisión de correcciones sobre como reensamblar los marcos progresivos, y hacer coincidir campos juntos de manera incorrecta o descargar algunos campos para compensar.

  • Recientemente he usado -vf filmdint yo mismo, pero esto es lo que dice D Richard Felker III:

    Está bien, pero IMO (en mi opinión) intenta densentrelazar en lugar de hacer inversión del telecine demasiado a menudo (muy similar a los reproductores de sobremesa de DVD y TVs progresivas) que causan parpadeos que afean y otros artefactos. Si está haciendo uso de esto, necesita por lo menos perder algún tiempo haciendo un ajuste fino de las opciones y viendo la salida para asegurarse de que no está haciendolo mal.

6.12.2.5. Mezcla de progresivo y entrelazado

Hay dos opciones para tratar esta categoría, cada una con sus compromisos. Debe decidir si se quiere basar en la duración o localización de cada tipo.

  • Trátelo como progresivo. Las partes entrelazadas parecen entrelazadas, y algunos campos entrelazados son descartados, resultando en un poco dispares y con saltos. Puede usar un filtro de postprocesado si quiere, pero degradará ligeramente las partes progresivas.

    Definitivamente esta opción no debe ser usada si quiere eventualmente mostrar el video en un dispositivo entrelazado (con una tarjeta de TV, por ejemplo). Si tiene marcos entrelazados en un video de 23.976 marcos por segundo, deben ponerse en telecine junto con los marcos progresivos. La mitad de los "marcos" entrelazados serán mostrados en duración de tres campos (3/59.94 segundos), resultando en un efecto de parpadeo "con salto atrás en el tiempo" lo que hace que se vea bastante mal. Si quiere intentarlo, debe usar un filtro de desentrelazado como lb o l5.

    También puede ser una mala idea para una pantalla progresiva. Descartará pares de campos consecutivos entrelazados, resultando en una discontinuidad que puede ser más visible que con el segundo método, el cual muestra algunos marcos progresivos dos veces. El video entrelazado a 29.97 marcos por segundo ya se ve realmente con saltitos porque debe ser mostrado a 59.94 campos por segundo, lo que hace que los marcos duplicados no estén durante mucho tiempo en pantalla.

    En cualquier caso, es mejor considerar su contenido y cómo quiere mostrarlo. Si su video es 90% progresivo y no tiene intención de mostrarlo en una TV, debería usar una aproximación progresiva. Si es solo la mitad progresivo, probablemente querrá codificarlo como está si todo está entrelazado.

  • Trátelo como entrelazado. Algunas características de las partes progresivas serán tratadas por duplicado, resultando en una imagen a saltos. De nuevo, los filtros de desentrelazado pueden degradar ligeramente las partes progresivas.

6.12.3. Notas a pie de página

  1. Acerca del recortado:  Los datos de video de los DVDs son almacenados en un formato llamado YUV 4:2:0. En video YUV, la luminancia ("brillo") y la crominancia ("color") se almacenan por separado. Debido a que el ojo humano es menos sensible al color que al brillo, en una imagen YUV 4:2:0 hay solo un pixel de crominancia por cada cuatro de luminancia (dos por lado) teniendo el pixel de crominancia común. Debe recortar YUV progresivo 4:2:0 a resoluciones pares, e incluso usar desplazamientos pares. Por ejemplo, crop=716:380:2:26 es CORRECTO pero crop=716:380:3:26 no lo es.

    Cuando esté tratando con YUV 4:2:0 entrelazado, la situación es un poco más complicada. En lugar de cada cuatro pixels de luminancia en el marco compartiendo uno de crominancia, cada cuatro de luminancia en cada campo comparten un pixel de crominancia. Cuando los campos son entrelazados para formar un marco, cada scanline es un pixel de alta. Ahora, en lugar de cada cuatro pixels de luminancia en un cuadrado, hay dos pixels lado-a-lado, y los otros dos pixels están lado-a-lado dos scanlines más abajo. Los dos pixels de luminancia en la scanline intermedia son del otro campo, y por eso comparten un pixel distinto de crominancia con dos pixels de luminancia dos scanlines más allá. Toda esta confusión hace necesario tener dimensiones y desplazamientos de recorte vertical en múltiplos de cuatro. El horizontal puede quedarse igual.

    Para video en telecine, recomiendo que se recorte después de hacer la inversión del telecine. Una vez que el video es progresivo solo necesita recortar con números pares. Si realmente quiere ganar algo de velocidad más que lo que el primer recortado puede ofrecer, debe recortar verticalmente en múltiplos de cuatro o bien usar el filtro de telecine-inverso con los datos apropiados.

    Para video entrelazado (no telecine), siempre debe recortar verticalmente por múltiplos de cuatro a menos que use -vf field antes de recortar.

  2. Acerca de los parámetros de codificado y la calidad:  Solo porque yo recomiendo mbd=2 aquí no significa que deba ser usado siempre. Junto con trell, mbd=2 es una de las dos opciones de libavcodec que pueden incrementar la calidad, y siempre debe usar al menos estos dos a menos que la pérdida de velocidad sea prohibitiva (e.g. codificación en tiempo real). Hay muchas otras opciones para libavcodec que incrementan la calidad de la codificación (e incrementa la velocidad de la codificación) pero eso queda más allá del objeto de este documento.

Capítulo 7. Encoding with MEncoder

7.1. Making a high quality MPEG-4 ("DivX") rip of a DVD movie
7.1.1. Preparing to encode: Identifying source material and framerate
7.1.1.1. Identifying source framerate
7.1.1.2. Identifying source material
7.1.2. Constant quantizer vs. multipass
7.1.3. Constraints for efficient encoding
7.1.4. Cropping and Scaling
7.1.5. Choosing resolution and bitrate
7.1.5.1. Computing the resolution
7.1.6. Filtering
7.1.7. Interlacing and Telecine
7.1.8. Encoding interlaced video
7.1.9. Notes on Audio/Video synchronization
7.1.10. Choosing the video codec
7.1.11. Audio
7.1.12. Muxing
7.1.12.1. Improving muxing and A/V sync reliability
7.1.12.2. Limitations of the AVI container
7.1.12.3. Muxing into the Matroska container
7.2. How to deal with telecine and interlacing within NTSC DVDs
7.2.1. Introduction
7.2.2. How to tell what type of video you have
7.2.2.1. Progressive
7.2.2.2. Telecined
7.2.2.3. Interlaced
7.2.2.4. Mixed progressive and telecine
7.2.2.5. Mixed progressive and interlaced
7.2.3. How to encode each category
7.2.3.1. Progressive
7.2.3.2. Telecined
7.2.3.3. Interlaced
7.2.3.4. Mixed progressive and telecine
7.2.3.5. Mixed progressive and interlaced
7.2.4. Footnotes
7.3. Encoding with the libavcodec codec family
7.3.1. libavcodec's video codecs
7.3.2. libavcodec's audio codecs
7.3.2.1. PCM/ADPCM format supplementary table
7.3.3. Encoding options of libavcodec
7.3.4. Encoding setting examples
7.3.5. Custom inter/intra matrices
7.3.6. Example
7.4. Encoding with the Xvid codec
7.4.1. What options should I use to get the best results?
7.4.2. Encoding options of Xvid
7.4.3. Encoding profiles
7.4.4. Encoding setting examples
7.5. Encoding with the x264 codec
7.5.1. Encoding options of x264
7.5.1.1. Introduction
7.5.1.2. Options which primarily affect speed and quality
7.5.1.3. Options pertaining to miscellaneous preferences
7.5.2. Encoding setting examples
7.6. Encoding with the Video For Windows codec family
7.6.1. Video for Windows supported codecs
7.6.2. Using vfw2menc to create a codec settings file.
7.7. Using MEncoder to create QuickTime-compatible files
7.7.1. Why would one want to produce QuickTime-compatible Files?
7.7.2. QuickTime 7 limitations
7.7.3. Cropping
7.7.4. Scaling
7.7.5. A/V sync
7.7.6. Bitrate
7.7.7. Encoding example
7.7.8. Remuxing as MP4
7.7.9. Adding metadata tags
7.8. Using MEncoder to create VCD/SVCD/DVD-compliant files
7.8.1. Format Constraints
7.8.1.1. Format Constraints
7.8.1.2. GOP Size Constraints
7.8.1.3. Bitrate Constraints
7.8.2. Output Options
7.8.2.1. Aspect Ratio
7.8.2.2. Maintaining A/V sync
7.8.2.3. Sample Rate Conversion
7.8.3. Using libavcodec for VCD/SVCD/DVD Encoding
7.8.3.1. Introduction
7.8.3.2. lavcopts
7.8.3.3. Examples
7.8.3.4. Advanced Options
7.8.4. Encoding Audio
7.8.4.1. toolame
7.8.4.2. twolame
7.8.4.3. libavcodec
7.8.5. Putting it all Together
7.8.5.1. PAL DVD
7.8.5.2. NTSC DVD
7.8.5.3. PAL AVI Containing AC-3 Audio to DVD
7.8.5.4. NTSC AVI Containing AC-3 Audio to DVD
7.8.5.5. PAL SVCD
7.8.5.6. NTSC SVCD
7.8.5.7. PAL VCD
7.8.5.8. NTSC VCD

7.1. Making a high quality MPEG-4 ("DivX") rip of a DVD movie

One frequently asked question is "How do I make the highest quality rip for a given size?". Another question is "How do I make the highest quality DVD rip possible? I do not care about file size, I just want the best quality."

The latter question is perhaps at least somewhat wrongly posed. After all, if you do not care about file size, why not simply copy the entire MPEG-2 video stream from the the DVD? Sure, your AVI will end up being 5GB, give or take, but if you want the best quality and do not care about size, this is certainly your best option.

In fact, the reason you want to transcode a DVD into MPEG-4 is specifically because you do care about file size.

It is difficult to offer a cookbook recipe on how to create a very high quality DVD rip. There are several factors to consider, and you should understand these details or else you are likely to end up disappointed with your results. Below we will investigate some of these issues, and then have a look at an example. We assume you are using libavcodec to encode the video, although the theory applies to other codecs as well.

If this seems to be too much for you, you should probably use one of the many fine frontends that are listed in the MEncoder section of our related projects page. That way, you should be able to achieve high quality rips without too much thinking, because most of those tools are designed to take clever decisions for you.

7.1.1. Preparing to encode: Identifying source material and framerate

Before you even think about encoding a movie, you need to take several preliminary steps.

The first and most important step before you encode should be determining what type of content you are dealing with. If your source material comes from DVD or broadcast/cable/satellite TV, it will be stored in one of two formats: NTSC for North America and Japan, PAL for Europe, etc. It is important to realize, however, that this is just the formatting for presentation on a television, and often does not correspond to the original format of the movie. Experience shows that NTSC material is a lot more difficult to encode, because there more elements to identify in the source. In order to produce a suitable encode, you need to know the original format. Failure to take this into account will result in various flaws in your encode, including ugly combing (interlacing) artifacts and duplicated or even lost frames. Besides being ugly, the artifacts also harm coding efficiency: You will get worse quality per unit bitrate.

7.1.1.1. Identifying source framerate

Here is a list of common types of source material, where you are likely to find them, and their properties:

  • Standard Film: Produced for theatrical display at 24fps.

  • PAL video: Recorded with a PAL video camera at 50 fields per second. A field consists of just the odd- or even-numbered lines of a frame. Television was designed to refresh these in alternation as a cheap form of analog compression. The human eye supposedly compensates for this, but once you understand interlacing you will learn to see it on TV too and never enjoy TV again. Two fields do not make a complete frame, because they are captured 1/50 of a second apart in time, and thus they do not line up unless there is no motion.

  • NTSC Video: Recorded with an NTSC video camera at 60000/1001 fields per second, or 60 fields per second in the pre-color era. Otherwise similar to PAL.

  • Animation: Usually drawn at 24fps, but also comes in mixed-framerate varieties.

  • Computer Graphics (CG): Can be any framerate, but some are more common than others; 24 and 30 frames per second are typical for NTSC, and 25fps is typical for PAL.

  • Old Film: Various lower framerates.

7.1.1.2. Identifying source material

Movies consisting of frames are referred to as progressive, while those consisting of independent fields are called either interlaced or video - though this latter term is ambiguous.

To further complicate matters, some movies will be a mix of several of the above.

The most important distinction to make between all of these formats is that some are frame-based, while others are field-based. Whenever a movie is prepared for display on television (including DVD), it is converted to a field-based format. The various methods by which this can be done are collectively referred to as "telecine", of which the infamous NTSC "3:2 pulldown" is one variety. Unless the original material was also field-based (and the same fieldrate), you are getting the movie in a format other than the original.

There are several common types of pulldown:

  • PAL 2:2 pulldown: The nicest of them all. Each frame is shown for the duration of two fields, by extracting the even and odd lines and showing them in alternation. If the original material is 24fps, this process speeds up the movie by 4%.

  • PAL 2:2:2:2:2:2:2:2:2:2:2:3 pulldown: Every 12th frame is shown for the duration of three fields, instead of just two. This avoids the 4% speedup issue, but makes the process much more difficult to reverse. It is usually seen in musical productions where adjusting the speed by 4% would seriously damage the musical score.

  • NTSC 3:2 telecine: Frames are shown alternately for the duration of 3 fields or 2 fields. This gives a fieldrate 2.5 times the original framerate. The result is also slowed down very slightly from 60 fields per second to 60000/1001 fields per second to maintain NTSC fieldrate.

  • NTSC 2:2 pulldown: Used for showing 30fps material on NTSC. Nice, just like 2:2 PAL pulldown.

There are also methods for converting between NTSC and PAL video, but such topics are beyond the scope of this guide. If you encounter such a movie and want to encode it, your best bet is to find a copy in the original format. Conversion between these two formats is highly destructive and cannot be reversed cleanly, so your encode will greatly suffer if it is made from a converted source.

When video is stored on DVD, consecutive pairs of fields are grouped as a frame, even though they are not intended to be shown at the same moment in time. The MPEG-2 standard used on DVD and digital TV provides a way both to encode the original progressive frames and to store the number of fields for which a frame should be shown in the header of that frame. If this method has been used, the movie will often be described as "soft-telecined", since the process only directs the DVD player to apply pulldown to the movie rather than altering the movie itself. This case is highly preferable since it can easily be reversed (actually ignored) by the encoder, and since it preserves maximal quality. However, many DVD and broadcast production studios do not use proper encoding techniques but instead produce movies with "hard telecine", where fields are actually duplicated in the encoded MPEG-2.

The procedures for dealing with these cases will be covered later in this guide. For now, we leave you with some guides to identifying which type of material you are dealing with:

NTSC regions:

  • If MPlayer prints that the framerate has changed to 24000/1001 when watching your movie, and never changes back, it is almost certainly progressive content that has been "soft telecined".

  • If MPlayer shows the framerate switching back and forth between 24000/1001 and 30000/1001, and you see "combing" at times, then there are several possibilities. The 24000/1001 fps segments are almost certainly progressive content, "soft telecined", but the 30000/1001 fps parts could be either hard-telecined 24000/1001 fps content or 60000/1001 fields per second NTSC video. Use the same guidelines as the following two cases to determine which.

  • If MPlayer never shows the framerate changing, and every single frame with motion appears combed, your movie is NTSC video at 60000/1001 fields per second.

  • If MPlayer never shows the framerate changing, and two frames out of every five appear combed, your movie is "hard telecined" 24000/1001fps content.

PAL regions:

  • If you never see any combing, your movie is 2:2 pulldown.

  • If you see combing alternating in and out every half second, then your movie is 2:2:2:2:2:2:2:2:2:2:2:3 pulldown.

  • If you always see combing during motion, then your movie is PAL video at 50 fields per second.

Hint:

MPlayer can slow down movie playback with the -speed option or play it frame-by-frame. Try using -speed 0.2 to watch the movie very slowly or press the "." key repeatedly to play one frame at a time and identify the pattern, if you cannot see it at full speed.

7.1.2. Constant quantizer vs. multipass

It is possible to encode your movie at a wide range of qualities. With modern video encoders and a bit of pre-codec compression (downscaling and denoising), it is possible to achieve very good quality at 700 MB, for a 90-110 minute widescreen movie. Furthermore, all but the longest movies can be encoded with near-perfect quality at 1400 MB.

There are three approaches to encoding the video: constant bitrate (CBR), constant quantizer, and multipass (ABR, or average bitrate).

The complexity of the frames of a movie, and thus the number of bits required to compress them, can vary greatly from one scene to another. Modern video encoders can adjust to these needs as they go and vary the bitrate. In simple modes such as CBR, however, the encoders do not know the bitrate needs of future scenes and so cannot exceed the requested average bitrate for long stretches of time. More advanced modes, such as multipass encode, can take into account the statistics from previous passes; this fixes the problem mentioned above.

Note:

Most codecs which support ABR encode only support two pass encode while some others such as x264, Xvid and libavcodec support multipass, which slightly improves quality at each pass, yet this improvement is no longer measurable nor noticeable after the 4th or so pass. Therefore, in this section, two pass and multipass will be used interchangeably.

In each of these modes, the video codec (such as libavcodec) breaks the video frame into 16x16 pixel macroblocks and then applies a quantizer to each macroblock. The lower the quantizer, the better the quality and higher the bitrate. The method the movie encoder uses to determine which quantizer to use for a given macroblock varies and is highly tunable. (This is an extreme over-simplification of the actual process, but the basic concept is useful to understand.)

When you specify a constant bitrate, the video codec will encode the video, discarding detail as much as necessary and as little as possible in order to remain lower than the given bitrate. If you truly do not care about file size, you could as well use CBR and specify a bitrate of infinity. (In practice, this means a value high enough so that it poses no limit, like 10000Kbit.) With no real restriction on bitrate, the result is that the codec will use the lowest possible quantizer for each macroblock (as specified by vqmin for libavcodec, which is 2 by default). As soon as you specify a low enough bitrate that the codec is forced to use a higher quantizer, then you are almost certainly ruining the quality of your video. In order to avoid that, you should probably downscale your video, according to the method described later on in this guide. In general, you should avoid CBR altogether if you care about quality.

With constant quantizer, the codec uses the same quantizer, as specified by the vqscale option (for libavcodec), on every macroblock. If you want the highest quality rip possible, again ignoring bitrate, you can use vqscale=2. This will yield the same bitrate and PSNR (peak signal-to-noise ratio) as CBR with vbitrate=infinity and the default vqmin of 2.

The problem with constant quantizing is that it uses the given quantizer whether the macroblock needs it or not. That is, it might be possible to use a higher quantizer on a macroblock without sacrificing visual quality. Why waste the bits on an unnecessarily low quantizer? Your CPU has as many cycles as there is time, but there is only so many bits on your hard disk.

With a two pass encode, the first pass will rip the movie as though it were CBR, but it will keep a log of properties for each frame. This data is then used during the second pass in order to make intelligent decisions about which quantizers to use. During fast action or high detail scenes, higher quantizers will likely be used, and during slow moving or low detail scenes, lower quantizers will be used. Normally, the amount of motion is much more important than the amount of detail.

If you use vqscale=2, then you are wasting bits. If you use vqscale=3, then you are not getting the highest quality rip. Suppose you rip a DVD at vqscale=3, and the result is 1800Kbit. If you do a two pass encode with vbitrate=1800, the resulting video will have higher quality for the same bitrate.

Since you are now convinced that two pass is the way to go, the real question now is what bitrate to use? The answer is that there is no single answer. Ideally you want to choose a bitrate that yields the best balance between quality and file size. This is going to vary depending on the source video.

If size does not matter, a good starting point for a very high quality rip is about 2000Kbit plus or minus 200Kbit. For fast action or high detail source video, or if you just have a very critical eye, you might decide on 2400 or 2600. For some DVDs, you might not notice a difference at 1400Kbit. It is a good idea to experiment with scenes at different bitrates to get a feel.

If you aim at a certain size, you will have to somehow calculate the bitrate. But before that, you need to know how much space you should reserve for the audio track(s), so you should rip those first. You can compute the bitrate with the following equation: bitrate = (target_size_in_Mbytes - sound_size_in_Mbytes) * 1024 * 1024 / length_in_secs * 8 / 1000 For instance, to squeeze a two-hour movie onto a 702MB CD, with 60MB of audio track, the video bitrate will have to be: (702 - 60) * 1024 * 1024 / (120*60) * 8 / 1000 = 740kbps

7.1.3. Constraints for efficient encoding

Due to the nature of MPEG-type compression, there are various constraints you should follow for maximal quality. MPEG splits the video up into 16x16 squares called macroblocks, each composed of 4 8x8 blocks of luma (intensity) information and two half-resolution 8x8 chroma (color) blocks (one for red-cyan axis and the other for the blue-yellow axis). Even if your movie width and height are not multiples of 16, the encoder will use enough 16x16 macroblocks to cover the whole picture area, and the extra space will go to waste. So in the interests of maximizing quality at a fixed file size, it is a bad idea to use dimensions that are not multiples of 16.

Most DVDs also have some degree of black borders at the edges. Leaving these in place will hurt quality a lot in several ways.

  1. MPEG-type compression is highly dependent on frequency domain transformations, in particular the Discrete Cosine Transform (DCT), which is similar to the Fourier transform. This sort of encoding is efficient for representing patterns and smooth transitions, but it has a hard time with sharp edges. In order to encode them it must use many more bits, or else an artifact known as ringing will appear.

    The frequency transform (DCT) takes place separately on each macroblock (actually each block), so this problem only applies when the sharp edge is inside a block. If your black borders begin exactly at multiple-of-16 pixel boundaries, this is not a problem. However, the black borders on DVDs rarely come nicely aligned, so in practice you will always need to crop to avoid this penalty.

In addition to frequency domain transforms, MPEG-type compression uses motion vectors to represent the change from one frame to the next. Motion vectors naturally work much less efficiently for new content coming in from the edges of the picture, because it is not present in the previous frame. As long as the picture extends all the way to the edge of the encoded region, motion vectors have no problem with content moving out the edges of the picture. However, in the presence of black borders, there can be trouble:

  1. For each macroblock, MPEG-type compression stores a vector identifying which part of the previous frame should be copied into this macroblock as a base for predicting the next frame. Only the remaining differences need to be encoded. If a macroblock spans the edge of the picture and contains part of the black border, then motion vectors from other parts of the picture will overwrite the black border. This means that lots of bits must be spent either re-blackening the border that was overwritten, or (more likely) a motion vector will not be used at all and all the changes in this macroblock will have to be coded explicitly. Either way, encoding efficiency is greatly reduced.

    Again, this problem only applies if black borders do not line up on multiple-of-16 boundaries.

  2. Finally, suppose we have a macroblock in the interior of the picture, and an object is moving into this block from near the edge of the image. MPEG-type coding cannot say "copy the part that is inside the picture but not the black border." So the black border will get copied inside too, and lots of bits will have to be spent encoding the part of the picture that is supposed to be there.

    If the picture runs all the way to the edge of the encoded area, MPEG has special optimizations to repeatedly copy the pixels at the edge of the picture when a motion vector comes from outside the encoded area. This feature becomes useless when the movie has black borders. Unlike problems 1 and 2, aligning the borders at multiples of 16 does not help here.

  3. Despite the borders being entirely black and never changing, there is at least a minimal amount of overhead involved in having more macroblocks.

For all of these reasons, it is recommended to fully crop black borders. Further, if there is an area of noise/distortion at the edge of the picture, cropping this will improve encoding efficiency as well. Videophile purists who want to preserve the original as close as possible may object to this cropping, but unless you plan to encode at constant quantizer, the quality you gain from cropping will considerably exceed the amount of information lost at the edges.

7.1.4. Cropping and Scaling

Recall from the previous section that the final picture size you encode should be a multiple of 16 (in both width and height). This can be achieved by cropping, scaling, or a combination of both.

When cropping, there are a few guidelines that must be followed to avoid damaging your movie. The normal YUV format, 4:2:0, stores chroma (color) information subsampled, i.e. chroma is only sampled half as often in each direction as luma (intensity) information. Observe this diagram, where L indicates luma sampling points and C chroma.

LLLLLLLL
CCCC
LLLLLLLL
LLLLLLLL
CCCC
LLLLLLLL

As you can see, rows and columns of the image naturally come in pairs. Thus your crop offsets and dimensions must be even numbers. If they are not, the chroma will no longer line up correctly with the luma. In theory, it is possible to crop with odd offsets, but it requires resampling the chroma which is potentially a lossy operation and not supported by the crop filter.

Further, interlaced video is sampled as follows:

Top fieldBottom field
LLLLLLLL        
CCCC        
        LLLLLLLL
LLLLLLLL        
        CCCC
        LLLLLLLL
LLLLLLLL        
CCCC        
        LLLLLLLL
LLLLLLLL        
        CCCC
        LLLLLLLL

As you can see, the pattern does not repeat until after 4 lines. So for interlaced video, your y-offset and height for cropping must be multiples of 4.

Native DVD resolution is 720x480 for NTSC, and 720x576 for PAL, but there is an aspect flag that specifies whether it is full-screen (4:3) or wide-screen (16:9). Many (if not most) widescreen DVDs are not strictly 16:9, and will be either 1.85:1 or 2.35:1 (cinescope). This means that there will be black bands in the video that will need to be cropped out.

MPlayer provides a crop detection filter that will determine the crop rectangle (-vf cropdetect). Run MPlayer with -vf cropdetect and it will print out the crop settings to remove the borders. You should let the movie run long enough that the whole picture area is used, in order to get accurate crop values.

Then, test the values you get with MPlayer, using the command line which was printed by cropdetect, and adjust the rectangle as needed. The rectangle filter can help by allowing you to interactively position the crop rectangle over your movie. Remember to follow the above divisibility guidelines so that you do not misalign the chroma planes.

In certain cases, scaling may be undesirable. Scaling in the vertical direction is difficult with interlaced video, and if you wish to preserve the interlacing, you should usually refrain from scaling. If you will not be scaling but you still want to use multiple-of-16 dimensions, you will have to overcrop. Do not undercrop, since black borders are very bad for encoding!

Because MPEG-4 uses 16x16 macroblocks, you will want to make sure that each dimension of the video you are encoding is a multiple of 16 or else you will be degrading quality, especially at lower bitrates. You can do this by rounding the width and height of the crop rectangle down to the nearest multiple of 16. As stated earlier, when cropping, you will want to increase the Y offset by half the difference of the old and the new height so that the resulting video is taken from the center of the frame. And because of the way DVD video is sampled, make sure the offset is an even number. (In fact, as a rule, never use odd values for any parameter when you are cropping and scaling video.) If you are not comfortable throwing a few extra pixels away, you might prefer to scale the video instead. We will look at this in our example below. You can actually let the cropdetect filter do all of the above for you, as it has an optional round parameter that is equal to 16 by default.

Also, be careful about "half black" pixels at the edges. Make sure you crop these out too, or else you will be wasting bits there that are better spent elsewhere.

After all is said and done, you will probably end up with video whose pixels are not quite 1.85:1 or 2.35:1, but rather something close to that. You could calculate the new aspect ratio manually, but MEncoder offers an option for libavcodec called autoaspect that will do this for you. Absolutely do not scale this video up in order to square the pixels unless you like to waste your hard disk space. Scaling should be done on playback, and the player will use the aspect stored in the AVI to determine the correct resolution. Unfortunately, not all players enforce this auto-scaling information, therefore you may still want to rescale.

7.1.5. Choosing resolution and bitrate

If you will not be encoding in constant quantizer mode, you need to select a bitrate. The concept of bitrate is quite simple. It is the (average) number of bits that will be consumed to store your movie, per second. Normally bitrate is measured in kilobits (1000 bits) per second. The size of your movie on disk is the bitrate times the length of the movie in time, plus a small amount of "overhead" (see the section on the AVI container for instance). Other parameters such as scaling, cropping, etc. will not alter the file size unless you change the bitrate as well!

Bitrate does not scale proportionally to resolution. That is to say, a 320x240 file at 200 kbit/sec will not be the same quality as the same movie at 640x480 and 800 kbit/sec! There are two reasons for this:

  1. Perceptual: You notice MPEG artifacts more if they are scaled up bigger! Artifacts appear on the scale of blocks (8x8). Your eye will not see errors in 4800 small blocks as easily as it sees errors in 1200 large blocks (assuming you will be scaling both to fullscreen).

  2. Theoretical: When you scale down an image but still use the same size (8x8) blocks for the frequency space transform, you move more data to the high frequency bands. Roughly speaking, each pixel contains more of the detail than it did before. So even though your scaled-down picture contains 1/4 the information in the spacial directions, it could still contain a large portion of the information in the frequency domain (assuming that the high frequencies were underutilized in the original 640x480 image).

Past guides have recommended choosing a bitrate and resolution based on a "bits per pixel" approach, but this is usually not valid due to the above reasons. A better estimate seems to be that bitrates scale proportional to the square root of resolution, so that 320x240 and 400 kbit/sec would be comparable to 640x480 at 800 kbit/sec. However this has not been verified with theoretical or empirical rigor. Further, given that movies vary greatly with regard to noise, detail, degree of motion, etc., it is futile to make general recommendations for bits per length-of-diagonal (the analog of bits per pixel, using the square root).

So far we have discussed the difficulty of choosing a bitrate and resolution.

7.1.5.1. Computing the resolution

The following steps will guide you in computing the resolution of your encode without distorting the video too much, by taking into account several types of information about the source video. First, you should compute the encoded aspect ratio: ARc = (Wc x (ARa / PRdvd )) / Hc

where:

  • Wc and Hc are the width and height of the cropped video,

  • ARa is the displayed aspect ratio, which usually is 4/3 or 16/9,

  • PRdvd is the pixel ratio of the DVD which is equal to 1.25=(720/576) for PAL DVDs and 1.5=(720/480) for NTSC DVDs.

Then, you can compute the X and Y resolution, according to a certain Compression Quality (CQ) factor: ResY = INT(SQRT( 1000*Bitrate/25/ARc/CQ )/16) * 16 and ResX = INT( ResY * ARc / 16) * 16

Okay, but what is the CQ? The CQ represents the number of bits per pixel and per frame of the encode. Roughly speaking, the greater the CQ, the less the likelihood to see encoding artifacts. However, if you have a target size for your movie (1 or 2 CDs for instance), there is a limited total number of bits that you can spend; therefore it is necessary to find a good tradeoff between compressibility and quality.

The CQ depends on the bitrate, the video codec efficiency and the movie resolution. In order to raise the CQ, typically you would downscale the movie given that the bitrate is computed in function of the target size and the length of the movie, which are constant. With MPEG-4 ASP codecs such as Xvid and libavcodec, a CQ below 0.18 usually results in a pretty blocky picture, because there are not enough bits to code the information of each macroblock. (MPEG4, like many other codecs, groups pixels by blocks of several pixels to compress the image; if there are not enough bits, the edges of those blocks are visible.) It is therefore wise to take a CQ ranging from 0.20 to 0.22 for a 1 CD rip, and 0.26-0.28 for 2 CDs rip with standard encoding options. More advanced encoding options such as those listed here for libavcodec and Xvid should make it possible to get the same quality with CQ ranging from 0.18 to 0.20 for a 1 CD rip, and 0.24 to 0.26 for a 2 CD rip. With MPEG-4 AVC codecs such as x264, you can use a CQ ranging from 0.14 to 0.16 with standard encoding options, and should be able to go as low as 0.10 to 0.12 with x264's advanced encoding settings.

Please take note that the CQ is just an indicative figure, as depending on the encoded content, a CQ of 0.18 may look just fine for a Bergman, contrary to a movie such as The Matrix, which contains many high-motion scenes. On the other hand, it is worthless to raise CQ higher than 0.30 as you would be wasting bits without any noticeable quality gain. Also note that as mentioned earlier in this guide, low resolution videos need a bigger CQ (compared to, for instance, DVD resolution) to look good.

7.1.6. Filtering

Learning how to use MEncoder's video filters is essential to producing good encodes. All video processing is performed through the filters -- cropping, scaling, color adjustment, noise removal, sharpening, deinterlacing, telecine, inverse telecine, and deblocking, just to name a few. Along with the vast number of supported input formats, the variety of filters available in MEncoder is one of its main advantages over other similar programs.

Filters are loaded in a chain using the -vf option:

-vf filter1=options,filter2=options,...

Most filters take several numeric options separated by colons, but the syntax for options varies from filter to filter, so read the man page for details on the filters you wish to use.

Filters operate on the video in the order they are loaded. For example, the following chain:

-vf crop=688:464:12:4,scale=640:464

will first crop the 688x464 region of the picture with upper-left corner at (12,4), and then scale the result down to 640x464.

Certain filters need to be loaded at or near the beginning of the filter chain, in order to take advantage of information from the video decoder that will be lost or invalidated by other filters. The principal examples are pp (postprocessing, only when it is performing deblock or dering operations), spp (another postprocessor to remove MPEG artifacts), pullup (inverse telecine), and softpulldown (for converting soft telecine to hard telecine).

In general, you want to do as little filtering as possible to the movie in order to remain close to the original DVD source. Cropping is often necessary (as described above), but avoid to scale the video. Although scaling down is sometimes preferred to using higher quantizers, we want to avoid both these things: remember that we decided from the start to trade bits for quality.

Also, do not adjust gamma, contrast, brightness, etc. What looks good on your display may not look good on others. These adjustments should be done on playback only.

One thing you might want to do, however, is pass the video through a very light denoise filter, such as -vf hqdn3d=2:1:2. Again, it is a matter of putting those bits to better use: why waste them encoding noise when you can just add that noise back in during playback? Increasing the parameters for hqdn3d will further improve compressibility, but if you increase the values too much, you risk degrading the image visibly. The suggested values above (2:1:2) are quite conservative; you should feel free to experiment with higher values and observe the results for yourself.

7.1.7. Interlacing and Telecine

Almost all movies are shot at 24 fps. Because NTSC is 30000/1001 fps, some processing must be done to this 24 fps video to make it run at the correct NTSC framerate. The process is called 3:2 pulldown, commonly referred to as telecine (because pulldown is often applied during the telecine process), and, naively described, it works by slowing the film down to 24000/1001 fps, and repeating every fourth frame.

No special processing, however, is done to the video for PAL DVDs, which run at 25 fps. (Technically, PAL can be telecined, called 2:2 pulldown, but this does not become an issue in practice.) The 24 fps film is simply played back at 25 fps. The result is that the movie runs slightly faster, but unless you are an alien, you probably will not notice the difference. Most PAL DVDs have pitch-corrected audio, so when they are played back at 25 fps things will sound right, even though the audio track (and hence the whole movie) has a running time that is 4% less than NTSC DVDs.

Because the video in a PAL DVD has not been altered, you need not worry much about framerate. The source is 25 fps, and your rip will be 25 fps. However, if you are ripping an NTSC DVD movie, you may need to apply inverse telecine.

For movies shot at 24 fps, the video on the NTSC DVD is either telecined 30000/1001, or else it is progressive 24000/1001 fps and intended to be telecined on-the-fly by a DVD player. On the other hand, TV series are usually only interlaced, not telecined. This is not a hard rule: some TV series are interlaced (such as Buffy the Vampire Slayer) whereas some are a mixture of progressive and interlaced (such as Angel, or 24).

It is highly recommended that you read the section on How to deal with telecine and interlacing in NTSC DVDs to learn how to handle the different possibilities.

However, if you are mostly just ripping movies, likely you are either dealing with 24 fps progressive or telecined video, in which case you can use the pullup filter -vf pullup,softskip.

7.1.8. Encoding interlaced video

If the movie you want to encode is interlaced (NTSC video or PAL video), you will need to choose whether you want to deinterlace or not. While deinterlacing will make your movie usable on progressive scan displays such a computer monitors and projectors, it comes at a cost: The fieldrate of 50 or 60000/1001 fields per second is halved to 25 or 30000/1001 frames per second, and roughly half of the information in your movie will be lost during scenes with significant motion.

Therefore, if you are encoding for high quality archival purposes, it is recommended not to deinterlace. You can always deinterlace the movie at playback time when displaying it on progressive scan devices. The power of currently available computers forces players to use a deinterlacing filter, which results in a slight degradation in image quality. But future players will be able to mimic the interlaced display of a TV, deinterlacing to full fieldrate and interpolating 50 or 60000/1001 entire frames per second from the interlaced video.

Special care must be taken when working with interlaced video:

  1. Crop height and y-offset must be multiples of 4.

  2. Any vertical scaling must be performed in interlaced mode.

  3. Postprocessing and denoising filters may not work as expected unless you take special care to operate them a field at a time, and they may damage the video if used incorrectly.

With these things in mind, here is our first example:

mencoder capture.avi -mc 0 -oac lavc -ovc lavc -lavcopts \
    vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224

Note the ilme and ildct options.

7.1.9. Notes on Audio/Video synchronization

MEncoder's audio/video synchronization algorithms were designed with the intention of recovering files with broken sync. However, in some cases they can cause unnecessary skipping and duplication of frames, and possibly slight A/V desync, when used with proper input (of course, A/V sync issues apply only if you process or copy the audio track while transcoding the video, which is strongly encouraged). Therefore, you may have to switch to basic A/V sync with the -mc 0 option, or put this in your ~/.mplayer/mencoder config file, as long as you are only working with good sources (DVD, TV capture, high quality MPEG-4 rips, etc) and not broken ASF/RM/MOV files.

If you want to further guard against strange frame skips and duplication, you can use both -mc 0 and -noskip. This will prevent all A/V sync, and copy frames one-to-one, so you cannot use it if you will be using any filters that unpredictably add or drop frames, or if your input file has variable framerate! Therefore, using -noskip is not in general recommended.

The so-called "three-pass" audio encoding which MEncoder supports has been reported to cause A/V desync. This will definitely happen if it is used in conjunction with certain filters, therefore, it is now recommended not to use three-pass audio mode. This feature is only left for compatibility purposes and for expert users who understand when it is safe to use and when it is not. If you have never heard of three-pass mode before, forget that we even mentioned it!

There have also been reports of A/V desync when encoding from stdin with MEncoder. Do not do this! Always use a file or CD/DVD/etc device as input.

7.1.10. Choosing the video codec

Which video codec is best to choose depends on several factors, like size, quality, streamability, usability and popularity, some of which widely depend on personal taste and technical constraints.

  • Compression efficiency: It is quite easy to understand that most newer-generation codecs are made to increase quality and compression. Therefore, the authors of this guide and many other people suggest that you cannot go wrong [1] when choosing MPEG-4 AVC codecs like x264 instead of MPEG-4 ASP codecs such as libavcodec MPEG-4 or Xvid. (Advanced codec developers may be interested in reading Michael Niedermayer's opinion on "why MPEG4-ASP sucks".) Likewise, you should get better quality using MPEG-4 ASP than you would with MPEG-2 codecs.

    However, newer codecs which are in heavy development can suffer from bugs which have not yet been noticed and which can ruin an encode. This is simply the tradeoff for using bleeding-edge technology.

    What is more, beginning to use a new codec requires that you spend some time becoming familiar with its options, so that you know what to adjust to achieve a desired picture quality.

  • Hardware compatibility: It usually takes a long time for standalone video players to begin to include support for the latest video codecs. As a result, most only support MPEG-1 (like VCD, XVCD and KVCD), MPEG-2 (like DVD, SVCD and KVCD) and MPEG-4 ASP (like DivX, libavcodec's LMP4 and Xvid) (Beware: Usually, not all MPEG-4 ASP features are supported). Please refer to the technical specs of your player (if they are available), or google around for more information.

  • Best quality per encoding time: Codecs that have been around for some time (such as libavcodec MPEG-4 and Xvid) are usually heavily optimized with all kinds of smart algorithms and SIMD assembly code. That is why they tend to yield the best quality per encoding time ratio. However, they may have some very advanced options that, if enabled, will make the encode really slow for marginal gains.

    If you are after blazing speed you should stick around the default settings of the video codec (although you should still try the other options which are mentioned in other sections of this guide).

    You may also consider choosing a codec which can do multi-threaded processing, though this is only useful for users of machines with several CPUs. libavcodec MPEG-4 does allow that, but speed gains are limited, and there is a slight negative effect on picture quality. Xvid's multi-threaded encoding, activated by the threads option, can be used to boost encoding speed — by about 40-60% in typical cases — with little if any picture degradation. x264 also allows multi-threaded encoding, which currently speeds up encoding by 94% per CPU core while lowering PSNR between 0.005dB and 0.01dB on a typical setup.

  • Personal taste: This is where it gets almost irrational: For the same reason that some hung on to DivX 3 for years when newer codecs were already doing wonders, some folks will prefer Xvid or libavcodec MPEG-4 over x264.

    You should make your own judgement; do not take advice from people who swear by one codec. Take a few sample clips from raw sources and compare different encoding options and codecs to find one that suits you best. The best codec is the one you master, and the one that looks best to your eyes on your display [2]!

Please refer to the section selecting codecs and container formats to get a list of supported codecs.

7.1.11. Audio

Audio is a much simpler problem to solve: if you care about quality, just leave it as is. Even AC-3 5.1 streams are at most 448Kbit/s, and they are worth every bit. You might be tempted to transcode the audio to high quality Vorbis, but just because you do not have an A/V receiver for AC-3 pass-through today does not mean you will not have one tomorrow. Future-proof your DVD rips by preserving the AC-3 stream. You can keep the AC-3 stream either by copying it directly into the video stream during the encoding. You can also extract the AC-3 stream in order to mux it into containers such as NUT or Matroska.

mplayer source_file.vob -aid 129 -dumpaudio -dumpfile sound.ac3

will dump into the file sound.ac3 the audio track number 129 from the file source_file.vob (NB: DVD VOB files usually use a different audio numbering, which means that the VOB audio track 129 is the 2nd audio track of the file).

But sometimes you truly have no choice but to further compress the sound so that more bits can be spent on the video. Most people choose to compress audio with either MP3 or Vorbis audio codecs. While the latter is a very space-efficient codec, MP3 is better supported by hardware players, although this trend is changing.

Do not use -nosound when encoding a file with audio, even if you will be encoding and muxing audio separately later. Though it may work in ideal cases, using -nosound is likely to hide some problems in your encoding command line setting. In other words, having a soundtrack during your encode assures you that, provided you do not see messages such as Too many audio packets in the buffer, you will be able to get proper sync.

You need to have MEncoder process the sound. You can for example copy the original soundtrack during the encode with -oac copy or convert it to a "light" 4 kHz mono WAV PCM with -oac pcm -channels 1 -srate 4000. Otherwise, in some cases, it will generate a video file that will not sync with the audio. Such cases are when the number of video frames in the source file does not match up to the total length of audio frames or whenever there are discontinuities/splices where there are missing or extra audio frames. The correct way to handle this kind of problem is to insert silence or cut audio at these points. However MPlayer cannot do that, so if you demux the AC-3 audio and encode it with a separate app (or dump it to PCM with MPlayer), the splices will be left incorrect and the only way to correct them is to drop/duplicate video frames at the splice. As long as MEncoder sees the audio when it is encoding the video, it can do this dropping/duping (which is usually OK since it takes place at full black/scene change), but if MEncoder cannot see the audio, it will just process all frames as-is and they will not fit the final audio stream when you for example merge your audio and video track into a Matroska file.

First of all, you will have to convert the DVD sound into a WAV file that the audio codec can use as input. For example:

mplayer source_file.vob -ao pcm:file=destination_sound.wav \
    -vc dummy -aid 1 -vo null

will dump the second audio track from the file source_file.vob into the file destination_sound.wav. You may want to normalize the sound before encoding, as DVD audio tracks are commonly recorded at low volumes. You can use the tool normalize for instance, which is available in most distributions. If you are using Windows, a tool such as BeSweet can do the same job. You will compress in either Vorbis or MP3. For example:

oggenc -q1 destination_sound.wav

will encode destination_sound.wav with the encoding quality 1, which is roughly equivalent to 80Kb/s, and is the minimum quality at which you should encode if you care about quality. Please note that MEncoder currently cannot mux Vorbis audio tracks into the output file because it only supports AVI and MPEG containers as an output, each of which may lead to audio/video playback synchronization problems with some players when the AVI file contain VBR audio streams such as Vorbis. Do not worry, this document will show you how you can do that with third party programs.

7.1.12. Muxing

Now that you have encoded your video, you will most likely want to mux it with one or more audio tracks into a movie container, such as AVI, MPEG, Matroska or NUT. MEncoder is currently only able to natively output audio and video into MPEG and AVI container formats. for example:

mencoder -oac copy -ovc copy  -o output_movie.avi \
    -audiofile input_audio.mp2 input_video.avi

This would merge the video file input_video.avi and the audio file input_audio.mp2 into the AVI file output_movie.avi. This command works with MPEG-1 layer I, II and III (more commonly known as MP3) audio, WAV and a few other audio formats too.

MEncoder features experimental support for libavformat, which is a library from the FFmpeg project that supports muxing and demuxing a variety of containers. For example:

mencoder -oac copy -ovc copy -o output_movie.asf -audiofile input_audio.mp2 \
    input_video.avi -of lavf -lavfopts format=asf

This will do the same thing as the previous example, except that the output container will be ASF. Please note that this support is highly experimental (but getting better every day), and will only work if you compiled MPlayer with the support for libavformat enabled (which means that a pre-packaged binary version will not work in most cases).

7.1.12.1. Improving muxing and A/V sync reliability

You may experience some serious A/V sync problems while trying to mux your video and some audio tracks, where no matter how you adjust the audio delay, you will never get proper sync. That may happen when you use some video filters that will drop or duplicate some frames, like the inverse telecine filters. It is strongly encouraged to append the harddup video filter at the end of the filter chain to avoid this kind of problem.

Without harddup, if MEncoder wants to duplicate a frame, it relies on the muxer to put a mark on the container so that the last frame will be displayed again to maintain sync while writing no actual frame. With harddup, MEncoder will instead just push the last frame displayed again into the filter chain. This means that the encoder receives the exact same frame twice, and compresses it. This will result in a slightly bigger file, but will not cause problems when demuxing or remuxing into other container formats.

You may also have no choice but to use harddup with container formats that are not too tightly linked with MEncoder such as the ones supported through libavformat, which may not support frame duplication at the container level.

7.1.12.2. Limitations of the AVI container

Although it is the most widely-supported container format after MPEG-1, AVI also has some major drawbacks. Perhaps the most obvious is the overhead. For each chunk of the AVI file, 24 bytes are wasted on headers and index. This translates into a little over 5 MB per hour, or 1-2.5% overhead for a 700 MB movie. This may not seem like much, but it could mean the difference between being able to use 700 kbit/sec video or 714 kbit/sec, and every bit of quality counts.

In addition this gross inefficiency, AVI also has the following major limitations:

  1. Only fixed-fps content can be stored. This is particularly limiting if the original material you want to encode is mixed content, for example a mix of NTSC video and film material. Actually there are hacks that can be used to store mixed-framerate content in AVI, but they increase the (already huge) overhead fivefold or more and so are not practical.

  2. Audio in AVI files must be either constant-bitrate (CBR) or constant-framesize (i.e. all frames decode to the same number of samples). Unfortunately, the most efficient codec, Vorbis, does not meet either of these requirements. Therefore, if you plan to store your movie in AVI, you will have to use a less efficient codec such as MP3 or AC-3.

Having said all that, MEncoder does not currently support variable-fps output or Vorbis encoding. Therefore, you may not see these as limitations if MEncoder is the only tool you will be using to produce your encodes. However, it is possible to use MEncoder only for video encoding, and then use external tools to encode audio and mux it into another container format.

7.1.12.3. Muxing into the Matroska container

Matroska is a free, open standard container format, aiming to offer a lot of advanced features, which older containers like AVI cannot handle. For example, Matroska supports variable bitrate audio content (VBR), variable framerates (VFR), chapters, file attachments, error detection code (EDC) and modern A/V Codecs like "Advanced Audio Coding" (AAC), "Vorbis" or "MPEG-4 AVC" (H.264), next to nothing handled by AVI.

The tools required to create Matroska files are collectively called mkvtoolnix, and are available for most Unix platforms as well as Windows. Because Matroska is an open standard you may find other tools that suit you better, but since mkvtoolnix is the most common, and is supported by the Matroska team itself, we will only cover its usage.

Probably the easiest way to get started with Matroska is to use MMG, the graphical frontend shipped with mkvtoolnix, and follow the guide to mkvmerge GUI (mmg)

You may also mux audio and video files using the command line:

mkvmerge -o output.mkv input_video.avi input_audio1.mp3 input_audio2.ac3

This would merge the video file input_video.avi and the two audio files input_audio1.mp3 and input_audio2.ac3 into the Matroska file output.mkv. Matroska, as mentioned earlier, is able to do much more than that, like multiple audio tracks (including fine-tuning of audio/video synchronization), chapters, subtitles, splitting, etc... Please refer to the documentation of those applications for more details.

7.2. How to deal with telecine and interlacing within NTSC DVDs

7.2.1. Introduction

What is telecine?  If you do not understand much of what is written in this document, read the Wikipedia entry on telecine. It is an understandable and reasonably comprehensive description of what telecine is.

A note about the numbers.  Many documents, including the article linked above, refer to the fields per second value of NTSC video as 59.94 and the corresponding frames per second values as 29.97 (for telecined and interlaced) and 23.976 (for progressive). For simplicity, some documents even round these numbers to 60, 30, and 24.

Strictly speaking, all those numbers are approximations. Black and white NTSC video was exactly 60 fields per second, but 60000/1001 was later chosen to accommodate color data while remaining compatible with contemporary black and white televisions. Digital NTSC video (such as on a DVD) is also 60000/1001 fields per second. From this, interlaced and telecined video are derived to be 30000/1001 frames per second; progressive video is 24000/1001 frames per second.

Older versions of the MEncoder documentation and many archived mailing list posts refer to 59.94, 29.97, and 23.976. All MEncoder documentation has been updated to use the fractional values, and you should use them too.

-ofps 23.976 is incorrect. -ofps 24000/1001 should be used instead.

How telecine is used.  All video intended to be displayed on an NTSC television set must be 60000/1001 fields per second. Made-for-TV movies and shows are often filmed directly at 60000/1001 fields per second, but the majority of cinema is filmed at 24 or 24000/1001 frames per second. When cinematic movie DVDs are mastered, the video is then converted for television using a process called telecine.

On a DVD, the video is never actually stored as 60000/1001 fields per second. For video that was originally 60000/1001, each pair of fields is combined to form a frame, resulting in 30000/1001 frames per second. Hardware DVD players then read a flag embedded in the video stream to determine whether the odd- or even-numbered lines should form the first field.

Usually, 24000/1001 frames per second content stays as it is when encoded for a DVD, and the DVD player must perform telecining on-the-fly. Sometimes, however, the video is telecined before being stored on the DVD; even though it was originally 24000/1001 frames per second, it becomes 60000/1001 fields per second. When it is stored on the DVD, pairs of fields are combined to form 30000/1001 frames per second.

When looking at individual frames formed from 60000/1001 fields per second video, telecined or otherwise, interlacing is clearly visible wherever there is any motion, because one field (say, the even-numbered lines) represents a moment in time 1/(60000/1001) seconds later than the other. Playing interlaced video on a computer looks ugly both because the monitor is higher resolution and because the video is shown frame-after-frame instead of field-after-field.

Notes:

  • This section only applies to NTSC DVDs, and not PAL.

  • The example MEncoder lines throughout the document are not intended for actual use. They are simply the bare minimum required to encode the pertaining video category. How to make good DVD rips or fine-tune libavcodec for maximal quality is not within the scope of this section; refer to other sections within the MEncoder encoding guide.

  • There are a couple footnotes specific to this guide, linked like this: [1]

7.2.2. How to tell what type of video you have

7.2.2.1. Progressive

Progressive video was originally filmed at 24000/1001 fps, and stored on the DVD without alteration.

When you play a progressive DVD in MPlayer, MPlayer will print the following line as soon as the movie begins to play:

demux_mpg: 24000/1001 fps progressive NTSC content detected, switching framerate.

From this point forward, demux_mpg should never say it finds "30000/1001 fps NTSC content."

When you watch progressive video, you should never see any interlacing. Beware, however, because sometimes there is a tiny bit of telecine mixed in where you would not expect. I have encountered TV show DVDs that have one second of telecine at every scene change, or at seemingly random places. I once watched a DVD that had a progressive first half, and the second half was telecined. If you want to be really thorough, you can scan the entire movie:

mplayer dvd://1 -nosound -vo null -benchmark

Using -benchmark makes MPlayer play the movie as quickly as it possibly can; still, depending on your hardware, it can take a while. Every time demux_mpg reports a framerate change, the line immediately above will show you the time at which the change occurred.

Sometimes progressive video on DVDs is referred to as "soft-telecine" because it is intended to be telecined by the DVD player.

7.2.2.2. Telecined

Telecined video was originally filmed at 24000/1001, but was telecined before it was written to the DVD.

MPlayer does not (ever) report any framerate changes when it plays telecined video.

Watching a telecined video, you will see interlacing artifacts that seem to "blink": they repeatedly appear and disappear. You can look closely at this by

  1. mplayer dvd://1
  2. Seek to a part with motion.

  3. Use the . key to step forward one frame at a time.

  4. Look at the pattern of interlaced-looking and progressive-looking frames. If the pattern you see is PPPII,PPPII,PPPII,... then the video is telecined. If you see some other pattern, then the video may have been telecined using some non-standard method; MEncoder cannot losslessly convert non-standard telecine to progressive. If you do not see any pattern at all, then it is most likely interlaced.

Sometimes telecined video on DVDs is referred to as "hard-telecine". Since hard-telecine is already 60000/1001 fields per second, the DVD player plays the video without any manipulation.

Another way to tell if your source is telecined or not is to play the source with the -vf pullup and -v command line options to see how pullup matches frames. If the source is telecined, you should see on the console a 3:2 pattern with 0+.1.+2 and 0++1 alternating. This technique has the advantage that you do not need to watch the source to identify it, which could be useful if you wish to automate the encoding procedure, or to carry out said procedure remotely via a slow connection.

7.2.2.3. Interlaced

Interlaced video was originally filmed at 60000/1001 fields per second, and stored on the DVD as 30000/1001 frames per second. The interlacing effect (often called "combing") is a result of combining pairs of fields into frames. Each field is supposed to be 1/(60000/1001) seconds apart, and when they are displayed simultaneously the difference is apparent.

As with telecined video, MPlayer should not ever report any framerate changes when playing interlaced content.

When you view an interlaced video closely by frame-stepping with the . key, you will see that every single frame is interlaced.

7.2.2.4. Mixed progressive and telecine

All of a "mixed progressive and telecine" video was originally 24000/1001 frames per second, but some parts of it ended up being telecined.

When MPlayer plays this category, it will (often repeatedly) switch back and forth between "30000/1001 fps NTSC" and "24000/1001 fps progressive NTSC". Watch the bottom of MPlayer's output to see these messages.

You should check the "30000/1001 fps NTSC" sections to make sure they are actually telecine, and not just interlaced.

7.2.2.5. Mixed progressive and interlaced

In "mixed progressive and interlaced" content, progressive and interlaced video have been spliced together.

This category looks just like "mixed progressive and telecine", until you examine the 30000/1001 fps sections and see that they do not have the telecine pattern.

7.2.3. How to encode each category

As I mentioned in the beginning, example MEncoder lines below are not meant to actually be used; they only demonstrate the minimum parameters to properly encode each category.

7.2.3.1. Progressive

Progressive video requires no special filtering to encode. The only parameter you need to be sure to use is -ofps 24000/1001. Otherwise, MEncoder will try to encode at 30000/1001 fps and will duplicate frames.

mencoder dvd://1 -oac copy -ovc lavc -ofps 24000/1001

It is often the case, however, that a video that looks progressive actually has very short parts of telecine mixed in. Unless you are sure, it is safest to treat the video as mixed progressive and telecine. The performance loss is small [3].

7.2.3.2. Telecined

Telecine can be reversed to retrieve the original 24000/1001 content, using a process called inverse-telecine. MPlayer contains several filters to accomplish this; the best filter, pullup, is described in the mixed progressive and telecine section.

7.2.3.3. Interlaced

For most practical cases it is not possible to retrieve a complete progressive video from interlaced content. The only way to do so without losing half of the vertical resolution is to double the framerate and try to "guess" what ought to make up the corresponding lines for each field (this has drawbacks - see method 3).

  1. Encode the video in interlaced form. Normally, interlacing wreaks havoc with the encoder's ability to compress well, but libavcodec has two parameters specifically for dealing with storing interlaced video a bit better: ildct and ilme. Also, using mbd=2 is strongly recommended [2] because it will encode macroblocks as non-interlaced in places where there is no motion. Note that -ofps is NOT needed here.

    mencoder dvd://1 -oac copy -ovc lavc -lavcopts ildct:ilme:mbd=2

  2. Use a deinterlacing filter before encoding. There are several of these filters available to choose from, each with its own advantages and disadvantages. Consult mplayer -pphelp and mplayer -vf help to see what is available (grep for "deint"), read Michael Niedermayer's Deinterlacing filters comparison, and search the MPlayer mailing lists to find many discussions about the various filters. Again, the framerate is not changing, so no -ofps. Also, deinterlacing should be done after cropping [1] and before scaling.

    mencoder dvd://1 -oac copy -vf yadif -ovc lavc

  3. Unfortunately, this option is buggy with MEncoder; it ought to work well with MEncoder G2, but that is not here yet. You might experience crashes. Anyway, the purpose of -vf tfields is to create a full frame out of each field, which makes the framerate 60000/1001. The advantage of this approach is that no data is ever lost; however, since each frame comes from only one field, the missing lines have to be interpolated somehow. There are no very good methods of generating the missing data, and so the result will look a bit similar to when using some deinterlacing filters. Generating the missing lines creates other issues, as well, simply because the amount of data doubles. So, higher encoding bitrates are required to maintain quality, and more CPU power is used for both encoding and decoding. tfields has several different options for how to create the missing lines of each frame. If you use this method, then Reference the manual, and chose whichever option looks best for your material. Note that when using tfields you have to specify both -fps and -ofps to be twice the framerate of your original source.

    mencoder dvd://1 -oac copy -vf tfields=2 -ovc lavc \
        -fps 60000/1001 -ofps 60000/1001

  4. If you plan on downscaling dramatically, you can extract and encode only one of the two fields. Of course, you will lose half the vertical resolution, but if you plan on downscaling to at most 1/2 of the original, the loss will not matter much. The result will be a progressive 30000/1001 frames per second file. The procedure is to use -vf field, then crop [1] and scale appropriately. Remember that you will have to adjust the scale to compensate for the vertical resolution being halved.

    mencoder dvd://1 -oac copy -vf field=0 -ovc lavc

7.2.3.4. Mixed progressive and telecine

In order to turn mixed progressive and telecine video into entirely progressive video, the telecined parts have to be inverse-telecined. There are three ways to accomplish this, described below. Note that you should always inverse-telecine before any rescaling; unless you really know what you are doing, inverse-telecine before cropping, too [1]. -ofps 24000/1001 is needed here because the output video will be 24000/1001 frames per second.

  • -vf pullup is designed to inverse-telecine telecined material while leaving progressive data alone. In order to work properly, pullup must be followed by the softskip filter or else MEncoder will crash. pullup is, however, the cleanest and most accurate method available for encoding both telecine and "mixed progressive and telecine".

    mencoder dvd://1 -oac copy -vf pullup,softskip
        -ovc lavc -ofps 24000/1001

  • -vf filmdint is similar to -vf pullup: both filters attempt to match a pair of fields to form a complete frame. filmdint will deinterlace individual fields that it cannot match, however, whereas pullup will simply drop them. Also, the two filters have separate detection code, and filmdint may tend to match fields a bit less often. Which filter works better may depend on the input video and personal taste; feel free to experiment with fine-tuning the filters' options if you encounter problems with either one (see the man page for details). For most well-mastered input video, however, both filters work quite well, so either one is a safe choice to start with.

    mencoder dvd://1 -oac copy -vf filmdint -ovc lavc -ofps 24000/1001

  • An older method is to, rather than inverse-telecine the telecined parts, telecine the non-telecined parts and then inverse-telecine the whole video. Sound confusing? softpulldown is a filter that goes through a video and makes the entire file telecined. If we follow softpulldown with either detc or ivtc, the final result will be entirely progressive. -ofps 24000/1001 is needed.

    mencoder dvd://1 -oac copy -vf softpulldown,ivtc=1 -ovc lavc -ofps 24000/1001
      

7.2.3.5. Mixed progressive and interlaced

There are two options for dealing with this category, each of which is a compromise. You should decide based on the duration/location of each type.

  • Treat it as progressive. The interlaced parts will look interlaced, and some of the interlaced fields will have to be dropped, resulting in a bit of uneven jumpiness. You can use a postprocessing filter if you want to, but it may slightly degrade the progressive parts.

    This option should definitely not be used if you want to eventually display the video on an interlaced device (with a TV card, for example). If you have interlaced frames in a 24000/1001 frames per second video, they will be telecined along with the progressive frames. Half of the interlaced "frames" will be displayed for three fields' duration (3/(60000/1001) seconds), resulting in a flicking "jump back in time" effect that looks quite bad. If you even attempt this, you must use a deinterlacing filter like lb or l5.

    It may also be a bad idea for progressive display, too. It will drop pairs of consecutive interlaced fields, resulting in a discontinuity that can be more visible than with the second method, which shows some progressive frames twice. 30000/1001 frames per second interlaced video is already a bit choppy because it really should be shown at 60000/1001 fields per second, so the duplicate frames do not stand out as much.

    Either way, it is best to consider your content and how you intend to display it. If your video is 90% progressive and you never intend to show it on a TV, you should favor a progressive approach. If it is only half progressive, you probably want to encode it as if it is all interlaced.

  • Treat it as interlaced. Some frames of the progressive parts will need to be duplicated, resulting in uneven jumpiness. Again, deinterlacing filters may slightly degrade the progressive parts.

7.2.4. Footnotes

  1. About cropping:  Video data on DVDs are stored in a format called YUV 4:2:0. In YUV video, luma ("brightness") and chroma ("color") are stored separately. Because the human eye is somewhat less sensitive to color than it is to brightness, in a YUV 4:2:0 picture there is only one chroma pixel for every four luma pixels. In a progressive picture, each square of four luma pixels (two on each side) has one common chroma pixel. You must crop progressive YUV 4:2:0 to even resolutions, and use even offsets. For example, crop=716:380:2:26 is OK but crop=716:380:3:26 is not.

    When you are dealing with interlaced YUV 4:2:0, the situation is a bit more complicated. Instead of every four luma pixels in the frame sharing a chroma pixel, every four luma pixels in each field share a chroma pixel. When fields are interlaced to form a frame, each scanline is one pixel high. Now, instead of all four luma pixels being in a square, there are two pixels side-by-side, and the other two pixels are side-by-side two scanlines down. The two luma pixels in the intermediate scanline are from the other field, and so share a different chroma pixel with two luma pixels two scanlines away. All this confusion makes it necessary to have vertical crop dimensions and offsets be multiples of four. Horizontal can stay even.

    For telecined video, I recommend that cropping take place after inverse telecining. Once the video is progressive you only need to crop by even numbers. If you really want to gain the slight speedup that cropping first may offer, you must crop vertically by multiples of four or else the inverse-telecine filter will not have proper data.

    For interlaced (not telecined) video, you must always crop vertically by multiples of four unless you use -vf field before cropping.

  2. About encoding parameters and quality:  Just because I recommend mbd=2 here does not mean it should not be used elsewhere. Along with trell, mbd=2 is one of the two libavcodec options that increases quality the most, and you should always use at least those two unless the drop in encoding speed is prohibitive (e.g. realtime encoding). There are many other options to libavcodec that increase encoding quality (and decrease encoding speed) but that is beyond the scope of this document.

  3. About the performance of pullup:  It is safe to use pullup (along with softskip ) on progressive video, and is usually a good idea unless the source has been definitively verified to be entirely progressive. The performance loss is small for most cases. On a bare-minimum encode, pullup causes MEncoder to be 50% slower. Adding sound processing and advanced lavcopts overshadows that difference, bringing the performance decrease of using pullup down to 2%.

7.3. Encoding with the libavcodec codec family

libavcodec provides simple encoding to a lot of interesting video and audio formats. You can encode to the following codecs (more or less up to date):

7.3.1. libavcodec's video codecs

Video codec nameDescription
mjpegMotion JPEG
ljpeglossless JPEG
jpeglsJPEG LS
targaTarga image
gifGIF image
bmpBMP image
pngPNG image
h261H.261
h263H.263
h263pH.263+
mpeg4ISO standard MPEG-4 (DivX, Xvid compatible)
msmpeg4pre-standard MPEG-4 variant by MS, v3 (AKA DivX3)
msmpeg4v2pre-standard MPEG-4 by MS, v2 (used in old ASF files)
wmv1Windows Media Video, version 1 (AKA WMV7)
wmv2Windows Media Video, version 2 (AKA WMV8)
rv10RealVideo 1.0
rv20RealVideo 2.0
mpeg1videoMPEG-1 video
mpeg2videoMPEG-2 video
huffyuvlossless compression
ffvhuffFFmpeg modified huffyuv lossless
asv1ASUS Video v1
asv2ASUS Video v2
ffv1FFmpeg's lossless video codec
svq1Sorenson video 1
flvSorenson H.263 used in Flash Video
flashsvFlash Screen Video
dvvideoSony Digital Video
snowFFmpeg's experimental wavelet-based codec
zmbvZip Motion Blocks Video
dnxhdAVID DNxHD

The first column contains the codec names that should be passed after the vcodec config, like: -lavcopts vcodec=msmpeg4

An example with MJPEG compression:

mencoder dvd://2 -o title2.avi -ovc lavc -lavcopts vcodec=mjpeg -oac copy

7.3.2. libavcodec's audio codecs

Audio codec nameDescription
ac3Dolby Digital (AC-3)
adpcm_*Adaptive PCM formats - see supplementary table
flacFree Lossless Audio Codec (FLAC)
g726G.726 ADPCM
libfaacAdvanced Audio Coding (AAC) - using FAAC
libgsmETSI GSM 06.10 full rate
libgsm_msMicrosoft GSM
libmp3lameMPEG-1 audio layer 3 (MP3) - using LAME
mp2MPEG-1 audio layer 2 (MP2)
pcm_*PCM formats - see supplementary table
roq_dpcmId Software RoQ DPCM
sonicexperimental FFmpeg lossy codec
soniclsexperimental FFmpeg lossless codec
vorbisVorbis
wmav1Windows Media Audio v1
wmav2Windows Media Audio v2

The first column contains the codec names that should be passed after the acodec option, like: -lavcopts acodec=ac3

An example with AC-3 compression:

mencoder dvd://2 -o title2.avi -oac lavc -lavcopts acodec=ac3 -ovc copy

Contrary to libavcodec's video codecs, its audio codecs do not make a wise usage of the bits they are given as they lack some minimal psychoacoustic model (if at all) which most other codec implementations feature. However, note that all these audio codecs are very fast and work out-of-the-box everywhere MEncoder has been compiled with libavcodec (which is the case most of time), and do not depend on external libraries.

7.3.2.1. PCM/ADPCM format supplementary table

PCM/ADPCM codec nameDescription
pcm_s32lesigned 32-bit little-endian
pcm_s32besigned 32-bit big-endian
pcm_u32leunsigned 32-bit little-endian
pcm_u32beunsigned 32-bit big-endian
pcm_s24lesigned 24-bit little-endian
pcm_s24besigned 24-bit big-endian
pcm_u24leunsigned 24-bit little-endian
pcm_u24beunsigned 24-bit big-endian
pcm_s16lesigned 16-bit little-endian
pcm_s16besigned 16-bit big-endian
pcm_u16leunsigned 16-bit little-endian
pcm_u16beunsigned 16-bit big-endian
pcm_s8signed 8-bit
pcm_u8unsigned 8-bit
pcm_alawG.711 A-LAW
pcm_mulawG.711 μ-LAW
pcm_s24daudsigned 24-bit D-Cinema Audio format
pcm_zorkActivision Zork Nemesis
adpcm_ima_qtApple QuickTime
adpcm_ima_wavMicrosoft/IBM WAVE
adpcm_ima_dk3Duck DK3
adpcm_ima_dk4Duck DK4
adpcm_ima_wsWestwood Studios
adpcm_ima_smjpegSDL Motion JPEG
adpcm_msMicrosoft
adpcm_4xm4X Technologies
adpcm_xaPhillips Yellow Book CD-ROM eXtended Architecture
adpcm_eaElectronic Arts
adpcm_ctCreative 16->4-bit
adpcm_swfAdobe Shockwave Flash
adpcm_yamahaYamaha
adpcm_sbpro_4Creative VOC SoundBlaster Pro 8->4-bit
adpcm_sbpro_3Creative VOC SoundBlaster Pro 8->2.6-bit
adpcm_sbpro_2Creative VOC SoundBlaster Pro 8->2-bit
adpcm_thpNintendo GameCube FMV THP
adpcm_adxSega/CRI ADX

7.3.3. Encoding options of libavcodec

Ideally, you would probably want to be able to just tell the encoder to switch into "high quality" mode and move on. That would probably be nice, but unfortunately hard to implement as different encoding options yield different quality results depending on the source material. That is because compression depends on the visual properties of the video in question. For example, Anime and live action have very different properties and thus require different options to obtain optimum encoding. The good news is that some options should never be left out, like mbd=2, trell, and v4mv. See below for a detailed description of common encoding options.

Options to adjust:

  • vmax_b_frames: 1 or 2 is good, depending on the movie. Note that if you need to have your encode be decodable by DivX5, you need to activate closed GOP support, using libavcodec's cgop option, but you need to deactivate scene detection, which is not a good idea as it will hurt encode efficiency a bit.

  • vb_strategy=1: helps in high-motion scenes. On some videos, vmax_b_frames may hurt quality, but vmax_b_frames=2 along with vb_strategy=1 helps.

  • dia: motion search range. Bigger is better and slower. Negative values are a completely different scale. Good values are -1 for a fast encode, or 2-4 for slower.

  • predia: motion search pre-pass. Not as important as dia. Good values are 1 (default) to 4. Requires preme=2 to really be useful.

  • cmp, subcmp, precmp: Comparison function for motion estimation. Experiment with values of 0 (default), 2 (hadamard), 3 (dct), and 6 (rate distortion). 0 is fastest, and sufficient for precmp. For cmp and subcmp, 2 is good for Anime, and 3 is good for live action. 6 may or may not be slightly better, but is slow.

  • last_pred: Number of motion predictors to take from the previous frame. 1-3 or so help at little speed cost. Higher values are slow for no extra gain.

  • cbp, mv0: Controls the selection of macroblocks. Small speed cost for small quality gain.

  • qprd: adaptive quantization based on the macroblock's complexity. May help or hurt depending on the video and other options. This can cause artifacts unless you set vqmax to some reasonably small value (6 is good, maybe as low as 4); vqmin=1 should also help.

  • qns: very slow, especially when combined with qprd. This option will make the encoder minimize noise due to compression artifacts instead of making the encoded video strictly match the source. Do not use this unless you have already tweaked everything else as far as it will go and the results still are not good enough.

  • vqcomp: Tweak ratecontrol. What values are good depends on the movie. You can safely leave this alone if you want. Reducing vqcomp puts more bits on low-complexity scenes, increasing it puts them on high-complexity scenes (default: 0.5, range: 0-1. recommended range: 0.5-0.7).

  • vlelim, vcelim: Sets the single coefficient elimination threshold for luminance and chroma planes. These are encoded separately in all MPEG-like algorithms. The idea behind these options is to use some good heuristics to determine when the change in a block is less than the threshold you specify, and in such a case, to just encode the block as "no change". This saves bits and perhaps speeds up encoding. vlelim=-4 and vcelim=9 seem to be good for live movies, but seem not to help with Anime; when encoding animation, you should probably leave them unchanged.

  • qpel: Quarter pixel motion estimation. MPEG-4 uses half pixel precision for its motion search by default, therefore this option comes with an overhead as more information will be stored in the encoded file. The compression gain/loss depends on the movie, but it is usually not very effective on Anime. qpel always incurs a significant cost in CPU decode time (+25% in practice).

  • psnr: does not affect the actual encoding, but writes a log file giving the type/size/quality of each frame, and prints a summary of PSNR (Peak Signal to Noise Ratio) at the end.

Options not recommended to play with:

  • vme: The default is best.

  • lumi_mask, dark_mask: Psychovisual adaptive quantization. You do not want to play with those options if you care about quality. Reasonable values may be effective in your case, but be warned this is very subjective.

  • scplx_mask: Tries to prevent blocky artifacts, but postprocessing is better.

7.3.4. Encoding setting examples

The following settings are examples of different encoding option combinations that affect the speed vs quality tradeoff at the same target bitrate.

All the encoding settings were tested on a 720x448 @30000/1001 fps video sample, the target bitrate was 900kbps, and the machine was an AMD-64 3400+ at 2400 MHz in 64 bits mode. Each encoding setting features the measured encoding speed (in frames per second) and the PSNR loss (in dB) compared to the "very high quality" setting. Please understand that depending on your source, your machine type and development advancements, you may get very different results.

DescriptionEncoding optionsspeed (in fps)Relative PSNR loss (in dB)
Very high qualityvcodec=mpeg4:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=26fps0dB
High qualityvcodec=mpeg4:mbd=2:trell:v4mv:last_pred=2:dia=-1:vmax_b_frames=2:vb_strategy=1:cmp=3:subcmp=3:precmp=0:vqcomp=0.6:turbo15fps-0.5dB
Fastvcodec=mpeg4:mbd=2:trell:v4mv:turbo42fps-0.74dB
Realtimevcodec=mpeg4:mbd=2:turbo54fps-1.21dB

7.3.5. Custom inter/intra matrices

With this feature of libavcodec you are able to set custom inter (I-frames/keyframes) and intra (P-frames/predicted frames) matrices. It is supported by many of the codecs: mpeg1video and mpeg2video are reported as working.

A typical usage of this feature is to set the matrices preferred by the KVCD specifications.

The KVCD "Notch" Quantization Matrix:

Intra:

 8  9 12 22 26 27 29 34
 9 10 14 26 27 29 34 37
12 14 18 27 29 34 37 38
22 26 27 31 36 37 38 40
26 27 29 36 39 38 40 48
27 29 34 37 38 40 48 58
29 34 37 38 40 48 58 69
34 37 38 40 48 58 69 79

Inter:

16 18 20 22 24 26 28 30
18 20 22 24 26 28 30 32
20 22 24 26 28 30 32 34
22 24 26 30 32 32 34 36
24 26 28 32 34 34 36 38
26 28 30 32 34 36 38 40
28 30 32 34 36 38 42 42
30 32 34 36 38 40 42 44

Usage:

mencoder input.avi -o output.avi -oac copy -ovc lavc \
    -lavcopts inter_matrix=...:intra_matrix=...

mencoder input.avi -ovc lavc -lavcopts \
vcodec=mpeg2video:intra_matrix=8,9,12,22,26,27,29,34,9,10,14,26,27,29,34,37,\
12,14,18,27,29,34,37,38,22,26,27,31,36,37,38,40,26,27,29,36,39,38,40,48,27,\
29,34,37,38,40,48,58,29,34,37,38,40,48,58,69,34,37,38,40,48,58,69,79\
:inter_matrix=16,18,20,22,24,26,28,30,18,20,22,24,26,28,30,32,20,22,24,26,\
28,30,32,34,22,24,26,30,32,32,34,36,24,26,28,32,34,34,36,38,26,28,30,32,34,\
36,38,40,28,30,32,34,36,38,42,42,30,32,34,36,38,40,42,44 -oac copy -o svcd.mpg

7.3.6. Example

So, you have just bought your shiny new copy of Harry Potter and the Chamber of Secrets (widescreen edition, of course), and you want to rip this DVD so that you can add it to your Home Theatre PC. This is a region 1 DVD, so it is NTSC. The example below will still apply to PAL, except you will omit -ofps 24000/1001 (because the output framerate is the same as the input framerate), and of course the crop dimensions will be different.

After running mplayer dvd://1, we follow the process detailed in the section How to deal with telecine and interlacing in NTSC DVDs and discover that it is 24000/1001 fps progressive video, which means that we need not use an inverse telecine filter, such as pullup or filmdint.

Next, we want to determine the appropriate crop rectangle, so we use the cropdetect filter:

mplayer dvd://1 -vf cropdetect

Make sure you seek to a fully filled frame (such as a bright scene, past the opening credits and logos), and you will see in MPlayer's console output:

crop area: X: 0..719  Y: 57..419  (-vf crop=720:362:0:58)

We then play the movie back with this filter to test its correctness:

mplayer dvd://1 -vf crop=720:362:0:58

And we see that it looks perfectly fine. Next, we ensure the width and height are a multiple of 16. The width is fine, however the height is not. Since we did not fail 7th grade math, we know that the nearest multiple of 16 lower than 362 is 352.

We could just use crop=720:352:0:58, but it would be nice to take a little off the top and a little off the bottom so that we retain the center. We have shrunk the height by 10 pixels, but we do not want to increase the y-offset by 5-pixels since that is an odd number and will adversely affect quality. Instead, we will increase the y-offset by 4 pixels:

mplayer dvd://1 -vf crop=720:352:0:62

Another reason to shave pixels from both the top and the bottom is that we ensure we have eliminated any half-black pixels if they exist. Note that if your video is telecined, make sure the pullup filter (or whichever inverse telecine filter you decide to use) appears in the filter chain before you crop. If it is interlaced, deinterlace before cropping. (If you choose to preserve the interlaced video, then make sure your vertical crop offset is a multiple of 4.)

If you are really concerned about losing those 10 pixels, you might prefer instead to scale the dimensions down to the nearest multiple of 16. The filter chain would look like:

-vf crop=720:362:0:58,scale=720:352

Scaling the video down like this will mean that some small amount of detail is lost, though it probably will not be perceptible. Scaling up will result in lower quality (unless you increase the bitrate). Cropping discards those pixels altogether. It is a tradeoff that you will want to consider for each circumstance. For example, if the DVD video was made for television, you might want to avoid vertical scaling, since the line sampling corresponds to the way the content was originally recorded.

On inspection, we see that our movie has a fair bit of action and high amounts of detail, so we pick 2400Kbit for our bitrate.

We are now ready to do the two pass encode. Pass one:

mencoder dvd://1 -ofps 24000/1001 -oac copy -o Harry_Potter_2.avi -ovc lavc \
    -lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=1 \
    -vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2

And pass two is the same, except that we specify vpass=2:

mencoder dvd://1 -ofps 24000/1001 -oac copy -o Harry_Potter_2.avi -ovc lavc \
    -lavcopts vcodec=mpeg4:vbitrate=2400:v4mv:mbd=2:trell:cmp=3:subcmp=3:autoaspect:vpass=2 \
    -vf pullup,softskip,crop=720:352:0:62,hqdn3d=2:1:2

The options v4mv:mbd=2:trell will greatly increase the quality at the expense of encoding time. There is little reason to leave these options out when the primary goal is quality. The options cmp=3:subcmp=3 select a comparison function that yields higher quality than the defaults. You might try experimenting with this parameter (refer to the man page for the possible values) as different functions can have a large impact on quality depending on the source material. For example, if you find libavcodec produces too much blocky artifacts, you could try selecting the experimental NSSE as comparison function via *cmp=10.

For this movie, the resulting AVI will be 138 minutes long and nearly 3GB. And because you said that file size does not matter, this is a perfectly acceptable size. However, if you had wanted it smaller, you could try a lower bitrate. Increasing bitrates have diminishing returns, so while we might clearly see an improvement from 1800Kbit to 2000Kbit, it might not be so noticeable above 2000Kbit. Feel free to experiment until you are happy.

Because we passed the source video through a denoise filter, you may want to add some of it back during playback. This, along with the spp post-processing filter, drastically improves the perception of quality and helps eliminate blocky artifacts in the video. With MPlayer's autoq option, you can vary the amount of post-processing done by the spp filter depending on available CPU. Also, at this point, you may want to apply gamma and/or color correction to best suit your display. For example:

mplayer Harry_Potter_2.avi -vf spp,noise=9ah:5ah,eq2=1.2 -autoq 3

7.4. Encoding with the Xvid codec

Xvid is a free library for encoding MPEG-4 ASP video streams. Before starting to encode, you need to set up MEncoder to support it.

This guide mainly aims at featuring the same kind of information as x264's encoding guide. Therefore, please begin by reading the first part of that guide.

7.4.1. What options should I use to get the best results?

Please begin by reviewing the Xvid section of MPlayer's man page. This section is intended to be a supplement to the man page.

The Xvid default settings are already a good tradeoff between speed and quality, therefore you can safely stick to them if the following section puzzles you.

7.4.2. Encoding options of Xvid

  • vhq This setting affects the macroblock decision algorithm, where the higher the setting, the wiser the decision. The default setting may be safely used for every encode, while higher settings always help PSNR but are significantly slower. Please note that a better PSNR does not necessarily mean that the picture will look better, but tells you that it is closer to the original. Turning it off will noticeably speed up encoding; if speed is critical for you, the tradeoff may be worth it.

  • bvhq This does the same job as vhq, but does it on B-frames. It has a negligible impact on speed, and slightly improves quality (around +0.1dB PSNR).

  • max_bframes A higher number of consecutive allowed B-frames usually improves compressibility, although it may also lead to more blocking artifacts. The default setting is a good tradeoff between compressibility and quality, but you may increase it up to 3 if you are bitrate-starved. You may also decrease it to 1 or 0 if you are aiming at perfect quality, though in that case you should make sure your target bitrate is high enough to ensure that the encoder does not have to increase quantizers to reach it.

  • bf_threshold This controls the B-frame sensitivity of the encoder, where a higher value leads to more B-frames being used (and vice versa). This setting is to be used together with max_bframes; if you are bitrate-starved, you should increase both max_bframes and bf_threshold, while you may increase max_bframes and reduce bf_threshold so that the encoder may use more B-frames in places that only really need them. A low number of max_bframes and a high value of bf_threshold is probably not a wise choice as it will force the encoder to put B-frames in places that would not benefit from them, therefore reducing visual quality. However, if you need to be compatible with standalone players that only support old DivX profiles (which only supports up to 1 consecutive B-frame), this would be your only way to increase compressibility through using B-frames.

  • trellis Optimizes the quantization process to get an optimal tradeoff between PSNR and bitrate, which allows significant bit saving. These bits will in return be spent elsewhere on the video, raising overall visual quality. You should always leave it on as its impact on quality is huge. Even if you are looking for speed, do not disable it until you have turned down vhq and all other more CPU-hungry options to the minimum.

  • hq_ac Activates a better coefficient cost estimation method, which slightly reduces file size by around 0.15 to 0.19% (which corresponds to less than 0.01dB PSNR increase), while having a negligible impact on speed. It is therefore recommended to always leave it on.

  • cartoon Designed to better encode cartoon content, and has no impact on speed as it just tunes the mode decision heuristics for this type of content.

  • me_quality This setting is to control the precision of the motion estimation. The higher me_quality, the more precise the estimation of the original motion will be, and the better the resulting clip will capture the original motion.

    The default setting is best in all cases; thus it is not recommended to turn it down unless you are really looking for speed, as all the bits saved by a good motion estimation would be spent elsewhere, raising overall quality. Therefore, do not go any lower than 5, and even that only as a last resort.

  • chroma_me Improves motion estimation by also taking the chroma (color) information into account, whereas me_quality alone only uses luma (grayscale). This slows down encoding by 5-10% but improves visual quality quite a bit by reducing blocking effects and reduces file size by around 1.3%. If you are looking for speed, you should disable this option before starting to consider reducing me_quality.

  • chroma_opt Is intended to increase chroma image quality around pure white/black edges, rather than improving compression. This can help to reduce the "red stairs" effect.

  • lumi_mask Tries to give less bitrate to part of the picture that the human eye cannot see very well, which should allow the encoder to spend the saved bits on more important parts of the picture. The quality of the encode yielded by this option highly depends on personal preferences and on the type and monitor settings used to watch it (typically, it will not look as good if it is bright or if it is a TFT monitor).

  • qpel Raise the number of candidate motion vectors by increasing the precision of the motion estimation from halfpel to quarterpel. The idea is to find better motion vectors which will in return reduce bitrate (hence increasing quality). However, motion vectors with quarterpel precision require a few extra bits to code, but the candidate vectors do not always give (much) better results. Quite often, the codec still spends bits on the extra precision, but little or no extra quality is gained in return. Unfortunately, there is no way to foresee the possible gains of qpel, so you need to actually encode with and without it to know for sure.

    qpel can be almost double encoding time, and requires as much as 25% more processing power to decode. It is not supported by all standalone players.

  • gmc Tries to save bits on panning scenes by using a single motion vector for the whole frame. This almost always raises PSNR, but significantly slows down encoding (as well as decoding). Therefore, you should only use it when you have turned vhq to the maximum. Xvid's GMC is more sophisticated than DivX's, but is only supported by few standalone players.

7.4.3. Encoding profiles

Xvid supports encoding profiles through the profile option, which are used to impose restrictions on the properties of the Xvid video stream such that it will be playable on anything which supports the chosen profile. The restrictions relate to resolutions, bitrates and certain MPEG-4 features. The following table shows what each profile supports.

 SimpleAdvanced SimpleDivX
Profile name0123012345HandheldPortable NTSCPortable PALHome Theater NTSCHome Theater PALHDTV
Width [pixels]1761763523521761763523523527201763523527207201280
Height [pixels]144144288288144144288288576576144240288480576720
Frame rate [fps]15151515303015303030153025302530
Max average bitrate [kbps]646412838412812838476830008000537.648544854485448549708.4
Peak average bitrate over 3 secs [kbps]          800800080008000800016000
Max. B-frames0000      011112
MPEG quantization    XXXXXX      
Adaptive quantization    XXXXXXXXXXXX
Interlaced encoding    XXXXXX   XXX
Quarterpixel    XXXXXX      
Global motion compensation    XXXXXX      

7.4.4. Encoding setting examples

The following settings are examples of different encoding option combinations that affect the speed vs quality tradeoff at the same target bitrate.

All the encoding settings were tested on a 720x448 @30000/1001 fps video sample, the target bitrate was 900kbps, and the machine was an AMD-64 3400+ at 2400 MHz in 64 bits mode. Each encoding setting features the measured encoding speed (in frames per second) and the PSNR loss (in dB) compared to the "very high quality" setting. Please understand that depending on your source, your machine type and development advancements, you may get very different results.

DescriptionEncoding optionsspeed (in fps)Relative PSNR loss (in dB)
Very high qualitychroma_opt:vhq=4:bvhq=1:quant_type=mpeg16fps0dB
High qualityvhq=2:bvhq=1:chroma_opt:quant_type=mpeg18fps-0.1dB
Fastturbo:vhq=028fps-0.69dB
Realtimeturbo:nochroma_me:notrellis:max_bframes=0:vhq=038fps-1.48dB

7.5. Encoding with the x264 codec

x264 is a free library for encoding H.264/AVC video streams. Before starting to encode, you need to set up MEncoder to support it.

7.5.1. Encoding options of x264

Please begin by reviewing the x264 section of MPlayer's man page. This section is intended to be a supplement to the man page. Here you will find quick hints about which options are most likely to interest most people. The man page is more terse, but also more exhaustive, and it sometimes offers much better technical detail.

7.5.1.1. Introduction

This guide considers two major categories of encoding options:

  1. Options which mainly trade off encoding time vs. quality

  2. Options which may be useful for fulfilling various personal preferences and special requirements

Ultimately, only you can decide which options are best for your purposes. The decision for the first class of options is the simplest: you only have to decide whether you think the quality differences justify the speed differences. For the second class of options, preferences may be far more subjective, and more factors may be involved. Note that some of the "personal preferences and special requirements" options can still have large impacts on speed or quality, but that is not what they are primarily useful for. A couple of the "personal preference" options may even cause changes that look better to some people, but look worse to others.

Before continuing, you need to understand that this guide uses only one quality metric: global PSNR. For a brief explanation of what PSNR is, see the Wikipedia article on PSNR. Global PSNR is the last PSNR number reported when you include the psnr option in x264encopts. Any time you read a claim about PSNR, one of the assumptions behind the claim is that equal bitrates are used.

Nearly all of this guide's comments assume you are using two pass. When comparing options, there are two major reasons for using two pass encoding. First, using two pass often gains around 1dB PSNR, which is a very big difference. Secondly, testing options by doing direct quality comparisons with one pass encodes introduces a major confounding factor: bitrate often varies significantly with each encode. It is not always easy to tell whether quality changes are due mainly to changed options, or if they mostly reflect essentially random differences in the achieved bitrate.

7.5.1.2. Options which primarily affect speed and quality

  • subq: Of the options which allow you to trade off speed for quality, subq and frameref (see below) are usually by far the most important. If you are interested in tweaking either speed or quality, these are the first options you should consider. On the speed dimension, the frameref and subq options interact with each other fairly strongly. Experience shows that, with one reference frame, subq=5 (the default setting) takes about 35% more time than subq=1. With 6 reference frames, the penalty grows to over 60%. subq's effect on PSNR seems fairly constant regardless of the number of reference frames. Typically, subq=5 achieves 0.2-0.5 dB higher global PSNR in comparison subq=1. This is usually enough to be visible.

    subq=6 is slower and yields better quality at a reasonable cost. In comparison to subq=5, it usually gains 0.1-0.4 dB global PSNR with speed costs varying from 25%-100%. Unlike other levels of subq, the behavior of subq=6 does not depend much on frameref and me. Instead, the effectiveness of subq=6 depends mostly upon the number of B-frames used. In normal usage, this means subq=6 has a large impact on both speed and quality in complex, high motion scenes, but it may not have much effect in low-motion scenes. Note that it is still recommended to always set bframes to something other than zero (see below).

    subq=7 is the slowest, highest quality mode. In comparison to subq=6, it usually gains 0.01-0.05 dB global PSNR with speed costs varying from 15%-33%. Since the tradeoff encoding time vs. quality is quite low, you should only use it if you are after every bit saving and if encoding time is not an issue.

  • frameref: frameref is set to 1 by default, but this should not be taken to imply that it is reasonable to set it to 1. Merely raising frameref to 2 gains around 0.15dB PSNR with a 5-10% speed penalty; this seems like a good tradeoff. frameref=3 gains around 0.25dB PSNR over frameref=1, which should be a visible difference. frameref=3 is around 15% slower than frameref=1. Unfortunately, diminishing returns set in rapidly. frameref=6 can be expected to gain only 0.05-0.1 dB over frameref=3 at an additional 15% speed penalty. Above frameref=6, the quality gains are usually very small (although you should keep in mind throughout this whole discussion that it can vary quite a lot depending on your source). In a fairly typical case, frameref=12 will improve global PSNR by a tiny 0.02dB over frameref=6, at a speed cost of 15%-20%. At such high frameref values, the only really good thing that can be said is that increasing it even further will almost certainly never harm PSNR, but the additional quality benefits are barely even measurable, let alone perceptible.

    Note:

    Raising frameref to unnecessarily high values can and usually does hurt coding efficiency if you turn CABAC off. With CABAC on (the default behavior), the possibility of setting frameref "too high" currently seems too remote to even worry about, and in the future, optimizations may remove the possibility altogether.

    If you care about speed, a reasonable compromise is to use low subq and frameref values on the first pass, and then raise them on the second pass. Typically, this has a negligible negative effect on the final quality: You will probably lose well under 0.1dB PSNR, which should be much too small of a difference to see. However, different values of frameref can occasionally affect frame type decision. Most likely, these are rare outlying cases, but if you want to be pretty sure, consider whether your video has either fullscreen repetitive flashing patterns or very large temporary occlusions which might force an I-frame. Adjust the first-pass frameref so it is large enough to contain the duration of the flashing cycle (or occlusion). For example, if the scene flashes back and forth between two images over a duration of three frames, set the first pass frameref to 3 or higher. This issue is probably extremely rare in live action video material, but it does sometimes come up in video game captures.

  • me: This option is for choosing the motion estimation search method. Altering this option provides a straightforward quality-vs-speed tradeoff. me=dia is only a few percent faster than the default search, at a cost of under 0.1dB global PSNR. The default setting (me=hex) is a reasonable tradeoff between speed and quality. me=umh gains a little under 0.1dB global PSNR, with a speed penalty that varies depending on frameref. At high values of frameref (e.g. 12 or so), me=umh is about 40% slower than the default me=hex. With frameref=3, the speed penalty incurred drops to 25%-30%.

    me=esa uses an exhaustive search that is too slow for practical use.

  • partitions=all: This option enables the use of 8x4, 4x8 and 4x4 subpartitions in predicted macroblocks (in addition to the default partitions). Enabling it results in a fairly consistent 10%-15% loss of speed. This option is rather useless in source containing only low motion, however in some high-motion source, particularly source with lots of small moving objects, gains of about 0.1dB can be expected.

  • bframes: If you are used to encoding with other codecs, you may have found that B-frames are not always useful. In H.264, this has changed: there are new techniques and block types that are possible in B-frames. Usually, even a naive B-frame choice algorithm can have a significant PSNR benefit. It is interesting to note that using B-frames usually speeds up the second pass somewhat, and may also speed up a single pass encode if adaptive B-frame decision is turned off.

    With adaptive B-frame decision turned off (x264encopts's nob_adapt), the optimal value for this setting is usually no more than bframes=1, or else high-motion scenes can suffer. With adaptive B-frame decision on (the default behavior), it is safe to use higher values; the encoder will reduce the use of B-frames in scenes where they would hurt compression. The encoder rarely chooses to use more than 3 or 4 B-frames; setting this option any higher will have little effect.

  • b_adapt: Note: This is on by default.

    With this option enabled, the encoder will use a reasonably fast decision process to reduce the number of B-frames used in scenes that might not benefit from them as much. You can use b_bias to tweak how B-frame-happy the encoder is. The speed penalty of adaptive B-frames is currently rather modest, but so is the potential quality gain. It usually does not hurt, however. Note that this only affects speed and frame type decision on the first pass. b_adapt and b_bias have no effect on subsequent passes.

  • b_pyramid: You might as well enable this option if you are using >=2 B-frames; as the man page says, you get a little quality improvement at no speed cost. Note that these videos cannot be read by libavcodec-based decoders older than about March 5, 2005.

  • weight_b: In typical cases, there is not much gain with this option. However, in crossfades or fade-to-black scenes, weighted prediction gives rather large bitrate savings. In MPEG-4 ASP, a fade-to-black is usually best coded as a series of expensive I-frames; using weighted prediction in B-frames makes it possible to turn at least some of these into much smaller B-frames. Encoding time cost is minimal, as no extra decisions need to be made. Also, contrary to what some people seem to guess, the decoder CPU requirements are not much affected by weighted prediction, all else being equal.

    Unfortunately, the current adaptive B-frame decision algorithm has a strong tendency to avoid B-frames during fades. Until this changes, it may be a good idea to add nob_adapt to your x264encopts, if you expect fades to have a large effect in your particular video clip.

  • threads: This option allows to spawn threads to encode in parallel on multiple CPUs. You can manually select the number of threads to be created or, better, set threads=auto and let x264 detect how many CPUs are available and pick an appropriate number of threads. If you have a multi-processor machine, you should really consider using it as it can to increase encoding speed linearly with the number of CPU cores (about 94% per CPU core), with very little quality reduction (about 0.005dB for dual processor, about 0.01dB for a quad processor machine).

7.5.1.3. Options pertaining to miscellaneous preferences

  • Two pass encoding: Above, it was suggested to always use two pass encoding, but there are still reasons for not using it. For instance, if you are capturing live TV and encoding in realtime, you are forced to use single-pass. Also, one pass is obviously faster than two passes; if you use the exact same set of options on both passes, two pass encoding is almost twice as slow.

    Still, there are very good reasons for using two pass encoding. For one thing, single pass ratecontrol is not psychic, and it often makes unreasonable choices because it cannot see the big picture. For example, suppose you have a two minute long video consisting of two distinct halves. The first half is a very high-motion scene lasting 60 seconds which, in isolation, requires about 2500kbps in order to look decent. Immediately following it is a much less demanding 60-second scene that looks good at 300kbps. Suppose you ask for 1400kbps on the theory that this is enough to accommodate both scenes. Single pass ratecontrol will make a couple of "mistakes" in such a case. First of all, it will target 1400kbps in both segments. The first segment may end up heavily overquantized, causing it to look unacceptably and unreasonably blocky. The second segment will be heavily underquantized; it may look perfect, but the bitrate cost of that perfection will be completely unreasonable. What is even harder to avoid is the problem at the transition between the two scenes. The first seconds of the low motion half will be hugely over-quantized, because the ratecontrol is still expecting the kind of bitrate requirements it met in the first half of the video. This "error period" of heavily over-quantized low motion will look jarringly bad, and will actually use less than the 300kbps it would have taken to make it look decent. There are ways to mitigate the pitfalls of single-pass encoding, but they may tend to increase bitrate misprediction.

    Multipass ratecontrol can offer huge advantages over a single pass. Using the statistics gathered from the first pass encode, the encoder can estimate, with reasonable accuracy, the "cost" (in bits) of encoding any given frame, at any given quantizer. This allows for a much more rational, better planned allocation of bits between the expensive (high-motion) and cheap (low-motion) scenes. See qcomp below for some ideas on how to tweak this allocation to your liking.

    Moreover, two passes need not take twice as long as one pass. You can tweak the options in the first pass for higher speed and lower quality. If you choose your options well, you can get a very fast first pass. The resulting quality in the second pass will be slightly lower because size prediction is less accurate, but the quality difference is normally much too small to be visible. Try, for example, adding subq=1:frameref=1 to the first pass x264encopts. Then, on the second pass, use slower, higher-quality options: subq=6:frameref=15:partitions=all:me=umh

  • Three pass encoding? x264 offers the ability to make an arbitrary number of consecutive passes. If you specify pass=1 on the first pass, then use pass=3 on a subsequent pass, the subsequent pass will both read the statistics from the previous pass, and write its own statistics. An additional pass following this one will have a very good base from which to make highly accurate predictions of frame sizes at a chosen quantizer. In practice, the overall quality gain from this is usually close to zero, and quite possibly a third pass will result in slightly worse global PSNR than the pass before it. In typical usage, three passes help if you get either bad bitrate prediction or bad looking scene transitions when using only two passes. This is somewhat likely to happen on extremely short clips. There are also a few special cases in which three (or more) passes are handy for advanced users, but for brevity, this guide omits discussing those special cases.

  • qcomp: qcomp trades off the number of bits allocated to "expensive" high-motion versus "cheap" low-motion frames. At one extreme, qcomp=0 aims for true constant bitrate. Typically this would make high-motion scenes look completely awful, while low-motion scenes would probably look absolutely perfect, but would also use many times more bitrate than they would need in order to look merely excellent. At the other extreme, qcomp=1 achieves nearly constant quantization parameter (QP). Constant QP does not look bad, but most people think it is more reasonable to shave some bitrate off of the extremely expensive scenes (where the loss of quality is not as noticeable) and reallocate it to the scenes that are easier to encode at excellent quality. qcomp is set to 0.6 by default, which may be slightly low for many peoples' taste (0.7-0.8 are also commonly used).

  • keyint: keyint is solely for trading off file seekability against coding efficiency. By default, keyint is set to 250. In 25fps material, this guarantees the ability to seek to within 10 seconds precision. If you think it would be important and useful to be able to seek within 5 seconds of precision, set keyint=125; this will hurt quality/bitrate slightly. If you care only about quality and not about seekability, you can set it to much higher values (understanding that there are diminishing returns which may become vanishingly low, or even zero). The video stream will still have seekable points as long as there are some scene changes.

  • deblock: This topic is going to be a bit controversial.

    H.264 defines a simple deblocking procedure on I-blocks that uses pre-set strengths and thresholds depending on the QP of the block in question. By default, high QP blocks are filtered heavily, and low QP blocks are not deblocked at all. The pre-set strengths defined by the standard are well-chosen and the odds are very good that they are PSNR-optimal for whatever video you are trying to encode. The deblock allow you to specify offsets to the preset deblocking thresholds.

    Many people seem to think it is a good idea to lower the deblocking filter strength by large amounts (say, -3). This is however almost never a good idea, and in most cases, people who are doing this do not understand very well how deblocking works by default.

    The first and most important thing to know about the in-loop deblocking filter is that the default thresholds are almost always PSNR-optimal. In the rare cases that they are not optimal, the ideal offset is plus or minus 1. Adjusting deblocking parameters by a larger amount is almost guaranteed to hurt PSNR. Strengthening the filter will smear more details; weakening the filter will increase the appearance of blockiness.

    It is definitely a bad idea to lower the deblocking thresholds if your source is mainly low in spacial complexity (i.e., not a lot of detail or noise). The in-loop filter does a rather excellent job of concealing the artifacts that occur. If the source is high in spacial complexity, however, artifacts are less noticeable. This is because the ringing tends to look like detail or noise. Human visual perception easily notices when detail is removed, but it does not so easily notice when the noise is wrongly represented. When it comes to subjective quality, noise and detail are somewhat interchangeable. By lowering the deblocking filter strength, you are most likely increasing error by adding ringing artifacts, but the eye does not notice because it confuses the artifacts with detail.

    This still does not justify lowering the deblocking filter strength, however. You can generally get better quality noise from postprocessing. If your H.264 encodes look too blurry or smeared, try playing with -vf noise when you play your encoded movie. -vf noise=8a:4a should conceal most mild artifacts. It will almost certainly look better than the results you would have gotten just by fiddling with the deblocking filter.

7.5.2. Encoding setting examples

The following settings are examples of different encoding option combinations that affect the speed vs quality tradeoff at the same target bitrate.

All the encoding settings were tested on a 720x448 @30000/1001 fps video sample, the target bitrate was 900kbps, and the machine was an AMD-64 3400+ at 2400 MHz in 64 bits mode. Each encoding setting features the measured encoding speed (in frames per second) and the PSNR loss (in dB) compared to the "very high quality" setting. Please understand that depending on your source, your machine type and development advancements, you may get very different results.

DescriptionEncoding optionsspeed (in fps)Relative PSNR loss (in dB)
Very high qualitysubq=6:partitions=all:8x8dct:me=umh:frameref=5:bframes=3:b_pyramid=normal:weight_b6fps0dB
High qualitysubq=5:8x8dct:frameref=2:bframes=3:b_pyramid=normal:weight_b13fps-0.89dB
Fastsubq=4:bframes=2:b_pyramid=normal:weight_b17fps-1.48dB

7.6. Encoding with the Video For Windows codec family

Video for Windows provides simple encoding by means of binary video codecs. You can encode with the following codecs (if you have more, please tell us!)

Note that support for this is very experimental and some codecs may not work correctly. Some codecs will only work in certain colorspaces, try -vf format=bgr24 and -vf format=yuy2 if a codec fails or gives wrong output.

7.6.1. Video for Windows supported codecs

Video codec file nameDescription (FourCC)md5sumComment
aslcodec_vfw.dllAlparysoft lossless codec vfw (ASLC)608af234a6ea4d90cdc7246af5f3f29a 
avimszh.dllAVImszh (MSZH)253118fe1eedea04a95ed6e5f4c28878needs -vf format
avizlib.dllAVIzlib (ZLIB)2f1cc76bbcf6d77d40d0e23392fa8eda 
divx.dllDivX4Windows-VFWacf35b2fc004a89c829531555d73f1e6 
huffyuv.dllHuffYUV (lossless) (HFYU)b74695b50230be4a6ef2c4293a58ac3b 
iccvid.dllCinepak Video (cvid)cb3b7ee47ba7dbb3d23d34e274895133 
icmw_32.dllMotion Wavelets (MWV1)c9618a8fc73ce219ba918e3e09e227f2 
jp2avi.dllImagePower MJPEG2000 (IPJ2)d860a11766da0d0ea064672c6833768b-vf flip
m3jp2k32.dllMorgan MJPEG2000 (MJ2C)f3c174edcbaef7cb947d6357cdfde7ff 
m3jpeg32.dllMorgan Motion JPEG Codec (MJPEG)1cd13fff5960aa2aae43790242c323b1 
mpg4c32.dllMicrosoft MPEG-4 v1/v2b5791ea23f33010d37ab8314681f1256 
tsccvid.dllTechSmith Camtasia Screen Codec (TSCC)8230d8560c41d444f249802a2700d1d5shareware error on windows
vp31vfw.dllOn2 Open Source VP3 Codec (VP31)845f3590ea489e2e45e876ab107ee7d2 
vp4vfw.dllOn2 VP4 Personal Codec (VP40)fc5480a482ccc594c2898dcc4188b58f 
vp6vfw.dllOn2 VP6 Personal Codec (VP60)04d635a364243013898fd09484f913fb 
vp7vfw.dllOn2 VP7 Personal Codec (VP70)cb4cc3d4ea7c94a35f1d81c3d750bc8d-ffourcc VP70
ViVD2.dllSoftMedia ViVD V2 codec VfW (GXVE)a7b4bf5cac630bb9262c3f80d8a773a1 
msulvc06.DLLMSU Lossless codec (MSUD)294bf9288f2f127bb86f00bfcc9ccdda Decodable by Window Media Player, not MPlayer (yet).
camcodec.dllCamStudio lossless video codec (CSCD)0efe97ce08bb0e40162ab15ef3b45615sf.net/projects/camstudio

The first column contains the codec names that should be passed after the codec parameter, like: -xvfwopts codec=divx.dll The FourCC code used by each codec is given in the parentheses.

An example to convert an ISO DVD trailer to a VP6 flash video file using compdata bitrate settings:

mencoder -dvd-device zeiram.iso dvd://7 -o trailer.flv \
-ovc vfw -xvfwopts codec=vp6vfw.dll:compdata=onepass.mcf -oac mp3lame \
-lameopts cbr:br=64 -af lavcresample=22050 -vf yadif,scale=320:240,flip \
-of lavf

7.6.2. Using vfw2menc to create a codec settings file.

To encode with the Video for Windows codecs, you will need to set bitrate and other options. This is known to work on x86 on both *NIX and Windows.

First you must build the vfw2menc program. It is located in the TOOLS subdirectory of the MPlayer source tree. To build on Linux, this can be done using Wine:

winegcc vfw2menc.c -o vfw2menc -lwinmm -lole32

To build on Windows in MinGW or Cygwin use:

gcc vfw2menc.c -o vfw2menc.exe -lwinmm -lole32

To build on MSVC you will need getopt. Getopt can be found in the original vfw2menc archive available at: The MPlayer on win32 project.

Below is an example with the VP6 codec.

vfw2menc -f VP62 -d vp6vfw.dll -s firstpass.mcf

This will open the VP6 codec dialog window. Repeat this step for the second pass and use -s secondpass.mcf.

Windows users can use -xvfwopts codec=vp6vfw.dll:compdata=dialog to have the codec dialog display before encoding starts.

7.7. Using MEncoder to create QuickTime-compatible files

7.7.1. Why would one want to produce QuickTime-compatible Files?

There are several reasons why producing QuickTime-compatible files can be desirable.

  • You want any computer illiterate to be able to watch your encode on any major platform (Windows, Mac OS X, Unices …).

  • QuickTime is able to take advantage of more hardware and software acceleration features of Mac OS X than platform-independent players like MPlayer or VLC. That means that your encodes have a chance to be played smoothly by older G4-powered machines.

  • QuickTime 7 supports the next-generation codec H.264, which yields significantly better picture quality than previous codec generations (MPEG-2, MPEG-4 …).

7.7.2. QuickTime 7 limitations

QuickTime 7 supports H.264 video and AAC audio, but it does not support them muxed in the AVI container format. However, you can use MEncoder to encode the video and audio, and then use an external program such as mp4creator (part of the MPEG4IP suite) to remux the video and audio tracks into an MP4 container.

QuickTime's support for H.264 is limited, so you will need to drop some advanced features. If you encode your video with features that QuickTime 7 does not support, QuickTime-based players will show you a pretty white screen instead of your expected video.

  • B-frames: QuickTime 7 supports a maximum of 1 B-frame, i.e. -x264encopts bframes=1. This means that b_pyramid and weight_b will have no effect, since they require bframes to be greater than 1.

  • Macroblocks: QuickTime 7 does not support 8x8 DCT macroblocks. This option (8x8dct) is off by default, so just be sure not to explicitly enable it. This also means that the i8x8 option will have no effect, since it requires 8x8dct.

  • Aspect ratio: QuickTime 7 does not support SAR (sample aspect ratio) information in MPEG-4 files; it assumes that SAR=1. Read the section on scaling for a workaround. QuickTime X no longer has this limitation.

7.7.3. Cropping

Suppose you want to rip your freshly bought copy of "The Chronicles of Narnia". Your DVD is region 1, which means it is NTSC. The example below would still apply to PAL, except you would omit -ofps 24000/1001 and use slightly different crop and scale dimensions.

After running mplayer dvd://1, you follow the process detailed in the section How to deal with telecine and interlacing in NTSC DVDs and discover that it is 24000/1001 fps progressive video. This simplifies the process somewhat, since you do not need to use an inverse telecine filter such as pullup or a deinterlacing filter such as yadif.

Next, you need to crop out the black bars from the top and bottom of the video, as detailed in this previous section.

7.7.4. Scaling

The next step is truly heartbreaking. QuickTime 7 does not support MPEG-4 videos with a sample aspect ratio other than 1, so you will need to upscale (which wastes a lot of disk space) or downscale (which loses some details of the source) the video to square pixels. Either way you do it, this is highly inefficient, but simply cannot be avoided if you want your video to be playable by QuickTime 7. MEncoder can apply the appropriate upscaling or downscaling by specifying respectively -vf scale=-10:-1 or -vf scale=-1:-10. This will scale your video to the correct width for the cropped height, rounded to the closest multiple of 16 for optimal compression. Remember that if you are cropping, you should crop first, then scale:

-vf crop=720:352:0:62,scale=-10:-1

7.7.5. A/V sync

Because you will be remuxing into a different container, you should always use the harddup option to ensure that duplicated frames are actually duplicated in the video output. Without this option, MEncoder will simply put a marker in the video stream that a frame was duplicated, and rely on the client software to show the same frame twice. Unfortunately, this "soft duplication" does not survive remuxing, so the audio would slowly lose sync with the video.

The final filter chain looks like this:

-vf crop=720:352:0:62,scale=-10:-1,harddup

7.7.6. Bitrate

As always, the selection of bitrate is a matter of the technical properties of the source, as explained here, as well as a matter of taste. This movie has a fair bit of action and lots of detail, but H.264 video looks good at much lower bitrates than XviD or other MPEG-4 codecs. After much experimentation, the author of this guide chose to encode this movie at 900kbps, and thought that it looked very good. You may decrease bitrate if you need to save more space, or increase it if you need to improve quality.

7.7.7. Encoding example

You are now ready to encode the video. Since you care about quality, of course you will be doing a two-pass encode. To shave off some encoding time, you can specify the turbo option on the first pass; this reduces subq and frameref to 1. To save some disk space, you can use the ss option to strip off the first few seconds of the video. (I found that this particular movie has 32 seconds of credits and logos.) bframes can be 0 or 1. The other options are documented in Encoding with the x264 codec and the man page.

mencoder dvd://1 -o /dev/null -ss 32 -ovc x264 \
-x264encopts pass=1:turbo:bitrate=900:bframes=1:\
me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300 \
-vf crop=720:352:0:62,scale=-10:-1,harddup \
-oac faac -faacopts br=192:mpeg=4:object=2 -channels 2 -srate 48000 \
-ofps 24000/1001

If you have a multi-processor machine, don't miss the opportunity to dramatically speed-up encoding by enabling x264's multi-threading mode by adding threads=auto to your x264encopts command-line.

The second pass is the same, except that you specify the output file and set pass=2.

mencoder dvd://1 -o narnia.avi -ss 32 -ovc x264 \
-x264encopts pass=2:turbo:bitrate=900:frameref=5:bframes=1:\
me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300 \
-vf crop=720:352:0:62,scale=-10:-1,harddup \
-oac faac -faacopts br=192:mpeg=4:object=2 -channels 2 -srate 48000 \
-ofps 24000/1001

The resulting AVI should play perfectly in MPlayer, but of course QuickTime can not play it because it does not support H.264 muxed in AVI. So the next step is to remux the video into an MP4 container.

7.7.8. Remuxing as MP4

There are several ways to remux AVI files to MP4. You can use mp4creator, which is part of the MPEG4IP suite.

First, demux the AVI into separate audio and video streams using MPlayer.

mplayer narnia.avi -dumpaudio -dumpfile narnia.aac
mplayer narnia.avi -dumpvideo -dumpfile narnia.h264

The file names are important; mp4creator requires that AAC audio streams be named .aac and H.264 video streams be named .h264.

Now use mp4creator to create a new MP4 file out of the audio and video streams.

mp4creator -create=narnia.aac narnia.mp4
mp4creator -create=narnia.h264 -rate=23.976 narnia.mp4

Unlike the encoding step, you must specify the framerate as a decimal (such as 23.976), not a fraction (such as 24000/1001).

This narnia.mp4 file should now be playable with any QuickTime 7 application, such as QuickTime Player or iTunes. If you are planning to view the video in a web browser with the QuickTime plugin, you should also hint the movie so that the QuickTime plugin can start playing it while it is still downloading. mp4creator can create these hint tracks:

mp4creator -hint=1 narnia.mp4
mp4creator -hint=2 narnia.mp4
mp4creator -optimize narnia.mp4

You can check the final result to ensure that the hint tracks were created successfully:

mp4creator -list narnia.mp4

You should see a list of tracks: 1 audio, 1 video, and 2 hint tracks.

Track   Type    Info
1       audio   MPEG-4 AAC LC, 8548.714 secs, 190 kbps, 48000 Hz
2       video   H264 Main@5.1, 8549.132 secs, 899 kbps, 848x352 @ 23.976001 fps
3       hint    Payload mpeg4-generic for track 1
4       hint    Payload H264 for track 2

7.7.9. Adding metadata tags

If you want to add tags to your video that show up in iTunes, you can use AtomicParsley.

AtomicParsley narnia.mp4 --metaEnema --title "The Chronicles of Narnia" --year 2005 --stik Movie --freefree --overWrite

The --metaEnema option removes any existing metadata (mp4creator inserts its name in the "encoding tool" tag), and --freefree reclaims the space from the deleted metadata. The --stik option sets the type of video (such as Movie or TV Show), which iTunes uses to group related video files. The --overWrite option overwrites the original file; without it, AtomicParsley creates a new auto-named file in the same directory and leaves the original file untouched.

7.8. Using MEncoder to create VCD/SVCD/DVD-compliant files

7.8.1. Format Constraints

MEncoder is capable of creating VCD, SCVD and DVD format MPEG files using the libavcodec library. These files can then be used in conjunction with vcdimager or dvdauthor to create discs that will play on a standard set-top player.

The DVD, SVCD, and VCD formats are subject to heavy constraints. Only a small selection of encoded picture sizes and aspect ratios are available. If your movie does not already meet these requirements, you may have to scale, crop or add black borders to the picture to make it compliant.

7.8.1.1. Format Constraints

FormatResolutionV. CodecV. BitrateSample RateA. CodecA. BitrateFPSAspect
NTSC DVD720x480, 704x480, 352x480, 352x240MPEG-29800 kbps48000 HzAC-3,PCM1536 kbps (max)30000/1001, 24000/10014:3, 16:9 (only for 720x480)
NTSC DVD352x240[a]MPEG-11856 kbps48000 HzAC-3,PCM1536 kbps (max)30000/1001, 24000/10014:3, 16:9
NTSC SVCD480x480MPEG-22600 kbps44100 HzMP2384 kbps (max)30000/10014:3
NTSC VCD352x240MPEG-11150 kbps44100 HzMP2224 kbps24000/1001, 30000/10014:3
PAL DVD720x576, 704x576, 352x576, 352x288MPEG-29800 kbps48000 HzMP2,AC-3,PCM1536 kbps (max)254:3, 16:9 (only for 720x576)
PAL DVD352x288[a]MPEG-11856 kbps48000 HzMP2,AC-3,PCM1536 kbps (max)254:3, 16:9
PAL SVCD480x576MPEG-22600 kbps44100 HzMP2384 kbps (max)254:3
PAL VCD352x288MPEG-11152 kbps44100 HzMP2224 kbps254:3

[a] These resolutions are rarely used for DVDs because they are fairly low quality.

If your movie has 2.35:1 aspect (most recent action movies), you will have to add black borders or crop the movie down to 16:9 to make a DVD or VCD. If you add black borders, try to align them at 16-pixel boundaries in order to minimize the impact on encoding performance. Thankfully DVD has sufficiently excessive bitrate that you do not have to worry too much about encoding efficiency, but SVCD and VCD are highly bitrate-starved and require effort to obtain acceptable quality.

7.8.1.2. GOP Size Constraints

DVD, VCD, and SVCD also constrain you to relatively low GOP (Group of Pictures) sizes. For 30 fps material the largest allowed GOP size is 18. For 25 or 24 fps, the maximum is 15. The GOP size is set using the keyint option.

7.8.1.3. Bitrate Constraints

VCD video is required to be CBR at 1152 kbps. This highly limiting constraint also comes along with an extremely low vbv buffer size of 327 kilobits. SVCD allows varying video bitrates up to 2500 kbps, and a somewhat less restrictive vbv buffer size of 917 kilobits is allowed. DVD video bitrates may range anywhere up to 9800 kbps (though typical bitrates are about half that), and the vbv buffer size is 1835 kilobits.

7.8.2. Output Options

MEncoder has options to control the output format. Using these options we can instruct it to create the correct type of file.

The options for VCD and SVCD are called xvcd and xsvcd, because they are extended formats. They are not strictly compliant, mainly because the output does not contain scan offsets. If you need to generate an SVCD image, you should pass the output file to vcdimager.

VCD:

-of mpeg -mpegopts format=xvcd

SVCD:

-of mpeg -mpegopts format=xsvcd

DVD (with timestamps on every frame, if possible):

-of mpeg -mpegopts format=dvd:tsaf

DVD with NTSC Pullup:

-of mpeg -mpegopts format=dvd:tsaf:telecine -ofps 24000/1001

This allows 24000/1001 fps progressive content to be encoded at 30000/1001 fps whilst maintaining DVD-compliance.

7.8.2.1. Aspect Ratio

The aspect argument of -lavcopts is used to encode the aspect ratio of the file. During playback the aspect ratio is used to restore the video to the correct size.

16:9 or "Widescreen"

-lavcopts aspect=16/9

4:3 or "Fullscreen"

-lavcopts aspect=4/3

2.35:1 or "Cinemascope" NTSC

-vf scale=720:368,expand=720:480 -lavcopts aspect=16/9

To calculate the correct scaling size, use the expanded NTSC width of 854/2.35 = 368

2.35:1 or "Cinemascope" PAL

-vf scale=720:432,expand=720:576 -lavcopts aspect=16/9

To calculate the correct scaling size, use the expanded PAL width of 1024/2.35 = 432

7.8.2.2. Maintaining A/V sync

In order to maintain audio/video synchronization throughout the encode, MEncoder has to drop or duplicate frames. This works rather well when muxing into an AVI file, but is almost guaranteed to fail to maintain A/V sync with other muxers such as MPEG. This is why it is necessary to append the harddup video filter at the end of the filter chain to avoid this kind of problem. You can find more technical information about harddup in the section Improving muxing and A/V sync reliability or in the manual page.

7.8.2.3. Sample Rate Conversion

If the audio sample rate in the original file is not the same as required by the target format, sample rate conversion is required. This is achieved using the -srate option and the -af lavcresample audio filter together.

DVD:

-srate 48000 -af lavcresample=48000

VCD and SVCD:

-srate 44100 -af lavcresample=44100

7.8.3. Using libavcodec for VCD/SVCD/DVD Encoding

7.8.3.1. Introduction

libavcodec can be used to create VCD/SVCD/DVD compliant video by using the appropriate options.

7.8.3.2. lavcopts

This is a list of fields in -lavcopts that you may be required to change in order to make a complaint movie for VCD, SVCD, or DVD:

  • acodec: mp2 for VCD, SVCD, or PAL DVD; ac3 is most commonly used for DVD. PCM audio may also be used for DVD, but this is mostly a big waste of space. Note that MP3 audio is not compliant for any of these formats, but players often have no problem playing it anyway.

  • abitrate: 224 for VCD; up to 384 for SVCD; up to 1536 for DVD, but commonly used values range from 192 kbps for stereo to 384 kbps for 5.1 channel sound.

  • vcodec: mpeg1video for VCD; mpeg2video for SVCD; mpeg2video is usually used for DVD but you may also use mpeg1video for CIF resolutions.

  • keyint: Used to set the GOP size. 18 for 30fps material, or 15 for 25/24 fps material. Commercial producers seem to prefer keyframe intervals of 12. It is possible to make this much larger and still retain compatibility with most players. A keyint of 25 should never cause any problems.

  • vrc_buf_size: 327 for VCD, 917 for SVCD, and 1835 for DVD.

  • vrc_minrate: 1152, for VCD. May be left alone for SVCD and DVD.

  • vrc_maxrate: 1152 for VCD; 2500 for SVCD; 9800 for DVD. For SVCD and DVD, you might wish to use lower values depending on your own personal preferences and requirements.

  • vbitrate: 1152 for VCD; up to 2500 for SVCD; up to 9800 for DVD. For the latter two formats, vbitrate should be set based on personal preference. For instance, if you insist on fitting 20 or so hours on a DVD, you could use vbitrate=400. The resulting video quality would probably be quite bad. If you are trying to squeeze out the maximum possible quality on a DVD, use vbitrate=9800, but be warned that this could constrain you to less than an hour of video on a single-layer DVD.

  • vstrict: vstrict=0 should be used to create DVDs. Without this option, MEncoder creates a stream that cannot be correctly decoded by some standalone DVD players.

7.8.3.3. Examples

This is a typical minimum set of -lavcopts for encoding video:

VCD:

-lavcopts vcodec=mpeg1video:vrc_buf_size=327:vrc_minrate=1152:\
vrc_maxrate=1152:vbitrate=1152:keyint=15:acodec=mp2

SVCD:

-lavcopts vcodec=mpeg2video:vrc_buf_size=917:vrc_maxrate=2500:vbitrate=1800:\
keyint=15:acodec=mp2

DVD:

-lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\
keyint=15:vstrict=0:acodec=ac3

7.8.3.4. Advanced Options

For higher quality encoding, you may also wish to add quality-enhancing options to lavcopts, such as trell, mbd=2, and others. Note that qpel and v4mv, while often useful with MPEG-4, are not usable with MPEG-1 or MPEG-2. Also, if you are trying to make a very high quality DVD encode, it may be useful to add dc=10 to lavcopts. Doing so may help reduce the appearance of blocks in flat-colored areas. Putting it all together, this is an example of a set of lavcopts for a higher quality DVD:

-lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=8000:\
keyint=15:trell:mbd=2:precmp=2:subcmp=2:cmp=2:dia=-10:predia=-10:cbp:mv0:\
vqmin=1:lmin=1:dc=10:vstrict=0

7.8.4. Encoding Audio

VCD and SVCD support MPEG-1 layer II audio, using one of toolame, twolame, or libavcodec's MP2 encoder. The libavcodec MP2 is far from being as good as the other two libraries, however it should always be available to use. VCD only supports constant bitrate audio (CBR) whereas SVCD supports variable bitrate (VBR), too. Be careful when using VBR because some bad standalone players might not support it too well.

For DVD audio, libavcodec's AC-3 codec is used.

7.8.4.1. toolame

For VCD and SVCD:

-oac toolame -toolameopts br=224

7.8.4.2. twolame

For VCD and SVCD:

-oac twolame -twolameopts br=224

7.8.4.3. libavcodec

For DVD with 2 channel sound:

-oac lavc -lavcopts acodec=ac3:abitrate=192

For DVD with 5.1 channel sound:

-channels 6 -oac lavc -lavcopts acodec=ac3:abitrate=384

For VCD and SVCD:

-oac lavc -lavcopts acodec=mp2:abitrate=224

7.8.5. Putting it all Together

This section shows some complete commands for creating VCD/SVCD/DVD compliant videos.

7.8.5.1. PAL DVD

mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \
  -vf scale=720:576,harddup -srate 48000 -af lavcresample=48000 \
  -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\
keyint=15:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9 -ofps 25 \
  -o movie.mpg movie.avi

7.8.5.2. NTSC DVD

mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \
  -vf scale=720:480,harddup -srate 48000 -af lavcresample=48000 \
  -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\
keyint=18:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9 -ofps 30000/1001 \
  -o movie.mpg movie.avi

7.8.5.3. PAL AVI Containing AC-3 Audio to DVD

If the source already has AC-3 audio, use -oac copy instead of re-encoding it.

mencoder -oac copy -ovc lavc -of mpeg -mpegopts format=dvd:tsaf \
  -vf scale=720:576,harddup -ofps 25 \
  -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:\
keyint=15:vstrict=0:aspect=16/9 -o movie.mpg movie.avi

7.8.5.4. NTSC AVI Containing AC-3 Audio to DVD

If the source already has AC-3 audio, and is NTSC @ 24000/1001 fps:

mencoder -oac copy -ovc lavc -of mpeg -mpegopts format=dvd:tsaf:telecine \
  -vf scale=720:480,harddup -lavcopts vcodec=mpeg2video:vrc_buf_size=1835:\
  vrc_maxrate=9800:vbitrate=5000:keyint=15:vstrict=0:aspect=16/9 -ofps 24000/1001 \
  -o movie.mpg movie.avi

7.8.5.5. PAL SVCD

mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xsvcd -vf \
    scale=480:576,harddup -srate 44100 -af lavcresample=44100 -lavcopts \
    vcodec=mpeg2video:mbd=2:keyint=15:vrc_buf_size=917:vrc_minrate=600:\
vbitrate=2500:vrc_maxrate=2500:acodec=mp2:abitrate=224:aspect=16/9 -ofps 25 \
    -o movie.mpg movie.avi
  

7.8.5.6. NTSC SVCD

mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xsvcd  -vf \
    scale=480:480,harddup -srate 44100 -af lavcresample=44100 -lavcopts \
    vcodec=mpeg2video:mbd=2:keyint=18:vrc_buf_size=917:vrc_minrate=600:\
vbitrate=2500:vrc_maxrate=2500:acodec=mp2:abitrate=224:aspect=16/9 -ofps 30000/1001 \
    -o movie.mpg movie.avi

7.8.5.7. PAL VCD

mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xvcd -vf \
    scale=352:288,harddup -srate 44100 -af lavcresample=44100 -lavcopts \
    vcodec=mpeg1video:keyint=15:vrc_buf_size=327:vrc_minrate=1152:\
vbitrate=1152:vrc_maxrate=1152:acodec=mp2:abitrate=224:aspect=16/9 -ofps 25 \
    -o movie.mpg movie.avi

7.8.5.8. NTSC VCD

mencoder -oac lavc -ovc lavc -of mpeg -mpegopts format=xvcd -vf \
    scale=352:240,harddup -srate 44100 -af lavcresample=44100 -lavcopts \
    vcodec=mpeg1video:keyint=18:vrc_buf_size=327:vrc_minrate=1152:\
vbitrate=1152:vrc_maxrate=1152:acodec=mp2:abitrate=224:aspect=16/9 -ofps 30000/1001 \
    -o movie.mpg movie.avi



[1] Be careful, however: Decoding DVD-resolution MPEG-4 AVC videos requires a fast machine (i.e. a Pentium 4 over 1.5GHz or a Pentium M over 1GHz).

[2] The same encode may not look the same on someone else's monitor or when played back by a different decoder, so future-proof your encodes by playing them back on different setups.

Capítulo 8. Preguntas de Usuario Frecuentes

8.1. Desarrollo
P: ¿Cómo puedo crear un parche para MPlayer?
P: ¿Cómo puedo traducir MPlayer a un nuevo idioma?
P: ¿Cómo puedo ayudar al desarrollo de MPlayer?
P: ¿Cómo puedo convertirme en un desarrollador de MPlayer?
P: ¿Por qué no usan autoconf/automake?
8.2. Compilación
P: ¿Hay paquetes binarios (RPM/deb) de MPlayer?
P: La compilación se detiene con un mensaje de error similar a este: cfft.c: In function`passf2': cfft.c:556: unable to find a register to spill in class `FLOAT_REGS' cfft.c:556: this is the insn: (insn 235 233 246 (set (subreg:SF (reg/v:DI 29 rmm0 [110]) 0) (minus:SF (mem:SF (plus:SI (mult:SI (reg:SI 1 edx [112]) (const_int 8 [0x8])) (reg/v/f:SI 3 ebx [62])) [4 S4 A32]) (reg:SF 8 st(0) [132]))) 533 {*fop_sf_1_nosse} (insn_list 232 (nil)) (expr_list:REG_DEAD (reg:SF 8 st(0) [132]) (nil))) cfft.c:556: confused by earlier errors, bailing out
P: La compilación se detiene con un mensaje de error similar a este: En el archivo incluído en mplayer.c:34: mw.h: En función `mplMainDraw': mw.h:209: Error interno del compilador en print_rtl_and_abort, at flow.c:6458 Por favor envíe un informe de error completo, con código preprocesado si es necesario.
P: Configure termina con este texto, y ¡MPlayer no compila! Su gcc no soporta ni un i386 para '-march' and '-mcpu'
P: La salida de SDL no funciona o no compila. El problema es ...
P: Sigo teniendo problemas compilando con soporte para SDL, gcc dice algo acerca de referencia no definida a `SDL_EnableKeyRepeat'. ¿Ahora qué?
P: Tengo una Matrox G200/G400/G450/G550, ¿cómo puedo compilar/usar el controlador mga_vid?
P: Hmm, extraño. Cuando cargo el módulo del kernel mga_vid.o, encuentro esto en los historiales: Advertencia: cargando mga_vid.o puede corromper el kernel: no hay licencia
P: Durante 'make', MPlayer se queja de algunas bibliotecas de X11. No lo entiendo, ¡yo TENGO X instalado!?
P: No puedo compilar SVGAlib. Estoy usando kernel 2.3/2.4 ...
P: He compilado MPlayer con soporte libdvdcss/libdivxdecore, pero cuanto intento iniciarlo, me dice: error cargando bibliotecas compartidas: lib*.so.0: no se puede cargar el archivo objeto compartido: No se encuentra el archivo o directorio He comprobado el archivo y ESTÁ en /usr/local/lib ...
P: Compilando MEncoder, da segfaults al linkar!
P: ¡MPlayer muere con segmentation fault durante la comprobación pthread!
P: ¡Me gustaria compilar MPlayer en Minix!
8.3. Preguntas generales
P: ¿Hay alguna lista de correo en MPlayer?
P: He encontrado un error molestro mientras reproducía mi ¡video favorito! ¿A quién debo informar?
P: Tengo problemas reproduciendo archivos con el codec .... ¿Puedo usarlo?
P: Cuando inicio la reproducción, obtenego este mensaje pero todo parece ir bien: Linux RTC init: ioctl (rtc_pie_on): Permiso denegado
P: Hay un cronómetro en la esquina superior izquierda. ¿Cómo puedo quitarlo?
P: Las opciones -xy o -fs no funcionan con el controlador x11 (-vo x11) ...
P: ¿Qué significan los números de la línea de estado?
P: ¿Qué pasa si no quiero que aparezcan?
P: ¿Por qué está la CPU usada a cero (0%) para algunos archivos?
P: Hay mensajes de error archivo no encontrado /usr/local/lib/codecs/ ...
P: Umm, ¿qué es "IdegCounter"?
P: ¿Y qué es "Faszom(C)ounter"?
P: LIRC no funciona, ¿por qué? ...
P: Los subtitulos son muy bonitos, los mas bonitos que jamás he visto, ¡pero retrasan la reproducción! Sé que es poco probable ...
P: ¡Las funciones de pantalla (OSD) parpadean!
P: ¡La barra the tareas de Icewm sigue cubriendo la pelicula cuande se usa la funcion pantalla completa!
P: No puedo acceder al menú del GUI. Intento dar al botón derecho, ¡pero no puedo acceder a ningún objeto del menú!
P: ¿Cómo puedo hacer que MPlayer funcione en segundo plano?
8.4. Problemas de reproducción
P: No puedo identificar la causa de algun extraño problema de reproduccion.
P: ¿Por qué no funciona MPlayer en Fedora Core?
P: ... funciona con xine/avifile/... pero no con MPlayer.
P: Audio se sale de sincronizacion mientras reproduzco un archivo AVI.
P: MPlayer sale con algun error cuando uso l3codeca.acm.
P: Mi ordenador reproduce MS DivX AVIs con resoluciones ~ 640x300 y sonido mp3 en estéreo demasiado lento. Cuando uso la opción -nosound todo va bien (pero sin sonido).
P: MPlayer falla con MPlayer interrupted by signal 4 in module: decode_video.
P: Tengo un problema con [su administrador de ventanas] y reproducción en pantalla completa con modo xv/xmga/sdl/x11 ...
P: Me salió esto reproduciendo archivos MPEG: Can't find codec for video format 0x10000001!
P: Cuando empiezo MPlayer bajo KDE solo recibo una pantalla negra y nada pasa. Aproximadamente un minuto después la imagen empieza a salir.
P: Tengo un AVI que produce una pantalla gris cuando intento reproducirlo con -vc odivx y una verde con -vc divx4.
P: Cuando reproduzco esta pelicula sale el video-audio fuera de sincronizacion y/o MPlayer falla con el siguiente mensaje: DEMUXER: Too many (945 in 8390980 bytes) video packets in the buffer!
P: Tengo un archivo MJPEG que funciona con otros reproductores pero solo muestra imagen negra en MPlayer
P: Cuando intento recibir de mi sintonizador, funciona, pero los colores son extraños. Con otras aplicaciones funciona bien.
P: ¡Tengo problemas con sincronizacion A/V. Algunos de mis archivos AVI reproducen bien, pero algunos con velocidad doble!
P: ¡Todos los archivos WMV (o otros..) que reproduzco crean un ventana verde/gris y solo hay sonido! MPlayer dice: Detected video codec: [null] drv:0 (NULL codec (no decoding))
P: Recibo valores de porcentaje muy extraños (demasiado grandes) mientras reproduzco archivos en mi portátil.
P: El audio/video pierde la sincronización totalmente cuando ejecuto MPlayer como root en mi portatil. Cuando lo ejecuto como usuario normal funciona correctamente.
P: Durante la reproducción de una película, de repente recibo el siguiente mensaje: Badly interleaved AVI file detected - switching to -ni mode...
P: ¿Cómo puedo reproducir archivos de audio MPEG Layer 2 (mp2)?
8.5. Problemas del manejador de video/audio (vo/ao)
P: No tengo sonido cuando reproduzco un video y me sale un error parecido a este: AO: [oss] 44100Hz 2ch Signed 16-bit (Little-Endian) audio_setup: Can't open audio device /dev/dsp: Device or resource busy couldn't open/init audio device -> NOSOUND Audio: no sound!!! Start playing...
P: ¿Que pasa con el controlador DGA? ¡No los puedo encontrar!
P: Vale, -vo help encuentra un controlador DGA, pero se queja sobre sus permisos. ¡Ayúdenme!
P: Cuando uso Xvideo, mi Voodoo 3/Banshee dice: X Error of failed request: BadAccess (attempt to access private resource denied) Major opcode of failed request: 147 (MIT-SHM) Minor opcode of failed request: 1 (X_ShmAttach) Serial number of failed request: 26 Current serial number in output stream:27
P: La salida de OpenGL (-vo gl no funciona (se cuelga/ventana negra/errores X11/...).
P: Yo tengo una tarjeta TNT/TNT2 de nVidia, y tengo una banda con colores extraña, ¡justo debajo de la pelicula! ¿De quién es la culpa de esto?
P: Tengo una tarjeta XYZ de nVidia, y cuando aprieto el raton en la ventanilla del GUI para mostrar el panel del GUI, un cuadrado negro aparece donde hice clic. Tengo el controldor más reciente.
P: ¡Oh que cruel es el mundo ...! ¡SDL solo tiene x11 de destino, pero no xv!
8.6. Reproducción DVD
P: ¿Qué pasa con navegación DVD?
P: Mientras reproduzco un DVD, he encontrado este error: mplayer: ifo_read.c:1143: ifoRead_C_ADT_internal: Assertion nfo_length / sizeof(cell_adr_t) >= c_adt->nr_of_vobs' failed.
P: ¿Puedo compilar libdvdread y libdvdcss en me querido SPARC bajo Solaris?
P: ¿Qué pasa con subtítulos? ¿Puede MPlayer reproducirlos?
P: ¿Cómo puedo fijar el código de región en mi lector de DVD? ¡Yo no tengo Windows!
P: ¿Necesito ser (setuid) root/setuid fibmap_mplayer para poder reproducir un DVD?
P: ¿De donde puedo obtener los paquetes libdvdread y libdvdcss?
P: ¿Es posible reproducir/codificar solo unos capítulos seleccionados?
P: ¡Mi reproducción DVD es lenta!
8.7. Solicitando prestaciones
P: Si MPlayer esta pausado e intento buscar o apretar cualquier tecla, MPlayer abandona el estado de pausa. Me gustaría poder buscar mientras está la película pausada.
P: Me gustaría poder buscar +/- 1 cuadros en lugar de 10 segundos.
P: ¿Como puedo hacer que MPlayer recuerde la opción que usé para un archivo en particular?
8.8. Codificando
P: ¿Como puedo codificar?
P: ¿Como puedo crear un VCD?
P: ¿Como puedo juntar dos archivos?
P: Mi sintonizador funciona, puedo oir el sonido y ver la película con MPlayer, ¡pero MEncoder no codifica el audio!
P: ¡No puedo codificar subtítulos del DVD en el AVI!
P: ¡Al empezar MEncoder produce un fallo de segmentación!
P: ¿Cómo puedo codificar solo capítulos seleccionados de un DVD?
P: Estoy intentando trabajar con archivos de 2GB+ en un sistema de archivos VFAT. ¿Funciona?
P: ¿Por qué la tasa de bits que recomienda MEncoder es negativa?
P: ¿No puedo codificar archivos ASF a AVI/DivX porque usa 1000 fps?
P: ¿Como puedo poner subtítulos en el archivo de salida?

8.1. Desarrollo

P: ¿Cómo puedo crear un parche para MPlayer?
P: ¿Cómo puedo traducir MPlayer a un nuevo idioma?
P: ¿Cómo puedo ayudar al desarrollo de MPlayer?
P: ¿Cómo puedo convertirme en un desarrollador de MPlayer?
P: ¿Por qué no usan autoconf/automake?

P:

¿Cómo puedo crear un parche para MPlayer?

R:

Hemos hechoun pequeño documento describiendo todos los detalles necesarios. Por favor siga las instrucciones.

P:

¿Cómo puedo traducir MPlayer a un nuevo idioma?

R:

Lea el COMO sobre traducciones, ahí debe estar todo explicado. Puede obtener más ayuda en la lista de correo mplayer-docs.

P:

¿Cómo puedo ayudar al desarrollo de MPlayer?

R:

Estamos más que felices de aceptar sus donaciones de hardware y software. Eso nos ayuda a mejorar contínuamente MPlayer.

P:

¿Cómo puedo convertirme en un desarrollador de MPlayer?

R:

Siempre son bienvenidos codeadores y documentadores. Lea la documentación técnica para obtener una primera impresión. Deberá suscribirse a la lista de correo mplayer-dev-eng y comenzar a escribir código. Si quiere ayudar con la documentación, únase a la lista de correo mplayer-docs.

P:

¿Por qué no usan autoconf/automake?

R:

Tenemos un sistema modular, escrito a mano. Hace un trabajo razonablemente bueno, ¿por qué cambiar? Además, no nos gustan las herramientas auto*, como a otra gente.

8.2. Compilación

P: ¿Hay paquetes binarios (RPM/deb) de MPlayer?
P: La compilación se detiene con un mensaje de error similar a este: cfft.c: In function`passf2': cfft.c:556: unable to find a register to spill in class `FLOAT_REGS' cfft.c:556: this is the insn: (insn 235 233 246 (set (subreg:SF (reg/v:DI 29 rmm0 [110]) 0) (minus:SF (mem:SF (plus:SI (mult:SI (reg:SI 1 edx [112]) (const_int 8 [0x8])) (reg/v/f:SI 3 ebx [62])) [4 S4 A32]) (reg:SF 8 st(0) [132]))) 533 {*fop_sf_1_nosse} (insn_list 232 (nil)) (expr_list:REG_DEAD (reg:SF 8 st(0) [132]) (nil))) cfft.c:556: confused by earlier errors, bailing out
P: La compilación se detiene con un mensaje de error similar a este: En el archivo incluído en mplayer.c:34: mw.h: En función `mplMainDraw': mw.h:209: Error interno del compilador en print_rtl_and_abort, at flow.c:6458 Por favor envíe un informe de error completo, con código preprocesado si es necesario.
P: Configure termina con este texto, y ¡MPlayer no compila! Su gcc no soporta ni un i386 para '-march' and '-mcpu'
P: La salida de SDL no funciona o no compila. El problema es ...
P: Sigo teniendo problemas compilando con soporte para SDL, gcc dice algo acerca de referencia no definida a `SDL_EnableKeyRepeat'. ¿Ahora qué?
P: Tengo una Matrox G200/G400/G450/G550, ¿cómo puedo compilar/usar el controlador mga_vid?
P: Hmm, extraño. Cuando cargo el módulo del kernel mga_vid.o, encuentro esto en los historiales: Advertencia: cargando mga_vid.o puede corromper el kernel: no hay licencia
P: Durante 'make', MPlayer se queja de algunas bibliotecas de X11. No lo entiendo, ¡yo TENGO X instalado!?
P: No puedo compilar SVGAlib. Estoy usando kernel 2.3/2.4 ...
P: He compilado MPlayer con soporte libdvdcss/libdivxdecore, pero cuanto intento iniciarlo, me dice: error cargando bibliotecas compartidas: lib*.so.0: no se puede cargar el archivo objeto compartido: No se encuentra el archivo o directorio He comprobado el archivo y ESTÁ en /usr/local/lib ...
P: Compilando MEncoder, da segfaults al linkar!
P: ¡MPlayer muere con segmentation fault durante la comprobación pthread!
P: ¡Me gustaria compilar MPlayer en Minix!

P:

¿Hay paquetes binarios (RPM/deb) de MPlayer?

R:

Vea las secciones de Debian y RPM para más detalles.

P:

La compilación se detiene con un mensaje de error similar a este:

    cfft.c: In function`passf2':
    cfft.c:556: unable to find a register to spill in class `FLOAT_REGS'
    cfft.c:556: this is the insn:
    (insn 235 233 246 (set (subreg:SF (reg/v:DI 29 rmm0 [110]) 0)
            (minus:SF (mem:SF (plus:SI (mult:SI (reg:SI 1 edx [112])
                            (const_int 8 [0x8]))
                        (reg/v/f:SI 3 ebx [62])) [4 S4 A32])
                (reg:SF 8 st(0) [132]))) 533 {*fop_sf_1_nosse} (insn_list
    232 (nil))    (expr_list:REG_DEAD (reg:SF 8 st(0) [132])
             (nil)))
    cfft.c:556: confused by earlier errors, bailing out

R:

Este es un problema conocido de gcc 3.2, actualice a 3.3 para solucionar el problema. Alternativamente puede usar una biblioteca FAAD externa como se describe en la sección AAC.

P:

La compilación se detiene con un mensaje de error similar a este:

    En el archivo incluído en mplayer.c:34:
    mw.h: En función `mplMainDraw':
    mw.h:209: Error interno del compilador en print_rtl_and_abort, at flow.c:6458
    Por favor envíe un informe de error completo,
    con código preprocesado si es necesario.

R:

Este es un problema conocido de gcc 3.0.4, actualice a 3.1 para solucionar el problema.

P:

Configure termina con este texto, y ¡MPlayer no compila!

Su gcc no soporta ni un i386 para '-march' and '-mcpu'

R:

Si su gcc no está instalado correctamente, compruebe el archivo config.log para más detalles.

P:

La salida de SDL no funciona o no compila. El problema es ...

R:

Se ha comprobado que funciona con SDL 1.2.x y puede funcionar en SDL 1.1.7+. No funciona con versiones anteriores. Si decide usar esas versiones que no funcionan, haga lo que le de la gana.

P:

Sigo teniendo problemas compilando con soporte para SDL, gcc dice algo acerca de

referencia no definida a `SDL_EnableKeyRepeat'

. ¿Ahora qué?

R:

¿Dónde ha instalado la biblioteca SDL? Si la ha instalado en /usr/local (por defecto) entonces edite el archivo de primer nivel config.mak y añada -L/usr/local/lib después de X_LIBS=. Ahora escriba make. ¡Ya lo tiene!

P:

Tengo una Matrox G200/G400/G450/G550, ¿cómo puedo compilar/usar el controlador mga_vid?

R:

Lea la sección mga_vid.

P:

Hmm, extraño. Cuando cargo el módulo del kernel mga_vid.o, encuentro esto en los historiales:

Advertencia: cargando mga_vid.o puede corromper el kernel: no hay licencia

R:

Los últimos modutils del kernel requieren una bandera indicando la licencia (principalmente para evitar a hackers del kernel hacer ingeniería inversa de controladores de código cerrado). Actualice su kernel, modutils y MPlayer.

P:

Durante 'make', MPlayer se queja de algunas bibliotecas de X11. No lo entiendo, ¡yo TENGO X instalado!?

R:

... pero no tiene los paquetes de desarrollo de X instalados. O no de la manera correcta. Se llaman XFree86-devel* bajo Red Hat, y xlibs-dev bajo Debian. Compruebe también si los enlaces simbólicos /usr/X11 y /usr/include/X11 existen (esto puede ser un problema en sistemas Mandrake). Pueden crearse con éstas órdenes:

     # ln -sf /usr/X11R6 /usr/X11
     # ln -sf /usr/X11R6/include/X11 /usr/include/X11

Su distribución puede diferir del Filesystem Hierarchy Standard.

P:

No puedo compilar SVGAlib. Estoy usando kernel 2.3/2.4 ...

R:

Debe editar los Makefile.cfg de SVGAlib y dejar como comentario BACKGROUND = y.

P:

He compilado MPlayer con soporte libdvdcss/libdivxdecore, pero cuanto intento iniciarlo, me dice:

error cargando bibliotecas compartidas: lib*.so.0: no se puede cargar el archivo objeto compartido: No se encuentra el archivo o directorio

He comprobado el archivo y ESTÁ en /usr/local/lib ...

R:

Añada /usr/local/lib a /etc/ld.so.conf y ejecute ldconfig.

P:

Compilando MEncoder, da segfaults al linkar!

R:

Este es un problema del linkador. Actualizar binutils puede ayudar (2.11.92.* o posterior deben ir bien). Ya que no es un problema nuestro, ¡por favor no nos informe de él!

P:

¡MPlayer muere con segmentation fault durante la comprobación pthread!

R:

chmod 644 /usr/lib/libc.so

P:

¡Me gustaria compilar MPlayer en Minix!

R:

A mí también. :)

8.3. Preguntas generales

P: ¿Hay alguna lista de correo en MPlayer?
P: He encontrado un error molestro mientras reproducía mi ¡video favorito! ¿A quién debo informar?
P: Tengo problemas reproduciendo archivos con el codec .... ¿Puedo usarlo?
P: Cuando inicio la reproducción, obtenego este mensaje pero todo parece ir bien: Linux RTC init: ioctl (rtc_pie_on): Permiso denegado
P: Hay un cronómetro en la esquina superior izquierda. ¿Cómo puedo quitarlo?
P: Las opciones -xy o -fs no funcionan con el controlador x11 (-vo x11) ...
P: ¿Qué significan los números de la línea de estado?
P: ¿Qué pasa si no quiero que aparezcan?
P: ¿Por qué está la CPU usada a cero (0%) para algunos archivos?
P: Hay mensajes de error archivo no encontrado /usr/local/lib/codecs/ ...
P: Umm, ¿qué es "IdegCounter"?
P: ¿Y qué es "Faszom(C)ounter"?
P: LIRC no funciona, ¿por qué? ...
P: Los subtitulos son muy bonitos, los mas bonitos que jamás he visto, ¡pero retrasan la reproducción! Sé que es poco probable ...
P: ¡Las funciones de pantalla (OSD) parpadean!
P: ¡La barra the tareas de Icewm sigue cubriendo la pelicula cuande se usa la funcion pantalla completa!
P: No puedo acceder al menú del GUI. Intento dar al botón derecho, ¡pero no puedo acceder a ningún objeto del menú!
P: ¿Cómo puedo hacer que MPlayer funcione en segundo plano?

P:

¿Hay alguna lista de correo en MPlayer?

R:

Sí. Vea la sección listas de correo de nuestro homepage.

P:

He encontrado un error molestro mientras reproducía mi ¡video favorito! ¿A quién debo informar?

R:

Por favor lea las guías para informar de fallos y siga las instrucciones.

P:

Tengo problemas reproduciendo archivos con el codec .... ¿Puedo usarlo?

R:

Compruebe el estado del codec, si no contiene su codec, lea el COMO importar codecs Win32 y contacte con nosotros.

P:

Cuando inicio la reproducción, obtenego este mensaje pero todo parece ir bien:

Linux RTC init: ioctl (rtc_pie_on): Permiso denegado

R:

Necesita privilegios de root o establecer un kernel especial para usar el nuevo código de temporización. Para más detalles vea la secciónRTC de la documentación.

P:

Hay un cronómetro en la esquina superior izquierda. ¿Cómo puedo quitarlo?

R:

Pulse o y pruebe la opción -osdlevel.

P:

Las opciones -xy o -fs no funcionan con el controlador x11 (-vo x11) ...

R:

Sí funciona, pero debe especificar un escalado por software (muy lento) con la opción -zoom. Mejor use soporte XF86VidMode: Debe especificar la opción -vm y la opción -fs, y ya está. Asegúrese de tener los modelines correctos en su archivo XF86Config, e intente que el controlador DGA y el controlador SDL DGA funcionen para usted. Es mucho más rápido. Si SDL DGA funciona, úselo, será incluso más rápido.

P:

¿Qué significan los números de la línea de estado?

R:

Ejemplo:

A: 2.1 V: 2.2 A-V: -0.167 ct: 0.042 57/57 41% 0% 2.6% 0 4 49%

  • A: posición de audio en segundos

  • V: posición de video en segundos

  • A-V: diferencia audio-video en segundos (retardo)

  • ct: corrección completa de sincronización A-V

  • cuadros reproducidos (contando desde la ultima busceda)

  • cuadros descifrados (contando desde la ultima busceda)

  • porcentaje cpu usado por video codec (para trozos y DR esto incluye video_out)

  • porcentaje cpu usado por video_out

  • porcentaje cpu usado por audio codec

  • cuadros dejados para mantener sincronización A-V

  • nivel actual de procesamiento posterior de imagen (mientras usando-autoq)

  • nivel de cache usado (aproximadamente 50% es normal)

La mayoría de ellos tiened utilidad de depurar y serán suprimidos en cierto punto.

P:

¿Qué pasa si no quiero que aparezcan?

R:

Use la opción -quiet y lea las páginas man.

P:

¿Por qué está la CPU usada a cero (0%) para algunos archivos?

R:

No esta a cero, pero es recojido del codec osea que no se puede medir por separado. Debería intentar reproducir el archivo usando -vo null y luego -vo ... y observar la diferencia para ver la velocidad de video_out.

R:

Está usando Direct Rendering, en este caso el codec renderiza por sí mismo sobre la memoria de video. En este caso, el porcentaje descifrado contiene también el porcentaje reproducido.

P:

Hay mensajes de error archivo no encontrado /usr/local/lib/codecs/ ...

R:

Descargue los codecs Win32 de nuestra página de codecs (el paquete de codecs avifile contiene un conjunto diferente de DLL's) e instálelo.

P:

Umm, ¿qué es "IdegCounter"?

R:

Una combinación de una palabra en Húngaro y una Inglesa. "Ideg" en Húngaro quiere decir lo mismo que "nervio" en Español, y es pronunciado algo parecido a "ydaegh". Al principio fue usado para medir el nivel de Nervios de A'rpi, después de la (umm) "misteriosa" desaparición de codigo CVS ;)

P:

¿Y qué es "Faszom(C)ounter"?

R:

"Fasz" es una palabra Húngara que no quieres saber, las otras están conectadas a las mentes pervertidas de los desarrolladores de MPlayer.

P:

LIRC no funciona, ¿por qué? ...

R:

¿Está seguro que está usando mplayer en lugar de mplayer_lirc? Toma nota que solia ser mplayer_lirc por bastante tiempo, version 0.60 incluida, pero esto fue cambiado recientemente a mplayer.

P:

Los subtitulos son muy bonitos, los mas bonitos que jamás he visto, ¡pero retrasan la reproducción! Sé que es poco probable ...

R:

Después de ejecutar ./configure, tiene que editar config.h y sustituir #undef FAST_OSD con #define FAST_OSD. Y volver a compilar.

P:

¡Las funciones de pantalla (OSD) parpadean!

R:

Está usando el controlador vo con un solo buffer (x11,xv). Con xv, use la opción -double. Pruebe también -vf expand.

P:

¡La barra the tareas de Icewm sigue cubriendo la pelicula cuande se usa la funcion pantalla completa!

R:

Esto ya no deberia ocurrir, si aún sigue use la opción de capa -fstype y comuníquelo a la lista de correo mplayer-users.

P:

No puedo acceder al menú del GUI. Intento dar al botón derecho, ¡pero no puedo acceder a ningún objeto del menú!

R:

¿Está usando FVWM? Intente la siguiente:

  1. Start -> Settings -> Configuration -> Base Configuration

  2. Cambie Use Applications position hints a Yes

P:

¿Cómo puedo hacer que MPlayer funcione en segundo plano?

R:

Use:

mplayer opciones archivo < /dev/null &

8.4. Problemas de reproducción

P: No puedo identificar la causa de algun extraño problema de reproduccion.
P: ¿Por qué no funciona MPlayer en Fedora Core?
P: ... funciona con xine/avifile/... pero no con MPlayer.
P: Audio se sale de sincronizacion mientras reproduzco un archivo AVI.
P: MPlayer sale con algun error cuando uso l3codeca.acm.
P: Mi ordenador reproduce MS DivX AVIs con resoluciones ~ 640x300 y sonido mp3 en estéreo demasiado lento. Cuando uso la opción -nosound todo va bien (pero sin sonido).
P: MPlayer falla con MPlayer interrupted by signal 4 in module: decode_video.
P: Tengo un problema con [su administrador de ventanas] y reproducción en pantalla completa con modo xv/xmga/sdl/x11 ...
P: Me salió esto reproduciendo archivos MPEG: Can't find codec for video format 0x10000001!
P: Cuando empiezo MPlayer bajo KDE solo recibo una pantalla negra y nada pasa. Aproximadamente un minuto después la imagen empieza a salir.
P: Tengo un AVI que produce una pantalla gris cuando intento reproducirlo con -vc odivx y una verde con -vc divx4.
P: Cuando reproduzco esta pelicula sale el video-audio fuera de sincronizacion y/o MPlayer falla con el siguiente mensaje: DEMUXER: Too many (945 in 8390980 bytes) video packets in the buffer!
P: Tengo un archivo MJPEG que funciona con otros reproductores pero solo muestra imagen negra en MPlayer
P: Cuando intento recibir de mi sintonizador, funciona, pero los colores son extraños. Con otras aplicaciones funciona bien.
P: ¡Tengo problemas con sincronizacion A/V. Algunos de mis archivos AVI reproducen bien, pero algunos con velocidad doble!
P: ¡Todos los archivos WMV (o otros..) que reproduzco crean un ventana verde/gris y solo hay sonido! MPlayer dice: Detected video codec: [null] drv:0 (NULL codec (no decoding))
P: Recibo valores de porcentaje muy extraños (demasiado grandes) mientras reproduzco archivos en mi portátil.
P: El audio/video pierde la sincronización totalmente cuando ejecuto MPlayer como root en mi portatil. Cuando lo ejecuto como usuario normal funciona correctamente.
P: Durante la reproducción de una película, de repente recibo el siguiente mensaje: Badly interleaved AVI file detected - switching to -ni mode...
P: ¿Cómo puedo reproducir archivos de audio MPEG Layer 2 (mp2)?

P:

No puedo identificar la causa de algun extraño problema de reproduccion.

R:

¿Tiene algún archivo codecs.conf extraviado en ~/.mplayer/, /etc/, /usr/local/etc/ o lugar similar? Quítelo, archivos codecs.conf anticuados pueden causar problemas extraños. MPlayer usará uno que tiene incorporado en su lugar.

P:

¿Por qué no funciona MPlayer en Fedora Core?

R:

Hay una mala interacción en Fedora entre exec-shield, prelink, y cualquier aplicación que use DLLs de Windows (tales como MPlayer).

El problema es que exec-shield aleatoriza la dirección de carga de todas las bibliotecas del sistema. Esta aleatorización ocurre en el tiempo del prelink (una vez cada dos semanas).

Cuando MPlayer intenta cargar una DLL de Windows intenta colocarla en una dirección específica (0x400000). Si una biblioteca importante del sistema resulta que está en esa dirección, MPlayer fallará. (Un síntoma típico es un fallo de segmentación cuando se intentan reproducir archivos Windows Media 9.)

Si le ocurre este problema tiene dos opciones:

  • Esperar dos semanas. Puede que vuelva a funcionar de nuevo.

  • Hacer el relink de todos los binarios del sistema con diferentes opciones del prelink. Aquí tiene las instrucciones paso a paso:

    1. Edite /etc/sysconfig/prelink y cambie

      PRELINK_OPTS=-mR
      

      a

      PRELINK_OPTS="-mR --no-exec-shield"
      

    2. touch /var/lib/misc/prelink.force

    3. /etc/cron.daily/prelink (Esto relinka todas las aplicaciones, y tardará un buen rato.)

    4. execstack -s /ruta/a/mplayer (Esto desactiva el execshield para el binario de MPlayer.)

P:

... funciona con xine/avifile/... pero no con MPlayer.

R:

MPlayer no es xine/avifile/.... Aunque estos reproductores tienen algún código en común, el grupo de codecs (DLL), sincronización, demultiplexores etc es diferente y no debería ser comparado. Si tiene un archivo que MPlayer falla en reproducir correctamente pero que funciona con otro reproductor, por favor lea la guía para reportar errores y suba el archivo a nuestro servidor FTP.

P:

Audio se sale de sincronizacion mientras reproduzco un archivo AVI.

R:

Intenta la -bps o -nobps opcion. Si todavia no mejora, lea esto y sube el archivo a FTP.

P:

MPlayer sale con algun error cuando uso l3codeca.acm.

R:

Compruebe la salidaldd /usr/local/bin/mplayer. Si contiene

libc.so.6 => /lib/libc.so.6 (0x4???????)

donde "?" es cualquier número entonces está bien, el error no es de ahí. Si es:

libc.so.6 => /lib/libc.so.6 (0x00??????)

hay un problema con su kernel/libc. Quizas esté usando algún parche de seguridad (por ejemplo el parche de Solar Designer's OpenWall) que fuerza la carga de librerías a direcciones bajas. Al ser un DLL non-relocable,l3codeca.acm debe ser cargado a 0x00400000, no podemos cambiar esto. Debería usar un kernel sin parchear, o use la opción -afm 1 de MPlayer para dejar de usar l3codeca.acm.

P:

Mi ordenador reproduce MS DivX AVIs con resoluciones ~ 640x300 y sonido mp3 en estéreo demasiado lento. Cuando uso la opción -nosound todo va bien (pero sin sonido).

R:

Su ordenador es demasiado lento o su tarjeta de sonido está estropeada. Consulte la documentación de la misma para ver si hay forma de mejorar el rendimiento.

P:

MPlayer falla con

MPlayer interrupted by
signal 4 in module: decode_video

.

R:

Intente ejecutar MPlayer en la máquina en la que fue compilado. O recompile con detección de CPU en tiempo de ejecución (./configure --enable-runtime-cpudetection). No use MPlayer en un CPU diferente a en el que fue compilado, sin usar esta opción que se acaba de mencionar.

P:

Tengo un problema con [su administrador de ventanas] y reproducción en pantalla completa con modo xv/xmga/sdl/x11 ...

R:

Lea la guía para informar de errores y mande un informe de error.

P:

Me salió esto reproduciendo archivos MPEG: Can't find codec for video format 0x10000001!

R:

Tiene una version vieja de codecs.conf en ~/.mplayer/, /etc/, /usr/local/etc/ o similar. Bórrelo, ya no sigue siendo necesario. O tiene la opción vc= o algo parecido en su archivo(s) de configuración.

P:

Cuando empiezo MPlayer bajo KDE solo recibo una pantalla negra y nada pasa. Aproximadamente un minuto después la imagen empieza a salir.

R:

El demonio de sonido arts de KDE esta bloqueando la tarjeta de sonido. Puedes esperar hasta que la imagen empiece o desactivar arts-daemon en el centro de control. Si quiere usar sonido arts, especifique la salida de audio a través de nuestro manejador nativo de audio para arts (-ao arts). Si esto falla o no esta compilado, pruebe SDL (-ao sdl) y asegúrese de que su SDL puede manejar sonido arts. Otra opción es ejecutar MPlayer con artsdsp.

P:

Tengo un AVI que produce una pantalla gris cuando intento reproducirlo con -vc odivx y una verde con -vc divx4.

R:

No es un archivo DivX, sino un MS MPEG4v3. Si tiene una version antigua de codecs.conf en ~/.mplayer/, /etc/, /usr/local/etc/ o similar, bórrela.

P:

Cuando reproduzco esta pelicula sale el video-audio fuera de sincronizacion y/o MPlayer falla con el siguiente mensaje:

DEMUXER: Too many (945 in 8390980 bytes) video packets in the buffer!

R:

Esto puede ser por varias razones.

  • Su CPU y/o tarjeta de video y/o sonido es damasiado lenta. MPlayer mostrará un mensaje si el motivo es ese (y el contador de imágenes saltadas subirá rápidamente).

  • Si es un AVI, igual tiene interleaving malo. Intente la opción -ni.

  • Si su manejador de sonido tiene errores, o usa ALSA 0.5 con -ao oss.

  • El AVI tiene una cabecera errónea malo, pruebe la opción -nobps, y/o -mc 0.

P:

Tengo un archivo MJPEG que funciona con otros reproductores pero solo muestra imagen negra en MPlayer

R:

Use otro codec para reproducir el archivo, pruebe -vc ffmjpeg.

P:

Cuando intento recibir de mi sintonizador, funciona, pero los colores son extraños. Con otras aplicaciones funciona bien.

R:

Probablemente su tarjeta esté representando la actividad del espacio de color de manera incorrecta. Pruebe con YUY2 en lugar del YV12 por defecto (consulte la sección TV).

P:

¡Tengo problemas con sincronizacion A/V. Algunos de mis archivos AVI reproducen bien, pero algunos con velocidad doble!

R:

El controlador de su tarjeta de sonido tiene errores. Probablemente funciona a 44100Hz, e intenta reproducir un archivo que tiene audio a 22050Hz. Pruebe el plugin que cambia la frecuencia de muestreo del audio.

P:

¡Todos los archivos WMV (o otros..) que reproduzco crean un ventana verde/gris y solo hay sonido! MPlayer dice:

Detected video codec: [null] drv:0 (NULL codec (no decoding))

R:

Si tiene una versión antigua de codecs.conf en ~/.mplayer/, /etc/, /usr/local/etc/ o similar, bórrela.

P:

Recibo valores de porcentaje muy extraños (demasiado grandes) mientras reproduzco archivos en mi portátil.

R:

Es debido al administrador de energia / sistema de ahorro de energia de su portatil (BIOS, no kernel). Enchufe el conector de energia exterior antes de encender su portatil. También puede probar si si cpufreq (un interfaz SpeedStep para Linux) le puede ser de ayuda.

P:

El audio/video pierde la sincronización totalmente cuando ejecuto MPlayer como root en mi portatil. Cuando lo ejecuto como usuario normal funciona correctamente.

R:

Se trata de otro efecto del administrador de energía (mire más arriba). Enchufe el conector de energía externa antes de encender su portátil. o use la opción -nortc.

P:

Durante la reproducción de una película, de repente recibo el siguiente mensaje:

Badly interleaved AVI file detected - switching to -ni mode...

R:

Archivos malamente interleaved y la opción -cache no funcionan bien juntas. Pruebe -nocache.

P:

¿Cómo puedo reproducir archivos de audio MPEG Layer 2 (mp2)?

R:

Debe usar -rawaudio on:format=0x50.

8.5. Problemas del manejador de video/audio (vo/ao)

P: No tengo sonido cuando reproduzco un video y me sale un error parecido a este: AO: [oss] 44100Hz 2ch Signed 16-bit (Little-Endian) audio_setup: Can't open audio device /dev/dsp: Device or resource busy couldn't open/init audio device -> NOSOUND Audio: no sound!!! Start playing...
P: ¿Que pasa con el controlador DGA? ¡No los puedo encontrar!
P: Vale, -vo help encuentra un controlador DGA, pero se queja sobre sus permisos. ¡Ayúdenme!
P: Cuando uso Xvideo, mi Voodoo 3/Banshee dice: X Error of failed request: BadAccess (attempt to access private resource denied) Major opcode of failed request: 147 (MIT-SHM) Minor opcode of failed request: 1 (X_ShmAttach) Serial number of failed request: 26 Current serial number in output stream:27
P: La salida de OpenGL (-vo gl no funciona (se cuelga/ventana negra/errores X11/...).
P: Yo tengo una tarjeta TNT/TNT2 de nVidia, y tengo una banda con colores extraña, ¡justo debajo de la pelicula! ¿De quién es la culpa de esto?
P: Tengo una tarjeta XYZ de nVidia, y cuando aprieto el raton en la ventanilla del GUI para mostrar el panel del GUI, un cuadrado negro aparece donde hice clic. Tengo el controldor más reciente.
P: ¡Oh que cruel es el mundo ...! ¡SDL solo tiene x11 de destino, pero no xv!

P:

No tengo sonido cuando reproduzco un video y me sale un error parecido a este:

    AO: [oss] 44100Hz 2ch Signed 16-bit (Little-Endian)
    audio_setup: Can't open audio device /dev/dsp: Device or resource busy
    couldn't open/init audio device -> NOSOUND
    Audio: no sound!!!
    Start playing...

R:

¿Está usando KDE o GNOME con el demonio ARTS o ESD? Pruebe a no utilizar el demonio de sonido o use la opcion -ao arts o -ao esd para hacer que MPlayer use ARTS o ESD.

P:

¿Que pasa con el controlador DGA? ¡No los puedo encontrar!

R:

./configure autodetecta tu controlador DGA. Si -vo help no detecta DGA, entonces hay un problema con la instalación de X. Pruebe ./configure --enable-dga y lea la sección DGA. Si no, pruebe el controlador DGA de SDL con la opción -vo sdl:dga.

P:

Vale, -vo help encuentra un controlador DGA, pero se queja sobre sus permisos. ¡Ayúdenme!

R:

¡Solo funciona ejecutandolo siendo root! Es una limitacion de DGA. Necesita volverse root (su -), e intentalo otra vez. Otra solución es hacer MPlayer SUID root, ¡pero no es recomendable!

     chown root /usr/local/bin/mplayer
     chmod 755 /usr/local/bin/mplayer
     chmod +s /usr/local/bin/mplayer
 

Aviso

¡Esto un gran riesgo de seguridad! Nunca lo haga en un servidor o en un ordenador del que no tiene control completo porque otros usuarios pueden conseguir privilegios root por SUID root MPlayer. Ha sido advertido.

P:

Cuando uso Xvideo, mi Voodoo 3/Banshee dice:

X Error of failed request: BadAccess (attempt to access private resource denied)
   Major opcode of failed request: 147 (MIT-SHM)
   Minor opcode of failed request: 1 (X_ShmAttach)
   Serial number of failed request: 26
   Current serial number in output stream:27

R:

El controlador tdfx en XFree86 4.0.2/4.0.3 tiene este error. Está arreglado en bugfix #621 del CVS log XFree86 4.1.0 CVS. Osea que actualice a XFree86 4.1.0 o posterior. Otras opciones son, descargar (por lo menos) DRI version 0.6 de la pagina DRI, o usar CVS DRI.

P:

La salida de OpenGL (-vo gl no funciona (se cuelga/ventana negra/errores X11/...).

R:

Su controlador OpenGL no soporta cambios dinámicos de textura (glTexSubImage). No es conocido que funcione con la porqueria binaria de nVidia. Se sabe que funciona con Utah-GLX/DRI y tarjetas Matrox G400. También con DRI y tarjetas Radeon. No funcionará con DRI y otras tarjetas. Tampoco funcionará con tarjetas 3DFX porque tienen un tamaño de textura limitado a 256x256.

P:

Yo tengo una tarjeta TNT/TNT2 de nVidia, y tengo una banda con colores extraña, ¡justo debajo de la pelicula! ¿De quién es la culpa de esto?

R:

Esto es un error del controlador X binario de nVidia. Estos errores ocuren SOLO con las tarjetas TNT/TNT2, y no podemos hacer nada sobre ello. Para resolver el problema, descargue la última versión del controlador binario de nVidia. Si todavia sigue mal, ¡quejese a nVidia!

P:

Tengo una tarjeta XYZ de nVidia, y cuando aprieto el raton en la ventanilla del GUI para mostrar el panel del GUI, un cuadrado negro aparece donde hice clic. Tengo el controldor más reciente.

R:

Si, nVidia corregió el error previo (arriba), e introdujo uno nuevo. Vamos a felicitarlos. ÚLTIMAS NOTICIAS: Según nVidia, esto ya esta resuelto.

P:

¡Oh que cruel es el mundo ...! ¡SDL solo tiene x11 de destino, pero no xv!

R:

Pruebe x11 otra vez. Ahora pruebe -vo x11 -fs -zoom. ¿Ve la diferencia? No?! Vale, aquí viene la aclaración: La salida x11 de SDL usa xv cuando lo puede conseguir, no se tiene que precupar de ello ... Nota: Con SDL puede forzar/desactivar Xv usando -forcexv y -noxv

8.6. Reproducción DVD

P: ¿Qué pasa con navegación DVD?
P: Mientras reproduzco un DVD, he encontrado este error: mplayer: ifo_read.c:1143: ifoRead_C_ADT_internal: Assertion nfo_length / sizeof(cell_adr_t) >= c_adt->nr_of_vobs' failed.
P: ¿Puedo compilar libdvdread y libdvdcss en me querido SPARC bajo Solaris?
P: ¿Qué pasa con subtítulos? ¿Puede MPlayer reproducirlos?
P: ¿Cómo puedo fijar el código de región en mi lector de DVD? ¡Yo no tengo Windows!
P: ¿Necesito ser (setuid) root/setuid fibmap_mplayer para poder reproducir un DVD?
P: ¿De donde puedo obtener los paquetes libdvdread y libdvdcss?
P: ¿Es posible reproducir/codificar solo unos capítulos seleccionados?
P: ¡Mi reproducción DVD es lenta!

P:

¿Qué pasa con navegación DVD?

R:

El soporte para dvdnav en MPlayer no funciona, aunque la reproducción normal sí funciona. Si quiere tener menús elaborados, tendrá que usar otro reproductor como xine o Ogle. Si le preocupa la navegacion DVD, mande un parche.

P:

Mientras reproduzco un DVD, he encontrado este error:

mplayer: ifo_read.c:1143: ifoRead_C_ADT_internal: Assertion nfo_length / sizeof(cell_adr_t) >= c_adt->nr_of_vobs' failed.

R:

Esto es un error conocido de libdvdread 0.9.1/0.9.2. Use libmpdvdkit2, que esta presente en la fuente de MPlayer, y es usado por defecto.

P:

¿Puedo compilar libdvdread y libdvdcss en me querido SPARC bajo Solaris?

R:

Quién sabe ... Se ha oido que sí funciona, osea que por favor pruébelo y denos información. Véase la documentacién de libdvdread y su página web también. Nosotros no somos los autores de libdvdread. Use libmpdvdkit2, que esta presente en la fuente de MPlayer, y es usado por defecto.

P:

¿Qué pasa con subtítulos? ¿Puede MPlayer reproducirlos?

R:

Sí. Mire la sección DVD.

P:

¿Cómo puedo fijar el código de región en mi lector de DVD? ¡Yo no tengo Windows!

R:

Use la heramienta de fijar región.

P:

¿Necesito ser (setuid) root/setuid fibmap_mplayer para poder reproducir un DVD?

R:

No. Sin embargo debe tener los permisos adecuados en el archivo del DVD en (en /dev/).

P:

¿De donde puedo obtener los paquetes libdvdread y libdvdcss?

R:

No necesita obtenerlos. Use libmpdvdkit2, que está presente en la fuente de MPlayer, y es usado por defecto. Puede obtener los paquetes mencionados de la página de Ogle.

P:

¿Es posible reproducir/codificar solo unos capítulos seleccionados?

R:

Si, pruebe la opción -chapter.

P:

¡Mi reproducción DVD es lenta!

R:

Use la opción -cache (definido en la pagina man) y pruebe a activar DMA para el aparato DVD con la heramienta hdparm (definido en el capitulo CD).

8.7. Solicitando prestaciones

P: Si MPlayer esta pausado e intento buscar o apretar cualquier tecla, MPlayer abandona el estado de pausa. Me gustaría poder buscar mientras está la película pausada.
P: Me gustaría poder buscar +/- 1 cuadros en lugar de 10 segundos.
P: ¿Como puedo hacer que MPlayer recuerde la opción que usé para un archivo en particular?

P:

Si MPlayer esta pausado e intento buscar o apretar cualquier tecla, MPlayer abandona el estado de pausa. Me gustaría poder buscar mientras está la película pausada.

R:

Esto es muy dificil de implementar sin perder sincronizacion A/V. Todos los intentos han fallado, pero se agradece cualquier colaboración en forma de parche.

P:

Me gustaría poder buscar +/- 1 cuadros en lugar de 10 segundos.

R:

Esto no se hará nunca. Sí estaba, pero luego estropeó la sincronización A/V. Siéntase libre de implemetarlo, y mande un parche. No pregunte por ello.

P:

¿Como puedo hacer que MPlayer recuerde la opción que usé para un archivo en particular?

R:

Cree un archivo llamado movie.avi.conf con las opciones archivo-específico en el, y póngalo en ~/.mplayer o en el mismo lugar que el archivo.

8.8. Codificando

P: ¿Como puedo codificar?
P: ¿Como puedo crear un VCD?
P: ¿Como puedo juntar dos archivos?
P: Mi sintonizador funciona, puedo oir el sonido y ver la película con MPlayer, ¡pero MEncoder no codifica el audio!
P: ¡No puedo codificar subtítulos del DVD en el AVI!
P: ¡Al empezar MEncoder produce un fallo de segmentación!
P: ¿Cómo puedo codificar solo capítulos seleccionados de un DVD?
P: Estoy intentando trabajar con archivos de 2GB+ en un sistema de archivos VFAT. ¿Funciona?
P: ¿Por qué la tasa de bits que recomienda MEncoder es negativa?
P: ¿No puedo codificar archivos ASF a AVI/DivX porque usa 1000 fps?
P: ¿Como puedo poner subtítulos en el archivo de salida?

P:

¿Como puedo codificar?

R:

Lea la sección MEncoder.

P:

¿Como puedo crear un VCD?

R:

Pruebe el script mencvcd.sh del subdirectorio TOOLS. Con él puede codificar DVDs u otras peliculas al formato VCD o SVCD e incluso grabarlo directamente a CD.

P:

¿Como puedo juntar dos archivos?

R:

Esta ha sido discutido constantemente en mplayer-users. Busque en los archivos para una respuesta completa. Se trata de un asunto complicado y sus resultados variarán dependiendo mucho en qué tipo de archivos quiere juntar. MPEGs pueden ser unidos a un solo archivo con suerte. Para AVIs hay dos aplicaciones, avidemux y avimerge (parte del conjunto de herramientas transcode), disponibles que pueden hacer el trabajo. También puede probar MEncoder si tiene dos archivos compartiendo las mismas dimensiones y codec. Pruebe

     cat archivo1 archivo2 > archivo3
     mencoder -ovc copy -oac copy -o salida.avi -forceidx archivo3.avi

P:

Mi sintonizador funciona, puedo oir el sonido y ver la película con MPlayer, ¡pero MEncoder no codifica el audio!

R:

La codificación de audio de TV para Linux no está implementada de momento, estamos trabajando en ello. Por el momento solo funciona en BSD.

P:

¡No puedo codificar subtítulos del DVD en el AVI!

R:

¡Tiene que especificar la opción -sid correctamente!

P:

¡Al empezar MEncoder produce un fallo de segmentación!

R:

Descargue la última version de DivX4Linux.

P:

¿Cómo puedo codificar solo capítulos seleccionados de un DVD?

R:

Use la opción -chapter correctamente, por ejemplo: -chapter 5-7

P:

Estoy intentando trabajar con archivos de 2GB+ en un sistema de archivos VFAT. ¿Funciona?

R:

No, VFAT no soporta archivos 2GB+.

P:

¿Por qué la tasa de bits que recomienda MEncoder es negativa?

R:

Porque la tasa de bits en la que codificaste el audio es demasiado grande para caber la pelicula en un CD. Mire a ver si tienes libmp3lame instalado correctamente.

P:

¿No puedo codificar archivos ASF a AVI/DivX porque usa 1000 fps?

R:

ASF usa una tasa de cuadros variable pero AVI usa una fija, debe fijarlo a mano usando -ofps.

P:

¿Como puedo poner subtítulos en el archivo de salida?

R:

Simplemente pase la opción -sub <filename> (o -sid, -vobsub, respectivamente) a MEncoder.

Apéndice A. Cómo reportar errores

Informes de errores buenos son una contribución muy valiosa para el desarrollo de cualquier proyecto de software. Pero solo por escribir buen software, buenos informes de problemas involucran algún trabajo. Por favor tenga en cuenta que la mayoría de los desarrolladores están extremadamente ocupados y reciben cantidades inmensas de correo. La realimentación es crucial para mejorar MPlayer y es muy apreciada, por favor entienda todo lo que tiene que hacer para proveer toda la información que le pedimos y siga las instrucciones de este documento al pie de la letra.

A.1. Cómo corregir fallos

Si tiene los conocimientos necesarios está invitado a corregir los fallos usted mismo. ¿O quizá ya lo ha hecho? Por favor lea este pequeño documento para ver cómo obtener el código incluido en MPlayer. La gente de la lista de correo mplayer-dev-eng le ayudará si aún le quedan dudas.

A.2. Cómo informar de errores

Lo primero de todo pruebe la última versión CVS de MPlayer por si el fallo ya está arreglado allí. El desarrollo se mueve extremadamente rápido, la mayoría de los problemas en las liberaciones oficiales son reportados en pocos dias e incluso en horas, use por favor solo CVS para informar de fallos. Esto incluye los paquetes binarios de MPlayer. Instrucciones para el CVS pueden encontrarse al final de esta página o en el README. Si esto no le ayuda diríjase al resto de la documentación. Si su problema no es conocido o no se puede solucionar siguiendo nuestras instrucciones, entonces informe por favor del error.

Por favor, no envíe informes de errores de manera privada a desarrolladores individuales. Esto es trabajo en común y puede haber más gente interesada en él. Algunas veces otros usuarios han experimentado los mismos problemas y saben como solucionar el problema incluso aun siendo un error en el código de MPlayer.

Por favor, describa su problema con tanto detalle como sea posible. Haga un pequeño trabajo de detective para arrinconar las circunstancias bajo las que el problema ocurre. ¿El error solo ocurre en determinadas situaciones? ¿Es específico de cierto tipo de archivos o con archivos concretos? ¿Ocurre con un codec específico o es independiente del codec? ¿Puede reproducirse con todos los controladores de salida? Cuanta más información nos proporcione mejor podremos actuar para arreglar su problema. Por favor, no olvide también incluir la información valiosa que se indica más abajo, en caso contrario será más dificil diagnosticar el problema correctamente.

Una guía excelente y bien escrita para hacer preguntas en foros públicos es Cómo hacer preguntas inteligentes por Eric S. Raymond. Hay otra llamada Cómo informar de errores de manera efectiva por Simon Tatham. Si sigue los pasos de estas guías deberás ser capaz de obtener ayuda. Pero por favor entienda que la lista de correo la siguen voluntarios en su tiempo libre. Estamos muy ocupados y no podemos garantizar que tengamos una solución para su problema o ni tan siquiera una respuesta.

A.3. Dónde informar de los errores

Suscríbase a la lista de correo mplayer-users: http://mplayerhq.hu/mailman/listinfo/mplayer-users y envíe su informe de error a: mailto:mplayer-users@mplayerhq.hu

El idioma de esta lista es Inglés. Por favor siga las Netiquette Guidelines estandar y no envíe correo en HTML a ninguna de nuestras listas de correo. Si lo hace puede ser ignorado o expulsado. Si no sabe qué es el correo HTML o por qué es el demonio, lea este buen documento. Explica todos los detalles y las instrucciones para desactivar el correo HTML. Note también que no debe hacer CC (carbon-copy) a personas individuales no es buena idea si quiere recibir una respuesta.

A.4. De qué informar

Necesita incluir un historial, archivos de configuración o muestras en su informe de error. Si alguno de estos es muy grande entonces es mejor subirlos a nuestro servidor FTP en un formato comprimido (gzip y bzip2 preferentemente) e incluir solo la ruta al nombre del archivo en su informe de error. Nuestras listas de correo tienen un límite en el tamaño del mensaje de 80k, si tiene algo más grande entonces deberá comprimirlo y subirlo.

A.4.1. Información del Sistema

  • Si distribución de Linux o sistema operativo y versión p.e.:

    • Red Hat 7.1

    • Slackware 7.0 + devel packs from 7.1 ...

  • versión del kernel:

    uname -a

  • versión de libc:

    ls -l /lib/libc[.-]*

  • versiones de gcc y ld:

    gcc -v
    ld -v
    

  • versión de binutils:

    as --version
    

  • Si tiene problemas con el modo de pantalla completa:

    • Administrador de ventanas, tipo y versión

  • Si tiene problemas con XVIDIX:

    • Profundidad de color de las X:

      xdpyinfo | grep "depth of root"

  • Si solo el GUI está fallando:

    • versión de GTK

    • versión de GLIB

    • versión de libpng

    • situación del GUI cuando ocurre el error

A.4.2. Hardware y controladores

  • Información de la CPU (esto funciona solo en Linux):

    cat /proc/cpuinfo

  • Fabricante de la tarjeta gráfica y modelo, p.e.:

    • ASUS V3800U chip: nVidia TNT2 Ultra pro 32MB SDRAM

    • Matrox G400 DH 32MB SGRAM

  • Tipo y versión del controlador de video, p.e.:

    • X built-in driver

    • nVidia 0.9.623

    • Utah-GLX CVS 2001-02-17

    • DRI from X 4.0.3

  • Tipo y controlador de la tarjeta de sonido, p.e.:

    • Creative SBLive! Gold con controlador OSS de oss.creative.com

    • Creative SB16 con controlador del kernel OSS

    • GUS PnP con emulación ALSA OSS

  • En caso de duda incluya la salida de lspci -vv en sistemas Linux.

A.4.3. Problemas de configuración

Si obtiene errores cuando ejecuta ./configure, o la autodetección o algo falla, lea config.log. Puede encontrar la respuesta ahí, por ejemplo múltiples versiones de la misma biblioteca mezcladas en su sistema, o ha olvidado instalar los paquetes de desarrollo (los que tienen el sufijo -dev). Si cree que puede ser un error, incluya config.log en su informe.

A.4.4. Problemas de compilación

Por favor incluya los siguientes archivos:

  • config.h

  • config.mak

Solo si falla la compilación bajo uno de los siguientes directorios, incluya estos archivos:

  • Gui/config.mak

  • libvo/config.mak

  • libao2/config.mak

A.4.5. Problemas de reproducción

Por favor incluya la salida de MPlayer con nivel de prolijo 1, pero recuerde no truncar la salida cuando pegue esto en su correo. Los desarrolladores necesitan todos los mensajes para diagnosticar correctamente el problema. Puede dirigir la salida a un archivo así:

mplayer -v opciones nombre-archivo > mplayer.log 2>&1

Si su problema es específico con uno o más archivos, suba las víctimas a: ftp://mplayerhq.hu/incoming/

Suba también un pequeño archivo de texto que tenga la misma base en el nombre de su archivo con una extensión .txt. Describa el problema que tiene con el archivo en particular e incluya su dirección de correo electrónico así como la salida de MPlayer con nivel de prolijo 1. Usualmente los primeros 1-5 MB del archivo son suficientes para reproducir el problema, pero para asegurarse haga:

dd if=su-archivo of=archivo-pequeño bs=1024k count=5

Esto coje los primeros cinco megabytes de 'su-archivo' y los escribe a 'archivo-pequeño. Entonces pruebe de nuevo con este archivo pequeño y si el error sigue apareciendo su muestra será suficiente para nosotros. Por favor, ¡nunca envíe estos archivos por correo! Súbalos, y envío solo la ruta/nombre del archivo en nuestro servidor FTP. Si el archivo está disponible en la red, entonces enviar la URL exacta es suficiente.

A.4.6. Cuelgues

Debería ejecutar MPlayer dentro de gdb y enviarnos la salida completa o si tiene un volcado core de cuelgue puede extraer información útil desde el archivo Core. Aquí tiene cómo:

A.4.6.1. Cómo conservar información acerca de un error reproducible

Recompile MPlayer con debug de código activado:

./configure --enable-debug=3
make

y luego ejecute MPlayer dentro de gdb usando:

gdb ./mplayer

Ahora ya está dentro de gdb. Escriba:

run -v opciones-para-mplayer
nombre-archivo

y reproduzca el error. Tan pronto como muera, gdb le devuelve a la línea de órdenes donde entró

bt
disass $pc-32 $pc+32
info all-registers

A.4.6.2. Cómo extraer información significativa desde un volcado core

Cree el siguiente archivo de órdenes:

bt
disass $pc-32 $pc+32
info all-registers

y después ejecute ésta orden:

gdb mplayer --core=core -batch --command=command_file > mplayer.bug

A.5. Yo sé lo que estoy haciendo...

Si ha creado un informe de error correcto siguiendo los pasos anteriores y sabe que es un error en MPlayer, no un problema del compilador o un archivo en mal estado, ha leido ya la documentación y no puede encontrar una solución, sus controladores de sonido están en buen estado, entonces puede que quiera suscribirse a la lista de correo mplayer-advusers y enviar su informe de error ahí para obtener una respuesta más rápida y mejor.

Por favor tenga en cuenta que si plantea preguntas de novato o preguntas que ya han sido respondidas en el manual, entonces será ignorado o amenazado en lugar de obtener la respuesta apropiada. No nos amenaze a nosotros y suscríbase a -advusers solo si realmente sabe lo que está haciendo y se siente un usuario avanzado de MPlayer o un desarrollador. Si usted tiene este criterio no debería serle dificil encontrar cómo suscribirse a esta lista...

Apéndice B. Formato del skin de MPlayer

El propósito de este documento es describir el formato de los skin de MPlayer. La información contenida aquí puede ser errónea, porque

  1. No soy yo quien ha escrito el GUI.

  2. El GUI no está terminado.

  3. Puedo equivocarme.

No se sorprenda si algo no funciona como se describe aquí.

Gracias a Zoltán Ponekker por su ayuda.

András Mohari <mayday@freemail.hu>

B.1. Visión general

Realmente no hay nada que hacer con el formato del skin, pero debe saber que MPlaner no tiene un skin integrado, por eso al menos un skin debe estar instalado para poder usar el GUI.

B.1.1. Directorios

Los directorios donde se buscan los skins son (en orden):

  1. $(DATADIR)/skins/

  2. $(PREFIX)/share/mplayer/skins/

  3. ~/.mplayer/skins/

Tenga en cuenta que la primera ruta puede variar de acuerdo a cómo fue configurado MPlayer (vea los argumentos --prefix y --datadir del script configure).

Todo skin es instalado en su propio directorio bajo uno de los directorios listados más arriba, por ejemplo:

$(PREFIX)/share/mplayer/skins/default/

B.1.2. Formato de las imágenes

Las imágenes deben ser PNGs a color verdadero (24 or 32 bpp).

En la ventana principal y en la barra de reproducción (ver más abajo) puede usar imágenes con `transparencia': Regiones rellenas con color #FF00FF (magenta) son completamente transparentes cuando se ven con MPlayer. Esto significa que puede incluso tener ventanas con formas si su servidor X tiene la extensión XShape.

B.1.3. Componentes del skin

Los skins son formatos bastante libres (no como otros skins de formato fijo de Winamp/XMMS, por ejemplo), de manera que pueda crear algo grande.

Actualmente hay tres ventanas que decorar: la ventana principal, la subventana, la barra de reproducción, y el skin del menú (que puede activarse con clic derecho).

  • La ventana principal y/o la barra de reproducción es donde puede controlar MPlayer. El fondo de la ventana es una imagen. Varios objetos pueden (y deben) ser colocados en la ventana: botones, medidores (desplazables) y etiquetas. Para cada objeto, debe especificar su posición y tamaño.

    Un botón tiene tres estados (pulsado, soltado, desactivado), por eso la imagen debe estar dividida en tres partes verticalmente. Vea el objeto botón para detalles.

    Un medidor (usado principalmente para la barra de búsqueda y el control de volumen/balance) puede tener cualquier número de fases dividiendo su imagen en diferentes partes unas debajo de otras. Vea hpotmeter y potmeter para detalles.

    Etiquetas son un poco especiales: Los caractere necesarios para pintarlas se toman de un archivo de imagen, y los caracteres en la imagen son descritos por un archivo de descriptión de tipografía. Lo último es un archivo de texto plano que especifica la posición x,y y el tamaño de cada carater en la imagen (el archivo de imagen y su archivo de descripción de tipografía forman juntos un tipo de letra). Vea dlabel y slabel para detalles.

    Nota

    Todas las imágenes pueden tener transparencia completa como se describe en la sección que habla de formatos de imagen. Si el servidor X no soporta la extensión XShape, las partes marcadas como transparentes se verán negras. Si le gusta usar esta característica, el ancho del fondo de la imagen de la ventana principal debe ser divisible por 8.

  • La subventana es donde aparece la película. Puede mostrar una imagen específica si no hay película cargada (es bastante aburrido tener una ventana vacía :-)) Nota: la transparencia no está permitida aquí.

  • El skin del menú es una forma de controlar MPlayer con entradas de menú. Dos imágenes son requeridas para el menú: una es la imagen base que muestra el menú en su estado normal, la otra es usada para mostrar las entradas seleccionadas. Cuando hace salir el menú, la entrada seleccionada actualmente es copiada desde la segunda imagen sobre la entrada de menú que hay bajo el puntero del ratón (la segunda imagen nunca se muestra entera).

    Una entrada de menú se define por su posición y tamaño en la imagen (vea la sección que habla del skin del menú para detalles).

Hay algo importante que aún no he mencionado: Para que los botones, medidores deposición y entradas de menú funcionen, MPlayer tiene que saber qué hacer cuando se hace clic en ellos. Esto se hace con mensajes (eventos). Para estos objetos debe definir los mensajes que se generan cuando se hace clic en ellos.

B.1.4. Archivos

Necesita los siguientes archivos para construir un skin:

  • El archivo de configuración llamado skin le dice a MPlayer cómo poner las diferentes partes del skin juntas y qué debe hacer cuando se hace clic en alguna parte de la ventana.

  • La imagen de fondo para la ventana principal

  • Imágenes para los objetos en la ventana principal (incluyendo uno o más archivos de descripción de tipografía necesarios para dibujar las etiquetas).

  • La imagen que se mostrará en la subventana (opcional).

  • Dos imágenes para el skin del menú (son necesarias solo si quiere crear un menú).

Con la excepción del archivo de configuración del skin, puede nombrar los otros archivos como quiera (pero note que los archivos de descripción de tipografía deben tener extensión .fnt).

B.2. El archivo de skin

Como se menciona más arriba, este es el archivo de configuración del skin. Su orientación en lineal; las líneas que son comentarios comienzan por un caracter ';' al principio de la línea (solo espacios y tabuladores están permitidos antes del ';').

El archivo está dividido en secciones. Cada sección describe el skin para una aplicación y tiene la siguiente forma:

section = nombre de la sección
.
.
.
end

Actualmente solo hay una aplicación, por lo que necesita una sola sección: su nombre es movieplayer.

Dentro de esta sección cada ventana está descrita por un bloque de la siguiente forma:

window = nombre de la ventana
.
.
.
end

donde nombre de la ventana puede ser una de las siguientes cadenas de texto:

  • main - para la ventana principal

  • sub - para la subventana

  • menu - para el skin del menú

  • playbar - barra de reproducción

(Los bloques sub y menú son opcionales - no necesita crear un menú o decorar la subventana.)

Dentro de un bloque de ventana, puede definir cada objeto para la ventana con una línea del siguiente modo:

objeto = parámetro

Donde objeto es una cadena que identifica el tipo de objeto GUI, parámetro es un valor numérico o textual (o una lista de valores separados por comas).

Poniendo todo lo de arriba jutno, el archivo entero quedará algo similar a esto:

section = movieplayer
  window = main
  ; ... objetos para la ventana principal ...
  end

  window = sub
  ; ... objetos para la subventana ...
  end

  window = menu
  ; ... objetos para el menú ...
  end

  window = playbar
  ; ... objetos para la barra de reproducción ...
  end
end

El nombre de un archivo de imagen se debe dar sin los directorios - las imágenes se buscan en el directorio skins. También puede (pero necesita ser root) especificar la extensión del archivo. Si el archivo no existe, MPlayer intentará cargar el archivo <filename>.<ext>, donde png y PNG son probados para <ext> (en ese orden). El primer nombre de archivo que coincida será el que se use.

Finalmente unas palabras acerca del posicionamiento. La ventana principal y la subventana pueden ser colocadas en las diferentes esquinas de la pantalla dando las coordenadas X e Y . 0 es arriba o izquierda, -1 es el centro y -2 es a la derecha o abajo, como se muestra en la ilustracion:

(0, 0)----(-1, 0)----(-2, 0)
  |          |          |
  |          |          |
(0,-1)----(-1,-1)----(-2,-1)
  |          |          |
  |          |          |
(0,-2)----(-1,-2)----(-2,-2)

Aquí tiene un ejemplo para clarificar esto. Suponga que tiene una imagen llamada main.png que usa para la ventana principal:

base = main, -1, -1

MPlayer intentará cargar los archivos main, main.png, main.PNG.

B.2.1. Ventana principal y barra de reproducción

Más abajo tiene la lista de entradas que pueden usarse en los bloques 'window = main' ... 'end', y 'window = playbar' ... 'end'.

base = image, X, Y

Le permite especificar la imagen de fondo para usar en la ventana principal. La ventana aparecerá en la posición X,Y dada de la pantalla. La ventana tendrá el tamaño de la imagen.

Nota

Estas coordenadas no funcionan actualmente para la ventana de reproducción.

Aviso

Las regiones transparentes en la imagen (coloreadas con #FF00FF) aparecen en negro en servidores X sin la extensión XShape. El ancho de la imagen debe ser divisible por 8.

button = imagen, X, Y, ancho, alto, mensaje

Coloca un botón de tamaño ancho * alto en la posición X,Y. El mensaje especificado es generado cuando se hace clic en el botón. La imagen dada en imagen debe tener tres partes una debajo de otra (de acuerdo con los posibles estados del botón), como esto:

+--------------+
|  pulsado     |
+--------------+
|  soltado     |
+--------------+
|  desactivado |
+--------------+
decoration = enable|disable

Activa o desactiva la decoración del administrador de ventanas para la ventana principal. Por defecto toma el valor disable.

Nota

Esto no funciona para la ventana de reproducción, no lo necesita.

hpotmeter = botón, bancho, balto, fases, numfases, defecto, X, Y, ancho, alto, mensaje

vpotmeter = botón, bancho, balto, fases, numfases, defecto, X, Y, ancho, alto, mensaje

Coloca un medidor horizontal (hpotmeter) o vertical (vpotmeter) de tamaño ancho * alto en la posición X,Y. La imagen puede ser dividida en diferentes partes para las diferentes fases del medidor (por ejemplo, puede tener un medidor para el control del volumen que vaya de verde a rojo mientras sus valores cambian desde el mínimo al máximo.). hpotmeter puede tener un botón que se desplaze horizontalmente. Los parámetros son:

  • botón - la imagen que se usará para el botón (debe tener tres partes una debajo de otra, como en el caso de botón)

  • bancho,balto - tamaño del botón

  • fases - la imagen que se usará para las diferentes fases del medidor horizontal. Un valor especial NULL puede usarse si no desea una imagen. La imagen debe estar dividida en numfasespartes verticalmente como esto:

    +------------+
    |  fase #1   |
    +------------+
    |  fase #2   |
    +------------+
         ...
    +------------+
    |  fase #n   |
    +------------+
    
  • numfases - número de fases almacenadas en la imagen de fases

  • defecto - valor por defecto en el medidor (en el rango de 0 a 100)

  • X,Y - posición del medidor

  • ancho,alto - ancho y alto del medidor

  • mensaje - el mensaje que se ha de generar cuando se cambia el valor del hpotmeter

potmeter = fases, numfases, defecto, X, Y, ancho, alto, mensaje

Un hpotmeter sin un botón. (Creo que está hecho para hacer una especie de botón que gire sobre sí mismo, pero reacciona a arrastre horizontal solamente). Para la descripción de los parámetros vea hpotmeter. fases puede ser NULL, pero es poco útil, porque no le permite ver donde está establecido el valor del potmeter.

font = fontfile, fontid

Define una tipografía. fontfile es el nombre del archivo de descripción de la tipografía con extensión .fnt (no especifique la extensión aquí). fontid es usado para referirse a la tipografía (vea dlabel y slabel). Pueden definirse hasta 25 tipografías.

slabel = X, Y, fontid, "text"

Coloca una etiqueta estática en la posición X,Y. text se muestra usando la tipografía identificada con fontid. El texto es una cadena de texto en crudo (variables como $x no funcionarán) que debe ser encerrada entre comillas dobles (el caracter " no puede ser parte del texto). La etiqueta es mostrada usando la tipografía identificada por fontid.

dlabel = X, Y, width, align, fontid, "text"

Coloca una etiqueta dinámica en la posición X,Y. La etiqueta se llama dinámica porque su texto es refrescado periódicamente. La longitud máxima de la etiqueta viene dada por width (su altura es la altura de un caracter). Si el texto que ha de ser mostrado es más ancho que esta, será desplazado, si no será alineado dentro del espacio especificado por el valor del parámetro align: 0 es para derecha, 1 para centrado, 2 para izquierda.

El texto que ha de ser mostrado viene dado por text: Debe ser escrito entre comillas dobles (por eso el caracter " no puede ser parte del texto). La etiqueta es mostrada usando la tipografía identificada por fontid. Puede usar las siguientes variables en el texto:

VariableSignificado
$1tiempo de reproducción en formato hh:mm:ss
$2tiempo de reproducción en formato mmmm:ss
$3tiempo de reproducción en formato hh (horas)
$4tiempo de reproducción en formatomm (minutos)
$5tiempo de reproducción en formato ss (segundos)
$6longitud de película en formato hh:mm:ss
$7longitud de película en formato mmmm:ss
$8tiempo de reproducción en formato h:mm:ss
$vvolumen en formato xxx.xx%
$Vvolumen en formato xxx.xx
$bbalance en formato xxx.xx%
$Bbalance en formato xxx.xx
$$el caracter $
$aun caracter de acuerdo con el tipo de audio (ninguno: n, mono: m, estéreo: t)
$tnúmero de pista (en lista de reproducción)
$onombre del archivo
$fnombre del archivo en minúsculas
$Fnombre del archivo en mayúsculas
$Tun caracter en función del tipo de flujo (archivo: f, Video CD: v, DVD: d, URL: u)
$pel caracter p (si una película está siendo mostrada y la tipografía tiene el caracter p
$sel caracter s (si la película ha sido detenida y la tipografía tiene el caracter s
$eel caracter e (si se ha pausado la reproducción y la tipografía tiene el caracter e
$xancho de la película
$yalto de la película
$Cnombre del codec usado

Nota

Las variables $a, $T, $p, $s y $e devuelven caracteres que deben mostrarse como símbolos especiales (por ejemplo, e es para el símbolo de la pausa que normalmente es algo parecido a ||). Debe tener una tipografía para caracteres normales y una diferente para los símbolos. Vea la sección acerca de símbolos para más información.

B.2.2. Subventana

Las siguientes entradas pueden ser usadas en el bloque 'window = sub' . . . 'end'.

base = image, X, Y, width, height

La imagen que se mostrará en la ventana. La ventana aparecerá en la posición X,Y dada de la pantalla (0,0 es la esquina arriba a la izquierda). Puede especificar -1 para el centro y -2 para el lado derecho (X) y abajo (Y). La ventana será tan grande como sea la imagen. width y height definen el tamaño de la ventana; son opcionales (si no se especifican, la ventana tendrá el mismo tamaño que la imagen).

background = R, G, B

Le permite especificar el color de fondo. Es útil si la imagen es más pequeña que la ventana. R, G y B especifican los valores de las componentes de color para rojo, verde y azul (cada uno ha de tener un valor decimal de 0 a 255).

B.2.3. Menú del skin

Como se mencionó anteriormente, el menú es mostrado usando dos imágenes. Las entradas normales para el menú se toman de la imagen especificada por el objeto base, mientras que la entrada que actualmente esté seleccionada es tomada desde la imagen especificada por el objeto selected. Debe definir la posición y el tamaño de cada entrada de menú a través del objeto de menú.

Las siguientes entradas pueden usarse en el bloque de 'window = menu'. . .'end'.

base = image

La imagen para las entradas normales del menú.

selected = image

La imagen mostrando el menú con todas las entradas seleccionadas.

menu = X, Y, width, height, message

Define la posición X,Y y el tamaño de una entrada de menú en la imagen. message es el mensaje que ha de generarse cuando el ratón del botón es soltado sobre la entrada.

B.3. Tipografías

Como se mencionó en la sección acerca de las partes de un skin, una tipografía viene definida por una imagen y un archivo de descripción. Puede colocar caracteres en cualquier parte de la imagen, pero ha de asegurarse de que su posición y tamaño vienen dados en el archivo de descripción de manera exacta.

El archivo de descripción de la tipografía (con extensión .fnt) puede tener líneas de comentarios que empiecen por ';'. El archivo debe tener una línea en la forma

image = image

Donde image es el nombre del archivo de imagen que se usará para la tipografía (puede no especificar la extensión).

"char" = X, Y, width, height

Aquí X e Y especifican la posición del caracter char en la imagen (0,0 es la esquina superior izquierda). width y height son las dimensiones del caracter en pixels.

Este ejemplo define los caracteres A, B, C usando font.png.

; Puede ser "font" en lugar de "font.png".
image = font.png

; Tres caracteres son suficientes para el propósito de esta demostración :-)
"A" =  0,0, 7,13
"B" =  7,0, 7,13
"C" = 14,0, 7,13

B.3.1. Símbolos

Algunos caracteres tienen significado especial cuando son devueltos por algunas de las variables usadas en dlabel. Estos caracteres se deben mostrar como símbolos para que parezca un bonito logotipo de DVD en lugar del caracter 'd' para un flujo de DVD por ejemplo.

La siguiente tabla lista todos los caracters que pueden ser usados para mostrar símbolos (y que por lo tanto requieren una tipografía diferente).

CaracterSímbolo
pplay
sstop
epausa
nno sound
mmono sound
tstereo sound
fstream es un archivo
vstream es un Video CD
dstream es un DVD
ustream es una URL

B.4. Mensajes GUI

Son los mensajes que pueden ser generados por los botones, potmetros y entradas de menú.

Nota

Algunos de los mensajes pueden no funcionar como se espera (o ni funcionar). Como ya sabe, el GUI está bajo desarrollo.

Control de reproducción:

evNext

Salta a la siguiente pista en la lista de reproducción.

evPause

Forma un cambio junto con evPlaySwitchToPause. Puede ser usado para tener un botón normal de play/pausa. Ambos mensajes deben ser asignados a botones que se muestren exactamente en la misma posición en la ventana. Este mensaje pausa la reproducción y la imagen para el botón evPlaySwitchToPause es mostrada (para indicar que el botón puede ser pulsado de nuevo para continuar la reproducción).

evPlay

Inicia la reproducción.

evPlaySwitchToPause

Lo contrario a evPauseSwitchToPlay. Este mensaje inicia la reproducción y la imagen para el botón evPauseSwitchToPlay es mostrada (para indicar que el botón puede ser pulsado de nuevo para volver a pausar la reproducción).

evPrev

Salta a la pista previa en la lista de reproducción.

evStop

Detiene la reproducción.

Búsqueda:

evBackward10sec

Busca 10 segundos hacia atrás.

evBackward1min

Busca 1 minuto hacia atrás.

evBackward10min

Busca 10 minutos hacia atrás.

evForward10sec

Busca 10 segundos hacia adelante.

evForward1min

Busca 1 minuto hacia adelante.

evForward10min

Busca 10 minutos hacia adelante.

evSetMoviePosition

Busca la posición (puede ser usado por un potmetro; el valor relativo (0-100%) del potmetro será el que se use).

Control de video:

evDoubleSize

Establece doble tamaño para la ventana de la película.

evFullScreen

Cambia el modo pantalla completa activado/desactivado.

evNormalSize

Establece la ventana de video a tu tamaño normal

Control de audio:

evDecAudioBufDelay

Decrementa el retardo en el buffer de audio.

evDecBalance

Decrementa el balance.

evDecVolume

Decrementa el volumen.

evIncAudioBufDelay

Incrementa el retardo en el buffer de audio.

evIncBalance

Incrementa el balance.

evIncVolume

Incrementa el volumen.

evMute

Silencia/activa el sonido.

evSetBalance

Establece el balance (puede ser usado por un potmetro; el valor relativo (0-100%) del potmetro será el que se use).

evSetVolume

Establece el volumen (puede ser usado por un potmetro; el valor relativo (0-100%) del potmetro será el que se use).

Miscelánea:

evAbout

Abre la ventana de acerca de.

evDropSubtitle

Desactiva el uso de subtítulos actual.

evEqualizer

Activa/desactiva el ecualizador.

evExit

Sale del programa.

evIconify

Iconifica la ventana.

evLoad

Carga un archivo (abriendo una ventana del navegador de archivos, para que pueda elegir uno).

evLoadPlay

Hace lo mismo que evLoad, pero inicia automáticamente la reproducción después de cargar el archivo.

evLoadSubtitle

Carga un archivo de subtítulos (con el selector de archivos)

evLoadAudioFile

Carga un archivo de audio (con el selector de archivos)

evNone

Mensaje vacío, no tiene efecto (excepto quizá en las versiones CVS :-)).

evPlaylist

Abre/cierra la ventana de lista de reproducción.

evPlayDVD

Intenta abrir el disco en la unidad de DVD-ROM dada.

evPlayVCD

Intenta abrir el disco en la unidad de CD-ROM dada.

evPreferences

Abre la ventana de preferencias.

evSetAspect

Establece el aspecto de la imagen mostrada.

evSetURL

Muestra la ventana de diálogo para URL.

evSkinBrowser

Abre la ventana del navegador de skins.