Yüksek kaliteli bir videoyu [kapalı] kodlamak için ffmpeg kullanma


92

Bir dizine görüntü olarak kaydedilmiş bir dizi video karem var ve bunları kaliteli bir video olarak kodlamaya çalışıyorum, ancak denediğim her ayar ve her format çok dikkat çekici eserler üretiyor.

Temel komut şudur:

ffmpeg -r 25 -i %4d.png myvideo.mpg

ve minrate ve maxrate bayraklarını denedim. {Mpg, avi, mov, flv} biçimlerinden herhangi biri işe yarar.

Ayarlar için herhangi bir öneriniz var mı? Son dosya boyutu bir sorun değildir.


7
Benim Mac'te, aşağıdaki komutu kullanın: ffmpeg -r 20 -f image2 -i myImage%04d.png -f mp4 -q:v 0 -vcodec mpeg4 -r 20 myVideo.mp4. Kare hızını zorlamak için onu hem girdi hem de çıktı dosyaları için belirtmem gerektiğini buldum. Bu codec bileşeni benim için çalışıyor gibi görünüyor - bunu belirtmeniz gerekmeyebilir. Sadece yaptığım şeyi eklemek istedim çünkü üzerinde çalışmak için çok zaman harcadım. Tek dezavantajı, girdi resimlerimin yüksek kontrastlı olması (beyaz bir arka plana karşı mavi ve kırmızı toplar) ve daha sonra filmde topların hepsinin aynı koyu renge dönüşmeye başlaması - istenmeyen bir kontrast efekti.
jvriesem

Teşekkürler @jvriesem! Bu benim için harika çalıştı.
Dan Loewenherz


c ++ version stackoverflow.com/a/43464269/6180077 FFMPEG c ++ mp4 formatlı ekran kaydedici uygulamasında çalışmak için bu bağlantıyı ziyaret edin.
Abdullah Farweez

Programatik olarak FFMPEG
kitaplıkları

Yanıtlar:


64

Birkaç şey:

  • Video bit hızını ayarlamanız gerekiyor. Asla minrate ve maxrate kullanmadım, bu yüzden tam olarak nasıl çalıştıklarını bilmiyorum, ancak -banahtarı kullanarak bit hızını ayarlayarak yüksek kaliteli video elde edebiliyorum. Sıkıştırma ve video kalitesi arasında iyi bir denge sağlayan bir bit hızı bulmanız gerekir. Her şey kare boyutuna, kare hızına ve videonuzun içeriğindeki hareket miktarına bağlı olduğu için bunu denemeniz gerekebilir. DVD'nin 720x480'de ortalama 4-5 Mbit / s olma eğiliminde olduğunu unutmayın, bu yüzden genellikle oradan başlayıp daha fazla veya daha azına ihtiyacım olup olmadığına karar veriyorum ve sonra sadece deney yapıyorum. Örneğin, -b 5000kdaha fazla veya daha az DVD video bit hızı elde etmek için komut satırına ekleyebilirsiniz .

  • Bir video codec bileşeni belirtmeniz gerekiyor. Bunu yapmazsanız, ffmpeg varsayılan olarak oldukça eski olan ve MPEG-4 veya H.264 kadar sıkıştırma miktarı sağlamayan MPEG-1'i kullanır. Ffmpeg sürümünüz libx264 desteği ile -vcodec libx264oluşturulmuşsa, komut satırının bir parçası olarak belirtebilirsiniz . Aksi takdirde -vcodec mpeg4MPEG-1'den daha iyi bir iş çıkarır, ancak x264 kadar iyi değildir.

  • En düşük bit hızlarında en iyi kaliteyi elde etmenize yardımcı olacak birçok gelişmiş seçenek var. Bazı örnekler için buraya bir göz atın .


6
Sabit bit hızı kalite için kötüdür. Sabit oran faktörünü kullanmak daha üstündür (x264 çalışma modlarından biridir). Örneğin: ffmpeg -i … -c:a copy -c:v libx264 -crf 18 -preset veryslow …. 18, çok marjinal kalite kaybına sahip CRF'dir, ancak bit hızı muhtemelen düşük olacaktır. Daha küçük dosya boyutuna ihtiyacınız varsa daha büyük CRF değerlerini deneyebilirsiniz. Ve gördüğünüz gibi, bu oldukça basit.
Görünen Ad


47

Video bit hızını artırmak için -vb seçeneğini belirtmeniz gerekir, aksi takdirde daha küçük videolar ancak daha fazla yapaylık içeren varsayılanı alırsınız.

Bunun gibi bir şey dene:

ffmpeg -r 25 -i %4d.png -vb 20M myvideo.mpg


1
bu benim için iyi çalışıyor, teşekkür ederim;)
thiago.adriano26

16

Videoyu oluşturmadan önce PNG'lerin tamamen opak olduğundan emin olun

örneğin imagemagick ile onlara siyah bir arka plan verin:

convert 0.png -background black -flatten +matte 0_opaque.png

Testlerime göre, ffmpeg PNG'leri şeffaflıkla beslerseniz videonun iyi görünmesi için hiçbir bit hızı veya codec yeterli değildir


Bu benim için sorunu çözdü.
Matěj Kripner

Bu ipucu, gerçekten sinir bozucu düşük video kalitesini çözdü. Çok teşekkürler.
dasmy

0

Bir tür sonradan işleme çalışması yapmazsanız, video asla orijinal karelerden daha iyi olmayacaktır. Ayrıca tıpkı bir flip-kitap gibi, ana kareler arasında büyük bir "atlama" yaparsanız komik görünecektir. Yumuşak animasyon sağlamak için genellikle anahtar kareler arasında yeterli "ara" olması gerekir. HTH


Görüntüler orijinal olarak bir video dizisinden. Sadece biraz kırpma, ölçeklendirme ve imagemagick ile yapılmayan şeyler oldu. Etkileri kesinlikle sıkıştırma eserleridir. Bir cevabı var gibi görünen bu
gönderiyi

@CakeMaster Kayıplı sıkıştırmadan bahsetmedim çünkü örneğinizde ".png" resimleri var. .png'ler kayıplı olabilir, ancak genellikle öyle olmadıklarını görüyorum. .jpg'ler neredeyse her zaman kayıplıdır, bu nedenle onları kullanırken artefaktlar vardır. Yapabiliyorsanız, .png'lerinizi kayıpsız sıkıştırmayla yeniden kaydedebilirsiniz.
JustBoo
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.