Как добавить текст на запись видео?
Я ищу много, но не нахожу никакого решения. У меня вопрос, как добавить текст к видео во время записи, чтобы мы могли получить тот же текст, когда мы видим видео. Я хочу что-то подобное, когда вижу видео захвата.В настоящее время я получаю время и видео отдельно. Так что вопрос в том, как это совместить. Любая помощь будет оценена. Спасибо заранее.
2 ответа
Это довольно сложная проблема, которую обычно можно решить с помощью Android, если вы пытаетесь добавить текст в видеофайл, а не просто отображать TextView
через VideoView
, Вы упоминаете, что у вас есть время и видео отдельно, поэтому я предполагаю, что вы пытаетесь добавить текст в сам видеофайл.
Чтобы добавить текст к видео, вам необходимо перекодировать видео на фактическое устройство. Перекодирование видео на Android сложно, в первую очередь из-за разных процессоров на телефонах Android, и это кодирование зависит от процессора. Существует открытая библиотека iOS под названием GPUImage
это позволяет вам сделать это, но, к сожалению, это не доступно на Android.
Были предприняты некоторые усилия для компиляции FFMPEG для Android (что теоретически позволило бы такое происходить), но это требует серьезной работы с базовым кодом C++, и я не нашел ни одного приложения, которое реализует это просто на многих устройствах ( проверьте этот видео конвертер и обратите внимание, как для разных телефонов необходимо загружать разные кодеки). Для одного конкретного устройства вам может повезти больше, но если вы ищете легкое распределение по многим устройствам, вам может быть трудно это сделать.
В настоящее время нет простого решения этой проблемы.
Я использую camera2 API. Создаю превью и ImageReader. Я получаю холст от записывающей поверхности. Каждый кадр преобразуется в растровое изображение и помещается на холст, затем рисуется логотип, текст и т. Д.
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()
}