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

31,921

Solution 1

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.

Solution 2

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());
    }

Solution 3

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.

Share:
31,921
Sachin
Author by

Sachin

ASP .Net Technology stack developer with experience of more than 4 years, curious for learning new things...

Updated on July 05, 2022

Comments

  • Sachin
    Sachin almost 2 years

    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 can play that in our site.

    Same requirement also for audio files.

    I have googled but I can't get any proper idea. Any help or suggestions....??

    Thanks in advance

  • haroonxml
    haroonxml over 9 years
    This throws an exception "An exception of type 'System.ComponentModel.Win32Exception' occurred in NReco.VideoConverter.dll but was not handled in user code Additional information: The specified executable is not a valid application for this OS platform."
  • meda
    meda over 9 years
    @Tejas what is the second conversion for
  • Yigit Pilevne
    Yigit Pilevne almost 4 years
    This shows a warning message. Conversion.Convert(string, string, bool) is obselete. This will be deleted in next major version. Please use FFmpeg.Conversions.FromSnippet intead of that. New usage is like this: string output = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".mp4"); var snippet = FFmpeg.Conversions.FromSnippet.Convert(Resources.MkvWithAudi‌​o, output); IConversionResult result = await snippet.Start();