แปลงรูปแบบไฟล์
คุณสามารถระบุรูปแบบเสียงและวิดีโอที่คุณต้องการสร้างเมื่อ จากการสร้าง Transformer ตัวอย่างเช่น โค้ดต่อไปนี้จะแสดงวิธีการ เพื่อกำหนดค่า Transformer ให้เอาต์พุตวิดีโอ 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();
หากรูปแบบสื่ออินพุตตรงกับการกำหนดค่าสำหรับเสียงอยู่แล้ว หรือวิดีโอ Transformer จะเปลี่ยนเป็นการแปลงสัญญาณโดยอัตโนมัติ ซึ่งก็คือการคัดลอก ตัวอย่างที่บีบอัดจากคอนเทนเนอร์อินพุตไปยังคอนเทนเนอร์เอาต์พุตโดยไม่มี การแก้ไข เพื่อหลีกเลี่ยงต้นทุนในการคํานวณและการสูญเสียคุณภาพที่อาจเกิดขึ้น การถอดรหัส และการเข้ารหัสอีกครั้งในรูปแบบเดิม
นำเสียงหรือวิดีโอออก
นำเสียงหรือวิดีโอออกโดยใช้ 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();
ซึ่งจะช่วยเพิ่มความเร็วในการส่งออกด้วยการถอดรหัสและเข้ารหัสอีกครั้งวิดีโอเพียงเล็กน้อยเท่าๆ กับ
แล้วต่อข้อมูลที่เข้ารหัสอีกครั้งกับส่วนที่เหลือของต้นฉบับ
ในการสร้างสรรค์วิดีโอ การเพิ่มประสิทธิภาพต้องอาศัยความสามารถในการรวมส่วนหนึ่งของไฟล์อินพุต
พร้อมด้วยเอาต์พุตที่เข้ารหัสใหม่ ซึ่งหมายความว่ารูปแบบเอาต์พุตของโปรแกรมเปลี่ยนไฟล์และ
รูปแบบอินพุตต้องใช้งานร่วมกันได้ ตัวอย่างเช่น หากเดิมไฟล์คือ
บนอุปกรณ์ที่มีการติดตั้งโปรแกรมเปลี่ยนไฟล์ที่แตกต่างออกไป
จะไม่สามารถใช้การเพิ่มประสิทธิภาพได้
เพื่อให้การเพิ่มประสิทธิภาพประสบความสำเร็จ ได้มีโปรแกรมเปลี่ยนไฟล์แก่ Transformer ผ่าน
EncoderFactory
ต้องมีระดับและโปรไฟล์ที่ใช้ได้กับรูปแบบอินพุต
การเพิ่มประสิทธิภาพนี้ใช้ได้กับอินพุต MP4 แบบเนื้อหาเดียวเท่านั้น โดยไม่มีเอฟเฟกต์ใดๆ ยกเว้น
ไม่มีเอฟเฟ็กต์และการหมุนวิดีโอแบบ op หาร 90 องศา หากการเพิ่มประสิทธิภาพ
ไม่ประสบความสำเร็จ Transformer จะกลับไปเป็นการส่งออกปกติโดยอัตโนมัติ และรายงาน
ผลของการเพิ่มประสิทธิภาพใน 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
ยอมรับรายการเอฟเฟกต์เสียงและวิดีโอที่จะใช้
เฟรมเวิร์กเอฟเฟกต์ของ Transformer เพื่อแปลงรายการเอฟเฟกต์วิดีโอเพื่อนำไปใช้ประโยชน์ภายใน
เป็นลำดับโปรแกรมเงา GL ที่ถูกนำไปใช้ตามลำดับ ในบางกรณี
เฟรมเวิร์กเอฟเฟ็กต์จะสามารถใช้เอฟเฟกต์หลายอย่างด้วยโปรแกรมปรับเฉดสีเพียงโปรแกรมเดียว
เช่น โปรแกรมตัวปรับเฉดสี 1 โปรแกรมสามารถประยุกต์ใช้เมทริกซ์ต่อเนื่องกันหลายเมทริกซ์ได้
การเปลี่ยนแปลง ซึ่งจะช่วยปรับปรุงประสิทธิภาพและคุณภาพ
เอฟเฟกต์วิดีโอยังรองรับการแสดงตัวอย่างใน ExoPlayer ได้ด้วย โดยใช้
ExoPlayer.setVideoEffects
แอปสาธิตมีตัวอย่างเอฟเฟกต์วิดีโอที่กำหนดเอง
การแก้ไขเสียง
เอฟเฟกต์เสียงจะนำไปใช้ได้โดยใช้ลำดับของ AudioProcessor
ให้เป็นเสียง RAW (PCM) ได้ ExoPlayer รองรับการส่งผ่านตัวประมวลผลเสียงไปยัง
DefaultAudioSink.Builder
ซึ่งทำให้สามารถดูตัวอย่างการแก้ไขเสียงได้