I have a C# app. I have 100 JPEGs (for an example).
I can easily encode this into a video file.
When it has finished encoding on the client app I FTP upload to my server.
It would be 'neater' if I could not write the video file to a disc but instead write it to a memory stream (or array of bytes) and upload via web service perhaps?
I have checked out the ffmpeg documentation but as a C# developer I do not find it natural to understand the C examples.
I guess my first question is it possible, and if so can anyone post an example code in C#? At the moment I am using the process class in C# to execute ffmpeg.
Your process method is already good, just needs adjustments:
- Set
StartupInfo.RedirectStandardOutput = true
and StartupInfo.UseShellExecute = false
.
- Instead of an output file name, call ffmpeg with
pipe:
, which will make it write to the standard output. Also, since the format cannot be determined from the file name anymore, make sure you use the -f <format>
switch as well.
- Start the process.
- Read from
Process.StandardOutput.BaseStream
(.BaseStream
, so the StreamReader
that is .StandardOutput
doesn't mess anything up) while the process is running into your memory stream.
- Read anything still remaining buffered in
Process.StandardOutput.BaseStream
.
- Profit.
I coded a thumbnailer a while back (BSD 2-clause), that has actual code that demonstrates this. Doesn't matter if it is an image or a video coming out of ffmpeg in the end.