FFmpeg裁剪视频在Android上的实现

添加依赖:

Groovy 复制代码
implementation 'com.arthenica:mobile-ffmpeg-full:4.4.LTS'

代码实现:

Kotlin 复制代码
fun cropMiddleThird(inputPath: String, outputPath: String) {
        val cmd = arrayOf(
            "-y",  // 覆盖输出文件
            "-i", inputPath,
            "-filter:v", "crop=iw:ih/3:0:ih/3",  // 裁剪中间1/3
            "-c:a", "copy",  // 复制音频流
            outputPath
        )

        FFmpeg.executeAsync(cmd) { executionId, returnCode ->
            if (returnCode == RETURN_CODE_SUCCESS) {
                Log.i(TAG, "Video crop completed successfully")
            } else {
                Log.e(TAG, "Video crop failed with return code $returnCode")
            }
        }
    }

这段 FFmpeg 命令中的参数含义如下:

-filter:v 参数解析

  • 完整形式-filter:v-filter_complex 的简化形式,专门用于视频滤镜

  • 含义:表示后面跟随的是视频滤镜(video filter)设置

  • 等价写法 :也可以简写为 -vf(两者完全等效)

crop=iw:ih/3:0:ih/3 滤镜参数解析

这是一个视频裁剪(crop)滤镜,各部分的含义为:

  1. iw

    • 表示 input width(输入视频的原始宽度)

    • 这里保持原始宽度不变

  2. ih/3

    • ih 表示 input height(输入视频的原始高度)

    • ih/3 表示将高度裁剪为原始高度的 1/3

  3. 0

    • 表示裁剪区域从水平方向(X轴)的 0 位置开始(即最左侧)
  4. ih/3

    • 表示裁剪区域从垂直方向(Y轴)的 1/3 高度处开始

    • 这样组合起来就是从视频垂直方向的中间 1/3 区域裁剪

完整命令含义

bash 复制代码
ffmpeg -y -i input.mp4 -filter:v "crop=iw:ih/3:0:ih/3" -c:a copy output.mp4

表示:

  1. -y:覆盖输出文件不提示

  2. -i input.mp4:指定输入文件

  3. -filter:v "crop=iw:ih/3:0:ih/3"

    • 裁剪视频,保持原始宽度

    • 高度取原始高度的 1/3

    • 从垂直方向 1/3 处开始裁剪(最终得到的是视频中间的 1/3 部分)

  4. -c:a copy:音频流直接复制不重新编码

  5. output.mp4:输出文件路径

其他常见表达式

表达式 含义
iw 输入视频宽度
ih 输入视频高度
ow 输出视频宽度
oh 输出视频高度
dar 显示宽高比
sar 样本宽高比
n 当前帧序号
t 当前时间戳(秒)

实际应用示例

如果想裁剪视频顶部 1/3(而不是中间):

bash 复制代码
crop=iw:ih/3:0:0

如果想裁剪视频右侧 1/3:

bash 复制代码
crop=iw/3:ih:iw*2/3:0
相关推荐
电鱼智能的电小鱼2 小时前
基于电鱼 AI 工控机的智慧工地视频智能分析方案——边缘端AI检测,实现无人值守下的实时安全预警
网络·人工智能·嵌入式硬件·算法·安全·音视频
音视频牛哥4 小时前
从协议规范和使用场景探讨为什么SmartMediaKit没有支持DASH
人工智能·音视频·大牛直播sdk·dash·dash还是rtmp·dash还是rtsp·dash还是hls
音视频牛哥5 小时前
SmartMediaKit:如何让智能系统早人一步“跟上现实”的时间架构--从实时流媒体到系统智能的演进
人工智能·计算机视觉·音视频·音视频开发·具身智能·十五五规划具身智能·smartmediakit
Digitally5 小时前
如何用5种实用方法将电脑上的音乐传输到安卓手机
android·智能手机·电脑
音视频牛哥6 小时前
超清≠清晰:视频系统里的分辨率陷阱与秩序真相
人工智能·机器学习·计算机视觉·音视频·大牛直播sdk·rtsp播放器rtmp播放器·smartmediakit
johnny2336 小时前
AI视频创作工具汇总:MoneyPrinterTurbo、KrillinAI、NarratoAI、ViMax
人工智能·音视频
HahaGiver6666 小时前
Unity与Android原生交互开发入门篇 - 打开Unity游戏的设置
android·unity·交互
2501_915909066 小时前
WebView 调试工具全解析,解决“看不见的移动端问题”
android·ios·小程序·https·uni-app·iphone·webview
IT乐手8 小时前
android 下载管理工具类
android
2501_915106328 小时前
App 怎么上架 iOS?从准备资料到开心上架(Appuploader)免 Mac 上传的完整实战流程指南
android·macos·ios·小程序·uni-app·iphone·webview