Browse Source

feat: 码率支持设置

hexleo 5 years ago
parent
commit
a2ada11803

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

@@ -287,13 +287,13 @@ public class AnimTool {
      * 创建mp4
      * 创建mp4
      */
      */
     private boolean createMp4(CommonArg commonArg, String videoPath, String frameImagePath) throws Exception {
     private boolean createMp4(CommonArg commonArg, String videoPath, String frameImagePath) throws Exception {
-        String[] cmd = null;
+        String[] cmd;
         if (commonArg.enableH265) {
         if (commonArg.enableH265) {
             cmd = new String[] {commonArg.ffmpegCmd, "-r", String.valueOf(commonArg.fps),
             cmd = new String[] {commonArg.ffmpegCmd, "-r", String.valueOf(commonArg.fps),
                     "-i", frameImagePath + "%03d.png",
                     "-i", frameImagePath + "%03d.png",
                     "-pix_fmt", "yuv420p",
                     "-pix_fmt", "yuv420p",
                     "-vcodec", "libx265",
                     "-vcodec", "libx265",
-                    "-b:v", "2000k",
+                    "-b:v", commonArg.bitrate + "k",
                     "-profile:v", "main",
                     "-profile:v", "main",
                     "-level", "4.0",
                     "-level", "4.0",
                     "-tag:v", "hvc1",
                     "-tag:v", "hvc1",
@@ -304,11 +304,11 @@ public class AnimTool {
                     "-i", frameImagePath + "%03d.png",
                     "-i", frameImagePath + "%03d.png",
                     "-pix_fmt", "yuv420p",
                     "-pix_fmt", "yuv420p",
                     "-vcodec", "libx264",
                     "-vcodec", "libx264",
-                    "-b:v", "3000k",
+                    "-b:v", commonArg.bitrate + "k",
                     "-profile:v", "main",
                     "-profile:v", "main",
                     "-level", "4.0",
                     "-level", "4.0",
                     "-bf", "0",
                     "-bf", "0",
-                    "-bufsize", "3000k",
+                    "-bufsize", "2000k",
                     "-y", videoPath + TEMP_VIDEO_FILE};
                     "-y", videoPath + TEMP_VIDEO_FILE};
         }
         }
 
 

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

@@ -33,6 +33,8 @@ public class CommonArg {
 
 
     public float scale = 0.5f; // alpha 区域缩放大小
     public float scale = 0.5f; // alpha 区域缩放大小
 
 
+    public int bitrate = 2000; // 码率
+
     /**
     /**
      * 自动填充参数配置
      * 自动填充参数配置
      */
      */
@@ -76,6 +78,7 @@ public class CommonArg {
                 ", mp4editCmd='" + mp4editCmd + '\'' +
                 ", mp4editCmd='" + mp4editCmd + '\'' +
                 ", enableH265=" + enableH265 +
                 ", enableH265=" + enableH265 +
                 ", fps=" + fps +
                 ", fps=" + fps +
+                ", bitrate=" + bitrate +
                 ", scale=" + scale +
                 ", scale=" + scale +
                 ", inputPath='" + inputPath + '\'' +
                 ", inputPath='" + inputPath + '\'' +
                 ", needAudio=" + needAudio + '\'' +
                 ", needAudio=" + needAudio + '\'' +

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

@@ -169,6 +169,12 @@ class CommonArgTool {
             return false;
             return false;
         }
         }
 
 
+        // 码率检查
+        if (commonArg.bitrate <= 0) {
+            TLog.e(TAG, "bitrate=" + commonArg.bitrate);
+            return false;
+        }
+
         return true;
         return true;
     }
     }
 
 

+ 27 - 3
Android/PlayerProj/animtool/src/main/java/com/tencent/qgame/playerproj/animtool/ui/ToolUI.java

@@ -58,6 +58,7 @@ public class ToolUI {
     private final JTextArea txtAreaLog = new JTextArea();
     private final JTextArea txtAreaLog = new JTextArea();
     private final JTextField textAudioPath = new JTextField();
     private final JTextField textAudioPath = new JTextField();
     private final JPanel panelAudioPath = new JPanel();
     private final JPanel panelAudioPath = new JPanel();
+    private final JTextField textBitrate = new JTextField();
 
 
     private final JLabel labelOutInfo = new JLabel();
     private final JLabel labelOutInfo = new JLabel();
     private final Dimension labelSize = new Dimension(100, 20);
     private final Dimension labelSize = new Dimension(100, 20);
@@ -103,6 +104,7 @@ public class ToolUI {
             modelFps.setValue(commonArg.fps);
             modelFps.setValue(commonArg.fps);
             textInputPath.setText(commonArg.inputPath);
             textInputPath.setText(commonArg.inputPath);
             textAudioPath.setText(commonArg.audioPath);
             textAudioPath.setText(commonArg.audioPath);
+            textBitrate.setText(String.valueOf(commonArg.bitrate));
             float scale = commonArg.scale;
             float scale = commonArg.scale;
             for (int i=0; i<scaleArray.length ; i++) {
             for (int i=0; i<scaleArray.length ; i++) {
                 if (scaleArray[i] == scale) {
                 if (scaleArray[i] == scale) {
@@ -162,6 +164,11 @@ public class ToolUI {
                 return;
                 return;
             }
             }
         }
         }
+        try {
+            commonArg.bitrate = Integer.parseInt(textBitrate.getText());
+        } catch (NumberFormatException e) {
+            TLog.e(TAG, "bitrate format error " + textBitrate.getText() + e.getMessage());
+        }
 
 
         TLog.i(TAG, commonArg.toString());
         TLog.i(TAG, commonArg.toString());
 
 
@@ -221,6 +228,8 @@ public class ToolUI {
         panel.add(getCodecLayout());
         panel.add(getCodecLayout());
         // fps
         // fps
         panel.add(getFpsLayout());
         panel.add(getFpsLayout());
+        // bitrate
+        panel.add(getBitrateLayout());
         // scale
         // scale
         panel.add(getScaleLayout());
         panel.add(getScaleLayout());
         // path
         // path
@@ -270,6 +279,18 @@ public class ToolUI {
         return panel;
         return panel;
     }
     }
 
 
+    private JPanel getBitrateLayout() {
+        JPanel panel = new JPanel();
+        panel.setLayout(new FlowLayout(FlowLayout.LEFT));
+        JLabel label = new JLabel("bitrate");
+        label.setPreferredSize(labelSize);
+        panel.add(label);
+        textBitrate.setPreferredSize(new Dimension(60, 20));
+        panel.add(textBitrate);
+        panel.add(new JLabel("k (default 2000k)"));
+        return panel;
+    }
+
     private JPanel getScaleLayout() {
     private JPanel getScaleLayout() {
         JPanel panel = new JPanel();
         JPanel panel = new JPanel();
         panel.setLayout(new FlowLayout(FlowLayout.LEFT));
         panel.setLayout(new FlowLayout(FlowLayout.LEFT));
@@ -446,6 +467,7 @@ public class ToolUI {
             String inputPath = props.getProperty("inputPath", "");
             String inputPath = props.getProperty("inputPath", "");
             String scale = props.getProperty("scale", String.valueOf(scaleArray[0]));
             String scale = props.getProperty("scale", String.valueOf(scaleArray[0]));
             String audioPath = props.getProperty("audioPath", "");
             String audioPath = props.getProperty("audioPath", "");
+            String bitrate = props.getProperty("bitrate", String.valueOf(commonArg.bitrate));
 
 
             int v = Integer.parseInt(version);
             int v = Integer.parseInt(version);
             // 版本不符直接返回默认值
             // 版本不符直接返回默认值
@@ -455,6 +477,7 @@ public class ToolUI {
             commonArg.enableH265 = Boolean.TRUE.toString().equals(enableH265);
             commonArg.enableH265 = Boolean.TRUE.toString().equals(enableH265);
             commonArg.inputPath = inputPath;
             commonArg.inputPath = inputPath;
             commonArg.audioPath = audioPath;
             commonArg.audioPath = audioPath;
+            commonArg.bitrate = Integer.parseInt(bitrate);
         } catch (Exception e) {
         } catch (Exception e) {
             TLog.e(TAG, "getProperties error:" + e.getMessage());
             TLog.e(TAG, "getProperties error:" + e.getMessage());
         }
         }
@@ -463,12 +486,13 @@ public class ToolUI {
 
 
 
 
     private void setProperties(CommonArg commonArg) throws IOException {
     private void setProperties(CommonArg commonArg) throws IOException {
-        props.setProperty("version", commonArg.version + "");
+        props.setProperty("version", String.valueOf(commonArg.version));
         props.setProperty("enableH265", commonArg.enableH265? Boolean.TRUE.toString() : Boolean.FALSE.toString());
         props.setProperty("enableH265", commonArg.enableH265? Boolean.TRUE.toString() : Boolean.FALSE.toString());
-        props.setProperty("fps", commonArg.fps + "");
+        props.setProperty("fps", String.valueOf(commonArg.fps));
         props.setProperty("inputPath", commonArg.inputPath == null ? "" : commonArg.inputPath);
         props.setProperty("inputPath", commonArg.inputPath == null ? "" : commonArg.inputPath);
         props.setProperty("audioPath", commonArg.audioPath == null ? "" : commonArg.audioPath);
         props.setProperty("audioPath", commonArg.audioPath == null ? "" : commonArg.audioPath);
-        props.setProperty("scale", commonArg.scale + "");
+        props.setProperty("scale", String.valueOf(commonArg.scale));
+        props.setProperty("bitrate", String.valueOf(commonArg.bitrate));
         props.store(new OutputStreamWriter(new FileOutputStream(PROPERTIES_FILE), StandardCharsets.UTF_8), "");
         props.store(new OutputStreamWriter(new FileOutputStream(PROPERTIES_FILE), StandardCharsets.UTF_8), "");
     }
     }