2017-05-20 125 views
0

我试图创建一个简单的Ruby脚本通过庆典来运行ffmpeg的命令从一种格式转换的音频文件到另一个。的bash脚本使用Ruby和变量运行FFmpeg的命令

命令是ffmpeg -i (in file) -acodec libmp3lame -ab 64k -ar 48000 -ac 1 AAA_S00E00_Podcast.mp3

我有正确的权限Ruby脚本,我也可以拨打电话(用system ls呼叫测试它移动到ffmpeg的尝试之前)

#!/bin/ruby 

def mkmp3(one = "", two = "") 
    system "ffmpeg -i #{one} -acodec libmp3lame -ab 64k -ar 48000 -ac 1 #{two}.mp3" 
end 

mkmp3 

但是当我从bash的尝试转换称为session.flac文件叫它smoochie.mp3我回去:

mkmp3.rb ('session.flac', 'smoochie') 
bash: syntax error near unexpected token `'session.flac',' 

回答

1

错误是因为您使用括号()向您的ruby脚本添加参数。删除它们,错误将消失;其实,你只需要指定用空格隔开的字符串(否则你将得到逗号,作为一个字符串):

$ mkmp3.rb session.flac smoochie 

现在,使用那些你需要在你的脚本中添加ARGV参数,如这样的:

#!/bin/ruby 

def mkmp3(one = ARGV[0], two = ARGV[1]) 
    system "ffmpeg -i #{one} -acodec libmp3lame -ab 64k -ar 48000 -ac 1 #{two}.mp3" 
end 

mkmp3 

ARGV将包含您添加的参数字符串数组,可以考虑这个脚本(test.rb):

#!/bin/ruby 

puts ARGV.inspect 

执行该脚本:

$ ruby so.rb one two 

和输出将是:

["one", "two"] 

所以访问用数组索引的每个值(即ARGV[0]ARGV[1])。

1

通过调用带圆括号的值的脚本,不能将参数传递给脚本中的函数。您需要使用ARGV来处理脚本的参数。

我没有我的系统上ffmpeg,所以我将说明如何使用命令行参数用一个简单的函数,报告它的参数:

def my_function(first = "default1", second = "default2") 
    puts "Args were #{first} and #{second}" 
end 

if __FILE__ == $PROGRAM_NAME # only invoke with ARGV if script is invoked directly 
    my_function(*ARGV) # flatten the ARGV array and pass all values 
end 

主要生产时用不同的数字调用以下论据:

Desktop$ ruby argv_demo.rb 
Args were default1 and default2 
Desktop$ ruby argv_demo.rb one 
Args were one and default2 
Desktop$ ruby argv_demo.rb one two 
Args were one and two 
Desktop$ ruby argv_demo.rb one two three 
argv_demo.rb:1:in `my_function': wrong number of arguments (given 3, expected 0..2) (ArgumentError) 
    from argv_demo.rb:6:in `<main>'