FFmpeg(五)实现视频编辑

2023-03-07  本文已影响0人  默默_大魔王

前面已经介绍了视频的格式,这篇文章我们去编辑一下视频

简单介绍和我们要使用的工具
ffmpeg:包含FFmpeg的各种功能,如:gif、格式转换、截图、编解码等
ffplay:一个使用了FFmpeg和SDL库的、简单的、可移植的媒体播放器
ffprobe:用来查看多媒体文件的信息
ffserver:与流媒体服务器有关,负责响应客户端的流媒体请求,把流媒体数据发送给客户端

常用命令:

常用命令 表述
-version 显示版本
-demuxers 显示可用的demuxers
--muxers 显示可用的-muxers
-devices 显示可用的设备
-codecs 显示所有的编解码器
-decoders 显示可用的解码器
-encoders 显示所有的编码器
-bsfs 显示比特流filter
-formats 显示可用的格式
-protocols 显示可用的协议
-filters 显示可用的过滤器
-pix_fmts 显示可用的像素格式
-sample_fmts 显示可用的采样格式
-layouts 显示channel名称
-colors 显示识别的颜色名称

如果要播放一个视频 输入以下命令(我电脑已安装ffmpeg,并且有视频文件)

//播放视频          
ffplay D:\ffmpeg\test.mp4    
//剪切视频 
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi    

我们写一个本地方法,让ffmpeg帮我们剪辑视频

new Thread(new Runnable() {
            @Override
            public void run() {
                //ss 开始时间  tt 结束时间
                String cmd = "ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi ";
                //把命令交给native层处理,native 调用ffmpeg SDK
                run(cmd.split("[ \\t]+"));
            }
        }).start();

public native int run(String[] cmd);


直接看native方法

#include <jni.h>
#include "ffmpeg.h"

JNIEXPORT jint

JNICALL
Java_com_tj_myapplication_MainActivity_run(
        JNIEnv *env, jclass obj, jobjectArray commands) {
    int argc = (*env)->GetArrayLength(env, commands);
    char *argv[argc];

    int i;
    for (i = 0; i < argc; i++) {
        jstring js = (jstring) (*env)->GetObjectArrayElement(env, commands, i);
        argv[i] = (char *) (*env)->GetStringUTFChars(env, js, 0);
    }
    return runCmd(argc, argv);
}

修改ffmpeg.c里面的方法

int runCmd(int argc, char **argv)
{
    略...最后添加下面代码,恢复状态
    nb_filtergraphs = 0;
    progress_avio = NULL;
    input_streams = NULL;
    nb_input_streams = 0;
    input_files = NULL;
    nb_input_files = 0;
    output_streams = NULL;
    nb_output_streams = 0;
    output_files = NULL;
    nb_output_files = 0;

    return main_return_code;
}
//ffmpeg.h文件里面添加
int runCmd(int argc, char **argv);


上一篇 下一篇

猜你喜欢

热点阅读