我正在尝试在gnuplot中制作流体矢量动画。要创建矢量值,我使用FORTRAN。我的FORTRAN子程序程序在名为vekdata.txt的txt文件中打印矢量数据,并使用gnuplot命令创建另一个名为plotvek.txt的文件。这个子程序在do循环中,所以每次迭代都会更新vekdata.txt。
所以我在徘徊如何制作动画,因为它及时发展?有一些简单的命令吗?因为它现在它在我的屏幕上打印了大量的图片。每张图片都有点不同,所以我知道代码有效。
do t=1,1000
call vektorplot(storu,storv,n,Re,t)
end do
open(21,access='sequential',file='plotvek.txt',status='unknown')
write(21,*)'set term png enhanced'
write(21,*)'# plotvek.txt'
write(21,*)'set output sprintf(''frame_%09d.png'',',t,')'
!animation commands
write(21,*)'set output sprintf("frame_%9d",'t,')'
close(21,status='keep')
call execute_command_line("gnuplot -persist plotvek.txt")
答案 0 :(得分:2)
gif
终端有一个制作gif动画的选项,但你必须在一次调用gnuplot脚本时将其全部绘制。
您可以尝试这样的事情:
$ makevectors | gnuplot
其中makevectors是你的fortran代码,只有它将所有内容打印到STDOUT,首先是
set term gif animation
set out 'vectors.gif'
do for [i=1:100] {plot '-' using 1:2:($3*30):($4*25) with vectors}
(加上其他设置),然后是100个数据集,每个数据集后都有一个EOF。最后打印
set out
(好吧,无论如何输出会关闭,但只是非常有序)并且你有一个带有那个gif动画的文件。
更新:我建议您将gnuplot命令移动到脚本文件,并在命令行makevectors | gnuplot script.gp
上调用gnuplot。这样,如果要更改线条颜色或其他内容,则不必总是重新编译程序。
答案 1 :(得分:1)
我在这里张贴另一种选择。
虽然我通常更喜欢动画gif为Karl answers,但有时候GIF很难租用,特别是对于很长的电影,它们往往会创建无响应的应用程序(浏览器或幻灯片演示文稿)。
基本上你每个帧写一个文件,然后创建一个电影。
在this link中你有gif和电影的例子。我将在这里回顾一下这些原则。
对于每个帧,您可以设置png终端和输出文件。作为fortran命令,这将是:
write(21,*)'set term png enhanced'
write(21,*)'# plotvek.txt'
write(21,*)'set output sprintf("frame_%09d.png",',n+1,')'
[...]
然后,一旦程序运行,您就可以创建一个电影:
mencoder mf://frame_%09d.png -mf fps=30 -ovc lavc -o my_video.avi
当然,mencoder有很多选项来调整你的电影。
mencoder
的另一种选择是ffmpeg
:
ffmpeg -framerate 1/5 -i frame_%09d.png -c:v libx264 -r 30 -pix_fmt yuv420p my_video.mp4