Ruby如何知道ffmpeg转换是否成功?

How to know if ffmpeg conversion succeeded in Ruby?

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

# Convert to MP3
conversion_result = `ffmpeg -i "#{Refile::cache.directory}/#{self.file.id}" -f mp3 "#{_path_to_mp3}" 2>&1`

转换后conversion_result的例子如下:

"ffmpeg version N-74748-gbaeb8f5 Copyright (c) 2000-2015 the FFmpeg developers\n built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04)\n configuration: --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-avresample --disable-debug --enable-nonfree --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --disable-decoder=amrnb --disable-decoder=amrwb --enable-libpulse --enable-libdcadec --enable-libfreetype --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-libvorbis --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libspeex --enable-libass --enable-avisynth --enable-libsoxr --enable-libxvid --enable-libvo-aacenc --enable-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 / 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\nInput #0, mov,mp4,m4a,3gp,3g2,mj2, from '../mey_attachments/cache/25888dc028deaabaee4d4de19d4726573860dbce0b907131e9919d294113':\n Metadata:\n major_brand : 3gp4\n minor_version : 0\n compatible_brands: isom3gp4\n creation_time : 2015-09-01 16:34:01\n Duration: 00:00:08.57, start: 0.000000, bitrate: 426 kb/s\n Stream

0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 48 kb/s (default)\n Metadata:\n creation_time : 2015-09-01 16:34:01\n

handler_name : SoundHandle\nOutput #0, mp3, to '/tmp/Voice00045.mp3':\n Metadata:\n major_brand : 3gp4\n minor_version : 0\n compatible_brands: isom3gp4\n TSSE : Lavf56.40.101\n Stream #0:0(eng): Audio: mp3 (libmp3lame), 44100 Hz, mono, fltp (default)\n Metadata:\n creation_time : 2015-09-01 16:34:01\n handler_name : SoundHandle\n encoder : Lavc56.59.100 libmp3lame\nStream mapping:\n Stream #0:0 -> #0:0 (aac (native) -> mp3 (libmp3lame))\nPress [q] to stop, [?] for help\nsize= 67kB time=00:00:08.56 bitrate= 64.5kbits/s \nvideo:0kB audio:67kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.465427%\n"

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

是否需要命令的全文输出?

因为如果不是,我建议您在命令以退出代码 0(成功)终止时使用 system command that will return true,如果失败则使用 false 或 nil。

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

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