Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用fr和分辨率操纵的Android视频编码_Android_Opencv_Video_Encoding_Ffmpeg - Fatal编程技术网

使用fr和分辨率操纵的Android视频编码

使用fr和分辨率操纵的Android视频编码,android,opencv,video,encoding,ffmpeg,Android,Opencv,Video,Encoding,Ffmpeg,我希望能够使用Android设备录制视频,并使用我的应用程序将其编码为新的分辨率和帧速率。目的是上传一个小得多的原始视频版本(大小),因为这将是30分钟或更长的视频 到目前为止,我读到有人说FFmpeg是他们的发展方向。然而,文件似乎缺乏 我还考虑过使用http opencv 考虑到我需要操纵视频分辨率和帧速率,你认为哪种工具可以做得更好?还有其他需要考虑的技术吗?< 一个重要的问题是,由于这将是长视频,在android设备中进行编码是否合理(考虑电源、时间等) 提前谢谢 我决定用ffmpeg来

我希望能够使用Android设备录制视频,并使用我的应用程序将其编码为新的分辨率和帧速率。目的是上传一个小得多的原始视频版本(大小),因为这将是30分钟或更长的视频

到目前为止,我读到有人说FFmpeg是他们的发展方向。然而,文件似乎缺乏

我还考虑过使用http opencv

考虑到我需要操纵视频分辨率和帧速率,你认为哪种工具可以做得更好?还有其他需要考虑的技术吗?< 一个重要的问题是,由于这将是长视频,在android设备中进行编码是否合理(考虑电源、时间等)


提前谢谢

我决定用ffmpeg来处理这个项目。经过大量的研究和试验,我无法为库构建ffmpeg(使用Ubuntu14.04 LTS)

然而,我使用了这个优秀的库 我刚刚创建了一个项目,并添加了该库,它就像一个魅力。无需构建自己的文件,也无需使用Android NDK。当然,如果您想要自定义库,您仍然需要自己构建库。但它有我需要的一切

以下是我如何降低视频分辨率和更改帧速率的示例:

                    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // input source
            final Clip clip_in = new Clip("/storage/emulated/0/Developer/test.mp4"); 

            Activity activity = (Activity) MainActivity.this;
            File fileTmp = activity.getCacheDir(); 
            File fileAppRoot = new File(activity.getApplicationInfo().dataDir);

            final Clip clip_out = new Clip("/storage/emulated/0/Developer/result2.mp4");
            //put flags in clip
            clip_out.videoFps = "30";
            clip_out.width = 480;
            clip_out.height = 320;
            clip_out.videoCodec = "libx264";
            clip_out.audioCodec = "copy";

            try {
                FfmpegController fc = new FfmpegController(fileTmp, fileAppRoot);
                fc.processVideo(clip_in, clip_out, false, new ShellUtils.ShellCallback() {

                    @Override
                    public void shellOut(String shellLine) {
                        System.out.println("MIX> " + shellLine);
                    }

                    @Override
                    public void processComplete(int exitValue) {

                        if (exitValue != 0) {
                            System.err.println("concat non-zero exit: " + exitValue);
                            Log.d("ffmpeg","Compilation error. FFmpeg failed");
                            Toast.makeText(MainActivity.this, "result: ffmpeg failed", Toast.LENGTH_LONG).show();
                        } else {
                            if(new File( "/storage/emulated/0/Developer/result2.mp4").exists()) {
                                Log.d("ffmpeg","Success file:"+ "/storage/emulated/0/Developer/result2.mp4");
                            }
                        }
                    }
                });
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // automated try and catch
            setContentView(R.layout.activity_main);
        }
    }
函数
processVideo
生成类似于
ffmpeg-i输入-s 480X320-r 30-vcodec libx264-acodec复制输出的命令


这是一个非常简单的示例,但它输出的转换与ffmpeg desktop完成的转换相同。这需要大量的工作!我希望它能帮助任何人。

opencv的android java api既不会读取也不会写入视频文件。而且opencv中根本没有音频(这是一个计算机视觉库…),我没有意识到这一点。我发现了这个问题:但是你仍然需要Android的ffmpeg二进制文件,对吗?@user2162550我唯一需要的依赖是库。但是,正如我提到的,您正在使用库的设置。这是我对这个图书馆的实验。它有缺陷,但它让我在真实的设备上测试它的性能。嗨@apSTRK我怎样才能在windows上编译这个库?提前谢谢