无法阻止 ffmpeg 输出统计数据

无法阻止 ffmpeg 输出统计数据

我正在编写一个 bash 脚本来加速播客。其中,我有:

ffmpeg -nostats -hide_banner -loglevel panic -y -i normal/$channel/$filename -filter:a "atempo=1.3" fast/$channel/$filename

但是,当我运行这个程序时,我得到很多这样的输出:

stream #0:
   keyframe=1
   duration=0.026
   dts=336.196  pts=336.196
   size=836

难道国旗不-nostats应该阻止这种行为吗?根据文档

-stats(global)

打印编码进度/统计信息。默认情况下,它是打开的,要明确禁用它,您需要指定-nostats

此外,尽管我有,我仍然可以从 ffmpeg 获得横幅输出-hide_banner

-hide_banner

禁止打印横幅。

所有 FFmpeg 工具通常都会显示版权声明、构建选项和库版本。此选项可用于禁止打印此信息。

我不明白为什么 ffmpeg 忽略了这些标志,或者(更有可能)我做错了什么。

更新

我也尝试过-loglevel panic,它仍然输出所有内容。

我还得到了这样的红色输出:

00000060  b3 2e 0d 77 68 54 73 a9 e3 79 c7 65 ca 85 45 64 ...whTs..y.e..Ed
00000070  30 5c 94 ef 4b 02 be 67 4e 71 e4 39 18 5c 23 a3 0\..K..gNq.9.\#.
00000080  d6 54 ec 8a 79 59 e1 74 31 52 a4 5f 52 2f 48 5f .T..yY.t1R._R/H_
00000090  15 2a a5 5f 2f e7 c2 c3 7a 85 da bf 2e 18 ca d2 .*._/...z.......
000000a0  8d ad ab 69 d3 e8 c5 7c 98 7c 8c 79 34 c6 9a 2d ...i...|.|.y4..-
000000b0  10 fe 69 91 73 23 9e 3c 7e fc b3 eb e4 95 7c 92 ..i.s#.<~.....|.
000000c0  b4 b4 21 bc b4 5e 68 43 d7 fb 4b 4a 1a be 87 b4 ..!..^hC..KJ....
000000d0  f5 e0 e0 01 00 1f e4 40 33 bd ff fc 59 ae 86 94 [email protected]...
000000e0  30 60 30 f6 7f c1 12 4b c8 43 c9 2c a4 74 bc 3c 0`0....K.C.,.t.<
000000f0  f0 40 00 1d ab f1 9f 8c 9a 60 30 8c 6c c8 40 d5 .@.......`0.l.@.

我有更多的输出粘贴箱

我在跑步ffmpeg version 3.0.2-1~trusty

答案1

您唯一需要的标志是:

-loglevel 0

这应该会抑制所有终端输出。如果此方法无效,请确保您使用的是最新版本的 FFmpeg(撰写本文时为 4.0)。

答案2

对死版的解决方案表示歉意;这是唯一现存的描述我所面临的情况的线程,它来自于我试图排除脚本中后续错误时的情况。

触发此输出的一种方式是ffmpeg可能正在消耗来自的字节stdin

以下内容将导致stream #0打印输出;它还将导致后续文件转换失败。

find . -name '*.ogg' | while read filename; do
    ffmpeg -loglevel 0 -nostats -i "$filename" "$filename.mp3"
done

该问题是由于 ffmpegstdin默认使用;使用-nostdin关闭此行为

从手册页中:

-stdin
    Enable interaction on standard input. On by default unless standard input is
    used as an input. To explicitly disable interaction you need to specify
    "-nostdin".

    Disabling interaction on standard input is useful, for example, if ffmpeg is
    in the background process group. Roughly the same result can be achieved with
    "ffmpeg ... < /dev/null" but it
    requires a shell.

相关内容