Best Practices zum Teilen von Videos

Viele Nutzer teilen Videos über ihr Android-Gerät. Die Qualität der empfangenen ist das Video aufgrund der durchgeführten Verarbeitung häufig schlechter als das Original. durch die Freigabe-App. In diesem Dokument wird beschrieben, wie Sie die Qualität geteilte Videos und einige häufige Fehler bei der Videoverarbeitung. Zum Optimieren zum Teilen von HDR-Videos findest du unter Verwenden Sie das Transformer-Modul, um HDR in SDR zu transcodieren auf dieser Seite.

Wichtig ist, dass du eine konstante Auflösung und die Videoqualität so lange wie möglich so hoch wie möglich sein.

Freigabepipeline

Abbildung 1 zeigt einen typischen Ablauf für die Freigabe eines Videos:

Videopipeline wird geteilt Abbildung 1: Die Pipeline für die Videofreigabe

Die Pipeline umfasst folgende Schritte:

  1. Nehmen Sie ein Video auf und codieren Sie es und fügen Sie dabei möglicherweise Effekte hinzu. Der Nutzer kann diesen Schritt auch überspringen und ein Video aus dem Speicher auswählen. die zuvor mit einer anderen App aufgenommen wurde.
  2. Du kannst das Video bearbeiten, filtern, retuschieren oder anderweitig verarbeiten.
  3. Zur Vorbereitung auf die Transcodierung das Video skalieren oder vergrößern/verkleinern.
  4. Transcodieren Sie das Video zum Teilen. Die Filterung in Schritt 2 wird häufig Teil dieses Schritts.

In der Pipeline gibt es zwei Schritte, in denen Sie Parameter, die die Qualität deines Videos bestimmen: die Codierung während der der Aufzeichnung und der Transcodierung. Außerdem müssen Sie möglicherweise Skalieren Sie das Video vor dem letzten Transcodierungsschritt neu, was sich ebenfalls auf die Qualität auswirken kann.

Empfehlungen

In Tabelle 1 sind die fünf Hauptparameter für die Videoqualität aufgeführt. gibt an, für welche Schritte sie verwendet werden können.

Parameter Aufnehmen Teilen
Profil J J
Lösung J J
Bitrate J J
Quantisierungsparameter (QP) (selten) J
B-Frames N J

Tabelle 1 Hauptparameter, die die Videoqualität bestimmen

Profil

Bessere Ergebnisse erzielen Sie, wenn Sie die erweiterten Profile der jeweiligen Codec. Wählen Sie für die AVC-Codierung Hohes Profil und Level 4 aus.

Auflösung, Zuschneiden und Skalierung

Sie können die anfängliche Auflösung des aufgenommenen Videos im Skalierungsschritt ändern. vor der Transcodierung für die Freigabe vor. Die Skalierung kann jedoch die Qualität des Video. Wir empfehlen, eine Skalierung zu vermeiden und eine Auflösung für die anfängliche Codierung, die Sie in der gesamten Pipeline verwenden können. Denken Sie auch an die extremen das Zuschneiden zu einer schlechten Bildqualität führt, insbesondere wenn Sie die Größe des zugeschnittenen Bild. Beachten Sie die folgenden Richtlinien:

  • Die Auflösung muss mindestens so groß sein wie die endgültige Auflösung beim Teilen.
  • Die Auflösung für die Aufnahme sollte die Auflösung beim Teilen nicht erheblich übersteigen. es sei denn, die Zwischenschritte sind darauf ausgelegt, die größeren (z. B. eine höhere Bitrate bei der ersten Aufnahme).

    • Ergibt die gemeinsame Codierung eine Auflösung von 720 x 1280, empfehlen wir eine Aufnahmeauflösung: 720 x 1280
    • Wenn die Zwischenschritte zwischen der Aufnahme und dem Teilen das Zuschneiden umfassen, verwenden Sie eine höhere Aufnahmeauflösung (z. B. 1080 x 1920) und Bitrate erfassen, um die zusätzlichen Pixel zu verarbeiten.
  • Ein extremer Zuschnitt führt zu einer schlechten Bildqualität, insbesondere wenn das zugeschnittene Bild Bild wird hochskaliert.

  • Vermeiden Sie das Hochskalieren von einer niedrigeren auf eine höhere Auflösung. Versuche zum Vergrößern um Details zu erzeugen, die nicht vorhanden sind. Die gewünschte höhere Auflösung übernehmen von Anfang an dabei.

  • Wenn Sie hochskalieren müssen, passen Sie die Codierungsparameter an. Wenn zum Beispiel der Parameter höhere Auflösung hat doppelt so viele Pixel und die doppelte Bitrate.

Auflösung und Bitrate sind miteinander verknüpft. Eine hochauflösende Anzeige das Video über eine Freigabepipeline verarbeitet, die schließlich auf eine niedrige Bitrate transcodiert. erzeugt eine geringere Qualität als das Starten mit einer niedrigeren Auflösung. Da die die Bitrate abnimmt, gibt es Übergangspunkte, an denen kleinere Auflösungen um bessere Ergebnisse zu erzielen:

Bitrate Lösung
Mind. 5 Mbit/s 1080 × 1920
1,5–5+ Mbit/s 720 × 1280
Maximal 1,5 Mbit/s SD-Äquivalent. Dieselbe Pixelzahl bei einem Seitenverhältnis von 9:16 beträgt etwa 416 x 736.

Tabelle 2: Bitrate und Auflösung

Viele beliebte Apps teilen Videos mit einer Auflösung von maximal 720p. Die Daten zeigen, dass eine Auflösung von 720p eine geeignete Wahl für Bitratenziele zwischen 1,5 und 5 Mbit/s.

Bitrate

Aufnahme läuft

Die Verwendung einer höheren Codierungs-Bitrate bietet die größte Verbesserung bei Videos. die Qualität zu verbessern. Wir empfehlen, Bitraten auszuwählen, die den nativen Kamera-Apps entsprechen. Für eine einer Auflösung von 720 x 1280. Wir empfehlen eine Aufnahmebitrate von 10 Mbit/s.

Da die Codierung der Aufnahme auf dem Gerät erfolgt, kannst du eine höhere Bitrate verwenden, kompensieren Sie die meisten Anpassungen des Freigabeschritts mit wenig negativen die Auswirkungen. Die größeren resultierenden Dateien werden nur zur Manipulation auf dem Gerät verwendet.

Sie können die Bitrate im letzten Transcodierungsschritt reduzieren, wie in Tabelle 2 dargestellt.

Inhalte teilen

Die Bitrate hat zum Zeitpunkt der Freigabe die größte Wirkung, da sie sich direkt auf die Größe des Videos, das hochgeladen wird. Es gibt einen Kompromiss zwischen Qualität, Dateiübertragungszeit und Cloud-Speicherkosten.

Die Wahl des Codierungsprofils, der B-Frames und der QP-Begrenzungswerte wichtiger als bei der Aufnahme.

Wir empfehlen eine Bitrate zwischen 4 und 5 Mbit/s (für eine Auflösung von 720 x 1280), um eine gute und Bildqualität.

Quantisierungsparameter (QP)

Unter Android 12 und höher sind die QP-Schlüssel standardisiert und in der MediaFormat API und in der NDK Media Library. Bei früheren Android-Versionen ist die QP-Bearbeitung nur über das Framework möglich. Funktionen mit anbieterspezifischen Schlüsseln in der MediaFormat-Konfiguration.

Aufnahme läuft

Verwenden Sie während der Videoaufnahme statt der QP-Einstellungen die Option zur Bitrate. nicht immer verfügbar.

Wir raten davon ab, die QP-Einstellungen für Erfassungsbitraten von 10 Mbit/s anzupassen. (für 720 x 1280). Wenn die Bitrate für die Erfassung erheblich niedriger ist, unter 5 Mbit/s für 720 x 1280 und eine QP-Einstellung von 40 ist ein guter Kompromiss zwischen ohne dass der Codec zu oft die Zielbitrate überschreitet.

Inhalte teilen

Wir empfehlen eine maximale QP-Grenze von 40, insbesondere wenn die Bitrate unter 4 Mbit/s liegt. Dadurch wird zwar eine Mindestqualität für die codierten Videos sichergestellt, aber es kann eine mit einer höheren Bitrate. Die Erhöhung der Bitrate hängt davon ab, die Komplexität des Videos. Auch wenn eine Freigabe-App eine gewisse Abweichung in der der generierten Videobitrate, wird eine Erhöhung möglicherweise nicht toleriert, die über einen bestimmten Grenzwert zu erreichen.

Du kannst die Erhöhung der Bitrate begrenzen, indem du das Video für das Teilen mit einem weniger restriktive (höhere) maximale QP-Grenze. Dadurch hat der Codec mehr Freiheiten, auf Qualität verzichten und andere Teile des Videos beibehalten. Sie können den Code da es sich um einen Transkodierungsvorgang handelt. haben Sie bereits das Video aufgenommen, das Sie teilen möchten.

Der Nachteil ist, dass die Wiederholung des Transcodierungsschritts mit diesen unterschiedlichen wird das Video länger geteilt. Eine Möglichkeit, die sich das teilweise transcodierte Video anzusehen, um zu entscheiden, ob es nicht innerhalb der Toleranz für eine Überschreitung der Bitrate. Ist dies nicht der Fall, können Sie und versuchen Sie es noch einmal mit passenderen QP-Parametern.

B-Frames und Codierungsprofile

Verwenden Sie B-Frames nur während des Teilens und nur beim Ausführen Android 10 oder höher.

Apps sollten die unterstützten Codierungsprofile mit CodecCapabilities, da nicht alle Geräte ein Haupt- oder ein hohes Profil unterstützen. Höchstes Profil verwenden unterstützt vom AVC-Encoder: High > Hauptseite > Baseline. Um sicherste Ergebnisse zu erhalten, B-Frames konfigurieren (KEY_LATENCY oder KEY_MAX_B_FRAMES) bei Verwendung des Baseline-Werts da einige Encoder möglicherweise nicht konfiguriert werden.

Bei den folgenden Codesegmenten wird von einer 'MediaFormat format' ausgegangen, die für AVC-Encoder konfigurieren

Android 10

API 29 oder höher

Verwenden Sie das höchste unterstützte Profil und setzen Sie den B-Frame-Parameter auf 1:

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

Legen Sie in diesem Fall KEY_LATENCY nicht fest.

Android 8, 8.1 und 9

APIs 26, 27, 28

Das am höchsten unterstützte Profil verwenden, aber die Generierung von B-Frames deaktivieren. Dieses berücksichtigt einige Einschränkungen der MediaMuxer in diesen Systemversionen

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

Der Wert KEY_LATENCY verhindert, dass die Codecs B-Frames generieren, aber trotzdem nutzt andere Codec-Effizienz.

Wenn deine App MediaMuxer nicht zum Zusammenstellen der endgültigen Ausgabedatei verwendet, kannst du Folgendes tun: aktivieren Sie B-Frames, indem Sie den Wert KEY_LATENCY auf 2 statt auf 1 setzen. Dies sollte damit der Codec B-Frames erzeugen kann.

Android 7.1 und niedriger

API 25 und frühere Versionen

Verwenden Sie das Basisprofil, um die sichersten Ergebnisse zu erhalten.

format.setInt32(KEY_PROFILE, AVCProfileBaseline);

Vor Version 7 unterstützt Android AOSP nur das Basisprofil. Allerdings ist es wahrscheinlich, dass OEMs auf einigen Geräten eine Haupt-/Hochprofilfunktion aktiviert haben, z. B. mit einem anbieterspezifischen Profil.

Wenn deine App MediaMuxer nicht verwendet, kannst du das Haupt- oder das Profil „High“ verwenden, wenn der Codec es unterstützt. Es gibt keinen öffentlichen Formatschlüssel, um die Anzahl der B- Frames.

HDR mit dem Transformer-Modul in SDR transcodieren

Ab Android 13 (API-Level 33) empfehlen wir die Verwendung des Transformator um HDR-Inhalte mit Apps, Diensten und Geräten zu teilen, HDR unterstützen. Beim Transformer-Modul werden Tonzuordnungen HDR-Videostreaming in SDR und das Ergebnis als MP4-Datei speichern, wodurch reibungslos ohne Detailverlust oder Bildhelligkeit wiedergeben.

Hinweis: Auf Geräten, die auf Systemversionen zwischen Android 12 (API-Level 32) ausgerichtet sind bis Android 7.0 (API-Ebene 24) funktioniert das Transformer-Modul anders. Wenn unterstützt das Gerät HDR, spielt die App die Inhalte ohne Tone-Mapping ab. Wenn das Gerät HDR nicht unterstützt, wird eine Fehlermeldung ausgegeben, dass HDR Tone-Mapping wird nicht unterstützt.

Mit dem folgenden Code wird ein Transformer eingerichtet, der die Eingabe codiert ihn im Eingabeformat neu (z. B. H.264/AVC):

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();

Wenn Sie die Tone Mapping-Funktion ausprobieren möchten, sehen Sie sich die Transformer-Demo-App

Sie können das Tone Mapping auch mit MediaCodec, obwohl die Implementierung ist komplexer. Weitere Informationen finden Sie in der Referenzdokumentation zu MediaCodec