การเปลี่ยนรูปแบบ

แปลงรูปแบบไฟล์

คุณสามารถระบุรูปแบบเสียงและวิดีโอที่คุณต้องการสร้างเมื่อ จากการสร้าง Transformer ตัวอย่างเช่น โค้ดต่อไปนี้จะแสดงวิธีการ เพื่อกำหนดค่า Transformer ให้เอาต์พุตวิดีโอ H.264/AVC และเสียง AAC โดยทำดังนี้

Kotlin

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

Java

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

หากรูปแบบสื่ออินพุตตรงกับการกำหนดค่าสำหรับเสียงอยู่แล้ว หรือวิดีโอ Transformer จะเปลี่ยนเป็นการแปลงสัญญาณโดยอัตโนมัติ ซึ่งก็คือการคัดลอก ตัวอย่างที่บีบอัดจากคอนเทนเนอร์อินพุตไปยังคอนเทนเนอร์เอาต์พุตโดยไม่มี การแก้ไข เพื่อหลีกเลี่ยงต้นทุนในการคํานวณและการสูญเสียคุณภาพที่อาจเกิดขึ้น การถอดรหัส และการเข้ารหัสอีกครั้งในรูปแบบเดิม

นำเสียงหรือวิดีโอออก

นำเสียงหรือวิดีโอออกโดยใช้ EditedMediaItem.Builder เช่น

Kotlin

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

Java

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

ตัดคลิป

คุณนำสื่อที่อยู่นอกการประทับเวลาเริ่มต้นและสิ้นสุดที่ระบุไว้ออกได้โดยการตั้งค่า การกำหนดค่าการตัดในรายการสื่ออินพุต ตัวอย่างเช่น ในการสร้าง คลิปที่มีเฉพาะสื่อความยาวระหว่าง 10 วินาทีถึง 20 วินาที

Kotlin

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

Java

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

การเพิ่มประสิทธิภาพการตัด

เปิดใช้การตัดเพื่อลดเวลาในการตอบสนองของการตัดช่วงเริ่มต้นของวิดีโอ การเพิ่มประสิทธิภาพ

Kotlin

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

Java

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

ซึ่งจะช่วยเพิ่มความเร็วในการส่งออกด้วยการถอดรหัสและเข้ารหัสอีกครั้งวิดีโอเพียงเล็กน้อยเท่าๆ กับ แล้วต่อข้อมูลที่เข้ารหัสอีกครั้งกับส่วนที่เหลือของต้นฉบับ ในการสร้างสรรค์วิดีโอ การเพิ่มประสิทธิภาพต้องอาศัยความสามารถในการรวมส่วนหนึ่งของไฟล์อินพุต พร้อมด้วยเอาต์พุตที่เข้ารหัสใหม่ ซึ่งหมายความว่ารูปแบบเอาต์พุตของโปรแกรมเปลี่ยนไฟล์และ รูปแบบอินพุตต้องใช้งานร่วมกันได้ ตัวอย่างเช่น หากเดิมไฟล์คือ บนอุปกรณ์ที่มีการติดตั้งโปรแกรมเปลี่ยนไฟล์ที่แตกต่างออกไป จะไม่สามารถใช้การเพิ่มประสิทธิภาพได้ เพื่อให้การเพิ่มประสิทธิภาพประสบความสำเร็จ ได้มีโปรแกรมเปลี่ยนไฟล์แก่ Transformer ผ่าน EncoderFactory ต้องมีระดับและโปรไฟล์ที่ใช้ได้กับรูปแบบอินพุต

การเพิ่มประสิทธิภาพนี้ใช้ได้กับอินพุต MP4 แบบเนื้อหาเดียวเท่านั้น โดยไม่มีเอฟเฟกต์ใดๆ ยกเว้น ไม่มีเอฟเฟ็กต์และการหมุนวิดีโอแบบ op หาร 90 องศา หากการเพิ่มประสิทธิภาพ ไม่ประสบความสำเร็จ Transformer จะกลับไปเป็นการส่งออกปกติโดยอัตโนมัติ และรายงาน ผลของการเพิ่มประสิทธิภาพใน ExportResult.OptimizationResult

เรากำลังตรวจสอบฟังก์ชันการทำงานนี้และคาดว่าจะไม่ใช่การทดสอบ ในรุ่นต่อๆ ไป

การแก้ไขวิดีโอ

EditedMediaItems มีรายการตัวประมวลผลเสียงและเอฟเฟกต์วิดีโอที่จะนำมาใช้ คำสั่งซื้อ ไลบรารีนี้รวมการใช้งานเอฟเฟกต์วิดีโอสำหรับกรณีการใช้งานทั่วไป หรือจะเขียนเอฟเฟกต์ที่กำหนดเอง แล้วส่งไปเมื่อสร้างสื่อที่ตัดต่อแล้วก็ได้เช่นกัน รายการ

คุณสามารถปรับขนาดสื่อใหม่ได้ ซึ่งอาจเป็นประโยชน์ต่อการประหยัดทรัพยากรในการประมวลผล หรือ เมื่อต้องจัดการกับอินพุตที่มีความละเอียดสูงมาก เช่น วิดีโอ 4K หรือ 8K เช่น หากต้องการปรับขนาดตามสัดส่วนให้สูง 480 พิกเซล ให้ทําดังนี้

Kotlin

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

Java

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

หรือคุณจะปรับขนาดตามปัจจัยที่ระบุก็ได้ เช่น เพื่อลดขนาดลงครึ่งหนึ่ง ดังนี้

Kotlin

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

Java

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

คุณสามารถกำหนดค่าการหมุนได้ด้วยวิธีเดียวกัน

Kotlin

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

Java

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

เอฟเฟกต์วิดีโอที่กำหนดเอง

เครื่องมือสร้าง Effects ยอมรับรายการเอฟเฟกต์เสียงและวิดีโอที่จะใช้ เฟรมเวิร์กเอฟเฟกต์ของ Transformer เพื่อแปลงรายการเอฟเฟกต์วิดีโอเพื่อนำไปใช้ประโยชน์ภายใน เป็นลำดับโปรแกรมเงา GL ที่ถูกนำไปใช้ตามลำดับ ในบางกรณี เฟรมเวิร์กเอฟเฟ็กต์จะสามารถใช้เอฟเฟกต์หลายอย่างด้วยโปรแกรมปรับเฉดสีเพียงโปรแกรมเดียว เช่น โปรแกรมตัวปรับเฉดสี 1 โปรแกรมสามารถประยุกต์ใช้เมทริกซ์ต่อเนื่องกันหลายเมทริกซ์ได้ การเปลี่ยนแปลง ซึ่งจะช่วยปรับปรุงประสิทธิภาพและคุณภาพ

เอฟเฟกต์วิดีโอยังรองรับการแสดงตัวอย่างใน ExoPlayer ได้ด้วย โดยใช้ ExoPlayer.setVideoEffects

แอปสาธิตมีตัวอย่างเอฟเฟกต์วิดีโอที่กำหนดเอง

การแก้ไขเสียง

เอฟเฟกต์เสียงจะนำไปใช้ได้โดยใช้ลำดับของ AudioProcessor ให้เป็นเสียง RAW (PCM) ได้ ExoPlayer รองรับการส่งผ่านตัวประมวลผลเสียงไปยัง DefaultAudioSink.Builder ซึ่งทำให้สามารถดูตัวอย่างการแก้ไขเสียงได้