✨ 目录 🎈 安装PHP-FFMpeg🎈 视频中提取一张图片🎈 视频中提取多张图片🎈 调整视频大小🎈
✨ 目录
安装软件
和 操作命令库
composer require php-ffmpeg/php-ffmpeg
video.mp4
准备的是一段宫崎骏的视频片段FFMpeg\FFMpeg::create
中需要指定系统软件中 ffmpeg
和 ffprobe
的安装位置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
,则只需要填写 x
和 y
坐标即可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
命令可以提取视频中的动图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:
指定要裁剪的点,x
、y
坐标和 是否动态裁剪
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
就是所谓的帧速了,一般设置 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文档到电脑,方便收藏和打印~
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0