我有一個視頻序列(格式爲Y4M),我想用相同的GoP大小將其分割爲七段。 GoP = 8; 我怎樣才能使用FFMPEG在MatLab中做到這一點?在MatLab上用ffmpeg將未壓縮的視頻分割成片段?
0
A
回答
1
在Matlab中表示視頻的一種標準方式是4D矩陣。尺寸是高x寬x顏色通道x框架。一旦你有矩陣,通過指定你想要的幀的範圍很容易獲得時間片。
例如,你可以抓住每次8幀在表示視頻的for循環
%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)。
有跡象表明,尋找解決問題的對策其他幾個問題,包括
我還要檢查the Matlab File Exchange,但我沒有親身經歷與任何這些方法。
相關問題
- 1. ffmpeg:壓縮視頻?
- 2. 使用FFMPEG和JNI壓縮視頻
- 3. 使用ffmpeg從未壓縮的y4m視頻中提取幀
- 4. 在Android上使用FFMPEG庫進行視頻壓縮
- 5. 用ffmpeg解析分割視頻
- 6. FFmpeg視頻分割時的幀丟失
- 7. 使用ffmpeg的削減視頻成片
- 8. 如何通過ffmpeg獲取壓縮視頻的視頻大小?
- 9. 將視頻分割成matlab中的圖像
- 10. FFmpeg:如何高效地分割視頻?
- 11. Android將視頻圖片分割成部分
- 12. 將音頻文件分割成任意大小的片段
- 13. 如何在android中使用ffmpeg壓縮視頻文件?
- 14. 將視頻分割成幀/圖像
- 15. 將視頻分割成小塊
- 16. 如何在matlab中壓縮視頻並解壓縮,以及如何將視頻轉換爲其他格式
- 17. 將畫布分割成片段
- 18. 將wav文件分割成片段
- 19. 編寫未壓縮的AVI視頻
- 20. 用於轉換和壓縮視頻的ffmpeg庫
- 21. 在php中壓縮視頻並上傳
- 22. 如何在C#中將圖片分割成更小的片段?
- 23. Android - 視頻壓縮
- 24. ALAsset視頻壓縮
- 25. 在每個片段上處理壓縮
- 26. 如何用ffmpeg正確壓縮單個圖像視頻?
- 27. 用c壓縮avi視頻#
- 28. 啓用UIImagePickerController視頻壓縮
- 29. 使用MediaCodec壓縮視頻
- 30. ffmpeg庫在壓縮後旋轉視頻Android
所以,你想要每個片段8幀長?對不起,我不熟悉你的術語。 – Cecilia
是的@Cecilia。 – SenDjasni
你想使用FFMPEG的任何特定原因? Matlab有加載和處理視頻的其他方法。 – Cecilia