代码之家  ›  专栏  ›  技术社区  ›  Katy Colins

使用ffmpeg android的Concat视频文件

  •  2
  • Katy Colins  · 技术社区  · 8 年前

    我在用 ffmpeg-android 要压缩两个视频文件,但压缩时间太长,我猜是因为使用了 "-filter_complex" 但这是我在网上找到的唯一命令,请大家简化一下下面的命令好吗?我只想看两个视频文件 camera2 api,无需任何修改。

     String command[] = new String[]{
                            "-y",
                            "-i", firstPath,
                            "-i", secondPath,
                            "-strict",
                            "experimental",
                            "-filter_complex",
                            "[0:v]scale=iw*min(1920/iw\\,1080/ih):ih*min(1920/iw\\,1080/ih)," +
                                    "pad=1920:1080:(1920-iw*min(1920/iw\\,1080/ih))/2:(1080-ih*min(1920/iw\\,1080/ih))/2,setsar=1:1[v0];[1:v] scale=iw*min(1920/iw\\,1080/ih):ih*min(1920/iw\\,1080/ih)," +
                                    "pad=1920:1080:(1920-iw*min(1920/iw\\,1080/ih))/2:(1080-ih*min(1920/iw\\,1080/ih))/2,setsar=1:1[v1];[v0][0:a][v1][1:a] concat=n=2:v=1:a=1",
                            "-ab", "48000", "-ac", "2", "-ar", "22050", "-s", "1920x1080", "-vcodec", "libx264", "-crf", "27", "-q", "4", "-preset", "ultrafast", getVideoFilePath(getActivity())};
                    commandFFMPEG(command);
    
    
     private void commandFFMPEG(String command[]) {
            FFmpeg ffmpeg = FFmpeg.getInstance(getActivity());
            try {
                ffmpeg.execute(command, new ExecuteBinaryResponseHandler() {
    
                    @Override
                    public void onStart() {
                        startTime = System.currentTimeMillis();
                    }
    
                    @Override
                    public void onProgress(String message) {
    
                    }
    
                    @Override
                    public void onFailure(String message) {
    
                    }
    
                    @Override
                    public void onSuccess(String message) {
                        long endTime = System.currentTimeMillis();
                        long result = endTime - startTime;
                        Toast.makeText(getActivity(), "Videos are merged", Toast.LENGTH_SHORT).show();
                    }
    
                    @Override
                    public void onFinish() {
    
                    }
                });
            } catch (FFmpegCommandAlreadyRunningException e) {
                // Handle if FFmpeg is already running
            }
        }
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   H.Taras    8 年前

    Idk将帮助您,但当我想用ffmpeg录制视频时,我使用了以下命令:

    StringBuilder builder = new StringBuilder();
    builder.append("-f ");
    builder.append("concat ");
    builder.append("-safe 0 ");
    builder.append("-i ");
    final String tempFile = getTextFile().getAbsolutePath();//it is text file with video files paths
    builder.append(tempFile);
    builder.append(" ");
    builder.append("-c ");
    builder.append("copy ");
    builder.append(saveFile);// saveFile - it is your output file
    

    无论如何,总持续时间为20秒的连接视频需要约20秒的处理时间。你可以看看 here ,我写它是为了连接几个视频,但代码质量很糟糕,我不知道,你能理解吗。 希望它能帮助你)

        2
  •  0
  •   DILSHAD AHMAD    5 年前

    String cmd[]=new String[]{“-y”、“-i”、“vid.mp4”、“i”、“vid2.mp4”、“-preset”、“ultrafast”、“-filter_complex”、“[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1[v][a]、“-map”、[v]、“-map”、[a]、[a]、“/output.mp4”};

    • 这对我有用!
    • 使用的媒体格式:mp4
    • 两个视频大小相同-320x240(必选)

    使用ffmpeg-lib:com。writingminds:FFmpegAndroid:0.3.2