我怎样才能让 ffmpeg 更安静/更简洁?

bla*_*lah 198 ffmpeg

默认情况下,ffmpeg 会向 stderr 发送大量消息:构建时间、构建方式、编解码器等。

我怎样才能让它更安静?

我已经尝试过-v 0(并且-v 10因为文档只是腼腆地说Set the logging verbosity level.没有说明输入范围是什么) - 仍然不安静。

我试过了-loglevel quiet——仍然不安静。

我应该提到,我正在寻找“更安静”,而不是“永远没有输出”。如果有错误,我想看到它,但我不需要每次都听到 ffmpeg 的配置。单身的。时间。

Hug*_*ues 180

ffmpeg -hide_banner -loglevel error
Run Code Online (Sandbox Code Playgroud)

在当前答案下方的评论中提到了这一点。

该选项-hide_banner于 2013 年底推出 - https://lists.ffmpeg.org/pipermail/ffmpeg-devel/2013-December/152349.html

-loglevel warning 导致更详细的输出,因为它显示所有警告消息

-loglevel panic 是最不详细的输出(甚至忽略错误消息)但没有记录。

  • 最佳答案,但是选项 -show-banner 比隐藏它更好 (9认同)
  • 也许也添加`-nostats`? (7认同)
  • **不要使用**'-loglevel panic'。ffmpeg [文档](https://ffmpeg.org/ffmpeg.html#Generic-options) 说“这目前没有用于任何事情”。**相反,**建议使用“-loglevel 警告”:“将显示与可能不正确或意外事件相关的任何消息。” (7认同)
  • 我希望产生与“-loglevel info -nostats”相反的效果。我希望它显示编码进度,但不显示文件的内部元数据。 (4认同)
  • 我建议 *-loglevel fatal* 而不是 -loglevel panic,它应该打印任何导致 ffmpeg 退出的错误。恐慌甚至更极端,可能并没有真正以有意义的方式得到支持(仅限断言),它警告打印出在某些情况下可能超出预期的各种信息(即您只想完成它而不关心的信息)如果媒体以某种方式出现故障)。 (3认同)

Ale*_*lec 130

我还没有测试过,但我在手册页中看到了一个选项:

ffmpeg -loglevel panic [rest of your ffmpeg stuff]
Run Code Online (Sandbox Code Playgroud)

理论上应该这样做,所以只记录严重的错误

  • 除了降低冗长级别之外,使用 `-hide_banner` 将是一个很好的折衷方案。 (23认同)
  • 通过管道将其传送到位桶:>/dev/null 2>&1 (7认同)
  • 即使使用`-loglevel panic`,对我来说它只是减少了一点输出——它仍然打印版本信息、流映射、配置选项,(甚至是进度信息!)......有什么想法吗?我可能不得不提到它是来自最新 svn trunk 的自编译版本。 (6认同)
  • 除了已经说过的所有内容之外,-nostats 将禁用进度输出。 (6认同)
  • @rogerdpack 适用于大多数程序,但 ffmpeg 将其所有文本输出放入 stderr,而不是 stdout(这样做是为了将编码器输出通过管道传输到其他程序),因此将 stdout 重定向到 /dev/null 不会做任何有用的事情。 (4认同)

小智 69

这里有源代码中的日志级别(FFmpeg 版本 0.10.2.git)

const struct { const char *name; int level; } log_levels[] = {
        { "quiet"  , AV_LOG_QUIET   },
        { "panic"  , AV_LOG_PANIC   },
        { "fatal"  , AV_LOG_FATAL   },
        { "error"  , AV_LOG_ERROR   },
        { "warning", AV_LOG_WARNING },
        { "info"   , AV_LOG_INFO    },
        { "verbose", AV_LOG_VERBOSE },
        { "debug"  , AV_LOG_DEBUG   },
    };
Run Code Online (Sandbox Code Playgroud)

  • 尽管 URL 往往会随着时间的推移而改变,但最好将它们也包含为您的答案的来源。例如,目前这被记录在 https://ffmpeg.org/ffmpeg.html#toc-Generic-options 并且即使这个 URL 发生变化,读者也会知道在哪里查看文档。 (7认同)

小智 26

我成功地使用了以下内容(撰写本文时最新的 FFMPEG 版本):

-nostats -loglevel 0
Run Code Online (Sandbox Code Playgroud)

然后在我的使用场景中绝对安静。

  • “-nostats”就是我正在寻找的。它将抑制进度输出(例如,在非终端上下文中有用)。 (3认同)

qub*_*dup 21

ffmpeg -loglevel error [other commands]
Run Code Online (Sandbox Code Playgroud)

这将隐藏横幅并仅显示错误。使用-loglevel warning,如果你想看到的警告。

在 Ffmpeg 3.0.2 中测试。

文档

-loglevel [repeat+]loglevel | -v [重复+]日志级别

设置库使用的日志记录级别。添加“repeat+”表示重复的日志输出不应压缩到第一行,“最后一条消息重复n次”行将被省略。“重复”也可以单独使用。如果单独使用“repeat”,并且没有设置先前的日志级别,则将使用默认的日志级别。如果给出了多个日志级别参数,则使用“重复”不会更改日志级别。loglevel 是包含以下值之一的字符串或数字:

'安静,-8'

什么都不显示;安静。

'恐慌,0'

只显示可能导致进程崩溃的致命错误,例如断言失败。这目前不用于任何事情。

'致命的,8'

只显示致命错误。在这些错误之后,该过程绝对无法继续。

'错误,16'

显示所有错误,包括可以从中恢复的错误。

'警告,24'

显示所有警告和错误。将显示与可能不正确或意外事件相关的任何消息。

'信息,32'

在处理过程中显示信息性消息。这是警告和错误的补充。这是默认值。

'详细,40'

与 相同info,但更详细。

'调试,48'

显示所有内容,包括调试信息。

'跟踪,56'

默认情况下,程序会记录到 stderr,如果终端支持着色,则使用颜色来标记错误和警告。日志着色可以禁用设置环境变量 AV_LOG_FORCE_NOCOLORNO_COLOR,或者可以强制设置环境变量AV_LOG_FORCE_COLOR。环境变量NO_COLOR的使用已被弃用,并将在以下 FFmpeg 版本中删除。


小智 9

以下在 macOS 上对我有用:

ffmpeg -v quiet
Run Code Online (Sandbox Code Playgroud)

或仅查看进度:

ffmpeg -v quiet -stats
Run Code Online (Sandbox Code Playgroud)

  • 这正是我正在寻找的。我在脚本中使用 ffmpeg,需要查看它是否正常工作,但不需要有关输入和输出流等的所有信息。 (2认同)

Roe*_*aar 5

ffmpeg -loglevel error -hide_banner -nostats

只是错误,没有别的。

我个人最喜欢这个;

ffmpeg -loglevel warning -hide_banner -stats

它只给出警告和错误,但也显示工作进度。