我正在编写必须将图像放在视频上方并保存视频的应用程序。
在一般应用程序打开视频文件后,用户选择具有透明背景的图像并将该图像放在视频上方,在用户按下保存按钮后,他会得到新视频,但视频上方已经有图像。
你能给我提供信息或提示如何做到这一点。
我正在编写必须将图像放在视频上方并保存视频的应用程序。
在一般应用程序打开视频文件后,用户选择具有透明背景的图像并将该图像放在视频上方,在用户按下保存按钮后,他会得到新视频,但视频上方已经有图像。
你能给我提供信息或提示如何做到这一点。
因此,根据您的问题,您正在寻找一种视频编辑器来完成任务。
我认为这是您的情况:
** 您的应用程序中有一个视频
** 打开一个位图资源(来自某个地方的图像文件)
** 将此位图叠加在电影(视频)底部的所有背景帧上
** 将视频保存在外部存储中
对于这个 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命令行二进制 或这个的Android Java包装器
如果这是您的问题的解决方案,您需要与上述命令等效的 C 代码。您还需要查看 ffmpeg 的性能,因为它是一个纯软件框架。
希望我正确理解了您的问题,这会有所帮助。
假设您的意思是将其作为视图叠加层放置,则可以在您的布局 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>