采用fr和分辨率 *** 作的Android视频编码

采用fr和分辨率 *** 作的Android视频编码,第1张

概述我希望能够拍摄使用Android设备录制的视频,并使用我的应用将其编码为新的分辨率和帧速率.目的是上传一个小得多的原始视频版本(大小),因为这将是30分钟或更长的视频.到目前为止,我已经读到人们说FFmpeg是他们的出路.但是,文档似乎缺乏.我也考虑过使用httpopencvhttp://opencv.o

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

到目前为止,我已经读到人们说FFmpeg是他们的出路.但是,文档似乎缺乏.

我也考虑过使用http opencv http://opencv.org/platforms/android.html

考虑到我需要 *** 纵视频分辨率和帧速率,您认为哪种工具可以做得更好?还有其他技术需要考虑吗?

一个重要的问题是,因为这将是长视频,在AndroID设备中进行编码是合理的(考虑电源,时间等)

提前致谢!

解决方法:

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

但是,我使用了这个优秀的库https://github.com/guardianproject/android-ffmpeg-java
我刚刚创建了一个项目并添加了该库,它就像一个魅力.无需构建自己的文件或乱用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 input -s 480X320 -r 30 -vcodec libx264 -acodec copy output

这是一个非常简单的例子,但它输出了ffmpeg桌面完成的同类转换.这个代码需要大量的工作!我希望它可以帮助任何人.

总结

以上是内存溢出为你收集整理的采用fr和分辨率 *** 作的Android视频编码全部内容,希望文章能够帮你解决采用fr和分辨率 *** 作的Android视频编码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1115640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存