当我想重定向 ffprobe 命令的 stdout 时,我大吃一惊:通常的stdout > (file)不起作用。经过几次网络搜索,我找到了答案:我必须使用stdout > (file) 2>&1,这样就可以了:https://stackoverflow.com/questions/29680391/ffmpeg-command-line-write-output-to-a-text-file。
什么可以解释为什么将输出重定向到文件的常用方法对我不起作用:我使用的 ffprobe 版本? shell?还是其他什么?
~$ ffprobe --version
ffprobe version 5.1.6-0+deb12u1 Copyright (c) 2007-2024 the FFmpeg developers
built with gcc 12 (Debian 12.2.0-14)
或者由程序员来选择重定向的行为方式,如下面这个评论所解释的:
@Apostolos it's up to the programmer, you may want to keep normal
output separate from error output.
否。shell 选择重定向的行为方式。这几乎是所有 shell 的标准行为 - 标准输出是
>
默认重定向的内容,作为第一个/主流。程序员可以自行选择将特定数据输出到何处。例如
在 ffmpeg 编程所用的 C 语言中,改为输出到标准错误。
因为 ffmpeg 开发人员的设计选择是将大部分内容输出到ffprobe 中的标准错误流中。您可以在这里找到有关它的报告和原因的简短说明:
这有点误用流,因为更具体的流与错误无关。
在 Linux(和类 Unix 系统)中,
stdout
(标准输出)和stderr
(标准错误)是进程使用的两个单独的输出流。stdout
(文件描述符 1)是程序写入其常规输出的默认流。默认情况下,它会打印到终端,但可以重定向到文件或其他命令。stderr
(文件描述符 2)用于错误消息,确保它们与正常输出分开。这可以防止错误与管道中的有效数据混合。将两个流合并为一个文件:
更多技术信息请点击这里