ffmpeg 命令 >> out.log 2>>error.log

ffmpeg 命令 >> out.log 2>>error.log

我在跑:

ffmpeg -i rtmp://localhost/test -crf 20 -t 00:10:00 ./video/hq/1503411993750.mp4 >> out.log 2>>error.log

并期望>> out.log 2>>error.log结果为stdouttoout.logstderrto error.log

当我在此过程中跟踪这两个文件时,我得到了意想不到的结果。的内容error.log似乎包含stdout.我不断收到:

frame=191 fps=190 q=26.0 size=229kB time=00:00:04.63 bitrate=404.1
frame=227 fps=149 q=26.0 size=273kB time=00:00:05.83 bitrate=382.8
frame=242 fps=120 q=26.0 size=288kB time=00:00:06.33 bitrate= 372.6
frame=258 fps=101 q=26.0 size=306kB time=00:00:06.86 bitrate= 365.2
frame=273 fps=89 q=26.0 size=324kB time=00:00:07.36 bitrate= 360.1
# ... continued

上面的内容不应该在吗out.log?是我编写命令的方式有问题还是 ffmpeg 有什么不寻常的地方?

答案1

显然,中的所有诊断消息ffmpeg都发送到stderr,因此问题不在于语法。

- 正常运行的 ffmpeg 任务似乎将其所有输出(即使没有错误)发送到 STDERR,即使没有错误。

这取决于“输出”的含义:ffmpeg 将所有诊断消息(“控制台输出”)发送到 stderr,因为它的实际输出(媒体流)可以发送到 stdout,并且将诊断消息与媒体流混合会阻止输出。

从:https://lists.ffmpeg.org/pipermail/ffmpeg-user/2014-March/020605.html


还有一件事我不确定。如果上述情况为真,则不应out.log包含视频数据,而应始终为空。

(我想这是因为我已经指定它要发送到./video/hq/1503411993750.mp4

相关内容