HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    ffmpeg 动态脚本(ffmpeg一键脚本)

    发布时间:2023-05-23 12:19:52     稿源: 创意岭    阅读: 87        

    大家好!今天让创意岭的小编来大家介绍下关于ffmpeg 动态脚本的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。FyA创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等FyA创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    只需要输入关键词,就能返回你想要的内容,有小程序、在线网页版、PC客户端和批量生成器FyA创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    问友Ai官网:https://ai.de1919.comFyA创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    本文目录:FyA创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    ffmpeg 动态脚本(ffmpeg一键脚本)FyA创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    ios下 怎么在代码中调用ffmpeg的命令FyA创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

      ffmpeg是一个多平台多媒体处理工具,处理视频和音频的功能非常强大。目前在网上搜到的iOS上使用FFMPEG的资料都比较陈旧,而FFMPEG更新迭代比较快; 且网上的讲解不够详细,对于初次接触FFMPEG的新手(例如我)来说确实不太好使用。为了防止忘记,这里对iOS下使用FFMPEG做一个总结。
      1. FFMPEG层次结构的简单理解
      要使用FFMPEG,首先需要理解FFMPEG的代码结构。根据志哥的提示,ffmpeg的代码是包括两部分的,一部分是library,一部分是tool。api都是在library里面,如果直接调api来操作视频的话,就需要写c或者c++了。另一部分是tool,使用的是命令行,则不需要自己去编码来实现视频操作的流程。实际上tool只不过把命令行转换为api的操作而已。
      2. 预热-在mac os下使用ffmpeg
      在mac os下使用ffmpeg比较简单,可以直接使用命令行来操作。首先安装ffmpeg,这里默认系统已经安装好brew,只需要在终端上输入:
      brew install ffmpeg
      等待安装结束即可。
      安装结束后,尝试以下命令:
      ffmpeg -i input.mp4 output.avi
      如果能顺利转换,表明安装成功
      3. 编译能在iOS下使用的FFMPEG library库
      这一步是编译1所说的library,编译好之后可以调用FFMPEG的api。网上有一些方法,但都要自己手动编译,稍显复杂而且比较陈旧。按照app store的需求,编译出来的包还必须支持arm64。我在万能的github中找到一个能够"一键编译"的脚本,地址如下:
      https://github.com/kewlbear/FFmpeg-iOS-build-script
      而且写这个脚本的歪果仁挺好人,更新很及时,已经更新到了最新的2.5.3版本。下载下来,只有一个build-ffmpeg.sh脚本文件。在终端中转至脚本的目录,执行命令:
      ./build-ffmpeg.sh
      脚本则会自动从github中把ffmpeg源码下到本地并开始编译。
      编译结束后,文件目录如下:
      其中,ffmpeg-2.5.3是源码,FFmpeg-iOS是编译出来的库,里面有我们需要的.a静态库,一共有7个。
      执行命令:
      lipo -info libavcodec.a
      查看.a包支持的架构,这几个包都支持了armv7 armv7s i386 x86_64 arm64这几个架构,这个脚本果真是业界良心啊~~~
      4.在xcode中引入FFMPEG library库
      新建工程,把上面编译好的FFmpeg-iOS拖到xcode工程中,添加一个头文件引用
      
      #include "avformat.h"
      添加一个api语句:
      av_register_all();
      添加一个空的类,把执行文件.m后缀改为.mm,开启混编模式。
      添加相应的framework,包括avfoundation和coremedia。
      运行工程,如果没有报错,则表明编译成功。
      5.在xcode项目中使用命令行
      执行到第4步,已经可以使用library库了。但是如果要对视频进行操作,还是需要手动写很多代码去调用api,工作量较大,自然不如直接写命令行方便。为了命令行能够在xcode工程中使用,还需要做以下工作:
      (1)添加源码中的tools,具体文件包括:
      
      (2)添加Header Search Paths
      在target--build setting中搜索Header Search Paths,并在Header Search Paths下面添加源码ffmpeg-2.5.3和scratch的路径。
      (3)修改ffmpeg.h和ffmpeg.c源码
      如果此时run这个工程,则会报错,原因是工程里面有2个main函数,此时处理方法为:
      在ffmpeg.h中添加一个函数声明:
      int ffmpeg_main(int argc, char **argv);
      在ffmpeg.c中找到main函数,把main函数改为ffmpeg_main。
      (4)调用命令行范例
      添加头文件:#import "ffmpeg.h"
      调用命令行
      int numberOfArgs = 16;
      char** arguments = calloc(numberOfArgs, sizeof(char*));
      
      arguments[0] = "ffmpeg";
      arguments[1] = "-i";
      arguments[2] = inputPath;
      arguments[3] = "-ss";
      arguments[4] = "0";
      arguments[5] = "-t";
      arguments[6] = durationChar;
      arguments[7] = "-vcodec";
      arguments[8] = "copy";
      arguments[9] = "-acodec";
      arguments[10] = "aac";
      arguments[11] = "-strict";
      arguments[12] = "-2";
      arguments[13] = "-b:a";
      arguments[14] = "32k";
      arguments[15] = outputPath;
      
      int result = ffmpeg_main(numberOfArgs, arguments);
      其中inputpath和outputpath是文件路径。经测试,这两个路径不支持asset-library://协议和file:// 协议,所以如果是要用相册的文件,我目前的解决办法是把它拷贝到沙盒里面。
      6. 改关闭进程为关闭线程
      如果顺利进行到了第5步,在app中是能够用命令行处理视频了,但会出现一个问题,app会退出。经肖大神提醒,发现了命令行执行完毕之后会退出进程。而iOS下只能启动一个进程,因此必须改关闭进程为关闭线程,或者直接把关闭进程的方法给注掉。
      在ffmpeg.c中可以看到,执行退出进程的方法是exit_program,定位到了cmdutils.c中执行了c语言的exit方法。这里我将它改为了pthread_exit(需要添加#include 头文件)。在xcode项目中使用时,则可以用NSThread来新开一个线程,执行完毕之后,把线程关闭了即可。再使用NSThreadWillExitNotification通知,即可监听线程退出的情况。
      7. 修复ffmpeg.c里面的一个bug
      在实际项目中,可能需要多次调用命令行,但在多次调用命令行的过程中,发现ffmpeg.c的代码中会访问空属性导致程序崩溃。逐步debug后发现,很多指针已经置空了,但它们的计数却没有置零,不知道是不是ffmpeg.c的一个bug。修复方法如下:在ffmpeg_cleanup方法下,将各个计数器置零,包括:
      nb_filtergraphs
      nb_output_files
      nb_output_streams
      nb_input_files
      nb_input_streams
      置零之后,重复使用ffmpeg_main方法一切正常。

    ffmpeg 动态脚本(ffmpeg一键脚本)FyA创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    ffmpeg configure 脚本是什么生成的FyA创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司

    NDK全称:Native Development Kit。
    1、NDK是一系列工具的集合。
    * NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。[1]
    * NDK集成了交叉编译器,并提供了相应的mk文件隔离平台、CPU、API等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求
    ”等),就可以创建出so。
    * NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
    2、NDK提供了一份稳定、功能有限的API头文件声明。
    Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc
    )、标准数学库(libm)、压缩库(libz)、Log库(liblog)。
    3. 利用ndk编译ffmpeg
    ndk自带的文档,其中有一篇STANDALONE-TOOLCHAIN.html,里面涉及了独立编译的方法,
    A typical use case if invoking the 'configure' script of an open-source library that expects a cross-compiler in the CC environment variable.
    那意思很明显我们可以用这种独立编译方法,编译一些由‘configure’脚本生成的开源库,这篇介绍了把ndk当成普通编译工具使用,比我我们在linux使用的gcc命令,其实ndk都为我们提供了,甚至ndk还为我们提供了make工具。
    此外你还需要了解configure参数,你可以用./configrue --help ->help.txt 生成帮助文件。我的编译代码如下:
    ./configure \
    --logfile=FILE \
    --prefix='/home/wangzhiping/source/ffmpeg_ndk/release' \
    --enable-gpl \
    --enable-version3 \
    --enable-nonfree \
    --disable-doc \
    --disable-programs \
    --disable-avdevice \
    --enable-small \
    --cross-prefix='/home/wangzhiping/arm_android14_toolchain/bin/arm-linux-androideabi-' \
    --enable-cross-compile \
    --target-os=linux \
    --extra-cflags='-I/home/wangzhiping/arm_android14_toolchain/sysroot/usr/include' \
    --extra-ldflags='-L/home/wangzhiping/arm_android14_toolchain/sysroot/usr/lib' \
    --arch=arm \
    --disable-symver \
    --disable-debug \
    --disable-stripping \
    --extra-cflags="-fPIC -DANDROID" \
    logfile: 是输出日志一的文件名
    prifix :在运行make install后,他会相应生成的库文件,及头文件拷贝的指定文件夹
    cross-prefix:是你编译工具的前缀
    extra-cflags:都是编译时候的选项,你在里面要提供头文件的位子
    extra-ldflags:是连接时候的选项,要提供你库文件的件子
    这些配置,你要参考 STANDALONE-TOOLCHAIN.htm ,你还可以自成由发挥,只要正确地指定 gcc,等编译工具和头文件以及链接库的位子即可, 比如你可以把extra-cflags和extra-ldflags去掉,而加sysroot先项,configure完成后,就运行make了。

    以上就是关于ffmpeg 动态脚本相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。FyA创意岭 - 安心托付、值得信赖的品牌设计、营销策划公司


    推荐阅读:

    office怎么添加下拉列表(office下拉列表框怎么设置)

    ucl23已发出offer专业(ucl接受了一个offer会影响后面的申请吗)

    留学拿到的offer没有被中介宣传(留学拿到的offer没有被中介宣传过)

    国风vi设计素材(中国风vi设计)

    抖音比较靠谱的代运营公司(抖音代运营公司哪家好)