Video paylaşımı için en iyi uygulamalar

Birçok kullanıcı Android cihazını kullanarak video paylaşır. Paylaşım uygulaması tarafından gerçekleştirilen işleme nedeniyle, alınan videonun kalitesi genellikle orijinal videonun kalitesinden düşüktür. Bu dokümanda, paylaşılan videoların kalitesinin nasıl optimize edileceği ve video işlemeyle ilgili kaçınılması gereken bazı yaygın tuzaklar açıklanmaktadır. HDR video içeriğini paylaşmayı optimize etmek için bu sayfadaki HR'yi SDR'ye dönüştürmek için Dönüştürücü modülünü kullanma bölümüne bakın.

Yapmanız gereken asıl şey, video paylaşmaya hazırlanırken çözünürlüğü sabit tutmak ve video kalitesini mümkün olduğunca yüksek tutmaktır.

Paylaşım ardışık düzeni

Şekil 1'de video paylaşımı için tipik bir akış gösterilmektedir:

Video ardışık düzeni paylaşılıyor Şekil 1. Video paylaşım ardışık düzeni.

Ardışık düzen aşağıdaki adımları içerir:

  1. Video yakalayıp kodlayarak (belki de çekim sırasında efekt ekleyerek). Alternatif olarak, kullanıcı bu adımı atlayabilir ve depolama alanından, başka bir uygulamadan önceden kaydedilmiş bir video seçebilir.
  2. Videoyu düzenleyin, filtreleyin, rötuş yapın veya başka bir şekilde işleyin.
  3. Kod dönüştürmeye hazırlanırken videoyu ölçeklendirin veya yeniden boyutlandırın.
  4. Paylaşım için videonun kodunu dönüştürün. 2. adımdaki filtreleme, genellikle bu adımın bir parçası olarak uygulanır.

Ardışık düzende videonuzun kalitesini belirleyen parametreleri ayarlamanızı sağlayan iki adım bulunur: ilk kayıt sırasında kodlama ve paylaşmadan önce kod dönüştürme. Ayrıca, son kod dönüştürme adımından önce videoyu yeniden ölçeklendirmeniz gerekebilir. Bu da kaliteyi etkileyebilir.

Öneriler

Tablo 1, video kalitesi için beş ana parametreyi ve bunların hangi adımlarda kullanılabileceğini göstermektedir.

Parametre Çekim Yapın Paylaş
Profil Y Y
Çözünürlük Y Y
Bit hızı Y Y
Nicelleştirme Parametresi (QP) (nadiren) Y
B çerçeveler H Y

Tablo 1. Video kalitesini belirleyen ana parametreler

Profil

Daha iyi sonuçlar için ilgili codec tarafından sağlanan daha gelişmiş profilleri kullanın. AVC kodlaması için Yüksek profil'i ve düzey 4'ü seçin.

Çözünürlük, kırpma ve ölçeklendirme

Kod dönüştürmeyi paylaşım için dönüştürmeden önce ölçeklendirme adımında yakalanan videonun ilk çözünürlüğünü değiştirebilirsiniz ancak ölçeklendirme, videonun kalitesini düşürebilir. Ölçeklendirmeden kaçınmanızı ve ilk kodlama için ardışık düzen boyunca kullanabileceğiniz bir çözünürlük seçmenizi öneririz. Ayrıca, aşırı kırpmanın, özellikle kırpılan resmin ölçeğini artırdığınızda düşük kaliteli bir resme neden olacağını unutmayın. Aşağıdaki yönergeleri izleyin:

  • En az nihai paylaşım çözünürlüğü kadar yüksek bir çözünürlük seçin.
  • Ara adımların tümü, daha yüksek çözünürlüğü (örneğin ilk çekim sırasında daha yüksek bit hızı) destekleyecek şekilde tasarlanmadığı sürece yakalama çözünürlüğü, paylaşım çözünürlüğünü çok fazla aşmamalıdır.

    • Paylaşım kodlaması 720x1280 çözünürlük sağlıyorsa 720x1280 yakalama çözünürlüğü önerilir.
    • Yakalama ile paylaşma arasındaki ara adımlarda kırpma varsa, 1080x1920 gibi daha yüksek bir yakalama çözünürlüğü kullanın ve ekstra pikselleri işlemek için yakalama bit hızını artırın.
  • Çok fazla kırpma işlemi, özellikle kırpılan resmin ölçeği büyütülmüşse düşük kaliteli bir resimle sonuçlanır.

  • Çözünürlüğü düşük çözünürlükten yüksek çözünürlüğe yükseltmekten kaçının. Ölçeklendirme, mevcut olmayan ayrıntıları oluşturmaya çalışır. İstenen yüksek çözünürlüğü baştan taşıyın.

  • Ölçümü artırmanız gerekiyorsa kodlama parametrelerini ayarlayın. Örneğin, yukarı ölçeklenen çözünürlük iki kat daha fazla piksele sahipse bit hızını ikiye katlayın.

Çözünürlük ve bit hızı birbiriyle ilişkilidir. Örneğin, yüksek çözünürlüklü bir videoyu nihayetinde kodu düşük bit hızına dönüştüren bir paylaşım ardışık düzeni üzerinden taşımak, daha düşük bir çözünürlükte başlamaktan daha düşük kaliteli bir görüntü üretir. Bit hızı düştükçe, daha küçük çözünürlüklerin daha iyi sonuçlar vermeye başladığı çapraz geçiş noktaları oluşur:

Bit hızı Çözünürlük
5+ Mb/sn 1.080x1.920
1,5 - 5+ Mb/sn 720 x 1.280
1,5 Mb/sn veya daha az SD eşdeğeri. 9:16 en boy oranında aynı piksel sayısı yaklaşık 416x736'dır

Tablo 2. Bit hızı ve çözünürlük karşılaştırması

Birçok popüler uygulama, 720p veya daha düşük çözünürlükte video paylaşır. Veriler, 1,5 ile 5 Mb/sn arasındaki bit hızı hedefleri için 720p çözünürlüğün uygun bir seçim olduğunu göstermektedir.

Bit hızı

Kayıt

Daha yüksek bir kodlama bit hızı kullanmak, video kalitesinde en büyük iyileşmeyi sağlar. Yerel kamera uygulamalarıyla eşleşen bit hızlarını seçmenizi öneririz. 720x1280 çözünürlük için 10 Mb/sn. yakalama bit hızı önerilir.

Yakalama kodlaması cihaz üzerinde yapıldığından, olumsuz etki çok az olan paylaşım adımı dönüşümlerinin çoğunu telafi etmek için daha yüksek bir bit hızı kullanabilirsiniz. Oluşturulan daha büyük dosyalar yalnızca cihaz üzerinde düzenleme için kullanılır.

Tablo 2'de gösterildiği gibi son kod dönüştürme adımında bit hızını azaltabilirsiniz.

Paylaşılıyor

Bit hızı, yüklenecek videonun boyutuyla doğrudan ilişkili olduğu için paylaşım zamanında en fazla etkiye sahiptir. Video kalitesi, dosya iletim süresi ve bulutta depolama maliyetleri arasında denge söz konusudur.

Kodlama profili, B kareleri ve QP sınırlayıcı değerlerinin seçimi de bu aşamada yakalama sırasında olduğundan daha önemlidir.

İyi bir görsel kalite elde etmek için 4-5 Mb/sn arasında (720x1280 çözünürlük için) bit hızı öneririz.

Nicelleştirme Parametresi (QP)

Android 12 ve sonraki sürümlerde QP anahtarları standartlaştırılmıştır. Bu anahtarlar, MediaFormat API'de ve NDK Medya kitaplığında kullanılabilir. Önceki Android sürümlerinde, QP manipülasyonu yalnızca MediaFormat yapılandırmasında tedarikçiye özel anahtarları kullanan çerçeve işlevleri aracılığıyla kullanılabilir.

Kayıt

Video yakalama sırasında, her zaman kullanılamayan QP ayarları yerine bit hızı denetimini kullanın.

10 Mb/sn (720x1280 için) yakalama bit hızları için QP ayarlarının değiştirilmesini önermeyiz. Yakalama bit hızı önemli ölçüde düşükse (720x1280 için 5 Mb/sn'nin altındaysa) QP ayarının 40 olması, codec'i hedef bit hızını çok sık çekmeye zorlamadan yüksek kalite arasında iyi bir uzlaşma sağlar.

Paylaşılıyor

Özellikle bit hızı 4 Mb/sn'nin altında olduğunda maks. QP sınırının 40 olması önerilir. Bu, kodlanmış videolar için minimum kaliteyi sağlar, ancak daha yüksek bit hızına sahip bir sonuç üretebilir. Bit hızındaki artış, videonun karmaşıklığına bağlıdır. Paylaşım uygulaması, oluşturulan videonun bit hızındaki bazı sapmaları tolere edebilse de belirli bir eşiğin üzerindeki bir artışı tolere edemeyebilir.

Daha az kısıtlayıcı (daha yüksek) bir maks. QP sınırıyla paylaşım için videoyu yeniden kodlayarak bit hızı artışını sınırlayabilirsiniz. Bu, codec'in kaliteden ödün vermek ve videonun diğer bölümlerini korumak için daha fazla özgürce olmasını sağlar. Bu bir kod dönüştürme işlemi olduğundan, paylaşmak istediğiniz videoyu zaten yakalamışsınızdır. Bu nedenle videoyu paylaşmak için yeniden kodlayabilirsiniz.

Dezavantajı, kod dönüştürme adımının bu farklı parametrelerle tekrarlanmasının, videonun paylaşılması için gereken süreyi artırmasıdır. Bu gecikmeyi azaltmanın bir yolu, kısmen dönüştürülmüş videoya bakarak bit hızı aşımlarına karşı toleransınız dahilinde olup olmadığına karar vermektir. Aksi takdirde kod dönüştürmeyi durdurabilir ve daha uygun QP parametreleriyle tekrar deneyebilirsiniz.

B kareleri ve kodlama profilleri

B karelerini yalnızca paylaşma adımı sırasında ve yalnızca Android 10 veya sonraki bir sürümü çalıştırırken kullanmayı düşünün.

Tüm cihazlar ana veya yüksek profilleri desteklemediğinden uygulamalar, desteklenen kodlama profillerini CodecCapabilities kullanarak kontrol etmelidir. AVC kodlayıcı tarafından desteklenen en yüksek profili kullanın: Yüksek > Ana > Referans. Bazı kodlayıcıların yapılandırması başarısız olabileceğinden, en güvenli sonuçlar için referans profili kullanırken B çerçevelerini (KEY_LATENCY veya KEY_MAX_B_FRAMES) yapılandırmayın.

Aşağıdaki kod segmentlerinde, AVC kodlayıcıyı yapılandırmak için kullanılacak bir 'MediaFormat format' olduğu varsayılmaktadır

Android 10

API 29 veya sonraki sürümler

Desteklenen en yüksek profili kullanın ve B çerçevesi parametresini 1 değerine ayarlayın:

format.setInt32(KEY_PROFILE, AVCProfileHigh);
format.setInt32(KEY_MAX_B_FRAMES, 1);

Bu durumda KEY_LATENCY değerini ayarlamayın.

Android 8, 8.1 ve 9

API'ler 26, 27, 28

En yüksek desteklenen profili kullanın ancak B karelerinin oluşturulmasını devre dışı bırakın. Bu, bu sistem sürümlerinde MediaMuxer'in bazı kısıtlamalarına uygundur

format.setInt32(KEY_PROFILE, AVCProfileHigh);
format.setInt32(KEY_LATENCY, 1);

KEY_LATENCY değeri, codec'lerin B kareleri oluşturmasını yasaklar ancak yine de diğer codec verimliliğinden yararlanır.

Uygulamanız nihai çıkış dosyasını derlemek için MediaMuxer kullanmıyorsa KEY_LATENCY değerini 1 yerine 2 şeklinde ayarlayarak B karelerini etkinleştirebilirsiniz. Bu, codec'in B kareleri üretmesine izin verir.

Android 7.1 ve önceki sürümler

API 25 ve öncesi

En güvenli sonuçlar için referans profili kullanın.

format.setInt32(KEY_PROFILE, AVCProfileBaseline);

Sürüm 7'den önce Android AOSP yalnızca temel profili destekler. Ancak, OEM'ler büyük olasılıkla tedarikçiye özel bir profil kullanarak bazı cihazlarda ana/yüksek profil oluşturmuştur.

Uygulamanız MediaMuxer kullanmıyorsa codec'in desteklediği durumlarda ana veya yüksek profili kullanabilirsiniz. B karelerinin sayısını kontrol etmek için ortak biçim anahtarı yoktur.

HDR'yi SDR'ye dönüştürmek için Dönüştürücü modülünü kullanma

Android 13'ten (API düzeyi 33) itibaren, HDR içeriğini HDR'yi desteklemeyen uygulama, hizmet ve cihazlarla paylaşmak için Jetpack Media3'ün Transformer modülünü kullanmanızı öneririz. Dönüştürücü modülü, giriş HDR video akışını SDR'ye tonlarla eşleyerek ve sonucu MP4 olarak kaydederek çalışır. Bu sayede, ayrıntı veya görüntü parlaklığı kaybı olmadan başarılı bir oynatma sağlanır.

Not: Dönüştürücü modülü, Android 12 (API düzeyi 32) ile Android 7.0 (API düzeyi 24) arasındaki sistem sürümlerini hedefleyen cihazlarda farklı şekilde çalışır. Cihaz HDR'yi destekliyorsa uygulamanız içeriği ton eşlemesi olmadan oynatır. Cihaz HDR'yi desteklemiyorsa HDR ton eşlemenin desteklenmediğini belirten bir hata mesajı verir.

Aşağıdaki kod, girişi SDR ile ton eşleyen ve giriş biçiminde (H.264/AVC gibi) yeniden kodlayan bir Transformatör oluşturur:

Kotlin

val transformer = Transformer.Builder(context)
    .setTransformationRequest(
        TransformationRequest.Builder()
            .setHdrMode(TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR)
            .build())
    .addListener(/* ... */)
    .build()

Java

Transformer transformer = new Transformer.Builder(context)
    .setTransformationRequest(
        new TransformationRequest.Builder()
            .setHdrMode(TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR)
            .build())
    .addListener(/* ... */)
    .build();

Ton eşleme işlevini denemek için Transformer demo uygulamasına göz atın.

Ton eşlemeyi MediaCodec kullanarak da ayarlayabilirsiniz ancak uygulama süreci daha karmaşıktır. Daha fazla bilgi için MediaCodec referans belgelerini inceleyin.