视音频编辑器
有时候我们想对音视频进行加工处理,比如视频编辑、添加字幕、裁剪等功能处理,虽然 Github 上开源了一些比较不错的项目,但是如果我们想在此项目上进行二次开发,比如我想拿到该项目的动态库基于 OpenH264 来进行对 YUV 编码,这个时候有可能该动态库没有集成 OpenH64 库,所以为了扩展性,我就自己弄了一套万能的库,基本上包含了所有常用的音视频处理库,你不用再去进行编译。
编译完成的头文件和动态库可以在该项目的 core/cpp 目录自行获取(「已完全开源」)。
❝
ps:这里再推荐一下我的另一个音视频处理库 AVEditor ----> 功能正在完善中,可以先关注 。
AVEditor 是一款短视频编辑 SDK,仿 DouYin 音视频处理。功能包含有美颜、滤镜、贴纸、特效、录制、分段录制、速率录制、变声、配乐、rtmp 直播推流、图片转视频、剪辑,mp4/flv 格式封装等功能。
❞
「视音频编辑器」 主要移植 FFmpeg v4.4-dev + libx264 + freetype + fontconfig + fribidi + openh264 +libfdk-aac + gnutls + speex + libwebp + lame +opus + opencore-amr + https 等库编译的适用于 Android 平台的音视频编辑、视频剪辑的快速处理框架,目前内置了音视频剪辑、编辑、多个视频文件合并、字幕、水印、倒放等功能,也可以传入 「FFmpeg」 命令来进行处理。
「我们先来看一下内置功能的效果:」
音视频剪辑:
音视频合成:
音视频编辑:
> 更多效果点击阅读原文进行查看
C++音视频学习资料免费获取方法:关注音视频开发T哥,点击「链接」即可免费获取2023年最新C++音视频开发进阶独家免费学习大礼包!
implementation 'com.devyk.ffmpeglib:AVFFmpegCore:1.0.1'
「回调处理」
public interface ExecuteCallback {
/**
*开始处理
*/
void onStart(Long executionId);
/**
* 如果外部传递了当前操作视频的时长,那么返回的是百分比进度,反之返回的是操作视频对应的微妙时长
*
* @param v
*/
void onProgress(float v);
/**
*处理成功
*/
void onSuccess(long executionId);
/**
*处理失败
*/
void onFailure(long executionId, String error);
/**
*取消处理
*/
void onCancel(long executionId);
/**
* ffmpeg 执行的 log
*/
void onFFmpegExecutionMessage(LogMessage logMessage);
}
「AVEditor」
有时候我们发现 Github 上一些基于 FFmpeg 开发的比较好的项目,比如 ijkplayer ,RxFFmpeg 等,我们想基于它做二次开发,由于我们不知道怎么编译,也不知道编译 FFmpeg 到底需要开启哪些节点,这个时候我就想拿某些项目的编译脚本,基于它来进行二次编译。一般来说有些项目不会开源编译 FFmpeg 的脚本。这个时候我们可以通过拿到开源项目的静态或者动态库,这里我就以 RxFFmpeg 来举例,可以看看我是如果拿到它的编译脚本.
1、先 clone RxFFmpeg
git clone https://github.com/microshow/RxFFmpeg.git
2、关联 librxffmpeg-core.so
通过该 so 我们知道它应该就是 FFmpeg 编译之后的动态库,现在我们通过 cmake 的方式关联到该 so
cmake_minimum_required(VERSION 3.4.1)
#JNI 路径
set(FFMpeg_include_PATH ${CMAKE_SOURCE_DIR})
include_directories(${FFMpeg_include_PATH}/include/)
add_library(RxFFmpeg SHARED IMPORTED)
set_target_properties(RxFFmpeg PROPERTIES IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/../../../libs/${CMAKE_ANDROID_ARCH_ABI}/librxffmpeg-core.so)
find_library(
log-lib
log)
FILE(GLOB JNI_ALL_C ${JNI_PATH}/*.cpp)
add_library(
ffmpeg-tools
SHARED
${JNI_ALL_C}
)
target_link_libraries(
ffmpeg-tools
RxFFmpeg
${log-lib}
)
3、编写 JNI 函数,拿到编译脚本
//
// Created by DevYK on 2020-10-02.
//
#include
extern "C"
{
#include "libavutil/avutil.h"
}
#include
#define AV_TAG "AVLOG"
#define LOGE(format, ...) __android_log_print(ANDROID_LOG_ERROR, AV_TAG, format, ##__VA_ARGS__)
int JNI_OnLoad(JavaVM *javaVM, void *pVoid) {
const char *config = avutil_configuration();
LOGE("FFMPEG VERSION%s
", av_version_info());
LOGE("FFMPEG configuration %s
", avutil_configuration());
return JNI_VERSION_1_6;
}
通过 debug 查看 config 指针指向内存中的信息如下:
嗯,拿到了它的编译信息,然后我们就可以基于它来完善我们项目的编译,我们可以编译出比它的功能更加丰富,就如开头介绍一般,我添加了市面上常用的一些 C++ 库,基本达到了万能了吧。
项目地址:AVFFmpegLib
这里就不在介绍如何编译了,感兴趣的可以看 mobile-ffmpeg 项目,我这里也是基于它进行二次封装开发。
原文链接:Android 中通过 FFmpeg 命令对音视频编辑处理(已开源)
页面更新:2024-02-29
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号