官方介绍(可忽略)

FFmpeg是处理多媒体内容(如音频、视频、字幕和相关元数据)的库和工具的集合。它功能非常强大,包括视频裁剪、视频格式转换、视频截图、视频添加水印等。

它包含可供应用程序使用的libavcodec、libavutil、libavformat、libavfilter、libavdevice、libswscale和libswresample。以及可供最终用户用于转码和播放的ffmpeg、ffplay和ffprobe 。

库:
libavutil是一个包含用于简化编程的函数的库,包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。
libavcodec是一个包含用于音频/视频编解码器的解码器和编码器的库。
libavformat是一个包含多媒体容器格式的解复用器和复用器的库。
libavdevice是一个包含输入和输出设备的库,用于抓取和渲染许多常见的多媒体输入/输出软件框架,包括 Video4Linux、Video4Linux2、VfW和ALSA。
libavfilter是一个包含媒体过滤器的库。
libswscale是一个执行高度优化的图像缩放和色彩空间/像素格式转换操作的库。
libswresample是一个执行高度优化的音频重采样、重新矩阵和样本格式转换操作的库。

工具:
ffmpeg一个多媒体文件转换格式的命令行工具。
ffplay一个基于 SDL 和 FFmpeg 库的简单媒体播放器。
ffprobe一个简单的多媒体流分析器。

官网地址


Windows下安装

  1. 下载软件(version:4.4.1

Windows下载FFmpeg

Windows下载FFmpeg版本

  1. 解压到指定位置,找到bin目录

FFmpeg的bin目录

  1. 复制bin目录路径,配置环境变量

Windows配置FFmpeg环境变量

  1. 打开命令行窗口,执行命令“ffmpeg –version”,测试安装情况

Windows执行ffmpeg版本命令

  1. 出现以上结果,安装完毕

Linux(宝塔环境)下安装

  1. 找到软件下载地址

Linux下载FFmpeg

Linux下载FFmpeg版本

  1. 执行安装命令(安装过程有点漫长,需要慢慢等待)
# 切换目录
cd /root

# 下载ffmpeg(x64二进制文件)
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz

# 解压文件
tar xvf ffmpeg-release-amd64-static.tar.xz && rm -rf ffmpeg-release-amd64-static.tar.xz

# 将ffmpeg和ffprobe可执行文件移至/usr/bin方便系统直接调用
mv ffmpeg-4.4.1-amd64-static/ffmpeg ffmpeg-4.4.1-amd64-static/ffprobe /usr/bin/
 
  1. 执行命令“ffmpeg”或者“ffmpeg -version”,测试安装情况

Linux执行ffmpeg命令行

  1. 出现以上结果,安装完毕

PHP(ThinkPHP框架)使用FFMpeg

官方介绍(可忽略)

PHP-FFMpeg是一个与AVconv/FFMpeg通信的面向对象的库。

使用方法

  1. 使用Composer快速安装PHP-FFMpeg
$ composer require php-ffmpeg/php-ffmpeg
  1. 配置php.ini,启用proc_open、proc_get_status,找到disable_functions将里面的这两个函数去掉即可。建议禁用scandir,exec、system、shell_exec等危险函数。

PHP配置禁用函数

  1. 使用FFMpeg
require 'vendor/autoload.php';

// 创建操作对象
$ffmpeg = FFMpeg\FFMpeg::create();

// 打开视频文件
$video = $ffmpeg->open('video.mpg');

// 调整并同步视频尺寸大小
$video
    ->filters()
    ->resize(new FFMpeg\Coordinate\Dimension(320, 240))
    ->synchronize();

// 保存视频
$video
    ->save(new FFMpeg\Format\Video\X264(), 'video.mpg'); 
// 转码
$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');  
// 截取第10帧画面
$video
    ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))
    ->save('frame.jpg');
// 剪切视频
$video
    ->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(30), 
           FFMpeg\Coordinate\TimeCode::fromSeconds(15));
    ->save(new FFMpeg\Format\Video\X264(), 'video.avi');   

FFMpeg会自动检测ffmpeg和ffprobe二进制文件。如果系统检测不到二进制路径或者你想明确给出二进制路径,你可以传递一个数组作为配置。

$config = array(
    'ffmpeg.binaries'  => '/usr/bin/ffmpeg',
    'ffprobe.binaries' => '/usr/bin/ffprobe'
),
$ffmpeg = FFMpeg\FFMpeg::create($config);

参考资料:
宝塔面板(CentOS7)安装ffmpeg视频切片模块

标签: ThinkPHP, FFmpeg, PHP, 宝塔

添加新评论