在 MatLab 上使用 ffmpeg 将未压缩的视频分割成片段?
Split an uncompressed video into segments with ffmpeg on MatLab?
我有一个视频序列(格式 Y4M),我想将它分成几个具有相同 GoP 大小的片段。
政府 = 8;
我怎样才能在 MatLab 中使用 FFMPEG 做到这一点?
在 Matlab 中表示视频的一种标准方式是 4D 矩阵。尺寸为高 x 宽 x 颜色通道 x 帧。一旦有了矩阵,就可以很容易地通过指定您想要的帧范围来获取时间片。
例如,您可以在for循环中一次抓取8帧
%Loads video as 4D matrix
v = VideoReader('xylophone.mp4');
while hasFrame(v)
video = cat(4, video, readFrame(v));
end
%iterate over the length of the movie with step size of 8
for i=1:8:size(video, 4)-8
video_slice = video(:,:,:,i:i+7); %get the next 8 frames
% do something with the 8 frames here
% each frame is a slice across the 4th dimension
frame1 = video_slice(:,:,:,1);
end
%play movie
implay(video)
表示视频的另一种最常见的方式是在结构数组中。您可以索引具有一定范围值的结构数组以切片 8 帧。我示例中的实际帧值存储在结构元素 cdata
中。根据您的结构,元素可能有不同的名称;查找具有 3d 矩阵值的元素。
% Loads video as structure
load mri
video = immovie(D,map);
%iterate over the length of the movie with step size of 8
for i=1:8:size(video, 4)-8
video_slice = video(i:i+7); %get the next 8 frames
% do something with the 8 frames here
% to access the frame values use cdata
frame1 = video_slice(1).cdata
end
%play movie
implay(video)
棘手的部分是您的视频格式。 Matlab 的 VideoReader
which is the most common way to load video. It is also not supported by the FFmpeg Toolbox
不支持 Y4M,后者仅提供少数媒体格式(MP3、AAC、mpeg4、x264、动画 GIF)。
还有其他几个问题在寻找解决这个问题的方法,包括
- how to read y4m video(get the frames) file in matlab
- How to read yuv videos in matlab?
我也会检查 the Matlab File Exchange,但我没有使用这些方法的个人经验。
我有一个视频序列(格式 Y4M),我想将它分成几个具有相同 GoP 大小的片段。 政府 = 8; 我怎样才能在 MatLab 中使用 FFMPEG 做到这一点?
在 Matlab 中表示视频的一种标准方式是 4D 矩阵。尺寸为高 x 宽 x 颜色通道 x 帧。一旦有了矩阵,就可以很容易地通过指定您想要的帧范围来获取时间片。
例如,您可以在for循环中一次抓取8帧
%Loads video as 4D matrix
v = VideoReader('xylophone.mp4');
while hasFrame(v)
video = cat(4, video, readFrame(v));
end
%iterate over the length of the movie with step size of 8
for i=1:8:size(video, 4)-8
video_slice = video(:,:,:,i:i+7); %get the next 8 frames
% do something with the 8 frames here
% each frame is a slice across the 4th dimension
frame1 = video_slice(:,:,:,1);
end
%play movie
implay(video)
表示视频的另一种最常见的方式是在结构数组中。您可以索引具有一定范围值的结构数组以切片 8 帧。我示例中的实际帧值存储在结构元素 cdata
中。根据您的结构,元素可能有不同的名称;查找具有 3d 矩阵值的元素。
% Loads video as structure
load mri
video = immovie(D,map);
%iterate over the length of the movie with step size of 8
for i=1:8:size(video, 4)-8
video_slice = video(i:i+7); %get the next 8 frames
% do something with the 8 frames here
% to access the frame values use cdata
frame1 = video_slice(1).cdata
end
%play movie
implay(video)
棘手的部分是您的视频格式。 Matlab 的 VideoReader
which is the most common way to load video. It is also not supported by the FFmpeg Toolbox
不支持 Y4M,后者仅提供少数媒体格式(MP3、AAC、mpeg4、x264、动画 GIF)。
还有其他几个问题在寻找解决这个问题的方法,包括
- how to read y4m video(get the frames) file in matlab
- How to read yuv videos in matlab?
我也会检查 the Matlab File Exchange,但我没有使用这些方法的个人经验。