java-flash 2021-01-27 11:07 采纳率: 75%
浏览 445

Accord.NET如何录制音视频,求指导

我目前只能用Accord.video录制一个mp4视频文件,用Accord.audio录制一个wav音频文件,然后用ffmpeg音视频合成,但是这样会导致音视频不同步,有没有Accord.net录制音视频文件的解决方案,求指导,急急急!

目前处理如下

视频

    private void VideoStart()
        {//开始录制时videoWriter打开MP4文件
            videoSourcePlayer.VideoSource = videoDevice;
            videoWriter = new Accord.Video.FFMPEG.VideoFileWriter();
            videoSourcePlayer.Start();
            videoWriter.Open(VideoPath, 640, 480); //可设置
        }

     private void videoSourcePlayer_NewFrameReceived(object sender, Accord.Video.NewFrameEventArgs args)
        {//录制过程实时写道文件里
            DateTime now = DateTime.Now;
            Graphics g = Graphics.FromImage(args.Frame);
            videoWriter.WriteVideoFrame(args.Frame);
            // paint current time
            SolidBrush brush = new SolidBrush(Color.Red);
            g.DrawString(now.ToString(), this.Font, brush, new PointF(5, 5));
            brush.Dispose();

            g.Dispose();
        }
 

音频

 private void AudioStop()
        {//录制时音频存到一内存中,结束时写道wav文件,这是按照accord的demo来的
            source.SignalToStop();
            source.WaitForStop();
            Stream fileStream = new FileStream(AudioPath, FileMode.OpenOrCreate);
            //VideoPath;
            stream.WriteTo(fileStream);
            fileStream.Close();
            stream.Dispose();
        }

 

ffmpeg音视频合成命令

ffmpeg -i "audio2.wav" -y "audio3.wav"

ffmpeg -i video2.flv -i audio3.wav -vcodec copy -acodec copy out1.flv

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 14:07
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要使用Accord.NET录制视频和音频,您可以使用Accord.AudioAccord.Video模块。以下是如何在C#中实现此功能的步骤:

    首先:准备Accord.NET项目

    确保您的项目已经包含了Accord.AudioAccord.Video包。

    using Accord.Audio;
    using Accord.Video;
    

    使用Accord.Audio录制音频

    首先,创建一个新的类来定义您的音频处理器。在这个例子中,我们将使用ACCORD_AUDIO_SIMPLE_BUFFER_SIZE来控制音频缓冲区大小。

    public class AudioProcessor : IAudioBufferProducer
    {
        public int BufferSize { get; set; } = ACCORD_AUDIO_SIMPLE_BUFFER_SIZE;
    
        public void StartRecording(string path)
        {
            Source = new AudioSource(path);
            Source.SignalToStart();
        }
    
        public void StopRecording()
        {
            Source.WaitForStop();
        }
    }
    

    使用Accord.Video录制视频

    接下来,我们创建一个视频处理器类,用于录制视频。

    public class VideoProcessor : IVideoBufferConsumer
    {
        public void StartRecording(string path)
        {
            Destination = new VideoDestination(path);
            Destination.SignalToStart();
        }
    
        public void StopRecording()
        {
            Destination.WaitForStop();
        }
    }
    

    使用Accord.NET合成音频和视频

    最后一步是将这两个处理器组合在一起,以实现音频和视频的实时同步录制。

    private void Main()
    {
        var processor = new AudioProcessor();
        processor.StartRecording("audio.mp3");
    
        processor = new VideoProcessor();
        processor.StartRecording("video.flv");
    
        while (true) 
        {
            // 等待所有进程完成
            processor.StopRecording();
            processor = null;
        }
    }
    

    总结

    以上示例展示了如何在Accord.NET中录制音频和视频,并通过简单的循环等待所有任务完成。您可以在其中添加更多的逻辑以处理音频和视频的不同部分或根据需要调整这些参数。

    评论

报告相同问题?