3 pontos por GN⁺ 2024-07-01 | 1 comentários | Compartilhar no WhatsApp
  • LosslessCut é uma GUI do FFmpeg multiplataforma para processar arquivos de mídia como vídeo, áudio e legendas de forma extremamente rápida e sem perda
  • A função principal é o trim/corte sem perda, para cortar grosseiramente grandes arquivos de vídeo vindos de câmeras, GoPro, drones etc., mantendo apenas as partes boas e descartando muitos dados sem a lentidão da recodificação
  • A maioria das tarefas é feita com cópia de dados quase direta baseada em FFmpeg, com suporte a remoção de anúncios, reorganização de segmentos, mesclagem de arquivos com os mesmos parâmetros de codec e extração, substituição ou remoção de faixas
  • Como usa o player de vídeo HTML5 do Chromium, há limitações nos formatos e codecs com reprodução nativa, mas é possível criar e abrir proxies de baixa qualidade com reprodução assistida por FFmpeg, enquanto o corte/exportação real é feito sem perda no original
  • O download manual para macOS, Windows e Linux é gratuito, enquanto as instalações pela Mac App Store e Microsoft Store são apresentadas como uma forma de apoio que oferece segurança, instalação simples e atualizações automáticas estáveis

O problema que o LosslessCut resolve

  • LosslessCut busca ser uma GUI do FFmpeg multiplataforma que oferece operações rápidas e sem perda para vídeo, áudio, legendas e arquivos de mídia relacionados
  • O uso principal é extrair rapidamente apenas os trechos necessários de arquivos grandes de vídeo e descartar o restante dos dados
    • É possível cortar de forma bruta arquivos grandes gravados por câmeras de vídeo, GoPro, drones etc. para economizar espaço
    • Como não há recodificação lenta, evita-se a perda de qualidade
  • A velocidade muito alta vem da estrutura em que o FFmpeg executa o trabalho e o LosslessCut aproveita cópia de dados quase direta

Principais recursos de edição

  • Suporta corte sem perda para a maioria dos formatos de vídeo e áudio
  • É possível cortar sem perda partes de vídeo e áudio, útil para tarefas como remover anúncios
  • É possível reorganizar sem perda a ordem dos segmentos de vídeo e áudio
  • Suporta mesclagem/concatenação sem perda de arquivos arbitrários, mas exige os mesmos parâmetros de codec, como em arquivos vindos da mesma câmera
  • Smart cut é oferecido como recurso experimental

Faixas, metadados e operações de contêiner

  • Suporta edição de múltiplas faixas/streams
    • É possível combinar faixas arbitrárias de vários arquivos para adicionar música ou faixas de legenda a um vídeo
    • É possível remover faixas desnecessárias
    • É possível substituir ou recodificar apenas algumas faixas
    • Todas as faixas, incluindo vídeo, áudio, legendas e anexos, podem ser extraídas para arquivos separados
  • É possível verificar informações técnicas de todas as faixas e editar metadados do arquivo, metadados por faixa e disposition por faixa
  • É possível escolher quais faixas de vídeo/áudio reproduzir e reproduzir várias faixas de áudio ao mesmo tempo
  • É possível fazer remux sem perda de vídeo/áudio para outros formatos de arquivo de contêiner
  • É possível alterar os metadados de rotação/orientação do vídeo
  • Suporta edição de marcadores de capítulo embutidos em MKV/MP4 e visualização de legendas

Timeline e fluxo de trabalho

  • Oferece um fluxo de trabalho rápido com múltiplos arquivos, mas ainda não há exportação em massa/em lote
  • Suporta fluxo de trabalho centrado em atalhos de teclado e atalhos personalizados
  • É possível inserir manualmente o tempo dos pontos de corte
  • Suporta aplicar deslocamento de timecode por arquivo e carregar automaticamente o timecode do arquivo
  • Oferece zoom na timeline, salto por frame/keyframe, miniaturas de vídeo e forma de onda de áudio
  • É possível salvar segmentos de corte em arquivos de projeto
  • É possível verificar o log do último comando FFmpeg executado, modificar o comando recente e executá-lo novamente pela linha de comando
  • Suporta desfazer e refazer
  • Oferece uma linguagem de expressões baseada em JS para consultas e transformações avançadas de segmentos
  • É possível dar rótulos a segmentos de corte e anotá-los com tags

Extração de imagens, detecção e criação de segmentos

  • É possível extrair snapshots em resolução total de vídeos como JPEG/PNG
  • É possível exportar intervalos de frames do vídeo como imagens
    • Há suporte para cada n-ésimo frame, por segundos, por mudança de cena, método ideal de miniatura etc.
    • A exportação pode ser feita apenas no intervalo de tempo selecionado, ou seja, no segmento
    • O nome do arquivo de imagem pode incluir o timestamp original
  • Suporta detecção de tela preta, detecção de áudio silencioso e detecção de mudança de cena
  • A timeline pode ser dividida por comprimento L, tamanho X MB, N segmentos ou segmentos aleatórios
  • É possível remover todos os non-keyframes muito rapidamente, para usos como timelapse

Importação, exportação e automação

  • Suporta importação/exportação de segmentos
    • Marcadores de capítulo MP4/MKV
    • Arquivos de texto
    • YouTube
    • CSV
    • CUE
    • XML para DaVinci e Final Cut Pro
    • Outros formatos
  • Oferece CLI básica e HTTP API
  • É possível baixar vídeos sem perda via HTTP, com HLS .m3u8 apresentado como exemplo
  • É possível exibir em mapa a trilha GPS embutida da DJI

Exemplos de uso

  • É possível cortar anúncios de um programa de TV gravado e mudar o formato de TS para MP4
  • É possível remover a faixa de áudio de um arquivo
  • É possível extrair uma faixa de música de um vídeo e cortá-la no tamanho necessário
  • É possível adicionar música a um vídeo ou substituir uma faixa de áudio existente
  • É possível combinar áudio gravado separadamente com uma faixa de vídeo
  • É possível incluir legendas externas no vídeo
  • É possível converter rapidamente vídeos H264/H265 em MKV para MOV ou MP4 para reprodução no iPhone
  • É possível importar listas de tempos de corte como EDL ou CSV criadas em outras ferramentas e executar os cortes no LosslessCut
  • É possível exportar listas de tempos de corte como CSV EDL para processamento em outras ferramentas
  • É possível cortar arquivos rapidamente com base em capítulos MP4/MKV
  • É possível cortar rapidamente YouTube video com base em capítulos ou tempos de música nos comentários
  • É possível alterar o idioma de faixas de áudio e legenda
  • É possível anexar capa/miniatura a vídeo/áudio a partir de arquivos JPEG externos ou frames da timeline
  • É possível alterar autor, título, localização GPS e horário de gravação do vídeo
  • É possível corrigir a rotação de vídeos com flag de orientação incorreta
  • É possível repetir rapidamente clipes de vídeo/áudio X vezes sem recodificação
  • É possível converter todo ou parte do vídeo em X arquivos de imagem, mas essa operação não é sem perda
  • É possível dividir um vídeo sem perda para que cada cena vire um arquivo
  • É possível cortar trechos silenciosos de áudio/vídeo
  • É possível dividir vídeos em segmentos para atender a restrições como o limite de 140 segundos do Twitter
  • É possível adicionar uma ou mais tags a cada segmento e usar as tags para organizar segmentos ou criar a estrutura de pastas de saída
  • Mais exemplos estão em Recipe cookbook

Download e formas de apoio

  • As instalações pela Mac App Store e Microsoft Store são apresentadas como forma de oferecer segurança, instalação simples e atualizações automáticas estáveis
  • Como alternativas no Linux, há Snapcraft e Flathub
  • O download manual dos executáveis continua sendo gratuito
    • macOS: oferece DMG para Intel e Apple Silicon, e PKG não funciona
    • Windows: oferece 7zip, e Windows 7, 8 e 8.1 não são mais suportados após a v3.50.0
    • Linux: oferece x64 tar.bz2, x64 AppImage, arm64 tar.bz2 e Raspberry Pi armv7l tar.bz2
    • Windows APPX e macOS PKG não funcionam
  • More releases e Latest nightly builds 🧪
  • O LosslessCut é mantido por uma única pessoa e afirma que sempre permanecerá gratuito e open source
  • O usuário pode apoiar o projeto ou doar para o FFmpeg

Formatos suportados e limitações de reprodução

  • O LosslessCut usa o player de vídeo HTML5 do Chromium, então nem todos os formatos e codecs têm suporte nativo
  • Em geral, os formatos de arquivo que funcionam são MP4, MOV, WebM, Matroska, OGG, WAV
  • Os codecs de áudio suportados são FLAC, MP3, Opus, PCM, Vorbis, AAC
  • Os codecs de vídeo suportados são H264, AV1, Theora, VP8, VP9 e H265 com decodificador por hardware
  • Codecs e formatos que não estão na lista também podem ser abertos após conversão para formato/codec compatível no menu File
    • A orientação é tentar primeiro a opção Fastest: FFmpeg-assisted playback
    • Nesse caso, é gerada uma versão de baixa qualidade do arquivo e aberta no player
    • O corte/exportação real é feito no arquivo original, portanto sem perda
    • Arquivos que o FFmpeg consegue decodificar podem potencialmente ser abertos

Documentação e demo

1 comentários

 
GN⁺ 2024-07-01
Opiniões no Hacker News
  • Parece um concorrente open source daquele app mágico chamado VideoReDo, que eu usava na época dos antigos PCs de mídia com Windows
    Infelizmente, o VideoReDo era um software proprietário feito por um desenvolvedor independente, e esse desenvolvedor faleceu recentemente
    Para explicar a quem não tem uma noção do que é edição de vídeo “sem perdas”: normalmente, editores de vídeo importam clipes de vídeo/áudio, salvam a timeline em um formato próprio do app, como Pitivi/Premiere/Final Cut, e então reencodam tudo ao exportar o resultado final para um formato de saída como MP4/MOV
    Por isso, mesmo que você queira cortar apenas 30 a 90 segundos de um vídeo de 1 hora, precisa reencodar a hora inteira; e, se a codificação original e as configurações de reencodificação não baterem, podem surgir mudanças indesejadas na qualidade de imagem e som
    Já esses editores sem perdas funcionam “cortando” apenas aquele trecho no nível dos bytes, sem reencodar tudo

    • Exato. Um software que decodifica e depois reencoda ingenuamente está, na prática, fazendo compressão com perdas duas vezes
      Isso me lembra o começo da era do MP3, quando as pessoas baixavam arquivos de 96 kbps e os reencodavam para 320 kbps para “melhorar a qualidade do áudio”
    • Pelo que lembro, o AviDemux também conseguia fazer cortes sem perdas
    • Se você está curioso sobre como isso funciona: fluxos de vídeo comprimidos podem ser cortados e emendados arbitrariamente entre frames a partir do ponto inicial de outro frame compatível
      Decodificar e reencodar só é necessário quando se quer alterar o conteúdo dos frames ou quando é preciso reorganizar a estrutura do fluxo de vídeo para que ela volte a ser compatível
      A maioria dos formatos de vídeo é um fluxo de frames com codificação delta que precisa ser decodificado e exibido em sequência. Mesmo para voltar apenas um frame, é preciso decodificar tudo desde o início; e, se um frame for corrompido, você perde a imagem
      Por isso, os encoders precisam inserir keyframes para reiniciar periodicamente o fluxo de vídeo. Com o mesmo codec e a mesma resolução, inserir um keyframe em praticamente qualquer ponto de um fluxo de vídeo externo é válido
      Até onde sei, editores não lineares de verdade não usam essa abordagem. A maioria dos cortes é difícil de aproximar com um simples truque de cortar GOP[0], e muita gente nem edita clipes já codificados no formato final de distribuição
      Em nível profissional, muita gente grava em ProRes, e o ProRes deliberadamente não usa codificação delta[1]. Isso porque a codificação delta é, na prática, bastante ruim para edição de vídeo não linear
      [0] Group of Pictures — um keyframe e todos os frames com codificação delta até antes do próximo keyframe
      [1] É por isso que ele fica enorme
    • Dizer que “se você corta 1 minuto de um vídeo de 1 hora, precisa reencodar a hora inteira” não é bem assim
      Se o corte é de 1 minuto, o que é codificado é 1 minuto de material. Talvez seja preciso decodificar mais do que 1 minuto do vídeo original, mas é raro ter que decodificar a hora inteira
    • No macOS, antigamente o Mpegstreamclip fazia algo parecido, mas não é compatível com Macs mais recentes
  • Quando vi “sem perdas”, no começo pensei em edição de formatos realmente sem perdas, como ProRes, MJPEG2000 e HuffYUV
    Mas o que essa ferramenta acaba fazendo é reempacotar o contêiner original em um novo contêiner, sem mexer nos fluxos subjacentes. Ou seja, sem reencodificação
    Não surpreende que ela deixe o trabalho pesado para o FFmpeg, mas vale a pena a comunidade entender como esse processo realmente funciona
    Em termos simples, formatos de vídeo modernos como mp4, mov, avi e ts são, no fim das contas, extensões de contêineres capazes de conter várias faixas de vídeo e áudio. Essas faixas são chamadas de fluxos elementares (Elementary Stream, ES) e são codificadas individualmente com codecs como H264/AVC, H265/HEVC e AAC
    Depois, no processo de muxing, elas são combinadas no contêiner, e cada amostra/frame recebe um timestamp para que os ES fiquem sincronizados
    Como os ES são codificados, é difícil obter precisão em nível de frame ao fazer busca, e os únicos frames totalmente decodificáveis são os I-frames. Os frames P/B seguintes são decodificados com base nas informações do I-frame. Essa sequência IPPBPPB... é chamada de GOP
    O interessante é que, mesmo sem decodificar o fluxo, é possível descobrir o tipo de frame olhando o cabeçalho das unidades NAL (Network Abstraction Layer). Por exemplo, o byte de tipo de frame de um I-frame H264 é algo como 0x07, e o cabeçalho é 0x000001
    Juntando tudo isso, dá para examinar o bitstream do ES e encontrar limites de GOP sem decodificação. Porém, não dá simplesmente para cortar no meio de um GOP; então é preciso aceitar um erro de menos de 1 segundo ou decodificar o GOP inteiro, que normalmente tem cerca de 30 frames, e inserir um I-frame no resultado
    No fim, portanto, o que ele faz é mais próximo de uma manipulação de bits muito rápida e de cópia entre contêineres. Se o objetivo é cortar o vídeo original em pedaços, é por isso que esse processo é tão eficiente

  • Artigos relacionados:
    LosslessCut: lossless video/audio editing - https://news.ycombinator.com/item?id=33969490 - Dec 2022 (153 comentários)
    Lossless-cut: The swiss army knife of lossless video/audio editing - https://news.ycombinator.com/item?id=24883030 - Oct 2020 (10 comentários)
    LosslessCut – Save space by quickly and losslessly trimming video files - https://news.ycombinator.com/item?id=22026412 - Jan 2020 (1 comentário)
    Show HN: LosslessCut – Cross-platform GUI tool for fast, lossless video cutting - https://news.ycombinator.com/item?id=12885585 - Nov 2016 (33 comentários)

  • Como referência, existe um script bash que uso para criar cortes com ffmpeg. Ele se baseia em uma sugestão bastante útil do Stack Overflow, e a entrada é um arquivo com os tempos de início/fim em segundos, uma linha por trecho
    Se o vídeo não tiver som, basta remover as partes atrim/outa que ele funciona praticamente igual. A ideia é cortar vários trechos com trim, atrim, setpts e asetpts e depois juntá-los com o filtro concat

    • Onde ficam -c copy ou -c:v copy -c:a copy?
  • Já vou me adiantar caso alguém reclame que este é um app Electron de mais de 100 MB: o AVIDemux é um app nativo e faz praticamente a mesma coisa

  • Descobri esse app na semana passada e ele foi extremamente útil
    Gravei uma competição inteira de saltos ornamentais com uma camerazinha ao lado da piscina e queria dividir em clipes de cada salto
    No LosslessCut, eu conseguia reproduzir tão rápido quanto quisesse, e, para distinguir pelo som os intervalos entre os atletas, pouco acima de 300% era a velocidade máxima que eu conseguia usar
    A cada vez que a nota de um salto era anunciada, eu apertava B; depois de fazer isso para todos os saltos, cliquei em exportar. Dividi uma competição de 3 horas, em menos de uma hora, em clipes com nomes organizados que pude compartilhar com cada atleta e treinador

  • Gosto muito do LosslessCut e uso quase todos os dias
    Uso principalmente para cortar ou editar gravações de tela e, por ser sem perdas, salvar o vídeo editado termina quase instantaneamente
    Na prática, é quase uma GUI para ffmpeg
    Quando preciso recomprimir, uso o Permute; quando preciso adicionar efeitos ou fazer edição com perdas, uso o Davinci Resolve

    • Nunca tinha ouvido falar do Permute, mas eu também uso LosslessCut e Davinci de forma parecida. É este aqui? https://software.charliemonroe.net/permute/
      Fico curioso sobre o que ele oferece a mais do que o Handbrake ou simplesmente chamar o ffmpeg diretamente. Parece ser um app pago, mas não me importo de pagar por software se ele for realmente melhor do que as alternativas gratuitas existentes
  • No GitHub, ele está sob licença GPL-2.0; na Snap Store, sob licença MIT; e na Mac App Store custa 19 dólares

    • Também há download gratuito para todas as plataformas
  • Fico curioso se é possível baixar e cortar sem perdas vídeos de um servidor remoto
    Hoje uso um script bash para ffmpeg que peguei no Stack Overflow para baixar só partes de vídeos de lugares como o YouTube, mas atualmente é preciso recodificar em tempo real durante o download
    Por enquanto, parto do princípio de que, como não há localmente informações do vídeo, como keyframes, é impossível baixar e cortar esse tipo de vídeo sem perdas. Eu gostaria que alguém provasse que estou errado

    • Há algum tempo, usei algo assim com yt-dlp para extrair parte de um vídeo. 313 é apenas o stream de vídeo em 4K, mas acho que também funcionaria para vídeos com stream de áudio
      ffmpeg -ss 5:40 -i $(yt-dlp -f 313 -g https://www.youtube.com/watch?v=3SykjY3GdMs) -acodec copy -vcodec copy -t 20 waterdrop_mountainlake.mkv
  • Só conheci esse app recentemente e gostei
    Agora é difícil acreditar que eu abria uma instância inteira do Blender e um projeto de vídeo toda vez que queria cortar um clipe — e que fazia isso com frequência