Ffmpeg kullanarak kesin karelerde nasıl kesim yapılır?


22

Kesin zamanlarda video dosyalarını kesmek için ffmpeg kullanmaya çalışıyorum. Ffmpeg yardım başlangıç ​​çerçevesini belirtmek için bir seçenek -timecode_frame_start gösterir, ancak bu komutu çalışması için alamıyorum. Ortaya çıkan video her zaman orijinal videonun başında başlar. İşte çalıştırdığım komutun bir örneği:

ffmpeg -i input.mpg -acodec copy -vcodec copy -timecode_frame_start 200 -vframes 210 -n ouput.mpg

Sonuçlarda değişiklik olmadan diğer seçeneklerden önce ve sonra timecode_frame_start seçeneğini taşıdım. Belirtmem gereken ek bir seçenek var mı? Ben çeşitli dosya formatlarını denedim, mkv, avi, mp4, ve bu sorun codec ile ilgili görünmüyor. İşte denediğim bir dosya:

http://www.seaotter.com/marine/movies/hermit-long-01.mpg

Bir şey mi kaçırıyorum?


Bu, posta listesinde cevaplandı (ve -vcodec kopyasıyla kareye özel kesim
yapamayacağınız NB'nin

@ user39364 Posta listesine sordum ve bu seçeneğin OP'nin istediği şeyi yapmadığı ortaya çıktı. Ayrıca yeni bir şey öğrendim :)
slhck

Sadece kullanarak tam kareleri kesmek için bir yöntem bulduğumu not etmek istedim melt, bkz . Komut satırından doğru şekilde video dosyaları kesmek - Süper Kullanıcı
sdaau

Yanıtlar:


46

Az önce bunun timecode_frame_startböyle çalışmadığını öğrendim . Belirli karelerden başlamanın tek yolu, birkaç kareyi ss.mssözdizimine dönüştürmektir hh:mm:ss.ms. Videonuz 25 kare / saniyede ise ve 133 kare ile başlamak istiyorsanız,

133/25 = 5,32

Yani koş

ffmpeg -ss 5.32 -i input.mp4 -c:v libx264 -c:a aac out.mp4

-c:v copyTüm kareler kodlanmış olmadığından ve kendi başlarına duramayabileceğinden, bit akımı kopyasıyla ( ) kesin karelerin kesilmesinin mümkün olmadığını unutmayın.

-ss her zaman kare hassasiyetinde olur.

Belirli sayıda kareyi kodlamak istiyorsanız -frames:v, örneğin şunu kullanın :

ffmpeg -ss 5.32 -i input.mp4 -c:v libx264 -c:a aac -frames:v 60 out.mp4

Ayrıca video filtreleri kullanma seçeneğiniz de vardır , ancak ses desteği tam olmayabilir. Ve görünüşe göre, çerçeve aramak hala bir özellik değil. Daha fazla bilgi için bu FFmpeg kullanıcıları posta listesi iş parçacığını takip edebilirsiniz :

-vf selectdoğru çerçeve seçimi için kullanabilirsiniz ( -vf 'select=gte(n\,100)'ilk 100 kareyi atlamak gibi )


3
10 dakikadan uzun süren kare (örneğin 29.97fps) içeren videolar için; belirli bir kare için zamanı doğru bir şekilde nasıl hesaplarsınız?
GFoley83

select=gte(n\,100)yöntem çalışır ancak arayan performansını yiyor. Bir seferde yalnızca 30 kareyi kodlayarak test ederseniz, Başladığım videoya daha fazla girilirse, arama nedeniyle daha uzun ffmpeg tamamlanır.
Adam Grant

6

Seçenek

-vf select = “(n \, start_frame_num \, end_frame_num ) arasında, setpts = PTS-STARTPTS"
Örneğin,

-vf select=“between(n\,200\,300),setpts=PTS-STARTPTS"

videoyu 200. - 300. kare arasında (içerir) keser, sıra sayımı 0'dan başlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.