Starting with Rvision
version 0.7.0, users can create video stacks. A video
stack (VideoStack
) is essentially a list of videos with similar properties (in
particular, the same dimensions) that behaves almost entirely like a single
continuous Video
object. For that reason, VideoStack
objects are
particularly useful for applications requiring the combination of multiple video
files and/or Video
objects. For instance, video stacks can greatly simplify
the merging of two separate video files into a single one, or the processing of
a continuous sequence that was split into multiple files during recording.
In this vignette, we will briefly describe how to create and manipulate
VideoStack
objects. Since their operation is very similar to that of Video
objects, using VideoStack
objects should not require much additional learning
for a regular user of Rvision
.
You can create a video stack by passing to the videoStack
function a
combination of existing Video
objects and/or character strings pointing toward
the location of video files on your computer. For instance:
# Find the path to the Balloon.mp4 video provided with Rvision path_to_video <- system.file("sample_vid/Balloon.mp4", package = "Rvision") # Open the video file stream my_video <- video(filename = path_to_video) # Create a video stack from a character string and a Video object my_video_stack <- videoStack(path_to_video, my_video)
The paths to video files and the existing Video
objects can be passed as
separate arguments, or as a list or a vector. If a path is provided, the
corresponding video will be opened before being added to the stack. If a Video
object is provided, a pointer to the original Video
object will be added to
the stack (i.e., they will share the same reader head and any modification to
the position of the reader head in the stack will be applied to the original
object, and vice versa).
A video stack can contain as many videos as desired, with the only restriction that they should all have the same dimensions.
Once a VideoStack
object is not required anymore, it can be released from
memory as follows:
release(my_video_stack)
Once a VideoStack
object is created, it can be used as a Video
object with
the same number of frames as the sum of the frames in the Video
objects that
it contains. For instance, to read a specific frame of the stack, you can use
the readNext()
and readFrame()
functions, as you would normally do with
Video
objects:
# Capture the next available frame from the my_video_stack object created earlier my_image <- readNext(my_video_stack) # Capture frame 100 from the my_video_stack object created earlier my_image <- readFrame(my_video_stack, 100)
At any time, you can check the state of the video stack as follows:
# What is the current number of videos in the stack? length(my_video_stack) # What is the number of frames in the stack? nframes(my_video_stack) # What is the index of the next frame available? frame(my_video_stack) # What are the dimensions of the queue? dim(my_video_stack) nrow(my_video_stack) ncol(my_video_stack) # What are the frame rates of the videos in the stack? fps(my_video_stack) # What are the codecs of the videos in the stack? codec(my_video_stack)
Finally, you can access individually, add, or replace videos in the stack as follows:
# Access the first video in the stack individually my_video_stack[[1]] # Replace the first video in the stack my_video_stack[[1]] <- my_video # Add a video at the end of the stack my_video_stack[[length(my_video_stack) + 1]] <- my_video # Remove a video from the stack my_video_stack[[2]] <- NULL
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.