Closed j4587698 closed 1 year ago
可以,目前在做其它项目,我稍后会根据你的需求写更多的示例。 确认一下,你想得到byte[],你希望这个byte[]是什么格式有哪些具体的期望?下面是一些可能的选项:
如果你想自己探索,那么这是一些提示:其实在Frame这个类中,基本就是YUV420P的数据了,对于你的需求只需要再调用Swscale即可。
目前找到的方法是这样:
using var io = FormatContext.OpenInputIO(IOContext.ReadStream(File.OpenRead("D://VID_20230502_102402.mp4")));
io.LoadStreamInfo();
var videoStream = io.GetVideoStream();
using CodecContext cc = new(Codec.FindDecoderById(videoStream.Codecpar!.CodecId));
cc.FillParameters(videoStream.Codecpar);
cc.Open();
foreach (var frame in io.ReadPackets(videoStream.Index).DecodePackets(cc))
{
using VideoFrameConverter sws = new();
using Frame dest = Frame.CreateVideo(videoStream.Codecpar.Width, videoStream.Codecpar.Height, AVPixelFormat.Rgb24);
sws.ConvertFrame(frame, dest);
var bytes = dest.ToImageBuffer();
return;
}
不知道有更简单办法吗?
没有更简单的办法,如果有,也是我包装一个函数然后代码写得和你的差不多
没有更简单的办法,如果有,也是我包装一个函数然后代码写得和你的差不多
是哪个函数丫?
目前的例子都是转换视频,有没有提取图片的例子?快速提取一帧转换为byte[],再通过其他工具转成其他格式?