ffmpeg 介绍和安装

avatar 2020年1月21日18:43:22 评论 2,248 次浏览

因为工作需要,所以需要安装ffmpeg。不太懂这个,所以就百度了一下。ffmpeg是一套可以用来记录、转换数字音频、视频,并能转化为开源的计算机程序。ffmpeg可以采集视频,把采集的视频推送到流媒体服务器上,然后流媒体接手文件进行处理推送播放,就是我们看的直播。太深奥的没有理解,所以先一点一点的理解吧。在理解之前我们要理解ffmpeg环境的安装,然后以及使用,下面我是使用源码进行安装,安装之后我们试一下进行简单的视频转码,采集等一些基本使用。先看看安装:

ffmpeg安装

首先,我们先使用yum安装依赖包,然后下载源码包进行编译安装:

[root@ http://www.wulaoer.org ~]# yum install -y autoconf automake gcc gcc-c++ git libtool make nasm pkgconfig zlib-devel
[root@ http://www.wulaoer.org ~]#  yum install -y yasm
[root@ http://www.wulaoer.org ~]# wget https://ffmpeg.org/releases/ffmpeg-4.2.2.tar.bz2
[root@ http://www.wulaoer.org ~]# tar -jxvf ffmpeg-4.2.2.tar.bz2 
[root@ http://www.wulaoer.org ~]# mkdir /usr/local/ffmpeg
[root@ http://www.wulaoer.org ~]# cd ffmpeg-4.2.2
[root@ http://www.wulaoer.org ffmpeg-4.2.2]# ./configure --enable-shared --prefix=/usr/local/ffmpeg --enable-libx264 && make && make install
[root@ http://www.wulaoer.org ffmpeg-4.2.2]# ln -s /usr/local/ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg

安装成功,这只是我们理解的安装成功,需要我们验证一下:

[root@ http://www.wulaoer.org ffmpeg-4.2.2]#  ffmpeg -version
ffmpeg: error while loading shared libraries: libavdevice.so.58: cannot open shared object file: No such file or directory

查看ffmpeg版本,出现错误,没事看下面的方法解决这个错误。

解决方法:在/etc/ld.so.conf.d/目录下创建一个ffmpeg.conf文件,然后在文件中添加一行/usr/local/ffmpeg/lib,然后在ldconfig就可以了

[root@ http://www.wulaoer.org ffmpeg-4.2.2]# vim /etc/ld.so.conf.d/ffmpeg.conf
/usr/local/ffmpeg/lib
[root@ http://www.wulaoer.org ffmpeg-4.2.2]# ldconfig
[root@ http://www.wulaoer.org ffmpeg-4.2.2]#  ffmpeg -version
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-39)
configuration: --enable-shared --prefix=/usr/local/ffmpeg
libavutil      56. 31.100 / 56. 31.100
libavcodec     58. 54.100 / 58. 54.100
libavformat    58. 29.100 / 58. 29.100
libavdevice    58.  8.100 / 58.  8.100
libavfilter     7. 57.100 /  7. 57.100
libswscale      5.  5.100 /  5.  5.100
libswresample   3.  5.100 /  3.  5.100

我们查看版本也没有问题了,先看测试一下我们的视频进行转码。我这里有一个mp4格式的视频,我要转换成avi格式,先看一下转换方法:

[root@ http://www.wulaoer.org ~]# ffmpeg -i vide.mp4 vide.avi
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-39)
  configuration: --enable-shared --prefix=/usr/local/ffmpeg
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'vide.mp4':
.......................................................
vide.mp4: corrupt decoded frame in stream 0
[aac @ 0x78f800] Number of bands (45) exceeds limit (37).
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x78f800] Number of bands (62) exceeds limit (49).
Error while decoding stream #0:1: Invalid data found when processing input
[aac @ 0x78f800] Number of bands (43) exceeds limit (37).
Error while decoding stream #0:1: Invalid data found when processing input
[h264 @ 0x6941c0] cbp too large (834) at 20 1
[h264 @ 0x6941c0] error while decoding MB 20 1
[h264 @ 0x6941c0] concealing 929 DC, 929 AC, 929 MV errors in P frame
.........................................................

转换的过程中出现了错误,这个错误是转码时超出了ffmpeg的限制,所以我们使用其他编码格式进行转码。我尝试了一下播放avi格式的视频,只是听没有看视频内容,声音是正常的,但是这个错误是Libx264编码的问题,所以为了解决这个问题,我们需要安装一下Libx264:

[root@ http://www.wulaoer.org ~]# wget https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2
[root@ http://www.wulaoer.org ~]# cd x264-master
[root@ http://www.wulaoer.org x264-master]# ./configure  --prefix=/usr/local/x264  --enable-shared --enable-static --disable-asm
[root@ http://www.wulaoer.org x264-master]# make && make install

安装之后继续转码,我们继续使用ffmpeg把mp4格式的视频文件转换成avi格式的:

[root@ http://www.wulaoer.org ~]# ffmpeg -i vide.mp4 -vcodec copy -an Vtrailer.avi  #mp4格式转avi格式
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-39)
  configuration: --enable-shared --prefix=/usr/local/ffmpeg
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'vide.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01T00:00:00.000000Z
    encoder         : Lavf53.24.2
  Duration: 00:24:49.67, start: 0.000000, bitrate: 623 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 576x402, 501 kb/s, 12 fps, 12 tbr, 12 tbn, 24 tbc (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 119 kb/s (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : SoundHandler
Output #0, avi, to 'Vtrailer.avi':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    ISFT            : Lavf58.29.100
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 576x402, q=2-31, 501 kb/s, 12 fps, 12 tbr, 12 tbn, 12 tbc (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
frame=17876 fps=0.0 q=-1.0 Lsize=   91614kB time=00:24:49.66 bitrate= 503.8kbits/s speed=7.26e+03x    
video:91181kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.475012%

转码后没有问题。不过还有其他的方法进行操作,这里先说这么多,下个章节对ffmpeg的使用在进行说明。没有了,看写其他的吧。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: