Android上具有透明度的视频

时间:2014-12-05 15:55:52

标签: android webm vp8

有没有办法让Android播放带透明区域的视频?当我尝试在VideoView中播放包含透明区域的WebM视频时,视图的背景仍为黑色。我希望在透明区域看到父视图的背景,而不是黑色。

到目前为止,我发现的唯一可行的解​​决方案是从视频帧中创建一个可绘制的动画,这不是非常有效的内存。

3 个答案:

答案 0 :(得分:2)

我知道它有点晚了,但也许它可以提供帮助。

我能想到实现这一目标的最佳方法是使用OpenGL ES - 您通过曲面渲染视频,并编写一个小的着色器,删除您想要删除的颜色区域。 你可以在网上找到这个技术的几个例子,也许这个链接可以提供一些kickstart: First steps in creating a chroma key effect using android camera

答案 1 :(得分:1)

我认为这可以解决您的问题 试试这个https://github.com/pavelsemak/alpha-movie

这是演示示例,

<RelativeLayout
                android:id="@+id/mainContent"
                android:layout_width="match_parent"
                android:layout_height="200dp">

                <ImageView
                    android:id="@+id/imageView"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:scaleType="fitXY"
                    android:src="@drawable/bg1" />

                <com.alphamovie.lib.AlphaMovieView
                    android:id="@+id/alpha_video_view"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_centerInParent="true"
                    app:accuracy="0.7"
                    app:alphaColor="#000000"/>

            </RelativeLayout>

答案 2 :(得分:0)

除了 Krishna 的回答之外,我还创建了一个 alpha 电影的分支,它播放透明视频,每个帧中单独包含 alpha 数据。

这意味着您可以将透明的 webm 视频转换为普通的 mp4,以便与 AlphaMovieView 一起使用。与色度键方法相反,它产生准确的透明度,允许部分透明并且不依赖于您必须手动设置 alpha 颜色。但是,您需要对透明视频进行预处理。

An example of an "alpha packed" video

  1. 将以下内容添加到您的项目以安装包。来源:https://github.com/nopol10/alpha-movie
    // project's (top level) build.gradle
    repositories {
        // ...
        mavenCentral()
    }

    // module's build.gradle
    dependencies {
        // ...
        implementation 'io.github.nopol10:alpha-movie:1.3.4'
        // ...
    }
  1. 下载ffmpeg。建议使用最新版本。它必须有 libvpx。
  2. ffmpeg -vcodec libvpx -i input_video.webm -vf "split [a], pad=iw*2:ih [b], [a] alphaextract, [b] overlay=w" -x264opts keyint=30 -y output_video.mp4 中运行它。将 input_video.webmoutput_video.mp4 替换为所需的输入文件和输出文件名。
  3. 将输出的 mp4 放在您的 Android 项目的资产文件夹中。
  4. 将此添加到您的布局 xml:
<com.alphamovie.lib.AlphaMovieView
    android:id="@+id/video_player"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    custom:packed="true"
/>
  1. 将此添加到您的活动/片段
alphaMovieView = (AlphaMovieView) findViewById(R.id.video_player);
alphaMovieView.setVideoFromAssets("output_video.mp4");
  1. 结果:screenshot from demo app

此方法的灵感来自 AVProVideo 中的功能。