Sıkıştırılmış videodan çerçeve türlerini oku


1

Kod çözme bölümünün hesaplamalarını kaydetmek için sıkıştırılmış videolarla ilgili bir analiz yapmak istiyorum.

Bu yüzden sıkıştırılmış bir video okumak ve her karenin bir I / B / P karesi olup olmadığını kontrol etmek ve karenin türüne bağlı olarak belirli bir işlem (işlem) yapmak istiyorum.

Bunu kullanarak nasıl yapabilirim ffmpeg? Belgelerde sıkıştırılmış bir videonun nasıl okunacağını görmedim.

Yardımınız için teşekkürler.


Yani do not aslında çerçeve, yalnızca türünü, doğru işlemek ister misin? Bu düşük seviyeli bit akımı erişimi gerektirir, ffmpeg bununla ilgilenmez.
Daniel B,

Çerçeveleri işlemek istiyorum! @ bertieb, sorumu düzenledi ve sorunun anlamını değiştirdi. Her bir çerçeveyi, çerçevenin türü göz önüne alındığında, I, B, P
albert1905

Yanıtlar:


2

ffmpegVeya kullanarak çerçeve türünü belirlemeffprobe

Bir video dosyası üzerinde çalışmak istediğinizde çerçeve türlerini kontrol etmek istiyorsunuz. Bunu geçmişte yapmak için sebeplerim vardı. Gyan Doshi'nin SO konulu cevabı şöyledir :

ffmpeg -i input.mp4 -vf select='eq(n,334)',showinfo -f null -

Yukarıdaki videonun 335. karesi için bir çıktı üretecektir

n: 0 pts: 171008 pts_time:11.1333 pos:  1090471 fmt:yuv420p sar:1/1 s:1280x720 
i:P iskey:0 type:B checksum:A72D197D plane_checksum:[9008E835 680AC49A 6CD66C90] 
mean:[136 122 134] stdev:[65.4 7.0 9.5]

Seçim filtresini atlayıp tüm kareler için çıktı alabilirsiniz ve ardından incBrain'in yaptığı gibi grep yapabilirsiniz . Ekrandaki resim numarasının kodlanmasını istediğinizi unutmayın.

(ek bağlantı benim tarafımdan eklenen cevaplarda mevcut değil)

Nasıl gitmek istediğinize bağlı selectolarak, yukarıdaki gibi bir filtre kullanma veya tüm kareler için bilgiyi alma (kullanarak ffprobe video.mp4 -show_frames) ve çıktısını işleme alma seçeneğiniz vardır.


Cevabımda belirtildiği gibi ancak buraya yapıştırılmamışsa, grep rotasına gidecekseniz kodlanmış olmayan display_picture_number öğesini kullanın. İkincisi kodlama sırasını izler ve çerçevelerin görüntülenme sırasını temsil etmez.
Gyan

@Gyan Heads up için teşekkürler, bağlantıyı eklediğimde son satır muhtemelen kesildi
bertieb

Teşekkürler! bana çok yardım ettin. Birkaç sorum daha var (küçük olanlar): 1. Videodaki tüm kareleri geçmek istersem, sadece döngü için basit bir işlem yapabilirim: select = 'eq (n, i), değil mi? 2. Çerçeveyi “anlamlı” bir şekilde çizmenin bir yolu var mı? Bir makalede HSV kullanarak I çerçevelerini çizdiklerini, bunun için bir fikre sahip olduklarını gördüm. 3. Seçim operatörüne döngü kurarsam: "display_picture_number" a gerek yok mu? çünkü h264 / mp4’te bir sipariş sorunu olduğunu hatırlıyorum.
albert1905

Çerçeveyi okumak istediğim bir şey daha var, onun matrisini saklamak ve onun üzerinde hesaplamalar yapmak demek, mümkün mü?
albert1905

@ albert1905 Eğer takip eden sorularınız varsa, bunlar en iyi yeni sorularda ele alınmalıdır; Sorduğun bazı şeyler SÜ için çok geniş olsa da - ne elde etmek istediğine bağlı olacak
bertieb
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.