Birçok kişi Android cihazlarını kullanarak video paylaşır. Alınan iletinin kalitesi Video, gerçekleştirilen işleme nedeniyle genellikle orijinalinden kötüdür paylaşma uygulamasıdır. Bu belgede, projenizin kalitesinin nasıl optimize edileceği paylaşılan videolar ve kaçınılması gereken, video işleme yaygın bazı hatalardan bahsedeceğiz. Optimizasyon için HDR video içeriği paylaşmak için bkz. Bu sayfada, HDR'yi SDR'ye dönüştürmek için Dönüştürücü modülünü kullanın.
Asıl önemli olan, çözünürlüğünüzü sabit tutmak ve video kalitesini korumaktır. mümkün olduğunca uzun süre yüksek tutmaktır.
Paylaşım ardışık düzeni
Şekil 1'de video paylaşımı için genel bir akış gösterilmektedir:
Ardışık düzende şu adımlar bulunur:
- Muhtemelen çekim sırasında efektler ekleyerek bir video çekin ve kodlayın. Alternatif olarak, kullanıcı bu adımı atlayıp depolama alanından bir video seçebilir bir uygulama yükleyebilirsiniz.
- Videoyu düzenleme, filtreleme, rötuş yapma veya başka bir şekilde işleme
- Kod dönüştürme işlemine hazırlanırken videoyu ölçeklendirin veya yeniden boyutlandırın.
- Paylaşım için videonun kodunu dönüştürün. 2. adımdaki filtreleme genellikle bu adımın bir parçasıdır.
Ardışık düzende iki adım bulunur. Bu adımda iki adımı videonuzun kalitesini belirleyen parametreler: ve kodu dönüştürmeye ne dersiniz? Ayrıca, Videoyu son kod dönüştürme adımından önce yeniden ölçeklendirin. Bu, kaliteyi de etkileyebilir.
Öneriler
Tablo 1'de video kalitesi için beş ana parametre gösterilmektedir. bu öğelerin hangi adımlarda kullanılabileceğini gösterir.
Parametre | Çekim Yapın | Paylaş |
Profil | Y | Y |
Çözünürlük | Y | Y |
Bit hızı | Y | Y |
Nicelendirme Parametresi (QP) | (nadiren) | Y |
B çerçeveler | H | Y |
Profil
Daha iyi sonuçlar elde etmek için, aynı yönetici tarafından sağlanan daha gelişmiş codec. AVC kodlaması için Yüksek profil ve düzey 4'ü seçin.
Çözünürlük, kırpma ve ölçeklendirme
Çekilen videonun ilk çözünürlüğünü ölçeklendirme adımında değiştirebilirsiniz ancak ölçeklendirme, dosyanın kalitesini düşürebilir videosunu izleyin. İlk ekran görüntüsünde ölçeklendirmekten kaçınmanızı ve çözünürlüğü kodundan yararlanırsınız. Ayrıca aşırılıkların özellikle kırpılan resmin boyutunu büyütürseniz düşük kaliteli bir resim elde edersiniz. görüntüsüdür. Aşağıdaki yönergeleri izleyin:
- En az nihai paylaşım çözünürlüğü kadar büyük bir çözünürlük seçin.
Yakalama çözünürlüğü, paylaşım çözünürlüğünü büyük ölçüde aşmamalıdır ara adımların hepsi, büyük ölçekli çerçeveleri (ilk yakalama sırasındaki daha yüksek bit hızı gibi)
- Paylaşım kodlaması 720x1280 çözünürlük üretiyorsa 720x1280 yakalama çözünürlüğü.
- Yakalama ve paylaşma arasındaki ara adımlarda kırpma varsa 1080x1920 gibi daha yüksek bir yakalama çözünürlüğüne sahip pikselleri işleyecek bit hızını yakalamanız gerekir.
Olağanüstü kırpma işlemi, özellikle kırpılan alanlarda resim kalitesinin düşmesine neden olur. resim büyütüldü.
Düşük çözünürlükten yüksek çözünürlüğe yükseltme yapmaktan kaçının. Ölçeklendirme denemeleri mevcut olmayan detaylar oluşturmak için kullanılabilir. İstediğiniz daha yüksek çözünürlüğü yükleyin. en baştan başlayalım.
Çözünürlüğü yükseltmeniz gerekiyorsa kodlama parametrelerini ayarlayın. Örneğin, çözünürlüğünün iki katı piksel vardır. Bu da bit hızının iki katıdır.
Çözünürlük ve bit hızı birbiriyle bağlantılıdır. Örneğin, yüksek çözünürlüklü dönüştürme işlemi nihayetinde düşük bit hızına dönüşen bir paylaşım hattı üzerinden video düşük kaliteli bir görüntü üretir. bit hızı azaldığında, daha küçük çözünürlüklerin başladığı geçiş noktaları olur ve daha iyi sonuçlar elde etmek için:
Bit hızı | Çözünürlük |
5+ Mb/sn | 1.080x1.920 |
1,5 - 5 Mb/sn | 720x1.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 |
Birçok popüler uygulama, videoyu 720p veya daha düşük çözünürlükte paylaşır. Veriler, 1,5 ve üzeri bit hızı hedefleri için 720p çözünürlüğün uygun olduğunu ve 5 Mb/sn.
Bit hızı
Kayıt
Daha yüksek kodlama bit hızı kullanmak, videoda en büyük iyileştirmeyi sağlar. kalitedir. Yerel kamera uygulamalarıyla eşleşen bit hızları seçmenizi öneririz. Örneğin, 720x1280 çözünürlük, 10 Mb/sn yakalama bit hızı önerilir.
Yakalama kodlama işlemi cihaz üzerinde yapıldığından, aşağıdakileri yapmak için daha yüksek bir bit hızı kullanabilirsiniz: çoğu paylaşım adımı dönüşümünü az miktarda negatifle telafi ederek inceleyeceğiz. Oluşturulan daha büyük dosyalar yalnızca cihaz üzerinde değişiklik yapmak 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
Paylaşım zamanında en fazla etkiyi yaratan bit hızıdır çünkü doğrudan dosyanın boyutu belirlenebilir. Videolar arasında ödün verilecek bir denge var kalitesi, dosya iletim süresi ve bulut depolama maliyetleri gibi
Kodlama profili, B çerçeveleri ve QP sınırlayıcı değerleri seçimi de daha önemlidir.
İndirme kalitesinin iyi olması için 4-5 Mb/sn (720x1280 çözünürlük için) arasında bir bit hızı öneririz. görsel kaliteyi artırır.
Nicelendirme Parametresi (QP)
Android 12 ve sonraki sürümlerde QP anahtarları standarttır ve
MediaFormat
API ve
NDK Medya kitaplığı.
Önceki Android sürümlerinde, QP manipülasyonu yalnızca çerçeve üzerinden kullanılabilir
işlevleri için MediaFormat
yapılandırmasında satıcıya özel anahtarlar kullanın.
Kayıt
Video çekimi sırasında, varsayılan olarak bulunan QP ayarları yerine bit hızı kontrolünü kullanın. her zaman mevcut olmayabilir.
QP ayarlarını 10 Mb/sn yakalama bit hızları için düzenlemeniz önerilmez. (720x1280 için). Yakalama bit hızı önemli ölçüde düşükse, 720x1280, QP ayarının 40 olması kaliteyi artırmak için iyi bir seçenektir. Ancak codec'i hedef bit hızının üzerinde çekim yapmaya zorlamak zorunda kalmazsınız.
Paylaşılıyor
Özellikle bit hızı 4 Mb/sn'nin altında olduğunda maks. QP sınırının 40 olmasını öneririz. Bu, kodlanmış videolar için minimum kaliteyi garanti etse de yüksek bit hızına sahip olabilir. Bit hızındaki artış, daha da karmaşık hale getirin. Paylaşım uygulaması, konumdaki bazı sapmaları bit hızında bir artışa tolerans göstermeyebilir. sağlayabilir.
Videoyu bir daha az kısıtlayıcı (daha yüksek) maks. QP sınırı. Bu şekilde, codec bileşenine Kaliteden ödün vermek ve videonun diğer kısımlarını korumak. Yeniden kodlayarak Kod dönüştürme işlemi olduğundan paylaşım için video; zaten var paylaşmak istediğiniz bir video çekti.
Dezavantajı, kod dönüştürme adımını bu farklı parametreleri, videoyu paylaşmak için gereken süreyi artırır. Azaltmanın bir yolu bu gecikme, kısmen dönüştürülmüş videoya bakmak ve videonun değeri toleransınıza sokun. Aksi takdirde, kod dönüştürmeyi deneyin ve daha uygun QP parametreleriyle tekrar deneyin.
B çerçeveler ve kodlama profilleri
B kareleri yalnızca paylaşım adımı sırasında ve yalnızca çalışırken kullanmayı düşünün Android 10 veya sonraki sürümler.
Uygulamalar, desteklenen kodlama profillerini
CodecCapabilities
çünkü tüm cihazlar ana veya yüksek profilleri desteklemez. En yüksek profili kullan
AVC kodlayıcı tarafından desteklenir: Yüksek > Ana > Referans değer. En güvenli sonuçlar için
B çerçeveleri yapılandırma
(KEY_LATENCY
veya
KEY_MAX_B_FRAMES
)
referans değer kullanıldığında
bazı kodlayıcılar yapılandırılamayabilir.
Aşağıdaki kod segmentleri, şu amaçla kullanılacak bir 'MediaFormat format'
olduğunu varsayar:
AVC kodlayıcıyı yapılandırın
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
özelliğini ayarlamayın.
Android 8, 8.1 ve 9
API'ler 26, 27, 28
En yüksek desteklenen profili kullanın ancak B çerçevelerin oluşturulmasını devre dışı bırakın. Bu
Bu sistem sürümlerinde MediaMuxer
format.setInt32(KEY_PROFILE, AVCProfileHigh);
format.setInt32(KEY_LATENCY, 1);
KEY_LATENCY
değeri, codec'lerin B çerçeveleri 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 şunu yapabilirsiniz:
KEY_LATENCY
değerini 1 yerine 2 olarak ayarlayarak B karelerini etkinleştirin. Bu
codec'in B kareleri üretmesine izin verir.
Android 7.1 ve önceki sürümler
API 25 ve önceki sürümler
En güvenli sonuçlar için referans profili kullanın.
format.setInt32(KEY_PROFILE, AVCProfileBaseline);
Sürüm 7'den önceki Android AOSP yalnızca temel profili destekler. Ancak, OEM'lerin bazı cihazlarda ana/üst profili etkinleştirmiş olma olasılığı, bir profil oluşturabilirsiniz.
Uygulamanızda MediaMuxer
kullanılmıyorsa ana veya yüksek profili kullanabilirsiniz
codec tarafından desteklenir. B-
çerçeveler.
HDR'yi SDR'ye dönüştürmek için Transformer modülünü kullanma
Android 13 (API düzeyi 33) sürümünden itibaren, Jetpack Media3’ün Dönüştürücü modülünü kullanarak HDR içeriği paylaşmayan uygulama, hizmet ve cihazlarla HDR desteği var. Transformer modülü, tablodaki ton haritalarıyla HDR video akışını SDR'ye aktarabilir ve sonucu MP4 olarak kaydedebilirsiniz. Böylece, ve görüntü parlaklığı kaybı olmadan başarıyla oynatmanıza olanak tanır.
Not: Android 12 (API düzeyi 32) arasındaki sistem sürümlerini hedefleyen cihazlarda Dönüştürücü modülü, Android 7.0 (API düzeyi 24) sürümüne kadar farklı şekilde çalışır. Eğer uygulamanız HDR'yi destekliyorsa, uygulamanız içeriği ton eşleme olmadan oynatır. Cihaz, HDR'yi desteklemiyorsa HDR'nin etkinleştirildiğini belirten bir hata mesajı verir. ton eşleme desteklenmiyor.
Aşağıdaki kod, tonu SDR ile eşleyen bir Transformatör oluşturur ve giriş biçiminde (H.264/AVC gibi) yeniden kodlar:
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ı.
Ton eşlemeyi,
MediaCodec
daha karmaşıktır. Daha fazla bilgi için
MediaCodec
referans belgeleri.