diff --git a/README.md b/README.md index 8a82291..86f2605 100644 --- a/README.md +++ b/README.md @@ -36,21 +36,11 @@ Read() bool Close() ``` -```go -video, err := vidio.NewVideo("input.mp4") - -for video.Read() { - // "frame" stores the video frame as a flattened RGB image in row-major order - frame := video.FrameBuffer() // stored as: RGBRGBRGBRGB... - // Video processing here... -} -``` - If all frames have been read, `video` will be closed automatically. If not all frames are read, call `video.Close()` to close the video. ## `Camera` -The `Camera` can read from any cameras on the device running Vidio. It takes in the stream index. On most machines the webcam device has index 0. Note that audio retrieval from the microphone is not yet supported. +The `Camera` can read from any cameras on the device running Vidio. It takes in the stream index. On most machines the webcam device has index 0. ```go vidio.NewCamera(stream int) (*Camera, error) @@ -68,18 +58,6 @@ Read() bool Close() ``` -```go -camera, err := vidio.NewCamera(0) - -defer camera.Close() - -// Stream the webcam -for camera.Read() { - frame := camera.FrameBuffer() - // Video processing here... -} -``` - ## `VideoWriter` The `VideoWriter` is used to write frames to a video file. The only required parameters are the output file name, the width and height of the frames being written, and an `Options` struct. This contains all the desired properties of the new video you want to create. @@ -117,18 +95,6 @@ type Options struct { } ``` -```go -w, h, c := 1920, 1080, 3 -options := vidio.Options{} // Will fill in defaults if empty - -writer, err := vidio.NewVideoWriter("output.mp4", w, h, &options) - -defer writer.Close() - -frame := make([]byte, w*h*c) // Create Frame as RGB Image and modify -writer.Write(frame) // Write Frame to video -``` - ## The `SetFrameBuffer(buffer []byte)` function For the `SetFrameBuffer()` function, the `buffer` parameter must have a length of at least `video.Width() * video.Height() * video.Depth()` bytes to store the incoming video frame. The length of the buffer is not checked. It may be useful to have multiple buffers to keep track of previous video frames without having to copy data around. @@ -142,12 +108,6 @@ Read(filename string, buffer ...[]byte) (int, int, []byte, error) Write(filename string, width, height int, buffer []byte) error ``` -```go -w, h, img, err := vidio.Read("input.png") - -err := vidio.Write("output.jpg", w, h, img) -``` - ## Examples Copy `input.mp4` to `output.mp4`. Copy the audio from `input.mp4` to `output.mp4` as well. @@ -186,7 +146,7 @@ writer, err := vidio.NewVideoWriter("output.mp4", webcam.Width(), webcam.Height( defer writer.Close() count := 0 -for webcam.Read() { +for webcam.Read() && count < 1000{ frame := webcam.FrameBuffer() for i := 0; i < len(frame); i += 3 { r, g, b := frame[i+0], frame[i+1], frame[i+2] @@ -199,9 +159,6 @@ for webcam.Read() { writer.Write(frame) count++ - if count > 1000 { - break - } } ``` diff --git a/videowriter.go b/videowriter.go index 330a947..e417b89 100644 --- a/videowriter.go +++ b/videowriter.go @@ -98,6 +98,10 @@ func NewVideoWriter(filename string, width, height int, options *Options) (*Vide writer := VideoWriter{filename: filename} + if options == nil { + options = &Options{} + } + writer.width = width writer.height = height writer.bitrate = options.Bitrate