各位粉丝各位读者,大家下午好!此篇关于FFmpeg开发的专栏在众多粉丝和朋友的推荐下终于要开篇了,为了此篇专栏的一系列文章能够顺畅一气呵成,笔者也是准备了将近半年的时间,希望对音视频开发感兴趣的或者想要踏入音视频开发的看官老爷们能够学到一些好东西!
开源不易,书写不易,请为笔者的无私奉献给个start吧!支持他更热情的进行创作!
此处留白,用于后续粘贴SpFFmpeg GitHub开源地址
什么是SpFFmpeg?
SpFFmpeg其实是针对FFmpeg3.3.9版本的二次开发、封装包括各类开发工具的移植内嵌的统称,相当于一个全新的免费开源的框架,Sp也是笔者名字的缩写,对于其后续的文章介绍将会从以下几个大方向开展和进行:
可以进行视频的编辑、视频剪辑、视频拼接、音视频转码、压缩、裁剪、生成缩略图、音视频分离、变速、添加字幕君(包括png/gif)、滤镜支持、bgm添加、加减速视频播放、音视频倒放、裁剪音频、变声和混音、图片合成视频、视频解码图片、支持https 访问、音视频水位线(缓存池策略)、音视频双向异步处理、支持MediaCodec等众多功能
假设定义宏变量LOCAL_PATH=“$PWD/testDir”
注意:如果以下语法前添加 ! 符号,表示取反
# 如果当前目录下存在testDir,则执行打印并输出"File exist"字符
if [ -e "$LOCAL_PATH"]; then
echo "File exist"
fi
# 如果当前目录下testDir为目录,则执行打印并输出"Is Directory"字符
if [ -d "$LOCAL_PATH" ]; then
echo "Is Directory"
fi
# 如果当前目录下testDir为可读,则执行打印并输出"Can read"字符
if [ -r "$LOCAL_PATH" ]; then
echo "Can read"
fi
# 如果当前目录下testDir为可写,则执行打印并输出"Can write"字符
if [ -w "$LOCAL_PATH" ]; then
echo "Can write"
fi
# 如果当前目录下testDir为可执行,则执行打印并输出"Can execute"字符
if [ -x "$LOCAL_PATH" ]; then
echo "Can execute"
fi
# 如果当前目录下testDir文件长度不为0,则执行打印并输出"File non-zero"字符
if [ -s "$LOCAL_PATH" ]; then
echo "File non-zero"
fi
# 如果LOCAL_PATH目录的字符串非空(非0),则执行打印并输出"Non-empty"字符
if [ -n "$LOCAL_PATH" ]; then
echo "Non-empty"
fi
#如果LOCAL_PATH目录的字符为空,则执行打印并输出"Is empty"字符
if [ -z "$LOCAL_PATH" ]; then
echo "Is empty"
fi
下面延展两个常用语法
假设定义以下宏变量
PATH_A=“$PWD/testDirA”
PATH_B=“$PWD/testDirB”
# 如果当前PATH_A目录字符为空且当前PATH_B目录字符为空,则执行打印并输出"All empty"字符
# a表示逻辑与
if [ -z "$PATH_A" -a -z "$PATH_B" ]; then
echo "All empty"
fi
# 如果当前PATH_A目录字符为空或当前PATH_B目录字符为空,则执行打印并输出"One empty"字符
# a表示逻辑或
if [ -z "$PATH_A" -o -z "$PATH_B" ]; then
echo "One empty"
fi
关于常用的一些Shell脚本语法就介绍到这里,如果遇到不熟悉的可以查阅资料
下面介绍文件拷贝、目录创建的简单常用命令,因为源码编译完通常要将其拷贝到另一个目录,这样就不会跟工作或编译区产生冲突,因为架构中很多clean命令会清楚就缓存的编译残余
假设定义以下宏变量
COMPILE_OUTPUT_DIR=“$PWD/output/libs/arm64-v8a”
COMPILE_DIR=“$PWD/build”
# 如果当前目录下存在output/libs/arm64-v8a且其为目录
if [ -e "$COMPILE_OUTPUT_DIR" -a -d "$COMPILE_OUTPUT_DIR" ]; then
# 执行打印
echo "clean old cache , remove all cached files"
# 清除输出区缓存,将其删除
rm -rf $COMPILE_OUTPUT_DIR
fi
# 重新创建
mkdir -p $COMPILE_OUTPUT_DIR
# 将编译目录(工作区)下生成的头文件目录拷贝到输出头文件目录
cp -r "$COMPILE_DIR/arm64-v8a/include" "$COMPILE_OUTPUT_DIR/include"
# 将编译目录(工作区)下生成的静态库目录拷贝到输出静态库目录
cp -r "$COMPILE_DIR/arm64-v8a/lib" "$COMPILE_OUTPUT_DIR/lib"
因为工作区的编译缓存会在编译脚本进行清楚,所以读者只用关心输出目录缓存的清理
关于SpFFmpeg框架常用的一些Shell编译相关的语法介绍就到这里结束了,请大家慢慢消化并多动手实践!
还是那句老话,开源不易!创作不易!如果觉得文章质量不错请给一个start给他,让其更有动力的创作更好的文章和开源项目,谢谢大家!
此处留白,用于后续粘贴SpFFmpeg GitHub开源地址