Transcoding in der mobilen Entwicklung — was es ist, Funktionsprinzip und Anwendungsszenarien

Autor: IT Sectr Veröffentlicht: 2026-05-25 Lesezeit: 10 Min.

Transcoding ist der Prozess der Umwandlung einer digitalen Mediendatei von einem Kompressionsformat in ein anderes mit vollständiger Dekodierung und erneuter Kodierung. Im Gegensatz zum Transmuxing (nur Änderung des Containers) ändert Transcoding den Codec, die Bitrate, die Auflösung und andere Parameter des komprimierten Streams. Laut Apple AVFoundation documentation (2026) wird Transcoding verwendet, um Inhalte an verschiedene Geräte und Netzwerkbedingungen anzupassen.

Wichtige Punkte

  • Transcoding ist die vollständige Dekodierung des Quellstreams in unkomprimiertes PCM mit anschließender Kodierung in ein neues Format
  • Transmuxing ändert nur den Container ohne Neukodierung des Streams — das ist kein Transcoding
  • Hauptgründe für Transcoding: Codec-Wechsel, Bitratenreduzierung, Auflösungsänderung, DRM-Anpassung
  • Werkzeuge: FFmpeg, AVFoundation (iOS), MediaCodec (Android), AWS Elemental MediaConvert
  • Transcoding in Echtzeit auf mobilen Geräten erfordert Hardware-Beschleunigung des Encoders

Was ist Transcoding?

Transcoding ist der Prozess der Umwandlung einer Mediendatei von einem Kompressionsformat in ein anderes durch vollständiges Dekodieren des Quellstreams in ein unkomprimiertes Zwischen-PCM-Format und anschließendes Kodieren mit neuen Parametern. Wenn die Quelldatei den H.264-Codec mit einer Bitrate von 10 Mbps verwendet und die Ausgabe H.265 mit einer Bitrate von 3 Mbps benötigt — das ist Transcoding.

Transcoding unterscheidet sich vom einfachen Umverpacken (Transmuxing), bei dem nur der Container geändert wird (z.B. MP4 zu MKV), während der komprimierte Bitstrom unverändert bleibt. Transcoding umfasst rechenintensive Operationen: Dekodieren jedes Frames, Anwenden von Filtern (Skalierung, Farbkorrektur, Zuschneiden) und erneutes Kodieren mit neuen Parametern. Dies macht Transcoding zu einer der ressourcenintensivsten Operationen bei der Arbeit mit Medien.

Transcoding wird in einer Vielzahl von Aufgaben eingesetzt: Anpassung von Video an Bandbreitenbeschränkungen, Konvertierung in ein Format mit Hardware-Dekodierungsunterstützung auf dem Zielgerät, Erstellung mehrerer Versionen für HLS/DASH-Streaming, Extrahieren von Audiospuren in eine separate Datei. OTT-Dienste (Netflix, YouTube, Twitch) transcodieren jede hochgeladene Datei in Dutzende von Varianten mit unterschiedlichen Bitraten, Auflösungen und Codecs, um Millionen von Nutzern adaptives Streaming zu bieten.

Wie funktioniert Transcoding?

Der Transcoding-Prozess besteht aus drei Hauptphasen: Dekodierung, Verarbeitung und Kodierung. Jede Phase kann je nach Verfügbarkeit und erforderlicher Leistung auf CPU oder GPU/Hardware-Blöcken ausgeführt werden.

Phasen des Transcodings

Die erste Phase ist die Dekodierung des Quellstreams. Die Quelldatei wird aus dem Container (MP4, MOV, MKV) gelesen, wonach die komprimierten Videopakete an den Decoder gesendet werden. Die Dekodierung kann hardwarebasiert (wenn der Codec unterstützt wird) oder softwarebasiert über FFmpeg erfolgen. Die Ausgabe der Dekodierung sind unkomprimierte Frames im YUV420- oder BGRA-Format — dies ist die Phase, in der sich Transcoding vom einfachen Remultiplexing unterscheidet.

Die zweite Phase ist die Filterung und Verarbeitung. Die dekodierten Frames durchlaufen eine Filterkette: Skalierung auf die Zielauflösung, Änderung der Bildrate, Farbkorrektur, Überlagerung von Text oder Grafiken. Die FFmpeg-Filterkette wird als Graph aufgebaut, in dem jeder Filter ein separates Verarbeitungsmodul ist. Zum Beispiel ändert der Filter scale=1280:720 die Auflösung, fps=30 die Bildrate und yadif führt eine Deinterlacing durch. Alle Operationen werden an unkomprimierten Frames durchgeführt, was die zweite Phase zur ressourcenintensivsten macht.

Die dritte Phase ist die Kodierung in das Zielformat. Die verarbeiteten Frames werden dem Encoder zugeführt, der sie nach dem Algorithmus des Zielcodecs komprimiert. Der Encoder kann hardwarebasiert (VideoToolbox auf iOS, MediaCodec auf Android) oder softwarebasiert (libx264, libx265) sein. Kodierungsparameter: CRF (Constant Rate Factor) für konstante Qualität, Bitrate für CBR/VBR, Profil und Level für Kompatibilität mit Zielgeräten.

cpp
// FFmpeg-Transcoding-Pipeline-Diagramm
AVFormatContext *inputCtx, *outputCtx;
AVCodecContext *decoderCtx, *encoderCtx;
AVFrame *frame = av_frame_alloc();
AVPacket packet;

while (av_read_frame(inputCtx, &packet) >= 0) {
    // 1. Dekodieren
    avcodec_send_packet(decoderCtx, &packet);
    avcodec_receive_frame(decoderCtx, frame);
    
    // 2. Filtern (Skalierung + fps-Änderung)
    sws_scale(swsCtx, frame->data, frame->linesize,
              0, frame->height, scaledFrame->data,
              scaledFrame->linesize);
    
    // 3. Kodieren
    avcodec_send_frame(encoderCtx, scaledFrame);
    avcodec_receive_packet(encoderCtx, &outPacket);
    av_interleaved_write_frame(outputCtx, &outPacket);
}

Die obige Pipeline zeigt den klassischen Transcoding-Zyklus. Die Funktion av_read_frame liest komprimierte Pakete aus der Eingabedatei, avcodec_send_packet dekodiert sie in Frames, sws_scale führt die Skalierung durch und avcodec_send_frame kodiert den verarbeiteten Frame in das Ausgabeformat. Dieser dreistufige Zyklus wiederholt sich für jeden Frame oder jede Gruppe von Frames (GOP), abhängig von den Encoder-Einstellungen.

Transcoding vs Transmuxing

Der Unterschied zwischen Transcoding und Transmuxing ist einer der häufigsten Verwirrungspunkte in der Medienentwicklung. Diesen Unterschied zu verstehen, ist entscheidend für die Wahl der richtigen Medienverarbeitungsstrategie.

ParameterTranscodingTransmuxing
Was sich ändertCodec, Bitrate, AuflösungContainer, Metadaten
RechenlastHoch (Dekodierung + Kodierung)Minimal (Paketkopie)
QualitätKann sich verschlechtern (Generationsverlust)Verlustfrei
AusführungszeitMinuten–Stunden für langes VideoSekunden–Minuten
AnwendungFormatanpassung, KompressionContainerwechsel für Kompatibilität

Transmuxing ist das Umverpacken eines komprimierten Streams in einen anderen Container ohne Dekodierung und Neukodierung. Wenn Video bereits mit dem H.265-Codec in einem MP4-Container komprimiert ist und in einen MOV- oder MKV-Container gelegt werden muss — Transmuxing kopiert einfach die Bitstrom-Pakete von einem Container in den anderen. Die Qualität wird nicht beeinträchtigt, die Verarbeitungszeit ist minimal, da keine Frame-Dekodierung erforderlich ist. FFmpeg führt Transmuxing mit dem Flag -codec copy durch.

Transcoding hingegen dekodiert und komprimiert den Medienstrom vollständig neu. Jedes Mal, wenn ein Video durch Transcoding geht, kann ein Generationsverlust (generation loss) auftreten — eine leichte Qualitätsverschlechterung aufgrund wiederholter verlustbehafteter Kompression. Selbst bei gleicher Bitrate ist die dritte Generation von Transcoding in der Regel schlechter als die erste. Aus diesem Grund empfehlen Profis, Master-Kopien in unkomprimierten oder minimal komprimierten Formaten (ProRes, DNxHR) zu speichern und nur finale Lieferversionen zu transcodieren.

Transcoding-Werkzeuge

Die Wahl des Transcoding-Werkzeugs hängt von der Plattform, den Leistungsanforderungen und dem Anwendungsfall ab. Für die mobile Entwicklung stehen sowohl native APIs als auch plattformübergreifende Bibliotheken zur Verfügung.

FFmpeg — Universelles Werkzeug

FFmpeg ist der De-facto-Standard für Transcoding auf allen Plattformen. Die FFmpeg-Kommandozeile ermöglicht praktisch jede Konvertierung: Codec-Wechsel, Bitratenanpassung, Trimmen, Verketten, Filteranwendung. Für mobile Apps wird FFmpeg über die Bibliotheken libavformat, libavcodec und libavfilter integriert. Beispiel eines typischen Transcoding-Befehls: ffmpeg -i input.mp4 -c:v libx265 -crf 23 -c:a aac -b:a 128k output.mp4.

Plattform-APIs

Auf iOS wird Transcoding über AVAssetWriter und AVAssetReader durchgeführt. AVAssetReader dekodiert die Quelldatei durch Lesen unkomprimierter Frames, und AVAssetWriter kodiert sie in das Zielformat. Dieser Ansatz verwendet automatisch die VideoToolbox-Hardware-Encoder und gewährleistet maximale Leistung. Auf Android ist ähnliche Funktionalität über MediaCodec in Verbindung mit MediaExtractor und MediaMuxer verfügbar — MediaExtractor extrahiert komprimierte Pakete, MediaCodec dekodiert und kodiert, MediaMuxer schreibt das Ergebnis.

Cloud-Dienste

Für serverseitiges Transcoding in Produktionsumgebungen werden Cloud-Dienste verwendet: AWS Elemental MediaConvert, Azure Media Services, Google Transcoder API. Diese Dienste skalieren automatisch unter Last, unterstützen alle gängigen Formate und können eine einzelne Eingabedatei in Dutzende von Ausgabevarianten für adaptives Streaming (HLS, DASH) transcodieren. Für mobile Apps ist Cloud-Transcoding die optimale Lösung, da es das Gerät des Benutzers nicht belastet und die asynchrone Inhaltsvorbereitung ermöglicht.

Transcoding-Codebeispiele

Betrachten wir praktische Beispiele für Transcoding auf mobilen Plattformen mit Hardware-Beschleunigung und Konfiguration wichtiger Qualitätsparameter.

H.264-zu-H.265-Transcoding auf iOS

swift
import AVFoundation

func transcodeVideo(sourceURL: URL, destURL: URL) {
    let asset = AVAsset(url: sourceURL)
    let preset = AVAssetExportPresetHEVCHighestQuality
    
    AVAssetExportSession(asset: asset, presetName: preset)?
        .exportAsynchronously {
            switch assetExportSession?.status {
            case .completed:
                print("Transcoding abgeschlossen")
            case .failed:
                print("Fehler: " + assetExportSession.error.localizedDescription)
            default:
                break
            }
        }
    
    // Manuelles Transcoding mit AVAssetReader + AVAssetWriter
    let reader = try AVAssetReader(asset: asset)
    let writer = try AVAssetWriter(url: destURL,
        fileType: .mp4)
    
    let outputSettings: [String: Any] = [
        AVVideoCodecKey: AVVideoCodecType.hevc,
        AVVideoWidthKey: 1920,
        AVVideoHeightKey: 1080,
        AVVideoCompressionPropertiesKey: [
            AVVideoAverageBitRateKey: 4_000_000,
            AVVideoProfileLevelKey: AVVideoProfileLevelH265Main10
        ]
    ]
    
    let adaptor = AVAssetWriterInput(
        mediaType: .video,
        outputSettings: outputSettings
    )
    writer.add(adaptor)
}

Das Beispiel zeigt zwei Ansätze für Transcoding auf iOS. AVAssetExportSession ist ein einfacher Weg mit Qualitätsvoreinstellungen (HEVCHighestQuality für H.265). Die manuelle Pipeline über AVAssetReader + AVAssetWriter bietet volle Kontrolle über Parameter: Bitrate, Profil, Level. Der Parameter AVVideoProfileLevelH265Main10 aktiviert das HDR-Profil Main10 mit 10-Bit-Farbtiefe, was für moderne HDR-Inhalte wichtig ist.

Transcoding auf Android mit MediaCodec

kotlin
class Transcoder(private val context: Context) {
    
    fun transcodeToHevc(inputUri: Uri, outputFile: File) {
        val extractor = MediaExtractor()
        extractor.setDataSource(context, inputUri, null)
        
        val trackFormat = extractor.getTrackFormat(videoTrackIndex)
        val mime = trackFormat.getString(MediaFormat.KEY_MIME)
        
        val decoder = MediaCodec.createDecoderByType(mime!!)
        val encoder = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_VIDEO_HEVC)
        
        val outputFormat = MediaFormat.createVideoFormat(
            MediaFormat.MIMETYPE_VIDEO_HEVC, 1920, 1080
        ).apply {
            setInteger(MediaFormat.KEY_BIT_RATE, 4_000_000)
            setInteger(MediaFormat.KEY_FRAME_RATE, 30)
            setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 2)
        }
        
        encoder.configure(outputFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)
        encoder.start()
    }
}

Der Android-Code erstellt eine Pipeline aus MediaExtractor — MediaCodec-Decoder — MediaCodec-Encoder — MediaMuxer. MediaExtractor bestimmt den Codec-Typ aus der Eingabedatei und wählt den entsprechenden Decoder aus. Der Encoder wird für H.265 (HEVC) mit einer Bitrate von 4 Mbps und einem Keyframe-Intervall von 2 Sekunden konfiguriert, was für Streaming optimal ist. Wichtig: Der MediaCodec-Encoder arbeitet synchron, daher muss für Echtzeit-Transcoding eine Schleife mit korrekter PTS-Zeitstempelverarbeitung für jeden Frame implementiert werden.

Optimierung von Transcoding für mobile Geräte

Transcoding auf mobilen Geräten ist eine Aufgabe, die aufgrund begrenzter CPU-, GPU-Ressourcen und thermischer Einschränkungen sorgfältige Optimierung erfordert. Mehrere Strategien helfen, Transcoding effizient durchzuführen.

Verwendung von Hardware-Kodierung

Der entscheidende Leistungsfaktor ist der Hardware-Encoder. Auf iOS bietet VideoToolbox Hardware-Kodierung für H.264 und H.265 mit 5–10-facher Geschwindigkeit im Vergleich zu softwarebasiertem libx264. Auf Android verwendet MediaCodec Hardware-OMX-Komponenten, falls verfügbar. Die Aktivierung der Hardware-Kodierung reduziert die Transcoding-Zeit eines 10-minütigen Videos von 30–40 Minuten (Software) auf 3–5 Minuten (Hardware) auf einem Flaggschiff-Gerät.

Auswahl der Qualitätsparameter

Für mobiles Transcoding ist das Gleichgewicht zwischen Qualität, Größe und Verarbeitungszeit entscheidend. Für H.265 auf mobilen Geräten wird eine Bitrate von 4–8 Mbps für 1080p-Video bei 30 FPS empfohlen. Der CRF-Modus (Constant Rate Factor) in libx265 ermöglicht die direkte Einstellung der Qualität, wobei 23–28 gute visuelle Qualität bei moderater Dateigröße bietet. Für Hardware-Encoder verwenden Sie den CBR-Modus mit einer Zielbitrate, da CRF hardwaremäßig nicht unterstützt wird.

Wärmemanagement

Kontinuierliches Transcoding auf einem mobilen Gerät verursacht erhebliche Erwärmung. Nach 5–7 Minuten intensiver Kodierung von 4K-Video kann die Prozessortemperatur 50–55 Grad erreichen, wonach Drosselung einsetzt. Die Lösung ist Transcoding mit Pausen oder Reduzierung der Bildrate auf 30 FPS. Wenn die App Stapeltranscoding erfordert (z.B. ein Video-Editor), ist es besser, in 2–3-Minuten-Batches mit Kühlintervallen zu verarbeiten. Für Produktionsszenarien ist es optimal, Transcoding auf die Serverseite zu verlagern und Cloud-Dienste zu nutzen.

Häufig gestellte Fragen

Wie unterscheidet sich Transcoding von Encoding?

Encoding ist die Komprimierung von rohen unkomprimierten Daten in einen Zielcodec. Transcoding umfasst sowohl Dekodierung als auch Kodierung: Es dekodiert zunächst einen vorhandenen komprimierten Stream und kodiert ihn dann erneut. Einfaches Encoding nimmt unkomprimierte Daten als Eingabe (z.B. von einer Kamera), während Transcoding eine bereits komprimierte Datei nimmt.

Welchen Codec sollte ich für Transcoding auf mobilen Geräten wählen?

Für maximale Kompatibilität — H.264. Für bessere Kompression — H.265 (HEVC). Wenn das Gerät Hardware-H.265-Kodierung unterstützt (iPhone 8+, Android mit Snapdragon 845+), bietet es bei gleicher Qualität die halbe Dateigröße. AV1-Kodierung ist auf mobilen Geräten selbst mit Hardware-Beschleunigung noch zu langsam.

Was ist „verlustfreies Transcoding”?

Streng genommen ist verlustfreies Transcoding beim Wechsel zwischen verlustbehafteten Codecs unmöglich. Wenn beide Codecs verlustbehaftet sind, verschlechtert jede Transcoding-Generation die Qualität. Verlustfreies Transcoding ist nur zwischen verlustfreien Formaten (FFV1, H.264 Lossless) oder beim Containerwechsel ohne Neukodierung (Transmuxing) möglich.

Kann Video in Echtzeit transcodiert werden?

Ja, wenn Hardware-Decoder und -Encoder verwendet werden und die Zielauflösung 1080p nicht überschreitet. Auf Geräten mit VideoToolbox (iOS) oder MediaCodec (Android) ist Echtzeit-Transcoding H.264→H.265 mit einer Verzögerung von 1–3 Sekunden möglich. Für 4K in Echtzeit ist ein leistungsstarker SoC wie Apple A17 Pro, Snapdragon 8 Gen 2 oder höher erforderlich.

Warum wurde die Videoqualität nach dem Transcoding schlechter?

Verlustbehaftetes Transcoding akkumuliert Kompressionsartefakte. Wenn die Quelldatei bereits stark komprimiert war (Bitrate 2–3 Mbps für 1080p), verdoppelt die erneute Kompression die Verluste. Empfohlen wird, nur von Master-Kopien mit hoher Bitrate (20+ Mbps) zu transcodieren und CRF 18–23 für minimale Verluste zu verwenden.

Zusammenfassung

  • Transcoding ist der vollständige Zyklus aus Dekodierung + Kodierung von Medien zur Änderung von Codec, Bitrate oder Auflösung
  • Transmuxing ändert nur den Container ohne Neukodierung — das ist kein Transcoding
  • Hardware-Transcoding auf VideoToolbox und MediaCodec ist 5–10 mal schneller als Software
  • FFmpeg ist ein universelles Werkzeug, das hunderte von Codecs und Verarbeitungsfiltern unterstützt
  • Jede Generation von verlustbehaftetem Transcoding verschlechtert die Qualität — Master-Kopien verwenden
  • Optimale Parameter für mobiles H.265: Bitrate 4–8 Mbps, Main10-Profil, GOP 2 Sekunden
  • Für die Produktion Cloud-Transcoding-Dienste nutzen (AWS Elemental, Azure Media) — sie belasten das Gerät nicht

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch