剪切视频工具类

构建Android视频编辑应用:从拍摄到分享的实战指南 本文还有配套的精品资源,点击获取 简介:本项目通过一个实战案例,指导开发者如何在Android平台上实现视频编辑应用的关键功能。涵盖了视频拍摄、裁剪、滤镜应用、压缩以及用户界面设计和性能优化等多个方面的详细实现步骤和代码实践,旨在帮助开发者构建一个具备高质量用户体验的视频编辑应用。 1. 视频拍摄实现 1.1 设备选择与配置 在视频拍摄实现这一章节中,我们... 阅读详情
public class ClipUtil {
    private static final String LOGTAG = "VideoUtils";
    private static final int DEFAULT_BUFFER_SIZE = 1 * 1024 * 1024;

    /**
     * @param srcPath  the path of source video file.
     * @param dstPath  the path of destination video file.
     * @param startMs  starting time in milliseconds for trimming. Set to
     *                 negative if starting from beginning.
     * @param endMs    end time for trimming in milliseconds. Set to negative if
     *                 no trimming at the end.
     * @param useAudio true if keep the audio track from the source.
     * @param useVideo true if keep the video track from the source.
     * @throws IOException
     */
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public static void genVideoUsingmuxer(String srcPath, String dstPath,
                                          int startMs, int endMs, boolean useAudio, boolean
                                                  useVideo)
            throws IOException {
        // Set up MediaExtractor to read from the source.
        MediaExtractor extractor = new MediaExtractor();
        extractor.setDataSource(srcPath);
        int trackCount = extractor.getTrackCount();
        // Set up Mediamuxer for the destination.
        MediaMuxer muxer;
        muxer = new MediaMuxer(dstPath,             
        MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
        // Set up the tracks and retrieve the max buffer size for selected
        // tracks.
        HashMap<Integer, Integer> indexMap = new HashMap<>(trackCount);
        int bufferSize = -1;
        for (int i = 0; i < trackCount; i++) {
            MediaFormat format = extractor.getTrackFormat(i);
            String mime = format.getString(MediaFormat.KEY_MIME);
            boolean selectCurrentTrack = false;
            if (mime.startsWith("audio/") && useAudio) {
                selectCurrentTrack = true;
            } else if (mime.startsWith("video/") && useVideo) {
                selectCurrentTrack = true;
            }
            if (selectCurrentTrack) {
                extractor.selectTrack(i);
                int dstIndex = muxer.addTrack(format);
                indexMap.put(i, dstIndex);
                if (format.containsKey(MediaFormat.KEY_MAX_INPUT_SIZE)) {
                    int newSize = format.getInteger(MediaFormat.KEY_MAX_INPUT_SIZE);
                    bufferSize = newSize > bufferSize ? newSize : bufferSize;
                }
            }
        }
        if (bufferSize < 0) {
            bufferSize = DEFAULT_BUFFER_SIZE;
        }
        // Set up the orientation and starting time for extractor.
        MediaMetadataRetriever retrieverSrc = new MediaMetadataRetriever();
        retrieverSrc.setDataSource(srcPath);
        String degreesString = retrieverSrc.extractMetadata(
                MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION);
        if (degreesString != null) {
            int degrees = Integer.parseInt(degreesString);
            if (degrees >= 0) {
                muxer.setOrientationHint(degrees);
//                muxer.setorientationHint(degrees);
            }
        }
        if (startMs > 0) {
            extractor.seekTo(startMs * 1000, MediaExtractor.SEEK_TO_CLOSEST_SYNC);
        }
        // copy the samples from MediaExtractor to Mediamuxer. We will loop
        // for copying each sample and stop when we get to the end of the source
        // file or exceed the end time of the trimming.
        int offset = 0;
        int trackIndex = -1;
        ByteBuffer dstBuf = ByteBuffer.allocate(bufferSize);
        MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
        try {
            muxer.start();
            while (true) {
                bufferInfo.offset = offset;
                bufferInfo.size = extractor.readSampleData(dstBuf, offset);
                if (bufferInfo.size < 0) {
                    Log.d(TAG, "Saw input EOS.");
                    bufferInfo.size = 0;
                    break;
                } else {
                    bufferInfo.presentationTimeUs = extractor.getSampleTime();
                    if (endMs > 0 && bufferInfo.presentationTimeUs > (endMs * 1000)) {
                        Log.d(TAG, "The current sample is over the trim end time.");
                        break;
                    } else {
                        bufferInfo.flags = extractor.getSampleFlags();
                        trackIndex = extractor.getSampleTrackIndex();
                        muxer.writeSampleData(indexMap.get(trackIndex), dstBuf,
                                bufferInfo);
                        extractor.advance();
                    }
                }
            }
            muxer.stop();
            //deleting the old file
            File file = new File(srcPath);
//            file.delete();
        } catch (IllegalStateException e) {
            // Swallow the exception due to malformed source.
            Log.w(TAG, "The source video file is malformed");
        } finally {
            muxer.release();
        }
        return;
    }
}

取自googolgit 上一个谷歌工具类
https://android.googlesource.com/platform/packages/apps/Gallery2/+/634248d/src/com/android/gallery3d/app/VideoUtils.java

红米K70至尊版修复“nv损坏”主板电阻图示 mtk芯片工程固件刷写与步骤说明 💝💝💝红米K70至尊版 机型代码:rothko,搭载天玑9300+旗舰芯片.后置5000万像素索尼IMX906高动态OIS主摄,800万像素超广角镜头,200万像素微距镜头,前置2000万像素摄像头,也适用于以下型号的小米机型:2407FPN8EG,2407FPN8ER,XIG06,A402XM,2407FRK8EC。 💝💝💝通过博文了解 1💝💝💝-----此机型工程固件的资源刷写注意事项 2💝💝💝-----此机型刷写工程固件预览界面 3💝💝💝------红米K 阅读详情

相关推荐

YOLO模型使用jupyterlab的方式进行预测/推理(示例)

首先相信很多使用过python的人都或多或少地了解过这个应用。是一个开源Web应用程序,可让用户创建和共享包含实时代码、公式、可视化和叙述文本的文档。用途包括:数据清理和转换、数值模拟、统计建模、等等。而Jupyter Lab则是Jupyter的下一代笔记本界面。是一个基于Web的交互式开发环境,用于Jupyter notebook、代码和数据。非常灵活,可支持数据科学、科学计算和机器学习领域的广泛工作。是可扩展和模块化的,其可编写插件来添加新组件并与现有组件相集成。

ocean00008899的博客 902

Android OpenGLES视频剪辑示例源码

1.基于Android OpenGLES开发,可实现各种视频剪辑功能,内置多种视频特效滤镜和转场动画,还可按需增加各种自定义滤镜和转场动画;4.集成FFmpeg,用于实现从视频中提取音频,视频格式转换等多种强大功能;2.通过OpenGLES渲染图片,把图片当成视频,实现图片和视频混合编辑;3.视频和背景音乐合成,可自定义任意时段的背景音乐;

愿君出走半生,归来时仍是少年 742

【项目立项管理、项目整合管理】30天通过软考高项-第二天

①项目或阶段的概述;②范围目标、范围的评估标准,证明达到完⼯标准的证据;③质量目标、项目和产品质量的评估标准、相关核实信息和实际里程碑交付日期以及偏差原因;④成本目标,包括可接受的成本区间、实际成本,产⽣任何偏差的原因等;⑤最终产品、服务或成果的确认信息的总结;⑥进度计划目标,包括成果是否实现项目预期效益:如果在项目结束时未能实现效益,则指出效益实现程度并预计未来实现情况;

weixin_42520723的博客 1000

android视频剪辑处理第三方,Android 中通过 FFmpeg 命令对音视频编辑处理

以下文章来源于DevYk ,作者DevYK音视频编辑器前言有时候我们想对音视频进行加工处理,比如视频编辑、添加字幕、裁剪等功能处理,虽然 Github 上开源了一些比较不错的项目,但是如果我们想在此项目上进行二次开发,比如我想拿到该项目的动态库基于 OpenH264 来进行对 YUV 编码,这个时候有可能该动态库没有集成 OpenH64 库,所以为了扩展性,我就自己弄了一套万能的库,基本上包含了所...

weixin_39953618的博客 648

YOLOv8n模型导出ONNX的避坑指南:解决版本差异,正确生成TensorRT/RKNN所需输出节点

本文详细介绍了YOLOv8n模型导出ONNX格式的实战避坑指南,涵盖版本差异处理、代码修改技巧及TensorRT/RKNN部署优化方案。针对不同推理框架需求,提供输出节点生成、动态轴处理和后处理划分等核心问题的解决方案,帮助开发者高效完成模型部署。

weixin_33247358的博客 357

【VMware篇】7-通过ISO镜像升级VMware Esxi

本文主要介绍Dell服务器上安装的ESXi升级的方法之一(采用ISO升级)。

chen_yunan的博客 5515

Android视频剪辑器使用教程

Android视频剪辑器使用教程 1. 项目介绍 android-video-trimmer 是一个用于在Android应用程序中剪辑本地视频并提供压缩选项的开源项目。该项目使用 Exoplayer 2 和 FFmpeg 来实现视频剪辑功能。它支持多种自定义选项,如隐藏播放器进度条、设置剪辑类型(固定时长、最小时长、最小-最大时长)以及视频压缩等。 2. 项目快速启动 2.1 添加依赖 首先,将项...

gitblog_01030的博客 1200

【高级-RAG-优化方法】

本文介绍了两种优化RAG(检索增强生成)系统的高级方法。第一部分介绍KnowFlow项目,它采用父子分块技术,将文档分为父分块(800-1500字符)和子分块(200-400字符),通过精确匹配子分块再返回父分块内容来保证搜索精确性和上下文完整性。第二部分探讨Milvus的多种增强技术,包括查询增强(如假设问题生成、回溯提示)、索引增强(自动合并块、分层索引)、检索器增强(句子窗口检索、元数据过滤)、生成器增强(提示压缩、块排序)以及管道增强(自我反省、代理查询路由)。这些方法共同提升了RAG系统的检索效率

weixin_48585108的博客 960

android视频的编辑(录制,裁剪,合成)(2)

废话少说接着上一篇的接着介绍:布局文件:<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="

T-chuangxin 1497

SpringCloud2025+SpringBoot3.5.0+gateway+webflux子服务路由报503

本来昨天就应该也记录下,免得忘记的,但是有点晚了,酒没写,真的是被坑惨了。当然这也是追求最新的代价,也是对新技术、老知识点的重温。依赖更粒度让架构的知识面更高,需要非常清楚另外说不定是有新的负载均衡要出现了,就想当初loadbalancer取代Ribbon一样好了,真是坑了半夜,昨晚都没有写,今天才复盘,希望能帮到大家,让更多在坑里的技术人爬出来。

zwrlj527的专栏 1998

宇树科技嵌入式面试题及参考答案(春晚机器人的公司)

内存对齐是指在内存中为数据对象分配存储空间时,按照一定的规则将数据存储在特定的地址上,以提高内存访问效率。不同的数据类型在内存中都有其特定的对齐要求,例如,int类型通常要求 4 字节对齐,double类型通常要求 8 字节对齐。这意味着数据的存储地址必须是其对齐字节数的整数倍。如果不进行内存对齐,处理器在访问数据时可能需要进行多次内存访问,从而降低了访问效率。指令可以用于控制结构体内存布局,它允许程序员指定结构体成员的对齐方式。其基本用法是在结构体定义之前使用来指定对齐字节数n,其中n。

大模型大数据攻城狮的专栏 3225

视频工具箱隐私政策

根据法律规定,共享、转让经去标识化处理的个人信息,且确保数据接收方无法复原并重新识别个人信息主体的,不属于个人信息的对外共享、转让及公开披露行为,对此类数据的保存及处理将无需另行向您通知并征得您的同意。您有权访问账户中的个人信息,如果您希望访问或编辑您的账户中的个人基本资料信息,您可以通过登录您的账号执行此操作。在不幸发生个人信息安全事件后,我们将按照法律要求,及时向您告知:安全事件的基本情况和可能的影响、我们已经采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。

yangmingkai1的博客 984

YOLOv11改进 | Conv改进篇 | 含2种改进,引入DynamicConv替换普通Conv卷积下采样和C3k2_DynamicConv替换C3k2(来自CVPR2024)

本文提出了一种基于DynamicConv动态卷积优化的YOLOv11轻量化模型改进方案。通过引入多专家机制的动态卷积模块,在增加模型参数量的同时保持较低的计算复杂度(FLOPs),有效解决了低FLOPs模型在大规模预训练中的性能瓶颈问题。文章详细介绍了动态卷积的工作原理、核心代码实现,并提供了在YOLOv11中集成DynamicConv和C3k2_GhostModule_DynamicConv模块的完整教程,包括模块添加、配置文件修改和模型训练验证过程。实验结果表明,该方案在保持高效推理速度的同时显著提升了

Ai缝合怪、助力小伙伴高效发论文 537

告别复杂视频工具:用mpv命令行播放器轻松搞定剪切、合并与转码

还在为视频处理软件复杂臃肿而烦恼吗?🎥 mpv命令行播放器作为一款轻量高效的视频播放神器,不仅能流畅播放各类视频格式,更内置强大的视频处理功能,让你在终端中就能完成剪切、合并与转码等操作! ## 什么是mpv播放器? mpv是一个基于MPlayer和mplayer2开发的命令行视频播放器,以其极简的设计和强大的性能著称。这款开源播放器支持几乎所有视频格式,从常见的MP4、MKV到专业的RAW

gitblog_00648的博客 668

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

打算把我的视频工具整合一下

近几年来,在工作之余,我零零碎碎写了不少视频工具。五一期间一时冲动,决定把这些程序整合一下。我的视频工具主要分为如下几种: 下载工具 下载工具最初是缘起于以前写的FlvDownloader,最初的目的是为了加速优酷视频,后来主要用于专辑批量下载,然后又陆陆续续加入了一些其它的功能,主要功能如下: Flv视频:支持几个常用的Flv网站的视频,专辑批量下载。 漫画:...

weixin_30271335的博客 80

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ffmpeg 最强大的视频工具

ffmpeg 最强大的视频工具

weixin_42830015的博客 1180

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

php 裁剪正方形,剪切800*800正方形视频-视频剪切画面为正方形

终于期盼到周五的到来了,此刻我内心不知有多激动,皮这一下已经很开心了!不过对于那些周末还要加班或者出差的狸友们不要打小编哈哈。周末其实可以做很多事情,比如培养一下自己的兴趣爱好,或者学习一些软件操作的使用方法等等,正所谓少壮不努力老大徒伤悲。小编的周末肯定也不是在睡大觉,因为我总是愿意花点时间在周末研究些软件操作方式,最近又让我在网上看到一个比较有意思的视频剪切方式,那么今天我就先来给大家介绍一下...

weixin_28788593的博客 357

简单的视频剪辑教程:使用win10自带的工具剪切和合并视频

剪切视频 右键视频文件以“照片”的方式打开视频,如同 点击右上角的编辑,如下图 选择“剪裁” 进度条会看到绿球和白球,绿球是当前视频播放的位置;进度条两端都有白球,白球内进度条是要保存的视频,如下图是保存的视频。 之后把文件保存。 合并视频 找到win10自带的视频编辑器,如下图 在左上角点击“新建视频项目”,如下图 为将要合成的视频命名 左上角点解“添加”,添加要添加的视频 添加视频后,可以把添加的视频拖到下面的故事板, 合成视频之后,点击右...

qq_40378795的博客 4万+

如何使用VidCutter:简单快速的开源视频剪切与合并工具完全指南

VidCutter是一款现代且简单的跨平台视频剪切和合并工具,它提供了直观的界面和强大的功能,让用户能够轻松处理视频文件。无论是快速剪辑家庭视频还是专业处理素材,VidCutter都能满足您的需求。 [![VidCutter启动界面](https://raw.gitcode.com/gh_mirrors/vi/vidcutter/raw/db6818f11bbb4d5598dfc5ceeddf7

gitblog_00846的博客 444

linux视频拼接工具,linux中使用ffmpeg 无损剪切/拼接视频程序

剪切/拼接视频文件是一种常见需求。在线视频网站现在往往将一个视频文件分割成 n 段,以减少流量消耗。使用 DownloadHelper/DownThemAll 这类工具下载下来的往往就是分割后的文件。能实现剪切/拼接视频文件的工具多种多样,但往往都需要进行视频重编码(trans剪切/拼接视频文件是一种常见需求。在线视频网站现在往往将一个视频文件分割成 n 段,以减少流量消耗。使用 Downloa...

weixin_42519733的博客 710

视频如何剪切,分割视频软件哪个好

如何截取视频片段,多个视频怎么截取片段,我们经常在网上看到关于某个名人的视频剪辑或者是同一类事物的剪辑,我们每个人也都一定会有自己喜欢的idol,那在每个视频被分享出现之前,要经过剪切,再合成,说了这么多,视频如何剪切,分割视频软件哪个好呢? 1、各位朋友在准备视频剪切的时候,应该有准备好的视频片段了吧。根据准备好的视频,将需要的片段剪切出来,然后几个视频再合并即可; 2、首先在百度搜索迅捷视...

weixin_34250709的博客 954

使用python开发一个剪切视频、音频的小工具(完整案例)

本篇文章将会教你如何用python语言去开发、制作一个可以剪辑视频、音频的可视化工具,具体流程和备注都写在代码注释里了,实在看不懂没关系,代码复制粘贴直接用。

大蛇王的博客 3264

​ [Windows] Fast Video Cutter Joiner 汉化版(批量视频剪切合并工具)

处理过程无需重新编码,速度极快,几乎不损失画质,是分割或合并大型视频文件的效率利器。一款专注极速处理的视频剪切合并工具。界面已完全汉化,操作直观。

cheskaoer的博客 432

Fast Video Cutter Joiner视频剪切合并器

FastVideoCutterJoiner是一款高效的视频编辑工具,支持快速剪切与合并视频文件。该软件提供多种视频格式兼容、丰富的编辑选项及高速处理能力,适合个人和专业用户使用。其简洁易用的界面设计让视频编辑变得简单便捷,是处理日常视频需求的理想选择。通过FastVideoCutterJoiner,用户能轻松完成基础的视频剪辑工作。

快乐的程序猿 145

超强视频剪切工具Boilsoft Video Splitter7.02.2中文免费绿色版

它除了普通的视频剪切功能外,特别的是支持RMVB格式,剪切工具亲测可用,可以完美剪切RMVB/RM格式视频,如果你想从一段完整的视频中剪切指定的视频段落,需要选择【分割选择】,设置好【开始时间】和【结束时间】,再按立即分割,指定剪切后的视频保存位置即可。 选择分割模式 1、流媒体直接剪切(不用重新编码模式) 非常快并且无任何质量损失 !格式包括 AVI, MPEG,...

weixin_30675247的博客 304
上一篇: 跨进程通信的版本兼容
mace_android
博客等级 码龄11年 5粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值