我的目录每个都有几个短(约10秒).avi
个视频。有人知道如何按字母顺序连接特定目录中的所有视频以形成一个视频吗?
我会尝试使用VLC,但我必须为超过一千个不同的目录执行此操作。我没有意识到这会很困难,但却无法在谷歌上找到任何东西。
更多具体信息:
对于我想要执行此操作的每个目录,所有视频都保证为:
.avi
,MJPG
,20fps
,640x480 resolution
,no audio
,between less than 1 second to 15 seconds long
我想要播放单个视频文件,就像我背靠背播放个人一样。
如果我遗漏了其他任何细节,请告诉我。
组合的视频旨在全部放入同一目录,并提供给另一个人使用Matlab执行自己的视频处理。他们将通过交叉相关或机器学习来尝试识别视频中的特定对象。
答案 0 :(得分:1)
您可以结合使用VideoReader
和VideoWriter
(有关更多示例,请参阅doc)。按字母顺序迭代视频文件,并将它们“流式化”为新文件。
我将一些(未经测试的)代码汇总在一起。我不知道这有多快:
cd(VIDEO_DIRECTORY);
tmp = dir('*.avi'); % all .avi video clips
videoList = {tmp.name}'; % sort this list if necessary! sort(videoList) might work
% create output in seperate folder (to avoid accidentally using it as input)
mkdir('output');
outputVideo = VideoWriter(fullfile(workingDir,'output/mergedVideo.avi'));
% if all clips are from the same source/have the same specifications
% just initialize with the settings of the first video in videoList
inputVideo_init = VideoReader(videoList{1}); % first video
outputVideo.FrameRate = inputVideo_init.FrameRate;
open(outputVideo) % >> open stream
% iterate over all videos you want to merge (e.g. in videoList)
for i = 1:length(videoList)
% select i-th clip (assumes they are in order in this list!)
inputVideo = VideoReader(videoList{i});
% -- stream your inputVideo into an outputVideo
while hasFrame(inputVideo)
writeVideo(outputVideo, readFrame(inputVideo));
end
end
close(outputVideo) % << close after having iterated through all videos