Explorar el Código

优化ffmpeg本地超分方法,提升短边为720p,同时提升锐化度和降低文件大小

lh hace 1 día
padre
commit
cbea1f0088
Se han modificado 1 ficheros con 20 adiciones y 4 borrados
  1. 20 4
      app/Libs/Helpers.php

+ 20 - 4
app/Libs/Helpers.php

@@ -4586,15 +4586,31 @@ function upgrade480pTo720p($videoSource, $prefix = 'video', $isContent = false)
         //    - 参数分别为亮度空间/时间和色度空间/时间
         // 编码参数:
         // -c:v libx264: 使用H.264编码器
-        // -preset veryslow: 使用最慢的编码速度以获得最佳画质(适合对画质要求高的场景)
-        // -crf 16: 恒定质量模式,16表示极高质量(0-51,数值越小画质越好,18是高质量,16是极高质量)
+        // -preset slow: 编码速度预设(ultrafast到veryslow,越慢压缩率越高)
+        //   可选值: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow
+        //   推荐: slow(平衡速度和压缩率)或 slower(更好压缩)
+        // -crf 23: 恒定质量模式(0-51,数值越小画质越好,文件越大)
+        //   推荐值: 18(高质量,大文件) 23(默认,平衡) 28(中等质量,小文件)
+        //   当前设置可在.env中配置 VIDEO_UPGRADE_CRF,默认23
         // -tune film: 针对电影内容优化(适合AI生成的动画视频)
         // -profile:v high: 使用H.264 High Profile,支持更高级的压缩特性
         // -level 4.1: H.264 level 4.1,支持更高的码率和分辨率
         // -pix_fmt yuv420p: 像素格式,确保兼容性
-        // -c:a copy: 音频直接复制,不重新编码
+        // -c:a aac -b:a 128k: 音频使用AAC编码,128kbps(比直接copy更小)
         // -movflags +faststart: 优化网络播放
-        $ffmpegCmd = "$ffmpegPath -i \"$inputFile\" -vf \"$scaleFilter,unsharp=5:5:1.0:5:5:0.5,hqdn3d=1.5:1.5:6:6\" -c:v libx264 -preset veryslow -crf 16 -tune film -profile:v high -level 4.1 -pix_fmt yuv420p -c:a copy -movflags +faststart -y \"$outputFile\" 2>&1";
+        
+        // 从环境变量读取编码参数,允许灵活配置
+        $crf = env('VIDEO_UPGRADE_CRF', 23); // CRF值: 18(高质量) 23(默认) 28(小文件)
+        $preset = env('VIDEO_UPGRADE_PRESET', 'slow'); // 编码速度: slow, slower, veryslow
+        $audioBitrate = env('VIDEO_UPGRADE_AUDIO_BITRATE', '128k'); // 音频码率
+        
+        dLog('video_upgrade')->info('使用编码参数', [
+            'crf' => $crf,
+            'preset' => $preset,
+            'audio_bitrate' => $audioBitrate
+        ]);
+        
+        $ffmpegCmd = "$ffmpegPath -i \"$inputFile\" -vf \"$scaleFilter,unsharp=5:5:1.0:5:5:0.5,hqdn3d=1.5:1.5:6:6\" -c:v libx264 -preset $preset -crf $crf -tune film -profile:v high -level 4.1 -pix_fmt yuv420p -c:a aac -b:a $audioBitrate -movflags +faststart -y \"$outputFile\" 2>&1";
         
         dLog('video_upgrade')->info('开始FFmpeg升级视频到720p', ['command' => $ffmpegCmd]);
         $output = shell_exec($ffmpegCmd);