3 puntos por GN⁺ 2024-08-18 | 1 comentarios | Compartir por WhatsApp
  • mpv es un reproductor multimedia libre y open source centrado en la línea de comandos, compatible con varios formatos de archivos multimedia, códecs de audio y video, y formatos de subtítulos
  • Gracias a sus potentes funciones de scripting y a una colección de scripts de usuarios, es fácil ampliar el reproductor base según tus necesidades
  • Mantiene un diseño minimalista y no cuenta con una GUI separada, pero ofrece un pequeño controlador en pantalla para realizar operaciones básicas sobre el video
  • Con salida de video de alta calidad basada en OpenGL, Vulkan y D3D11, además de soporte para APIs de decodificación por hardware, permite ajustar la calidad de reproducción en distintos entornos
  • Cuenta con una API en C diseñada desde el inicio para la integración como biblioteca, lo que permite incorporar mpv dentro de otras aplicaciones

Reproductor multimedia centrado en la línea de comandos

  • mpv es un reproductor multimedia libre que se usa desde la línea de comandos
  • Es compatible con diversos formatos de archivos multimedia, códecs de audio y video, y formatos de subtítulos

Scripting y formas de control

  • Sus funciones de scripting permiten ampliar ampliamente el comportamiento del reproductor
  • Apunta al minimalismo, por lo que no ofrece una GUI separada
  • Para los controles básicos se puede usar un pequeño controlador en pantalla que aparece sobre el video

Salida de video y decodificación

  • Ofrece salida de video basada en OpenGL, Vulkan y D3D11
  • También incluye funciones de reproducción para entusiastas del video
    • Escalado de video basado en algoritmos de alta calidad
    • Gestión de color
    • Temporización de fotogramas
    • Interpolación
    • HDR
  • En la mayoría de las plataformas se pueden aprovechar varias APIs de decodificación por hardware
  • La decodificación por hardware puede activarse cuando sea necesario durante la ejecución

Integración en aplicaciones y estado del desarrollo

  • mpv diseñó desde el inicio una API en C para facilitar su integración en otras aplicaciones
  • El proyecto está en desarrollo activo, con foco en refactorización y limpieza del código, además de la incorporación de funciones
  • Las solicitudes de funciones o parches pueden enviarse mediante issues de GitHub de mpv

Recursos relacionados

1 comentarios

 
GN⁺ 2024-08-18
Opiniones de Hacker News
  • mpv es un excelente reproductor multimedia. Es bastante minimalista, tiene buen rendimiento y hace bien lo que tiene que hacer.
    También hay un commit genial en el que el autor descarga su enojo contra el locale: https://github.com/mpv-player/mpv/commit/1e70e82baa9193f6f02... Vale la pena leerlo para reírse un rato.

    • Puede sonar raro, pero poder evitar este tipo de problemas quizá sea una de las mayores mejoras de productividad que aportan lenguajes nuevos como Go, Rust y Swift. Los ecosistemas nuevos tienen la oportunidad de rehacer sus bibliotecas estándar y deshacerse de decisiones heredadas terribles de antes de que se supiera más, como los locales o UTF-16.
      Las bibliotecas estándar de varios lenguajes como Zig, Go y Rust están muy por delante de la biblioteca estándar de C o de las API POSIX. Solo eso ya es motivo suficiente para usarlos.
    • Es un texto largo e informativo, con algunas groserías. Muy recomendable.
      Hace 25 años, Spolsky escribió un artículo llamado “everything you wanted to know about Unicode and character sets”, y también puede ser útil para quienes solo han vivido en el mundo posterior a Unicode/UTF.
    • Sobre la idea de “imagina que con errno hubieran hecho algo así” como pasa con lo roto que está el API de locales de C, en realidad hay un ejemplo donde sí ocurrió. Son las funciones de tiempo como localtime, localtime_r y tzset.
      Como dependen del locale, están en una zona cercana, pero la zona horaria también es estado global, así que en código C multihilo portable POSIX es imposible obtener la hora en otra zona horaria usando solo las API estándar.
    • “El locale de C y wchar_t son ambos legados rotos y muertos cerebralmente. Si hubiera habido alguien competente en los comités de estándares C/POSIX, hace mucho que se habrían descartado o eliminado. Después de todo, eliminaron gets(). Voy a escribir un texto largo para justificar este estallido emocional, que podría resultar ofensivo para quien no sepa del tema. Si las expresiones fuertes te incomodan, considéralo literatura religiosa.”
      Verdaderamente legendario.
    • Vale la pena tener en cuenta que el autor de ese commit ya no tiene relación con el desarrollo de mpv desde hace varios años.
  • Empecé a usarlo en Linux hace unos años y ahora lo tengo instalado en todos mis dispositivos, incluso en una tablet Android. Es perfecto. Valores predeterminados minimalistas, configuración razonable, rápido, simplemente funciona bien.
    Incluso puede reproducir de forma nativa a través de SSH, lo cual es increíble: mpv sftp://mit@nyx/home/mit/Work/merged.mp4
    Hace poco necesitaba un atajo para rotar videos; en otros reproductores no parecía ser fácil, y en mpv bastó con poner r cycle_values video-rotate "90" "180" "270" "0" en input.conf.

    • También puede reproducir videos por HTTP y soporta muchos sitios web, incluido YouTube: mpv
  • Si usas Linux, no olvides agregar hwdec=auto a mpv.conf para activar la aceleración por hardware. Funciona con AMD/Intel/NVIDIA.
    https://interfacinglinux.com/2024/01/10/hardware-acceleratio...

    • Resulta que durante años estuve viendo videos con mpv sin aceleración por hardware. Me alegra haber leído esto.
    • Yo lo uso configurado así: vo=gpu-next, gpu-api=vulkan, hwdec=vulkan, gpu-context=waylandvk
      Si Vulkan Video no funciona, se puede cambiar hwdec=vulkan por hwdec=vaapi.
    • Me pregunto por qué esto viene desactivado por defecto.
    • No sé bien por qué, pero con Fedora, probablemente con kernel 6.10 y una Vega 64, tuve muchos problemas de peor rendimiento, latencia y cortes. Cada año más o menos lo vuelvo a intentar, pero no funciona bien y termino abandonándolo otra vez.
    • Acabo de instalar mpv con pacman y probé reproducir un video 4K; el ventilador del CPU empezó a girar de inmediato y en top se veía que se estaban usando varios núcleos. Seguí bajando en este hilo de HN y me enteré de hwdec=auto.
      Como usuario de mplayer y VLC, la pregunta inmediata que me surge es: “¿qué trade-off estarán aceptando los mantenedores al no poner esto como valor predeterminado?”
  • Este proyecto tiene un linaje muy antiguo; antes se conocía como mplayer. Tiene 500 mil commits que se remontan hasta 2001, y eso contando desde después de que el repositorio CVS se convirtiera a Subversion.
    Usar streamlink junto con mpv en una Minix z100 sin ventilador con Ubuntu fue una experiencia casi perfecta para ver los Juegos Olímpicos.
    https://streamlink.github.io/
    https://www.minix.com.hk/products/z100-0db-fanless-n100-mini...

    • Es difícil decir que mplayer y mpv sean lo mismo. Es cierto que mpv fue un fork de mplayer y otros, pero mplayer sigue siendo un proyecto separado.
  • Puede sonar tonto, pero personalmente la función clave es poder mostrar varios subtítulos al mismo tiempo. Se pueden configurar fácilmente pistas, desplazamientos, posición, tamaño, etc., con unos cuantos atajos de teclado.
    Ningún servicio de streaming ofrece esto, y además ocultan activamente los idiomas de subtítulos que consideran “irrelevantes” para la ubicación del usuario. Cuesta respetar a servicios así.

    • Es una función realmente excelente. Ni siquiera me aprendí bien los atajos, y probablemente debería hacerlo, pero empezar con --sid1= y --sid2= funciona bastante bien.
      Mi pareja y yo no somos hablantes nativos de inglés, y nuestras lenguas maternas tampoco son la misma. Yo me siento bastante cómodo con el inglés, pero algunos dialectos me cuestan y, si el audio es ruidoso, a veces se me escapan palabras, así que prefiero subtítulos en inglés. A mi pareja le gustan los subtítulos en su lengua materna.
      Poder mostrar varios subtítulos nos permite a ambos tener la experiencia de visualización que queremos, a cambio de usar un poco de espacio en pantalla, y vale totalmente la pena.
    • mpv es fuerte en el manejo de subtítulos. No solo permite cambiar pistas de subtítulos y configurar su posición; también puede buscar y reproducir automáticamente archivos de subtítulos externos al reproducir un video.
      Escribí sobre esto: https://www.baeldung.com/linux/mpv-subtitles-automatic. Eso sí, me pareció una lástima que faltara documentación sobre los formatos de subtítulos soportados, y para comprobar los formatos realmente soportados tuve que mirar el código de ffmpeg.
      Además, https://subdl.com/ y https://github.com/alexanderwink/subdl son buenos recursos para buscar y descargar subtítulos desde la línea de comandos.
    • Este tipo de función es especialmente buena para aprender idiomas. Pero servicios como Amazon, aunque en realidad tengan unos 30 subtítulos, solo muestran algo como inglés y el idioma local. Y ni siquiera voy a empezar con la diferencia entre subtítulos y doblaje.
    • Ocultar idiomas de subtítulos “irrelevantes” para la ubicación podría deberse a cuestiones legales o a restricciones contractuales con los titulares de derechos del contenido o los proveedores de subtítulos.
  • mpv siempre funcionó bien y manejó fácilmente casi cualquier cosa que le tiraran.
    Puede que ahora sea distinto, pero cuando lo conocí hace unos años, lo que distinguía a este proyecto de otros reproductores era la sensación de que daba mucha importancia a la exactitud y a la reproducción fiel. Por ejemplo, algunos archivos que en VLC mostraban problemas raros, como una reproducción de color algo extraña, en mpv se reproducían perfectamente.

    • Que en VLC aparezcan problemas raros y en mpv se reproduzca todo perfectamente viene pasando desde hace mucho. Ya ocurría en la época de MPlayer, a principios de los 2000.
      Aunque no sé bien por qué. Supongo que ambos dependen en gran medida de las mismas bibliotecas para muchos códecs.
    • Considerando que VLC, en la práctica, suele reproducir cualquier archivo a prueba de balas, da gusto ver que mpv haya llegado a ese nivel.
    • Tuve problemas bastante grandes con la representación del color al reproducir contenido “HDR” en mpv.
  • mpv es excelente. Algunas recomendaciones, sin orden particular: el mpv.conf base de Seeds of Might/JySzE; uosc, una UI con muchas funciones pero aún minimalista; thumbfast, un generador rápido de miniaturas para usar con uosc u otras UI personalizadas; y SmartSkip de Eisa01, que salta openings y similares basándose en el audio.
    [1] Windows: https://gist.github.com/JySzE/db4149cad726b3b6955dca8d47a197..., macOS: https://gist.github.com/JySzE/34ee131da3974811a9469e1e3b7d4d...
    [2] https://github.com/tomasklaen/uosc
    [3] https://github.com/po5/thumbfast
    [4] https://github.com/Eisa01/mpv-scripts#smartskip

    • No quiero menospreciar el trabajo de ese plugin, pero eso es una implementación “básica” para saltar openings.
      Para encontrar de forma confiable openings o créditos finales se necesita un análisis no local. Básicamente, hay que encontrar segmentos de audio que aparezcan en común entre los episodios de una temporada o de toda la obra.
      Hice una herramienta CLI que puede hacer eso, pero la verdad es que no está “terminada” y probablemente nunca lo esté. Mi objetivo inicial era desarrollar un plugin para Jellyfin, pero luego descubrí que ya existía uno así.
      https://github.com/aksiksi/needle
  • Es el mejor reproductor multimedia que existe. Me gusta su excelente UI minimalista, el uso de aceleración por hardware y el hecho de que simplemente reproduce videos.
    Que siga siendo tan sobresaliente probablemente sea una de las razones por las que voy a piratear toda la vida. Los servicios de streaming gastan millones de dólares en sus reproductores y aun así no se acercan a este nivel.

    • YouTube parece debilitar a propósito el reproductor web para empujar a la gente a descargar la app y pasarse a Premium
  • MPV cuenta con scripts muy versátiles. Por ejemplo, puedes recortar o hacer crop del video que estás viendo[1]
    También puedes asignar a atajos funciones que no he visto en otros reproductores. A veces uso n vf toggle normalize=smoothing=100 en input.conf para normalizar el brillo y el color de la escena que estoy viendo, aunque puede no funcionar si se usa decodificación por hardware
    La rotación de video se configura así: Ctrl+r no-osd cycle-values video-rotate "90" "180" "270" "0"
    [1] <https://github.com/occivink/mpv-scripts>

    • En lo personal, uso MPV principalmente para reproducir mi biblioteca musical, que contiene sobre todo archivos FLAC, y creé un plugin[1] en JS para enviar el historial de reproducción a listenbrainz.org. Es muy simple, pero ha funcionado bien durante los últimos meses
      [1]: https://gist.github.com/madeindjs/f33225cf4d8fdc9f61e0fe3ebe...
    • mpv también tiene una sólida interfaz de scripting en Lua. Creé una herramienta en Golang y Lua para que mpv trate archivos torrent y enlaces magnet como si fueran enlaces HTTP, lo que permite hacer streaming de torrents directamente
      Algo que muchos no saben es que mpv no solo puede transmitir videos de YouTube, sino que también permite buscar en YouTube desde la CLI con mpv ytdl://ytsearch:query
      Además, puede reproducir video directamente dentro de la terminal usando ASCII, sixel y el protocolo de imágenes de kitty; de estos, el protocolo de imágenes de kitty ofrece una calidad claramente superior
  • Hasta ahora, mi función favorita de mpv es que permite aplicar shaders CRT al contenido en tiempo real. Este método primero reduce correctamente el video HD a un búfer real de 240p y luego el shader también se encarga de escalarlo a la resolución de la pantalla
    https://i.imgur.com/akmgzxX.png
    https://github.com/hhirtz/mpv-retro-shaders