Ruby on rails 如何知道ffmpeg转换是否在Ruby中成功?

Ruby on rails 如何知道ffmpeg转换是否在Ruby中成功?,ruby-on-rails,ruby,ffmpeg,ruby-2.2,Ruby On Rails,Ruby,Ffmpeg,Ruby 2.2,我在rails应用程序中运行ffmpeg命令将音频文件转换为mp3: # Convert to MP3 conversion_result = `ffmpeg -i "#{Refile::cache.directory}/#{self.file.id}" -f mp3 "#{_path_to_mp3}" 2>&1` 转换后,转换结果的示例如下所示: “ffmpeg版本N-74748-gbaeb8f5版权所有(c)2000-2015 ffmp

我在rails应用程序中运行ffmpeg命令将音频文件转换为mp3:

# Convert to MP3
conversion_result = `ffmpeg -i "#{Refile::cache.directory}/#{self.file.id}" -f mp3 "#{_path_to_mp3}" 2>&1`
转换后,
转换结果的示例如下所示:

“ffmpeg版本N-74748-gbaeb8f5版权所有(c)2000-2015 ffmpeg 开发人员\n使用GCC4.8(Ubuntu 4.8.4-2ubuntu1~14.04)构建\n 配置:--extra-libs=-ldl--prefix=/opt/ffmpeg --enable avresample--disable debug--enable nonfree--enable gpl--enable-version3--enable libopencore amrnb--enable libvorbis--disable decoder=amrwb--enable libpulse--enable libdcadec--enable-libfreetype--enable-libx264--enable-libx265--enable libfdk aac--enable libvorbis--enable-libmp3lame--enable lib libopus--启用libvpx--启用libspex--启用libass--启用avisynch--启用libsoxr--启用libxvid--启用libvo aacenc--启用libvidstab\n libavutil 54.31.100/54.31.100\n libavcodec 56.59.100/56.59.100\n libavformat 56.40.101/56.40.101\n libavdevice 56.4.100/56.4.100\n libavfilter 5.40.100\n libavresample 2.1.0/2.1.0\n libswscale 3.1.101/ 3.1.101\n libswresample 1.2.101/1.2.101\n libpostproc 53.3.100/53.3.100\n输入#0,mov,mp4,m4a,3gp,3g2,mj2,来自“../mey_附件/缓存/2588dc028deaabee4de14de19d4726573860dbce0b907131e9919d294113”:\n 元数据:\n主要\u品牌:3gp4\n次要\u版本:0\n 兼容品牌:isom3gp4\n创建时间:2015-09-01 16:34:01\n 持续时间:00:00:08.57,开始时间:0.000000,比特率:426kb/s\n流

0:0(英文):音频:aac(LC)(mp4a/0x6134706D),44100 Hz,单声道,fltp,48 kb/s(默认值)\n元数据:\n创建时间:2015-09-01 16:34:01\n 处理器名称:SoundHandle\nOutput#0,mp3,至 “/tmp/Voice00045.mp3”:\n元数据:\n主要品牌:3gp4\n 次要\u版本:0\n兼容\u品牌:isom3gp4\n TSSE: Lavf56.40.101\n流#0:0(英语):音频:mp3(libmp3lame),44100 Hz, mono,fltp(默认)\n元数据:\n创建时间:2015-09-01 16:34:01\n处理器\u名称:SoundHandle\n编码器:Lavc56.59.100 libmp3lame\n流映射:\n流#0:0->#0:0(aac(本机)->mp3 (libmp3lame))\n按[q]停止,[?]获取帮助\n大小=67kB 时间=00:00:08.56比特率=64.5kbits/s\n视频:0kB音频:67kB 字幕:0kB其他流:0kB全局头:0kB多路复用开销: 0.465427%\n“


如何确保命令执行后转换成功?

是否需要命令的全文输出

因为如果不是,我建议您在命令终止时使用if,退出代码为0(success),如果失败,则使用false或nil

conversion_success = system %Q[ffmpeg -i "#{Refile::cache.directory}/#{self.file.id}" -f mp3 "#{_path_to_mp3}" 2>&1]

请注意,在示例中,我对字符串使用了
%Q[…]
,以避免必须转义
s,同时还能够对命令进行字符串插值。

现在;我使用系统命令,并使用;
if$?.success?&&File.exists?(\u path\u to\u mp3)检查结果
。这是正确的方法吗?好的,我没有想到这个方法。你可以简单地坚持你原来的解决方案并使用
$?。成功?
,或者你使用系统,然后你有两个选项(检查系统的返回值或使用
$?。成功?
),我想这并不重要,实际上更像是一种风格。我认为这没有对错之分。你能举例说明如何使用
系统
检查结果吗?在我提供的示例中,转换成功
要么是
要么是
。只有
是所以你可以使用
if conversion\u success
或者
if system(…)
尽管我更喜欢第一个,因为它更干净一些。。。