【发布时间】:2015-09-29 08:21:21
【问题描述】:
任何人都可以帮助我! 我有两个视频。 我想合并为一个视频(并排),我需要并排显示,而且我不想合并两个音频。
我只想要一个音频。所以现在我想要视频合并代码的示例代码或参考
【问题讨论】:
-
您是否考虑过单独控制视频的音量,并让一个静音?
-
是个好主意。你能给出合并部分的示例代码吗@dbillz
任何人都可以帮助我! 我有两个视频。 我想合并为一个视频(并排),我需要并排显示,而且我不想合并两个音频。
我只想要一个音频。所以现在我想要视频合并代码的示例代码或参考
【问题讨论】:
我没有足够的声誉来发表评论,所以我写这个作为答案。
按照 dbilz 的建议,将视频静音是个好主意。
要合并视频,请使用 ffmpeg。如果您要连接的两个文件都使用相似的编码,请尝试mp4parser
更多信息请查看此问题merging two or more video files
【讨论】:
Gradle 依赖
implementation "com.writingminds:FFmpegAndroid:0.3.2"
代码
将两个视频并排合并为一个的命令
val cmd : arrayOf("-y", "-i", videoFile!!.path, "-i", videoFileTwo!!.path, "-filter_complex", "hstack", outputFile.path)
注意:
“videoFile”是您的第一个视频路径。
“videoFileTwo”是您的第二个视频路径。
“outputFile”是您的组合视频路径,这是我们的最终输出路径
创建视频的输出路径
fun createVideoPath(context: Context): File {
val timeStamp: String = SimpleDateFormat(Constant.DATE_FORMAT, Locale.getDefault()).format(Date())
val imageFileName: String = "APP_NAME_"+ timeStamp + "_"
val storageDir: File? = context.getExternalFilesDir(Environment.DIRECTORY_MOVIES)
if (storageDir != null) {
if (!storageDir.exists()) storageDir.mkdirs()
}
return File.createTempFile(imageFileName, Constant.VIDEO_FORMAT, storageDir)
}
执行命令的代码
try {
FFmpeg.getInstance(context).execute(cmd, object : ExecuteBinaryResponseHandler() {
override fun onStart() {
}
override fun onProgress(message: String?) {
callback!!.onProgress(message!!)
}
override fun onSuccess(message: String?) {
callback!!.onSuccess(outputFile)
}
override fun onFailure(message: String?) {
if (outputFile.exists()) {
outputFile.delete()
}
callback!!.onFailure(IOException(message))
}
override fun onFinish() {
callback!!.onFinish()
}
})
} catch (e: Exception) {
} catch (e2: FFmpegCommandAlreadyRunningException) {
}
【讨论】: