laravel下FFmpeg进行视频基本操作


FFmpeg官网:http://ffmpeg.org/


本文主要涉及laravel下使用FFmpeg进行音视频的转换,安装FFmpeg请参照官网或查看其他文章


1.安装依赖/使用FFmpeg

laravel根目录下 -> composer require php-ffmpeg/php-ffmpeg 

安装成功后vendor文件夹内将会出现php-ffmpeg文件夹



2.控制或类库引入FFmpeg

use FFMpeg


3.使用FFmpeg


(1) 创建FFmpeg对象


$ffmpeg = FFMpeg\FFMpeg::create($ffmpegCreate);

$ffmpegCreate= [

'ffmpeg.binaries'  => '/usr/bin/ffmpeg', // FFmpeg 执行目录
    'ffprobe.binaries' => '/usr/bin/ffprobe',
          'timeout' => 30000,  // 进程超时时间
   'ffmpeg.threads' => 12 // ffmpeg使用的线程
];


(2) 视频转码/格式操作(mp4/h264)

   

$video = $ffmpeg ->open('test.mp4'); // 打开一个资源
   $format = new FFMpeg\Format\Video\X264('libmp3lame', 'libx264');
    $format->on('progress', function ($video, $format, $percentage) {
echo "$percentage % transcoded";  // 进度
   });

   $format
       ->setKiloBitrate(1000) // 视频码率
->setAudioChannels(2) // 音频频道 2(立体声)
->setAudioKiloBitrate(256);  // 音频千比特率
   $video->save($format, 'video.mp4');  // 保存为新的视频
}


(3) 视频截图

  

 a.截取指定帧

    

$video = $ffmpeg->open('test.mp4');
$video->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(4)) // 截取视频第4帧
   ->save('test.jpg');  // 保存为图片


b. 截取多张


$video = $ffmpeg->open('test.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');


(4)视频添加水印


$video = $ffmpeg->open('test.mp4');
$watermarkPath = 'water.png'; // 水印图片
$absolute = ['x' => 50,'y' => 100];
$relative = [
'position' => 'relative',
'bottom' => 50,
'right' => 50
];
$video->filters()->watermark($watermarkPath, $absolute);

$video->save(new FFMpeg\Format\Video\X264('libfdk_aac'), 'new.mp4');

watermark($imagePath, array $coordinates = array())

$imagePath                              水印图片路径

$coordinates                            水印坐标

position                                     可选项 relative(相对定位) / absolute(绝对,默认)

若为 relative,有四个参数可选,top 、bottom、left、right ,分别对应四个方位



(5)视频比例调整


$video = $ffmpeg->open('test.mp4');

$video->filters()->resize(

new FFMpeg\Coordinate\Dimension(960,540),FFMpeg\Filters\Video\ResizeFilter::RESIZEMODE_INSET, true);

$video->save(

new FFMpeg\Format\Video\X264(), 'new.mp4');

参数说明:

resize(Dimension $dimension, $mode = ResizeFilter::RESIZEMODE_FIT, $forceStandards = true)

$dimension                                 调整后的视频宽高

$mode                                        四种缩放模式

RESIZEMODE_FIT                        按给定值调整

RESIZEMODE_INSET                   在给定的尺寸内调整大小,可能是按宽为基准(高等比缩放),也可能是按高为基准(宽等比缩放)

RESIZEMODE_SCALE_WIDTH     高为给定值,宽按比例缩放

RESIZEMODE_SCALE_HEIGHT    宽为给定值,高按比例缩放$forceStandards                         ture / false,是否强制使用最近的纵横比标准


					

End

评论区(2)

网友

2019.01.06 18:18:36 回复 (0)

网友

2019.07.09 09:28:54 回复 (0)

给我留言