PHP中的FFmpeg安装及使用(FFmpeg在windows和linux中的安装教程)

本文和大家分享PHP中的FFmeg安装及使用,希望能帮助到大家

FFmpeg简介

FFmpeg是视频处理最常用的开源软件。
它功能强大,用途广泛,大量用于视频网站和商业软件(比如 Youtube 和 iTunes),也是许多音频和视频格式的标准编码/解码实现。
关于FFMPEG视音频编解码的知识可以参考大神雷霄骅的系列教程
https://blog.csdn.net/leixiaohua1020/article/details/15811977

FFmpeg安装

windowus上安装

要在Windows上下载和安装FFmpeg,您可以按照以下步骤进行操作:

1. 访问FFmpeg的官方网站:https://ffmpeg.org/,然后点击页面上方的“Download”选项卡。

2. 在下载页面上,您会看到Windows下的几个选项。您可以选择“Windows Builds”下的链接,该链接会带您到一个包含各种Windows构建的页面。

3. 在Windows构建页面上,您可以选择适合您系统的版本。如果您不确定您的系统是32位还是64位,请按下Win + Pause/Break键,然后在“系统类型”下查看。

4. 选择适合您系统的版本后,您将看到一系列下载链接。您可以选择带有“static”字样的链接,这意味着它是一个独立的可执行文件,不需要其他依赖项。

5. 点击所选版本的链接后,会下载一个ZIP文件。解压缩该文件到您选择的文件夹中。

6. 打开解压缩后的文件夹,您将找到一个名为“ffmpeg.exe”的可执行文件。您可以将该文件移动到任何您喜欢的位置,或者将其添加到系统的环境变量中。

7. 完成后,您可以在命令提示符cmd或PowerShell中使用FFmpeg命令。您可以通过运行“ffmpeg -version”命令来验证安装是否成功。

请注意,FFmpeg是一个功能强大的多媒体处理工具,它可以执行各种操作,包括音频和视频转码、剪辑、合并等。如果您需要详细了解如何使用FFmpeg的特定功能,请查阅官方文档或在线资源。

Linux上安装

下载fmmpeg代码

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg

安装依赖库文件

主要安装三个:yasm ,sdl1.2 和 sdl2.0

安装 yasm

sudo apt-get install yasm

安装sdl1.2

sudo apt-get install libsdl1.2-dev

安装 sdl2.0

sudo apt-get install libstl2-dev

编译安装FFmpeg

进入到解压之后的 ffmpeg文件夹,依次执行以下命令:

 

./configure
make
sudo make install

测试安装成功与否

输入以下命令查看输出:

在这里插入图片描述

linux下 FFmpeg 命令介绍

FFmpeg 常用的命令行参数如下。

 

-c:指定编码器
-c copy:直接复制,不经过重新编码(这样比较快)
-c:v:指定视频编码器
-c:a:指定音频编码器
-i:指定输入文件
-an:去除音频流
-vn: 去除视频流
-preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
-y:不经过确认,输出时直接覆盖同名文件。

常见命令

查看文件信息

查看视频文件的元信息,比如编码格式和比特率,可以只使用-i参数。
$ ffmpeg -i input.mp4

分离视频音频流

 

ffmpeg -i input_file -vcodec copy -an output_file_video  //分离视频流
ffmpeg -i input_file -acodec copy -vn output_file_audio  //分离音频流

视频转码

转换编码格式(transcoding)指的是, 将视频文件从一种编码转成另一种编码。比如转成 H.264 编码,一般使用编码器libx264,所以只需指定输出文件的视频编码器即可。
$ ffmpeg -i [input.file] -c:v libx264 output.mp4

改变分辨率

下面是改变视频分辨率(transsizing)的例子,从 1080p 转为 480p 。

 

$ ffmpeg \
-i input.mp4 \
-vf scale=480:-1 \
output.mp4

添加音轨

添加音轨(muxing)指的是,将外部音频加入视频,比如添加背景音乐或旁白。

 

$ ffmpeg \
-i input.aac -i input.mp4 \
output.mp4

截图

 

$ ffmpeg \
-ss 01:23:45 \
-i input \
-vframes 1 -q:v 2 \
output.jpg

上面例子中,-ss 01:23:45表示截取的时间戳, -vframes 1指定只截取一帧,-q:v 2表示输出的图片质量,一般是1到5之间(1 为质量最高)。

为音频添加封面

下面命令可以将音频文件,转为带封面的视频文件

 

$ ffmpeg \
-loop 1 \
-i cover.jpg -i input.mp3 \
-c:v libx264 -c:a aac -b:a 192k -shortest \
output.mp4


PHP中FFmpeg使用

exec方法--推荐这个方法,简单(亲测可行,速度很快)

 

 

//视频压缩
public static function reSize($path, $outPath, $toSize)
{
    $shell = "ffmpeg -i " . $path . " -strict -2  -y -fs " . $toSize . "  ". $outPath . " 2>&1";
    exec($shell, $output, $ret);
    return $ret;
}

 

//视频截图
public static function screenshot($path, $outPath)
{
    $shell = "ffmpeg -i " . $path . " -ss 1 -y -frames:v 1 -q:v 1 " . $outPath . " 2>&1";
    exec($shell, $output, $ret);
    return $res;

}
/********提取视频封面-命令行调用
 * 音频提取示例 ffmpeg -i D:\phpstudy_pro\WWW\fast.com\public\111.mp4 -vn D:\phpstudy_pro\WWW\fast.com\public\output.mp3
 * 图片提取:ffmpeg -i D:\phpstudy_pro\WWW\fast.com\public\111.mp4 -ss 00:00:01 -vframes 1 D:\phpstudy_pro\WWW\fast.com\public\output.jpg
 **********************/
public function test_video(){
    $videoPath = '111.mp4'; // 视频文件路径
    $outputPath = 'output666.jpg'; // 输出封面图片路径

    $ffmpegPath = 'D:\ffmpeg\bin\ffmpeg.exe'; // FFmpeg可执行文件路径

    $command = "$ffmpegPath -i $videoPath -ss 00:00:01 -vframes 1 $outputPath";

    exec($command, $output, $returnVar);

    if ($returnVar === 0) {
        echo "封面图片提取成功!";
    } else {
        echo "封面图片提取失败!";
    }
}

php-ffmpeg扩展(直接安装后测试有报错,怀疑是,还需要安装.dll扩展文件,不是很确定,该方案目前没测试通)

composer安装php-ffmpeg
$ composer require php-ffmpeg/php-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
    ->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');

FFmpeg常用的命令行指令

 

1. MP4转avi
ffmpeg -i input.mp4 output.avi

2. MP4提取h264
ffmpeg -i infbig.mp4 -vcodec copy -an out.h264

3. MP4提取YUV
ffmpeg -i input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv

4. YUV转MP4
ffmpeg -s 640*512 -pix_fmt yuv420p -i input.yuv -framerate 50 -vcodec libx264 output.mp4

5. 播放YUV视频
ffplay -i out.yuv -video_size 640x512 -pixel_format yuv420p -framerate 50

6. 视频截图
ffmpeg -i input.mp4 -r 1 'out-image-%03d.jpg'
// -r 1 表示1秒截图一次

7. MP4转GIF
ffmpeg -i input.mp4 -ss 00:00:00 -t 10 out.gif
// -t 10 表示录制10秒

 

 

THE END