private void AddFile() { if (System.IO.File.Exists(uiAviFileNameTextBox.Text)) { try { var aviManager = new AviManager(uiAviFileNameTextBox.Text, true); VideoStream aviStream = aviManager.GetVideoStream(); aviStream.GetFrameOpen(); Bitmap bmp = aviStream.GetBitmap(aviStream.CountFrames/2); var videoStreamControl = new VideoStreamBrowseControl {Dock = DockStyle.Top}; videoStreamControl.SetFileName(GetCurrentFileName()); videoStreamControl.SetFrame(GetResizedBitmap(bmp, 50, 50)); videoStreamControl.VideoStream = aviStream; videoStreamControl.SelectVideoStream += SelectVideoStreamControl; uiVideoListPanel.Controls.Add(videoStreamControl); _selectedVideoStreamBrowseControl = videoStreamControl; foreach (VideoStreamBrowseControl browseControl in uiVideoListPanel.Controls.OfType<VideoStreamBrowseControl>()) { (browseControl).uiMainPanel.BackColor = Color.Lavender; } videoStreamControl.uiMainPanel.BackColor = Color.Aquamarine; aviManager.Close(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } }
private void btnAppend_Click(object sender, System.EventArgs e) { //open file Bitmap bmp = (Bitmap)Image.FromFile(txtFileNames.Lines[0]); AviManager aviManager = new AviManager(txtAviFileName.Text, true); VideoStream aviStream = aviManager.GetVideoStream(); //streams cannot be edited - copy to a new file VideoStream newStream; AviManager newManager = aviStream.DecompressToNewFile(@"..\..\testdata\temp.avi", true, out newStream); aviStream = newStream; //newManager.GetOpenStream(0); //add images Bitmap bitmap; for (int n = 0; n < txtFileNames.Lines.Length; n++) { if (txtFileNames.Lines[n].Trim().Length > 0) { bitmap = (Bitmap)Bitmap.FromFile(txtFileNames.Lines[n]); aviStream.AddFrame(bitmap); bitmap.Dispose(); } } //close old file aviManager.Close(); //save and close new file newManager.Close(); //delete old file, replace with new file System.IO.File.Delete(txtAviFileName.Text); System.IO.File.Move(@"..\..\testdata\temp.avi", txtAviFileName.Text); }
/// <summary>Add a wave audio stream from another file to this file</summary> /// <param name="waveFileName">Name of the wave file to add</param> /// <param name="startAtFrameIndex">Index of the video frame at which the sound is going to start</param> public void AddAudioStream(String waveFileName, int startAtFrameIndex) { AviManager audioManager = new AviManager(waveFileName, true); AudioStream newStream = audioManager.GetWaveStream(); AddAudioStream(newStream, startAtFrameIndex); audioManager.Close(); }
/// <summary>Add a wave audio stream from another file to this file</summary> /// <param name="waveFileName">Name of the wave file to add</param> public void AddAudioStream(String waveFileName) { AviManager audioManager = new AviManager(waveFileName, true); AudioStream newStream = audioManager.GetWaveStream(); AddAudioStream(newStream); audioManager.Close(); }
/// <summary>Copy a piece of video and wave sound int a new file</summary> /// <param name="newFileName">File name</param> /// <param name="startAtSecond">Start copying at second x</param> /// <param name="stopAtSecond">Stop copying at second y</param> /// <returns>AviManager for the new video</returns> public AviManager CopyTo(String newFileName, float startAtSecond, float stopAtSecond) { AviManager newFile = new AviManager(newFileName, false); try { //copy video stream VideoStream videoStream = GetVideoStream(); int startFrameIndex = (int)(videoStream.FrameRate * startAtSecond); int stopFrameIndex = (int)(videoStream.FrameRate * stopAtSecond); videoStream.GetFrameOpen(); Bitmap bmp = videoStream.GetBitmap(startFrameIndex); VideoStream newStream = newFile.AddVideoStream(false, videoStream.FrameRate, bmp); for (int n = startFrameIndex + 1; n <= stopFrameIndex; n++) { bmp = videoStream.GetBitmap(n); newStream.AddFrame(bmp); } videoStream.GetFrameClose(); //copy audio stream AudioStream waveStream = GetWaveStream(); Avi.AVISTREAMINFO streamInfo = new Avi.AVISTREAMINFO(); Avi.PCMWAVEFORMAT streamFormat = new Avi.PCMWAVEFORMAT(); int streamLength = 0; IntPtr ptrRawData = waveStream.GetStreamData( ref streamInfo, ref streamFormat, ref streamLength); int startByteIndex = (int)(startAtSecond * (float)(waveStream.CountSamplesPerSecond * streamFormat.nChannels * waveStream.CountBitsPerSample) / 8); int stopByteIndex = (int)(stopAtSecond * (float)(waveStream.CountSamplesPerSecond * streamFormat.nChannels * waveStream.CountBitsPerSample) / 8); IntPtr ptrWavePart = new IntPtr(ptrRawData.ToInt32() + startByteIndex); byte[] rawData = new byte[stopByteIndex - startByteIndex]; Marshal.Copy(ptrWavePart, rawData, 0, rawData.Length); Marshal.FreeHGlobal(ptrRawData); streamInfo.dwLength = rawData.Length; streamInfo.dwStart = 0; IntPtr unmanagedRawData = Marshal.AllocHGlobal(rawData.Length); Marshal.Copy(rawData, 0, unmanagedRawData, rawData.Length); newFile.AddAudioStream(unmanagedRawData, streamInfo, streamFormat, rawData.Length); Marshal.FreeHGlobal(unmanagedRawData); } catch (Exception ex) { newFile.Close(); throw ex; } return(newFile); }
// Aforge kütüphanesi ile bu şekilde yapılıyor. /*public void create_video_from_bitmaps(Bitmap[] BitmapStream,int Height,int Width) { // instantiate AVI writer, use WMV3 codec VideoFileWriter writer = new VideoFileWriter(); // create new AVI file and open it writer.Open("C:\\yazlab\\processed_frames\\result.avi", Width, Height); // create frame image foreach(Bitmap Frame in BitmapStream) { writer.WriteVideoFrame(Frame); } writer.Close(); } */ public void create_video_from_bitmaps(Bitmap[] BitmapStream) { try{ AviManager aviManager = new AviManager(@"C:\\yazlab\\processed_frames\\result.avi", false); //add a new video stream and one frame to the new file VideoStream aviStream = aviManager.AddVideoStream(true, 0.2, BitmapStream[0]); foreach (Bitmap Frame in BitmapStream) { aviStream.AddFrame(Frame); } aviManager.Close(); }catch(Exception Exp){ System.Windows.Forms.MessageBox.Show(Exp.ToString(),"AviFileHatası"); } }
private void flush() { Console.WriteLine("Writing avi. {0} frames to process", parallelScreens.Count); AviManager aviManager = new AviManager(Path.ChangeExtension(Path.Combine(filePath, Guid.NewGuid().ToString()), "avi"), false); IScreenShot screenShot; parallelScreens.TryDequeue(out screenShot); VideoStream aviStream = aviManager.AddVideoStream(true, fps, screenShot.GetBitmap()); IScreenShot[] screenShots = parallelScreens.ToArray(); for (var i = 1; i < screenShots.Length; i++) { using (Bitmap frame = screenShots[i].GetBitmap()) { aviStream.AddFrame(frame); } screenShots[i].Delete(); Console.Write("{0}, ", i); } aviManager.Close(); }
private void btnAddFrame_Click(object sender, EventArgs e) { String tempFileName = System.IO.Path.GetTempFileName() + ".avi"; AviManager tempFile = new AviManager(tempFileName, false); Bitmap bitmap = (Bitmap)Image.FromFile(txtNewFrameFileName.Lines[0].Trim()); tempFile.AddVideoStream(false, 1, bitmap); VideoStream stream = tempFile.GetVideoStream(); for (int n = 1; n < txtNewFrameFileName.Lines.Length; n++) { if (txtNewFrameFileName.Lines[n].Trim().Length > 0) { stream.AddFrame((Bitmap)Image.FromFile(txtNewFrameFileName.Lines[n])); } } editableStream.Paste(stream, 0, (int)numPastePositionBitmap.Value, stream.CountFrames); tempFile.Close(); try { File.Delete(tempFileName); } catch (IOException) { } }
private void btnAddSound_Click(object sender, System.EventArgs e) { String fileName = GetFileName("Sounds (*.wav)|*.wav"); if (fileName != null) { txtReportSound.Text = "Adding to sound.wav to " + txtAviFileName.Text + "...\r\n"; AviManager aviManager = new AviManager(txtAviFileName.Text, true); try { int countFrames = aviManager.GetVideoStream().CountFrames; if (countFrames > numInsertWavePosition.Value) { aviManager.AddAudioStream(fileName, (int)numInsertWavePosition.Value); } else { MessageBox.Show(this, "Frame " + numInsertWavePosition.Value + " does not exists. The video stream contains frame from 0 to " + (countFrames - 1) + "."); } } catch (Exception ex) { MessageBox.Show(this, "The file does not accept the new wave audio stream.\r\n" + ex.ToString(), "Error"); } aviManager.Close(); txtReportSound.Text += "...finished."; } }
private void CreateVideo(string fileName, FileInfo[] files, bool isCompressed) { try { var bmp = new Bitmap(1120, 480, PixelFormat.Format24bppRgb); var aviManager = new AviManager(fileName, false); var aviStream = aviManager.AddVideoStream(isCompressed, 25, bmp); foreach (var file in files) { bmp = (Bitmap)Bitmap.FromFile(file.FullName); aviStream.AddFrame(bmp); bmp.Dispose(); } aviManager.Close(); } catch (Exception e) { logger.Error(e); throw e; } }
// constructor public AviWriter(List<frame> Frame, String filename) { Console.WriteLine("Frame.Count: {0}", Frame.Count); for (int i = 0; i < Frame.Count; i++) { del.Add((((double)Frame[i].delay) / 1000.00)); string FileName = Frame[i].src; Image img = Image.FromFile(FileName); Bitmap bitmap = new Bitmap(img, width, height); bitmaps.Add(bitmap); Console.WriteLine("Frame: {0}", i, " delay: {1}", ((double)Frame[i].delay / 1000.00), "src: {2}", Frame[i].src); } min = del.Min(); AviManager aviManager = new AviManager(filename, false); VideoStream aviStream = aviManager.AddVideoStream(false, 2, bitmaps[0]); Console.WriteLine("min: {0}", min); for(int i = 1; i < Frame.Count; i++) { aviStream.AddFrame(bitmaps[i]); Console.WriteLine("Frame added"); for(double j = min; j <= del[i];) { aviStream.AddFrame(bitmaps[i]); j = j + min; Console.WriteLine("j: {0}", j); } } aviManager.Close(); del.Clear(); }
public void makeAvi() { FrameRateForm dlg = new FrameRateForm(); if (DialogResult.OK == dlg.ShowDialog()) { int framelength = 0; SaveFileDialog saveAvi = new SaveFileDialog(); Bitmap bmp = null; if (saveAvi.ShowDialog() == DialogResult.OK) { bmp = (Bitmap)Image.FromFile(pathBox.Items[0].ToString()); AviManager manageAVIFile = new AviManager(saveAvi.FileName.ToString()+ ".avi", false); aviStream = manageAVIFile.AddVideoStream(true, dlg.Rate, bmp); Bitmap bitmap; for (framelength = 1; framelength < pathBox.Items.Count - 1; framelength++) { bitmap = (Bitmap)Bitmap.FromFile(pathBox.Items[framelength].ToString()); aviStream.AddFrame(bitmap); bitmap.Dispose(); } manageAVIFile.Close(); } } }
/// <summary> /// Создание анимации из файла *.avi (при этом палитра если возможно берется из одноименного файла *.pal) (TODO: поддрежка формата *.gif) /// </summary> /// <param name="file"></param> public void ImportFromFile(string file) { if (!File.Exists(file)) return; //Palette = new ushort[0x100]; //Frames = new List<FrameEdit>(); //idxextra = 0x00000000; // хз ClearFrames(); switch(Path.GetExtension(file)) { case ".avi" : var filename = Path.Combine(Path.GetDirectoryName(file), Path.GetFileNameWithoutExtension(file)); var avi = new AviManager(filename+".avi", true); var stream = avi.GetVideoStream(); stream.GetFrameOpen(); var frames = new Bitmap[stream.CountFrames]; for (int pos = 0; pos < stream.CountFrames; ++pos) frames[pos] = stream.GetBitmap(pos); stream.GetFrameClose(); avi.Close(); if (File.Exists(filename+".pal")) this.GetPalPalette(filename+".pal"); else this.GetImagePalette(frames); if (Frames == null) Frames = new List<FrameEdit>(); foreach (var frame in frames) Frames.Add(new FrameEdit(frame, FrameEdit.GetSingleRect(frame), Palette, frame.Width/2, -frame.Height/4)); //this.AddFrame(frame); break; case ".gif" : throw new NotImplementedException(); break; default : throw new FileFormatException(); } }
static void Main(string[] args) { Console.WriteLine("MobiConverter by Gericom"); Console.WriteLine(); if (args.Length == 0) { PrintUsage(); return; } switch (args[0]) { case "-d": { if (args.Length != 2 && args.Length != 3) goto default; if (!File.Exists(args[1])) { Console.WriteLine("Error! File not found: " + args[1]); return; } String outfile = (args.Length == 3) ? args[2] : Path.ChangeExtension(args[1], "avi"); byte[] sig = new byte[4]; Stream s = File.OpenRead(args[1]); s.Read(sig, 0, 4); s.Close(); if (sig[0] == 0x4C && sig[1] == 0x32 && sig[2] == 0xAA && sig[3] == 0xAB)//moflex { Console.WriteLine("Moflex container detected!"); Console.Write("Converting: "); Console.CursorVisible = false; MobiclipDecoder ddd = null; AviManager m = new AviManager(outfile, false); MemoryStream audio = null; FastAudioDecoder[] mFastAudioDecoders = null; int audiorate = -1; int audiochannels = 0; VideoStream vs = null; FileStream stream = File.OpenRead(args[1]); var d = new MoLiveDemux(stream); int PlayingVideoStream = -1; d.OnCompleteFrameReceived += delegate(MoLiveChunk Chunk, byte[] Data) { if ((Chunk is MoLiveStreamVideo || Chunk is MoLiveStreamVideoWithLayout) && ((PlayingVideoStream == -1) || ((MoLiveStream)Chunk).StreamIndex == PlayingVideoStream)) { if (ddd == null) { ddd = new MobiclipDecoder(((MoLiveStreamVideo)Chunk).Width, ((MoLiveStreamVideo)Chunk).Height, MobiclipDecoder.MobiclipVersion.Moflex3DS); PlayingVideoStream = ((MoLiveStream)Chunk).StreamIndex; } ddd.Data = Data; ddd.Offset = 0; Bitmap b = ddd.DecodeFrame(); if (vs == null) vs = m.AddVideoStream(false, Math.Round(((double)((MoLiveStreamVideo)Chunk).FpsRate) / ((double)((MoLiveStreamVideo)Chunk).FpsScale), 3), b); else vs.AddFrame(b); } else if (Chunk is MoLiveStreamAudio) { if (audio == null) { audio = new MemoryStream(); audiochannels = (int)((MoLiveStreamAudio)Chunk).Channel; audiorate = (int)((MoLiveStreamAudio)Chunk).Frequency; } switch ((int)((MoLiveStreamAudio)Chunk).CodecId) { case 0://fastaudio { if (mFastAudioDecoders == null) { mFastAudioDecoders = new FastAudioDecoder[(int)((MoLiveStreamAudio)Chunk).Channel]; for (int i = 0; i < (int)((MoLiveStreamAudio)Chunk).Channel; i++) { mFastAudioDecoders[i] = new FastAudioDecoder(); } } List<short>[] channels = new List<short>[(int)((MoLiveStreamAudio)Chunk).Channel]; for (int i = 0; i < (int)((MoLiveStreamAudio)Chunk).Channel; i++) { channels[i] = new List<short>(); } int offset = 0; int size = 40; while (offset + size < Data.Length) { for (int i = 0; i < (int)((MoLiveStreamAudio)Chunk).Channel; i++) { mFastAudioDecoders[i].Data = Data; mFastAudioDecoders[i].Offset = offset; channels[i].AddRange(mFastAudioDecoders[i].Decode()); offset = mFastAudioDecoders[i].Offset; } } short[][] channelsresult = new short[(int)((MoLiveStreamAudio)Chunk).Channel][]; for (int i = 0; i < (int)((MoLiveStreamAudio)Chunk).Channel; i++) { channelsresult[i] = channels[i].ToArray(); } byte[] result = InterleaveChannels(channelsresult); audio.Write(result, 0, result.Length); } break; case 1://IMA-ADPCM { IMAADPCMDecoder[] decoders = new IMAADPCMDecoder[(int)((MoLiveStreamAudio)Chunk).Channel]; List<short>[] channels = new List<short>[(int)((MoLiveStreamAudio)Chunk).Channel]; for (int i = 0; i < (int)((MoLiveStreamAudio)Chunk).Channel; i++) { decoders[i] = new IMAADPCMDecoder(); decoders[i].GetWaveData(Data, 4 * i, 4); channels[i] = new List<short>(); } int offset = 4 * (int)((MoLiveStreamAudio)Chunk).Channel; int size = 128 * (int)((MoLiveStreamAudio)Chunk).Channel; while (offset + size < Data.Length) { for (int i = 0; i < (int)((MoLiveStreamAudio)Chunk).Channel; i++) { channels[i].AddRange(decoders[i].GetWaveData(Data, offset, 128)); offset += 128; } } short[][] channelsresult = new short[(int)((MoLiveStreamAudio)Chunk).Channel][]; for (int i = 0; i < (int)((MoLiveStreamAudio)Chunk).Channel; i++) { channelsresult[i] = channels[i].ToArray(); } byte[] result = InterleaveChannels(channelsresult); audio.Write(result, 0, result.Length); } break; case 2://PCM16 { audio.Write(Data, 0, Data.Length - (Data.Length % ((int)((MoLiveStreamAudio)Chunk).Channel * 2))); } break; } } }; bool left = false; int counter = 0; while (true) { uint error = d.ReadPacket(); if (error == 73) break; //report progress if (counter == 0) { Console.Write("{0,3:D}%", stream.Position * 100 / stream.Length); Console.CursorLeft -= 4; } counter++; if (counter == 50) counter = 0; } if (audio != null) { byte[] adata = audio.ToArray(); audio.Close(); var sinfo = new Avi.AVISTREAMINFO(); sinfo.fccType = Avi.streamtypeAUDIO; sinfo.dwScale = audiochannels * 2; sinfo.dwRate = audiorate * audiochannels * 2; sinfo.dwSampleSize = audiochannels * 2; sinfo.dwQuality = -1; var sinfo2 = new Avi.PCMWAVEFORMAT(); sinfo2.wFormatTag = 1; sinfo2.nChannels = (short)audiochannels; sinfo2.nSamplesPerSec = audiorate; sinfo2.nAvgBytesPerSec = audiorate * audiochannels * 2; sinfo2.nBlockAlign = (short)(audiochannels * 2); sinfo2.wBitsPerSample = 16; unsafe { fixed (byte* pAData = &adata[0]) { m.AddAudioStream((IntPtr)pAData, sinfo, sinfo2, adata.Length); } } } m.Close(); stream.Close(); Console.WriteLine("Done!"); Console.CursorVisible = true; } else if (sig[0] == 0x4D && sig[1] == 0x4F && sig[2] == 0x44 && sig[3] == 0x53) { //mods Console.WriteLine("Mods container detected!"); Console.Write("Converting: "); Console.CursorVisible = false; AviManager m = new AviManager(outfile, false); FileStream stream = File.OpenRead(args[1]); ModsDemuxer dm = new ModsDemuxer(stream); MemoryStream audio = null; if ((dm.Header.AudioCodec == 1 || dm.Header.AudioCodec == 3) && dm.Header.NbChannel > 0 && dm.Header.Frequency > 0) { audio = new MemoryStream(); } MobiclipDecoder d = new MobiclipDecoder(dm.Header.Width, dm.Header.Height, MobiclipDecoder.MobiclipVersion.ModsDS); VideoStream vs = null; int CurChannel = 0; List<short>[] channels = new List<short>[dm.Header.NbChannel]; IMAADPCMDecoder[] decoders = new IMAADPCMDecoder[dm.Header.NbChannel]; SxDecoder[] sxd = new SxDecoder[dm.Header.NbChannel]; FastAudioDecoder[] fad = new FastAudioDecoder[dm.Header.NbChannel]; bool[] isinit = new bool[dm.Header.NbChannel]; for (int i = 0; i < dm.Header.NbChannel; i++) { channels[i] = new List<short>(); decoders[i] = new IMAADPCMDecoder(); sxd[i] = new SxDecoder(); fad[i] = new FastAudioDecoder(); isinit[i] = false; } int counter = 0; while (true) { uint NrAudioPackets; bool IsKeyFrame; byte[] framedata = dm.ReadFrame(out NrAudioPackets, out IsKeyFrame); if (framedata == null) break; d.Data = framedata; d.Offset = 0; Bitmap b = d.DecodeFrame(); if (vs == null) vs = m.AddVideoStream(false, Math.Round(dm.Header.Fps / (double)0x01000000, 3), b); else vs.AddFrame(b); if (NrAudioPackets > 0 && audio != null) { int Offset = d.Offset - 2; if (dm.Header.TagId == 0x334E && (IOUtil.ReadU16LE(framedata, 0) & 0x8000) != 0) Offset += 4; if (dm.Header.AudioCodec == 3) { if (IsKeyFrame) { for (int i = 0; i < dm.Header.NbChannel; i++) { channels[i] = new List<short>(); decoders[i] = new IMAADPCMDecoder(); sxd[i] = new SxDecoder(); fad[i] = new FastAudioDecoder(); isinit[i] = false; } } for (int i = 0; i < NrAudioPackets; i++) { channels[CurChannel].AddRange(decoders[CurChannel].GetWaveData(framedata, Offset, 128 + (!isinit[CurChannel] ? 4 : 0))); Offset += 128 + (!isinit[CurChannel] ? 4 : 0); isinit[CurChannel] = true; CurChannel++; if (CurChannel >= dm.Header.NbChannel) CurChannel = 0; } } else if (dm.Header.AudioCodec == 1) { for (int i = 0; i < NrAudioPackets; i++) { if (!isinit[CurChannel]) sxd[CurChannel].Codebook = dm.AudioCodebooks[CurChannel]; isinit[CurChannel] = true; sxd[CurChannel].Data = framedata; sxd[CurChannel].Offset = Offset; channels[CurChannel].AddRange(sxd[CurChannel].Decode()); Offset = sxd[CurChannel].Offset; CurChannel++; if (CurChannel >= dm.Header.NbChannel) CurChannel = 0; } } else if (dm.Header.AudioCodec == 2) { for (int i = 0; i < NrAudioPackets; i++) { fad[CurChannel].Data = framedata; fad[CurChannel].Offset = Offset; channels[CurChannel].AddRange(fad[CurChannel].Decode()); Offset = fad[CurChannel].Offset; CurChannel++; if (CurChannel >= dm.Header.NbChannel) CurChannel = 0; } } int smallest = int.MaxValue; for (int i = 0; i < dm.Header.NbChannel; i++) { if (channels[i].Count < smallest) smallest = channels[i].Count; } if (smallest > 0) { //Gather samples short[][] samps = new short[dm.Header.NbChannel][]; for (int i = 0; i < dm.Header.NbChannel; i++) { samps[i] = new short[smallest]; channels[i].CopyTo(0, samps[i], 0, smallest); channels[i].RemoveRange(0, smallest); } byte[] result = InterleaveChannels(samps); audio.Write(result, 0, result.Length); } } //report progress if (counter == 0) { Console.Write("{0,3:D}%", stream.Position * 100 / stream.Length); Console.CursorLeft -= 4; } counter++; if (counter == 50) counter = 0; } if (audio != null) { byte[] adata = audio.ToArray(); audio.Close(); var sinfo = new Avi.AVISTREAMINFO(); sinfo.fccType = Avi.streamtypeAUDIO; sinfo.dwScale = dm.Header.NbChannel * 2; sinfo.dwRate = (int)dm.Header.Frequency * dm.Header.NbChannel * 2; sinfo.dwSampleSize = dm.Header.NbChannel * 2; sinfo.dwQuality = -1; var sinfo2 = new Avi.PCMWAVEFORMAT(); sinfo2.wFormatTag = 1; sinfo2.nChannels = (short)dm.Header.NbChannel; sinfo2.nSamplesPerSec = (int)dm.Header.Frequency; sinfo2.nAvgBytesPerSec = (int)dm.Header.Frequency * dm.Header.NbChannel * 2; sinfo2.nBlockAlign = (short)(dm.Header.NbChannel * 2); sinfo2.wBitsPerSample = 16; unsafe { fixed (byte* pAData = &adata[0]) { m.AddAudioStream((IntPtr)pAData, sinfo, sinfo2, adata.Length); } } } m.Close(); stream.Close(); Console.WriteLine("Done!"); Console.CursorVisible = true; return; } else if (sig[0] == 0x4D && sig[1] == 0x4F && sig[2] == 0x43 && sig[3] == 0x35) { //moc5 Console.WriteLine("MOC5 container detected!"); Console.WriteLine("Error! Not supported yet!"); return; } else { Console.WriteLine("Error! Unrecognized format!"); return; } break; } case "-e": { break; } default: case "-h": PrintUsage(); return; } }
private void btnExport_Click(object sender, EventArgs e) { string path = SaveDialog("Avi Files (.avi)|*.avi"); if (path != "") { new Thread(() => { AviManager aviManager = null; try { Console.WriteLine(path); //sourcePath = openFile(); //http://www.codeproject.com/Articles/7388/A-Simple-C-Wrapper-for-the-AviFile-Library //myReadyNAS device, got files via FTP from my webcam List<PictureItem> jpgFileList = new List<PictureItem>(); PictureItem[] tempArray = new PictureItem[listBox.Items.Count]; listBox.Items.CopyTo(tempArray, 0); jpgFileList.AddRange(tempArray); this.Invoke(new Action(() => { this.toolStripProgressBar1.Maximum = jpgFileList.Count; this.tableLayoutPanel1.Enabled = false; })); //load the first image Bitmap bitmap = (Bitmap)Image.FromFile(jpgFileList.First().path); bitmap.RotateFlip(RotateFlipType.RotateNoneFlipXY); //create a new AVI file aviManager = new AviManager(path, false); //add a new video stream and one frame to the new file //set IsCompressed = false VideoStream aviStream = aviManager.AddVideoStream(true, 12, bitmap); jpgFileList.Skip(1).ToList().ForEach(file => { Console.WriteLine(file); bitmap = new Bitmap(Bitmap.FromFile(file.path)); bitmap.RotateFlip(RotateFlipType.RotateNoneFlipXY); aviStream.AddFrame(bitmap); bitmap.Dispose(); this.Invoke(new Action(() => { this.toolStripProgressBar1.Value++; })); }); aviManager.Close(); this.Invoke(new Action(() => { this.toolStripProgressBar1.Value = 0; this.tableLayoutPanel1.Enabled = true; })); } catch (Exception ex) { if (aviManager != null) aviManager.Close(); this.Invoke(new Action(() => { this.toolStripProgressBar1.Value = 0; this.tableLayoutPanel1.Enabled = true; MessageBox.Show(ex.Message); })); } }).Start(); } }
public void ExportToAVI(string file, bool createPal = false) { var frames = this.GetFrames(true); if (frames == null || frames.Length <= 0) return; if (createPal) SavePalPalette(Path.Combine(Path.GetDirectoryName(file), Path.GetFileNameWithoutExtension(file)+".pal")); var avi = new AviManager(file, false); var bitdat = frames[0].LockBits(new Rectangle(0, 0, frames[0].Width, frames[0].Height), ImageLockMode.ReadOnly, PixelFormat.Format16bppArgb1555); var size = bitdat.Stride * frames[0].Height; frames[0].UnlockBits(bitdat); var stream = avi.AddVideoStream(false, 10.0, size, frames[0].Width, frames[0].Height, PixelFormat.Format16bppArgb1555); foreach (var frame in frames) { stream.AddFrame(frame); } avi.Close(); }
/** Metoda care se foloseste de bibliotecile AviManager pentru a * crea un stream video dintr-o lista de imagini format bitmap. **/ private void createMovie(String fileName, List<Bitmap> images) { AviManager aviManager = new AviManager(fileName, false); VideoStream videoStream = aviManager.AddVideoStream(false, 30, images.ElementAt(0)); foreach (var image in images) { if (finalFrames.IndexOf(image) != 0) { videoStream.AddFrame(image); } } aviManager.Close(); }
private void CopyFile(String newName, bool compress) { //open compressed file AviManager aviManager = new AviManager(txtAviFileName.Text, true); VideoStream aviStream = aviManager.GetVideoStream(); //create un-/re-compressed file VideoStream newStream; AviManager newManager = aviStream.DecompressToNewFile(newName, compress, out newStream); //close compressed file aviManager.Close(); //save and close un-/re-compressed file newManager.Close(); }
public void RenderBmps(int iCount) { SaveFileDialog fdlg = new SaveFileDialog { DefaultExt = "AVI", Title = "Save As", Filter = "AVI(*.AVI)|.AVI", FilterIndex = 1, FileName = "Untitled", AddExtension = true, }; bool? result = fdlg.ShowDialog(); if (result.HasValue && result.Value) { m = new Model(); for (int i = 0; i < iCount; i++) { RaiseComment("Title " + i, "Content " + i); RenderWithFilename(@"..\..\testdata\img" + i + ".BMP"); } System.Drawing.Bitmap bmp = (System.Drawing.Bitmap)System.Drawing.Image.FromFile(@"..\..\testdata\img0.BMP"); AviManager aviManager = new AviManager(fdlg.FileName, false); double frameRate = System.Math.Round((double)1 / this.Step, 1); VideoStream aviStream = aviManager.AddVideoStream(false, frameRate, bmp); foreach (BitmapSource bms in m.ImageCollection) { System.Drawing.Bitmap b = Helper.BitmapHelper.GetBitmap(bms); aviStream.AddFrame(b); b.Dispose(); } aviManager.Close(); MessageBox.Show("Complete!"); } }
private void btnExtractPart_Click(object sender, EventArgs e) { AviManager aviManager = new AviManager(txtAviFileName.Text, true); VideoStream aviStream = aviManager.GetVideoStream(); CopyForm dialog = new CopyForm(0, (int)Math.Floor(aviStream.CountFrames / aviStream.FrameRate)); if (dialog.ShowDialog() == DialogResult.OK) { int startSecond = dialog.Start; int stopSecond = dialog.Stop; txtReportCopy.Text = "Cutting seconds from " + txtAviFileName.Text + " to video.avi...\r\n"; AviManager newFile = aviManager.CopyTo("..\\..\\testdata\\video.avi", startSecond, stopSecond); newFile.Close(); txtReportCopy.Text += "...finished."; } aviManager.Close(); }
private void btnExtractWave_Click(object sender, System.EventArgs e) { txtReportSound.Text = "Extracting " + txtAviFileName.Text + " to sound.wav...\r\n"; AviManager aviManager = new AviManager(txtAviFileName.Text, true); try { AudioStream audioStream = aviManager.GetWaveStream(); audioStream.ExportStream(@"..\..\testdata\sound.wav"); aviManager.Close(); txtReportSound.Text += "...finished."; } catch (Exception ex) { MessageBox.Show(this, "The file does not contain a wave audio stream, or it cannot be opened.\r\n" + ex.ToString(), "No Stream Found"); } }
private void btnExtract_Click(object sender, System.EventArgs e) { AviManager aviManager = new AviManager(txtAviFileName.Text, true); VideoStream stream = aviManager.GetVideoStream(); stream.GetFrameOpen(); txtReportCopy.Text = txtFileNames.Text = String.Empty; String path = @"..\..\testdata\"; for (int n = 0; n < stream.CountFrames; n++) { stream.ExportBitmap(n, path + n.ToString() + ".bmp"); txtReportCopy.Text += n + ".bmp finished...\r\n"; txtFileNames.Text += path + n + ".bmp\r\n"; } stream.GetFrameClose(); aviManager.Close(); }
private void ShowFrame() { if (System.IO.File.Exists(txtAviFileName.Text)) { try { AviManager aviManager = new AviManager(txtAviFileName.Text, true); VideoStream aviStream = aviManager.GetVideoStream(); aviStream.GetFrameOpen(); Bitmap bmp = aviStream.GetBitmap(Convert.ToInt32(numPosition.Value)); picFrame.Image = bmp; aviStream.GetFrameClose(); aviManager.Close(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } }
private void btnWriteCompress_Click(object sender, System.EventArgs e) { FrameRateForm dlg = new FrameRateForm(); if(dlg.ShowDialog() == DialogResult.OK){ //load the first image Bitmap bitmap = (Bitmap)Image.FromFile(txtFileNames.Lines[0]); //create a new AVI file AviManager aviManager = new AviManager(@"..\..\testdata\new.avi", false); //add a new video stream and one frame to the new file VideoStream aviStream = aviManager.AddVideoStream(true, dlg.Rate, bitmap); int count = 0; for (int n = 1; n < txtFileNames.Lines.Length; n++) { if (txtFileNames.Lines[n].Trim().Length > 0) { bitmap = (Bitmap)Bitmap.FromFile(txtFileNames.Lines[n]); aviStream.AddFrame(bitmap); bitmap.Dispose(); count++; } } aviManager.Close(); } }
private void btnBrowse_Click(object sender, EventArgs e) { OpenFileDialog oFD1 = new OpenFileDialog(); oFD1.Multiselect = true; if (oFD1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { files = oFD1.SafeFileNames; //Save only the names paths = oFD1.FileNames; //Save the full paths for (int i = 0; i < files.Length; i++) { //listBox1.Items.Add(files[i]); //Add songs to the listbox ext = Path.GetExtension(oFD1.FileName); if (ext == ".avi") { //Convert Avi to wav AviManager aviManager = new AviManager(oFD1.FileName, true); AudioStream audioStream = aviManager.GetWaveStream(); audioStream.ExportStream(oFD1.FileName + ".wav"); filepath = oFD1.FileName + ".wav"; aviManager.Close(); listBox1.Items.Add(files[i]); //Add songs to the listbox } else if (ext == ".wav") { filepath = oFD1.FileName; listBox1.Items.Add(files[i]); //Add songs to the listbox } } } NAudio.Wave.WaveChannel32 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(filepath)); WaveFileReader wavFile = new WaveFileReader(filepath); byte[] mainBuffer = new byte[wave.Length]; float fileSize = (float)wavFile.Length / 1048576; if (fileSize < 2) window = 8; else if (fileSize > 2 && fileSize < 4) window = 16; else if (fileSize > 4 && fileSize < 8) window = 32; else if (fileSize > 8 && fileSize < 12) window = 128; else if (fileSize > 12 && fileSize < 20) window = 256; else if (fileSize > 20 && fileSize < 30) window = 512; else window = 2048; float[] fbuffer = new float[mainBuffer.Length / window]; wave.Read(mainBuffer, 0, mainBuffer.Length); for (int i = 0; i < fbuffer.Length; i++) { fbuffer[i] = (BitConverter.ToSingle(mainBuffer, i * window)); } double time = wave.TotalTime.TotalSeconds; GraphPane myPane1 = zedGraphControl2.GraphPane; PointPairList list1 = new PointPairList(); PointPairList list2 = new PointPairList(); for (int i = 0; i < fbuffer.Length; i++) { list1.Add(i, fbuffer[i]); } list2.Add(0, 0); list2.Add(time, 0); if (myCurve1 != null && myCurve2 != null) { myCurve1.Clear(); myCurve2.Clear(); } GraphPane myPane2 = zedGraphControl2.GraphPane; myPane2.Title.Text = "Audio Sound Wave"; myPane2.XAxis.Title.Text = "Time, Seconds"; myPane2.YAxis.Title.Text = "Sound Wave Graph"; myCurve1 = myPane1.AddCurve(null, list1, System.Drawing.Color.Blue, SymbolType.None); myCurve1.IsX2Axis = true; myCurve2 = myPane1.AddCurve(null, list2, System.Drawing.Color.Black, SymbolType.None); myPane1.XAxis.Scale.MaxAuto = true; myPane1.XAxis.Scale.MinAuto = true; //Threshold Line double threshHoldY = -1.2; double threshHoldX = 1.2; LineObj threshHoldLine = new LineObj(System.Drawing.Color.Red, myPane2.XAxis.Scale.Min, threshHoldY, myPane2.XAxis.Scale.Max, threshHoldY); LineObj threshHoldLine2 = new LineObj(System.Drawing.Color.Red, myPane2.XAxis.Scale.Min, threshHoldX, myPane2.XAxis.Scale.Max, threshHoldX); myPane2.GraphObjList.Add(threshHoldLine); myPane2.GraphObjList.Add(threshHoldLine2); // Add a text box with instructions TextObj text = new TextObj( "Ratio Conversion: 1:100\nRed Lines: Threshold\nZoom: left mouse & drag\nContext Menu: right mouse", 0.05f, 0.95f, CoordType.ChartFraction, AlignH.Left, AlignV.Bottom); text.FontSpec.StringAlignment = StringAlignment.Near; myPane2.GraphObjList.Add(text); // Show the x axis grid myPane2.XAxis.MajorGrid.IsVisible = true; myPane2.YAxis.MajorGrid.IsVisible = true; // Just manually control the X axis range so it scrolls continuously // instead of discrete step-sized jumps //myPane2.XAxis.Scale.Format = @"00:00:00"; myPane2.XAxis.Scale.IsSkipCrossLabel = true; myPane2.XAxis.Scale.IsPreventLabelOverlap = true; myPane2.XAxis.Type = ZedGraph.AxisType.Linear; myPane2.XAxis.Scale.Min = 0; myPane2.XAxis.Scale.Max = 1.2; myPane2.AxisChange(); // turn off the opposite tics so the Y tics don't show up on the Y2 axis myPane2.YAxis.MajorTic.IsOpposite = false; myPane2.YAxis.MinorTic.IsOpposite = false; // Don't display the Y zero line myPane2.YAxis.MajorGrid.IsZeroLine = false; // Align the Y axis labels so they are flush to the axis myPane2.YAxis.Scale.Align = AlignP.Inside; // Manually set the axis range myPane2.YAxis.Scale.Min = -1.5; myPane2.YAxis.Scale.Max = 1.5; zedGraphControl2.AxisChange(); zedGraphControl2.Invalidate(); }
/// <summary>Copy a piece of video and wave sound int a new file</summary> /// <param name="newFileName">File name</param> /// <param name="startAtSecond">Start copying at second x</param> /// <param name="stopAtSecond">Stop copying at second y</param> /// <returns>AviManager for the new video</returns> public AviManager CopyTo(String newFileName, float startAtSecond, float stopAtSecond) { AviManager newFile = new AviManager(newFileName, false); try { //copy video stream VideoStream videoStream = GetVideoStream(); int startFrameIndex = (int)(videoStream.FrameRate * startAtSecond); int stopFrameIndex = (int)(videoStream.FrameRate * stopAtSecond); videoStream.GetFrameOpen(); Bitmap bmp = videoStream.GetBitmap(startFrameIndex); VideoStream newStream = newFile.AddVideoStream(false, videoStream.FrameRate, bmp); for (int n = startFrameIndex + 1; n <= stopFrameIndex; n++) { bmp = videoStream.GetBitmap(n); newStream.AddFrame(bmp); } videoStream.GetFrameClose(); //copy audio stream AudioStream waveStream = GetWaveStream(); Avi.AVISTREAMINFO streamInfo = new Avi.AVISTREAMINFO(); Avi.PCMWAVEFORMAT streamFormat = new Avi.PCMWAVEFORMAT(); int streamLength = 0; IntPtr ptrRawData = waveStream.GetStreamData( ref streamInfo, ref streamFormat, ref streamLength); int startByteIndex = (int)( startAtSecond * (float)(waveStream.CountSamplesPerSecond * streamFormat.nChannels * waveStream.CountBitsPerSample) / 8); int stopByteIndex = (int)( stopAtSecond * (float)(waveStream.CountSamplesPerSecond * streamFormat.nChannels * waveStream.CountBitsPerSample) / 8); IntPtr ptrWavePart = new IntPtr(ptrRawData.ToInt32() + startByteIndex); byte[] rawData = new byte[stopByteIndex - startByteIndex]; Marshal.Copy(ptrWavePart, rawData, 0, rawData.Length); Marshal.FreeHGlobal(ptrRawData); streamInfo.dwLength = rawData.Length; streamInfo.dwStart = 0; IntPtr unmanagedRawData = Marshal.AllocHGlobal(rawData.Length); Marshal.Copy(rawData, 0, unmanagedRawData, rawData.Length); newFile.AddAudioStream(unmanagedRawData, streamInfo, streamFormat, rawData.Length); Marshal.FreeHGlobal(unmanagedRawData); } catch (Exception ex) { newFile.Close(); throw ex; } return newFile; }
private void doExporting(string tmpFilePath, DicomElement dicomElement, BackgroundWorker worker) { //create a new AVI file AviManager aviManager = new AviManager(tmpFilePath, false); //add a new video stream and one frame to the new file // todo mozda ce moci drugaciji konstruktor... Bitmap bitmap = dicomElement.GetBitmap(1); VideoStream aviStream = aviManager.AddVideoStream(createCompressedOptions(), Settings.Default.Fps, bitmap); bitmap.Dispose(); worker.ReportProgress(1); for (int n = 2; n <= dicomElement.FrameCount; n++) { bitmap = dicomElement.GetBitmap(n); aviStream.AddFrame(bitmap); bitmap.Dispose(); worker.ReportProgress(1); } aviManager.Close(); }
private void btnExtractVideo_Click(object sender, System.EventArgs e) { txtReportCopy.Text = "Extracting " + txtAviFileName.Text + " to video.avi...\r\n"; AviManager aviManager = new AviManager(txtAviFileName.Text, true); VideoStream videoStream = aviManager.GetVideoStream(); videoStream.ExportStream(@"..\..\testdata\video.avi"); aviManager.Close(); txtReportCopy.Text += "...finished."; }
public void CreateVideo(int iCount) { if (iCount == 0) { MessageBox.Show("This game has no moving!"); return; } SaveFileDialog fdlg = new SaveFileDialog { DefaultExt = "AVI", Title = "Save As", Filter = "AVI(*.AVI)|.AVI", FilterIndex = 1, FileName = "Untitled", AddExtension = true, }; bool? result = fdlg.ShowDialog(); if (result.HasValue && result.Value) { var watch = Stopwatch.StartNew(); DependencyObject parentObject = Window.GetWindow(this); MainWindow parent = parentObject as MainWindow; if (parent != null) { parent.m_statusProgressBar.Visibility = System.Windows.Visibility.Visible; } m = new Model(); for (int i = 0; i < iCount; i++) { parent.m_moveViewer.listViewMoveList.SelectedIndex = i; RenderWithoutFilename(); parent.m_statusProgressBar.Value = i; Thread.Sleep(100); } System.Drawing.Bitmap bmp = Helper.BitmapHelper.GetBitmap(m.ImageCollection[0]); AviManager aviManager = new AviManager(fdlg.FileName, false); double frameRate = System.Math.Round((double)1 / this.Step, 1); VideoStream aviStream = aviManager.AddVideoStream(false, frameRate, bmp); for (int i = 0; i < m.ImageCollection.Count; i++ ) { BitmapSource bms = m.ImageCollection[i] as BitmapSource; System.Drawing.Bitmap b = Helper.BitmapHelper.GetBitmap(bms); aviStream.AddFrame(b); b.Dispose(); parent.m_statusProgressBar.Value = i; Thread.Sleep(100); } aviManager.Close(); watch.Stop(); var elapsedMs = watch.Elapsed.Seconds; parent.m_statusLabelCheck.Content = string.Format("Render Complete in: {0} s", elapsedMs); parent.m_statusProgressBar.Visibility = System.Windows.Visibility.Collapsed; } }
private void compileVideo() { AviManager aviManager = new AviManager(System.IO.Path.Combine(this.folder, "VideoCompressed.avi"), false); System.Drawing.Bitmap firstBitmap = (System.Drawing.Bitmap)System.Drawing.Bitmap.FromFile(System.IO.Path.Combine(this.folder, string.Format("image{0}.png", 0))); VideoStream aviStream = aviManager.AddVideoStream(true, 30, firstBitmap); //VideoStream aviStream = aviManager.AddVideoStream(true, 30, firstBitmap); System.Drawing.Bitmap bitmap; for (int i = 1; i < 178; i++) { bitmap = (System.Drawing.Bitmap)System.Drawing.Bitmap.FromFile(System.IO.Path.Combine(this.folder, string.Format("image{0}.png", i))); aviStream.AddFrame(bitmap); bitmap.Dispose(); } aviManager.Close(); Debug.WriteLine("Video compiled"); }
// constructor public AviWriter(List<frame> Frame, String filename) { Console.WriteLine("Frame.Count: {0}", Frame.Count); string path = Environment.CurrentDirectory + "\\Images\\169.png"; Image blank = Image.FromFile(path); Bitmap blankbuf = new Bitmap(blank, width, height); bitmaps.Add(blankbuf); del.Add(0.1); for (int i = 0; i < Frame.Count; i++) { del.Add((((double)Frame[i].delay) / 1000.00)); string FileName = Frame[i].src; Image img = Image.FromFile(FileName); Bitmap bitmap = new Bitmap(img, width, height); bitmaps.Add(bitmap); Console.WriteLine("Frame: {0}", i, " delay: {1}", ((double)Frame[i].delay / 1000.00), "src: {2}", Frame[i].src); } min = del.Min(); opfr = 1000 / (min * 1000); AviManager aviManager = new AviManager(filename, false); VideoStream aviStream = aviManager.AddVideoStream(false, opfr, bitmaps[0]); Console.WriteLine("min: {0}", min); for(int i = 0; i < bitmaps.Count; i++) { if (del[i] > min) { double j = del[i]; while ( j > min) { aviStream.AddFrame(bitmaps[i]); j = j - min; } } else { aviStream.AddFrame(bitmaps[i]); } //Console.WriteLine("Frame added"); /* for(double j = min; j <= del[i];) { aviStream.AddFrame(bitmaps[i]); j = j + min; Console.WriteLine("j: {0}", j); } */ } aviManager.Close(); del.Clear(); }
private void btnWrite_Click(object sender, System.EventArgs e) { FrameRateForm dlg = new FrameRateForm(); if(dlg.ShowDialog() == DialogResult.OK){ Bitmap bmp = (Bitmap)Image.FromFile(txtFileNames.Lines[0]); AviManager aviManager = new AviManager(@"..\..\testdata\new.avi", false); VideoStream aviStream = aviManager.AddVideoStream(false, dlg.Rate, bmp); Bitmap bitmap; int count = 0; for (int n = 1; n < txtFileNames.Lines.Length; n++) { if (txtFileNames.Lines[n].Trim().Length > 0) { bitmap = (Bitmap)Bitmap.FromFile(txtFileNames.Lines[n]); aviStream.AddFrame(bitmap); bitmap.Dispose(); count++; } } aviManager.Close(); } }