centos安装ffmpeg,php使用ffmpeg扩展操作视频(反复卸载安装为新手蔽坑)

426 阅读4分钟

一、什么是ffmpeg

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。

具备那些功能

多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。
1.视频采集功能
ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。
2.视频格式转换功能
ffmpeg视频转换功能。视频格式转换。
ffmpeg可以实现多种视频格式之间的相互转换(wma,rm,avi,mod等)。
3.视频截图功能
对于选定的视频,截取指定时间的缩略图。视频抓图,获取静态图和动态图,不提倡抓gif文件;因为抓出的gif文件大而播放不流畅。
4.给视频加水印功能
使用ffmpeg 视频添加水印或者logo。

二、安装

1.安装nasm

Netwide Assembler (简称 NASM)是一款基于x86架构的汇编与反汇编软件。它可以用来编写16位(8086、80286等)、32位(IA-32)和64位(x86_64)的程序。 NASM被认为是Linux平台上最受欢迎的汇编工具之一。
ffmpeg为了提高效率使用了汇编指令

wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.gz
cd nasm-2.13.03/
./configure
make
make install

查看是否安装成功

nasm --version

在这里插入图片描述

2.安装yasm

yasm是在nasm的基础上开发的,与nasm同宗。由于使用了相同的语法,因此nasm的代码可以直接用yasm来编译。

www.tortall.net/projects/ya… 找到适合自己的yasm版本。然后进行安装。
举例如下:

wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
 ./configure
make
make install

查看是否安装成功

yasm --version

在这里插入图片描述

3.安装libx264

libx264 是个库文件,用于编码

git clone https://code.videolan.org/videolan/x264.git
cd x264
./configure --enable-shared --enable-static --disable-asm
make
make install 

查看是否安装成功

x264 --version

在这里插入图片描述

4.安装ffmpeg

提前提醒
./configure 命令操作后提示这个信息
在这里插入图片描述
执行下面命令后 再执行./configure命令

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH


wget https://ffmpeg.org/releases/ffmpeg-4.4.tar.xz
tar xvJf ffmpeg-4.4.tar.xz
cd ffmpeg-4.4
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-libx264
make 
make install

安装ffmpeg比较耗时间,耐心等待

tips

configure --prefix= 的作用是编译的时候用来指定程序存放路径


--enable-libx264 指令来添加其第三方库使得编译的ffmpeg具有H.264的编码功能

5.添加环境变量

vi /etc/profile

在文件末尾添加

export PATH=$PATH:/usr/local/ffmpeg/bin

保存退出 执行下面命令 设置生效

source /etc/profile

查看是否安装成功

ffmpeg

在这里插入图片描述

6.进行配置

如果报没有 .so 链接库错误信息,就配置下动态库
1.)编辑动态库配置

vi /etc/ld.so.conf

在文件末尾添加

/usr/local/ffmpeg/lib

保存退出后执行下面命令刷新

ldconfig

7.ffmpeg使用语法

ffmpeg官网

命令格式:
    ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]
    ffmpeg [[options][`-i' input_file]]... {[options] output_file}...
    1、参数选项:
    (1) -an: 去掉音频
    (2) -acodec: 音频选项, 一般后面加copy表示拷贝
    (3) -vcodec:视频选项,一般后面加copy表示拷贝
    2、格式:
    (1) h264: 表示输出的是h264的视频裸流
    (2) mp4: 表示输出的是mp4的视频
    (3)mpegts: 表示ts视频流

例:视频压缩

ffmpeg -i 原文件路径 -c:v libx264 -crf 30 -c:a aac 输出文件路径

三、php使用

1.下载依赖包

$ composer require php-ffmpeg/php-ffmpeg

具体使用方法查看包 README.md 文件,下面列举常用例子

2.基本用法

require 'vendor/autoload.php';

$ffmpeg = FFMpeg\FFMpeg::create();
$video = $ffmpeg->open('video.mpg');
$video
    ->filters()
    ->resize(new FFMpeg\Coordinate\Dimension(320, 240))
    ->synchronize();
$video
    ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
    ->save('frame.jpg');
$video
    ->save(new FFMpeg\Format\Video\X264(), 'export-x264.mp4')
    ->save(new FFMpeg\Format\Video\WMV(), 'export-wmv.wmv')
    ->save(new FFMpeg\Format\Video\WebM(), 'export-webm.webm');

3.创建操纵媒体的对象

$ffmpeg = FFMpeg\FFMpeg::create();

FFMpeg自动检测ffmpeg和ffprobe文件。如果想给设置路径,可以用数组形式作为配置传递。

$ffmpeg = FFMpeg\FFMpeg::create(array(
    'ffmpeg.binaries'  => '/opt/local/ffmpeg/bin/ffmpeg',
    'ffprobe.binaries' => '/opt/local/ffmpeg/bin/ffprobe',
    'timeout'          => 3600, // The timeout for the underlying process
    'ffmpeg.threads'   => 12,   // The number of threads that FFMpeg should use
), $logger);

4.转码

$format = new FFMpeg\Format\Video\X264();
$format->on('progress', function ($video, $format, $percentage) {
    echo "$percentage % transcoded";
});

$format
    ->setKiloBitrate(1000)
    ->setAudioChannels(2)
    ->setAudioKiloBitrate(256);

$video->save($format, 'video.avi');

5.提取图像

$frame = $video->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(42));
$frame->save('image.jpg');

6.裁剪视频

$clip = $video->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(30), FFMpeg\Coordinate\TimeCode::fromSeconds(15));
$clip->save(new FFMpeg\Format\Video\X264(), 'video.avi');

四、文档

ffmpeg-php文档
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

五、tips

视频处理比较费服务器,服务器配置不高处理一个视频cpu就会爆,建议不要安装在业务服务器,避免影响业务。

php也可以直接操作
例:

<?php
exec('ffmpeg -i 源文件路径 -c:v libx264 -crf 30 -c:a aac 输出路径');

学习一门新的语言,理论实践相结合效率更高!

分享学习uniapp时做的小程序,不定期更新实用功能,欢迎学习交流。