フォルダ内の「.av​i」ファイルを一度に​まとめて「.mp4」​ファイルに変更するこ​とはできますか?

29 views (last 30 days)
non
non on 22 Dec 2023
Edited: Atsushi Ueno on 25 Dec 2023
「test01-1-1.avi」、「test01-1-2.avi」、「test01-1-3.avi」....「test03-3-3.avi」ファイルを参照して、同じ名前の「ファイル名.mp4」を作りたいです。
変換前の.aviファイルは1つのフォルダにまとめて入っています。
現在は、「現在のフォルダ」を指定して、以下のコードを実行することによって変換しています。指定するファイル名を変更しながら「.avi」→「.mp4」に変換することは可能でしょうか。もしくは、もしファイル名を指定せずに、フォルダ内の全ファイルに同じ処理をすることが可能でしたら、方法を教えていただけないでしょうか。
よろしくお願いいたします。
%% .avi→.mp4動画への変換
r_filename = 'test01-1-1.avi';
reader = VideoReader(r_filename); % AVI読み込み
w_filename = 'test01-1-1.mp4';
writer = VideoWriter(w_filename, 'MPEG-4'); % MP4書き出し
writer.Quality = 25; % 0から100の数値を指定
writer.FrameRate = reader.FrameRate;
open(writer)
while hasFrame(reader)% Convert AVI frame to MP4
img = readFrame(reader);
writeVideo(writer, img);
end
close(writer);

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 23 Dec 2023
Edited: Atsushi Ueno on 25 Dec 2023
ファイルデータストア fileDatastore を使う方法です。
filepath = uigetdir(pwd); % AVIファイルを含むフォルダを選択
fds = fileDatastore(filepath,'ReadFcn',@myread,'FileExtensions','.avi');
conveted_files = readall(fds);
%% .avi→.mp4動画への変換
function out = myread(r_filename) % <<<<<<< 【追記】変換処理を関数にする
% r_filename = 'test01-1-1.avi'; % <<<<<<< 【削除】
reader = VideoReader(r_filename); % AVI読み込み
w_filename = strrep(r_filename,'.avi','.mp4'); % <<<【変更】拡張子を置換
writer = VideoWriter(w_filename, 'MPEG-4'); % MP4書き出し
writer.Quality = 25; % 0から100の数値を指定
writer.FrameRate = reader.FrameRate;
open(writer)
while hasFrame(reader)% Convert AVI frame to MP4
img = readFrame(reader);
writeVideo(writer, img);
end
close(writer);
out = w_filename; % <<<<<<< 【追記】変換処理を関数にする
end % <<<<<<< 【追記】変換処理を関数にする
  1 Comment
non
non on 25 Dec 2023
Atsushi Ueno 様
的確なご回答をいただき、誠にありがとうございます。
教わったコードを用いて、フォルダ内の全「.avi」ファイルを自動で「.mp4」ファイルに変換できました。
また、「uigetdir」関数もこの機会に学べ、その便利さに今後も使っていきたいと思います。
この度はありがとうございました。

Sign in to comment.

More Answers (1)

Dyuman Joshi
Dyuman Joshi on 22 Dec 2023
It would be better to use video processing tools like VLC for this instead of MATLAB.
  1 Comment
non
non on 25 Dec 2023
Dear Dyuman Joshi
Thank you for your valuable advice. I just checked the website you sent me.
Actuially, I have never been familiar with video processing tools like VLC. I will now try and learn to use it.
Sincerely
Non

Sign in to comment.

Products


Release

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!