LosslessCut: Kayıpsız video/ses düzenleme için İsviçre çakısı
(github.com/mifi)- LosslessCut, video, ses, altyazı ve benzeri medya dosyalarını çok hızlı ve kayıpsız işlemek için tasarlanmış, platformlar arası bir FFmpeg GUI aracıdır
- Temel işlevi; kamera, GoPro, drone vb. cihazlardan çıkan büyük video dosyalarını yavaş yeniden kodlama olmadan kabaca kesip yalnızca iyi kısımları bırakmak ve çok miktarda veriyi atmak için kayıpsız kırpma/kesme sunmaktır
- Çoğu işlem, FFmpeg tabanlı neredeyse doğrudan veri kopyalama ile gerçekleştirilir; reklam kaldırma, segmentleri yeniden sıralama, aynı codec parametrelerine sahip dosyaları birleştirme ve parça çıkarma·değiştirme·kaldırma gibi işlemleri destekler
- Chromium HTML5 video oynatıcısını kullandığı için yerel oynatma tarafında desteklenen format ve codec'lerle sınırlıdır; ancak FFmpeg destekli oynatma ile düşük kaliteli bir proxy oluşturup açabilir, gerçek kesme/dışa aktarma işlemlerini ise özgün dosya üzerinde kayıpsız şekilde yapabilir
- macOS, Windows ve Linux için manuel indirme ücretsizdir; Mac App Store ve Microsoft Store kurulumları ise güvenlik, kolay kurulum ve otomatik kararlı güncellemeler sunan bir destek yöntemi olarak yönlendirilir
LosslessCut'ın çözdüğü sorun
- LosslessCut, video, ses, altyazı ve ilgili medya dosyaları için hızlı ve kayıpsız işlemler sunan, platformlar arası bir FFmpeg GUI olmayı hedefler
- Temel kullanım amacı, büyük video dosyalarından yalnızca gerekli bölümleri hızlıca çıkarıp geri kalan veriyi atmaktır
- Video kamera, GoPro, drone vb. cihazlarla çekilmiş büyük dosyalar kabaca kesilerek alan tasarrufu sağlanabilir
- Yavaş yeniden kodlama yapılmadığı için kalite kaybı önlenir
- Çok yüksek hız, işlemleri FFmpeg'in yapması ve LosslessCut'ın neredeyse doğrudan veri kopyalama yaklaşımını kullanmasından gelir
Başlıca düzenleme özellikleri
- Çoğu video ve ses formatı için kayıpsız kesme desteklenir
- Video ve sesin belirli bölümleri kayıpsız şekilde çıkarılabilir; bu da reklam kaldırma gibi işler için kullanılabilir
- Video ve ses segmentlerinin sırası kayıpsız şekilde yeniden düzenlenebilir
- Rastgele dosyaların kayıpsız birleştirilmesi/ardışık bağlanması desteklenir; ancak aynı kameradan çıkan dosyalarda olduğu gibi aynı codec parametreleri gerekir
- Smart cut deneysel bir özellik olarak sunulur
Parça, metadata ve kapsayıcı işlemleri
- Çoklu parça/akış düzenleme desteklenir
- Birden fazla dosyadan rastgele parçalar birleştirilerek videoya müzik veya altyazı parçası eklenebilir
- Gereksiz parçalar kaldırılabilir
- Yalnızca bazı parçalar değiştirilebilir veya yeniden kodlanabilir
- Video, ses, altyazı, ek dosya vb. tüm parçalar ayrı dosyalar olarak çıkarılabilir
- Tüm parçaların teknik bilgileri görüntülenebilir; dosya metadata'sı, parça bazlı metadata ve parça bazlı disposition düzenlenebilir
- Oynatılacak video ve ses parçaları seçilebilir; birden fazla ses parçası aynı anda oynatılabilir
- Video ve ses, başka kapsayıcı dosya biçimlerine kayıpsız remux edilebilir
- Videonun dönme/yön metadata'sı değiştirilebilir
- MKV/MP4 gömülü chapter işaretleri düzenlenebilir ve altyazılar görüntülenebilir
Zaman çizelgesi ve iş akışı
- Hızlı çoklu dosya iş akışı sunar, ancak toplu/batch dışa aktarma henüz yoktur
- Klavye kısayolu odaklı iş akışı ve özelleştirilebilir kısayollar desteklenir
- Kesim noktalarının zamanları elle girilebilir
- Dosya bazında timecode offset uygulanabilir ve dosyadan timecode otomatik yüklenebilir
- Zaman çizelgesi yakınlaştırma, frame/keyframe atlama, video küçük görselleri ve ses dalga formu sunulur
- Kesim segmentleri proje dosyasına kaydedilebilir
- Çalıştırılan son FFmpeg komutunun günlüğü görüntülenebilir; son komut düzenlenip komut satırında yeniden çalıştırılabilir
- Geri al ve yinele desteklenir
- Gelişmiş segment sorguları ve dönüşümleri için JS tabanlı bir ifade dili sunulur
- Kesim segmentleri etiketlenebilir ve tag'lerle notlanabilir
Görüntü çıkarma, algılama ve segment oluşturma
- Videodan tam çözünürlüklü anlık görüntüler JPEG/PNG olarak çıkarılabilir
- Video frame aralıkları görüntü olarak dışa aktarılabilir
- Her n'inci frame, saniye bazlı, sahne geçişi bazlı, en iyi thumbnail yöntemi vb. desteklenir
- Yalnızca seçilen zaman aralığından, yani segmentten dışa aktarım yapılabilir
- Görüntü dosyası adına özgün timestamp eklenebilir
- Siyah ekran algılama, sessiz ses algılama ve sahne geçişi algılama desteklenir
- Zaman çizelgesi uzunluk L, boyut X MB, N segment veya rastgele segmentler halinde bölünebilir
- Tüm non-keyframe'ler çok hızlı şekilde kaldırılabilir; bu da timelapse gibi kullanım senaryolarına uygundur
İçe aktarma·dışa aktarma ve otomasyon
- Segment içe aktarma/dışa aktarma desteklenir
- MP4/MKV chapter işaretleri
- Metin dosyası
- YouTube
- CSV
- CUE
- DaVinci ve Final Cut Pro için XML
- Diğer formatlar
- Temel CLI ve HTTP API sunulur
- HTTP üzerinden video kayıpsız indirilebilir; örnek olarak HLS
.m3u8verilir - DJI gömülü GPS izi harita üzerinde gösterilebilir
Örnek kullanım senaryoları
- Kaydedilmiş bir TV programından reklamlar kesilip biçim TS'den MP4'e dönüştürülebilir
- Dosyadan bir ses parçası kaldırılabilir
- Videodan müzik parçası çıkarılıp gerekli uzunlukta kesilebilir
- Videoya müzik eklenebilir veya mevcut ses parçası değiştirilebilir
- Ayrı kaydedilmiş ses ve video parçaları birleştirilebilir
- Harici altyazılar videoya dahil edilebilir
- H264/H265 MKV videolar iPhone'da oynatma için hızlıca MOV veya MP4'e dönüştürülebilir
- Başka araçlarla oluşturulmuş EDL, CSV gibi kesim zaman listeleri içe aktarılıp kesimler LosslessCut içinde uygulanabilir
- Kesim zaman listeleri CSV EDL olarak dışa aktarılıp başka araçlarda işlenebilir
- MP4/MKV chapter'larına göre dosyalar hızlıca kesilebilir
- YouTube video chapter'lara veya yorumlardaki müzik zamanlarına göre hızlıca kesilebilir
- Ses ve altyazı parçalarının dili değiştirilebilir
- Harici JPEG dosyaları veya zaman çizelgesi frame'lerinden kapak görseli·thumbnail video ya da sese eklenebilir
- Videonun yazarı, başlığı, GPS konumu ve kayıt zamanı değiştirilebilir
- Yanlış yön bayrağı ayarlanmış videolarda dönme düzeltilebilir
- Yeniden kodlama olmadan video ve ses klipleri X kez hızlı tekrar ettirilebilir
- Videonun tamamı veya bir bölümü X adet görüntü dosyasına dönüştürülebilir, ancak bu işlem kayıpsız değildir
- Video, her sahne bir dosya olacak şekilde kayıpsız bölünebilir
- Ses ve videodaki sessiz bölümler kesilebilir
- Twitter'ın 140 saniye sınırı gibi koşullara uymak için video segmentlere ayrılabilir
- Her segmente bir veya daha fazla tag eklenebilir; tag'ler segmentleri düzenlemek veya çıktı klasör yapısı oluşturmak için kullanılabilir
- Ek örnekler Recipe cookbook içinde bulunur
İndirme ve destek modeli
- Mac App Store ve Microsoft Store kurulumları; güvenlik, basit kurulum ve otomatik kararlı güncellemeler sunan bir yöntem olarak yönlendirilir
- Linux alternatifi olarak Snapcraft ve Flathub sunulur
- Çalıştırılabilir dosyaların manuel indirilmesi ücretsiz olmaya devam eder
- macOS: Intel ve Apple Silicon için DMG sunulur; PKG çalışmaz
- Windows: 7zip sunulur; Windows 7, 8 ve 8.1 artık v3.50.0 sonrasında desteklenmez
- Linux: x64 tar.bz2, x64 AppImage, arm64 tar.bz2, Raspberry Pi armv7l tar.bz2 sunulur
- Windows APPX ve macOS PKG çalışmaz
- More releases ve Latest nightly builds 🧪 sunulur
- LosslessCut'ın tek bir kişi tarafından sürdürüldüğü ve her zaman ücretsiz açık kaynak olarak kalacağı belirtilir
- Kullanıcılar projeyi destekleyebilir veya FFmpeg'e bağış yapabilir
Desteklenen formatlar ve oynatma kısıtları
- LosslessCut, Chromium HTML5 video oynatıcısı kullandığı için tüm formatlar ve codec'ler yerel olarak desteklenmez
- Genelde çalışan dosya formatları
MP4,MOV,WebM,Matroska,OGG,WAVolarak belirtilir - Desteklenen ses codec'leri
FLAC,MP3,Opus,PCM,Vorbis,AAC'dir - Desteklenen video codec'leri
H264,AV1,Theora,VP8,VP9ve donanım çözücüsü bulunanH265'tir - Listede olmayan codec ve formatlar da
Filemenüsünden desteklenen format/codec'e dönüştürülerek açılabilir- Önce Fastest: FFmpeg-assisted playback seçeneğinin denenmesi önerilir
- Bu durumda dosyanın düşük kaliteli bir sürümü oluşturulup oynatıcıda açılır
- Gerçek kesme/dışa aktarma işlemleri özgün dosya üzerinde yapıldığı için kayıpsızdır
- FFmpeg'in çözebildiği dosyalar potansiyel olarak açılabilir
Belgeler ve demo
- Resmi web sitesi LosslessCut.app'dir
- Başlangıç, SSS ve kullanım belgeleri Getting started, FAQ and usage documentation sayfasında yer alır
- Sorun giderme, bilinen sorunlar ve sınırlamalar Troubleshooting and known issues and limitations sayfasında bulunur
- Katkı rehberi Contributing içindedir
- Video demoları; ortak özellikleri, MP4 thumbnail·kapak görseli eklemeyi ve çok dilli ses eklemeyi kapsar
1 yorum
Hacker News görüşleri
Eski Windows medya PC günlerinde kullandığım VideoReDo adlı sihirli uygulamanın açık kaynak rakibi gibi görünüyor
Ne yazık ki VideoReDo, bağımsız bir geliştiricinin yaptığı kapalı kaynak bir yazılımdı ve o geliştirici yakın zamanda hayatını kaybetti
“Kayıpsız” video düzenlemenin ne olduğu konusunda fikri olmayanlara açıklamak gerekirse, normal video düzenleyiciler video/ses kliplerini içe aktarır, zaman çizelgesini Pitivi/Premiere/Final Cut gibi uygulamaya özgü bir biçimde kaydeder, sonra da bitmiş işi MP4/MOV gibi bir çıktı biçimine aktarırken tamamını yeniden kodlar
Bu yüzden 1 saatlik bir videodan yalnızca 30–90 saniye kesmek isteseniz bile 1 saatin tamamını yeniden kodlamanız gerekir; kaynak kodlama ile yeniden kodlama ayarları uyuşmazsa görüntü/ses kalitesinde istemeden değişiklikler oluşur
Buna karşılık bu tür kayıpsız düzenleyiciler, tamamını yeniden kodlamadan, bayt düzeyinde yalnızca ilgili bölümü “kesip çıkarır” gibi işlem yapar
Eski MP3’ün ilk günlerinde 96kbps dosya indirip “ses kalitesini iyileştirmek” için 320kbps’ye yeniden kodlamaya çalışmayı hatırlatıyor
Dekod etme ve yeniden kodlama yalnızca kare içeriğini değiştirmeniz ya da video akışının yapısını uyumlu olacak şekilde yeniden kurmanız gerektiğinde gerekir
Çoğu video biçimi, sırayla dekod edilip gösterilmesi gereken delta kodlamalı kareler akışıdır. Tek bir kare geri gitmek isteseniz bile baştan yeniden dekod etmeniz gerekir; bir kare bozulursa görüntüyü kaybedersiniz
Bu yüzden encoder’lar, video akışını periyodik olarak yeniden başlatmak için keyframe eklemek zorundadır. Aynı codec ve çözünürlük söz konusuysa harici video akışlarına da pratikte hemen her yere keyframe eklemek geçerlidir
Bildiğim kadarıyla düzgün doğrusal olmayan düzenleyiciler bu yöntemi kullanmaz. Çoğu kesim, basit bir GOP[0] kesme hilesiyle yaklaşık olarak temsil edilemez; ayrıca pek çok kişi son dağıtım formatında kodlanmış klipleri düzenlemez
Profesyonel düzeyde birçok kişi ProRes ile kayıt yapar; ProRes ise özellikle delta kodlama yapmaz[1]. Çünkü delta kodlama doğrusal olmayan video düzenleme için gerçekte oldukça kötüdür
[0] Group of Pictures - bir keyframe ve bir sonraki keyframe’e kadarki tüm delta kodlamalı kareler
[1] Bu yüzden boyutu inanılmaz büyüktür
1 dakika kesiyorsanız kodlanan şey 1 dakikalık kısımdır. Kaynak videonun 1 dakikadan daha fazlasının dekod edilmesi gerekebilir, ancak 1 saatin tamamını dekod etmek nadirdir
“Kayıpsız” denince ilk başta ProRes, MJPEG2000, HuffYUV gibi gerçekten kayıpsız biçimlerin düzenlenmesini düşündüm
Ama bu aracın sonuçta yaptığı şey, orijinal container’ı yeni bir container’a yeniden paketlemek; alttaki akışlara dokunmuyor. Yani yeniden kodlama yok
Ağır işi FFmpeg’e bırakması şaşırtıcı değil, ancak topluluğun bu sürecin gerçekte nasıl işlediğini anlamasında fayda var
Basitçe söylemek gerekirse mp4, mov, avi, ts gibi modern video biçimleri eninde sonunda birden fazla video ve ses parçası taşıyabilen container uzantılarıdır. Bu parçalara temel akış (Elementary Stream, ES) denir ve her biri H264/AVC, H265/HEVC, AAC gibi codec’lerle kodlanır
Sonra muxing sürecinde bunlar container içinde birleştirilir; her sample/kareye zaman damgası eklenir ve ES’ler senkronize edilir
ES kodlanmış olduğundan gezinirken kare düzeyinde kesinlik elde etmek zordur; tamamen dekod edilebilir kareler yalnızca I-frame’lerdir. Ardından gelen P/B frame’ler I-frame bilgisini temel alarak dekod edilir. Bu IPPBPPB... dizisine GOP denir
İlginç olan, akışı dekod etmeden de NAL (Network Abstraction Layer) birimlerinin header’ına bakarak kare tipini anlayabilmenizdir. Örneğin H264 I-frame’in frame type byte’ı 0x07 benzeridir, header ise 0x000001’dir
Bunları bir araya getirince ES bitstream’ine bakıp dekod etmeden GOP sınırlarını bulabilirsiniz. Ancak GOP’un ortasından öylece kesemezsiniz; bu yüzden ya 1 saniyenin altında bir hatayı kabul edersiniz ya da genelde yaklaşık 30 kare olan GOP’un tamamını dekod edip çıktıya bir I-frame eklersiniz
Sonuçta yapılan iş, çok hızlı bit manipülasyonu ve container’lar arası kopyalamaya yakındır. Amaç kaynak videoyu parçalara ayırmaksa bu sürecin çok verimli olmasının nedeni budur
İlgili yazılar:
LosslessCut: lossless video/audio editing - https://news.ycombinator.com/item?id=33969490 - Aralık 2022 (153 yorum)
Lossless-cut: The swiss army knife of lossless video/audio editing - https://news.ycombinator.com/item?id=24883030 - Ekim 2020 (10 yorum)
LosslessCut – Save space by quickly and losslessly trimming video files - https://news.ycombinator.com/item?id=22026412 - Ocak 2020 (1 yorum)
Show HN: LosslessCut – Cross-platform GUI tool for fast, lossless video cutting - https://news.ycombinator.com/item?id=12885585 - Kasım 2016 (33 yorum)
Bu arada, ffmpeg kesitleri oluşturmak için kullandığım bir bash betiği var. Stack Overflow’daki oldukça faydalı bir öneriye dayanıyor; girdi olarak her satırda başlangıç/bitiş zamanlarının saniye cinsinden yazıldığı bir dosya alıyor.
Videoda ses yoksa atrim/outa kısmını çıkarmak dışında neredeyse aynı şekilde çalışıyor. Birden fazla bölümü
trim,atrim,setpts,asetptsile kesip ardındanconcatfiltresiyle birleştirme mantığında.-c copyya da-c:v copy -c:a copynerede?Bunun 100 MB’tan büyük bir Electron uygulaması olmasından şikâyet gelecek diye şimdiden söyleyeyim: AVIDemux yerel bir uygulama ve neredeyse aynı işi yapıyor.
Geçen hafta bu uygulamayı keşfettim ve inanılmaz faydalı oldu.
Havuz kenarındaki küçük bir kamerayla tüm bir dalış yarışmasını çekmiştim ve her dalış sahnesini ayrı kliplere bölmek istiyordum.
LosslessCut’ta istediğim kadar hızlı oynatabiliyordum; sporcular arasındaki boşlukları sesten ayırt etmek için kullanabildiğim en yüksek hız %300’ün biraz üzeriydi.
Her dalışın puanı açıklandığında
Btuşuna bastım, tüm dalışlar için bunu bitirdikten sonra dışa aktara tıkladım. 3 saatlik yarışmayı, bir saatten kısa sürede her sporcu ve antrenörle paylaşılabilecek düzgün adlandırılmış kliplere böldüm.LosslessCut’ı çok seviyorum ve neredeyse her gün kullanıyorum.
Çoğunlukla ekran kayıtlarını kesmek veya düzenlemek için kullanıyorum; kayıpsız olduğu için düzenlenmiş videoyu kaydetmek neredeyse anında bitiyor.
Pratikte ffmpeg için bir GUI’ye oldukça yakın.
Yeniden sıkıştırmam gerekirse Permute kullanıyorum; efekt eklemem ya da kayıplı düzenleme yapmam gerekirse Davinci Resolve kullanıyorum.
Handbrake’e ya da doğrudan ffmpeg çağırmaya kıyasla ne fazladan sunduğunu merak ediyorum. Ücretli bir uygulama gibi görünüyor; mevcut ücretsiz seçeneklerden gerçekten daha iyiyse yazılım için para ödemekte sorun yok.
GitHub’da GPL-2.0 lisansı, Snap Store’da MIT lisansı var; Mac App Store’da ise 19 dolar.
Uzak bir sunucudan videoyu kayıpsız şekilde indirirken kesmenin mümkün olup olmadığını merak ediyorum.
Şu anda Stack Overflow’dan aldığım bir ffmpeg bash betiğiyle YouTube gibi yerlerden videonun yalnızca bir bölümünü indiriyorum, ama mevcut durumda indirme sırasında anında yeniden kodlama yapmak gerekiyor.
Şimdilik yerelde keyframe gibi video bilgileri olmadığı için böyle bir videoyu kayıpsız indirip kesmenin imkânsız olduğunu düşünüyorum. Bunun yanlış olduğunu kanıtlamanızı isterim.
313yalnızca 4K video akışı, ama ses akışı olan videolarda da çalışacak gibi.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.mkvBu uygulamayı daha yeni öğrendim ve hoşuma gitti.
Bir klibi kesmek için her seferinde Blender’ın tam bir örneğini ve bir video projesini açtığıma, üstelik bunu sık sık yaptığıma artık inanmak zor.