How to convert uploaded video and get a screenshot from this file?
I'm building a cms and I want users to be able to upload videos but I'm not familiar with video upload & conversi开发者_如何学Pythonon. Is there an example or has anybody coded a solution like this? I heard about ffmpeg but I don't know how to integrate it with asp.net.
As simple solution I can make my clients upload flv files but then I would still need to get a screenshot from that fvl.
Thanks
Answering author's question:
Does ffmpeg requires to be installed server side or just exe is enough?
ffmpeg.exe will be enough, no installation is required.
The code below gets a screenshot on captureTime
on video specified by videoFilename
variable, and saves it to the imageFilename
path.
Process ffmpeg = new Process();
ffmpeg.EnableRaisingEvents = true;
ffmpeg.StartInfo = new ProcessStartInfo
{
FileName = this.ffmpegPath,
Arguments = string.Format(
"-i \"{0}\" -an -y -s 320x240 -ss {1} -vframes 1 -f image2 \"{2}\"",
this.videoFilename,
DateTime.MinValue.Add(this.captureTime).ToString("HH:mm:ss:ff", CultureInfo.InvariantCulture),
this.imageFilename
),
WorkingDirectory = this.workingDirectory,
UseShellExecute = false,
RedirectStandardError = true,
RedirectStandardOutput = true,
WindowStyle = ProcessWindowStyle.Hidden
};
ffmpeg.Start();
ffmpeg.WaitForExit(this.timeout);
I've used ffmpeg, but I found it easier to just use the pre-compiled .exe version. So in the backend, I would just launch ffmpeg.exe with the required command-line arguments to do the conversion, let it run and when it was finished the completed file was all ready to go.
A long, long time ago in my PHP4 days I used the following method, calling ffmpeg on the shell and creating a screenshot.
/**
* Create a snapshot of a videofile and save it in jpeg format
*/
function snapshot($sourcefile,$destfile,$width=184,$height=138,$time=1){
$width=floor(($width)/2)*2;
$height=floor(($height)/2)*2;
exec("ffmpeg -i {$sourcefile} -s {$width}x{$height} -t 0.0001 -ss {$time} -f mjpeg {$destfile}");
}
It takes a supported video file as $sourcefile. The desired file location for the screenshot can be given by the $destfile parameter. Off course make sure that the given location is writeable for the executing user.
Hopefully this is also usable for anyone else who's looking for the right syntax.
精彩评论