Как применить скрипт aviglitch к каждому файлу в папке? - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь использовать скрипт aviglitch для каждого файла в папке.Мне нужно было бы: 1. открыть каждый файл и выполнить изменения 2. экспортировать каждый новый файл с добавленным глитчем_ перед исходным именем файла

Вот соответствующие строки кода:

Dir.glob("*.avi") do |filename|

a = AviGlitch.open '#{filename}'

o.output 'glitch_#{filename}'

end

Скрипт выдает мне следующую ошибку:

"C: \ Users \ Admin \ Documents \ Projects \ VIDEO \ 0000_BLENDER RENDER SCRIPT RENDER \ cig_fast_2frames \ 8frames> cig_fast_2frames_glitch.rb Трассировка (последний последний вызов): 7: от C: / Users / Admin / Документы / Проекты / VIDEO / 0000_BLENDER RENDER SCENDIP / cig_fast_2frames / 8frames / cig_fast_2frames_glitch.rb: 6: в <main>' 6: from C:/Users/Admin/Documents/Projects/VIDEO/0000_BLENDER SCRIPT RENDER/cig_fast_2frames/8frames/cig_fast_2frames_glitch.rb:6:in glob '5: от C: / Users / Admin / Documents / Projects / VIDEO/ 0000_BLENDER RENDER / cig_fast_2frames / 8frames / cig_fast_2frames_glitch.rb: 8: в block in <main>' 4: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/aviglitch-0.1.5/lib/aviglitch.rb:46:in open '3: из C: /Ruby25-x64/lib/ruby/gems/2.5.0/gems/aviglitch-0.1.5/lib/aviglitch.rb:46:in new' 2: from C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/aviglitch-0.1.5/lib/aviglitch/base.rb:18:in инициализировать '1: из C: /Ruby25-x64/lib/ruby/gems/2.5.0/gems/aviglitch-0.1.5/lib/aviglitch/base.rb: 18: in open' C:/Ruby25-x64/lib/ruby/gems/2.5.0/gems/aviglitch-0.1.5/lib/aviglitch/base.rb:18:in initialize ': нет такого файла или каталога @ rb_sysopen - # {имя_файла} (Errno :: ENOENT) "

Если я запускаю скрипт с набранными вручную именами файлов, он работает.Что я делаю не так?

Вот весь код:

require 'aviglitch'

Dir.glob("*.avi") do |filename|

a = AviGlitch.open '#{filename}'       # Rewrite this line for your file.
rep = 3
inc_rep = 0
inc_fr = 1
framecount = 0
d = []
a.frames.each_with_index do |f, i|
  d.push(i) if f.is_deltaframe?     # Collecting non-keyframes indices.
end
q = a.frames[0, 5]                  # Keep first key frame.

6.times do
  x = a.frames[d[framecount], 1]  # Select a certain non-keyframe.
  q.concat(x * rep)            # Repeat the frame n times and concatenate with q.
framecount = framecount + inc_fr
rep = rep + inc_rep
end
o = AviGlitch.open q                # New AviGlitch instance using the frames.
o.mutate_keyframes_into_deltaframes!(range = nil)
o.output 'glitch_#{filename}'

end

Спасибо

Бенни

1 Ответ

0 голосов
/ 10 июня 2018

Вы пытаетесь выполнить интерполяцию строк внутри строк с одинарными кавычками ('), что не работает, поскольку они не допускают интерполяцию строк или экранирующие последовательности (например, \n).

Использованиевместо двойных кавычек ("):

Dir.glob("*.avi") do |filename|
  a = AviGlitch.open(filename)  # no string interpolation needed here, just passing the filename is enough
  o.output "glitch_#{filename}"
end

См. также Двойные и одинарные кавычки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...