แปลงรูปแบบไฟล์
คุณสามารถระบุรูปแบบเสียงและวิดีโอที่คุณต้องการสร้างเมื่อ จากการสร้าง 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
ซึ่งทำให้สามารถดูตัวอย่างการแก้ไขเสียงได้