ٹرانسکوڈنگ ایک ڈیجیٹل میڈیا فائل کو ایک کمپریشن فارمیٹ سے دوسرے میں مکمل ڈی کوڈنگ اور دوبارہ انکوڈنگ کے ساتھ تبدیل کرنے کا عمل ہے۔ ٹرانسملٹی پلیکسنگ (صرف کنٹینر تبدیل کرنا) کے برعکس، ٹرانسکوڈنگ کوڈیک، بٹ ریٹ، ریزولوشن اور کمپریسڈ سٹریم کے دیگر پیرامیٹرز کو تبدیل کرتی ہے۔ Apple AVFoundation documentation (2026) کے مطابق، ٹرانسکوڈنگ مختلف آلات اور نیٹ ورک کی شرائط کے مطابق مواد کو ڈھالنے کے لیے استعمال ہوتی ہے۔
اہم نکات
ٹرانسکوڈنگ میڈیا فائل کو ایک کمپریشن فارمیٹ سے دوسرے میں تبدیل کرنے کا عمل ہے، جس میں ماخذ سٹریم کو مکمل طور پر ایک انٹرمیڈیٹ غیر کمپریسڈ PCM فارمیٹ میں ڈی کوڈ کیا جاتا ہے اور پھر نئے پیرامیٹرز کے ساتھ انکوڈ کیا جاتا ہے۔ اگر ماخذ فائل 10 Mbps بٹ ریٹ کے ساتھ H.264 کوڈیک استعمال کرتی ہے اور آؤٹ پٹ کو 3 Mbps بٹ ریٹ کے ساتھ H.265 کی ضرورت ہے — یہ ٹرانسکوڈنگ ہے۔
ٹرانسکوڈنگ سادہ ری پیکیجنگ (ٹرانسملٹی پلیکسنگ) سے مختلف ہے، جہاں صرف کنٹینر تبدیل ہوتا ہے (مثلاً MP4 سے MKV) جبکہ کمپریسڈ بٹ سٹریم غیر تبدیل شدہ رہتی ہے۔ ٹرانسکوڈنگ میں حسابی طور پر مہنگے آپریشنز شامل ہیں: ہر فریم کو ڈی کوڈ کرنا، فلٹرز لگانا (اسکیلنگ، رنگ درستی، کراپنگ)، اور نئے پیرامیٹرز کے ساتھ دوبارہ انکوڈنگ کرنا۔ یہ ٹرانسکوڈنگ کو میڈیا کے ساتھ کام کرتے وقت سب سے زیادہ وسائل استعمال کرنے والے آپریشنز میں سے ایک بناتا ہے۔
ٹرانسکوڈنگ مختلف کاموں میں استعمال ہوتی ہے: ویڈیو کو بینڈوتھ کی حدود کے مطابق ڈھالنا، ہدف آلہ پر ہارڈویئر ڈی کوڈنگ سپورٹ والے فارمیٹ میں تبدیل کرنا، HLS/DASH سٹریمنگ کے لیے متعدد ورژن بنانا، آڈیو ٹریکس کو علیحدہ فائل میں نکالنا۔ OTT سروسز (Netflix، YouTube، Twitch) اپ لوڈ کردہ ہر فائل کو مختلف بٹ ریٹ، ریزولوشن اور کوڈیک والے درجنوں ویرینٹ میں ٹرانسکوڈ کرتی ہیں تاکہ لاکھوں صارفین کو ایڈاپٹیو سٹریمنگ فراہم کی جا سکے۔
ٹرانسکوڈنگ کا عمل تین اہم مراحل پر مشتمل ہے: ڈی کوڈنگ، پروسیسنگ اور انکوڈنگ۔ ہر مرحلہ دستیابی اور مطلوبہ کارکردگی کے لحاظ سے CPU یا GPU/ہارڈویئر بلاکس پر انجام دیا جا سکتا ہے۔
پہلا مرحلہ ماخذ سٹریم کی ڈی کوڈنگ ہے۔ ماخذ فائل کنٹینر (MP4، MOV، MKV) سے پڑھی جاتی ہے، جس کے بعد کمپریسڈ ویڈیو پیکٹ ڈی کوڈر کو بھیجے جاتے ہیں۔ ڈی کوڈنگ ہارڈویئر پر مبنی (اگر کوڈیک معاون ہے) یا FFmpeg کے ذریعے سافٹ ویئر پر مبنی ہو سکتی ہے۔ ڈی کوڈنگ کا آؤٹ پٹ YUV420 یا BGRA فارمیٹ میں غیر کمپریسڈ فریم ہوتے ہیں — یہ وہ مرحلہ ہے جہاں ٹرانسکوڈنگ سادہ ریملٹی پلیکسنگ سے مختلف ہوتی ہے۔
دوسرا مرحلہ فلٹرنگ اور پروسیسنگ ہے۔ ڈی کوڈ شدہ فریم فلٹرز کی ایک زنجیر سے گزرتے ہیں: ہدف ریزولوشن پر اسکیلنگ، فریم ریٹ تبدیل کرنا، رنگ درستی، متن یا گرافکس اوورلے کرنا۔ FFmpeg فلٹر زنجیر ایک گراف کے طور پر بنائی جاتی ہے جہاں ہر فلٹر ایک علیحدہ پروسیسنگ ماڈیول ہے۔ مثال کے طور پر، scale=1280:720 فلٹر ریزولوشن تبدیل کرتا ہے، fps=30 فریم ریٹ تبدیل کرتا ہے، اور yadif ڈی انٹرلیسنگ کرتا ہے۔ تمام آپریشنز غیر کمپریسڈ فریم پر کیے جاتے ہیں، جس سے دوسرا مرحلہ سب سے زیادہ وسائل استعمال کرنے والا بنتا ہے۔
تیسرا مرحلہ ہدف فارمیٹ میں انکوڈنگ ہے۔ پروسیس شدہ فریم انکوڈر کو بھیجے جاتے ہیں، جو انہیں ہدف کوڈیک الگورتھم کے مطابق کمپریس کرتا ہے۔ انکوڈر ہارڈویئر پر مبنی (iOS پر VideoToolbox، Android پر MediaCodec) یا سافٹ ویئر پر مبنی (libx264، libx265) ہو سکتا ہے۔ انکوڈنگ پیرامیٹرز: مستقل معیار کے لیے CRF (Constant Rate Factor)، CBR/VBR کے لیے بٹ ریٹ، ہدف آلات کے ساتھ مطابقت کے لیے پروفائل اور لیول۔
// FFmpeg پر ٹرانسکوڈنگ پائپ لائن ڈایاگرام
AVFormatContext *inputCtx, *outputCtx;
AVCodecContext *decoderCtx, *encoderCtx;
AVFrame *frame = av_frame_alloc();
AVPacket packet;
while (av_read_frame(inputCtx, &packet) >= 0) {
// 1. ڈی کوڈ کریں
avcodec_send_packet(decoderCtx, &packet);
avcodec_receive_frame(decoderCtx, frame);
// 2. فلٹر کریں (اسکیل + fps تبدیلی)
sws_scale(swsCtx, frame->data, frame->linesize,
0, frame->height, scaledFrame->data,
scaledFrame->linesize);
// 3. انکوڈ کریں
avcodec_send_frame(encoderCtx, scaledFrame);
avcodec_receive_packet(encoderCtx, &outPacket);
av_interleaved_write_frame(outputCtx, &outPacket);
}
مذکورہ پائپ لائن کلاسک ٹرانسکوڈنگ سائیکل کو ظاہر کرتی ہے۔ av_read_frame فنکشن ان پٹ فائل سے کمپریسڈ پیکٹ پڑھتا ہے، avcodec_send_packet انہیں فریم میں ڈی کوڈ کرتا ہے، sws_scale اسکیلنگ کرتا ہے، اور avcodec_send_frame پروسیس شدہ فریم کو آؤٹ پٹ فارمیٹ میں انکوڈ کرتا ہے۔ یہ تین مرحلوں کا سائیکل انکوڈر سیٹنگز کے مطابق ہر فریم یا فریم گروپ (GOP) کے لیے دہرایا جاتا ہے۔
ٹرانسکوڈنگ اور ٹرانسملٹی پلیکسنگ کے درمیان فرق میڈیا انجینئرنگ میں الجھن کے سب سے عام نکات میں سے ایک ہے۔ اس فرق کو سمجھنا صحیح میڈیا پروسیسنگ حکمت عملی کے انتخاب کے لیے اہم ہے۔
| پیرامیٹر | ٹرانسکوڈنگ | ٹرانسملٹی پلیکسنگ |
|---|---|---|
| کیا تبدیل ہوتا ہے | کوڈیک، بٹ ریٹ، ریزولوشن | کنٹینر، میٹا ڈیٹا |
| حسابی بوجھ | زیادہ (ڈی کوڈنگ + انکوڈنگ) | کم سے کم (پیکٹ کاپی) |
| معیار | خراب ہو سکتا ہے (نسلی نقصان) | بغیر نقصان |
| عملدرآمد کا وقت | لمبی ویڈیو کے لیے منٹ–گھنٹے | سیکنڈ–منٹ |
| استعمال | فارمیٹ موافقت، کمپریشن | مطابقت کے لیے کنٹینر تبدیلی |
ٹرانسملٹی پلیکسنگ ڈی کوڈنگ اور دوبارہ انکوڈنگ کے بغیر ایک کمپریسڈ سٹریم کو دوسرے کنٹینر میں ری پیکیج کرنا ہے۔ اگر ویڈیو پہلے سے MP4 کنٹینر میں H.265 کوڈیک کے ساتھ کمپریسڈ ہے اور اسے MOV یا MKV کنٹینر میں رکھنے کی ضرورت ہے — ٹرانسملٹی پلیکسنگ صرف بٹ سٹریم پیکٹ کو ایک کنٹینر سے دوسرے میں کاپی کرتی ہے۔ معیار متاثر نہیں ہوتا، پروسیسنگ کا وقت کم سے کم ہوتا ہے کیونکہ فریم ڈی کوڈنگ کی ضرورت نہیں ہوتی۔ FFmpeg -codec copy پرچم کے ساتھ ٹرانسملٹی پلیکسنگ کرتا ہے۔
ٹرانسکوڈنگ دوسری طرف، میڈیا سٹریم کو مکمل طور پر ڈی کوڈ اور دوبارہ کمپریس کرتی ہے۔ جب بھی ویڈیو ٹرانسکوڈنگ سے گزرتی ہے، نسلی نقصان (generation loss) ہو سکتا ہے — بار بار لوسی کمپریشن کی وجہ سے معیار میں معمولی کمی۔ اسی بٹ ریٹ پر بھی، ٹرانسکوڈنگ کی تیسری نسل عام طور پر پہلی سے بدتر ہوتی ہے۔ یہی وجہ ہے کہ پیشہ ور افراد ماسٹر کاپیوں کو غیر کمپریسڈ یا کم سے کم کمپریسڈ فارمیٹس (ProRes، DNxHR) میں ذخیرہ کرنے اور صرف تقسیم کے لیے حتمی ورژن ٹرانسکوڈ کرنے کی تجویز دیتے ہیں۔
ٹرانسکوڈنگ ٹول کا انتخاب پلیٹ فارم، کارکردگی کی ضروریات اور استعمال کے معاملے پر منحصر ہے۔ موبائل ڈیولپمنٹ کے لیے مقامی API اور کراس پلیٹ فارم لائبریریاں دونوں دستیاب ہیں۔
FFmpeg تمام پلیٹ فارمز پر ٹرانسکوڈنگ کا ڈی فیکٹو معیار ہے۔ FFmpeg کمانڈ لائن تقریباً کسی بھی تبدیلی کی اجازت دیتی ہے: کوڈیک تبدیلی، بٹ ریٹ ایڈجسٹمنٹ، تراشنا، جوڑنا، فلٹر لگانا۔ موبائل ایپلیکیشنز کے لیے، FFmpeg libavformat، libavcodec اور libavfilter لائبریریوں کے ذریعے مربوط کیا جاتا ہے۔ ایک عام ٹرانسکوڈنگ کمانڈ کی مثال: ffmpeg -i input.mp4 -c:v libx265 -crf 23 -c:a aac -b:a 128k output.mp4۔
iOS پر، ٹرانسکوڈنگ AVAssetWriter اور AVAssetReader کے ذریعے کی جاتی ہے۔ AVAssetReader غیر کمپریسڈ فریم پڑھ کر ماخذ فائل کو ڈی کوڈ کرتا ہے، اور AVAssetWriter انہیں ہدف فارمیٹ میں انکوڈ کرتا ہے۔ یہ نقطہ نظر خود بخود VideoToolbox ہارڈویئر انکوڈرز استعمال کرتا ہے، زیادہ سے زیادہ کارکردگی کو یقینی بناتا ہے۔ Android پر، اسی طرح کی فعالیت MediaCodec کے ذریعے MediaExtractor اور MediaMuxer کے ساتھ دستیاب ہے — MediaExtractor کمپریسڈ پیکٹ نکالتا ہے، MediaCodec ڈی کوڈ اور انکوڈ کرتا ہے، MediaMuxer نتیجہ لکھتا ہے۔
پروڈکشن ماحول میں سرور سائیڈ ٹرانسکوڈنگ کے لیے کلاؤڈ سروسز استعمال کی جاتی ہیں: AWS Elemental MediaConvert، Azure Media Services، Google Transcoder API۔ یہ سروسز لوڈ کے تحت خود بخود پیمانہ کرتی ہیں، تمام مقبول فارمیٹس کو سپورٹ کرتی ہیں، اور ایڈاپٹیو سٹریمنگ (HLS, DASH) کے لیے ایک ان پٹ فائل کو درجنوں آؤٹ پٹ ویرینٹ میں ٹرانسکوڈ کر سکتی ہیں۔ موبائل ایپلیکیشنز کے لیے، کلاؤڈ ٹرانسکوڈنگ بہترین حل ہے کیونکہ یہ صارف کے آلے پر بوجھ نہیں ڈالتی اور غیر مطابقت پذیر مواد کی تیاری کی اجازت دیتی ہے۔
آئیے ہارڈویئر ایکسلریشن اور کلیدی معیار کے پیرامیٹرز کی تشکیل کا استعمال کرتے ہوئے موبائل پلیٹ فارمز پر عملی ٹرانسکوڈنگ کی مثالیں دیکھتے ہیں۔
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("ٹرانسکوڈنگ مکمل")
case .failed:
print("خرابی: " + assetExportSession.error.localizedDescription)
default:
break
}
}
// 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)
}
مثال iOS پر ٹرانسکوڈنگ کے دو طریقے دکھاتی ہے۔ AVAssetExportSession معیار کے پیش سیٹ (H.265 کے لیے HEVCHighestQuality) کے ساتھ ایک آسان طریقہ ہے۔ AVAssetReader + AVAssetWriter کے ذریعے دستی پائپ لائن پیرامیٹرز (بٹ ریٹ، پروفائل، لیول) پر مکمل کنٹرول فراہم کرتی ہے۔ AVVideoProfileLevelH265Main10 پیرامیٹر 10 بٹ رنگ گہرائی کے ساتھ HDR پروفائل Main10 کو فعال کرتا ہے، جو جدید HDR مواد کے لیے اہم ہے۔
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 کوڈ MediaExtractor — MediaCodec ڈی کوڈر — MediaCodec انکوڈر — MediaMuxer کی پائپ لائن بناتا ہے۔ MediaExtractor ان پٹ فائل سے کوڈیک کی قسم کا تعین کرتا ہے اور متعلقہ ڈی کوڈر منتخب کرتا ہے۔ انکوڈر H.265 (HEVC) کے لیے 4 Mbps بٹ ریٹ اور 2 سیکنڈ کی فریم کے وقفے کے ساتھ تشکیل دیا گیا ہے، جو سٹریمنگ کے لیے بہترین ہے۔ اہم: MediaCodec انکوڈر ہم آہنگی سے کام کرتا ہے، لہذا ریئل ٹائم ٹرانسکوڈنگ کے لیے ہر فریم کی درست PTS ٹائم سٹیمپ ہینڈلنگ کے ساتھ ایک لوپ نافذ کیا جانا چاہیے۔
موبائل آلات پر ٹرانسکوڈنگ ایک ایسا کام ہے جس میں محدود CPU، GPU وسائل اور تھرمل رکاوٹوں کی وجہ سے احتیاط سے اصلاح کی ضرورت ہوتی ہے۔ کئی حکمت عملیاں موثر طریقے سے ٹرانسکوڈنگ کرنے میں مدد کرتی ہیں۔
کلیدی کارکردگی کا عنصر ہارڈویئر انکوڈر ہے۔ iOS پر، VideoToolbox سافٹ ویئر libx264 سے 5–10 گنا تیز ہارڈویئر H.264 اور H.265 انکوڈنگ فراہم کرتا ہے۔ Android پر، MediaCodec اگر دستیاب ہو تو ہارڈویئر OMX اجزاء استعمال کرتا ہے۔ ہارڈویئر انکوڈنگ کو فعال کرنے سے فلیگ شپ آلہ پر 10 منٹ کی ویڈیو کا ٹرانسکوڈنگ وقت 30–40 منٹ (سافٹ ویئر) سے کم ہو کر 3–5 منٹ (ہارڈویئر) ہو جاتا ہے۔
موبائل ٹرانسکوڈنگ کے لیے معیار، حجم اور پروسیسنگ کے وقت کے درمیان توازن اہم ہے۔ موبائل آلات پر H.265 کے لیے، 30 FPS پر 1080p ویڈیو کے لیے 4–8 Mbps بٹ ریٹ تجویز کیا جاتا ہے۔ libx265 میں CRF موڈ (Constant Rate Factor) معیار کو براہ راست سیٹ کرنے کی اجازت دیتا ہے، جہاں 23–28 معتدل فائل سائز پر اچھا بصری معیار فراہم کرتا ہے۔ ہارڈویئر انکوڈرز کے لیے، ہدف بٹ ریٹ کے ساتھ CBR موڈ استعمال کریں کیونکہ CRF ہارڈویئر میں تعاون یافتہ نہیں ہے۔
موبائل آلہ پر مسلسل ٹرانسکوڈنگ نمایاں حرارت کا سبب بنتی ہے۔ 4K ویڈیو کی 5–7 منٹ کی شدید انکوڈنگ کے بعد، پروسیسر کا درجہ حرارت 50–55 ڈگری تک پہنچ سکتا ہے، جس کے بعد تھروٹلنگ شروع ہو جاتی ہے۔ حل وقفوں کے ساتھ ٹرانسکوڈنگ کرنا یا فریم ریٹ کو 30 FPS تک کم کرنا ہے۔ اگر ایپلیکیشن کو بیچ ٹرانسکوڈنگ کی ضرورت ہے (مثلاً ویڈیو ایڈیٹر)، تو کولنگ وقفوں کے ساتھ 2–3 منٹ کے بیچ میں پروسیس کرنا بہتر ہے۔ پروڈکشن منظرناموں کے لیے، ٹرانسکوڈنگ کو سرور سائیڈ پر منتقل کرنا اور کلاؤڈ سروسز استعمال کرنا بہترین ہے۔
اکثر پوچھے گئے سوالات
انکوڈنگ خام غیر کمپریسڈ ڈیٹا کو ہدف کوڈیک میں کمپریس کرنا ہے۔ ٹرانسکوڈنگ میں ڈی کوڈنگ اور انکوڈنگ دونوں شامل ہیں: یہ پہلے موجودہ کمپریسڈ سٹریم کو ڈی کوڈ کرتی ہے، پھر اسے دوبارہ انکوڈ کرتی ہے۔ سادہ انکوڈنگ ان پٹ کے طور پر غیر کمپریسڈ ڈیٹا لیتی ہے (مثلاً کیمرے سے)، جبکہ ٹرانسکوڈنگ پہلے سے کمپریسڈ فائل لیتی ہے۔
زیادہ سے زیادہ مطابقت کے لیے — H.264۔ بہتر کمپریشن کے لیے — H.265 (HEVC)۔ اگر آلہ ہارڈویئر H.265 انکوڈنگ کو سپورٹ کرتا ہے (iPhone 8+، Snapdragon 845+ والا Android)، تو یہ اسی معیار پر آدھا فائل سائز فراہم کرتا ہے۔ AV1 انکوڈنگ موبائل آلات پر ہارڈویئر ایکسلریشن کے ساتھ بھی ابھی بہت سست ہے۔
سخت الفاظ میں، لوسی کوڈیک کے درمیان سوئچ کرتے وقت بغیر نقصان ٹرانسکوڈنگ ناممکن ہے۔ اگر دونوں کوڈیک لوسی ہیں، تو ٹرانسکوڈنگ کی ہر نسل معیار کو خراب کرتی ہے۔ بغیر نقصان ٹرانسکوڈنگ صرف بغیر نقصان فارمیٹس (FFV1, H.264 Lossless) کے درمیان یا دوبارہ انکوڈنگ کے بغیر کنٹینر تبدیل کرنے (ٹرانسملٹی پلیکسنگ) پر ممکن ہے۔
ہاں، اگر ہارڈویئر ڈی کوڈر اور انکوڈر استعمال کیے جائیں اور ہدف ریزولوشن 1080p سے زیادہ نہ ہو۔ VideoToolbox (iOS) یا MediaCodec (Android) والے آلات پر، ریئل ٹائم H.264→H.265 ٹرانسکوڈنگ 1–3 سیکنڈ کی تاخیر سے ممکن ہے۔ 4K ریئل ٹائم کے لیے Apple A17 Pro، Snapdragon 8 Gen 2 یا اس سے اوپر جیسے طاقتور SoC کی ضرورت ہے۔
لوسی ٹرانسکوڈنگ کمپریشن آرٹفیکٹس جمع کرتی ہے۔ اگر ماخذ فائل پہلے سے بہت زیادہ کمپریسڈ تھی (1080p کے لیے 2–3 Mbps بٹ ریٹ)، دوبارہ کمپریشن نقصان کو دگنا کر دیتا ہے۔ سفارش ہے کہ صرف زیادہ بٹ ریٹ (20+ Mbps) والی ماسٹر کاپیوں سے ٹرانسکوڈ کریں اور کم سے کم نقصان کے لیے CRF 18–23 استعمال کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں