广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP-FFMpeg 操作音视频
  • 213
分享到

PHP-FFMpeg 操作音视频

phpffmpeg音视频经验分享 2023-10-21 06:10:53 213人浏览 八月长安
摘要

✨ 目录 🎈 安装PHP-FFMpeg🎈 视频中提取一张图片🎈 视频中提取多张图片🎈 调整视频大小🎈

✨ 目录

🎈 安装PHP-FFmpeg

composer require php-ffmpeg/php-ffmpeg

🎈 视频中提取一张图片

  • 这里的 video.mp4 准备的是一段宫崎骏的视频片段
  • FFMpeg\FFMpeg::create 中需要指定系统软件中 ffmpegffprobe 的安装位置
  • 通过 FFMpeg\Coordinate\TimeCode::fromSeconds 可以指定提取第几秒的视频作为图片保存
require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);$video = $ffmpeg->open('video.mp4');$video    ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(10))    ->save('image.jpg');

提取图片

🎈 视频中提取多张图片

require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);$video = $ffmpeg->open('video.mp4');$video    ->filters()    ->extractMultipleFrames(FFMpeg\Filters\Video\ExtractMultipleFramesFilter::FRAMERATE_EVERY_10SEC, '/path/to/destination/folder/')    ->synchronize();$video    ->save(new FFMpeg\FORMat\Video\X264(), '/path/to/new/file');

🎈 调整视频大小

  • FFMpeg\Coordinate\Dimension 可以设置调整后的分辨率
  • ResizeFilter::RESIZEMODE_FIT 是缩放模式中的一种,按照给定值进行调整
  • ResizeFilter::RESIZEMODE_INSET 是缩放模式中的一种,按照给定的尺寸,等比缩放,如果设置的宽高比跟原视频不一样,那会自动根据宽或高进行等比缩放
  • ResizeFilter::RESIZEMODE_SCALE_WIDTH 是缩放模式中的一种,高按照给定值,宽进行比例缩放
  • ResizeFilter::RESIZEMODE_SCALE_HEIGHT 是缩放模式中的一种,宽按照给定值,高进行比例缩放
  • true / false 是否强制使用最近的纵横比标准
require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);$video = $ffmpeg->open('video.mp4');$video    ->filters()    ->resize(new FFMpeg\Coordinate\Dimension(160,90), FFMpeg\Filters\Video\ResizeFilter::RESIZEMODE_FIT, true);$video    ->save(new FFMpeg\Format\Video\X264(), 'video_new.mp4');

🎈 视频添加水印

  • 通过 watermark 可以设置水印的相关信息,第一个参数是设置水印的地址,第二个参数里面可以设置水印位置参数
  • position: 可以选择 relative 相对定位,或者 absolute 绝对定位,如果选择 absolute,则只需要填写 xy 坐标即可
  • top / bottom / left / right: 四个方位上下左右距离边缘的位置
require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);$video = $ffmpeg->open('video.mp4');$video    ->filters()    ->watermark('watermark.png', array(        'position' => 'relative',        'bottom' => 10,        'right' => 10,    ));$video->save(new FFMpeg\Format\Video\X264(), 'video_watermark_new.mp4');

插入水印

🎈 生成音频波形

  • 可以看到,想要生成音频波形,必须使用的是音频文件,如果是视频文件,需要先将其中的音频提取出来
  • waveform: 中可以设置波形图的长宽还有波形颜色
// 直接处理音频require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);$audio = $ffmpeg->open('audio.mp3');$waveform = $audio->waveform(640, 120, array('#00FF00'));$waveform->save('waveform.png');
// 从视频中提取音频后再生成波形图require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);// Open your video file / 打开视频文件$video = $ffmpeg->open( 'video.mp4' );// Set an audio format / 设置音频格式$audio_format = new FFMpeg\Format\Audio\Mp3();// Extract the audio into a new file as mp3 / 保存成 mp3 文件$video->save($audio_format, 'audio.mp3');// Set the audio file / 打开 mp3 文件$audio = $ffmpeg->open( 'audio.mp3' );// Create the waveform / 生成波形图$waveform = $audio->waveform();$waveform->save( 'waveform.png' );

波形图

🎈 音频转换

  • Flac; 为无损压缩格式
  • setAudiochannels: 声道设置,1单声道,2双声道,3立体声
  • setAudioKiloBitrate: 比特率
require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);$audio = $ffmpeg->open('audio.mp3');$format = new FFMpeg\Format\Audio\Flac();$format->on('progress', function ($audio, $format, $percentage) {    echo "$percentage % 进度";});$format    ->setAudioChannels(2)    ->setAudioKiloBitrate(256);$audio->save($format, 'audio.flac');

🎈 给音频添加元数据

  • 支持给音频添加标题、艺术家、专辑、艺术家、作曲家、曲目、年份、描述、艺术品等
require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);$audio = $ffmpeg->open('audio.mp3');$audio->filters()->addMetadata([    "title" => "this is a song title", // 标题    "artist" => "tinygeeker", // 艺术家    "album" => "1024", // 专辑    "composer" => "tinygeeker", // 作曲家    "track" => 1, // 音轨    "year" => 2023, // 年份    "description" => "this is a song description", // 描述    "artwork" => "artwork.jpg" // 艺术品]);$audio->save(new \FFMpeg\Format\Audio\Mp3(), 'audio_new.mp3');

音频数据

🎈 拼接多个音视频

  • 如果想把多个音视频拼成一个音视频的话,可以使用 concat 命令
  • concat: 参数中设置想拼接的各个短视频
  • saveFromSameCodecs: 设置拼接后的视频名称,第二个参数设置为 true 则允许复制参数,可以加速文件的生成
require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);$video = $ffmpeg->open('video_1.mp4');$video    ->concat(array('video_1.mp4', 'video_2.mp4', 'video_3.mp4'))    ->saveFromSameCodecs('video.mp4', TRUE);

🎈 截取音视频

  • TimeCode::fromSeconds: 有两个参数,第一个是从第几秒开始截取,第二个是截取多少秒,如果不填,则截取到最后
require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);$video = $ffmpeg->open('video.mp4');$video    ->filters()    ->clip(FFMpeg\Coordinate\TimeCode::fromSeconds(30));$video    ->save(new FFMpeg\Format\Video\X264(), 'video_clip.mp4');

🎈 提取 gif 动图

  • 使用 gif 命令可以提取视频中的动图
  • fromSeconds 可以设置从第几秒开始提取,Dimension 可以设置大小和持续的时间
require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);$video = $ffmpeg->open('video.mp4');$video    ->gif(FFMpeg\Coordinate\TimeCode::fromSeconds(30), new FFMpeg\Coordinate\Dimension(640, 480), 3)    ->save('video.gif');

动图提取

🎈 裁剪视频

  • 通过 crop 可以裁剪视频
  • Dimension: 设置裁剪后的视频尺寸
  • Point: 指定要裁剪的点,xy 坐标和 是否动态裁剪
  • 这里 x 的值是 t*100 是从画面左边移动到右边这样裁剪,值越大,移动速度越快
require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);$video = $ffmpeg->open('video.mp4');$video    ->filters()    ->crop(new FFMpeg\Coordinate\Point("t*100", 0, true), new FFMpeg\Coordinate\Dimension(200, 600));$video->save(new FFMpeg\Format\Video\X264(), 'video_crop.mp4');

🎈 转换视频格式

  • setKiloBitrate: 设置视频比特率
  • setAudioChannels: 声道设置,1单声道,2双声道,3立体声
  • setAudioKiloBitrate: 设置音频比特率
require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);$video = $ffmpeg->open('video.mp4');$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');

🎈 调整视频帧率

  • framerate: 可以设置视频的帧速率
  • 大家应该都知道,视频其实是由一张张图片组成的,而一秒中播放30张以上其实肉眼就会把图片看成视频了,这里的 30 就是所谓的帧速了,一般设置 60 即可,为了测试这里设置成 1000
require 'vendor/autoload.php';$ffmpeg = FFMpeg\FFMpeg::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);$video = $ffmpeg->open('video.mp4');$video    ->filters()    ->framerate(new \FFMpeg\Coordinate\FrameRate(1000), 120);$video    ->save(new FFMpeg\Format\Video\X264(), 'video_rate.mp4');

帧率

🎈 获取音视频信息

  • 可以通过 format 获取音视频的所有信息
  • 可以通过 get 获取指定信息的值
require 'vendor/autoload.php';$ffprobe = FFMpeg\FFProbe::create([    'ffmpeg.binaries' => 'F:\ffmpeg\bin\ffmpeg.exe',    'ffprobe.binaries' => 'F:\ffmpeg\bin\ffprobe.exe',]);// 获取音视频信息$videoInfo = $ffprobe->format('video.mp4');// 也可以通过 get 获取指定信息的内容,第二个参数为默认值,如果获取不到该信息的话返回默认值$duration = $ffprobe    ->format('audio.mp3')    ->get('duration', 100);var_dump($videoInfo);var_dump($duration);

详细信息

来源地址:https://blog.csdn.net/weixin_41635750/article/details/133924308

--结束END--

本文标题: PHP-FFMpeg 操作音视频

本文链接: https://www.lsjlt.com/news/433468.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP-FFMpeg 操作音视频
    ✨ 目录 🎈 安装PHP-FFMpeg🎈 视频中提取一张图片🎈 视频中提取多张图片🎈 调整视频大小🎈 ...
    99+
    2023-10-21
    php ffmpeg 音视频 经验分享
  • Android 音视频之FFmpeg
    FFmpeg介绍 FFmpeg是一套可以用来记录、处理数字音频、视频,并将其转换为流的开源框架,采用LPL或GPL许可证,提供了录制、转换以及流...
    99+
    2022-06-06
    ffmpeg Android
  • C#调用FFmpeg操作音视频的实现示例
    目录项目背景FFmpeg介绍FFmpeg相关教程博客示例源码下载FFmpeg.exe安装包C#进程调用FFmpeg操作音视频项目背景   因为公司需要对音视频做一些操作,比如说对系统...
    99+
    2022-11-12
  • 【FFmpeg实战】Flutter音视频裁剪
    作者:JianLee 链接:https://www.jianshu.com/p/868c8536a9b2 flutter_ffmpeg是什么? ffmpeg是一个音视频处理库,通过命令行的形式,...
    99+
    2023-10-23
    ffmpeg flutter 音视频
  • 音视频开发---ffmpeg rtmp推流
    1、推流介绍 推流是将输入视频数据推送至流媒体服务器, 输入视频数据可以是本地视频文件(avi,mp4,flv......),也可以是内存视频数据,或者摄像头等系统设备,也可以是网络流URL。本篇介绍将本地视频文件通过FFmpeg编程...
    99+
    2023-09-17
    音视频 服务器 Powered by 金山文档
  • 怎么利用FFmpeg合并音频和视频
    这篇文章主要介绍了怎么利用FFmpeg合并音频和视频的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么利用FFmpeg合并音频和视频文章都会有所收获,下面我们一起来看看吧。一、FFmpeg 多个音频合并的2种方...
    99+
    2023-07-05
  • Qt音视频开发之实现ffmpeg视频旋转显示
    目录一、前言二、效果图三、体验地址四、相关代码五、功能特点5.1 基础功能5.2 特色功能5.3 视频控件一、前言 用手机或者平板拍摄的视频文件,很可能是旋转的,比如分辨率是1280...
    99+
    2023-03-22
    Qt ffmpeg视频旋转显示 Qt 视频旋转显示 Qt ffmpeg视频 Qt ffmpeg
  • Qt利用ffmpeg实现音视频同步
    目录一、前言二、效果图三、体验地址四、相关代码五、功能特点5.1 基础功能5.2 特色功能5.3 视频控件5.4 内核ffmpeg一、前言 用ffmpeg来做音视频同步,个人认为这个...
    99+
    2023-01-04
    Qt ffmpeg音视频同步 Qt 音视频同步 Qt ffmpeg
  • 视频行为分析——视频图像转换与ffmpeg相关操作
    工具类说明 1. 图像视频转换 1.1 视频输出gif from moviepy.editor import VideoFileClip# 设置输入视频文件路径和输出GIF文件路径input_video = 'video.avi'outpu...
    99+
    2023-08-30
    音视频 ffmpeg
  • FFmpeg 音频可视化解码流程详解
    目录一、解码流程1.1、解析音频信息1.2、从原始数据packet到frame1.3、从frame到PCM byte二、分贝计算三、实现效果一、解码流程 解码流程大致分为以下三个部分...
    99+
    2022-11-13
  • Python使用ffmpeg合成视频、音频的实现方法
    最近有在使用屏幕录制软件录制桌面,在用的过程中突发奇想,使用python能不能做屏幕录制工具,也锻炼下自己的动手能力。接下准备写使用python如何做屏幕录制工具的系列文章: 录制屏...
    99+
    2022-11-10
  • Qt音视频开发之怎么实现ffmpeg视频旋转显示
    这篇文章主要介绍了Qt音视频开发之怎么实现ffmpeg视频旋转显示的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Qt音视频开发之怎么实现ffmpeg视频旋转显示文章都会有所收获,下面我们一起来看看吧。一、前言用...
    99+
    2023-07-05
  • Python从视频中提取音频的操作
    简介 OpenCV中使用VideoCapture类写的视频是没有音频的,如果要进一步处理音频则需要用到一个库——MoviePy,这个库是Python视频编辑库,可裁剪、拼接、标题插入...
    99+
    2022-11-12
  • Centos7安装FFmpeg音/视频工具简易文档
    ffmpeg是一个很强大的音视频处理工具,官网是:http://ffmpeg.org/ 官网介绍ffmpeg是:一个完整的、跨平台的解决方案,可以记录、转换和传输音频和视频。ffmpeg既可以播放视频,也提供命令行工具来...
    99+
    2022-06-04
    Centos7 安装FFmpeg Ubuntu 安装 FFmpeg
  • C语言结合ffmpeg打印音视频信息
    目录一、通过此文可以得到什么二、实现思路三、实现效果四、实现源代码 一、通过此文可以得到什么 通过此练习: 1、知道了如何计算一个音频和视频的播放时间; 2、知道了音视频解码的思路的...
    99+
    2022-11-12
  • 如何利用FFmpeg合并音频和视频(多种方式)
    目录一、FFmpeg 多个音频合并的2种方法一种方法是连接到一起另一种方法是混合到一起音频文件截取指定时间部分音频文件格式转换二、FFmpeg合并视频文件的4种方法1.使用conca...
    99+
    2023-02-20
    FFmpeg合并音频和视频 FFmpeg合并音频 FFmpeg合并视频
  • 怎么配合ffmpeg接口获取视频音频媒体信息
    今天小编给大家分享一下怎么配合ffmpeg接口获取视频音频媒体信息的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、前言做音...
    99+
    2023-07-05
  • 配合ffmpeg接口获取视频音频媒体信息详解
    目录一、前言二、调用ffprobe获取媒体信息【1】获取尺寸和时长【2】获取媒体详细并解析出来三、调用ffmpeg函数获取媒体信息【1】获取视频信息【2】获取视频、音频详细信息一、前...
    99+
    2023-03-19
    ffmpeg接口获取视频音频 ffmpeg 媒体接口
  • Python从视频中提取音频的操作方法
    这篇文章给大家分享的是有关Python从视频中提取音频的操作方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。简介OpenCV中使用VideoCapture类写的视频是没有音频的,如果要进一步处理音频则需要用到一...
    99+
    2023-06-14
  • php实现ffmpeg处理视频的实践
    最近有一个项目需要使用ffmpeg处理视频,这里我写了一个demo,方便我们来实现视频操作ffmpeg操作demo<php namespace common\helpers; use common\mo...
    99+
    2022-01-30
    ffmpeg 视频
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作