gpt4 book ai didi

matlab - 在 MatLab 上使用 ffmpeg 将未压缩的视频分割成片段?

转载 作者:行者123 更新时间:2023-12-04 23:15:41 38 4
gpt4 key购买 nike

我有一个视频序列(格式 Y4M),我想将其拆分为具有相同 GoP 大小的多个片段。
GoP = 8;
如何在 MatLab 中使用 FFMPEG 做到这一点?

最佳答案

在 Matlab 中表示视频的一种标准方法是 4D 矩阵。尺寸是高度 x 宽度 x 颜色 channel 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 不支持 Y4M这是加载视频的最常见方式。 FFmpeg Toolbox 也不支持它。它只提供几种媒体格式(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 ,但我对这些方法中的任何一种都没有个人经验。

    关于matlab - 在 MatLab 上使用 ffmpeg 将未压缩的视频分割成片段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42727725/

    38 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com