17

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

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

4

3 回答 3

4

我认为这将解决你的问题试试这个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>
于 2018-06-29T05:43:43.243 回答
3

我能想到的最好的方法是使用 OpenGL ES——你通过一个表面渲染视频,然后编写一个小的着色器来移除你想要移除的颜色区域。你可以在网上找到这个技术的几个例子,也许这个链接可以提供一些启动: First steps in create a chroma key effect using android camera

于 2015-05-06T06:20:49.120 回答
1

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

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

一个例子

  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. 结果:演示应用程序的屏幕截图

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

于 2021-05-09T15:04:31.670 回答