iMovie (kayıpsız değil, öncekinden daha iyi)
iMovie v10 (soru başlangıçta sorulduktan bir süre sonra serbest bırakıldı) artık daha fazla medya türünü daha iyi işliyor , bu nedenle çoğu H.264 (mp4, m4v, mov, AVHDC, mts, mt2s) içeriğinin yeniden içe aktarılmasını engelliyor.
Bununla birlikte, ihracatta yeniden kodlanacak, bu yüzden teknik olarak kayıpsız olamaz - ancak başka bir yeni özellik, kayıpsızlığa daha yakın olabilen ihracat kalitesini özelleştirme yeteneğidir. Cevabın bu kısmının diğer 'proje odaklı' video düzenleme yazılımlarına (ör. Premiere veya Final Cut) eşit olarak uygulanabileceğinden şüpheleniyorum, çünkü bunların hepsinin çıktıda genellikle yeniden kodlandığını düşünüyorum, ancak genellikle hassas kırpma için kullanımı çok kolay.
Şahsen, genellikle tek bir yeniden kodlamanın büyük bir sorun olmadığını düşünüyorum, ancak özellikle kayıpsız bir çözüm istediğini anlayın, bu yüzden ...
Kayıpsız (ama çok daha karmaşık!)
Bir videoyu en azından bir kısmını yeniden kodlamak zorunda kalmadan ne kadar kesin olarak kesebileceğiniz konusunda teknik sınırlamalar vardır ve temel olarak i-kare frekansına bağlıdır. Her kare bir i-karesi ise, herhangi bir yerde kesebilirsiniz, ancak yalnızca birkaç saniyede bir ise, içerik kaybetmeden veya yeniden kodlamak zorunda kalmadan (i en azından bir parçası) bu i-karelerde kayıpsız olarak kesebilirsiniz. akışı) bir i-frame ile başlayabilir.
ffmpeg
Bu SO Q&A , i-frame'leri kullanarak nasıl kesileceği sorusunu özellikle gündeme getiriyor ffmpeg
. Bunu yapmak için herhangi bir GUI uygulaması bilmiyorum, ama temelde aşağıdaki gibi bir komut çalıştırın:
ffmpeg -i input.m4v -vcodec copy -acodec copy -ss 00:01:20.000 -t 00:37:50.000 output.m4v
Belirtilen iki zaman başlangıç ve süredir ve saniye veya saniye olarak belirtilebilir hh:mm:ss.ss
ve -acodec copy
ve -vcodec copy
ffmpeg'e yeniden kodlamamasını söyler.
Tam olarak emin çok erken kesmek ne olur değilim, ama ben düşünüyorum o bir i-frame karşılaşıncaya dek Video (oynatıcıya göre, ya da belki bozuk) esasen boştur. Yani muhtemelen kesiminizden önce en yakın i-kareyi bulmak isteyeceksiniz. Bu cevap , ffprobe
ve awk
biraz garip olsa da, bu sorunu çözer . Esasen ffprobe
kareleri taramak ve flags=K
ideal kesme noktanızdan önce en yakın ana kareyi ( ) bulmak için kullanılır . Videonun her bir karesi için tam çıktı şu şekilde görülebilir:
ffprobe -select_streams v -show_frames <INPUT>
Bağlantılı yanıt, belirli bir süreden önce bir ana kare bulmak için bu komutu sağlar:
ffprobe -select_streams v -show_frames -v quiet INPUT.mp4 |
awk -F= '
/pict_type=/ { if (index($2, "I")) { i=1; } else { i=0; } }
/pkt_pts_time/ { if (i && ($2 >= 150)) print $2; }
' | head -n 1
Ve son olarak, gerçekten iki i-kare arasında bir yeri kesmeniz gerekiyorsa, videoyu bölebilir ve yeniden katılabilirsiniz. Bu cevabın bilgisine dayanarak, şöyle bir şey olmalı:
ffmpeg -f concat -i list_of_videos.txt -c copy OUTPUT.mp4
list_of_videos.txt
Birleştirmek istediğiniz dosyaları listeleyen basit bir metin dosyası nerede .
özet
iMovie muhtemelen çoğu durumda (v10'dan beri) yeterince iyidir ve çok kolaydır.
ffmpeg biraz kayıpsız olarak kayıpsız (veya kayıpsız çok yakın) yapabilir; zorluk seviyesi, kesin başlangıç noktası ve i-frame'lerin sıklığı konusunda ne kadar seçici olduğunuza bağlıdır.