Laravel 9中FFMpeg视频转换添加特定参数的实现方法
在PHP-FFMpeg中添加FFmpeg参数及自动检测方案
一、手动添加指定参数到代码
你可以通过PHP-FFMpeg库的X264格式类提供的方法,直接对应FFmpeg命令中的-pix_fmt yuv420p和-b:v 4000k参数:
修改后的代码如下:
$ffmpeg = FFMpeg::create(); $video = $ffmpeg->open($videoFilename); $format = new X264(); $format->setAudioCodec("aac"); // 对应FFmpeg的 -b:v 4000k 参数,设置视频比特率为4000kbps $format->setVideoKiloBitrate(4000); // 对应FFmpeg的 -pix_fmt yuv420p 参数,设置像素格式 $format->setPixelFormat('yuv420p'); $video->save($format, $newFilename);
如果你的X264类没有setPixelFormat方法(取决于PHP-FFMpeg版本),可以改用添加额外参数的方式:
// 替换上面的setPixelFormat行,直接传入FFmpeg原生参数 $format->addExtraParameters(['-pix_fmt', 'yuv420p']);
二、自动检测是否需要添加参数
可以通过读取原视频的媒体信息,判断是否需要补充这些参数:
核心逻辑
- 像素格式检测:
yuv420p是H264视频兼容iOS、安卓及主流浏览器的强制要求格式,只要原视频像素格式不是yuv420p,就必须添加该参数。 - 比特率检测:如果原视频比特率过高或过低,可能导致转换失败或播放体验差,可以根据阈值决定是否统一设置目标比特率。
实现代码
$ffmpeg = FFMpeg::create(); $video = $ffmpeg->open($videoFilename); $format = new X264(); $format->setAudioCodec("aac"); // 获取原视频的视频流信息 $videoStream = $video->getStreams()->videos()->first(); $originalPixelFormat = $videoStream->get('pix_fmt'); $originalBitrate = $videoStream->get('bit_rate'); // 单位:bps // 检测并设置像素格式 if ($originalPixelFormat !== 'yuv420p') { $format->setPixelFormat('yuv420p'); } // 检测并设置视频比特率(示例:原比特率不在2000-8000kbps范围内时统一设置为4000kbps) $originalKbps = round($originalBitrate / 1000); if ($originalKbps < 2000 || $originalKbps > 8000) { $format->setVideoKiloBitrate(4000); } $video->save($format, $newFilename);
内容的提问来源于stack exchange,提问作者Wayne Fulcher
相关产品推荐
相关产品推荐

