gpt4 book ai didi

ffmpeg - 如何使用 GPU 使用 ffmpeg.autogen 解码 MP4 文件?

转载 作者:行者123 更新时间:2023-12-04 22:48:02 31 4
gpt4 key购买 nike

如何使用 GPU 解码 MP4 文件?

我使用 FFmpeg.AutoGen 的演示。
对代码有好处: private static unsafe void DecodeAllFramesToImages()
但这是使用CPU解码。
我想要一个使用 GPU 解码的演示。
我怎样才能做到这一点 ?

这是 FFmpeg.AutoGen 演示:

private static unsafe void DecodeAllFramesToImages()
{
// decode all frames from url, please not it might local resorce, e.g. string url = "../../sample_mpeg4.mp4";
var url = "https://rtmp-luzhi.oss-cn-beijing.aliyuncs.com/eryuan2019/%E5%84%BF%E7%AB%A5%E6%89%8B%E8%B6%B3%E5%8F%A3%E7%97%85%E7%9A%84%E9%98%B2%E6%AD%A2%E4%B8%8E%E6%B2%BB%E7%96%97.mp4"; // be advised this file holds 1440 frames
using (var vsd = new VideoStreamDecoder(url))
{
Console.WriteLine($"codec name: {vsd.CodecName}");

var info = vsd.GetContextInfo();
info.ToList().ForEach(x => Console.WriteLine($"{x.Key} = {x.Value}"));

var sourceSize = vsd.FrameSize;
var sourcePixelFormat = vsd.PixelFormat;
var destinationSize = sourceSize;
var destinationPixelFormat = AVPixelFormat.AV_PIX_FMT_BGR24;
using (var vfc = new VideoFrameConverter(sourceSize, sourcePixelFormat, destinationSize, destinationPixelFormat))
{
var frameNumber = 0;
while (vsd.TryDecodeNextFrame(out var frame))
{
var convertedFrame = vfc.Convert(frame);

using (var bitmap = new Bitmap(convertedFrame.width, convertedFrame.height, convertedFrame.linesize[0], PixelFormat.Format24bppRgb, (IntPtr) convertedFrame.data[0]))
bitmap.Save($"frame.{frameNumber:D8}.jpg", ImageFormat.Jpeg);

Console.WriteLine($"frame: {frameNumber}");
frameNumber++;
}
}
}
}

最佳答案

您需要更改 VideoStreamDecoder 类:

首先你需要配置你的AVCodecContext使用您机器的 HWDevice。
像这样的东西:

  AVCodecHWConfig* config = ffmpeg.avcodec_get_hw_config(codec, 0);
ffmpeg.av_hwdevice_ctx_create(&pCodecContext->hw_device_ctx, HWType, null, null, 0);
HWType是您的硬件解码器类型。

然后,当您打开上下文并开始解码帧时,您需要从硬件设备获取解码帧:
ffmpeg.av_hwframe_transfer_data(cpuFrame, pFrame, 0) pFrame - 从硬件硬件解码器接收的帧
cpuFrame - 数据复制到的帧。

更新:

现在以 FFMPEG.AutoGet repository 为例您可以使用一些硬件解码器。

关于ffmpeg - 如何使用 GPU 使用 ffmpeg.autogen 解码 MP4 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57755563/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com