android代码并排合并两个视频并使其成为一个视频(只想要一个音频)

Posted

技术标签:

【中文标题】android代码并排合并两个视频并使其成为一个视频(只想要一个音频)【英文标题】:android code to merge two videos side by side and make it as one video(want only one audio) 【发布时间】:2015-09-29 08:21:21 【问题描述】:

任何人都可以帮助我! 我有两个视频。 我想合并为一个视频(并排),我需要并排显示,而且我不想合并两个音频。

我只想要一个音频。所以现在我想要视频合并代码的示例代码或参考

【问题讨论】:

您是否考虑过单独控制视频的音量,并让一个静音? 是个好主意。你能给出合并部分的示例代码吗@dbillz 【参考方案1】:

我没有足够的声誉来发表评论,所以我写这个作为答案。

按照 dbilz 的建议,将视频静音是个好主意。

要合并视频,请使用 ffmpeg。如果您要连接的两个文件都使用相似的编码,请尝试mp4parser

更多信息请查看此问题merging two or more video files

【讨论】:

感谢您的回答。我会检查并告知结果【参考方案2】:

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) 
           
        

【讨论】:

你能用这个解决方案在android上获得硬件编码吗?几年前我研究了这个问题,ffmpeg 没有对媒体编解码器和编码的硬件支持。速度非常慢。

以上是关于android代码并排合并两个视频并使其成为一个视频(只想要一个音频)的主要内容,如果未能解决你的问题,请参考以下文章

iOS 视频编辑 - 是不是可以使用 iOS 4 AVFoundation 类将两个视频文件合并(并排而不是一个接一个)为一个?

如何将两个音频文件合并为一个并在javascript中合并后播放

Excel - 两个图合二为一(并排)

水平并排显示两个视频并导出为一个视频

获取元素的值并使其成为 XSLT 中属性的值?

Razor 如何创建一个 CheckBox 并使其成为 READONLY?