我正在编写应用程序,必须将图像放在视频上方并保存视频。
在一般应用程序打开视频文件后,用户选择具有透明背景的图像并将该图像放在视频上方,用户按下保存按钮后,他会获得新视频但已经在视频上方显示图像。
您能否向我提供信息或提示如何做到这一点。
答案 0 :(得分:5)
因此,根据您的问题,您正在寻找一种视频编辑器来实现任务的解决方案..
我认为这是你的情景:
**您的应用中有视频
**打开位图资源(某些位置的图像文件)
**在背景中所有帧上的电影(视频)底部覆盖此位图
**将视频保存在外部存储空间
对于此ffmpeg确实支持覆盖功能或Android MediaCodec stuff。 FFMPEG 有各种过滤器,其中一个是叠加过滤器。我所理解的是你想要在视频上叠加一个图像(即png),ffmpeg肯定是一个有用的框架来完成这项工作。您可以设置输出格式,您可以设置要过度显示的图像的坐标。
E.g:
ffmpeg -i input.avi -i logo.png -filter_complex 'overlay=10:main_h-overlay_h-10' output.avi
上面的命令在左下角的input.avi视频文件中添加了overlays logo.png。
有关过滤器的更多信息,请访问以下网站
https://www.ffmpeg.org/ffmpeg-filters.html#overlay-1
这是GitHub链接
Android Java wrapper around ffmpeg command line binary或this
如果这是您问题的解决方案,则需要与上述命令等效的C代码。您还需要查看ffmpeg的性能,因为它是一个纯软件框架。
希望我能正确理解你的问题,这会有所帮助。
答案 1 :(得分: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>