.Net调用ffmpeg对视频截图

2019/10/27, .Net c#代码片段

摘要:借助ffmpeg对视频/图片截图、生成缩略图,使用命令行调用ffmpeg工具,支持Linux和Windows

网上很多版本都是需要等待4s的做法,这里不需要等待固定4s

添加引用对系统判断:

using System.Runtime.InteropServices;
/// <summary>
/// 借助ffmpeg生成缩略图
/// </summary>
/// <param name="originalFilePath">源文件</param>
public void GenerateThumbnail(string originalFilePath)
{
    try
    {
        //判断系统类型
        //如果是windows,直接使用ffmpeg.exe
        //如果是linux,则使用安装的ffmpeg(需要提前安装)
        /*
          Linux工具调用:ffmpeg -i 333.jpg -q:v 31 -frames:v 1 -y image.jpg
          windows:  ffmpeg.exe -i 333.jpg -q:v 31 -frames:v 1 -y image.jpg

              -i 333.jpg 是输入文件
              -q:v 31 是质量,值区间是2-31
              -frames:v 1 是提取帧必要参数
              -y 是遇到同名文件则覆盖
              image.jpg 输出文件名
              还可以加 -s 160*100 表示输出宽高比为160*100
         */
        string outputFilePath = "image.jpg";//输出文件
        string cmdPath = string.Empty;//ffmpeg工具对象
        string cmdParams = $" -i {originalFilePath} -q:v 31 -frames:v 1 -y {outputFilePath} ";//命令参数
        if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
        {
            cmdPath = "ffmpeg.exe";//根据实际的ffmpeg.exe文件路径来
        }
        else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
        {
            cmdPath = "ffmpeg";//安装ffmpeg工具
        }
        else
        {
            throw new Exception("当前操作系统不支持!");
        }

        using (System.Diagnostics.Process ffmpegProcess = new System.Diagnostics.Process())
        {
            StreamReader errorReader;  // StringWriter to hold output from ffmpeg
            // execute the process without opening a shell
            ffmpegProcess.StartInfo.UseShellExecute = false;
            //ffmpegProcess.StartInfo.ErrorDialog = false;
            ffmpegProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            // redirect StandardError so we can parse it
            ffmpegProcess.StartInfo.RedirectStandardError = true;
            // set the file name of our process, including the full path
            // (as well as quotes, as if you were calling it from the command-line)
            ffmpegProcess.StartInfo.FileName = cmdPath;

            // set the command-line arguments of our process, including full paths of any files
            // (as well as quotes, as if you were passing these arguments on the command-line)
            ffmpegProcess.StartInfo.Arguments = cmdParams;

            ffmpegProcess.Start();// start the process  

            // now that the process is started, we can redirect output to the StreamReader we defined
            errorReader = ffmpegProcess.StandardError;

            ffmpegProcess.WaitForExit();// wait until ffmpeg comes back  

            //result = errorreader.ReadToEnd();
        }
    }
    catch (Exception ex)
    {
        throw new Exception("生成缩略图出错!", ex);
    }
}

原文地址:https://www.cnblogs.com/kasnti/p/11748278.html

时间: 2024-10-06 16:57:05

.Net调用ffmpeg对视频截图的相关文章

使用ffmpeg 对视频截图,和视频转换格式

//执行CMD命令方法 public static void CmdProcess(string command)//调用CMD        {            //实例化一个进程类            Process process = new Process();            process.StartInfo.FileName = "cmd.exe"; //将cmd的标准输入和输出全部重定向到.NET的程序中            process.StartI

使用ffmpeg进行视频截图

1.从ffmpeg的Windows Build网站(https://ffmpeg.zeranoe.com/builds/)下载ffmpeg. 2.下载后解压压缩包,得到如下左图的文件.然后打开bin文件夹,可以看到3个.exe文件.     -------->>>>>>      3.打开命令行窗口,使用cd命令跳转到这个bin文件目录下,主要就是要跳转到包含ffmpeg.exe的目录里. (注:另一种方法是将该bin文件夹目录(如我的是C:\Users\xiejiso

asp.net实现调用ffmpeg实现视频格式的转换

视频格式转换的函数 //视频转换 public void VideoConvertFlv(string FromName, string ExportName) { string ffmpeg = HttpContext.Current.Server.MapPath("~/UploadFiles/FLV/ffmpeg.exe"); FromName = HttpContext.Current.Server.MapPath(FromName); ExportName = HttpCont

bash shell,调用ffmpeg定期截图

#!/bin/bash #获取当前目录中所有m3u8文件,并 var=$(ls |grep '.m3u8'|cut -d '.' -f1) #死循环 while [ 1 = 1 ] do #循环每个文件 for stream in $var do #获取当前最新视频文件 ts=$(ls -t|grep "$stream") for file in $ts do #存储M3U8文件文件名作为图片文件名,截图为220*120,截取第一帧,存储在当前目录的screen文件夹 img=$(ls

ASP.NET下调用ffmpeg与mencoder实现视频转换截屏

最近要做一个视频播放的系统,用到了ffmpeg和mencoder两个工具,查了一些资料,发现这方面的资料还挺多的,但是就是乱了一点,我自己从头整理了一下,和大家分享一下: 1.ffmpeg实现视频(avi,wmv等格式)转换为flv格式: /// <summary> /// 转换视频为flv /// </summary> /// <param name="fileName">上传视频文件的路径(原文件)</param> /// <p

windows下使用ffmpeg进行视频转换和截图。

author:fanfq(xiaoban) Email:fangqing.fan#gmail.comlink:http://fanfq.iteye.com/admin/blogs/655569 changelog: 有很多朋友发邮件问我关于ffmpeg视频转码的相关问题,我也尝试了帮助他们去解决这些问题,由于个人精力有限就blog上总结一下大家所遇到的一些问题. 以下代码只要是使用的我的包是肯定没有问题的,但是至限于*->flv,因为不同格式的视频转码所对应的参数也是不一样的,想要达到效果教好的

Java Web 中使用ffmpeg实现视频转码、视频截图

转载自:[http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html] 视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能.视频格式转换.视频抓图.给视频加水印等. ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可

indows下PHP通过ffmpeg给上传的视频截图详解

windows下PHP通过ffmpeg给上传的视频截图详解,php_ffmpeg.dll安装下载,找了很久php_ffmpeg.dll的下载地址和应用,发现有用的资源很少,现在问题解决了,贴出来跟大家分享一下: 首先要安装PHP的ffmpeg扩展,我们需要php_ffmpeg.dll文件和一些其他的辅助文件,        这里整理了一下提供给大家: ffmpeg-php-win32-all.rar: 解压后你将得到5个文件,将avcodec-51.dll, avformat-51.dll, a

史林枫:C#.NET利用ffmpeg操作视频实战(格式转换,加水印 一步到位)

ffmpeg.exe是大名鼎鼎的视频处理软件,以命令行参数形式运行.网上也有很多关于ffmpeg的资料介绍.但是在用C#做实际开发时,却遇到了几个问题及注意事项,比如如何无损处理视频?如何在转换格式的同时添加水印,以提升处理效率?,ffmpeg的版本应该选择什么版本?.今天史林峰将用实战的方式来探索C#操作ffmpeg的奥秘. 关于ffmpeg的使用及其参数命令,这里就不做过多介绍了.主要以项目实战中为主. 因工作需要,笔者手头有近300部短视频需要处理,在网上找了不少工具,虽然能用,但是用起来