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

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

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

KotlinJava
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();

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

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

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

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

ตัดคลิป

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

KotlinJava
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();

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

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

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

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

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

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

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

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

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

KotlinJava
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();

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

KotlinJava
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();

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

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

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

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

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

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