首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在安卓系统中,如何使用VidEffects的滤镜渲染视频

在安卓系统中,如何使用VidEffects的滤镜渲染视频
EN

Stack Overflow用户
提问于 2018-07-04 16:34:45
回答 1查看 2K关注 0票数 0

我可以使用VidEffects (https://github.com/krazykira/VidEffects)在我的应用程序中成功地对录制的视频应用滤镜。问题是这样的插件不能渲染过滤过的视频,不管怎么说,我正在尝试使用这个类来应用永久的视频效果:

代码语言:javascript
复制
public class VideoProcessing extends AsyncTask {
    private final File myDirectory;
    private FFmpegFrameGrabber VIDEO_GRABBER;
    private FFmpegFrameRecorder videoRecorder;
    File file;
    int totalLength;
    private Context mContext;
    private FFmpegFrameFilter filter;

    VideoProcessing(Context context, String path) {
        mContext = context;
        file = new File(path);
        VIDEO_GRABBER = new FFmpegFrameGrabber(file);
        myDirectory = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/_Pikky-Edited-Video/");
        Log.i(Configurations.TAG, "VIDEO PROCESSING PATH: " + myDirectory);

        if (!myDirectory.exists()) { myDirectory.mkdirs(); }
    }


    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected Object doInBackground(Object[] params) {
        Log.i(Configurations.TAG, "DO IN BACKGROUND: " + params);
        Frame tempVideoFrame;
        try {
            VIDEO_GRABBER.start();
            initVideoRecorder(myDirectory + "/video" + System.currentTimeMillis() + ".mp4");
            filter.start();
            while (VIDEO_GRABBER.grab() != null) {
                tempVideoFrame = VIDEO_GRABBER.grabImage();
                if (tempVideoFrame != null) {
                    filter.push(tempVideoFrame);
                    tempVideoFrame = filter.pull();
                    videoRecorder.record(tempVideoFrame);
                }
            }
            filter.stop();
            videoRecorder.stop();
            videoRecorder.release();
            VIDEO_GRABBER.stop();
            VIDEO_GRABBER.release();

            Log.i(Configurations.TAG, "VIDEO GRABBER STOP");

        } catch (FrameGrabber.Exception | FrameRecorder.Exception | FrameFilter.Exception e) { e.printStackTrace(); }
        return null;
    }


    @Override
    protected void onPostExecute(Object o) {
        super.onPostExecute(o);
        Log.i(Configurations.TAG, "ON POST EXECUTED: " + o);
    }


    private void initVideoRecorder(String path) {
        try {
            // FFmpeg effect/filter that will be applied
            filter = new FFmpegFrameFilter("colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131", VIDEO_GRABBER.getImageWidth(), VIDEO_GRABBER.getImageHeight());
            videoRecorder = FFmpegFrameRecorder.createDefault(path, VIDEO_GRABBER.getImageWidth(), VIDEO_GRABBER.getImageHeight());
            videoRecorder.start();
            Log.i(Configurations.TAG, "VIDEO PROCESSING - VIDEO RECORDER START");

        } catch (FrameRecorder.Exception e) { e.printStackTrace(); }
    }
}

在我的EditVideo活动中的切换用例中调用此类,如下所示-其中surfaceView是自定义的GLSurfaceView

代码语言:javascript
复制
 case 2: surfaceView.init(mediaPlayer, new InvertColorsEffect());
                            new VideoProcessing(EditVideo.this, Configurations.videoToShareURL);
                        break;

无论如何,似乎doInBackground函数没有被调用,因为应用程序只在我的图片视频目录(_Pikky Edited-)中创建自定义文件夹,打印其在Logcat中的路径-参见Log.i(Configurations.TAG, "VIDEO PROCESSING PATH: " + myDirectory);,就这样,视频预览继续在我的Activity中播放-这是因为我已经将我的MediaPlayer的循环设置为true -但是我的VideoProcessing类的其他函数也没有被调用,initVideoRecorder()

这是我的build.gradle,所有必需的依赖项都已下载:

代码语言:javascript
复制
    implementation 'com.writingminds:FFmpegAndroid:0.3.2'
    implementation group: 'org.bytedeco', name: 'javacv', version: '1.1'
    implementation group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.0.0-1.1', classifier: 'android-arm'
    implementation group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.8.1-1.1', classifier: 'android-arm'

我也是开放的选择解决方案,以渲染与过滤器的视频。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51169245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档