3 puntos por GN⁺ 2024-07-01 | 1 comentarios | Compartir por WhatsApp
  • LosslessCut es una GUI de FFmpeg multiplataforma para procesar archivos multimedia como video, audio y subtítulos de forma muy rápida y sin pérdida
  • Su función principal es el recorte/corte sin pérdida: tomar archivos de video grandes provenientes de cámaras, GoPro, drones, etc., cortarlos de forma aproximada sin recodificación lenta, conservar solo las partes buenas y descartar muchos datos
  • La mayoría de las operaciones se realizan mediante copias de datos casi directas basadas en FFmpeg, y admite tareas como eliminar anuncios, reordenar segmentos, unir archivos con los mismos parámetros de códec, y extraer, reemplazar o eliminar pistas
  • Como usa el reproductor de video HTML5 de Chromium, tiene limitaciones en formatos y códecs reproducibles de forma nativa, pero con la reproducción asistida por FFmpeg puede crear un proxy de baja calidad para abrir el archivo, mientras que los cortes/exportaciones reales se hacen sobre el original sin pérdida
  • Las descargas manuales para macOS, Windows y Linux son gratuitas; las instalaciones desde Mac App Store y Microsoft Store se presentan como una forma de soporte que ofrece seguridad, instalación sencilla y actualizaciones estables automáticas

El problema que resuelve LosslessCut

  • LosslessCut busca ser una GUI de FFmpeg multiplataforma que ofrece operaciones rápidas y sin pérdida para video, audio, subtítulos y archivos multimedia relacionados
  • Su uso principal es extraer rápidamente solo los tramos necesarios de archivos de video grandes y descartar el resto de los datos
    • Permite ahorrar espacio cortando de forma aproximada archivos grandes grabados con cámaras de video, GoPro, drones, etc.
    • Como no realiza una recodificación lenta, evita la pérdida de calidad
  • Su alta velocidad proviene de una arquitectura en la que FFmpeg realiza el trabajo y LosslessCut aprovecha copias de datos casi directas

Funciones principales de edición

  • Admite corte sin pérdida para la mayoría de los formatos de video y audio
  • Permite recortar sin pérdida tramos de video y audio, útil para tareas como eliminar anuncios
  • Permite reordenar segmentos de video y audio sin pérdida
  • Admite la unión/concatenación sin pérdida de archivos arbitrarios, pero requiere parámetros de códec idénticos, como en archivos provenientes de la misma cámara
  • Smart cut se ofrece como función experimental

Operaciones con pistas, metadatos y contenedores

  • Admite edición de múltiples pistas/streams
    • Permite combinar pistas arbitrarias de varios archivos para agregar música o pistas de subtítulos a un video
    • Permite eliminar pistas innecesarias
    • Permite reemplazar o recodificar solo algunas pistas
    • Permite extraer todas las pistas —video, audio, subtítulos, adjuntos, etc.— como archivos individuales
  • Permite ver la información técnica de todas las pistas y editar metadatos del archivo, metadatos por pista y disposition por pista
  • Permite seleccionar qué pistas de video y audio reproducir, y reproducir varias pistas de audio al mismo tiempo
  • Permite hacer remux sin pérdida de video y audio a otro formato de archivo contenedor
  • Permite cambiar los metadatos de rotación/orientación del video
  • Admite edición de marcas de capítulos integradas en MKV/MP4 y visualización de subtítulos

Línea de tiempo y flujo de trabajo

  • Ofrece un flujo de trabajo rápido para múltiples archivos, pero todavía no tiene exportación masiva/por lotes
  • Admite un flujo de trabajo centrado en atajos de teclado y atajos personalizables
  • Permite ingresar manualmente los tiempos de los puntos de corte
  • Admite aplicar un offset de timecode por archivo y cargar automáticamente timecodes desde un archivo
  • Ofrece zoom en la línea de tiempo, saltos por frame/keyframe, miniaturas de video y forma de onda de audio
  • Permite guardar segmentos de corte en un archivo de proyecto
  • Permite consultar el log del último comando FFmpeg ejecutado para modificar el comando reciente y volver a ejecutarlo desde la línea de comandos
  • Admite deshacer y rehacer
  • Ofrece un lenguaje de expresiones basado en JS para consultas y transformaciones avanzadas de segmentos
  • Permite etiquetar segmentos de corte y anotarlos con tags

Extracción de imágenes, detección y generación de segmentos

  • Permite extraer snapshots en resolución completa desde un video como JPEG/PNG
  • Permite exportar rangos de frames de video como imágenes
    • Admite opciones como cada n frames, por segundos, según cambios de escena y método de miniatura óptima
    • Permite exportar solo desde el rango de tiempo seleccionado, es decir, desde el segmento
    • Permite incluir el timestamp original en el nombre del archivo de imagen
  • Admite detección de pantalla negra, detección de audio en silencio y detección de cambios de escena
  • Permite dividir la línea de tiempo en duración L, tamaño X MB, N segmentos o segmentos aleatorios
  • Permite eliminar muy rápidamente todos los non-keyframes, útil para casos como timelapse

Importación/exportación y automatización

  • Admite importar/exportar segmentos
    • Marcas de capítulos MP4/MKV
    • Archivos de texto
    • YouTube
    • CSV
    • CUE
    • XML para DaVinci y Final Cut Pro
    • Otros formatos
  • Ofrece una CLI básica y una HTTP API
  • Permite descargar videos sin pérdida mediante HTTP; se presenta HLS .m3u8 como ejemplo
  • Permite mostrar en un mapa las pistas GPS integradas de DJI

Ejemplos de uso

  • Cortar anuncios de un programa de TV grabado y cambiar el formato de TS a MP4
  • Eliminar una pista de audio de un archivo
  • Extraer una pista de música de un video y recortarla a la duración necesaria
  • Agregar música a un video o reemplazar una pista de audio existente
  • Combinar audio grabado por separado con una pista de video
  • Incluir subtítulos externos en un video
  • Convertir rápidamente videos H264/H265 MKV a MOV o MP4 para reproducirlos en iPhone
  • Importar listas de tiempos de corte como EDL o CSV creadas en otras herramientas y ejecutar los cortes en LosslessCut
  • Exportar una lista de tiempos de corte como CSV EDL para procesarla en otras herramientas
  • Cortar rápidamente archivos según capítulos MP4/MKV
  • Cortar rápidamente un video de YouTube según capítulos o tiempos de música en comentarios
  • Cambiar el idioma de pistas de audio y subtítulos
  • Adjuntar cover art/miniaturas a video o audio desde un archivo JPEG externo o desde un frame de la línea de tiempo
  • Cambiar el autor, título, ubicación GPS y hora de grabación de un video
  • Corregir la rotación de un video que tiene configurado un flag de orientación incorrecto
  • Repetir rápidamente un clip de video/audio X veces sin recodificación
  • Convertir todo o parte de un video en X archivos de imagen, aunque esta operación no es sin pérdida
  • Dividir un video sin pérdida para que cada escena quede en un archivo separado
  • Cortar tramos silenciosos de audio/video
  • Dividir un video en segmentos para cumplir condiciones como el límite de 140 segundos de Twitter
  • Asignar uno o más tags a cada segmento y usar los tags para organizar segmentos o generar la estructura de carpetas de salida
  • Hay más ejemplos en el Recipe cookbook

Descarga y formas de soporte

  • Las instalaciones desde Mac App Store y Microsoft Store se presentan como una opción que ofrece seguridad, instalación sencilla y actualizaciones estables automáticas
  • Snapcraft y Flathub se ofrecen como alternativas para Linux
  • La descarga manual de ejecutables sigue siendo gratuita
    • macOS: ofrece DMG para Intel y Apple Silicon; PKG no funciona
    • Windows: ofrece 7zip; Windows 7, 8 y 8.1 ya no son compatibles desde v3.50.0
    • Linux: ofrece x64 tar.bz2, x64 AppImage, arm64 tar.bz2 y tar.bz2 para Raspberry Pi armv7l
    • Windows APPX y macOS PKG no funcionan
  • Están disponibles More releases y Latest nightly builds 🧪
  • LosslessCut afirma que lo mantiene una sola persona y que siempre seguirá siendo gratuito y open source
  • Los usuarios pueden apoyar el proyecto o donar a FFmpeg

Formatos compatibles y limitaciones de reproducción

  • Como LosslessCut usa el reproductor de video HTML5 de Chromium, no todos los formatos y códecs son compatibles de forma nativa
  • Los formatos de archivo que generalmente funcionan son MP4, MOV, WebM, Matroska, OGG y WAV
  • Los códecs de audio compatibles son FLAC, MP3, Opus, PCM, Vorbis y AAC
  • Los códecs de video compatibles son H264, AV1, Theora, VP8, VP9 y H265 cuando hay decodificador por hardware
  • Los códecs y formatos que no estén en la lista también pueden abrirse convirtiéndolos desde el menú File a formatos/códecs compatibles
    • Se recomienda probar primero la opción Fastest: FFmpeg-assisted playback
    • En ese caso se genera una versión de baja calidad del archivo y se abre en el reproductor
    • Las operaciones reales de corte/exportación se realizan sobre el archivo original, por lo que son sin pérdida
    • Cualquier archivo que FFmpeg pueda decodificar podría abrirse potencialmente

Documentación y demos

1 comentarios

 
GN⁺ 2024-07-01
Comentarios de Hacker News
  • Parece una competencia de código abierto para esa app mágica llamada VideoReDo que usaba en la época de las PCs multimedia con Windows
    Lamentablemente, VideoReDo era software privativo hecho por un desarrollador indie, y ese desarrollador falleció recientemente
    Para quienes no tienen claro qué significa la edición de video “sin pérdida”, normalmente un editor de video importa clips de video/audio, guarda la línea de tiempo en un formato propio de la app como Pitivi/Premiere/Final Cut, y luego exporta el resultado final a un formato de salida como MP4/MOV, recodificando todo en el proceso
    Así que, aunque solo quieras recortar 30~90 segundos de un video de 1 hora, tienes que recodificar la hora completa, y si la configuración de la codificación original y la nueva no coincide, se producen cambios no deseados en la calidad de imagen o sonido
    En cambio, este tipo de editor sin pérdida procesa el archivo “recortando” solo esa sección a nivel de bytes, sin recodificar todo

    • Exacto. El software que decodifica y luego vuelve a codificar de forma ingenua en la práctica está haciendo compresión con pérdida dos veces
      Me recuerda a los primeros años del MP3, cuando la gente descargaba archivos a 96kbps y luego los volvía a codificar a 320kbps para “mejorar” la calidad de audio
    • Según recuerdo, AviDemux también podía hacer recortes sin pérdida
    • Si te da curiosidad cómo funciona, un flujo de video comprimido puede cortarse y unirse arbitrariamente entre frames en puntos de inicio compatibles de otros frames
      Solo hace falta decodificar y volver a codificar cuando quieres cambiar el contenido de los frames o reestructurar el flujo de video para que siga siendo compatible
      La mayoría de los formatos de video son flujos de frames con codificación delta que deben decodificarse y mostrarse en orden. Incluso para retroceder un solo frame, hay que volver a decodificar desde el principio, y si un frame se corrompe, se pierde la imagen
      Por eso los codificadores insertan keyframes para reiniciar periódicamente el flujo de video. Si el códec y la resolución son los mismos, en la práctica también es válido insertar keyframes casi en cualquier parte de un flujo de video externo
      Hasta donde sé, los editores no lineales de verdad no usan este enfoque. La mayoría de los cortes no se pueden aproximar bien con un simple truco de recorte por GOP[0], y mucha gente tampoco edita clips ya codificados en el formato final de distribución
      A nivel profesional, mucha gente graba en ProRes, y ProRes intencionalmente no usa codificación delta[1]. La codificación delta en realidad es bastante mala para la edición de video no lineal
      [0] Group of Pictures - un keyframe y todos los frames con codificación delta hasta antes del siguiente keyframe
      [1] Por eso ocupa tantísimo espacio
    • Eso de “si recortas 1 minuto de un video de 1 hora, tienes que recodificar la hora completa” no es del todo así
      Si vas a recortar 1 minuto, lo que codificas es 1 minuto de material. Puede que tengas que decodificar más de 1 minuto del video original, pero rara vez hace falta decodificar la hora entera
    • En macOS antes estaba Mpegstreamclip para algo parecido, pero ya no es compatible con las Macs modernas
  • Cuando vi “sin pérdida”, al principio pensé en edición de formatos realmente sin pérdida como ProRes, MJPEG2000 o HuffYUV
    Pero lo que esta herramienta realmente hace al final es volver a empaquetar el contenedor original en uno nuevo, sin tocar los streams base. O sea, no hay recodificación
    No sorprende que delegue el trabajo pesado a FFmpeg, pero vale la pena que la comunidad entienda cómo funciona realmente este proceso
    En pocas palabras, los formatos de video modernos como mp4, mov, avi o ts son en realidad extensiones de contenedores que pueden incluir varias pistas de video y audio. A estas pistas se les llama flujos base (Elementary Stream, ES), y cada una está codificada con códecs como H264/AVC, H265/HEVC o AAC
    Luego, en el proceso de multiplexación (muxing), se combinan dentro del contenedor y se asignan marcas de tiempo a cada muestra/frame para sincronizar los ES
    Como los ES están codificados, es difícil obtener precisión exacta por frame al buscar, y los únicos frames completamente decodificables son los I-frames. Los P/B-frames siguientes se decodifican con base en la información del I-frame. A esta secuencia IPPBPPB... se le llama GOP
    Lo interesante es que no hace falta decodificar el stream para saber el tipo de frame; basta con mirar la cabecera de las unidades NAL (Network Abstraction Layer). Por ejemplo, el byte de tipo de frame de un I-frame H264 es algo como 0x07, y la cabecera es 0x000001
    Juntando todo esto, puedes inspeccionar el bitstream del ES y encontrar los límites de los GOP sin decodificar. Eso sí, no puedes cortar así nomás en medio de un GOP, así que puedes aceptar un margen de error de menos de 1 segundo o decodificar el GOP completo, que normalmente tiene unos 30 frames, e insertar un I-frame en el resultado
    Así que al final lo que hace se parece más a una manipulación rapidísima de bits y copias entre contenedores. Si lo que buscas es trocear el video original en partes, por eso este proceso es tan eficiente

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

  • Como referencia, hay un script de bash que uso para hacer cortes con ffmpeg. Está basado en una sugerencia bastante útil de Stack Overflow, y la entrada es un archivo con los tiempos de inicio/fin en segundos, uno por línea.
    Si el video no tiene audio, basta con quitar la parte de atrim/outa y funciona casi igual. La idea es recortar varios segmentos con trim, atrim, setpts y asetpts, y luego unirlos con el filtro concat.

    • ¿Y dónde queda -c copy o -c:v copy -c:a copy?
  • Por si alguien se va a quejar de que esto es una app de Electron de más de 100 MB, AVIDemux es una app nativa y hace casi lo mismo.

  • Descubrí esta app la semana pasada y fue súper útil.
    Grabé toda una competencia de clavados con una camarita pequeña al lado de la piscina, y quería separarla en clips por cada clavado.
    En LosslessCut podía reproducir tan rápido como quisiera, y para distinguir por el audio los espacios entre competidores, un poco más de 300% era la velocidad máxima que podía usar.
    Cada vez que anunciaban la puntuación de un clavado, presionaba B, y cuando terminé con todos, hice clic en exportar. En menos de una hora dividí una competencia de 3 horas en clips con nombres ordenados para poder compartirlos con cada atleta y entrenador.

  • Me encanta LosslessCut y lo uso casi todos los días.
    Principalmente lo uso para recortar o editar grabaciones de pantalla, y como es sin pérdida, guardar el video editado termina casi al instante.
    Básicamente es más bien una GUI para ffmpeg.
    Si tengo que recomprimir, uso Permute, y si necesito agregar efectos o hacer edición con pérdida, uso Davinci Resolve.

    • No conocía Permute, pero yo también uso LosslessCut y Davinci de forma parecida. ¿Es este? https://software.charliemonroe.net/permute/
      Me da curiosidad qué ofrece además de Handbrake o de simplemente invocar ffmpeg directamente. Parece una app de pago, pero si de verdad es mejor que las opciones gratuitas que ya existen, no me molesta pagar software.
  • En GitHub figura con licencia GPL-2.0, en Snap Store con licencia MIT, y en la Mac App Store cuesta 19 dólares.

    • También se puede descargar gratis para todas las plataformas.
  • Me pregunto si es posible descargar y recortar video sin pérdida desde un servidor remoto.
    Ahora mismo uso un script de bash para ffmpeg que saqué de Stack Overflow para bajar solo partes de videos de sitios como YouTube, pero por ahora tengo que recodificar al vuelo mientras se descarga.
    De momento asumo que no es posible descargar y recortar estos videos sin pérdida, ya que localmente no se tiene información del video como los fotogramas clave. Me encantaría que alguien me demostrara que estoy equivocado.

    • Antes extraje partes de un video junto con yt-dlp usando algo así. 313 es solo el stream de video 4K, pero creo que también debería funcionar con videos que tengan stream de audio.
      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
  • Apenas hace poco conocí esta app y me gustó.
    Ahora me cuesta creer que antes abría una instancia completa de Blender y un proyecto de video cada vez que quería recortar un clip, y eso que lo hacía seguido.