示例#1
0
        /// <summary>
        /// Get next audio/video frame from input
        /// </summary>
        /// <returns>Frame buffer for next audio and video frame. NULL if end of file</returns>
        public FrameBuffer NextFrame()
        {
            frame.SampleTime = (long)(timestampSec * TICKS_PER_SECOND);

            bool haveVideoBuffer = false;
            bool haveAudioBuffer;

            if (videoFrameReader != null && videoFrameReader.Read())
            {
                frame.VideoBuffer = videoFrameReader.GetFrame();
                haveVideoBuffer   = (frame.VideoBuffer != null);
            }

            haveAudioBuffer = wavFile.NextSample(frame.AudioBuffer);
            timestampSec   += frameDurationSec;

            return((haveVideoBuffer || haveAudioBuffer) ? frame : null);
        }
示例#2
0
        public static Bitmap GetFrame(string videoPath, double frameTime)
        {
            using (var videoFrameReader = new VideoFrameReader(videoPath))
            {
                if (frameTime > 0)
                {
                    videoFrameReader.Seek(frameTime);
                }

                //videoFrameReader.SetFrameWidth(300);

                if (videoFrameReader.Read())
                {
                    return(videoFrameReader.GetFrame());
                }

                return(GetErrorFrame(videoFrameReader.Width, videoFrameReader.Height, "Reading frame failed"));
            }
        }
示例#3
0
        private void ExtractThumbnails()
        {
            try
            {
                foreach (Content content in _contents)
                {
                    #region if

                    if (content.Extension == ".avi" || content.Extension == ".mov" || content.Extension == ".mp4" || content.Extension == ".wmv" || content.Extension == ".mpg" ||
                        content.Extension == ".mpeg")
                    {
                        string previewFrameDirectory = _previewFramesPath + content.SubDir + "\\";

                        if (!Directory.Exists(previewFrameDirectory))
                        {
                            Directory.CreateDirectory(previewFrameDirectory);
                        }

                        using (VideoFrameReader vfr = new VideoFrameReader(_filePath + content.FileName))
                        {
                            int noFrames = vfr.NumberOfFrames;

                            // save a thumbnail for the first frame for the "My Content" panel
                            int firstFrameIndex;

                            if (noFrames < 50)
                            {
                                firstFrameIndex = 0;
                            }
                            if (noFrames < 200)
                            {
                                firstFrameIndex = 50;
                            }
                            else
                            {
                                firstFrameIndex = 200;
                            }

                            using (Bitmap firstFrame = vfr.GetFrame(firstFrameIndex))
                            {
                                int height = (int)((float)_thumbnailWidth * ((float)firstFrame.Height / (float)firstFrame.Width));

                                using (Bitmap thumbnail = new Bitmap(_thumbnailWidth, height))
                                {
                                    using (Graphics g = Graphics.FromImage(thumbnail))
                                    {
                                        g.DrawImage(firstFrame, 0, 0, _thumbnailWidth, height);
                                    }

                                    thumbnail.Save(_thumbnailPath + content.SubDir + "\\" + content.FileNameWithoutExtension + ".jpg");
                                }
                            }

                            int frameCount = 1;

                            int space = noFrames / _targetNoFrames;

                            for (int frameNumber = 0; frameNumber < vfr.NumberOfFrames; frameNumber = frameNumber + space)
                            {
                                using (Bitmap frame = vfr.GetFrame(frameNumber))
                                {
                                    ImageUtilities.SaveImage(frame, previewFrameDirectory + content.FileNameWithoutExtension + frameCount + ".jpg", _quality);
                                }

                                frameCount++;
                            }
                        }
                    }
                    #endregion
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }