Upload any video and convert to .mp4 online in .net

前端 未结 3 1784
予麋鹿
予麋鹿 2020-12-31 10:06

I have a strange requirement. User can upload their video of any format (or a limited format). We have to store them and convert them to .mp4 format so we c

相关标签:
3条回答
  • 2020-12-31 10:15

    You can convert almost any video/audio user files to mp4/mp3 with FFMpeg command line utility. From .NET it can be called using wrapper library like Video Converter for .NET (this one is nice because everything is packed into one DLL):

    (new NReco.VideoConverter.FFMpegConverter()).ConvertMedia(pathToVideoFile, pathToOutputMp4File, Formats.mp4)
    

    Note that video conversion requires significant CPU resources; it's good idea to run it in background.

    0 讨论(0)
  • 2020-12-31 10:26

    Your Answer

    please Replace .flv to .mp4 you will get your answer

    private bool ReturnVideo(string fileName)
        {
            string html = string.Empty;
            //rename if file already exists
    
            int j = 0;
            string AppPath;
            string inputPath;
            string outputPath;
            string imgpath;
            AppPath = Request.PhysicalApplicationPath;
            //Get the application path
            inputPath = AppPath + "OriginalVideo";
            //Path of the original file
            outputPath = AppPath + "ConvertVideo";
            //Path of the converted file
            imgpath = AppPath + "Thumbs";
            //Path of the preview file
            string filepath = Server.MapPath("~/OriginalVideo/" + fileName);
            while (File.Exists(filepath))
            {
                j = j + 1;
                int dotPos = fileName.LastIndexOf(".");
                string namewithoutext = fileName.Substring(0, dotPos);
                string ext = fileName.Substring(dotPos + 1);
                fileName = namewithoutext + j + "." + ext;
                filepath = Server.MapPath("~/OriginalVideo/" + fileName);
            }
            try
            {
                this.fileuploadImageVideo.SaveAs(filepath);
            }
            catch
            {
                return false;
            }
            string outPutFile;
            outPutFile = "~/OriginalVideo/" + fileName;
            int i = this.fileuploadImageVideo.PostedFile.ContentLength;
            System.IO.FileInfo a = new System.IO.FileInfo(Server.MapPath(outPutFile));
            while (a.Exists == false)
            {
    
            }
            long b = a.Length;
            while (i != b)
            {
    
            }
    
    
            string cmd = " -i \"" + inputPath + "\\" + fileName + "\" \"" + outputPath + "\\" + fileName.Remove(fileName.IndexOf(".")) + ".flv" + "\"";
            ConvertNow(cmd);
            string imgargs = " -i \"" + outputPath + "\\" + fileName.Remove(fileName.IndexOf(".")) + ".flv" + "\" -f image2 -ss 1 -vframes 1 -s 280x200 -an \"" + imgpath + "\\" + fileName.Remove(fileName.IndexOf(".")) + ".jpg" + "\"";
            ConvertNow(imgargs);
    
    
            return true;
        }
        private void ConvertNow(string cmd)
        {
            string exepath;
            string AppPath = Request.PhysicalApplicationPath;
            //Get the application path
            exepath = AppPath + "ffmpeg.exe";
            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.StartInfo.FileName = exepath;
            //Path of exe that will be executed, only for "filebuffer" it will be "flvtool2.exe"
            proc.StartInfo.Arguments = cmd;
            //The command which will be executed
            proc.StartInfo.UseShellExecute = false;
            proc.StartInfo.CreateNoWindow = true;
            proc.StartInfo.RedirectStandardOutput = false;
            proc.Start();
    
            while (proc.HasExited == false)
            {
    
            }
        }
        protected void btn_Submit_Click(object sender, EventArgs e)
        {
            ReturnVideo(this.fileuploadImageVideo.FileName.ToString());
        }
    
    0 讨论(0)
  • 2020-12-31 10:35

    I know it's a bit old thread but if I get here other people see this too. You shoudn't use it process info to start ffmpeg. It is a lot to do with it. Xabe.FFmpeg you could do this by running just

    await Conversion.Convert("inputfile.mkv", "file.mp4").Start()
    

    This is one of easiest usage. This library provide fluent API to FFmpeg.

    0 讨论(0)
提交回复
热议问题