【问题标题】:Encoding of string returned from 'system' command从“系统”命令返回的字符串的编码
【发布时间】:2013-06-19 19:45:04
【问题描述】:

我正在尝试在 Linux 机器上读取从 ffmpeg 返回的一些元数据。我正在使用 system 命令从 Matlab 执行此操作。我对 regexp 的调用未能找到我正在寻找的内容(它在 Windows 上运行正常)。我正在解析的行如下所示:

时长:06:33:42.17,开始:0.000000,比特率:65 kb/s

我正在通过这样的调用解析持续时间:

dur = regexp(w, '持续时间: [[0-9]+:]+.[0-9]+','匹配');

w 保存从调用 ffmpeg 返回的字符串。结果是dur 为空,表示正则表达式无法匹配查询。如果我保存 w 并将其加载到 Windows 机器上,我会看到这一点(我截断了该行,但您可以理解):

[0m[0;39m[0m[0;39m[0m[0;39m 持续时间:[0m[0;39m[0m[0;39m[0m[0;39m06:33:42.17[0m[0; 39m[0m[0;39m[0m[0;39m

这让我怀疑存在一些编码问题。 有什么想法吗?

【问题讨论】:

  • 您对system 命令的确切调用是什么?您如何将输出输入到w
  • [s, w] = system([ffmpeg ' -i ' fnm]);,其中ffmpeg 保存可执行文件的完整路径,fnm 是输入音频文件。

标签: regex linux string matlab character-encoding


【解决方案1】:

那些看起来像终端控制代码; ANSI 颜色代码更具体。 (请参阅http://en.wikipedia.org/wiki/ANSI_escape_code#Colors )如果 ffmpeg 有这样的选项,您可能需要考虑传递一个标志或其他东西来抑制它们。 (通常,程序会自动检测 stdout 是否为交互式终端并自行判断)

【讨论】:

猜你喜欢
  • 2011-04-05
  • 2014-05-25
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 2012-05-14
  • 1970-01-01
相关资源
最近更新 更多