如何在C#中通过图片生成带转场效果和音频的视频?
适用于C#图片转视频场景的类库推荐
目前有两个成熟的C#类库可以完全覆盖你的需求,封装度高不需要复杂配置,和你写的伪代码逻辑高度匹配:
1. Xabe.FFmpeg
这是目前维护最活跃的FFmpeg封装库,对幻灯片生成、转场、音视频合并场景做了专门的简化封装,所有参数都是强类型,不需要手动拼接FFmpeg命令行,内置十几种常用转场效果,完全适配影院宣传视频的制作需求。
实现你需求的示例代码如下:
// 全局仅需配置一次FFmpeg可执行文件路径,提前下载好FFmpeg二进制文件即可,无需安装 FFmpeg.SetExecutablesPath("你的FFmpeg二进制文件存放目录"); // 初始化幻灯片生成作业,指定输出路径、分辨率、帧率 var conversion = await FFmpeg.Conversions.FromSnippet.CreateSlideshow( outputPath: @"C:\temp\MyAwesomeVideo.mp4", width: 1080, height: 1920, frameRate: 30 ); // 添加图片帧、设置停留时长、转场效果与转场时长 conversion.AddSlideshowFrame(@"C:\temp\frame01.jpg", TimeSpan.FromMilliseconds(2000), Transition.Fade, TimeSpan.FromMilliseconds(500)); conversion.AddSlideshowFrame(@"C:\temp\frame02.jpg", TimeSpan.FromMilliseconds(1000), Transition.Fade, TimeSpan.FromMilliseconds(500)); conversion.AddSlideshowFrame(@"C:\temp\frame03.jpg", TimeSpan.FromMilliseconds(2000)); // 添加背景音乐 conversion.AddStream(@"C:\temp\mymusic.mp3"); // 执行视频生成 await conversion.Start();
2. Accord.Video.FFMPEG
如果你完全不想接触FFmpeg相关配置,也可以使用Accord框架的FFMPEG模块,直接面向视频对象操作,和你写的伪代码逻辑完全一致:
using (var writer = new VideoFileWriter()) { // 打开输出文件,指定分辨率、帧率、编码格式 writer.Open(@"C:\temp\MyAwesomeVideo.mp4", 1080, 1920, 30, VideoCodec.MPEG4); // 按需求的停留时长写入对应帧数的图片,转场效果可通过内置的像素混合计算工具快速实现淡入淡出等效果 // 背景音乐可以配合NAudio库合并到生成的视频文件中,相关实现代码不超过10行 }
场景适配建议
针对影院每周生成宣传视频的使用场景,有两个优化点可以参考:
- 提前将所有海报图片批量缩放到目标分辨率,避免生成视频时出现拉伸或黑边,用
System.Drawing.Common或者ImageSharp都可以快速完成批量处理 - 如果需要生成竖版短视频适配社交媒体平台,直接调整分辨率参数为7201280或者10801920即可,不需要修改其他逻辑
内容的提问来源于stack exchange,提问作者Kjensen
相关产品推荐
相关产品推荐

