我在跑:
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
结果为stdout
toout.log
和stderr
to 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
)