Windows應用開發有很多場景需要動態獲取控制項顯示的圖像,即控制項轉圖片,用於其它界面的顯示、傳輸圖片數據流、保存為本地圖片等用途。 下麵分別介紹下一些實現方式以及主要使用場景 RenderTargetBitmap 控制項轉圖片BitmapImage/BitmapSource,在WPF中可以使用Ren ...
簡要說明需求:你有一個網路視頻資源(http地址)或者上傳的視頻文件,怎麼將視頻資源的某一幀的畫面生成圖片對象保存呢?
要點:
1. 首先你需要將視頻資源保存到你的伺服器某個指定目錄里;
2. 使用.net core里的包安裝核心處理包:Xabe.FFmpeg,依賴包:Xabe.FFmpeg.Downloader可以選擇性安裝(依賴包主要解決處理包的執行環境)
核心包官網:Docs | Xabe.FFmpeg
3. 根據包示例編寫核心代碼:
using Microsoft.AspNetCore.Mvc; using Xabe.FFmpeg; namespace WebApplication1.Controllers { public class HomeController : Controller { private readonly ILogger<HomeController> logger; private readonly IHostingEnvironment hostingEnvironment; public HomeController( ILogger<HomeController> logger, IHostingEnvironment hostingEnvironment) { this.logger = logger; this.hostingEnvironment = hostingEnvironment; } public async Task<IActionResult> Index() { //設置windows環境下依賴包的目錄(依賴包核心文件:ffmpeg.exe,ffplay.exe,ffprobe.exe) FFmpeg.SetExecutablesPath(this.hostingEnvironment.ContentRootPath); /* 如果你是在windows里實驗,且你的項目里沒有依賴包核心文件,則放開下行代碼 # 添加視頻處理核心文件 await FFmpegDownloader.GetLatestVersion(FFmpegVersion.Official); */ /* 如果你是在Docker環境里運行,請再Dockerfile里添加下行代碼 # 添加視頻處理核心文件 RUN apt-get install - y ffmpeg */ // 如果你是在linux里運行,直接使用命令安裝:apt-get update && apt-get install - y ffmpeg //視頻文件路徑 string videoPath = $@"{this.hostingEnvironment.ContentRootPath}\normal video.mp4"; //讀取視頻數據 IMediaInfo info = await FFmpeg.GetMediaInfo(videoPath).ConfigureAwait(false); IVideoStream? videoStream = info.VideoStreams.First()?.SetCodec(VideoCodec.png); //生成圖片 string videoPreviewImagePath = $"output/images/c.png"; IConversionResult conversionResult = await FFmpeg.Conversions.New() .AddStream(videoStream) .ExtractNthFrame(1, (x) => videoPreviewImagePath) .Start(); Console.WriteLine("視頻第一幀圖片已提取到目錄:" + videoPreviewImagePath); return View(); } } }
*感謝您的閱讀。喜歡的、有用的就請大哥大嫂們高抬貴手“推薦一下”吧!你的精神 支持是博主強大的寫作動力。歡迎轉載!
*博主的文章是自己平時開發總結的經驗,由於博主的水平不高,不足和錯誤之處在所難免,希望大家能夠批評指出。
*我的博客: http://www.cnblogs.com/lxhbky/