রূপান্তর

ফরম্যাটের মধ্যে ট্রান্সকোড

ট্রান্সফরমার তৈরি করার সময় আপনি যে আউটপুট অডিও এবং ভিডিও ফর্ম্যাটগুলি তৈরি করতে চান তা নির্দিষ্ট করতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত কোডটি দেখায় কিভাবে ট্রান্সফরমারকে H.264/AVC ভিডিও এবং AAC অডিও আউটপুট করতে কনফিগার করতে হয়:

কোটলিন

Transformer.Builder(context)
    .setVideoMimeType(MimeTypes.VIDEO_H264)
    .setAudioMimeType(MimeTypes.AUDIO_AAC)
    .build()

জাভা

new Transformer.Builder(context)
    .setVideoMimeType(MimeTypes.VIDEO_H264)
    .setAudioMimeType(MimeTypes.AUDIO_AAC)
    .build();

যদি ইনপুট মিডিয়া ফরম্যাট ইতিমধ্যেই অডিও বা ভিডিওর কনফিগারেশনের সাথে মিলে যায়, ট্রান্সফরমার স্বয়ংক্রিয়ভাবে ট্রান্সমক্সিং -এ স্যুইচ করে, অর্থাৎ ইনপুট কন্টেইনার থেকে সংকুচিত নমুনাগুলি পরিবর্তন ছাড়াই আউটপুট কন্টেইনারে অনুলিপি করে। এটি একই বিন্যাসে ডিকোডিং এবং পুনরায় এনকোডিংয়ের কম্পিউটেশনাল খরচ এবং সম্ভাব্য মানের ক্ষতি এড়ায়।

অডিও বা ভিডিও সরান

EditedMediaItem.Builder ব্যবহার করে অডিও বা ভিডিও সরান, উদাহরণস্বরূপ:

কোটলিন

EditedMediaItem.Builder(inputMediaItem).setRemoveAudio(true).build()

জাভা

new EditedMediaItem.Builder(inputMediaItem).setRemoveAudio(true).build();

একটি ক্লিপ ছাঁটা

আপনি ইনপুট মিডিয়া আইটেমে ক্লিপিং কনফিগারেশন সেট করে নির্দিষ্ট স্টার্ট এবং শেষ টাইমস্ট্যাম্পের বাইরের যেকোন মিডিয়া অপসারণ করতে পারেন। উদাহরণস্বরূপ, 10 সেকেন্ড থেকে 20 সেকেন্ডের মধ্যে শুধুমাত্র মিডিয়া ধারণকারী একটি ক্লিপ তৈরি করতে:

কোটলিন

val inputMediaItem = MediaItem.Builder()
    .setUri(uri)
    .setClippingConfiguration(
        ClippingConfiguration.Builder()
            .setStartPositionMs(10_000)
            .setEndPositionMs(20_000)
            .build())
    .build()

জাভা

MediaItem inputMediaItem =
    new MediaItem.Builder()
        .setUri(uri)
        .setClippingConfiguration(
            new MediaItem.ClippingConfiguration.Builder()
                .setStartPositionMs(10_000)
                .setEndPositionMs(20_000)
                .build())
        .build();

ট্রিম অপ্টিমাইজ করা

একটি ভিডিওর শুরুতে ছাঁটাই করার বিলম্ব কমাতে, ট্রিম অপ্টিমাইজেশান সক্ষম করুন৷

কোটলিন

Transformer.Builder(context)
    .experimentalSetTrimOptimizationEnabled(true)
    .build()

জাভা

new Transformer.Builder(context)
    .experimentalSetTrimOptimizationEnabled(true)
    .build();

এটি যতটা সম্ভব কম ভিডিও ডিকোডিং এবং রি-এনকোডিং করে রপ্তানির গতি বাড়ায়, তারপর মূল ভিডিওর বাকি অংশের সাথে পুনরায় এনকোড করা ডেটা সেলাই করে। অপ্টিমাইজেশানটি নতুন-এনকোড করা আউটপুট দিয়ে ইনপুট ফাইলের অংশ সেলাই করতে সক্ষম হওয়ার উপর নির্ভর করে, যার অর্থ হল এনকোডারের আউটপুট বিন্যাস এবং ইনপুট বিন্যাস অবশ্যই সামঞ্জস্যপূর্ণ হতে হবে। সুতরাং, উদাহরণস্বরূপ, যদি ফাইলটি মূলত একটি ভিন্ন এনকোডার বাস্তবায়ন সহ একটি ডিভাইসে উত্পাদিত হয় তবে সম্ভবত এটি অপ্টিমাইজেশান প্রয়োগ করা সম্ভব হবে না। অপ্টিমাইজেশান সফল হওয়ার জন্য, EncoderFactory মাধ্যমে ট্রান্সফরমারে প্রদত্ত এনকোডারের অবশ্যই ইনপুট বিন্যাসের সাথে সামঞ্জস্যপূর্ণ একটি স্তর এবং প্রোফাইল থাকতে হবে।

এই অপ্টিমাইজেশানটি শুধুমাত্র একক-সম্পদ MP4 ইনপুটের সাথে কাজ করে যার কোন প্রভাব ছাড়া কোন অপ ভিডিও ইফেক্ট এবং ঘূর্ণন 90 ডিগ্রি দ্বারা বিভাজ্য নয়। অপ্টিমাইজেশান ব্যর্থ হলে, ট্রান্সফরমার স্বয়ংক্রিয়ভাবে স্বাভাবিক রপ্তানিতে ফিরে আসে এবং ExportResult.OptimizationResult অপ্টিমাইজেশনের ফলাফল রিপোর্ট করে।

আমরা এই কার্যকারিতা যাচাই করছি এবং পরবর্তী প্রকাশে এটি অ-পরীক্ষামূলক হয়ে উঠবে বলে আশা করছি।

ভিডিও সম্পাদনা

EditedMediaItems অডিও প্রসেসর এবং ভিডিও ইফেক্টের তালিকা রয়েছে যাতে প্রয়োগ করা যায়। লাইব্রেরিতে সাধারণ ব্যবহারের ক্ষেত্রে ভিডিও ইফেক্ট ইমপ্লিমেন্টেশন রয়েছে, অথবা আপনি কাস্টম ইফেক্ট লিখতে পারেন এবং সম্পাদিত মিডিয়া আইটেম তৈরি করার সময় সেগুলি পাস করতে পারেন।

আপনি মিডিয়া রিস্কেল করতে পারেন, যা খুব উচ্চ রেজোলিউশন ইনপুট যেমন 4k বা 8k ভিডিও নিয়ে কাজ করার সময় প্রক্রিয়াকরণ সংস্থান বা ব্যান্ডউইথ সংরক্ষণ করতে কার্যকর হতে পারে। উদাহরণস্বরূপ, আনুপাতিকভাবে 480 পিক্সেল উচ্চ স্কেল করতে:

কোটলিন

EditedMediaItem.Builder(MediaItem.fromUri(uri))
    .setEffects(Effects(
        /* audioProcessors= */ listOf(),
        /* videoEffects= */ listOf(Presentation.createForHeight(480))
    )).build()

জাভা

new EditedMediaItem.Builder(MediaItem.fromUri(uri))
    .setEffects(new Effects(
        /* audioProcessors= */ ImmutableList.of(),
        /* videoEffects= */ ImmutableList.of(Presentation.createForHeight(480))))
    .build();

বিকল্পভাবে, আপনি একটি প্রদত্ত ফ্যাক্টর দ্বারা স্কেল করতে পারেন, উদাহরণস্বরূপ, আকার অর্ধেক করতে:

কোটলিন

val editedMediaItem = EditedMediaItem.Builder(MediaItem.fromUri(uri))
    .setEffects(Effects(
        /* audioProcessors= */ listOf(),
        /* videoEffects= */ listOf(
            ScaleAndRotateTransformation.Builder().setScale(.5f, .5f).build())
    )).build()

জাভা

new EditedMediaItem.Builder(MediaItem.fromUri(uri))
    .setEffects(new Effects(
        /* audioProcessors= */ ImmutableList.of(),
        /* videoEffects= */ ImmutableList.of(
            new ScaleAndRotateTransformation.Builder().setScale(.5f, .5f).build())))
    .build();

আপনি একই ভাবে ঘূর্ণন কনফিগার করতে পারেন:

কোটলিন

EditedMediaItem.Builder(MediaItem.fromUri(uri))
    .setEffects(Effects(
        /* audioProcessors= */ listOf(),
        /* videoEffects= */ listOf(
            ScaleAndRotateTransformation.Builder()
                .setRotationDegrees(90f)
                .build())
    )).build()

জাভা

new EditedMediaItem.Builder(MediaItem.fromUri(uri))
    .setEffects(new Effects(
        /* audioProcessors= */ ImmutableList.of(),
        /* videoEffects= */ ImmutableList.of(
            new ScaleAndRotateTransformation.Builder().setRotationDegrees(90f).build())))
    .build();

কাস্টম ভিডিও প্রভাব

Effects কনস্ট্রাক্টর প্রয়োগ করার জন্য অডিও এবং ভিডিও প্রভাবগুলির একটি তালিকা গ্রহণ করে। অভ্যন্তরীণভাবে, ট্রান্সফরমারের ইফেক্ট ফ্রেমওয়ার্ক ভিডিও ইফেক্টের তালিকাকে জিএল শেডার প্রোগ্রামের একটি ক্রমানুসারে রূপান্তরিত করে যা ক্রমানুসারে প্রয়োগ করা হয়। কিছু ক্ষেত্রে, প্রভাব কাঠামো এক শেডার প্রোগ্রামের সাথে একাধিক প্রভাব প্রয়োগ করতে সক্ষম। উদাহরণস্বরূপ, এক শেডার প্রোগ্রাম একাধিক পরপর ম্যাট্রিক্স রূপান্তর প্রয়োগ করতে পারে, যা দক্ষতা এবং গুণমান উন্নত করে।

ExoPlayer.setVideoEffects ব্যবহার করে ExoPlayer-এ পূর্বরূপের জন্য ভিডিও প্রভাবগুলিও সমর্থিত।

ডেমো অ্যাপটিতে কাস্টম ভিডিও প্রভাবের উদাহরণ রয়েছে।

অডিও সম্পাদনা

অডিও ইফেক্টগুলি AudioProcessor দৃষ্টান্তগুলির একটি ক্রম কাঁচা (পিসিএম) অডিওতে প্রয়োগ করে প্রয়োগ করা হয়। ExoPlayer DefaultAudioSink.Builder এ অডিও প্রসেসর পাস করা সমর্থন করে, যা অডিও সম্পাদনার পূর্বরূপ দেখার অনুমতি দেয়।