如何在视频录制中添加文字?

时间:2013-02-02 09:25:36

标签: android android-intent android-camera android-mediarecorder

我搜索了很多但没有找到任何解决方案。我的问题是如何在录制时向视频添加文字,这样我们就可以在看到视频时获得相同的文字。当我看到捕捉视频时,我想要这样的东西。 enter image description here 目前我正在分时间和视频。所以问题是如何结合它。任何一种帮助将不胜感激。谢谢提前..

2 个答案:

答案 0 :(得分:16)

这是一个非常难以解决的问题,通常使用android来假设您尝试将文本添加到实际视频文件中,而不是仅仅在TextView上显示VideoView。你提到你目前有时间和视频分开,所以我假设你正试图在视频文件中添加文字。

要向视频添加文字,您需要在实际设备上重新编码视频。在Android上重新编码视频非常棘手,主要是因为Android手机上的处理器不同,而且编码与处理器有关。有一个名为GPUImage的开源iOS库允许您这样做,但遗憾的是,这在Android上不可用。

已经有一些努力来编译Android的FFMPEG(理论上会允许发生这种事情),但这涉及到底层C ++代码的一些认真工作,我还没有找到任何实现这一点的应用程序许多设备(check out this video converter,并注意了需要下载不同手机different codecs的方法。对于一个特定的设备,您可能会有更多的运气,但如果您希望在许多设备上轻松分发,那么您可能很难做到这一点。

目前,这个问题没有简单的解决办法。

答案 1 :(得分:0)

我使用 camera2 API。我创建了预览和 ImageReader。我从记录表面得到画布。每一帧都转换成位图放到画布上,然后绘制logo、文字等,

 private val mOnImageAvailableListener = ImageReader.OnImageAvailableListener { reader -> 
val image = reader.acquireNextImage() ?: return@OnImageAvailableListener
val bytes = image.toNV21()//image.convertYUV420888ToNV21()
        val bitmap = Bitmap.createBitmap(image.width, image.height, 
Bitmap.Config.ARGB_8888);
        val bmData: Allocation = Converter.renderScriptNV21ToRGBA888(requireContext(), 
image.width, image.height, bytes)
        bmData.copyTo(bitmap)
        val canvas = recorderSurface!!.lockCanvas(null)
        canvas.drawBitmap(bitmap, 0f, 0f, Paint())
        drawData(canvas)
        recorderSurface!!.unlockCanvasAndPost(canvas)
        bitmap.recycle()
        image.close()
 }