Skip to content

Video renderer based on FFmpeg. 基于 FFmpeg 的视频渲染器

License

Notifications You must be signed in to change notification settings

SlimeNull/FFmpegVideoRenderer

Repository files navigation

FFmpegVideoRenderer

基于 FFmpeg 的视频剪辑渲染器. 支持多视频与音频轨道, 音频与视频的过渡. 在媒体上, 理论支持 ffmpeg 能够解码与编码的所有音频视频以及图片格式.


使用

  • 克隆并引用此项目
  • 使用, 调用提供的功能即可

功能

本库主要提供了两个功能, 一是高度封装的视频剪辑, 二是它下面的 MediaSource 封装, 用于从媒体文件中获取帧与采样.

视频剪辑

只需要提供一个 "配置信息", 然后把它传给渲染方法, 就可以完成整个渲染过程了! 下面是一个简单的拼合两个视频前几秒的示例:

// 打开两个素材
using var video1 = File.OpenRead(@"E:\CloudMusic\MV\Goyo.mp4");
using var video2 = File.OpenRead(@"E:\CloudMusic\MV\春めく.mp4");

// 保存位置
using var output = File.Create("output.mp4");

// 声明项目
var project = new Project()
{
    OutputWidth = 800,
    OutputHeight = 600,
    Resources =
    {
        new ProjectResource("1", video1),
        new ProjectResource("2", video2),
    },
    VideoTracks =
    {
        new VideoTrack()
        {
            Children =
            {
                new VideoTrackItem()
                {
                    ResourceId = "1",
                    Offset = TimeSpan.FromSeconds(0),
                    StartTime = TimeSpan.FromSeconds(0),
                    EndTime = TimeSpan.FromSeconds(6),
                },
                new VideoTrackItem()
                {
                    ResourceId = "2",
                    Offset = TimeSpan.FromSeconds(4),
                    StartTime = TimeSpan.FromSeconds(0),
                    EndTime = TimeSpan.FromSeconds(30),
                }
            }
        },
    },
};

// 渲染
VideoRenderer.Render(project, output);

视频源

使用 MediaSource 类, 你可以轻松从媒体文件中获取帧数据或者采样. 下面是个示例, 它会保存 0-9 秒的十张图片到文件中:

using var video1 = File.OpenRead(@"E:\CloudMusic\MV\Goyo.mp4");
using var mediaSource1 = MediaSource.Create(video1);
for (int i = 0; i < 10; i++)
{
    var time = TimeSpan.FromSeconds(i);
    var saveTo = File.Create($"output{i}.png");

    if (mediaSource1.GetVideoFrameBitmap(time) is SKBitmap bitmap)
    {
        bitmap.Encode(saveTo, SKEncodedImageFormat.Png, 0);
    }
}

About

Video renderer based on FFmpeg. 基于 FFmpeg 的视频渲染器

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages