ruby - 如何将 aviglitch 脚本应用于文件夹中的每个文件?
问题描述
我正在努力在文件夹中的每个文件上使用 aviglitch 脚本。我需要它来 1. 打开每个文件并执行更改 2. 导出每个新文件,并在原始文件名前添加一个 glitch_
以下是相关的代码行:
Dir.glob("*.avi") do |filename|
a = AviGlitch.open '#{filename}'
o.output 'glitch_#{filename}'
end
该脚本给了我以下错误:
“C:\Users\Admin\Documents\Projects\VIDEO\0000_BLENDER SCRIPT RENDER\cig_fast_2frames\8frames>cig_fast_2frames_glitch.rb Traceback(最近一次通话):7:来自 C:/Users/Admin/Documents/Projects/VIDEO/0000_BLENDER SCRIPT RENDER/cig_fast_2frames/8frames/cig_fast_2frames_glitch.rb:6:in <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 SCRIPT RENDER/cig_fast_2frames/8frames/cig_fast_2frames_glitch.rb:8:in 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:innew'
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 - #{filename} (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
谢谢
本尼
解决方案
您正在尝试在单引号字符串 ( '
) 中进行字符串插值,这不起作用,因为它们不允许字符串插值或转义序列(例如\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
另请参阅双引号与单引号
推荐阅读
- docker - 如何在 Alpine 容器中安装 SSHFS?
- kubernetes - 在 Kubernetes 中部署同一软件的多个版本
- python-3.x - 如何使用多处理包在 python 中并行化 for 循环?
- django - 如何在 django 的 db 中保存选定的单选按钮
- windows - Windows 应用程序数据加密,只能由相同的数字签名应用程序解密
- groovy - Groovy 从地图中删除空元素
- cassandra - 如何使用 Kubernetes 部署我的 Cassandra 集群
- rxjs - 将新的 rxjs observable 合并到现有的订阅 observable 中
- abap - 完全拒绝abap中的GET事件
- r - 如何查找一个向量中不在另一个向量中的元素(不使用 setdiff)