Ffmpeg kullanarak videoya ek anahtar kareler nasıl eklenir?


0

Videoma belirli bir aralığın tabanına (20 kare) temel kareler eklemek istiyorum.

Bu nedenle aşağıdaki komutu kullandım ffmpeg:

ffmpeg -i <input> -vcodec libx264 -x264-params keyint=20:scenecut=0 -acodec copy out.mp4

Çıktı, her 20 karede anahtar kareler elde etmem.

Ancak, orijinal videonun ör. en frame 1, 12, 89....

Şimdi karede anahtar kareler var 1, 21, 41....

Zaten orada olan anahtar kareleri değiştirmek istemiyorum. Ek anahtar kareler eklemek istiyorum, bu şekilde görünüyor:

frame 1, 12, 21, 41, 89....

Bunu nasıl yapabilirim?

Yanıtlar:


2

Kısa cevap: Yapamazsın

Uzun cevap: FFMpeg'i reencoding ile kullanırken (örn. copy ), giriş akışındaki her görüntünün sıkıştırması açılacak ve tam bir bitmap olarak sunulacaktır. Bu, boru hattındaki bu noktada, 1, 12 ve 89 numaralı karelerin artık "özel" olmadığını, başka herhangi bir görüntüde olduklarını ima ediyor.

Ne zaman şimdi üzerinden sıkıştırma libx264, anahtar kareleri olan bir video oluşturursunuz - bunlar, her 20 karede bir, sizin yapılandırdığınız yerlere yerleştirilir.


Bu mantıklı görünüyor, cevabınız için teşekkürler! Ama ne olur, 11 ve 12 numaralı kareler arasında tam bir sahne değişikliği olduğunda ve sadece 1, 21, ... karesinde anahtar kareler elde edersem ne olur? Bu durumda 12. karede bir anahtar kareye ihtiyacım yok mu?
jjulianf

Ancak önceki ana kareleri kullanarak sonradan elle ekleyebilirim. force_key_frame, sağ?
jjulianf

2
Neden sonra kullanmak scencut=0 ? Scencut büyüsünü yapsın!
Eugen Rieck

@jjulianf Bu konuda sormak için sorunuzu yeniden yazmak gerekiyor gibi görünüyor gerçek Sahip olduğun sorun, çözümün düşündüğün gibi değil. (Görmek xyproblem.info Akış için düzenli aralıklara ihtiyacınız var mı?
slhck

1
Not: scenecut değeri, bitişik çerçeveler arasındaki delta ölçümünü temsil etmez. scenecut ayrıca, son ana kareden uzaklığı da dikkate alır, bu nedenle düşük keyint değeri ile, sonuncusu çok yüksek ayarlanmadıkça senaryo asla tetiklenemez.
Gyan

1

force_key_frames kaynak akışının ana kare kaidesini yansıtma seçeneğine sahiptir (henüz belgelenmemiş - benim işimde), ancak bu f_k_f içindeki diğer ifadelerle birleştirilemez.

Ancak, ne kullanabilirsiniz

-force_key_frames source -x264-params keyint=20:scenecut=0

Kaynak çerçeve bir anahtar kare ise bu bir anahtar kare belirler. Ancak keyint her zaman son anahtar kare kümesinden ölçülür, bu nedenle kaynağınızda KF'ler varsa n=0,34,55,64 o zaman sonuç KF’ler olacaktır. n=0,20,34,54,55,64,84 - KF’lerin eksikliğini 40,60,80. Ayrıca ardışık KF’leri 54,55, bu yüzden kaynak KF'leri yoksaymak ve senaryoyu çalışmasına izin vermek en iyisidir.


Teşekkürler, bu seçenek hakkında bilmek güzel! Ancak tam olarak istediğim şey değil, çünkü tam karelerdeki anahtar karelere ihtiyacım var. Ama yine de ilginç bir seçenek!
jjulianf

-force_key_frames source, dediği gibi, ayarlar anahtar karelerdeki tam kareler.
Gyan

Evet ama demek istediğim n=0, 20, 34, 40, 55, 60, 64, 80... . Ancak üst yorumda dediğim gibi, video ilk çözümümde hala harika oynuyor.
jjulianf

Bu senin keyint = 20 yüzünden. Çok büyük bir değere (9999) ayarlarsanız, kaynak KF'ler tam olarak çoğaltılır.
Gyan
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.