У меня есть скрипт gnuplot (plot.script), который вызывается как
C:> ffmpeg -i '.\my_awesome_audio_file.wav' -filter_complex aformat=channel_layouts=mono -acodec pcm_s16le -ar 4000 -f data - | gnuplot -e "fileout='plot';fileformat='png';wid=500;" .\plot.script
Теперь я бы хотел, чтобы переменная filein по умолчанию использовалась для стандартного ввода, если она не передается в качестве аргумента. Это потому, что я хочу иметь возможность вызывать этот скрипт как однострочную команду с генерацией данных ffmpeg, а также как пошаговую процедуру.
Моя идея заключалась в том, чтобы использовать
if(!exists('filein')){
filein = '-';
}
но это выдает warning: Skipping data file with no valid points
если я распечатаю файл переменных данных, я получу -
(я ожидал что-то вроде стандартного ввода).
это скрипт plot.script
:
if(!exists('filein')){
filein = '-';
}
if (!exists("hei")){
hei = 4444;
}
if (!exists("wid")){
wid = 5555;
}
if(!exists("fileformat")){
fileformat = 'png';
}
if(!exists("fileout")){
fileout = 'risultato';
}
fileout = fileout . '.' . fileformat;
if(!exists("dataformat")){
dataformat = '%int16';
}
if(fileformat eq 'png'){
set terminal png transparent size larghezza,altezza;
}else{
set terminal fileformat size wid,hei;
}
set output fileout;
unset key;
unset tics;
unset border;
set lmargin 0;
set rmargin 0;
set tmargin 0;
set bmargin 0;
print filein;
plot filein binary filetype=bin format=dataformat endian=little array=1:0 with lines linecolor "0x009900";
Но я также хочу вызвать эту команду по команде: сгенерировать файл данных:
c:> ffmpeg -i '.\my_awesome_audio_file.wav' -filter_complex aformat=channel_layouts=mono -acodec pcm_s16le -ar 4000 -f data audio.dat
построить данные:
c:> gnuplot -e "filein='audio.dat';fileout='plot';fileformat='png';wid=500;" .\plot.script