Click here to Skip to main content
15,881,803 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
In my project I am saving videos, converting formats to .swf using ffmpeg. Converting and saving the videos is working fine, but I have a problem with creating the thumbnails. It saves a "picture.jpg" but there is no image. looking at the thumbnail its only got the normal photoviewer sign which is fine, but when I try to open the image it gives a message of
Windows photo viewer: Windows photo viewer cant open this picture because the file appears to be damaged, corrupted, or is too large. (this image is 2.7MB) - Photos taken from my camera is about 5MB and that opens.

PictureViewer: couldn't display "image.jpg" because a suitable graphics importer could not be found.

Paint: Paint cannot read this file. This is not a valid bitmap file or its format is currently not supported.
The images won't open in any I done to save the image:

C#
tring thumbpath, thumbname;
                string thumbargs;
                string thumbre;
                thumbpath = Server.MapPath("~\\uploads\\" + dtYear + "\\" + dtMonth + "\\Thumb\\");

                CreateDirectoryIfNotExists(thumbpath);

                // Create the path and file name to check for duplicates.
                pathToCheck = thumbpath;

                // Create a temporary file name to use for checking duplicates.
                tempfileName = "";

                // Check to see if a file already exists with the
                // same name as the file to upload.        
                if (System.IO.File.Exists(pathToCheck))
                {
                    int counter = 2;
                    while (System.IO.File.Exists(pathToCheck))
                    {
                        // if a file with this name already exists,
                        // prefix the filename with a number.
                        tempfileName = thumbpath + counter.ToString() + withoutext + ".jpg";
                        pathToCheck = tempfileName;
                        counter++;
                    }

                    outputfile = tempfileName;
                    // Notify the user that the file name was changed.
                    lblMsg.Text = "A file with the same name already exists." +
                        "<br />Your file was saved as " + counter.ToString() + withoutext + ".jpg";
                }

                thumbname = thumbpath + withoutext + "%d" + ".jpg";
                Session["thumbname"] = withoutext + "1" + ".jpg";
               // thumbargs = "-i {0} -f image2 frame-%1d.png -y {1};
                thumbargs = "-i " + inputfile + "-f image2 -ss 1.000 -vframes 1 " + thumbName;
                Process thumbproc = new Process();
                thumbproc = new Process();
                thumbproc.StartInfo.FileName = spath + "\\ffmpeg\\ffmpeg.exe";
                thumbproc.StartInfo.Arguments = thumbargs;
                thumbproc.StartInfo.UseShellExecute = false;
                thumbproc.StartInfo.CreateNoWindow = false;
                thumbproc.StartInfo.RedirectStandardOutput = false;
                try
                {
                    thumbproc.Start();
                    fuPath.PostedFile.SaveAs(thumbname);
                }
                catch (Exception ex)
                {
                    Response.Write(ex.Message);
                }
                thumbproc.WaitForExit();
                thumbproc.Close();


EDIT:
I've tried these arguments as well, still can't get the image to work...
It saves, just can't open it...

C#
//thumbargs = "-i " + inputfile + " -an -ss 00:00:03 -s 120×90 -vframes 1 -f mjpeg " + thumbName;
               // thumbargs = "-i " + inputfile + "-f image2 -ss 1.000 -vframes 1 " + thumbName;
                thumbargs = "-i " + inputfile + " -vframes 1 -ss 00:00:10 -s 150x150 " + thumbName;

                //  thumbargs = "ffmpeg -i" + inputfile + " -ss 0:00:01.000 -sameq -vframes 1 " + withoutext + ".jpg";
                //  thumbargs = "-i " + inputfile + " -vframes 1 -ss 00:00:07 -s 150x150 " + thumbName;


SQL
EDIT:


CSS
I tried adding the argument to the command prompt to see if it works there but it gave me a message of : [NULL @ 000000000025f7a0] Unable to find a suitable output format for &#39;vframes&#39; vframes: invalid argument The line I used:

<pre lang="c#">>
ffmpeg -i VID2012.3GP vframes 1 VID2012.jpg


EDIT:
I changed a bit of my code. Debugging through my code there is no exception that is thrown, but if I point the mouse over the process (after it started) it "shows an exception of type System.InvalidOperationException"

C#
thumbargs = "-i " + postedfilename + " vframes 1" + thumbName;
                ProcessStartInfo thumbProcstartIfo = new ProcessStartInfo();
                thumbProcstartIfo.FileName = @"\ffmpeg\ffmpeg.exe";
                thumbProcstartIfo.Arguments = thumbargs;
                thumbProcstartIfo.UseShellExecute = false;
                thumbProcstartIfo.CreateNoWindow = true;
                thumbProcstartIfo.RedirectStandardOutput = false;

                try
                {
                    using (var process = new Process())
                    {
                        process.StartInfo = thumbProcstartIfo;
                        process.Start();
                        process.WaitForExit();
                    }
                }
                catch (InvalidOperationException ex)
                {
                    lblMsg.Text = ex.ToString();
                }
Posted
Updated 30-May-13 1:01am
v7

1 solution

This is simple, but what you really need to is read FFmpeg command-line help paying more attention. It is not as simple as it may look at first glance:
http://www.ffmpeg.org/ffmpeg.html[^].

—SA
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900