Mobil inkişafda transkodlaşdırma — bu nədir, iş prinsipi və ssenarilər

Müəllif: IT Sectr Dərc olunub: 2026-05-25 Oxuma vaxtı: 10 dəq

Transcoding — rəqəmsal media faylının bir sıxılma formatından digərinə tam dekodlaşdırma və yenidən kodlaşdırma ilə çevrilməsi prosesidir. Transmulyasiyadan (yalnız konteynerin dəyişdirilməsi) fərqli olaraq, transkodlaşdırma kodek, bitrate, rezolyusiya və sıxılmış axının digər parametrlərini dəyişir. Apple AVFoundation documentation (2026)-ya görə, transkodlaşdırma məzmunun müxtəlif cihazlar və şəbəkə şərtlərinə uyğunlaşdırılması üçün istifadə olunur.

Əsas məqamlar

  • Transcoding — mənbə axınının sıxılmamış PCM-ə tam dekodlaşdırılması və sonra yeni formata kodlaşdırılması
  • Transmuxing axını yenidən kodlaşdırmadan yalnız konteyneri dəyişir — bu transkodlaşdırma deyil
  • Transkodlaşdırmanın əsas səbəbləri: kodek dəyişikliyi, bitrate-in azaldılması, rezolyusiyanın dəyişdirilməsi, DRM-ə uyğunlaşma
  • Alətlər: FFmpeg, AVFoundation (iOS), MediaCodec (Android), AWS Elemental MediaConvert
  • Mobil cihazlarda realtime transkodlaşdırma enkoderin aparat sürətləndirilməsini tələb edir

Transkodlaşdırma nədir?

Transcoding — media faylının bir sıxılma formatından digərinə mənbə axınının aralıq sıxılmamış PCM formatına tam dekodlaşdırılması və sonra yeni parametrlərlə kodlaşdırılması prosesidir. Əgər mənbə faylda video H.264 kodeki ilə 10 Mb/s bitrate-də sıxılıbsa və çıxışda H.265 3 Mb/s bitrate ilə tələb olunursa — bu transkodlaşdırmadır.

Transkodlaşdırma yalnız konteynerin dəyişdirildiyi (məsələn, MP4-dən MKV-yə) adyenidən qablaşdırmadan (transmuxing) fərqlənir, burada sıxılmış bit axını dəyişməz qalır. Transkodlaşdırma zamanı hesablama baxımından bahalı çevrilmələr baş verir: hər kadrın dekodlaşdırılması, filtrlərin tətbiqi (miqyaslama, rəng korreksiyası, kəsmə), yeni parametrlərlə yenidən kodlaşdırma. Bu, transkodlaşdırmanı media ilə iş zamanı ən resurs tutumlu əməliyyatlardan birinə çevirir.

Transkodlaşdırma geniş spektrli tapşırıqlarda tətbiq olunur: videonun şəbəkə bant genişliyi məhdudiyyətlərinə uyğunlaşdırılması, hədəf cihazda dekodlaşdırmanın aparat dəstəyi olan formata çevrilməsi, HLS/DASH striminqi üçün çoxsaylı versiyaların yaradılması, audio treklərin ayrıca fayla çıxarılması. OTT xidmətləri (Netflix, YouTube, Twitch) hər yüklənmiş faylı milyonlarla istifadəçiyə adaptiv striminq təmin etmək üçün müxtəlif bitrate-lər, rezolyusiyalar və kodeklərlə onlarla varianta transkodlaşdırır.

Transkodlaşdırma necə işləyir?

Transkodlaşdırma prosesi üç əsas mərhələdən ibarətdir: dekodlaşdırma, emal və kodlaşdırma. Hər mərhələ mövcudluq və tələb olunan performansdan asılı olaraq həm CPU-da, həm də GPU/aparat bloklarında yerinə yetirilə bilər.

Transkodlaşdırma mərhələləri

Birinci mərhələ — mənbə axınının dekodlaşdırılması. Mənbə fayl konteynerdən (MP4, MOV, MKV) oxunur, sonra sıxılmış video paketlər dekoderə göndərilir. Dekodlaşdırma aparat (əgər kodek dəstəklənirsə) və ya FFmpeg vasitəsilə proqram təminatı ola bilər. Dekodlaşdırmanın çıxışında YUV420 və ya BGRA formatında sıxılmamış kadrlar alınır — məhz bu mərhələdən transkodlaşdırma adi remultipleksasiyadan fərqlənir.

İkinci mərhələ — filtrləmə və emal. Dekodlaşdırılmış kadrlar filtr zəncirindən keçir: hədəf rezolyusiyaya miqyaslama, kadr tezliyinin dəyişdirilməsi, rəng korreksiyası, mətn və ya qrafikanın əlavə edilməsi. FFmpeg filtr zənciri qraf kimi qurulur, burada hər filtr ayrıca emal moduludur. Məsələn, scale=1280:720 filtri rezolyusiyanı dəyişir, fps=30 kadr tezliyini dəyişir, yadif isə deinterleystinq həyata keçirir. Bütün əməliyyatlar sıxılmamış kadrlar üzərində aparılır, buna görə də ikinci mərhələ ən resurs tutumludur.

Üçüncü mərhələ — hədəf formata kodlaşdırma. Emal edilmiş kadrlar enkoderin girişinə verilir, o da onları hədəf kodekin alqoritmi ilə sıxır. Enkoder aparat (iOS-da VideoToolbox, Android-də MediaCodec) və ya proqram (libx264, libx265) ola bilər. Kodlaşdırma parametrləri: sabit keyfiyyət üçün CRF (Constant Rate Factor), CBR/VBR üçün bitrate, hədəf cihazlarla uyğunluq üçün profil və səviyyə.

cpp
// FFmpeg-də transkodlaşdırma pipeline sxemi
AVFormatContext *inputCtx, *outputCtx;
AVCodecContext *decoderCtx, *encoderCtx;
AVFrame *frame = av_frame_alloc();
AVPacket packet;

while (av_read_frame(inputCtx, &packet) >= 0) {
    // 1. Dekodlaşdır
    avcodec_send_packet(decoderCtx, &packet);
    avcodec_receive_frame(decoderCtx, frame);
    
    // 2. Filtr (miqyaslama + fps dəyişməsi)
    sws_scale(swsCtx, frame->data, frame->linesize,
              0, frame->height, scaledFrame->data,
              scaledFrame->linesize);
    
    // 3. Kodlaşdır
    avcodec_send_frame(encoderCtx, scaledFrame);
    avcodec_receive_packet(encoderCtx, &outPacket);
    av_interleaved_write_frame(outputCtx, &outPacket);
}

Təqdim olunan pipeline klassik transkodlaşdırma dövrünü nümayiş etdirir. av_read_frame funksiyası giriş faylından sıxılmış paketləri oxuyur, avcodec_send_packet onları kadrlara dekodlaşdırır, sws_scale miqyaslamanı yerinə yetirir və avcodec_send_frame emal edilmiş kadrı çıxış formatına kodlaşdırır. Bu üç mərhələli dövr hər kadr və ya kadr qrupu (GOP) üçün enkoder parametrlərindən asılı olaraq təkrarlanır.

Transkodlaşdırma vs transmulyasiya

Transkodlaşdırma və transmulyasiya arasındakı fərq media mühəndisliyində ən çox qarışıqlıq yaradan məqamlardan biridir. Bu fərqi başa düşmək media emalı üçün düzgün strategiya seçmək üçün kritik əhəmiyyət daşıyır.

ParametrTranskodlaşdırmaTransmulyasiya
Nə dəyişirKodek, bitrate, rezolyusiyaKonteyner, metadata
Hesablama yüküYüksək (dekodlaşdırma + kodlaşdırma)Minimal (paketlərin kopyalanması)
KeyfiyyətPisləşə bilər (generasiya itkisi)İtki olmadan
İcra müddətiUzun video üçün dəqiqələr–saatlarSaniyələr–dəqiqələr
TətbiqFormat uyğunlaşdırılması, sıxılmaUyğunluq üçün konteyner dəyişikliyi

Transmuxing — sıxılmış axının dekodlaşdırma və yenidən kodlaşdırma olmadan başqa konteynerə yenidən qablaşdırılmasıdır. Əgər video artıq MP4 konteynerində H.265 kodeki ilə sıxılıbsa və onu MOV və ya MKV konteynerinə yerləşdirmək lazımdırsa — transmulyasiya sadəcə bit paketlərini bir konteynerdən digərinə kopyalayır. Keyfiyyət pisləşmir, emal müddəti minimaldır, çünki kadrların dekodlaşdırılması tələb olunmur. FFmpeg transmulyasiyanı -codec copy flagı ilə yerinə yetirir.

Transkodlaşdırma isə media axınını tamamilə deşifrə edir və yenidən sıxır. Video hər dəfə transkodlaşdırmadan keçdikdə generasiya itkisi (generation loss) baş verə bilər — itkili sıxılma səbəbindən keyfiyyətin cüzi pisləşməsi. Hətta eyni bitrate-də üçüncü nəsil transkodlaşdırma adətən birincidən daha pisdir. Buna görə də peşəkarlar master-surətləri sıxılmamış və ya minimal sıxılmış formatlarda (ProRes, DNxHR) saxlamağı və yalnız çatdırılma üçün final versiyalarını transkodlaşdırmağı tövsiyə edirlər.

Transkodlaşdırma alətləri

Transkodlaşdırma alətinin seçimi platformadan, performans tələblərindən və istifadə ssenarisindən asılıdır. Mobil inkişaf üçün həm yerli API-lər, həm də platformalararası kitabxanalar mövcuddur.

FFmpeg — universal alət

FFmpeg — bütün platformalarda transkodlaşdırma üçün de-fakto standartdır. FFmpeg komanda sətri demək olar ki, istənilən çevrilməni yerinə yetirməyə imkan verir: kodek dəyişikliyi, bitrate dəyişikliyi, kəsmə, birləşdirmə, filtrlərin tətbiqi. Mobil tətbiqlər üçün FFmpeg libavformat, libavcodec və libavfilter kitabxanaları vasitəsilə inteqrasiya olunur. Tipik transkodlaşdırma əmr nümunəsi: ffmpeg -i input.mp4 -c:v libx265 -crf 23 -c:a aac -b:a 128k output.mp4.

Platforma API-ləri

iOS-da transkodlaşdırma AVAssetWriterAVAssetReader vasitəsilə həyata keçirilir. AVAssetReader mənbə faylı dekodlaşdırır, sıxılmamış kadrları oxuyur, AVAssetWriter isə onları hədəf formata kodlaşdırır. Bu yanaşma avtomatik olaraq VideoToolbox aparat enkoderlərindən istifadə edir və maksimum performans təmin edir. Android-də analoji funksionallıq MediaExtractor və MediaMuxer ilə birlikdə MediaCodec vasitəsilə mövcuddur — MediaExtractor sıxılmış paketləri çıxarır, MediaCodec dekodlaşdırır və kodlaşdırır, MediaMuxer nəticəni yazır.

Bulud xidmətləri

İstehsal mühitində server transkodlaşdırması üçün bulud xidmətlərindən istifadə olunur: AWS Elemental MediaConvert, Azure Media Services, Google Transcoder API. Bu xidmətlər yük altında avtomatik miqyaslanır, bütün populyar formatları dəstəkləyir və bir giriş faylını adaptiv striminq (HLS, DASH) üçün onlarla çıxış variantına transkodlaşdıra bilər. Mobil tətbiqlər üçün bulud transkodlaşdırması optimal həll yoludur, çünki istifadəçi cihazını yükləmir və məzmunu asinxron hazırlamağa imkan verir.

Transkodlaşdırma kod nümunələri

Mobil platformalarda aparat sürətləndirilməsi və əsas keyfiyyət parametrlərinin konfiqurasiyası ilə transkodlaşdırmanın praktik nümunələrini nəzərdən keçirək.

iOS-da H.264-dən H.265-ə transkodlaşdırma

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("Transkodlaşdırma tamamlandı")
            case .failed:
                print("Xəta: " + assetExportSession.error.localizedDescription)
            default:
                break
            }
        }
    
    // AVAssetReader + AVAssetWriter ilə əl ilə transkodlaşdırma
    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)
}

Nümunədə iOS-da transkodlaşdırmaya iki yanaşma göstərilib. AVAssetExportSession — keyfiyyət parametrləri (H.265 üçün HEVCHighestQuality) ilə sadə üsul. AVAssetReader + AVAssetWriter vasitəsilə əl ilə pipeline parametrlər üzərində tam nəzarət verir: bitrate, profil, səviyyə. AVVideoProfileLevelH265Main10 parametri 10 bit rəng dərinliyi ilə HDR Main10 profilini aktivləşdirir ki, bu da müasir HDR məzmunu üçün vacibdir.

Android-də MediaCodec ilə transkodlaşdırma

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

Android kodu MediaExtractor — MediaCodec decoder — MediaCodec encoder — MediaMuxer pipeline yaradır. MediaExtractor giriş faylından kodek tipini müəyyən edir və müvafiq dekoderi seçir. Enkoder 4 Mb/s bitrate və 2 saniyə əsas kadr intervalı ilə H.265 (HEVC) üçün konfiqurasiya olunur ki, bu da striminq üçün optimaldır. Vacib: MediaCodec encoder sinxron işləyir, buna görə də realtime transkodlaşdırma üçün hər kadrın vaxt nişanlarının (PTS) düzgün emalı ilə dövr təşkil etmək tələb olunur.

Mobil cihazlar üçün transkodlaşdırmanın optimallaşdırılması

Mobil cihazlarda transkodlaşdırma məhdud CPU, GPU resursları və istilik məhdudiyyətləri səbəbindən diqqətli optimallaşdırma tələb edən tapşırıqdır. Bir neçə strategiya transkodlaşdırmanı səmərəli şəkildə yerinə yetirməyə kömək edir.

Apartment kodlaşdırmadan istifadə

Performansın əsas amili — aparat enkoderidir. iOS-da VideoToolbox H.264 və H.265-in aparat kodlaşdırmasını proqram libx264-dən 5–10 dəfə sürətli təmin edir. Android-də MediaCodec mövcud olduqda aparat OMX komponentlərindən istifadə edir. Apartment kodlaşdırmanın aktivləşdirilməsi flaqman cihazda 10 dəqiqəlik videonun transkodlaşdırma müddətini 30–40 dəqiqədən (proqram) 3–5 dəqiqəyə (aparat) qısaldır.

Keyfiyyət parametrlərinin seçimi

Mobil transkodlaşdırma üçün keyfiyyət, ölçü və emal müddəti arasında balans kritik əhəmiyyət daşıyır. Mobil cihazlarda H.265 üçün 30 FPS kadr tezliyi ilə 1080p video üçün 4–8 Mb/s bitrate tövsiyə olunur. CRF rejimi (Constant Rate Factor) libx265-də birbaşa keyfiyyəti təyin etməyə imkan verir, burada 23–28 orta fayl ölçüsündə yaxşı vizual keyfiyyət verir. Apartment enkoderlər üçün hədəf bitrate ilə CBR rejimindən istifadə edin, çünki CRF apartament dəstəklənmir.

İstilik idarəetməsi

Mobil cihazda fasiləsiz transkodlaşdırma əhəmiyyətli qızmağa səbəb olur. 4K videonun intensiv kodlaşdırılmasının 5–7 dəqiqəsindən sonra prosessorun temperaturu 50–55 dərəcəyə çata bilər, bundan sonra trottling işə düşür. Həll yolu — fasilələrlə transkodlaşdırma və ya kadr tezliyinin 30 FPS-ə endirilməsi. Əgər tətbiq kütləvi transkodlaşdırma tələb edirsə (məsələn, video redaktoru), emalı soyutma intervalları ilə 2–3 dəqiqəlik partiyalarla yerinə yetirmək daha yaxşıdır. İstehsal ssenariləri üçün transkodlaşdırmanı server tərəfinə keçirmək və bulud xidmətlərindən istifadə etmək optimaldır.

Tez-tez verilən suallar

Transkodlaşdırma kodlaşdırmadan nə ilə fərqlənir?

Kodlaşdırma (encoding) — mənbə sıxılmamış məlumatların hədəf kodekə sıxılmasıdır. Transkodlaşdırma həm dekodlaşdırma, həm də kodlaşdırmanı əhatə edir: əvvəlcə mövcud sıxılmış axını dekodlaşdırır, sonra yenidən kodlaşdırır. Sadə kodlaşdırma giriş kimi sıxılmamış məlumatları (məsələn, kameradan) qəbul edir, transkodlaşdırma isə artıq sıxılmış faylı qəbul edir.

Mobil cihazlarda transkodlaşdırma üçün hansı kodek seçilməlidir?

Maksimum uyğunluq üçün — H.264. Daha yaxşı sıxılma üçün — H.265 (HEVC). Əgər cihaz H.265-in aparat kodlaşdırmasını dəstəkləyirsə (iPhone 8+, Snapdragon 845+ ilə Android), eyni keyfiyyətdə iki dəfə kiçik fayl ölçüsü təmin edir. AV1 kodlaşdırması mobil cihazlarda hələ də çox yavaşdır, hətta aparat sürətləndirilməsi ilə belə.

YesItkisiz transkodlaşdırma nədir?

Düzünü desək, itkili kodek dəyişdirilərkən itkisiz transkodlaşdırma mümkün deyil. Əgər hər iki kodek itkilidirsə, transkodlaşdırmanın hər nəsli keyfiyyəti pisləşdirir. İtkisiz transkodlaşdırma yalnız itkisiz formatlar (FFV1, H.264 Lossless) arasında və ya konteyneri yenidən kodlaşdırmadan dəyişdirərkən (transmuxing) mümkündür.

Videonu real vaxtda transkodlaşdırmaq mümkündürmü?

Bəli, əgər aparat dekoderi və enkoderi istifadə olunursa və hədəf rezolyusiya 1080p-dən çox deyilsə. VideoToolbox (iOS) və ya MediaCodec (Android) olan cihazlarda H.264-dən H.265-ə realtime transkodlaşdırma 1–3 saniyə gecikmə ilə mümkündür. 4K realtime üçün güclü SoC Apple A17 Pro, Snapdragon 8 Gen 2 və ya daha yenisi tələb olunur.

Niyə transkodlaşdırmadan sonra video keyfiyyəti pisləşdi?

İtkili transkodlaşdırma sıxılma artefaktlarını toplayır. Əgər mənbə fayl artıq güclü sıxılmışdısa (1080p üçün 2–3 Mb/s), yenidən sıxılma itkiləri ikiqat artıracaq. Tövsiyə olunur yalnız yüksək bitrate-li (20+ Mb/s) master-surətlərdən transkodlaşdırmaq və minimal itkilər üçün CRF 18–23 istifadə etmək.

Nəticə

  • Transcoding — kodek, bitrate və ya rezolyusiyanı dəyişmək üçün tam dekodlaşdırma + kodlaşdırma dövrü
  • Transmuxing yalnız konteyneri dəyişir, yenidən kodlaşdırmadan — bu transkodlaşdırma deyil
  • VideoToolbox və MediaCodec-də aparat transkodlaşdırması proqramdan 5–10 dəfə sürətlidir
  • FFmpeg — yüzlərlə kodek və emal filtrini dəstəkləyən universal alət
  • İtkili transkodlaşdırmanın hər nəsli keyfiyyəti pisləşdirir — master-surətlərdən istifadə edin
  • Mobil H.265 üçün optimal parametrlər: bitrate 4–8 Mb/s, profil Main10, GOP 2 saniyə
  • İstehsal üçün bulud transkodlaşdırma xidmətlərindən (AWS Elemental, Azure Media) istifadə edin — onlar cihazı yükləmir

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun