我用 Accord.Video.FFMPEG
使用 H264 编解码器创建包含 200 个图像的视频。由于某种原因,视频质量很差。它的大小小于 1MB。选择时VideoCodec.Raw
,质量很高,但我对巨大的尺寸不满意。
我做这样的事情
using (var vFWriter = new VideoFileWriter())
{
vFWriter.Open(video_name, 1920, 1080, 24, VideoCodec.H264);
for (int i = 0; i < 200; ++i)
{
var img_name_src = ...
using (Bitmap src_jpg = new Bitmap(img_name_src))
{
vFWriter.WriteVideoFrame(src_jpg);
}
}
vFWriter.Close();
}
当我运行程序时,会出现以下消息:
[swscaler @ 06c36d20] deprecated pixel format used, make sure you did set range correctly
[swscaler @ 06e837a0] deprecated pixel format used, make sure you did set range correctly
[avi @ 06c43980] Using AVStream.codec.time_base as a timebase hint to the muxer is deprecated. Set AVStream.time_base instead.
[avi @ 06c43980] Using AVStream.codec to pass codec parameters to muxers is deprecated, use AVStream.codecpar instead.
我不知道它们是否会影响某些东西。
它看起来像 1 帧:
这是视频中的帧:
如何解决?
C# 中还有其他方法可以从单个帧创建视频吗?
最佳答案
通常,视频质量取决于可以通过此过载更改的比特率:writer.Open(fileName, width, height, frameRate, VideoCodec, BitRate);
在数以百万计的视频中,高细节帧上仍有伪影,但大部分都很好。然而,在数十亿中,伪影完全消失了,但文件大小飞涨,播放速度受到磁盘检索时间的影响。
尝试使用不同的 VideoCodecs、比特率和文件类型(mp4、avi、webm 等)为您的项目找到合适的平衡点。
关于c# - Accord.Video.FFMPEG 创建质量非常低的视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58402508/