Unity多媒体应用开发

系列文章目录

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));

        }
    }
}

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,有朋友有更好的解决办法欢迎交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值