Как сделать анимацию в MATLAB и сохранить видео в формате mp4

Часто учёным намного проще анализировать данные, когда они представлены в виде анимации. Сегодня мы сделаем простую анимацию в MATLAB и сохраним её в виде видео-файла в формате MPEG-4.
Для построения картинок мы будем использовать NCEP/NCAR Reanalysis с этого сайта. Я скачал ежедневные значения температуры воздуха у поверхности для 2018 года. Если хотите себе такие же, прямая ссылка вот.
Для начала загрузим наши данные в рабочую область Matlab:
air = ncread('air.sig995.2018.nc','air')-273.15; lat = ncread('air.sig995.2018.nc','lat'); lon = ncread('air.sig995.2018.nc','lon');
Обратите внимание, что мы вычли 273.15 из значений температуры, для того чтобы перевести их в градусы Цельсия (исходные данные в Кельвинах). Для последующих построений нам нужно будет перевести векторы lat и lon в матрицы:
[lon,lat]=ndgrid(lon,lat);
Вектор с датами проще будет создать вручную:
t = datetime(2018,01,01):datetime(2018,12,31);
Теперь можно построить карту. Пока, всё что мы делаем и дальнейшие построения карт не должны вызывать сложностей, так как всё уже было описано здесь на сайте. Однако на всякий случай сделаю некоторые краткие комментарии.
Строим карту (подложку) и ориентируем её так, чтобы по центру располагался 180 градус долготы:
worldmap('world') setm(gca,'Origin', [0 180 0])
Строим карту распределения температуры для первой даты нашего массива и добавляем на рисунок colorbar:
geoshow(lat,lon,air(. 1),'displaytype','texture') colorbar
Строим для ориентировки береговую черту и закрашиваем её белым цветом (белый только контур, сами берега прозрачные):
geoshow('landareas.shp','FaceColor','none','EdgeColor','w')
В качестве заголовка к рисунку используем дату:
title(datestr(t(1)))
Ну и при желании заменяем цветовую шкалу (сработает только если у вас установлен пакет cmocean):
cmocean('thermal')
Все строки кода для построения выглядят так:
worldmap('world') setm(gca,'Origin', [0 180 0]) geoshow(lat,lon,air(. 1),'displaytype','texture') geoshow('landareas.shp','FaceColor','none','EdgeColor','w') cmocean('thermal') colorbar title(datestr(t(1)))
и приводят к следующему результату:

Допустим, вам нужно посмотреть на картину в динамике, т.е. в нашем случае — посмотреть, как изменяется температура со временем. Можно создать цикл и просто смотреть, как постепенно строятся картинки одна за одной. Если у вас не слишком мощный компьютер, то этот вариант будет выглядеть как анимация. Если же у вас мощный компьютер, которые строит карты слишком быстро, вы можете в середине цикла поставить паузу. Например, это может выглядеть так:
for n =1:365 worldmap('world') setm(gca,'Origin', [0 180 0]) geoshow(lat,lon,air(. n),'displaytype','texture') geoshow('landareas.shp','FaceColor','none','EdgeColor','w') caxis([-80 40]) cmocean('thermal') colorbar title(datestr(t(n))) pause(0.5) end
В данном коде pause(0.5) означает паузу 0.5 секунд. Кроме того, я добавил caxis([-80 40]) — это жёсткое ограчинение границ цветов, чтобы они не менялись от карты к карте.
Однако, такая анимация годится только для быстрого анализа при работе с данными. Если же вы хотите получить анимацию в виде видео-файла, то сделать это можно следующим образом. На каждом витке цикла построенная картинка записывается в виде отдельного кадра при помощи специальной функции getframe. Например, мы создадим переменную frame, куда запишем все 365 построенных карт.
for n =1:10 worldmap('world') setm(gca,'Origin', [0 180 0]) geoshow(lat,lon,air(. n),'displaytype','texture') geoshow('landareas.shp','FaceColor','none','EdgeColor','w') caxis([-80 40]) cmocean('thermal') colorbar title(datestr(t(n))) frame(n) = getframe(gcf); close(gcf) end
Обратите внимание, что кроме строки frame(n) = getframe(gcf) мы добавили ещё и close(gcf). В нашем случае это было делать не обязательно, так как функция worldmap закроет предыдущую карту в начале каждого цикла. Однако вы можете столкнуться с проблемой, когда все ваши кадры останутся открытыми, так что пусть будет.
Теперь, для того, чтобы записать анимацию в видео-файл нужно сделать следующее. Во-первых создать видеофайл и присвоить резултат этого действия какой-нибудь переменной (у нас это v), с помощью которой мы затем будем к нему обращаться:
v = VideoWriter('air_temp2018.mp4','MPEG-4');
При желании можно внести некоторые изменения в свойства файла, настроить всё под себя. Например, мне часто приходится менять частоту кадров:
v.FrameRate = 10; %10 frames per second
После всех настроек осталось открыть ваш созданный видео-файл, записать туда все кадры и закрыть файл:
open(v) writeVideo(v,frame) close(v)
Целиком весь код выглядит так:
for n =1:365 worldmap('world') setm(gca,'Origin', [0 180 0]) geoshow(lat,lon,air(. n),'displaytype','texture') geoshow('landareas.shp','FaceColor','none','EdgeColor','w') caxis([-80 40]) cmocean('thermal') colorbar title(datestr(t(n))) frame(n) = getframe(gcf); close(gcf) end v = VideoWriter('air_temp2018.mp4','MPEG-4'); v.FrameRate = 10; open(v) writeVideo(v,frame) close(v)

Чтобы не пропустить новые материалы с рецептами по работе с океанологическими данными, подпишитесь на канал в Telegram: https://t.me/koldunovaleksey
Данные для заметки:
NCEP Reanalysis data provided by the NOAA/OAR/ESRL PSD, Boulder, Colorado, USA, from their Web site at https://www.esrl.noaa.gov/psd/
Kalnay et al., The NCEP/NCAR 40-year reanalysis project, Bull. Amer. Meteor. Soc., 77, 437-470, 1996
saveas
saveas( fig , filename ) сохраняет фигуру или Simulink ® блок-схема задана fig зарегистрировать filename . Задайте имя файла как вектор символов или строку, которая включает расширение файла, например, ‘myplot.jpg’ . Расширение файла задает формат файла. Если вы не задаете расширение, то saveas сохраняет фигуру в файл FIG. Чтобы сохранить текущую фигуру, задайте fig как gcf .
saveas( fig , filename , formattype ) создает файл с помощью заданного формата файла, formattype . Если вы не задаете расширение файла в имени файла, например, ‘myplot’ , затем стандартное расширение, соответствующее заданному формату автоматически, добавляет к имени файла. Если вы задаете расширение файла, оно не должно совпадать с форматом. saveas использование formattype для формата, но сохранил файл с заданным расширением. Таким образом расширение файла не может совпадать с фактическим используемым форматом.
Примеры
Сохранение фигуры как файла PNG
Создайте столбчатую диаграмму и сохраните ее как файл PNG.
x = [2 4 7 2 4 5 2 5 1 4]; bar(x); saveas(gcf,'Barchart.png')
Сохранение фигуры как файла EPS
Создайте столбчатую диаграмму и сохраните ее как файл EPS. Задайте ‘epsc’ драйвер, чтобы сохранить его в цвете.
x = [2 4 7 2 4 5 2 5 1 4]; bar(x); saveas(gcf,'Barchart','epsc')
saveas сохраняет столбчатую диаграмму как Barchart.eps .
Сохранение диаграммы Simulink как файла BMP
Сохраните Диаграмму Simulink под названием ‘sldemo_tank’ как файл BMP. Используйте get_param получить указатель схемы. Необходимо было установить Simulink, чтобы запустить этот код.
sldemo_tank fig = get_param('sldemo_tank','Handle'); saveas(fig,'MySimulinkDiagram.bmp');
Входные параметры
fig — Фигурируйте, чтобы сохранить
изобразите объект | Диаграмма Simulink
Фигурируйте, чтобы сохранить в виде объекта фигуры или Диаграммы Simulink. Если вы задаете другие типы графических объектов, такой как оси, то saveas сохраняет родительскую фигуру в объект.
Пример: saveas(gcf,’MyFigure.png’)
Чтобы сохранить Диаграмму Simulink, используйте get_param получить указатель схемы. Например, сохраните блок-схему под названием ‘sldemo_tank’ .
sldemo_tank saveas(get_param('sldemo_tank','Handle'),'MySimulinkDiagram.bmp');
filename FileName
вектор символов | строка
Имя файла в виде вектора символов или строки с или без расширения файла.
Пример: ‘Bar Chart’
Пример: ‘Bar Chart.png’
Если вы задаете расширение файла, то saveas использует связанный формат. Если вы задаете расширение файла и дополнительно задаете formattype входной параметр, затем saveas использование formattype для формата и сохранил файл с заданным именем файла. Таким образом расширение файла не может совпадать с фактическим используемым форматом.
Можно задать любое расширение, соответствующее формату файла. Эта таблица приводит некоторые расширения общего файла.
MATLAB ® Файл FIG (недопустимый для Диаграмм Simulink)
Файл FIG MATLAB и код MATLAB, который открывает фигуру (недопустимый для Диаграмм Simulink)
Переносимая сетевая графика
Уровень 3 EPS, черный и белый
Формат переносимых документов
Windows ® битовый массив
Портативный битовый массив
Портативная пиксельная карта
Изображение TIFF, сжатое
Типы данных: char | string
formattype FileFormat
‘fig’ | ‘m’ | ‘mfig’ | формат файла растрового изображения | формат файла векторной графики
Формат файла в виде одной из этих опций:
- ‘fig’ — Сохраните фигуру как файл фигуры MATLAB с .fig расширение. Открыть фигуры, сохраненные с .fig расширение, используйте openfig функция. Этот формат не допустим для Диаграмм Simulink.
- ‘m’ или ‘mfig’ — Сохраните фигуру как файл фигуры MATLAB и дополнительно создайте файл MATLAB, который открывает фигуру. Чтобы открыть фигуру, запустите файл MATLAB. Эта опция не допустима для Диаграмм Simulink.
- Формат файла растрового изображения — Задает формат как одну из опций растрового изображения в таблице, Форматах растрового изображения.
- Формат файла векторной графики — Задает формат как одну из опций векторной графики в таблице, Форматах Векторной графики.
Файл растрового изображения
Растровые изображения содержат основанное на пикселе представление фигуры. Размер сгенерированного файла зависит от фигуры, формата и вашего системного разрешения. Растровые изображения широко используются веб-браузерами и другими приложениями та графика отображения. Однако они не поддерживают прозрачность или масштабируются хорошо, и вы не можете изменить отдельные графические объекты (такие как линии и текст) в других графических приложениях.
Форматы растрового изображения
| Опция | Формат | Расширение файла по умолчанию |
|---|---|---|
| ‘jpeg’ | 24-битный JPEG | .jpg |
| ‘png’ | 24-битный PNG | .png |
| ‘tiff’ | TIFF, 24-битный (сжатый) | .tif |
| ‘tiffn’ | 24-битный TIFF (не сжатый) | .tif |
| ‘meta’ | Расширенный метафайл (только Windows) | .emf |
| ‘bmpmono’ | Монохром BMP | .bmp |
| ‘bmp’ | 24-битный BMP | .bmp |
| ‘bmp16m’ | 24-битный BMP | .bmp |
| ‘bmp256’ | 8-битный BMP (256 цветов, использует фиксированную палитру), | .bmp |
| ‘hdf’ | 24-битный HDF | .hdf |
| ‘pbm’ | PBM (простой формат) 1-битный | .pbm |
| ‘pbmraw’ | PBM 1-битный (формат .raw) | .pbm |
| ‘pcxmono’ | 1-битный PCX | .pcx |
| ‘pcx24b’ | PCX 24-битный цвет (три 8-битных плоскости) | .pcx |
| ‘pcx256’ | PCX 8-битный более новый цвет (256 цветов) | .pcx |
| ‘pcx16’ | PCX более старый цвет (EGA/VGA, с 16 цветами) | .pcx |
| ‘pgm’ | PGM (простой формат) | .pgm |
| ‘pgmraw’ | PGM (формат .raw) | .pgm |
| ‘ppm’ | PPM (простой формат) | .ppm |
| ‘ppmraw’ | PPM (формат .raw) | .ppm |
Файл векторной графики
Файлы векторной графики хранят команды, которые перерисовывают фигуру. Этот тип формата масштабируется хорошо, но может привести к большому файлу. В некоторых случаях формат векторной графики не может произвести правильное 3-D расположение объектов. Некоторое интенсивное редактирование поддержки приложений форматов векторной графики, но другие не поддерживает редактирование вне изменения размеров диаграммы. Лучшая практика должна внести все необходимые изменения, в то время как ваша фигура находится все еще в MATLAB.
Как правило, saveas использует средство отображения Живописцев при генерации файлов векторной графики. Для некоторых комплексных фигур, saveas использует OpenGL ® средство отображения вместо этого. Если это использует средство отображения OpenGL, то файл векторной графики содержит встроенное изображение, которое может ограничить степень, до которой можно отредактировать изображение в других приложениях. Кроме того, если saveas использует средство отображения OpenGL, чтобы сгенерировать файл, затем прозрачность не поддерживается. Гарантировать тот saveas использует средство отображения Живописцев, установите Renderer свойство для фигуры к ‘painters’ .
Если вы устанавливаете Renderer свойство для фигуры, затем saveas использование то средство отображения. В противном случае это выбирает соответствующее средство отображения. Однако, если saveas выбирает средство отображения, которое отличается от средства отображения, используемого для фигуры по отображению, затем некоторые детали сохраненной фигуры могут отличаться от отображенной фигуры. При необходимости можно заставить отображенную фигуру и сохраненную фигуру использовать то же средство отображения путем установки Renderer свойство для фигуры.
Форматы векторной графики
| Опция | Формат | Расширение файла по умолчанию |
|---|---|---|
| ‘pdf’ | Полная страница цвет формата переносимых документов (PDF) | |
| ‘eps’ | Инкапсулированный формат PostScript ® (EPS) Уровень 3, черный и белый | .eps |
| ‘epsc’ | Инкапсулированный формат PostScript (EPS) цвет Уровня 3 | .eps |
| ‘eps2’ | Инкапсулированный формат PostScript (EPS) Уровень 2, черный и белый | .eps |
| ‘epsc2’ | Инкапсулированный формат PostScript (EPS) цвет Уровня 2 | .eps |
| ‘meta’ | Расширенный Метафайл (только Windows) | .emf |
| ‘svg’ | SVG (масштабируемая векторная графика) | .svg |
| ‘ps’ | Полностраничный PostScript (PS) Уровень 3, черный и белый | .ps |
| ‘psc’ | Полностраничный PostScript (PS) цвет Уровня 3 | .ps |
| ‘ps2’ | Полностраничный PostScript (PS) Уровень 2, черный и белый | .ps |
| ‘psc2’ | Полностраничный PostScript (PS) цвет Уровня 2 | .ps |
Примечание
Только PDF и форматы PS используют PaperOrientation свойство фигуры и left и bottom элементы PaperPosition свойство. Другие форматы игнорируют эти значения.
Сохранить график в хорошем качестве
Здравствуйте!
Может кто-нибудь сталкивался с проблемой, что при копировании графиков построенных в Matlab’е в отчеты/презентации с последующим уменьшением их размеров сильно ухудшается качество графиков (плывут штриховые линии, и т. д.). Каким образом улучшить качество графиков, которые строит программа?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Сма Vestel, Ищу фото модуля в хорошем качестве
Ищу фото модуля в хорошем качестве. Особенно области выделенной на фото. .

Нужен большой пакет красивых экзотических рыбок в хорошем качестве
Нужен большой пакет красивых экзотических рыбок в хорошем качестве. Кто знает где достать дайте.
Обработка видео, как записать видео в хорошем качестве с минимальным размером?
Здравствуйте! Имеется видеозапись с текстом сверху и снизу. Можно ли как то убрать данный текст.

Сохранить число в качестве текста в отдельном файле
Нужно сохранить число в качестве текста в отдельном файле. Не знаю что делать 🙁 Заранее спасибо!
5234 / 3562 / 378
Регистрация: 02.04.2012
Сообщений: 6,470
Записей в блоге: 17
Annza, когда я писал диплом, то для своих плакатов формата А1 графики сохранял в векторном формате wmf или emf, тогда они при масштабировании не искажаются
Документация
Сохраните график как файл векторной графики или растровую графику
![]()
Можно сохранить графики как изображения или как файлы векторной графики с помощью или кнопки экспорта на панели инструментов осей, или путем вызова exportgraphics функция. При решении между двумя типами содержимого рассмотрите качество, размер файла и требования форматирования для документа, в который вы помещаете файл.
Изображения поддерживаются в большинстве приложений. Они полезны для представления графических изображений и объединяют поверхности. Однако, потому что они составили из пикселей, они не всегда масштабируются хорошо, когда вы распечатываете или отображаете их на других устройствах, которые имеют различные разрешения. В некоторых случаях вы можете должны быть сохранить образ с достаточным количеством разрешения, чтобы удовлетворить определенным требованиям к уровню качества. Более высокие файлы разрешения имеют тенденцию быть больше, который может сделать их трудными совместно использовать в электронном письме или загрузке на сервер. Это может также затруднить, чтобы отредактировать линии и текст в изображении, не вводя артефакты.
Файлы векторной графики содержат инструкции для проведения линий, кривых и многоугольников. Они полезны для представления содержимого, состоящего из линий, кривых и областей сплошного цвета. Эти файлы содержат высококачественное содержимое, которое масштабируемо к любому размеру. Однако некоторые поверхности и сетчатые графики являются слишком сложными, чтобы быть представленными с помощью векторной графики. Некоторое интенсивное редактирование поддержки приложений файлов векторной графики, в то время как другая поддержка приложений, только изменяющая размер графики.
Независимо от того, сохраняете ли вы свои графики как изображения или как файлы векторной графики, можно получить лучшие результаты путем завершения содержимого в MATLAB ® фигурируйте прежде, чем сохранить ваш файл.
Сохраните графики в интерактивном режиме
![]()
Чтобы сохранить график с помощью интерактивных способов управления, используйте кнопку экспорта на панели инструментов осей. Панель инструментов появляется, когда вы наводите на правый верхний угол осей. Кнопка экспорта поддерживает три формата изображения (PNG, JPEG и TIFF), а также файлы PDF, которые могут содержать изображения или векторную графику, в зависимости от содержимого в осях.
![]()
Например, создайте столбчатую диаграмму. Сохраните график в файл путем наведения на кнопку экспорта на панели инструментов осей и выбора первого элемента в выпадающем списке.
bar([1 11 7 8 2 2 9 3 6])