LosslessCut: o canivete suíço da edição sem perda de vídeo/áudio
(github.com/mifi)- 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
.m3u8apresentado 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
- Há 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,VP9eH265com 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
- O site oficial é LosslessCut.app
- Introdução, FAQ e documentação de uso estão em Getting started, FAQ and usage documentation
- Solução de problemas, problemas conhecidos e limitações estão em Troubleshooting and known issues and limitations
- As instruções de contribuição estão em Contributing
- Os vídeos de demonstração cobrem recursos comuns, adição de miniatura/capa em MP4 e adição de áudio multilíngue
1 comentários
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
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”
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
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
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/outaque ele funciona praticamente igual. A ideia é cortar vários trechos comtrim,atrim,setptseasetptse depois juntá-los com o filtroconcat-c copyou-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 treinadorGosto 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
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
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
313é apenas o stream de vídeo em 4K, mas acho que também funcionaria para vídeos com stream de áudioffmpeg -ss 5:40 -i $(yt-dlp -f 313 -g https://www.youtube.com/watch?v=3SykjY3GdMs) -acodec copy -vcodec copy -t 20 waterdrop_mountainlake.mkvSó 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