安装composerrequire xiaosongshu/flv2mp4 H.264 解码 缩放 重编码支持 Baseline Profile 的 H.264 解码、缩放、重新编码为以下场景提供核心能力技术定位这是一个完整的H.264 像素处理管道解码 → 处理 → 编码不依赖 FFmpeg纯 PHP 实现。flv/mp4/hls压缩转码以下是示例代码require_once__DIR__./vendor/autoload.php;ini_set(memory_limit,2048M);$config[width360,height360,bitrate0,fps15,audioBitrate48000,qp30,watermarkfalse,watermarkFile__DIR__./watermark_80x16.yuv,fastMotiontrue,motionWorkers1,decodeWorkers12,segmentDuration3,];# flv - hls(new\Xiaosongshu\Flv2mp4\Recode\PurePhpHlsGenerator($config,__DIR__./hls/output,true,))-processFlv(__DIR__./test.flv);# flv - flv(new\Xiaosongshu\Flv2mp4\Recode\FlvRecoder($config,true))-processFlv(__DIR__./test.flv,__DIR__./output.flv);# mp4 - mp4(new\Xiaosongshu\Flv2mp4\Recode\Mp4Recoder($config,true))-processMp4($mp4File,__DIR__./output1.mp4);添加水印的时候文件名格式watermark_{width}x{height}.yuv。重编码模块提供了YUV 像素级操作接口你可以基于此实现自定义功能如添加字幕、画中画、视频拼接等。直播压缩转码本项目支持将直播flv流压缩并转码hls以适配移动端弱网络场景。示例代码如下?phprequire_once__DIR__./vendor/autoload.php;ini_set(memory_limit,2048M);$pullUrlrtmp://127.0.0.1:1935/a/b;$config[width480,height270,bitrate0,fps10,qp30,audioBitrate64000,motionWorkers1,decodeWorkers12,segmentDuration3,fastMotiontrue,outputDir__DIR__./hls/live_rtmp/,watermarkfalse,watermarkFile__DIR__./watermark_80x16.yuv,maxRetries5,retryDelay3,connectTimeout10,idleTimeout30,queueMaxBytes83886080,duration120,tlsVerifyfalse,];(new\Xiaosongshu\Flv2mp4\Manage\Flv2HlsCompact($pullUrl,$config))-run();当前项目直播压缩转码实测无延迟满足直播需求具体性能与服务器性能密切相关你可以根据自己的服务器配置调整以上参数。motionWorkers和decodeWorkers输入分辨率越高越应增加 decodeWorkers输出分辨率越高越应增加 motionWorkers。两者之和不要超过服务器逻辑处理器数运动估计进程是解码进程的子进程。测试使用 OBS 推流输入 960×540、30fps、每 1 秒一个关键帧、Baseline Profile、H.264 AAC输出 480×270、15fps、HLS 切片 3 秒。连续运行 30 分钟无跳帧、无积压。⚠️ 直播压缩转码仅支持 CLI 模式运行请勿在 FPM 请求中直接调用否则会阻塞 Web 服务的 worker 进程。已支持的重编码特性I 帧解码与编码完全精确INF dBP 帧解码与编码Baseline Profile帧内预测4x49种模式 16x164种模式帧间预测P 帧运动估计菱形搜索优化1/4 像素精度6-tap 滤波器插值CAVLC 熵编码Baseline Profile分辨率缩放解码后 YUV 缩放 → 重新编码码率控制通过 QP 参数调节B 帧支持计划中需扩展至 Main Profile 并实现双向预测CABAC 熵编码计划中Main Profile 支持性能测试报告一、测试环境项目Windows 环境Linux (Docker) 环境CPUIntel Core i5-1440010 核 16 线程6P4EIntel Core i5-1440010 核 16 线程6P4E内存31.7 GB16 GBPHP 版本8.1.3 (CLI)8.1.24 (CLI)运行模式纯 PHP CLIGOP 分布式多进程纯 PHP CLIGOP 分布式多进程注Linux 环境为 Docker 容器运行于同一台 i5-14400 物理机上。二、测试文件信息文件名时长分辨率帧率视频编码音频编码视频码率音频码率总码率base3.flv3.02 秒960×54030 fpsH.264 Constrained BaselineAAC LC 48 kHz stereo1024 kb/s163 kb/s1152 kb/sbase.flv48.49 秒960×54030 fpsH.264 Constrained BaselineAAC LC 48 kHz stereo1024 kb/s163 kb/s1176 kb/sfast.flv410.94 秒960×54030 fpsH.264 Constrained BaselineAAC LC 48 kHz stereo1024 kb/s163 kb/s1116 kb/s三、转码配置参数值输出分辨率480×270输出帧率15 fps视频码率0使用 QP 模式QP30音频码率48 kb/s编码格式H.264 Constrained Baseline AAC分布式模式GOP 分布式多进程decodeWorkers12 个解码进程motionWorkers1每个解码 worker 内嵌 1 个运动估计子进程fastMotiontruesegmentDuration3 秒仅 HLS四、测试结果4.1 Windows 平台PHP 8.1.3文件时长FLVMP4HLSbase3.flv3.02 s8 s约 2.65×8 s约 2.65×8 s约 2.65×base.flv48.49 s40 s约 0.83×40 s约 0.83×40 s约 0.83×fast.flv410.94 s249 s约 0.61×256 s约 0.62×253 s约 0.62×耗时倍率 重编码耗时 ÷ 视频时长。4.2 Linux (Docker) 平台PHP 8.1.24文件时长FLVMP4HLSbase3.flv3.02 s3 s约 0.99×3 s约 0.99×3 s约 0.99×base.flv48.49 s26 s约 0.54×26 s约 0.54×26 s约 0.54×fast.flv410.94 s186 s约 0.45×189 s约 0.46×191 s约 0.46×耗时倍率 重编码耗时 ÷ 视频时长。测试结果受视频复杂度计算机硬件性能计算机负载影响请依实际测试结果为准。项目地址https://github.com/2723659854/flv2mp4