3 pontos por GN⁺ 2024-08-18 | 1 comentários | Compartilhar no WhatsApp
  • mpv é um player de mídia livre e open source, centrado na linha de comando, com suporte a vários formatos de arquivos de mídia, codecs de áudio e vídeo e formatos de legendas
  • Graças aos recursos poderosos de scripting e a uma coleção de scripts de usuários, é fácil estender o player básico do jeito que você quiser
  • Mantém um design minimalista e não tem uma GUI separada, mas oferece um pequeno controlador na tela para operações básicas sobre o vídeo
  • Com saída de vídeo de alta qualidade baseada em OpenGL, Vulkan e D3D11, além de suporte a APIs de decodificação por hardware, permite ajustar a qualidade de reprodução em diversos ambientes
  • Tem uma API em C pensada desde o início para integração como biblioteca, permitindo incorporar o mpv em outros aplicativos

Player de mídia centrado na linha de comando

  • mpv é um player de mídia livre usado pela linha de comando
  • Oferece suporte a vários formatos de arquivos de mídia, codecs de áudio e vídeo e formatos de legendas

Scripting e formas de controle

  • Os recursos de scripting permitem estender amplamente o comportamento do player
  • Por seguir uma proposta minimalista, não oferece uma GUI separada
  • Para controles básicos, é possível usar um pequeno controlador na tela exibido sobre o vídeo

Saída de vídeo e decodificação

  • Oferece saída de vídeo baseada em OpenGL, Vulkan e D3D11
  • Também inclui recursos de reprodução para entusiastas de vídeo
    • Escalonamento de vídeo baseado em algoritmos de alta qualidade
    • Gerenciamento de cores
    • Temporização de quadros
    • Interpolação
    • HDR
  • Na maioria das plataformas, é possível usar várias APIs de decodificação por hardware
  • A decodificação por hardware pode ser ativada quando necessário durante a execução

Integração com aplicativos e status de desenvolvimento

  • O mpv projetou desde o início uma API em C para facilitar a integração com outros aplicativos
  • O projeto está em desenvolvimento ativo, com foco em refatoração e limpeza de código, além da adição de recursos
  • Solicitações de recursos ou patches podem ser enviados por meio das issues do mpv no GitHub

Recursos relacionados

1 comentários

 
GN⁺ 2024-08-18
Comentários do Hacker News
  • mpv é um excelente player de mídia. Bastante minimalista, com bom desempenho, e faz exatamente o que precisa fazer
    Também há um ótimo commit em que o autor desabafa sua raiva sobre locale: https://github.com/mpv-player/mpv/commit/1e70e82baa9193f6f02... vale a leitura para dar umas risadas

    • Pode soar estranho, mas a possibilidade de evitar esse tipo de problema pode ser um dos maiores ganhos de produtividade que linguagens mais novas como Go, Rust e Swift oferecem. Novos ecossistemas têm a chance de recriar a biblioteca padrão e se livrar de escolhas de legado terríveis, feitas antes de sabermos mais, como locale e UTF-16
      As bibliotecas padrão de várias linguagens como Zig, Go e Rust estão muito à frente da biblioteca padrão de C ou das APIs POSIX. Só isso já é motivo suficiente para usá-las
    • É um texto longo e informativo, com alguns palavrões também. Recomendo fortemente
      Há 25 anos, Spolsky escreveu “everything you wanted to know about Unicode and character sets”, e isso pode ser útil até para quem só viveu no mundo pós-Unicode/UTF
    • Em resposta ao comentário para imaginar se tivessem feito algo parecido com errno, como aconteceu com a API de locale de C, existe de fato um caso assim. São as funções de tempo como localtime, localtime_r e tzset
      Como dependem de locale, ficam numa área vizinha a locale, mas fuso horário também é estado global, então em código C multithread portável em POSIX é impossível obter a hora de um fuso diferente usando apenas a API padrão
    • “Locale de C e wchar_t são ambos legados quebrados em estado de morte cerebral. Se houvesse pessoas competentes no comitê de padronização C/POSIX, eles teriam sido descontinuados ou removidos há muito tempo. Não removeram gets()? Vou escrever um texto longo para justificar este surto emocional que pode soar ofensivo para quem não sabe do assunto. Se linguagem forte te incomoda, pense nisto como um texto religioso.”
      É realmente lendário
    • Vale notar que o autor desse commit não tem relação com o desenvolvimento do mpv há alguns anos
  • Comecei a usar no Linux há alguns anos, e agora está instalado em todos os meus dispositivos, até no tablet Android. Perfeito. Padrões minimalistas, configurações sensatas, rápido, simplesmente funciona
    Ele até consegue reproduzir nativamente via SSH, o que é incrível: mpv sftp://mit@nyx/home/mit/Work/merged.mp4
    Recentemente precisei de um atalho para girar vídeo; em outros players isso não parecia fácil, e no mpv bastou colocar r cycle_values video-rotate "90" "180" "270" "0" no input.conf

    • Também pode reproduzir vídeos por HTTP e suporta muitos sites, incluindo YouTube: mpv
  • Se você usa Linux, não pode esquecer de adicionar hwdec=auto ao mpv.conf para ativar a aceleração por hardware. Funciona em AMD/Intel/NVIDIA
    https://interfacinglinux.com/2024/01/10/hardware-acceleratio...

    • Agora percebi que passei anos vendo vídeos no mpv sem aceleração por hardware. Ainda bem que li isso
    • Eu configuro assim: vo=gpu-next, gpu-api=vulkan, hwdec=vulkan, gpu-context=waylandvk
      Se o vídeo via Vulkan não funcionar, dá para trocar hwdec=vulkan por hwdec=vaapi
    • Fico me perguntando por que isso vem desativado por padrão
    • Não sei exatamente por quê, mas no Fedora, talvez com a combinação kernel 6.10 e Vega 64, o desempenho ficava pior e havia muito atraso e travamento. Tento de novo mais ou menos uma vez por ano, mas nunca dá muito certo, então acabo desistindo de novo
    • Acabei de instalar o mpv com pacman e testar um vídeo em 4K; o cooler da CPU começou a girar na hora, e no top dava para ver vários núcleos sendo usados. Continuei rolando este post do HN e descobri hwdec=auto
      Vindo do mplayer e do VLC, a pergunta imediata é: que trade-off os mantenedores estão tentando aceitar ao não tornar isso o padrão?
  • Este projeto tem uma linhagem muito antiga; antigamente era conhecido como mplayer. Há nada menos que 500 mil commits remontando a 2001, e isso contando só depois que o repositório CVS foi convertido para Subversion
    Usando streamlink com mpv em um Minix z100 fanless rodando Ubuntu, ficou quase perfeito para assistir às Olimpíadas
    https://streamlink.github.io/
    https://www.minix.com.hk/products/z100-0db-fanless-n100-mini...

    • Não dá para dizer que mplayer e mpv são a mesma coisa. É verdade que o mpv foi um fork de mplayer e outros, mas mplayer continua sendo um projeto separado até hoje
  • Pode soar bobo, mas, pessoalmente, a funcionalidade principal é poder exibir várias legendas ao mesmo tempo. Dá para ajustar facilmente faixa, offset, posição, tamanho etc. com alguns atalhos de teclado
    Nenhum serviço de streaming oferece isso, e eles escondem ativamente idiomas de legenda que julgam não ser “relevantes” para a localização do usuário. É difícil respeitar um serviço assim

    • É um recurso realmente excelente. Ainda não memorizei direito os atalhos e provavelmente deveria, mas iniciar com --sid1= e --sid2= já funciona bem o suficiente
      Nem eu nem minha esposa somos falantes nativos de inglês, e nossas línguas maternas também são diferentes. Eu me viro bem em inglês, mas alguns sotaques são difíceis e, se o áudio estiver barulhento, às vezes perco palavras, então prefiro legendas em inglês. Minha esposa prefere legendas na língua materna dela
      Poder mostrar várias legendas permite que ambos tenhamos a experiência de visualização que queremos, e vale totalmente a pena em troca de usar um pouco do espaço da tela
    • O mpv é forte no tratamento de legendas. Além de alternar faixas de legenda e definir sua posição, ele também pode localizar e reproduzir automaticamente arquivos de legenda externos ao tocar um vídeo
      Escrevi sobre isso aqui: https://www.baeldung.com/linux/mpv-subtitles-automatic. Só achei uma pena a documentação sobre os formatos de legenda suportados ser fraca, e tive que fuçar o código do ffmpeg para confirmar quais formatos realmente eram aceitos
      Além disso, https://subdl.com/ e https://github.com/alexanderwink/subdl são ótimos recursos para procurar e baixar legendas pela linha de comando
    • Esse tipo de recurso é excelente especialmente para aprendizado de idiomas. Mas serviços como a Amazon mostram só umas duas opções, como inglês e o idioma local, mesmo quando na prática têm umas 30 legendas disponíveis. E nem vou começar a falar da diferença entre legenda e dublagem
    • Esconder idiomas de legenda com base na localização e em “relevância” também pode ser por questões legais ou por limitações contratuais com os detentores dos direitos do conteúdo ou os fornecedores das legendas
  • O mpv sempre funcionou bem e lidou com facilidade com quase tudo que joguei nele
    Pode ser diferente hoje, mas quando tive contato com ele pela primeira vez, anos atrás, o que diferenciava o projeto de outros players era a sensação de que ele valorizava muito a correção e a reprodução precisa. Por exemplo, já houve arquivos que apresentavam problemas estranhos no VLC, como reprodução de cores meio errada, mas no mpv eram reproduzidos perfeitamente

    • Há muito tempo acontece de o VLC ter problemas estranhos e o mpv reproduzir perfeitamente. Já era assim na era do MPlayer, no começo dos anos 2000
      Só não sei bem por quê, já que imagino que ambos dependam em grande parte das mesmas bibliotecas para muitos codecs
    • Considerando que o VLC praticamente sempre foi à prova de bala para reproduzir qualquer arquivo, é bom ver que o mpv chegou a esse nível também
    • Houve problemas bem sérios de representação de cores ao reproduzir mídia “HDR” no mpv
  • O mpv é excelente. Recomendações, sem ordem específica: o mpv.conf básico do Seeds of Might/JySzE, a uosc, uma UI cheia de recursos mas ainda minimalista, o thumbfast, um gerador de miniaturas rápido para usar com uosc ou outras UIs customizadas, e o SmartSkip do Eisa01, que pula aberturas etc. com base no áudio
    [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

    • Não é para menosprezar o trabalho desse plugin, mas aquilo é uma implementação “básica” de pular abertura
      Para encontrar com confiabilidade aberturas ou créditos finais, é necessária uma análise não local. Basicamente, é preciso identificar trechos de áudio que aparecem em comum entre os episódios de uma temporada ou de uma obra inteira
      Eu criei uma ferramenta CLI que consegue fazer isso, mas, na verdade, ela não está “pronta” e provavelmente nunca estará. O objetivo inicial era desenvolver um plugin para o Jellyfin, mas depois descobri que já existia um plugin assim
      https://github.com/aksiksi/needle
  • É o melhor player de mídia que existe hoje. Gosto da UI minimalista, do uso de aceleração por hardware e do fato de que ele simplesmente reproduz vídeos
    Continuar tão bom assim provavelmente é um dos motivos pelos quais vou seguir pirateando para sempre. Os serviços de streaming gastam milhões com seus players e mesmo assim não chegam nem perto desse nível

    • O YouTube parece enfraquecer de propósito o player web para empurrar as pessoas a baixar o app e fazer upgrade para o Premium
  • O MPV tem scripts versáteis. Por exemplo, dá para cortar ou recortar o vídeo que você está assistindo[1]
    Também dá para atribuir a atalhos funções que eu nunca vi em outros players. Às vezes, para normalizar o brilho e as cores da cena que estou vendo, eu uso n vf toggle normalize=smoothing=100 no input.conf, mas isso pode não funcionar ao usar decodificação por hardware
    A rotação do vídeo é configurada assim: Ctrl+r no-osd cycle-values video-rotate "90" "180" "270" "0"
    [1] <https://github.com/occivink/mpv-scripts>

    • Pessoalmente, eu uso o MPV principalmente para tocar uma biblioteca de músicas com arquivos FLAC e criei um plugin em JS[1] para enviar meu histórico de reprodução para o listenbrainz.org. É bem simples, mas funcionou bem nos últimos meses
      [1]: https://gist.github.com/madeindjs/f33225cf4d8fdc9f61e0fe3ebe...
    • O mpv também tem uma sólida interface de scripting em Lua. Criei uma ferramenta em Golang e Lua para fazer o mpv tratar arquivos torrent e links magnet como links HTTP, e o resultado é que dá para fazer streaming de torrents diretamente
      Um ponto que muita gente não conhece é que o mpv não só consegue fazer streaming de vídeos do YouTube, como também permite pesquisar no YouTube pela CLI com mpv ytdl://ytsearch:query
      Além disso, ele também consegue reproduzir vídeo diretamente dentro do terminal usando ASCII, sixel e o protocolo de imagem do kitty, e entre eles o protocolo de imagem do kitty tem qualidade disparadamente melhor
  • Até agora, minha função favorita no mpv é poder aplicar shaders de CRT ao conteúdo em tempo real. Esse método também faz o downscale correto de vídeo HD para um buffer 240p real e depois o shader cuida do upscale de acordo com a resolução da tela
    https://i.imgur.com/akmgzxX.png
    https://github.com/hhirtz/mpv-retro-shaders