более быстрый способ сделать фильм в gnuplot - PullRequest
0 голосов
/ 24 ноября 2018

Я думаю, что мы использовали gnuplot на протяжении десятилетий.Но все равно нет хорошего способа получить хороший вывод видео с gnuplot, я прав?Я сделал около 30 000 изображений (я должен был сделать это также с хорошим качеством, чтобы получить четкость видео), затем использовал ffmpeg для создания видео:

ffmpeg -f image2 -r 10.0 -i capture.%d.png -qscale 1 filename.mp4

Но некоторое время я застреваюмежду или это занимает слишком много времени.Нам всегда может потребоваться вывод видео с высоким качеством и небольшим размером файла, почему никто не пытается что-либо предпринять или есть какой-либо другой способ сделать вывод видео из gnuplot?Я действительно изо всех сил пытаюсь сделать видео высокого качества с gnuplot.

1 Ответ

0 голосов
/ 24 ноября 2018

Вы можете направить вывод gnuplot напрямую в ffmpeg, не сохраняя изображения на жестком диске.Для этого вам нужно указать ffmpeg, какой формат и разрешение он должен ожидать от канала, поскольку теперь он не может угадать его отдельно от расширения и т. Д.Вот пример:

gnuplot animation.plt | ffmpeg -f png_pipe -s:v 800x600 -i pipe: out.mp4

Я использовал код из здесь с некоторыми незначительными изменениями.

animation.plt

#!/usr/bin/gnuplot
#
# Creating an animation gif of the Bessel function
# NOTE: this files creates multiple png images, the gif file is then created
# using GIMP
#
# AUTHOR: Hagen Wierstorf

reset
set terminal pngcairo size 800,600 enhanced font 'Verdana,10'

# color definitions
set palette rgb 3,9,9

unset key; unset colorbox; unset border; unset tics
set lmargin at screen 0.03
set bmargin at screen 0
set rmargin at screen 0.97
set tmargin at screen 1

set parametric
# Bessel function, which is moving in time
bessel(x,t) = besj0(x) * cos(2*pi*t)
# calculate the zeros for the bessel function (see Watson, "A Treatise on the
# Theory of Bessel Functions", 1966, page 505)
n = 6 # number of zeros
k = (n*pi-1.0/4*pi)
u_0 = k + 1/(8*k) - 31/(384*k)**3 + 3779/(15360*k)**5
set urange [0:u_0]
set vrange[0:1.5*pi]
set cbrange [-1:1]
set zrange[-1:1]

set isosamples 200,100
set pm3d depthorder
set view 40,200

# initializing values for the loop and start the loop
t = 0
end_time = 1
#system('mkdir -p animation')
load 'bessel.plt'

bessel.plt

# bessel loop
t = t + 0.02
#outfile = sprintf('animation/bessel%03.0f.png',50*t)
#set output outfile
splot u*sin(v),u*cos(v),bessel(u,t) w pm3d ls 1
if(t<end_time) reread;

Дает вам видео, которое выглядит следующим образом.(Это уменьшенное и транскодированное gif только для демонстрационных целей) compressed gif

Вы также можете поиграться с параметрами кодировщика ffmpeg.здесь используется только конфигурация видеокодера по умолчанию.

...