FFmpeg'deki “sameq” veya “same_quant” seçeneği nedir? “Aynı kalite” anlamına mı geliyor?


29

Genellikle, sameqörneğin FFmpeg komutlarını kullanarak seçeneği gördüm.

ffmpeg -i input.mp4 -sameq output.avi

Ne anlama geliyor? "Aynı kalite" anlamına mı geliyor? Değilse, onun yerine ne kullanmalıyım?

Yanıtlar:


57

sameq "aynı kalite" anlamına gelmez

Web üzerindeki çeşitli kaynaklar sameqveya same_quantseçeneğin kullanılmasını teşvik eder , fakat özünde yanlıştır. Kullanmak sameqsize girdiyle aynı kalitede bir sonuç vermez.
Hiç kullanmayın.

Bu karışıklığın kaynağı, bu seçeneğin kullanılmasının aynı kaliteyi sağlayacağını ima eden kötü yazılı belgelerdi. Neyse ki, seçenek kaldırıldı.

İşte FFmpeg belgelerinin söylediği:

Bunun aynı DEĞİL KALİTE olmadığını unutmayın. İhtiyacınız olmadığını bilmiyorsanız bu seçeneği kullanmayın.

Aslında FFmpeg geliştiriciler vardı adını değiştirdi gelen sameqetmek same_quantemin olmak için biraz, sonra kaldırıldı sameq/same_quant hepten; Bu seçenek, son FFmpeg'de bulunmadığı anlamına gelir, ancak bu makale daha eski FFmpeg sürümleri kullananlar için faydalıdır.


Video sıkıştırma nasıl çalışır?

Şimdi bunu düzelttikten sonra, biraz teknik ayrıntıya girelim.

Neden güvenilir şekilde çalışmadığını anlamak için, ortak bir video kodlayıcı için "kalite" nin ne anlama geldiği ve kaliteyi etkileyen kavramın anlaşılması gerekir. Farklı bit hızlarıyla sıkıştırıldığında neden bir video diğerinden daha iyi görünüyor? Bir dönüşümü kayıp eden nedir ve kodlama sonrası video neden orijinalinden daha küçük?

Videoyu kodladığınızda, giriş verileriniz önce piksel bloklarına matematiksel bir dönüşüm uygulanarak farklı bir boyuta dönüştürülür. Çoğunlukla Ayrık Kosinüs Dönüşümü olan bu dönüşüm, videoda 8 × 8 piksellik bir alanı tanımlayan bir sayı matrisi oluşturur.

Böylece, 8 × 8 pikselleriniz ve karşılık gelen matris başlangıçta şöyle görünür: 1

Gerçek görüntü  

Ancak bu çok fazla veri! Eğer videoyu sıkıştırmak istiyorsak, sayılardan sağ alt tarafa doğru kurtulabiliriz. Bunun tam olarak neden olduğunu açıklamayacağım, ancak diyelim ki sol üstteki sayıların böyle bir bloğu tanımlarken daha önemli olduğunu söyleyelim. Dönüşümün tüm fikri temelde soldaki önemli şeyleri koymaktır.

Sağ alttaki sayıları kaldırmak için onları sıfır yapabiliriz. Eğer bir şey "hiçbir şey" ise, ya da sadece 0s olarak yineleniyorsa, onu saklamak zorunda kalmayacağız ve bu şekilde yerden tasarruf edeceğiz. Matematiksel olarak, bu ilk matrisi, bir "niceleme matrisi" olarak başka bir matris uygulayarak ölçmemiz gerekir .

Bu, şimdi önemli ölçüde daha az sayıda ve bir sürü sıfır içeren bir matrisle sonuçlanacaktır:

Sıkıştırılmış görüntü  

Bunun sonucu, çok sayıda sayı içeren ilk yüksek kaliteli matrisi, aynı 8 × 8 piksele hala benzeyen bir matris haline getirdik, ancak daha az kalitede çünkü bu pikselleri tanımlamak için daha az sayıya sahip olduk. Bloğu görsel olarak karşılaştırırsanız, benzerdirler, ancak artık aynı değillerdir.

Burada, niceleme matrisi kaliteyi belirler . Bu önemli. Farklı kalite için farklı niceleme matrislerini kullanabiliriz. Bazı kantifikasyon matrisleri orijinal matrisi neredeyse bozulmadan bırakır, diğerleri değil Kaldırabileceğimiz fazla sayılar, kötü kalite alacak ancak daha temelde burada sıfır "atmak" çünkü biz videoyu sıkıştırabilir.

Bunun ne alakası var sameq?

Bir videoyu kodladığınızı ve belirli bir kaliteyi belirlemek istediğinizi varsayalım. Daha önce öğrenmiş olduğumuz gibi, farklı niceleme matrisleri farklı kalitelere yol açar, bu yüzden kodlayıcımızın kaliteyi kullanmasını söylediğimizde x, bu ykaliteyi elde etmek için ne olursa olsun, kaliteye uygun matrisleme matrisini seçecektir . Sonuç, ymatris kullanılarak sıkıştırılmış bir videodur . 2

Ve işte ilginç kısım: sameq"aynı miktarlandırıcı" anlamına geliyor. "Aynı kalitede" değil. Yakın zamanda FFmpeg olmayan bir sürümünüz varsa, onu hala içinde bulabilirsiniz ffmpeg --help:

ffmpeg --help 2>&1 | grep sameq

Yani, şimdi dönüştürülen videoyu çektiğinizde ve tekrar kodladığınızda ve sameqseçeneği uyguladığınızda , FFmpeg, basitçe konuşursak, giriş videosu için kullanılan aynı niceleme matrislerini seçecektir.

Bu biraz bir XviD videoya bir XviD videodan dönüştürme yaparken örneğin giriş ve çıkış için aynı codec'i kullandığınızda çalışır, ancak yine de kötü kalite ile sona erecek. 3 Bu zaten kodlanmış olan bir şeyi kodlamaktan daha fazla bilgiyi atacağı için. Yukarıdaki örnekte, matrisimizde daha da sıfır oluşturacağız ve sonuç daha kötü görünecek.

O mu değil tüm farklı video codec arasında çalışacak. XviD kodlu bir videoyu x264 ile dönüştürdüğünüzü varsayalım. 4 Bu iki kodek için, dahili olarak kullanılan niceleme matrisleri farklıdır - aynı katsayılara sahip değillerdir. Yani bu seçenek bile mantıklı değil! Ne yazık ki, FFmpeg hala kullanmanıza izin veriyor.

Alt satır: Ne yaptığınızı özellikle bilmiyorsanız, lütfen bu seçeneği kullanmayın. Videonuzu farklı bir codec bileşeniyle kodlamak, ancak kaliteyi korumak isterseniz, kaliteyi denemeniz ve yalnızca kaliteyi kendiniz ayarlamanız gerekir. Sonucun yeterli olup olmadığını görün ve eğer değilse, daha yüksek bir kalite belirleyin. Bu yapabileceğin kadar.

Son olarak, yeniden kodlama yaparken kalitenizi nasıl koruyacağınızı okumak için aşağıdaki yayınlara göz atın:


1) Matris buradaki resme karşılık gelmiyor, gerçekten. Bu sadece bir örnek.
2) Aslında, bugünlerde çoğu kodlama işlemi yalnızca bir matris kullanmıyor . Belirli bir bit hızı ayarladığınızda, kodlayıcı saniyede ortalama bit hızı elde etmek için farklı matrisler kullanır. Benzer şekilde, belirli bir kaliteyi ayarlarken, modern kodlayıcılar içeriğe bağlı olarak farklı matrisler kullanır. Bunun nedeni, bazı içeriklerin diğerlerine göre sıkıştırmak için "daha kolay" olması ve aynı sıkıştırma faktörünü elde etmek için daha az nicelendirme gerektirmesidir.
3) Örnek: ffmpeg -i input.avi -sameq -c:v libxvid output.avi. Bunu kullanmayın. Lütfen.
4) Örnek: ffmpeg -i input.avi -sameq -c:v libx264 output.mp4. Bunu da kullanmayın. Ciddiyim.


-sameqseçenek kaldırıldı ve daha sonra avconv'dan kaldırıldı
AzizSM
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.