精华内容
下载资源
问答
  • ffmpeg移植

    千次阅读 2018-10-17 19:51:09
    编译环境:ubuntu12.04 ...ffmpeg库的移植主要包括:  1.yasm移植(可选,yasm是汇编编译器,ffmpeg加入它是为了提高编译速度,可在x264配置时使用--disable-asm选择不使用)  2.x264移植  ...

    编译环境:ubuntu12.04

    交叉编译器:arm-none-linux-gnueabi-gcc 4.4.1

    目标板:iTOP4412 (cortex A9)

    ffmpeg库的移植主要包括:

          1.yasm移植(可选,yasm是汇编编译器,ffmpeg加入它是为了提高编译速度,可在x264配置时使用--disable-asm选择不使用)

          2.x264移植

          3.xvid移植(可选

          4.ffmpeg移植

    具体步骤:

    1.编译yasm

       1)进入源码压缩包目录,解压

       2)制作编译脚本yasm_build.sh

            vim yasm_build.sh

            添加内容:

    #!/bin/sh
    cd yasm-1.3.0
    mkdir _install
    ./configure --enable-shared --prefix=${PWD}/_install --host=arm-none-linux-gnueabi
    make
    make install

    3)执行编译脚本

          ./yasm_build.sh

          则在yasm目录下的_install目录里生成/include /lib /bin

    2.设置临时环境变量

          export PATH=$PATH:/home/jiangyu/software/x264/yasm-1.3.0/_install/bin

    3.编译x264 

    1. 进入x264文件夹,进行配置

    1

    $ ./configure --prefix=${PWD}/_install --enable-shared --disable-asm --host=arm-none-linux-gnueabi

       (如果配置出现找不到目录错误,单独一个一个添加配置选项尝试,确保都配置上)  

       说明:--prefix={PWD}/_install 安装目录
                  --enable-shared   打开动态链接,可以生成libx264.so
                  --disable-asm     因为是移植到arm开发板上,因此把汇编选项关闭
                  --host=arm-none-linux-gnueabi 指定目标CPU和系统

    2. 配置完后生成config.mak,打开config.mak修改:


             1)将 CC=gcc 改为 CC=arm-none-linux-gnueabi-gcc
             2)将 LD=gcc -o 改为 LD=arm-none-linux-gnueabi-gcc –o
             3)将 AR=ar rc  改为 AR=arm-none-linux-gnueabi-ar rc 
             4)将 RAMLIB=ranlib 改为 RANLIB=arm-none-linux-gnueabi-ranlib
             保存退出

    3. make 编译
    4. make install 安装
          安装之后在指定安装目录就有/bin,/include,/lib这三个文件夹

    3.编译xvid

        1)进入主目录下build/generic/

        2)配置:mkdir _install

                       ./configure --host=arm-none-linux-gnueabi --target=arm-linux  --prefix=${PWD}/_install

        3)make

        4)make install 

         _install下生成/include /lib

    4.编译ffmpeg

    进入ffmpeg主目录,mkdir _install 

    1)配置 : 

    ./configure --prefix=/home/jiangyu/software/ffmpeg/_install --disable-x86asm  --disable-ffmpeg --disable-debug --disable-doc --disable-ffplay --disable-ffprobe --enable-version3 --enable-shared --enable-nonfree --enable-gpl --enable-libx264 --enable-pthreads --enable-decoder=h264 --enable-parser=h264 --enable-demuxer=h264 --enable-protocol=file --cross-prefix=arm-none-linux-gnueabi- --target-os=linux --arch=arm --enable-cross-compile --cc=arm-none-linux-gnueabi-gcc --extra-cflags=-I/home/jiangyu/software/ffmpeg/x264-snapshot-20181014-2245/_install/include --extra-ldflags=-L/home/jiangyu/software/ffmpeg/x264-snapshot-20181014-2245/_install/lib --extra-libs=-ldl
    

    2)make -j4

    3)make -j4 install

      ./_install下生成lib include share bin四个文件夹

    5.拷贝库以及可执行文件到开发板

    cp (x264路径)/_install/lib/lib*  /home/jiangyu/rootfs/lib

    cp (x264路径)/_install/bin/x264  /home/jiangytu/rootfs/app/

    cp (ffmpeg路径)/_install/lib/lib*  /home/jiangyu/rootfs/lib

    cp (ffmpeg路径)/_install/bin/ffmpeg  /home/jiangytu/rootfs/app/

    (上述库及可执行文件均注意需要添加可执行权限)

    6.测试

    x264测试:

           ./x264 -o test.264 test.yuv   (.yuv文件通过x264编码压缩生成test.264视频文件)

    ffmpeg测试:

           ./ffmpeg -f video4linux2 -s 1920x1080 -i /dev/video5 test.avi   按q退出录制视频,生成test.avi文件,可直接用播放器播放查看

     至此,此次移植过程结束,上述过程只移植了ffmpeg的x264编码部分,需要其它功能可自行添加。

    展开全文
  • ffmpeg移植到android项目

    2013-05-25 11:40:45
    将ffpeg移植到android平台下,将官网下载的ffmpeg移植到android平台下,用ndk编译出可以在android平台JNI调用的so!
  • FFmpeg移植

    2021-03-13 23:20:40
    今天介绍下FFmpeg在Linux下安装...它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。 FFmpeg配置 在安装ffmpeg之前,首先要安装yasm 1.安装ya

    今天介绍下FFmpeg在Linux下安装编译过程,总体过程比较顺利,就是在ffmpeg等的时间稍长点,仅当记录。

    关于FFmpeg

    FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。

    FFmpeg配置
    在安装ffmpeg之前,首先要安装yasm

    1.安装yasm

    yasm是一个完全重写的NASM汇编。目前,它支持x86和AMD64指令集,接受NASM和气体汇编语法,产出二进制, ELF32 , ELF64 , COFF , Mach - O的( 32和64 ) , RDOFF2 ,的Win32和Win64对象的格式,并生成STABS 调试信息的来源,DWARF 2 ,CodeView 8格式。之所以在FFmpeg中用这个,主要是支持编译ffmpeg-x264.

    1.下载yasm-1.3.0.tar.gz这个版本:

    wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
    如下:

    复制代码

    jiangzhaowei@ubuntu$ wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
    --2018-01-11 19:00:40--  http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
    正在解析主机 www.tortall.net (www.tortall.net)... 69.55.226.36
    正在连接 www.tortall.net (www.tortall.net)|69.55.226.36|:80... 已连接。
    已发出 HTTP 请求,正在等待回应... 302 Found
    位置:http://211.162.127.5/files/30290000043CE033/www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz [跟随至新的 URL]
    --2018-01-11 19:00:41--  http://211.162.127.5/files/30290000043CE033/www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
    正在连接 211.162.127.5:80... 已连接。
    已发出 HTTP 请求,正在等待回应... 200 OK
    长度: 1492156 (1.4M) [application/octet-stream]
    正在保存至: “yasm-1.3.0.tar.gz”
    
    100%[=============================================================================================================>] 1,492,156   7.26MB/s   用时 0.2s 
    
    2018-01-11 19:00:41 (7.26 MB/s) - 已保存 “yasm-1.3.0.tar.gz” [1492156/1492156])
    复制代码
    

    2.下载完成后,用开始解压

    tar xzvf yasm-1.3.0.tar.gz
    
    jiangzhaowei@ubuntu$ tar xzvf yasm-1.3.0.tar.gz
    yasm-1.3.0/modules/objfmts/elf/tests/elfabssect.asm
    yasm-1.3.0/modules/objfmts/elf/tests/curpos-err.asm
    yasm-1.3.0/modules/objfmts/elf/tests/elfglobext2.asm
    yasm-1.3.0/modules/objfmts/elf/tests/elfvisibility.errwarn
    yasm-1.3.0/modules/objfmts/elf/tests/curpos.hex
    yasm-1.3.0/modules/objfmts/elf/tests/elf-x86id.hex
    yasm-1.3.0/modules/objfmts/elf/tests/gas32/
    yasm-1.3.0/modules/objfmts/elf/tests/gas32/Makefile.inc
    yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_got.hex
    yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_ssym.hex
    yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_test.sh
    yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_got.asm
    yasm-1.3.0/modules/objfmts/elf/tests/gas32/elf_gas32_ssym.asm
    yasm-1.3.0/modules/objfmts/elf/tests/elfcond.hex
    yasm-1.3.0/modules/objfmts/elf/tests/elfglobext2.hex
    yasm-1.3.0/modules/objfmts/elf/tests/elf_test.sh
    yasm-1.3.0/modules/objfmts/elf/Makefile.inc
    yasm-1.3.0/modules/objfmts/elf/CMakeLists.txt
    yasm-1.3.0/modules/objfmts/elf/elf-machine.h
    yasm-1.3.0/modules/objfmts/elf/elf-objfmt.c
    yasm-1.3.0/modules/objfmts/elf/elf-x86-x32.c
    

    3.进入目录,开始编译

    cd yasm-1.3.0
    ./configure
    make
    
    depbase=`echo frontends/yasm/yasm.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
            gcc -std=gnu99 -DHAVE_CONFIG_H -I.     -g -O2 -MT frontends/yasm/yasm.o -MD -MP -MF $depbase.Tpo -c -o frontends/yasm/yasm.o frontends/yasm/yasm.c &&\
            mv -f $depbase.Tpo $depbase.Po
    depbase=`echo frontends/yasm/yasm-options.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
            gcc -std=gnu99 -DHAVE_CONFIG_H -I.     -g -O2 -MT frontends/yasm/yasm-options.o -MD -MP -MF $depbase.Tpo -c -o frontends/yasm/yasm-options.o frontends/yasm/yasm-options.c &&\
            mv -f $depbase.Tpo $depbase.Po
    gcc -std=gnu99  -g -O2   -o yasm frontends/yasm/yasm.o frontends/yasm/yasm-options.o libyasm.a  
    depbase=`echo frontends/tasm/tasm.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
            gcc -std=gnu99 -DHAVE_CONFIG_H -I.     -g -O2 -MT frontends/tasm/tasm.o -MD -MP -MF $depbase.Tpo -c -o frontends/tasm/tasm.o frontends/tasm/tasm.c &&\
            mv -f $depbase.Tpo $depbase.Po
    depbase=`echo frontends/tasm/tasm-options.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
            gcc -std=gnu99 -DHAVE_CONFIG_H -I.     -g -O2 -MT frontends/tasm/tasm-options.o -MD -MP -MF $depbase.Tpo -c -o frontends/tasm/tasm-options.o frontends/tasm/tasm-options.c &&\
            mv -f $depbase.Tpo $depbase.Po
    gcc -std=gnu99  -g -O2   -o ytasm frontends/tasm/tasm.o frontends/tasm/tasm-options.o libyasm.a  
    depbase=`echo frontends/vsyasm/vsyasm.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
            gcc -std=gnu99 -DHAVE_CONFIG_H -I.     -g -O2 -MT frontends/vsyasm/vsyasm.o -MD -MP -MF $depbase.Tpo -c -o frontends/vsyasm/vsyasm.o frontends/vsyasm/vsyasm.c &&\
            mv -f $depbase.Tpo $depbase.Po
    gcc -std=gnu99  -g -O2   -o vsyasm frontends/vsyasm/vsyasm.o frontends/yasm/yasm-options.o libyasm.a  
    make[2]:正在离开目录 `/kk/jiangzhaowei/share/ffmpeg/yasm-1.3.0'
    make[1]:正在离开目录 `/kk/jiangzhaowei/share/ffmpeg/yasm-1.3.0'
    

    4.安装

    sudo make install
    

    完成后如图:

    Making install in .
    make[2]: 正在进入目录 `/kk/jiangzhaowei/share/ffmpeg/yasm-1.3.0'
    make[3]: 正在进入目录 `/kk/jiangzhaowei/share/ffmpeg/yasm-1.3.0'
     /bin/mkdir -p '/usr/local/bin'
      /usr/bin/install -c yasm ytasm vsyasm '/usr/local/bin'
     /bin/mkdir -p '/usr/local/lib'
     /usr/bin/install -c -m 644  libyasm.a '/usr/local/lib'
     ( cd '/usr/local/lib' && ranlib libyasm.a )
    make  install-exec-hook
    make[4]: 正在进入目录 `/kk/jiangzhaowei/share/ffmpeg/yasm-1.3.0'
    make[4]: 没有什么可以做的为 `install-exec-hook'。
    make[4]:正在离开目录 `/kk/jiangzhaowei/share/ffmpeg/yasm-1.3.0'
     /bin/mkdir -p '/usr/local/include'
     /usr/bin/install -c -m 644 libyasm.h '/usr/local/include'
     /bin/mkdir -p '/usr/local/share/man/man1'
     /bin/mkdir -p '/usr/local/share/man/man1'
     /usr/bin/install -c -m 644 yasm.1 '/usr/local/share/man/man1'
     /bin/mkdir -p '/usr/local/share/man/man7'
     /usr/bin/install -c -m 644 yasm_arch.7 yasm_parsers.7 yasm_dbgfmts.7 yasm_objfmts.7 '/usr/local/share/man/man7'
     /bin/mkdir -p '/usr/local/share/man/man7'
     /bin/mkdir -p '/usr/local/include/libyasm'
     /usr/bin/install -c -m 644 libyasm/arch.h libyasm/assocdat.h libyasm/bitvect.h libyasm/bytecode.h libyasm/compat-queue.h libyasm/coretype.h libyasm/dbgfmt.h libyasm/errwarn.h libyasm/expr.h libyasm/file.h libyasm/floatnum.h libyasm/hamt.h libyasm/insn.h libyasm/intnum.h libyasm/inttree.h libyasm/linemap.h libyasm/listfmt.h libyasm/md5.h libyasm/module.h libyasm/objfmt.h libyasm/parser.h libyasm/phash.h libyasm/preproc.h libyasm/section.h libyasm/symrec.h libyasm/valparam.h libyasm/value.h '/usr/local/include/libyasm'
     /bin/mkdir -p '/usr/local/include'
     /usr/bin/install -c -m 644 libyasm-stdint.h '/usr/local/include'
    make[3]:正在离开目录 `/kk/jiangzhaowei/share/ffmpeg/yasm-1.3.0'
    make[2]:正在离开目录 `/kk/jiangzhaowei/share/ffmpeg/yasm-1.3.0'
    make[1]:正在离开目录 `/kk/jiangzhaowei/share/ffmpeg/yasm-1.3.0'
    

    5.开始下载FFmpeg,这里下载3.1.3 release ffmpeg的版本

    jiangzhaowei@ubuntu$ wget http://ffmpeg.org/releases/ffmpeg-3.1.3.tar.gz
    --2018-01-11 19:07:58--  http://ffmpeg.org/releases/ffmpeg-3.1.3.tar.gz
    正在解析主机 ffmpeg.org (ffmpeg.org)... 79.124.17.100
    正在连接 ffmpeg.org (ffmpeg.org)|79.124.17.100|:80... 已连接。
    已发出 HTTP 请求,正在等待回应... 200 OK
    长度: 11645295 (11M) [application/x-gzip]
    正在保存至: “ffmpeg-3.1.3.tar.gz”
    
    100%[=============================================================================================================>] 11,645,295  93.1KB/s   用时 94s  
    
    2018-01-11 19:09:33 (120 KB/s) - 已保存 “ffmpeg-3.1.3.tar.gz” [11645295/11645295])
    

    6.下载完成后,用开始解压

    tar -zxvf ffmpeg-3.1.3.tar.gz
    

    或者其它压缩格式:

    tar jxvf ffmpeg-3.4.1.tar.bz2
    

    7.进入目录,开始编译

    cd ffmpeg-3.1.3
    ./configure
    make -j
    
    X86ASM  libavcodec/x86/simple_idct.o
    STRIP   libavcodec/x86/vp8dsp_loopfilter.o
    STRIP   libavcodec/x86/hevc_deblock.o
    STRIP   libavcodec/x86/vp9itxfm.o
    AR      libavcodec/libavcodec.a
    LD      ffmpeg_g
    LD      ffprobe_g
    LD      ffserver_g
    STRIP   ffserver
    STRIP   ffmpeg
    STRIP   ffprobe
    

    8.安装

    sudo make install
    

    FFmpeg HTTP媒体播放服务器:

    1. “ffserver.conf”配置服务器端口、最大连接数以及媒体本地路径。
    2. 启动FFmpeg服务器:
    kk@ubuntu:~/share/bak/ffmpeg$ ffserver -f ffserver.conf 
    ffserver version 3.4.1 Copyright (c) 2000-2017 the FFmpeg developers
      built with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
      configuration: 
      libavutil      55. 78.100 / 55. 78.100
      libavcodec     57.107.100 / 57.107.100
      libavformat    57. 83.100 / 57. 83.100
      libavdevice    57. 10.100 / 57. 10.100
      libavfilter     6.107.100 /  6.107.100
      libswscale      4.  8.100 /  4.  8.100
      libswresample   2.  9.100 /  2.  9.100
    ffserver.conf:164: Setting default value for video bit rate tolerance = 21333. Use NoDefaults to disable it.
    ffserver.conf:164: Setting default value for video rate control equation = tex^qComp. Use NoDefaults to disable it.
    ffserver.conf:164: Setting default value for video max rate = 128000. Use NoDefaults to disable it.
    ffserver.conf:219: Setting default value for audio sample rate = 22050. Use NoDefaults to disable it.
    ffserver.conf:219: Setting default value for audio channel count = 1. Use NoDefaults to disable it.
    ffserver.conf:219: Setting default value for video bit rate tolerance = 64000. Use NoDefaults to disable it.
    ffserver.conf:219: Setting default value for video rate control equation = tex^qComp. Use NoDefaults to disable it.
    ffserver.conf:219: Setting default value for video max rate = 512000. Use NoDefaults to disable it.
    Thu Jan 11 01:12:14 2018 Opening feed file '/home/kk/share/bak/ffmpeg/test.flv' for stream 'test.flv'          //表示已经接收到播放请求
    Thu Jan 11 01:12:14 2018 [ffm @ 0x9a85c20]Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
    Thu Jan 11 01:12:14 2018 [ffm @ 0x9a85c20]Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
    Thu Jan 11 01:12:14 2018 [ffm @ 0x9a85c20]Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
    Thu Jan 11 01:12:14 2018 [ffm @ 0x9a85c20]Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
    Thu Jan 11 01:12:14 2018 FFserver started.
    Thu Jan 11 01:12:58 2018 [flv @ 0x9a97d20]Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
    Thu Jan 11 01:12:58 2018 [flv @ 0x9a97d20]Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
    Thu Jan 11 01:15:16 2018 192.168.199.141 - - [GET] "/test.flv HTTP/1.1" 200 23121984
    Thu Jan 11 01:24:32 2018 192.168.199.141 - - [GET] "/test.flv HTTP/1.1" 200 3148385
    Thu Jan 11 01:26:36 2018 192.168.199.164 - - [GET] "/test.flv HTTP/1.1" 200 11771070
    Thu Jan 11 01:31:24 2018 192.168.199.164 - - [GET] "/test.flv HTTP/1.1" 200 3707111
    Thu Jan 11 01:46:58 2018 192.168.199.164 - - [GET] "/test.flv HTTP/1.1" 200 146509
    Thu Jan 11 02:13:11 2018 192.168.199.164 - - [GET] "/test.flv HTTP/1.1" 200 23121984
    Thu Jan 11 02:14:26 2018 192.168.199.164 - - [GET] "/test.flv HTTP/1.1" 200 176099
    Thu Jan 11 02:27:17 2018 192.168.199.164 - - [GET] "/test.flv HTTP/1.1" 200 2324539
    Thu Jan 11 02:28:39 2018 192.168.199.164 - - [GET] "/test.flv HTTP/1.1" 200 23121984
    Thu Jan 11 02:29:04 2018 192.168.199.164 - - [GET] "/test.flv HTTP/1.1" 200 23121984
    Thu Jan 11 02:29:15 2018 192.168.199.164 - - [GET] "/test.flv HTTP/1.1" 200 8393075
    Thu Jan 11 02:36:37 2018 192.168.199.164 - - [GET] "/test.flv HTTP/1.1" 200 23121984
    Thu Jan 11 02:36:55 2018 192.168.199.164 - - [GET] "/test.flv HTTP/1.1" 200 170610
    
    1. 另外一台客户端PC,使用VLC可以测试FFmpeg服务器
      VLC菜单栏->媒体->打开网络串流,就可以正常播放HTTP服务器流媒体了。
      或者外网测试:

    实例用法
    编译完成后,自然希望能我们有所作用,否则也不会没事编译ffmpeg。

    1. 把视频的前120帧转换成一个gif图,大小指定为230*450:
    ffmpeg -i device-2016-08-25-193402.mp4 -vframes 120  -s 230x405 -y -f gif Super3.gif
    
    1. 调用ffmpeg命令将一个视频转成3gp格式:
    ffmpeg -i device-2016-08-25-193402.mp4 -y -b 20 -s sqcif -r 10 -acodec amr_wb -ab 23.85 -ac 1 -ar 16000 video.3gp
    

    其他FFmpeg使用

    语法:ffmpeg [[options][`-i’ input_file]]{[options] output_file}

    截取一张352x240尺寸大小的,格式为jpg的图片

    ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 s.jpg
    

    截取指定时间的缩略图

    ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg 
    

    -ss后跟的时间单位为秒

    转换文件为3GP格式

    ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144 
    -acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp 
    

     ffmpeg -y -i test.wmv -ac 1 -acodec libamr_nb -ar 8000 -ab 12200 -s 176x144 -b 128 -r 15 test.3gp
    

    视频格式转换
    如何使用 ffmpeg 编码得到高质量的视频

    ffmpeg.exe -i “c:device-2016-08-25-193402.mp4” -target film-dvd -s 720x352 
    -padtop 64 -padbottom 64 -maxrate 7350000 -b 3700000 -sc_threshold 1000000000 
    -trellis -cgop -g 12 -bf 2 -qblur 0.3 -qcomp 0.7 -me full -dc 10 -mbd 2 
    -aspect 16:9 -pass 2 -passlogfile “D:Videoffmpegencode” -an -f mpeg2video “D:Fearless.m2v”
    

    转换指定格式文件到FLV格式

    ffmpeg.exe -i meng.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:/device-2016-09.flv 
    ffmpeg.exe -i meng.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:/device-2016-09.flv
    

    转换文件为MP4格式

    ffmpeg -y -i input.wmv -f mp4 -async 1-s 480x320 -acodec libfaac -vcodec libxvid -qscale 7 -dts_delta_threshold 1 output.mp4 
    ffmpeg -y -i source_video.avi input -acodec libfaac -ab 128000 -vcodec mpeg4 -b 1200000 -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4
    

    使用ffmpeg录像屏幕

    ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -vd x11:0,0 -s 1024x768 ~/device-2016-09-02-193402.avi 
    :其中,-vd x11:0,0 指录制所使用的偏移为 x=0 和 y=0,-s 1024×768 指录制视频的大小为 1024×768。录制的视频文件为 test.avi,将保存到用户主目录中 
    

    如果你只想录制一个应用程序窗口或者桌面上的一个固定区域,那么可以指定偏移位置和区域大小。使用xwininfo -frame命令可以完成查找上述参数。

    重新调整视频尺寸大小

    ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -i ~/device-2016-08-25-193402.avi -s 800×600 ~/device-2016-08-25-193402-800-600.avi 
    

    注:ffmpeg的屏幕录制功能只能在Linux环境下有效。

    视频采集
    把摄像头的实时视频录制下来,存储为文件

    ffmpeg -f video4linux -s 320*240 -r 10 -i /dev/video0 test.asf
    
    展开全文
  • FFmpeg(Fast Forward Mpeg)是一种可以用来记录、转换数字音频、视频,并能将其转化为流的多媒体视频处理工具,拥有视频采集功能、视频格式转换、视频抓图等功能。本文档介绍如何将 ffmpeg 移植到 ARM 平台。
  • ffmpeg编译好了之后就可以移植到anroid上开发了。 一、在android studio中创建一个支持C++的项目 将编译好的ffmpeg头文件跟so文件拷贝到android项目对应目录下。 二、配置相关信息 在CMakeLists.txt里面配置 cmake_...

    ffmpeg编译好了对应android平台的文件之后就可以移植到anroid上使用了。

    一、在android studio中创建一个支持C++的项目
    android studio sdk tools下载cmake、ndk。
    在这里插入图片描述
    将编译好的ffmpeg头文件跟so文件拷贝到android项目对应目录下。
    在这里插入图片描述
    二、配置相关信息
    在CMakeLists.txt里面配置

    cmake_minimum_required(VERSION 3.4.1)
    include_directories(../../../includes)
    #set ffmpeg
    set(ffmpeg ${CMAKE_SOURCE_DIR}/../../../jniLibs/${ANDROID_ABI})
    add_library(avcodec SHARED IMPORTED)
    set_target_properties(avcodec PROPERTIES IMPORTED_LOCATION ${ffmpeg}/libavcodec.so)
    add_library( # Sets the name of the library.
                 native-lib
                 # Sets the library as a shared library.
                 SHARED
                 # Provides a relative path to your source file(s).
                 native-lib.cpp )
    ##you want to add. CMake verifies that the library exists before
    # completing its build.
    find_library( # Sets the name of the path variable.
                  log-lib
                  # Specifies the name of the NDK library that
                  # you want CMake to locate.
                  log )
    
    target_link_libraries( # Specifies the target library.
                           native-lib
                           avcodec
                           # Links the target library to the log library
                           # included in the NDK.
                           ${log-lib} )
    

    在build.gradle中配置,ndk设置调用armeabi-v7a,设置jniLib目录。
    在这里插入图片描述
    注意,这里要加上 pickFirst ‘lib/armeabi-v7a/libavcodec.so’,
    否则编译时会报
    More than one file was found with OS independent path ‘lib/armeabi-v7a/libavcodec.so’
    在这里插入图片描述
    三、调用ffmpeg
    在native-lib.cpp中 调用 avcodec configuration

    #include <jni.h>
    #include <string>
    #include <android/log.h>
    #define LOG_TAG  "C_TAG"
    #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG ,__VA_ARGS__) // 定义LOGI类型
    
    extern "C" {
        #include <libavcodec/avcodec.h>
    }
    
    extern "C" JNIEXPORT jstring JNICALL
    Java_com_example_ffmpeg_MainActivity_stringFromJNI(
            JNIEnv* env,
            jobject /* this */) {
        //std::string hello = "avcodec configuration info ";
        std::string config = avcodec_configuration();
    
        LOGI("configuration %s\n",config.c_str());
    
        return env->NewStringUTF(config.c_str());
    }
    
    

    在这里插入图片描述
    打印出配置信息,表示编译的ffmpeg在android调用成功。

    展开全文
  • FFmpeg 移植 Android

    2019-04-15 01:02:05
    NULL 博文链接:https://superonion.iteye.com/blog/1609777
  • $ cd ffmpeg 设置环境变量: $ source /home/myzr/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env (注意:都要编译都要设置环境变量) 编译: 配置configure脚本 $ ./configure --...

    下载:http://ffmpeg.org/

    解压:
    $ cd ffmpeg

    设置环境变量:
    $ source /home/myzr/my-work/03_toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.env
    (注意:都要编译都要设置环境变量)

    编译:

    配置configure脚本
    $ ./configure --prefix=/home/myzr/my-work/source_tar/ffmpeg/install --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm64 --disable-stripping --target-os=linux --cc=aarch64-linux-gnu-gcc --enable-swscale --extra-ldflags=-L/home/myzr/my-work/source_tar/ffmpeg/install/lib --extra-cflags=-I/home/myzr/my-work/source_tar/ffmpeg/install/include

    ./configure的配置非常重要,没有配置正确都有可能编译不通过,每个应用的配置都有可能是不同的。(注意:配置的时候要使用绝对路径)
    配置的参数:

    –prefix=/home/myzr/my-work/source_tar/ffmpeg/install64 此条是为了确定编译安装的路径,不确定好路径会导致安装编译完不知道编译去了哪。

    –enable-shared 使能编译后会链接成共享对象,即是编译成动态链接库

    –disable-static 不使能编译后生成静态对象,即是不会编译成静态库

    –enable-gpl 使能必须以GPL发布

    –enable-cross-compile 使能交叉编译

    –arch=arm 指定架构,一般是arm,32位的。如果是64位的,请更改为arm64

    –disable-stripping 禁用剥离可执行程序和共享库

    –target-os=linux 指定目标操作系统

    –cc=aarch64-linux-gnu-gcc 指定编译使用的交叉编译工具,如果开发板不支持此款交叉编译工具是不可使用的,一般为平时所用平台的交叉编译工具。

    –enable-swscale

    –extra-ldflags=-L/home/myzr/my-work/source_tar/ffmpeg/install64/lib 指定将应用的库函数放入此目录

    –extra-cflags=-I/home/myzr/my-work/source_tar/ffmpeg/install64/include 指定将应用的include文件放入此目录下

    $ make<–正式编译

    $ make install<–安装

    打包安装目录:

    $ cd …/install

    $ sudo tar -cjf ffmpeg.tar.bz2 ./* ----将其压缩打包

    把打包好的压缩包ffmpeg.tar.bz2利用tftp移动到开发板根目录进行解压:
    $ tftp -g -r ffmpeg.tar.bz2 192.168.137.99

    $ tar -xvf ffmpeg.tar.bz2 -C / 解压到根目录下对应的lib,bin,share等目录下

    最后输入以下命令查看,ffmpeg的命令帮助,证明已经移植成功。
    $ ffmpeg -h
    在这里插入图片描述

    展开全文
  • ffmpeg移植到arm,配置编译

    千次阅读 2019-10-29 07:33:16
    (2)编译ffmpeg;(3)移植成功 1)编译x264 官网上下了个最新的x264,地址 http://www.videolan.org/developers/x264.htm 我下载的文件是last_x264.tar.bz2。 120版本地址http://pan.baidu.com/s/1jG81TSq ...
  • OpenCV ffmpeg移植

    千次阅读 2019-07-01 12:05:41
    前一篇写了如何在移植OpenCV库到ARM平台上,本来我只是用到OpenCV的打开USB摄像头获取图像到IplImage结构中,这用到了V4L2的底层函数。然后进行视频图像的帧处理。 那么如何用OpenCV读写ARM板上的视频文件,并进行...
  • ffmpeg完美移植到arm

    2016-06-30 08:36:14
    具体的交叉编译器根据自己的arm交叉编译器,修改~
  • FFMPEG移植到Android

    2010-10-22 16:28:11
    网上ffmpeg移植到android的文章很少,所以把自己移植的成功心德写上来! 后来发现把各个模块都生成静态库,将ffmpeg目录下的Android.mk文件里的LOCAL_STATIC_LIBRARIES改成LOCAL_WHOLE_STATIC_LIBRARIES 还要按照...
  • ffmpeg移植到Android

    2015-08-25 15:16:05
    ffmpeg移植到Android https://github.com/omxcodec/stagefright-plugins 应用程序为了使用底层的C/C++代码,可以NDK方式开发。这样ffmpeg可以NDK的方式使用编译和移植。网上有一大堆的资料了,这样的方式本人还...
  • android-ffmpeg-x264-faac 将 ffmpeg 移植到支持 h.264 和 faac 编码的 android 如何使用这个项目 请阅读自述文件 亲爱的开发者 如果您想为此项目做出贡献,请通过联系
  • 一、新建一个android项目 (1)、新建项目,选择native C++ (2)、将编译后的so文件和...如何编译ffmpeg for Android,青查看上一篇:三、Mac编译ffmpeg for Android (3)、编辑CMakeLists.txt ...
  • 移植ffmpeg到arm平台.rar

    2019-07-01 11:20:44
    主要说明移植ffmpeg到arm板端的流程,注意替换交叉编译链

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,997
精华内容 3,198
关键字:

ffmpeg移植