系列文章目录
Unity中利用ffmpeg 视频合成
前言
在一个项目中需求是通过unity录制相机画面与麦克风声音,遇到了问题是麦克的声音会在unity再播放一次效果不是很好,于是想到了 录制视频时候不录制背景音,录制好后将录制的视频与背景音乐进行合成输出新的视频。
一、ffmpeg是什么?
FFMPEG堪称自由软件中最完备的一套多媒体支持库,它几乎实现了所有当下常见的数据封装格式、多媒体传输协议以及音视频编解码器,堪称多媒体业界的瑞士军刀。因此,对于从事多媒体技术开发的工程师来说,深入研究FFMPEG成为一门必不可少的工作,可以这样说,FFMPEG之于多媒体开发工程师的重要性正如kernel之于嵌入式系统工程师一般。
二、使用步骤
1.下载ffmpeg
ffmpeg官网
最上面的是源码我选择下载打包好的
2.使用unity脚本调用ffmpeg
using System;
using System.Diagnostics;
using UnityEngine;
public class FFmpegHandle : MonoBehaviour
{
private string videoLocalPath = string.Empty;//视频本地路径
private string audioLocalPath = string.Empty;//音频本地路径
private string handleLocalPath = string.Empty;//处理后的文件路径
void Start()
{
handleLocalPath = Application.streamingAssetsPath + "/2.mp4";
videoLocalPath = Application.streamingAssetsPath + "/1.mp4";
audioLocalPath = Application.streamingAssetsPath + "/1.mp3";
try
{
string ffmpegPath = Application.streamingAssetsPath + "\\ffmpeg\\bin\\ffmpeg.exe";
ProcessStartInfo startInfo = new ProcessStartInfo(ffmpegPath);
startInfo.UseShellExecute = false;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.CreateNoWindow = true; //不显示dos程序窗口
//过程:先将视频中的音频去掉并压缩转码
Process p = new Process();
startInfo.Arguments = " -i " + videoLocalPath + " -i " + audioLocalPath + " -filter_complex \"[1:a]volume=1.0[a1];[0:a][a1]amix=inputs=2:duration=first[a]\" -map 0:v -map \"[a]\" -c:v copy -c:a aac -y " + handleLocalPath;
p.StartInfo = startInfo;
try
{
p.Start();
}
catch (Exception ex)
{
UnityEngine.Debug.LogWarning(string.Format("HandleVideo step1 Error:{0}", ex.Message));
}
finally
{
p.Close();//关闭进程
p.Dispose();//释放资源
print("合成结束");
}
}
catch (Exception ex)
{
UnityEngine.Debug.LogWarning(string.Format("HandleVideo Error:{0}", ex.Message));
}
}
}
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,有朋友有更好的解决办法欢迎交流