首页 > 其他分享 >FFmpeg开发笔记(五十七)使用Media3的Transformer加工视频文件

FFmpeg开发笔记(五十七)使用Media3的Transformer加工视频文件

时间:2024-10-16 14:21:43浏览次数:7  
标签:Transformer FFmpeg media3 音视频 Media3 build 视频文件 new

​继音视频播放器ExoPlayer之后,谷歌又推出了音视频转换器Transformer,要在音视频加工领域施展拳脚。根据Android开发者官网介绍:Jetpack Media3是Android媒体库的新家,可让App呈现丰富的视听体验。Media3提供了一个简单的架构,能够基于设备功能开展自定义与可靠性优化,可以解决媒体部分的碎片化问题。

Transformer作为Media3架构中的转换组件,可以用于编辑加工音视频,包括在不同格式之间转换编码与修改媒体内容,例如从较长的视频剪辑片段、或者应用自定义的滤镜效果,以及其他音视频编辑操作等等。
谷歌官方也提供了Transformer的代码应用例子,示例源码的托管地址为https://github.com/androidx/media/tree/release/demos,托管页面打开之后访问transformer目录,即可找到Transformer组件的实际运用模块代码。
因为Transformer被Media3囊括在内,所以它对运行环境要求颇高,具体环境要求参见之前的文章《使用Media3的Exoplayer播放网络视频》。准备好了开发环境之后,再按照以下描述引入Media3的ExoPlayer库,详细步骤说明如下。

一、修改模块的build.gradle

在build.gradle的dependencies节点内部补充下面的导包语句,把Transformer用到的相关库都加进来。

implementation "androidx.media3:media3-transformer:1.4.0"
implementation "androidx.media3:media3-effect:1.4.0"
implementation "androidx.media3:media3-common:1.4.0"

二、活动页面代码增加Transformer的处理代码

首先创建音视频的时间处理效果,比如下面代码构建了一个剪辑视频片段的媒体项目,准备把视频文件的第10秒到第20秒单独剪辑出来。

MediaItem.ClippingConfiguration clippingConfiguration =
  new MediaItem.ClippingConfiguration.Builder()
    .setStartPositionMs(10_000) // start at 10 seconds
    .setEndPositionMs(20_000) // end at 20 seconds
    .build();
MediaItem mediaItem = new MediaItem.Builder()
    .setUri(mVideoUri)
    .setClippingConfiguration(clippingConfiguration)
    .build();

接着创建音视频的空间处理效果,包括旋转、缩放视频画面等等,并对上一步的媒体项目运用指定的空间效果。创建代码如下:

ScaleAndRotateTransformation rotateEffect =
  new ScaleAndRotateTransformation.Builder()
    //.setRotationDegrees(90f)
    .setScale(0.5f, 0.5f)
    .build();
Effects effects = new Effects(
    ImmutableList.of(),
    ImmutableList.of(rotateEffect)
);
EditedMediaItem editedMediaItem =
  new EditedMediaItem.Builder(mediaItem)
    .setEffects(effects)
    .build();

然后按照以下代码构建转换器对象,指定输出视频格式为H265,输出音频格式为AAC,并且监听转换操作的结束事件和失败事件。构建代码如下:

Transformer transformer = new Transformer.Builder(this)
    .setVideoMimeType(MimeTypes.VIDEO_H265)
    .setAudioMimeType(MimeTypes.AUDIO_AAC)
    .addListener(new Transformer.Listener() {
        @Override
        public void onCompleted(Composition composition, ExportResult exportResult) {
            Toast.makeText(mContext, "转换成功", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void one rror(Composition composition, ExportResult exportResult, ExportException exportException) {
            Toast.makeText(mContext, "转换失败", Toast.LENGTH_SHORT).show();
            Log.d(TAG, "exportException: "+exportException.toString());
        }
    })
    .build();

最后填写输出文件的保存路径,调用转换器对象的start方法,开始执行音视频转换动作。转换代码如下:

String outputPath = mPath + DateUtil.getNowDateTime() + ".mp4";
transformer.start(editedMediaItem, outputPath);

编译运行App,即可在真机上选取视频文件并执行对应的编辑加工操作。

更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

 

标签:Transformer,FFmpeg,media3,音视频,Media3,build,视频文件,new
From: https://www.cnblogs.com/aqi00/p/18450142

相关文章

  • YOLOv11改进策略【Conv和Transformer】| CVPR-2024 Single-Head Self-Attention 单头
    一、本文介绍本文记录的是利用单头自注意力SHSA改进YOLOv11检测模型,详细说明了优化原因,注意事项等。传统的自注意力机制虽能提升性能,但计算量大,内存访问成本高,而SHSA从根本上避免了多注意力头机制带来的计算冗余。并且改进后的模型在相同计算预算下,能够堆叠更多宽度更大的......
  • Transformer的核心思想---自注意力机制
    自注意力机制(Self-Attention)是Transformer模型的核心思想。它通过一种聪明的方式让神经网络在处理一个序列时(例如,一个句子中的单词),能够“注意”到序列中其他部分的相关信息,而不仅仅依赖于局部信息。相比传统的序列模型(如RNN、LSTM),自注意力机制能更好地捕捉远距离的依赖关系,特别适......
  • Transformer 的缩放因子为什么需要开平方根
    目录一、防止过大的注意力分数导致softmax函数饱和二、维度校正三、保持方差稳定在Transformer模型中,缩放因子(scalingfactor)特别设计用于调整注意力分数(attentionscores),它通常是键向量维度的平方根。这一做法主要是出于以下几个原因:一、防止过大的注意力分数导致......
  • Transformers: 引领自然语言处理的革命性工具
    transformers引言:Transformers的崛起在人工智能和自然语言处理(NLP)领域,Transformers模型的出现无疑是一场革命。而HuggingFace公司开发的Transformers库,更是将这场革命推向了一个新的高度。作为一个开源项目,Transformers为研究人员和开发者提供了一个强大而灵活的工具,使他......
  • HiT-SR:基于层级Transformer的超分辨率,计算高效且能提取长距离关系 | ECCV'24
    Transformer在计算机视觉任务中表现出了令人鼓舞的性能,包括图像超分辨率(SR)。然而,流行的基于Transformer的SR方法通常采用具有二次计算复杂度的窗口自注意力机制,导致固定的小窗口,限制了感受野的范围。论文提出了一种将基于Transformer的SR网络转换为分层Transformer(HiT-SR)的通用策......
  • 基于LSTM-Transformer混合模型实现股票价格多变量时序预测(PyTorch版)
    前言系列专栏:【深度学习:算法项目实战】✨︎涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对抗网络、门控循环单元、长短期记忆......
  • Transformer模型知多少?
    2017年,Transformer模型的提出确实让AI进入了一个新的纪元,尤其是在自然语言处理(NLP)领域,成为了许多现代AI技术的基石。那么,Transformer到底是什么,它的核心机制“自注意力机制”如何运作?要理解这些复杂的概念并不容易,但我将尽力通过通俗的语言和逐步解释,让小白也能理解这个革命性的模......
  • CogVideoX:Text-to-Video Diffusion Models with An Expert Transformer
    研究背景背景介绍:这篇文章的研究背景是文本到视频模型的快速发展,特别是Transformer架构和扩散模型的应用。早期尝试预训练和扩展Transformer生成视频已经显示出巨大潜力,如CogVideo和Phenaki。扩散模型在多模态生成方面也取得了显著进展,包括视频生成。研究内容:该问题的......
  • transformer的基础知识
    transformer的基础知识transformer网络结构图seq2seq一般Seq2seq会分成两部分:Encoder、Decoder。EncoderTransformer中的Encoder就是用的Self-attention。encoder的内部结构补充:block的内部结构主要由self-attention和全连接神经网络所构成。在原来的论文中......
  • 第十期机器学习基础 02注意力机制和Transformer/Bert
    一:注意力机制(一)前提背景1.人类的选择性视觉注意力视觉注意力机制是人类视觉所特有的大脑信号处理机制。人类视觉通过快速扫描全局图像,获得需要重点关注的目标区域,也就是一般所说的注意力焦点,而后对这一区域投入更多注意力资源,以获取更多所需要关注目标的细节信息,而抑制其他无......