5

我正在编写必须将图像放在视频上方并保存视频的应用程序。

在一般应用程序打开视频文件后,用户选择具有透明背景的图像并将该图像放在视频上方,在用户按下保存按钮后,他会得到新视频,但视频上方已经有图像。

你能给我提供信息或提示如何做到这一点。

4

2 回答 2

9

因此,根据您的问题,您正在寻找一种视频编辑器来完成任务。

我认为这是您的情况:

** 您的应用程序中有一个视频

** 打开一个位图资源(来自某个地方的图像文件)

** 将此位图叠加在电影(视频)底部的所有背景帧上

** 将视频保存在外部存储中

对于这个 ffmpeg 确实支持覆盖功能或Android MediaCodec 的东西FFMPEG有各种过滤器,其中之一是覆盖过滤器。我的理解是您想在视频上叠加图像(即 png),ffmpeg 肯定是完成这项工作的有用框架。您可以设置输出格式,您可以设置要过度播放的图像的坐标。

例如:

ffmpeg -i input.avi -i logo.png -filter_complex 'overlay=10:main_h-overlay_h-10' output.avi

上面的命令在左下角的 input.avi 视频文件上添加了覆盖 logo.png。

有关过滤器的更多信息,请访问以下网站,

https://www.ffmpeg.org/ffmpeg-filters.html#overlay-1

这是GitHub链接

FFmpeg 安卓 Java

ffmpeg命令行二进制这个的Android Java包装器

如果这是您的问题的解决方案,您需要与上述命令等效的 C 代码。您还需要查看 ffmpeg 的性能,因为它是一个纯软件框架。

希望我正确理解了您的问题,这会有所帮助。

于 2015-04-29T15:38:10.877 回答
1

假设您的意思是将其作为视图叠加层放置,则可以在您的布局 XML 中轻松完成。

FrameLayout您可以使用或将一个视图放在另一个视图上RelativeLayout

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

  <VideoView  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" />

  <TextView
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="20dip"
    android:layout_gravity="center_horizontal|bottom"

    android:padding="12dip"

    android:background="#AA000000"
    android:textColor="#ffffffff"

    android:text="My customised view" />
</FrameLayout>
于 2015-04-29T15:14:35.810 回答