因为工作需要,所以需要安装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的使用在进行说明。没有了,看写其他的吧。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏