2 pontos por GN⁺ 2025-12-28 | 1 comentários | Compartilhar no WhatsApp
  • Ferramenta de CLI baseada em Node.js criada para executar comandos do ffmpeg em inglês simples, permitindo editar vídeos com frases simples sem opções complexas
  • Ao digitar comandos em formato de frase como ff convert video.mp4 to gif, ele converte automaticamente para um comando ffmpeg e executa
  • Suporta várias tarefas, como conversão de formato, compressão, corte, extração de áudio, redimensionamento, ajuste de velocidade, rotação, mesclagem e mais
  • Com a opção --dry-run, é possível visualizar antecipadamente o comando ffmpeg sem executá-lo de fato
  • Funciona rapidamente offline, sem conexão com a internet nem IA, e pode ser usado com Node.js 16 ou superior em ambientes com ffmpeg instalado

Visão geral

  • ezff é um wrapper baseado em inglês simples criado para facilitar o uso do ffmpeg
    • O usuário pode inserir comandos em linguagem natural sem precisar memorizar flags complexas do ffmpeg ou consultar o manual
    • Ex.: ff convert video.mp4 to gif → gera e executa automaticamente o comando ffmpeg
  • Requer Node.js 16 ou superior e ffmpeg instalado, podendo ser instalado via npm com npm install -g ezff

Principais recursos

  • Oferece modo de prompt interativo
    • Ao digitar apenas ff, ele pergunta em sequência o caminho do arquivo, o tipo de tarefa, o formato de saída etc.
    • Exemplo:
      ? File path: video.mp4  
      ? What do you want to do? › Convert format  
      ? Convert to: › GIF  
      
    • Depois da seleção, o comando ffmpeg é gerado e executado automaticamente
  • Também oferece modo de entrada direta de comando
    • O usuário pode descrever a tarefa desejada em uma única linha
    • Ex.:
      • ff convert video.mp4 to mp3
      • ff compress video.mp4 to 10mb
      • ff trim video.mp4 from 0:30 to 1:00
      • ff resize video.mp4 to 1280x720
      • ff speed up video.mp4 by 2x

Lista de tarefas suportadas

  • Conversão (Convert): mudança de formato (mp4 → gif, mp4 → mp3)
  • Compressão (Compress): definição de limite de tamanho do arquivo (10mb etc.)
  • Corte (Trim): extração de um trecho específico (from 0:30 to 1:00)
  • Extração de áudio (Extract audio): separa apenas o áudio do vídeo
  • Redimensionamento (Resize/Scale): alteração de resolução (1280x720, 720p)
  • Ajuste de velocidade (Speed up / Slow down): alteração da velocidade de reprodução (2x)
  • Reverso (Reverse), mudo (Mute), rotação (Rotate), espelhamento (Flip), extração de miniatura (Thumbnail), mesclagem (Merge), escala de cinza (Grayscale), redução de ruído (Denoise), estabilização de vídeo (Stabilize) e várias outras tarefas

Pré-visualização de comando e saída

  • Com a opção --dry-run, é possível exibir apenas o comando ffmpeg sem executá-lo
    • Exemplo:
      ff convert video.mp4 to gif --dry-run  
      → ffmpeg -i video.mp4 -vf fps=15,scale=480:-1:flags=lanczos -loop 0 -y video_output.gif
      
  • O arquivo resultante é salvo na mesma pasta do original com o sufixo _output (video_output.gif)

Estrutura interna de funcionamento

  • O Parser analisa a frase de entrada e extrai ação (action), arquivo (file) e opções (como size)
  • O Builder mapeia essas informações para um comando ffmpeg
  • O ffmpeg executa o comando real
  • Todo o processo é feito offline com base em pattern matching, sem IA nem chamadas de API

Instalação e ambiente

  • Requer Node.js 16 ou superior
  • O ffmpeg deve estar instalado no PATH do sistema
    • macOS: brew install ffmpeg
    • Ubuntu/Debian: sudo apt install ffmpeg
    • Windows: choco install ffmpeg
  • Disponibilizado sob a licença MIT, com Pull Requests bem-vindos

Resumo

  • ezff é uma ferramenta de CLI simples que elimina a necessidade de aprender comandos do ffmpeg
  • Permite automatizar edição de vídeo apenas com entrada em inglês simples
  • Com funcionamento offline, execução rápida e suporte a vários recursos, é útil tanto para desenvolvedores quanto para iniciantes em edição de vídeo

1 comentários

 
GN⁺ 2025-12-28
Comentários no Hacker News
  • É impressionante o quanto as pessoas se esforçam para não decorar o uso básico do ffmpeg
    Na verdade, o ffmpeg não é tão difícil assim, e o manual explica bem os conceitos principais
    Claro, há armadilhas como a configuração padrão provocar recodificação ou manter apenas um stream, mas se você só lembrar de -c copy, na maioria dos casos não terá problemas
    Esconder essas “armadilhas” pode acabar criando problemas ainda maiores. Por exemplo, “ff convert video.mkv to mp4” poderia ser resolvido com um simples remux, mas acaba recodificando tudo
    “ffmpeg extract audio from video.mp4” também sempre recodifica para mp3, o que reduz a qualidade
    Multimídia é, por natureza, uma área complexa, então esconder essa complexidade pode fazer o usuário aprender conceitos errados
    Acho que, em vez de wrappers simplificados, o certo é ensinar os conceitos corretos ao usuário com uma boa cola de referência

    • É preciso ter cuidado ao dizer “não é tão difícil assim”. O que é difícil varia de pessoa para pessoa
      Isso me lembra discussões do tipo “por que as pessoas pobres simplesmente não arrumam um emprego bom?”
      Ainda assim, entendo que o que você disse foi no sentido de motivar
    • Eu também uso ffmpeg mais ou menos uma vez por ano, então acho que só daqui a uns 350 anos vou decorar toda a sintaxe
    • Para quem usa com frequência pode ser fácil, mas para alguém como eu, que usa uma vez a cada mês ou dois, parece difícil
      O que eu quero é um script interativo. Algo que pergunte “o que você quer fazer?”, monte o comando adequado e explique o significado de cada argumento
    • Dizer “não é tão difícil assim” soa como piada. O ffmpeg tem milhares de opções
      Exemplo de lista de opções
    • Eu também costumo dizer que os conceitos de empacotamento em Python “não são tão difíceis assim”, mas os comandos do ffmpeg parecem quase uma linguagem própria
      Os problemas que você mencionou talvez pudessem ser resolvidos com relatórios de bug ou sugestões de funcionalidade
      Esconder as configurações de qualidade pode ser uma tentativa de fazer com que o usuário não precise conhecê-las
      Evitar recodificação em conversões simples de contêiner pode ser tratado com uma tabela de mapeamento
      Recentemente também senti falta desse tipo de mapeamento ao extrair áudio e adicionar miniaturas
  • Ao converter vídeo para gif, sempre uso o filtro palettegen
    Junto com um comando de exemplo, consulto este post de blog relacionado de 10 anos atrás

    • Hoje em dia, a palavra “gif” é muitas vezes usada de forma incorreta. Na prática, mp4 é mais eficiente
      Se você trocar gifs animados por mp4 em um site, eles ficam menores, mais suaves e com cores mais fiéis
    • Integrar o pngquant como filtro do ffmpeg talvez produzisse uma paleta melhor
      Nesse caso, o ffmpeg poderia chegar ao nível do gifski
    • Fico curioso se o ffmpeg adicionou suporte a paleta por quadro
      Antigamente o gifski conseguia qualidade melhor com o mesmo tamanho de arquivo por causa desse recurso
    • gifski é uma boa alternativa porque reconhece bem a paleta
    • É uma pena que esse tipo de configuração não seja o padrão
  • Gosto dessa abordagem. Queria que existisse um SO que tornasse toda a CLI do Linux mais amigável para humanos
    Em vez de comandos inconsistentes como tar e dd, imagino uma CLI uniforme baseada em linguagem natural
    Exemplo:

    zip my-folder into my-zip.tar with compression level 9  
    write my-iso ./zip.zip onto external hard drive  
    git delete commit 1a4db4c  
    convert ./video.mp4 and ./audio.mp3 into ./out.mp4  
    merge ./video.mp4 and ./audio.mp3 to ./out.mp4 without re-encoding
    

    Seria bom ter autocompletar e suporte a várias formas de expressão. Nem precisaria de LLM

    • Mas esses comandos em linguagem natural têm o problema da ambiguidade
      Aparecem situações como “não esse disco rígido, o outro!” ou “mandou apagar, mas apagar de verdade mesmo?”
    • Se você não gosta dessa abordagem, então é só usar Windows ou macOS.
      Eu gosto de preservar as características técnicas do Linux como elas são
    • Existe um script helpme que implementa essa ideia de verdade
      Exemplo:
      helpme ffmpeg assemble all the .jpg files into an .mp4 timelapse video at 8fps
      helpme zip my-folder into my-zip.tar with compression level 9
      helpme git delete commit 1a4db4c
      
      Ele começou como um wrapper para ffmpeg, mas agora evoluiu para um assistente de CLI genérico
  • A única utilidade real dos chatbots de IA é escrever comandos do ffmpeg
    Você vai conversando até chegar ao comando necessário e salva os que usa com frequência em arquivos .command

    • Os LLMs são um avanço impressionante em análise de linguagem natural
      O problema foi achar que daria para criar “inteligência” só com Wikipédia e alguns outros dados
    • Sendo pessimista, LLMs são úteis para converter descrições em texto do usuário em comandos ou SQL
      Mas a interface precisa ser do tipo tutor, mostrando o resultado para o usuário confirmar e aprender
    • As IAs antigas não lidavam bem com efeitos de bounce, como “reproduza o vídeo de 0:00 a 0:03 e depois repita ao contrário”
    • Ainda assim, esse tipo de interface parece um exemplo de ineficiência que desperdiça recursos de GPU
      Com um wrapper simples para ffmpeg já dá para resolver 90% dos casos
  • Não consigo acessar o repositório ezff no GitHub

    • Aqui também dá erro 404. Parece que o link no rodapé da página do npm está errado
    • Mesmo assim, dá para ver no código da aba do npm
  • Acho melhor usar um LLM para sugerir as opções e depois revisar e ajustar
    Mas é melhor escolher outro nome, porque há conflito de nome de pacote
    “ezff” aparece como biblioteca Python, e “ez-ffmpeg” como biblioteca para Rust

  • LLM é uma ótima interface para ffmpeg
    Embora às vezes seja preciso corrigir 2 ou 3 vezes por causa de coisas como sincronização de legendas, ele consegue gerar comandos complexos rapidamente

  • Fiquei curioso com a explicação de “20 padrões comuns cobrem 90% dos casos”
    Queria saber se isso foi dito pela IA ou pelo próprio autor

  • npm? Vendo os incidentes de segurança acontecendo toda semana, não quero trazer esse caos para o meu ambiente de desenvolvimento

  • A mudança de paradigma que a IA vai trazer no fim é falar com o computador em linguagem natural
    Comandos como “faça um gif da cena de culinária deste filme” vão se tornar realidade
    O paradigma atual baseado em comandos está fadado a desaparecer em breve

    • Ainda assim, o valor de ferramentas consistentes e testadas continua existindo
      Não há motivo para menosprezar esse tipo de iniciativa