ImageMagick should be used to do this, ffmpeg is for AV.
But to do this using ffmpeg and c#, follow these steps….
You can download ffmpeg for free at http://ffmpeg.org/download.html
My images exists in C:\image_directory and my ffmpeg exists in C:\ffmpeg.
I will be using the following ffmpeg command to resize each image (create a thumbnail):
C:\ffmpeg\bin>ffmpeg -i c:\image_directory\1.png -s 80×80 c:\image_directory\t\t_1.png
The above command will take an input image 1.png, resize it to 80px by 80px, save it in a sub-folder named \t\,
and append “t_” to the begining of the file name.
Here is how you would loop through every image in the folder:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Diagnostics; using System.Text.RegularExpressions; namespace ImgResize { class Program { static void Main(string[] args) { //get an array of all the image files// string[] imgPaths = Directory.GetFiles(@"c:\image_directory\"); //loop through each image// for (int i = 0; i < imgPaths.Length; i++) { string file_path = imgPaths[i]; //get the file name out of full path// string filename = Regex.Match(imgPaths[i], @".*\\([^\\]+$)").Groups[1].Value; //output the filename about to be converted Console.WriteLine("converting : "+filename); //make arguements string string write2string = " -i " + file_path + " -s 80x80 "+@"c:\\image_directory\\t\\t_" + filename; //create a process Process myProcess = new Process(); myProcess.StartInfo.UseShellExecute = false; myProcess.StartInfo.RedirectStandardOutput = true; //point ffmpeg location myProcess.StartInfo.FileName = @"c:\\ffmpeg\\bin\\ffmpeg"; //set arguements myProcess.StartInfo.Arguments = write2string; myProcess.Start(); myProcess.WaitForExit(); } } } } |
While this is correct, it seems a bit excessive when you could simply do:
for %%f in (.\*.jpg) do ffmpeg.exe -i %%f -vf scale=-1:80 .\t\t_%%f
which would loop through all jpg’s in a given folder (here the current folder) and create thumbnails while preserving the aspect ratio (recommended!).
No need for C# (sledgehammer, mosquito, etc.)
No need ffmpeg
Use imagemagic (convert)
Ok am I missing something here?
Ffmpeg lets you specify a naming convention for images on input and output
If you have img1.png thru img100,png use -i img%d.png
It stops when it runs out of frames
there is no need for any scripting at all
You can even make a slide show of your thumbnails as an mov file and add a soundtrack if that’s your thang