【发布时间】:2016-03-17 01:06:25
【问题描述】:
我正在尝试在 PowerShell(tm) 中捕获 ffmpeg 的输出,以获取有关某些 ogg 和 mp3 文件的一些元数据。但是当我这样做时:
ffmpeg -i file.ogg 2>&1 | sls GENRE
输出包括一堆没有我匹配的字符串“GENRE”的行:
album_artist : Post Human Era
ARTIST : Post Human Era
COMMENT : Visit http://posthumanera.bandcamp.com
DATE : 2013
GENRE : Music
TITLE : Supplies
track : 1
At least one output file must be specified
我猜编码有些不同。 ffmpeg 的输出是彩色的,所以输出中可能有颜色控制字符会破坏东西?或者,也许 ffmpeg 的输出与 powershell 的默认 UTF-16 不兼容?我不知道是否有另一种方法来重定向 stderr 并删除颜色字符或更改 stderr 的编码。
编辑: 奇怪的是,我也得到了不确定的输出。有时输出如上所示。有时使用完全相同的命令,输出是:
GENRE :
这更有意义,但仍然缺少我关心的部分(“音乐”)。
powershell 将某些内容解释为不是换行符的换行符。
【问题讨论】:
-
sls或Select-String正在返回一个匹配对象。如果这些都出现在同一个字符串中,则返回整个字符串。此外,您只是单独匹配 GENRE,因此如果您仅扩展匹配的数据,您最终会得到 GENRE,因为那是您的查询。 -
是的,但是当它是多行时,为什么整个块都算作一个匹配?这不是表示编码/控制字符问题吗?否则
sls将单独接收每一行... -
编辑了更多信息
-
这个
(ffmpeg -i file.ogg 2>&1).GetType().FullName的结果是什么 -
System.Object[]?
标签: powershell ffmpeg