Browse Source

feat: 添加crf参数

hexleo 4 years ago
parent
commit
583a883f47

+ 59 - 24
Android/PlayerProj/animtool/src/main/java/com/tencent/qgame/playerproj/animtool/AnimTool.java

@@ -309,35 +309,70 @@ public class AnimTool {
      * 创建mp4
      */
     private boolean createMp4(CommonArg commonArg, String videoPath, String frameImagePath) throws Exception {
+
+        TLog.i(TAG, "run createMp4");
+        int result = ProcessUtil.run(getFFmpegCmd(commonArg, videoPath, frameImagePath));
+        TLog.i(TAG, "createMp4 result=" + (result == 0? "success" : "fail"));
+        return result == 0;
+    }
+
+    private String[] getFFmpegCmd(CommonArg commonArg, String videoPath, String frameImagePath) {
         String[] cmd;
         if (commonArg.enableH265) {
-            cmd = new String[] {commonArg.ffmpegCmd, "-r", String.valueOf(commonArg.fps),
-                    "-i", frameImagePath + "%03d.png",
-                    "-pix_fmt", "yuv420p",
-                    "-vcodec", "libx265",
-                    "-b:v", commonArg.bitrate + "k",
-                    "-profile:v", "main",
-                    "-level", "4.0",
-                    "-tag:v", "hvc1",
-                    "-bufsize", "2000k",
-                    "-y", videoPath + TEMP_VIDEO_FILE};
+            if (commonArg.enableCrf) {
+                cmd = new String[] {commonArg.ffmpegCmd, "-r", String.valueOf(commonArg.fps),
+                        "-i", frameImagePath + "%03d.png",
+                        "-pix_fmt", "yuv420p",
+                        "-vcodec", "libx265",
+                        "-crf", Integer.toString(commonArg.crf),
+                        "-profile:v", "main",
+                        "-level", "4.0",
+                        "-bf", "0",
+                        "-tag:v", "hvc1",
+                        "-bufsize", "2000k",
+                        "-y", videoPath + TEMP_VIDEO_FILE};
+            } else {
+                cmd = new String[] {commonArg.ffmpegCmd, "-r", String.valueOf(commonArg.fps),
+                        "-i", frameImagePath + "%03d.png",
+                        "-pix_fmt", "yuv420p",
+                        "-vcodec", "libx265",
+                        "-b:v", commonArg.bitrate + "k",
+                        "-profile:v", "main",
+                        "-level", "4.0",
+                        "-bf", "0",
+                        "-tag:v", "hvc1",
+                        "-bufsize", "2000k",
+                        "-y", videoPath + TEMP_VIDEO_FILE};
+            }
+
         } else {
-            cmd = new String[]{commonArg.ffmpegCmd, "-r", String.valueOf(commonArg.fps),
-                    "-i", frameImagePath + "%03d.png",
-                    "-pix_fmt", "yuv420p",
-                    "-vcodec", "libx264",
-                    "-b:v", commonArg.bitrate + "k",
-                    "-profile:v", "main",
-                    "-level", "4.0",
-                    "-bf", "0",
-                    "-bufsize", "2000k",
-                    "-y", videoPath + TEMP_VIDEO_FILE};
+            if (commonArg.enableCrf) {
+                cmd = new String[]{commonArg.ffmpegCmd, "-r", String.valueOf(commonArg.fps),
+                        "-i", frameImagePath + "%03d.png",
+                        "-pix_fmt", "yuv420p",
+                        "-vcodec", "libx264",
+                        "-crf", Integer.toString(commonArg.crf),
+                        "-profile:v", "main",
+                        "-level", "4.0",
+                        "-bf", "0",
+                        "-bufsize", "2000k",
+                        "-y", videoPath + TEMP_VIDEO_FILE};
+            } else {
+                cmd = new String[]{commonArg.ffmpegCmd, "-r", String.valueOf(commonArg.fps),
+                        "-i", frameImagePath + "%03d.png",
+                        "-pix_fmt", "yuv420p",
+                        "-vcodec", "libx264",
+                        "-b:v", commonArg.bitrate + "k",
+                        "-profile:v", "main",
+                        "-level", "4.0",
+                        "-bf", "0",
+                        "-bufsize", "2000k",
+                        "-y", videoPath + TEMP_VIDEO_FILE};
+            }
+
         }
 
-        TLog.i(TAG, "run createMp4");
-        int result = ProcessUtil.run(cmd);
-        TLog.i(TAG, "createMp4 result=" + (result == 0? "success" : "fail"));
-        return result == 0;
+        return cmd;
     }
 
     /**

+ 6 - 0
Android/PlayerProj/animtool/src/main/java/com/tencent/qgame/playerproj/animtool/CommonArg.java

@@ -33,8 +33,12 @@ public class CommonArg {
 
     public float scale = 0.5f; // alpha 区域缩放大小
 
+    public boolean enableCrf = false; // 是否开启可变码率
+
     public int bitrate = 2000; // 码率
 
+    public int crf = 29; // 0(无损) - 50(最大压缩)
+
     /**
      * 自动填充参数配置
      */
@@ -78,7 +82,9 @@ public class CommonArg {
                 ", mp4editCmd='" + mp4editCmd + '\'' +
                 ", enableH265=" + enableH265 +
                 ", fps=" + fps +
+                ", enableCrf=" + enableCrf +
                 ", bitrate=" + bitrate +
+                ", crf=" + crf +
                 ", scale=" + scale +
                 ", inputPath='" + inputPath + '\'' +
                 ", needAudio=" + needAudio + '\'' +