首页 > 其他分享 >ffmpeg截取视频第一帧作为封面

ffmpeg截取视频第一帧作为封面

时间:2022-08-17 16:23:54浏览次数:65  
标签:封面 ffmpeg 截取 fileHtmlDir pc result error root string

/// <summary>
        /// 获取动态缩略图
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public string GetThumbnail11(string path)
        {
          try
            {
                string root = _iHostEnvironment.WebRootPath;

                string ext = Path.GetExtension(path)?.ToLower();

                 string dir = Path.GetDirectoryName(path);
                string name = Path.GetFileNameWithoutExtension(path);
                string fileHtmlDir = dir + "\\" + name + "\\Thumbnail";
              if (!Directory.Exists(root + fileHtmlDir))
                {
                    Directory.CreateDirectory(root + fileHtmlDir);
                }
             if (File.Exists(root + fileHtmlDir + "\\Thumbnail" + ext))
                {
                    return fileHtmlDir + "\\Thumbnail" + ext;
                }
                string type = Util.Common.GetFileType(ext);
                if (type == "3")
                {
                    return CutOutLocalvideoImages111(path, root + fileHtmlDir + "\\Thumbnail.jpg", fileHtmlDir + "\\Thumbnail.jpg");
                }
                return null;
                }
            catch (Exception)
            {

                return null;
            }
}
/// <summary>
        /// 视频获取动态封面
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="savePath"></param>
        /// <returns></returns>
        private string CutOutLocalvideoImages111(string filePath, string savePath, string rePath)
        {
            string result;
           try
            {
                string root = _iHostEnvironment.WebRootPath;
                string ffmpeg = _iHostEnvironment.WebRootPath + "\\ffmpeg.exe";

                string text = root + filePath;
                string text2 = ffmpeg;

                if (!File.Exists(text2) || !File.Exists(text))
                {
                    result = "";
                }
               else
                {


                    string output;
                    string error;
                    int? width=0, height=0;
                    //宽度和高度
                     ExecuteCommand("\""+text2 + "\"" + " -i "  + "\"" + text + "\"", out error);
                    if (string.IsNullOrEmpty(error))
                    {
                        width = null;
                        height = null;
                    }

                    //通过正则表达式获取信息里面的宽度信息
                    Regex regex = new Regex(@"(\d{2,4})x(\d{2,4})", RegexOptions.Compiled);
                     Match m = regex.Match(error);
                    if (m.Success)
                    {
                        width = int.Parse(m.Groups[1].Value);
                        height = int.Parse(m.Groups[2].Value);
                    }
                    string text4 = width.ToString()+ "*"+ height.ToString();
                    ProcessStartInfo processStartInfo = new ProcessStartInfo(text2);
                    processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                     processStartInfo.Arguments = string.Concat(new string[]
                    {
                        " -i ",
                        text,
                        " -y -f image2 -t 20 -s ",
                       text4,
                        " ",
                        savePath
                    });
                    try
                    {
                        Process.Start(processStartInfo);
                    }
                   catch
                    {
                        result = "";
                        return result;
                    }
                  Thread.Sleep(4000);
                    if (File.Exists(savePath))
                    {
                        result = Path.ChangeExtension(rePath, ".jpg");

                    }
                 else
                    {
                        result = "";
                    }
                }
            }
            catch
            {
                result = "";
            }
            return result;
}
 // <summary>
        /// 执行一条command命令
        /// </summary>
        /// <param name="command">需要执行的Command</param>
        /// <param name="output">输出</param>
       /// <param name="error">错误</param>
        public static void ExecuteCommand(string command, out string error)
        {
         try
            {
                //创建一个进程
                Process pc = new Process();
                pc.StartInfo.FileName = command;
                pc.StartInfo.UseShellExecute = false;
                pc.StartInfo.RedirectStandardInput = true;
                pc.StartInfo.RedirectStandardOutput = false;
                pc.StartInfo.RedirectStandardError = true;
                 pc.StartInfo.CreateNoWindow = true;

                //启动进程
                pc.Start();
                //准备读出输出流和错误流
                string outputData = string.Empty;
                string errorData = string.Empty;
                 pc.BeginErrorReadLine();
               pc.ErrorDataReceived += (ss, ee) =>
                {
                    errorData += ee.Data;
                };
             //等待退出
                pc.WaitForExit();

                //关闭进程
                pc.Close();
            //返回流结果
                error = errorData;
           }
            catch (Exception)
            {
                
                error = null;
            }
        }

标签:封面,ffmpeg,截取,fileHtmlDir,pc,result,error,root,string
From: https://www.cnblogs.com/zmldz/p/16595625.html

相关文章

  • 【转】还在到处找图片和封面?是时候了解下这些网站了
    原文:https://juejin.cn/post/7132111156554301471你还在为找不到高清图发愁吗?你还在为文章自定义封面而烦恼吗?别急,了解了以下网站(都是免费的,国外网站为主),你的这些问......
  • Mac 下使用 ffmpeg 制作 gif
    Mac下使用ffmpeg制作gif  。以下是从mp4转为gif的步骤。步骤ffmpeg是著名的视频处理开源软件brewinstallffmpegbrewinstallgifsicle......
  • ffmpeg cuda加速 h264->hevc(h265) 缩小存储空间
    参考的原文链接https://www.cnblogs.com/Hakurei-Reimu-Zh/p/14999269.html1.安装cuda这里我只安装最新版驱动也是可以的没有刻意去安装cuda2.下载编译好的全版本ffmpe......
  • python 中列表、字符串、元组同时截取首位的序列
     001、>>>test1=["a","b","c","d","e","f","g"]##测试列表>>>test1['a','b','c','d','e','f'......
  • 使用ffmpeg
    推荐两个CSDN上的博主:徐福记456雷霄骅 使用ffmpeg需要先下载相关的头文件和库文件,可以选择在官网上下载。建议下载shared版本和dev版本,两个版本都会有include文件,sha......
  • FFmpeg学习:frame的复制和拷贝
    实践中经常遇到frame的复制拷贝,特此记录一下;深拷贝连同数据也被复制一份浅拷贝只拷贝参数,具有相同的数据指针相关apiav_frame_ref()【函数原型】点击查看代码......
  • ffmpeg以RTP协议推送视频
    docker编译环境dockerpullabdulachik/ffmpeg.js:latestdockerrun-it-p8080:8080-v/Users/workspace/Downloads/ffmpeg_wasm:/tmp--privileged=trueabdulachik/......
  • 浏览器运行ffmpeg
    docker编译环境docker镜像dockerpullabdulachik/ffmpeg.js:latestdockerrun-it-p8090:8090-v/Users/workspace/Downloads/ffmpeg_wasm:/tmp--privileged=true......
  • 利用ffmpeg合并音频和视频
    一、当视频文件中没有音频时将audioname音频与videoname视频替换ffmpeg-ivideoname.mp4-imusic.mp3-c:vcopy-c:aaac-strictexperimentaloutputname.mp4二、当......
  • ffmpeg截取视频的片段
    1、执行如下命令:ffmpeg-ss00:00:00-to00:05:23-iimput.mp4-y-fmp4-vcodeccopy-acodeccopy-q:v1output.mp42、参数说明:-ss指定要截取的视频的起始时间。......