菜鸟笔记
简单的开发笔记
首页
登录 / 注册
笨猫首页
笨猫首页
斑马导航
奶牛网盘
白象软仓
青蛙壁纸
毒蛇电影
怪鸟头像
大熊逗图
热狗应用
蜗牛摘录
狐狸颜选
关于我们
收藏网站
菜鸟笔记
简单的开发笔记
首页
登录 / 注册
PHP-FFMpeg 操作音视频
在使用 ffmpeg 之前,需要 安装软件 和 操作命令库 软件根据系统,自行选择安装,而操作命令库需要根据下列的命令进行安装 软件地址:https://github.com/BtbN/FFmpeg-Builds/releases 命令地址:https://github.com/PHP-FFMpeg/PHP-FFMpeg/ ```` composer require php-ffmpeg/php-ffmpeg ```` ### 视频中提取一张图片 这里的 video.mp4 准备的是一段宫崎骏的视频片段 FFMpeg\FFMpeg::create 中需要指定系统软件中 ffmpeg 和 ffprobe 的安装位置 通过 FFMpeg\Coordinate\TimeCode::fromSeconds 可以指定提取第几秒的视频作为图片保存 ```php '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'); ```  ### 视频中提取多张图片 ```php 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 是否强制使用最近的纵横比标准 ```php '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,则只需要填写 x 和 y 坐标即可 top / bottom / left / right: 四个方位上下左右距离边缘的位置 ```php '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: 中可以设置波形图的长宽还有波形颜色 ```php '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'); ``` ```php '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: 比特率 ```php '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'); ``` ### 给音频添加元数据 支持给音频添加标题、艺术家、专辑、艺术家、作曲家、曲目、年份、描述、艺术品等 ```php '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 则允许复制参数,可以加速文件的生成 ```php '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: 有两个参数,第一个是从第几秒开始截取,第二个是截取多少秒,如果不填,则截取到最后 ```php '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 可以设置大小和持续的时间 ```php '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: 指定要裁剪的点,x、y 坐标和 是否动态裁剪 这里 x 的值是 t*100 是从画面左边移动到右边这样裁剪,值越大,移动速度越快 ```php '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: 设置音频比特率 ```php '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 ```php '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 获取指定信息的值 ```php '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); ``` 
微信搜搜
笨猫小站
win10系统上运行时报错:丢失MSVCR110.dll的解决方法
ThinkPHP5报错:Call to undefined function captcha_src()
宝塔面板安装阿里云SLL证书教程
TP6操作pgSQL13报错解决方案
(1713)
(401)
(99)
打赏
公众号
小程序
QQ群
顶部
笨猫小站
小站首页
笨猫图库
懒虫工具
奶牛网盘
斑马导航
青蛙壁纸
毒蛇电影
白象软件
热狗应用
怪鸟头像
狐狸颜选
菜鸟笔记
蜗牛摘录
谢谢老板打赏
祝老板每天都有好运气
支付宝
微信
关闭弹窗
小站会员
永久会员最划算哟
3天体验卡
¥9.00
¥29.00
每天仅需3.00元
每天下载
5
次
1年畅享卡
¥39.00
¥99.00
每天仅需0.11元
每天下载
20
次
永久至尊卡
¥99.00
¥369.00
每天仅需0.00元
每天下载
1000
次
支付宝支付
微信支付
1. 会员充值前请仔细核对信息
2. 会员属于虚拟产品,充值成功后不予退款
微信搜一搜
笨猫小站
打赏赞助
猫豆充值
充值越多价格约优惠哟
20 猫豆
¥5.00元
¥5.00元
50 猫豆
¥9.00元
¥9.00元
100 猫豆
¥15.00元
¥15.00元
200 猫豆
¥20.00元
¥20.00元
500 猫豆
¥29.00元
¥29.00元
1000 猫豆
¥49.00元
¥49.00元
2000 猫豆
¥89.00元
¥89.00元
5000 猫豆
¥179.00元
¥179.00元
10000 猫豆
¥299.00元
¥299.00元
支付宝支付
微信支付
微信扫码支付
请使用微信扫一扫完成付款
¥15.00
22:21:12
我已支付
笨猫小站
微信扫码关注不领福利
请使用微信扫一扫关注我
已关注
笨猫工具
笨猫小站工具库
请使用微信扫一扫立马获取
已关注
笨猫小站
笨猫小站资源群
请使用QQ扫一扫加如QQ群
已加入
绑定账号
绑定账号手机端登录更方便
确认绑定
绑定微信
绑定微信登录更方便
微信二维码已过期
刷新
请使用微信扫码关注即可绑定
(移动端截图保存扫码关注)
订单详情
订单信息已生成
请稍等...
登录
·
注册
登录即代表您已同意
《服务协议》
和
《隐私协议》
确认提交
微信快捷登录/注册
注册即代表您已同意
《服务协议》
和
《隐私协议》
确认提交
微信快捷登录/注册
微信二维码已过期
刷新
请使用微信扫描二维码关注登录
手机账号注册