• SpFFmpeg音视频开发1:Linux开发环境下常用Shell脚本语法


    SpFFmpeg音视频开发-1

    各位粉丝各位读者,大家下午好!此篇关于FFmpeg开发的专栏在众多粉丝和朋友的推荐下终于要开篇了,为了此篇专栏的一系列文章能够顺畅一气呵成,笔者也是准备了将近半年的时间,希望对音视频开发感兴趣的或者想要踏入音视频开发的看官老爷们能够学到一些好东西!

    开源不易,书写不易,请为笔者的无私奉献给个start吧!支持他更热情的进行创作!
    此处留白,用于后续粘贴SpFFmpeg GitHub开源地址

    关于SpFFmpeg的介绍

    什么是SpFFmpeg?
    SpFFmpeg其实是针对FFmpeg3.3.9版本的二次开发、封装包括各类开发工具的移植内嵌的统称,相当于一个全新的免费开源的框架,Sp也是笔者名字的缩写,对于其后续的文章介绍将会从以下几个大方向开展和进行:

    1. Linux环境下的Shell脚本编写开始介绍,让你熟悉整个框架的宏定义、模块分支、编译流程
    2. Linux环境下脚本执行编译的命令,FSSH工具导出编译库并copy到AndroidStudio/Eclipse进行开发
    3. AndroidStudio/Eclipse下的Cmake/Android.mk(Makefile)宏定义的意义及编写,编译链接静态库
    4. AndroidStudio/Eclipse下如何正确进行C++ Build Link和Debug
    5. AndroidStudio/Eclipse下如何正确使用.h头文件进行NDK开发,JNI的两种注册和使用
    6. 音视频编解码常用的函数介绍和解析
    7. 正确使用函数和C++语法进行第一个简易播放器程序的开发,笔者会结合C++/Java/NDK编译/JNI语法逐一给读者们介绍

    关于SpFFmpeg的功能

    可以进行视频的编辑、视频剪辑、视频拼接、音视频转码、压缩、裁剪、生成缩略图、音视频分离、变速、添加字幕君(包括png/gif)、滤镜支持、bgm添加、加减速视频播放、音视频倒放、裁剪音频、变声和混音、图片合成视频、视频解码图片、支持https 访问、音视频水位线(缓存池策略)、音视频双向异步处理、支持MediaCodec等众多功能

    1.Linux开发环境下常用Shell脚本语法

    假设定义宏变量LOCAL_PATH=“$PWD/testDir”
    注意:如果以下语法前添加 ! 符号,表示取反

    # 如果当前目录下存在testDir,则执行打印并输出"File exist"字符
    if [ -e "$LOCAL_PATH"]; then
    	echo "File exist"
    fi
    
    • 1
    • 2
    • 3
    • 4
    # 如果当前目录下testDir为目录,则执行打印并输出"Is Directory"字符
    if [ -d "$LOCAL_PATH" ]; then
    	echo "Is Directory"
    fi
    
    • 1
    • 2
    • 3
    • 4
    # 如果当前目录下testDir为可读,则执行打印并输出"Can read"字符
    if [ -r "$LOCAL_PATH" ]; then
    	echo "Can read"
    fi
    
    • 1
    • 2
    • 3
    • 4
    # 如果当前目录下testDir为可写,则执行打印并输出"Can write"字符
    if [ -w "$LOCAL_PATH" ]; then
    	echo "Can write"
    fi
    
    • 1
    • 2
    • 3
    • 4
    # 如果当前目录下testDir为可执行,则执行打印并输出"Can execute"字符
    if [ -x "$LOCAL_PATH" ]; then
    	echo "Can execute"
    fi
    
    • 1
    • 2
    • 3
    • 4
    # 如果当前目录下testDir文件长度不为0,则执行打印并输出"File non-zero"字符
    if [ -s "$LOCAL_PATH" ]; then
    	echo "File non-zero"
    fi
    
    • 1
    • 2
    • 3
    • 4
    # 如果LOCAL_PATH目录的字符串非空(非0),则执行打印并输出"Non-empty"字符
    if [ -n "$LOCAL_PATH" ]; then
    	echo "Non-empty"
    fi
    
    • 1
    • 2
    • 3
    • 4
    #如果LOCAL_PATH目录的字符为空,则执行打印并输出"Is empty"字符
    if [ -z "$LOCAL_PATH" ]; then
    	echo "Is empty"
    fi
    
    • 1
    • 2
    • 3
    • 4

    下面延展两个常用语法
    假设定义以下宏变量

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 如果当前PATH_A目录字符为空或当前PATH_B目录字符为空,则执行打印并输出"One empty"字符
    # a表示逻辑或
    if [ -z "$PATH_A" -o -z "$PATH_B" ]; then
    	echo "One empty"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5

    关于常用的一些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"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    因为工作区的编译缓存会在编译脚本进行清楚,所以读者只用关心输出目录缓存的清理

    文章结束语

    关于SpFFmpeg框架常用的一些Shell编译相关的语法介绍就到这里结束了,请大家慢慢消化并多动手实践!
    还是那句老话,开源不易!创作不易!如果觉得文章质量不错请给一个start给他,让其更有动力的创作更好的文章和开源项目,谢谢大家!
    此处留白,用于后续粘贴SpFFmpeg GitHub开源地址

  • 相关阅读:
    【Spring MVC研究】DispatcherServlet如何处理请求(doDispatcher方法)
    android去掉 原生锁屏
    快速实现 CDN 直播
    控创Kontron工控机维修KISS4U760-A工业电脑维修
    《lwip学习1》-数据流篇
    服务器数据恢复-raid0硬盘故障导致服务器崩溃的数据恢复案例
    细品以太坊的“四棵树”——Merkle Patricia Trie
    ssh连接防止断开程序中断
    聊聊动态线程池的9个场景
    【OpenVINO™】使用OpenVINO™ C# API 部署 YOLO-World实现实时开放词汇对象检测
  • 原文地址:https://blog.csdn.net/jspping/article/details/125520047