3 points par GN⁺ 2024-07-01 | 1 commentaires | Partager sur WhatsApp
  • LosslessCut est une GUI FFmpeg multiplateforme conçue pour traiter très rapidement et sans perte les fichiers multimédias, notamment vidéo, audio et sous-titres
  • Sa fonction clé est le trim/cut sans perte : découper grossièrement de gros fichiers vidéo issus de caméras, GoPro, drones, etc., pour ne garder que les bonnes séquences et supprimer beaucoup de données, sans réencodage lent
  • La plupart des opérations reposent sur une copie de données quasi directe via FFmpeg, avec prise en charge de tâches comme la suppression de publicités, la réorganisation de segments, la fusion de fichiers ayant les mêmes paramètres de codec, ainsi que l’extraction, le remplacement et la suppression de pistes
  • Comme l’application utilise le lecteur vidéo HTML5 de Chromium, il existe des limites sur les formats et codecs lisibles nativement, mais il est possible d’ouvrir des proxys de faible qualité générés via l’assistance FFmpeg, tandis que les coupes/exportations réelles sont effectuées sans perte sur les fichiers d’origine
  • Les téléchargements manuels pour macOS, Windows et Linux sont gratuits, tandis que les installations via le Mac App Store et le Microsoft Store sont présentées comme un moyen de soutien offrant sécurité, installation simplifiée et mises à jour stables automatiques

Le problème que résout LosslessCut

  • LosslessCut vise à fournir une GUI FFmpeg multiplateforme permettant des opérations rapides et sans perte sur les fichiers vidéo, audio, sous-titres et autres médias associés
  • Son usage principal consiste à extraire rapidement uniquement les portions nécessaires de gros fichiers vidéo et à supprimer le reste
    • Il permet de couper grossièrement de gros fichiers tournés avec des caméras vidéo, GoPro, drones, etc., afin d’économiser de l’espace
    • Comme il n’y a pas de réencodage lent, on évite toute perte de qualité
  • Cette grande rapidité vient du fait que FFmpeg exécute le travail et que LosslessCut s’appuie sur une copie de données presque directe

Principales fonctions de montage

  • Prise en charge du découpage sans perte pour la plupart des formats vidéo et audio
  • Possibilité de supprimer sans perte certaines portions de vidéo ou d’audio, par exemple pour retirer des publicités
  • Possibilité de réorganiser sans perte l’ordre des segments vidéo et audio
  • Prise en charge de la fusion/concaténation sans perte de fichiers arbitraires, à condition d’avoir les mêmes paramètres de codec, comme pour des fichiers issus de la même caméra
  • Smart cut est proposé comme fonctionnalité expérimentale

Pistes, métadonnées et conteneurs

  • Prise en charge de l’édition multi-pistes/multi-flux
    • Il est possible de combiner des pistes arbitraires provenant de plusieurs fichiers pour ajouter une musique ou des sous-titres à une vidéo
    • Les pistes inutiles peuvent être supprimées
    • Certaines pistes peuvent être remplacées ou réencodées individuellement
    • Toutes les pistes, y compris vidéo, audio, sous-titres et pièces jointes, peuvent être extraites dans des fichiers séparés
  • Il est possible de consulter les informations techniques de toutes les pistes, ainsi que de modifier les métadonnées du fichier, les métadonnées par piste et le disposition de chaque piste
  • Il est possible de choisir les pistes vidéo/audio à lire et de lire simultanément plusieurs pistes audio
  • La vidéo et l’audio peuvent être remuxés sans perte vers un autre format de fichier conteneur
  • Les métadonnées de rotation/orientation d’une vidéo peuvent être modifiées
  • Prise en charge de l’édition des marqueurs de chapitres intégrés MKV/MP4 et de l’affichage des sous-titres

Timeline et workflow

  • Fournit un workflow rapide sur plusieurs fichiers, mais pas encore d’export massif/par lot
  • Prend en charge un workflow centré sur les raccourcis clavier ainsi que des raccourcis personnalisés
  • Les horodatages des points de coupe peuvent être saisis manuellement
  • Prise en charge de l’application d’un offset de timecode par fichier et du chargement automatique du timecode depuis le fichier
  • Offre zoom sur la timeline, saut par image/image-clé, miniatures vidéo et forme d’onde audio
  • Les segments de coupe peuvent être enregistrés dans un fichier de projet
  • Le journal de la dernière commande FFmpeg exécutée peut être consulté, puis la commande récente modifiée et relancée en ligne de commande
  • Prise en charge de l’annulation et du rétablissement
  • Fournit un langage d’expression basé sur JS pour les requêtes et transformations avancées de segments
  • Les segments de coupe peuvent recevoir des libellés et des annotations par tags

Extraction d’images, détection et génération de segments

  • Des captures en pleine résolution peuvent être extraites d’une vidéo en JPEG/PNG
  • Une plage d’images vidéo peut être exportée sous forme d’images
    • Prise en charge de l’export toutes les n-ièmes images, par seconde, selon les changements de scène, via une méthode optimale pour miniatures, etc.
    • Export possible uniquement sur une plage temporelle sélectionnée, c’est-à-dire un segment
    • Le nom des fichiers image peut inclure le timestamp d’origine
  • Prise en charge de la détection d’écran noir, de silence audio et de changement de scène
  • La timeline peut être découpée selon une longueur L, une taille X Mo, un nombre N de segments ou des segments aléatoires
  • Tous les non-keyframes peuvent être supprimés très rapidement, par exemple pour des usages de type timelapse

Import/export et automatisation

  • Prise en charge de l’import/export de segments
    • Marqueurs de chapitres MP4/MKV
    • Fichiers texte
    • YouTube
    • CSV
    • CUE
    • XML pour DaVinci et Final Cut Pro
    • Autres formats
  • Fournit une CLI de base et une API HTTP
  • Permet de télécharger des vidéos sans perte via HTTP, avec l’exemple de HLS .m3u8
  • Les pistes GPS intégrées de DJI peuvent être affichées sur une carte

Exemples de cas d’usage

  • Couper les publicités d’une émission TV enregistrée et convertir le format de TS vers MP4
  • Supprimer une piste audio d’un fichier
  • Extraire une piste musicale d’une vidéo et la couper à la longueur souhaitée
  • Ajouter de la musique à une vidéo ou remplacer une piste audio existante
  • Combiner une piste audio enregistrée séparément avec une piste vidéo
  • Inclure des sous-titres externes dans une vidéo
  • Convertir rapidement des vidéos MKV H264/H265 en MOV ou MP4 lisibles sur iPhone
  • Importer une liste de temps de coupe comme EDL ou CSV créée avec d’autres outils et exécuter les coupes dans LosslessCut
  • Exporter une liste de temps de coupe en CSV EDL pour traitement dans d’autres outils
  • Couper rapidement un fichier selon les chapitres MP4/MKV
  • Couper rapidement une vidéo YouTube selon des chapitres ou des temps musicaux présents dans les commentaires
  • Changer la langue des pistes audio et sous-titres
  • Joindre une cover art ou une miniature à une vidéo ou un audio à partir d’un fichier JPEG externe ou d’une image de la timeline
  • Modifier l’auteur, le titre, la position GPS ou l’heure d’enregistrement d’une vidéo
  • Corriger la rotation d’une vidéo avec un indicateur d’orientation erroné
  • Répéter rapidement un clip vidéo/audio X fois sans réencodage
  • Convertir tout ou partie d’une vidéo en X fichiers image, mais cette opération n’est pas sans perte
  • Diviser une vidéo sans perte pour obtenir un fichier par scène
  • Couper les silences dans l’audio/vidéo
  • Découper une vidéo en segments pour respecter des contraintes comme la limite de 140 secondes de Twitter
  • Ajouter un ou plusieurs tags à chaque segment et utiliser ces tags pour organiser les segments ou générer une arborescence de dossiers de sortie
  • D’autres exemples sont disponibles dans le Recipe cookbook

Téléchargement et modes de soutien

  • Les installations via le Mac App Store et le Microsoft Store sont présentées comme offrant sécurité, simplicité d’installation et mises à jour stables automatiques
  • Snapcraft et Flathub sont proposés comme alternatives sous Linux
  • Le téléchargement manuel des exécutables reste gratuit
    • macOS : DMG Intel et Apple Silicon disponibles, PKG ne fonctionne pas
    • Windows : archive 7zip fournie ; Windows 7, 8 et 8.1 ne sont plus pris en charge depuis la v3.50.0
    • Linux : x64 tar.bz2, x64 AppImage, arm64 tar.bz2, Raspberry Pi armv7l tar.bz2
    • Windows APPX et macOS PKG ne fonctionnent pas
  • More releases et Latest nightly builds 🧪 sont proposés
  • LosslessCut est maintenu par une seule personne et restera toujours un projet open source gratuit
  • Les utilisateurs peuvent soutenir le projet ou faire un don à FFmpeg

Formats pris en charge et limites de lecture

  • LosslessCut utilise le lecteur vidéo HTML5 de Chromium, donc tous les formats et codecs ne sont pas pris en charge nativement
  • Les formats de fichiers qui fonctionnent généralement sont MP4, MOV, WebM, Matroska, OGG, WAV
  • Les codecs audio pris en charge sont FLAC, MP3, Opus, PCM, Vorbis, AAC
  • Les codecs vidéo pris en charge sont H264, AV1, Theora, VP8, VP9, ainsi que H265 lorsqu’un décodeur matériel est disponible
  • Les codecs et formats non listés peuvent aussi être ouverts après conversion via le menu File vers un format/codec pris en charge
    • Il est conseillé d’essayer d’abord l’option Fastest: FFmpeg-assisted playback
    • Dans ce cas, une version de faible qualité du fichier est générée et ouverte dans le lecteur
    • Les opérations réelles de coupe/export sont effectuées sur le fichier source, donc sans perte
    • Tout fichier que FFmpeg peut décoder peut potentiellement être ouvert

Documentation et démos

1 commentaires

 
GN⁺ 2024-07-01
Avis sur Hacker News
  • Cela ressemble à un concurrent open source de cette appli magique appelée VideoReDo, que j’utilisais à l’époque des PC multimédias sous Windows.
    Malheureusement, VideoReDo était un logiciel propriétaire créé par un développeur indépendant, récemment décédé.
    Pour expliquer à ceux qui ne voient pas ce qu’est le montage vidéo « sans perte » : en général, les logiciels de montage importent des clips vidéo/audio, enregistrent la timeline dans le format propre à l’application, comme Pitivi/Premiere/Final Cut, puis exportent le résultat final dans un format de sortie comme MP4/MOV en réencodant l’ensemble.
    Ainsi, même si l’on veut seulement retirer 30 à 90 secondes d’une vidéo d’une heure, il faut réencoder toute l’heure ; et si les réglages de l’encodage d’origine et du réencodage ne correspondent pas, cela peut entraîner des changements involontaires de qualité vidéo ou audio.
    À l’inverse, ce type d’éditeur sans perte ne réencode pas l’ensemble : il traite la vidéo en « découpant » seulement les segments concernés au niveau des octets.

    • Exact. Un logiciel qui décode puis réencode naïvement revient en fait à appliquer deux fois une compression avec perte.
      Cela me rappelle les débuts du MP3, quand on téléchargeait un fichier à 96 kbps puis qu’on le réencodait en 320 kbps pour « améliorer la qualité ».
    • Il me semble qu’AviDemux pouvait aussi faire des découpes sans perte.
    • Si vous vous demandez comment cela fonctionne : dans un flux vidéo compressé, on peut couper et recoller arbitrairement entre des images à partir du point de départ d’une autre image compatible.
      Le décodage et le réencodage ne sont nécessaires que lorsqu’il faut modifier le contenu des images ou restructurer le flux vidéo pour le rendre compatible.
      La plupart des formats vidéo sont des flux d’images encodées en delta qui doivent être décodées et affichées dans l’ordre. Même pour revenir en arrière d’une seule image, il faut redécoder depuis le début ; et si une image est corrompue, on perd l’affichage.
      C’est pourquoi les encodeurs doivent insérer des images clés afin de redémarrer périodiquement le flux vidéo. Avec le même codec et la même résolution, insérer une image clé à peu près n’importe où dans un flux vidéo externe est en pratique valide.
      À ma connaissance, les vrais éditeurs non linéaires n’utilisent pas cette méthode. La plupart des coupes sont difficiles à approximer avec une simple astuce de découpage de GOP[0], et beaucoup de gens ne montent pas non plus des clips encodés dans le format de diffusion final.
      Au niveau professionnel, beaucoup enregistrent en ProRes, qui évite volontairement l’encodage en delta[1]. L’encodage en delta est en réalité assez mauvais pour le montage vidéo non linéaire.
      [0] Group of Pictures — une image clé et toutes les images encodées en delta jusqu’à l’image clé suivante
      [1] C’est pour cela que les fichiers sont énormes.
    • Dire que « si l’on coupe 1 minute dans une vidéo d’une heure, il faut réencoder toute l’heure » n’est pas tout à fait exact.
      Si l’on coupe 1 minute, ce qui est encodé correspond à 1 minute. Il peut être nécessaire de décoder plus que cette minute dans la vidéo source, mais il est rare de devoir décoder toute l’heure.
    • Sur macOS, Mpegstreamclip faisait autrefois quelque chose de similaire, mais il n’est pas compatible avec les Mac récents.
  • Au début, en voyant « sans perte », j’ai pensé au montage de vrais formats sans perte comme ProRes, MJPEG2000 ou HuffYUV.
    Mais ce que fait finalement cet outil, c’est remuxer le conteneur d’origine dans un nouveau conteneur, sans toucher aux flux sous-jacents. Autrement dit, il n’y a pas de réencodage.
    Il n’est pas surprenant que le gros du travail soit confié à FFmpeg, mais il est utile que la communauté comprenne comment ce processus fonctionne réellement.
    Pour résumer, les formats vidéo modernes comme mp4, mov, avi ou ts sont en fin de compte des extensions de conteneurs capables de contenir plusieurs pistes vidéo et audio. Ces pistes sont appelées flux élémentaires (Elementary Stream, ES) et sont chacune encodées avec des codecs comme H264/AVC, H265/HEVC ou AAC.
    Ensuite, lors du muxing, elles sont combinées dans le conteneur, et chaque échantillon/image reçoit un horodatage afin de synchroniser les ES.
    Comme les ES sont encodés, il est difficile d’obtenir une précision à l’image près lors de la navigation, et les seules images entièrement décodables sont les images I. Les images P/B suivantes sont décodées à partir des informations de l’image I. Ce type de séquence IPPBPPB... s’appelle un GOP.
    Ce qui est intéressant, c’est qu’on peut connaître le type d’image sans décoder le flux, en lisant l’en-tête des unités NAL (Network Abstraction Layer). Par exemple, l’octet de type d’image d’une image I en H264 ressemble à 0x07, et l’en-tête est 0x000001.
    En mettant tout cela ensemble, on peut inspecter le bitstream ES et trouver les limites de GOP sans décodage. En revanche, on ne peut pas simplement couper au milieu d’un GOP : il faut soit accepter une erreur inférieure à une seconde, soit décoder tout le GOP, généralement d’environ 30 images, puis insérer une image I dans le résultat.
    Au final, le travail ressemble donc surtout à une manipulation de bits très rapide et à une copie entre conteneurs. Si l’objectif est de découper la vidéo d’origine en fragments, c’est ce qui rend ce processus très efficace.

  • Articles liés :
    LosslessCut: lossless video/audio editing - https://news.ycombinator.com/item?id=33969490 - déc. 2022 (153 commentaires)
    Lossless-cut: The swiss army knife of lossless video/audio editing - https://news.ycombinator.com/item?id=24883030 - oct. 2020 (10 commentaires)
    LosslessCut – Save space by quickly and losslessly trimming video files - https://news.ycombinator.com/item?id=22026412 - janv. 2020 (1 commentaire)
    Show HN: LosslessCut – Cross-platform GUI tool for fast, lossless video cutting - https://news.ycombinator.com/item?id=12885585 - nov. 2016 (33 commentaires)

  • À titre de référence, il existe un script bash que j’utilise pour faire des découpes avec ffmpeg. Il s’appuie sur une suggestion assez utile de Stack Overflow, et l’entrée est un fichier contenant, sur chaque ligne, les temps de début/fin en secondes.
    Si la vidéo n’a pas de son, il suffit de retirer les parties atrim/outa, et ça fonctionne presque pareil. L’idée est de découper plusieurs segments avec trim, atrim, setpts et asetpts, puis de les recoller avec le filtre concat.

    • Où sont -c copy ou -c:v copy -c:a copy ?
  • Avant qu’on se plaigne que ce soit une appli Electron de plus de 100 Mo, je précise qu’AVIDemux est une application native et fait à peu près la même chose.

  • J’ai découvert cette appli la semaine dernière et elle m’a été extrêmement utile.
    J’avais filmé toute une compétition de plongeon avec une petite caméra au bord de la piscine, et je voulais la découper en clips pour chaque plongeon.
    Dans LosslessCut, je pouvais lire aussi vite que je voulais ; pour distinguer au son les blancs entre les athlètes, un peu plus de 300 % était la vitesse maximale exploitable pour moi.
    À chaque annonce de la note d’un plongeon, j’appuyais sur B, puis, une fois tous les plongeons traités, j’ai cliqué sur exporter. En moins d’une heure, j’ai découpé une compétition de 3 heures en clips aux noms propres, partageables avec chaque athlète et chaque coach.

  • J’aime beaucoup LosslessCut et je l’utilise presque tous les jours.
    Je m’en sers surtout pour couper ou monter des enregistrements d’écran ; comme c’est sans perte, l’enregistrement de la vidéo éditée est quasiment instantané.
    En pratique, c’est presque une GUI pour ffmpeg.
    Quand je dois recompresser, j’utilise Permute, et si j’ai besoin d’ajouter des effets ou de faire du montage avec perte, j’utilise Davinci Resolve.

    • Je n’avais jamais entendu parler de Permute, mais j’utilise aussi LosslessCut et Davinci d’une manière similaire. C’est bien ça ? https://software.charliemonroe.net/permute/
      Je me demande ce que ça apporte de plus que Handbrake ou un simple appel direct à ffmpeg. Ça ressemble à une appli payante, mais ça ne me dérange pas de payer pour un logiciel si c’est vraiment mieux que les options gratuites existantes.
  • Sur GitHub, c’est sous licence GPL-2.0 ; sur le Snap Store, sous licence MIT ; et sur le Mac App Store, ça coûte 19 dollars.

    • Il est aussi possible de le télécharger gratuitement pour toutes les plateformes.
  • Je me demande s’il est possible de télécharger une vidéo depuis un serveur distant en la découpant sans perte.
    Pour l’instant, j’utilise un script bash pour ffmpeg trouvé sur Stack Overflow afin de ne télécharger que des extraits de vidéos depuis des sites comme YouTube, mais actuellement il faut réencoder à la volée pendant le téléchargement.
    Pour l’instant, je pars du principe qu’il est impossible de télécharger et découper ce type de vidéo sans perte, puisqu’on n’a pas localement les informations de la vidéo comme les images clés. J’aimerais qu’on me prouve le contraire.

    • Il m’est déjà arrivé d’extraire un extrait vidéo comme ça avec yt-dlp. 313 correspond seulement au flux vidéo 4K, mais ça devrait aussi fonctionner avec des vidéos ayant un flux 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
  • Je n’ai découvert cette appli que récemment et elle me plaît.
    J’ai maintenant du mal à croire que j’ouvrais à chaque fois une instance complète de Blender et un projet vidéo juste pour découper des clips — et que je faisais ça souvent.