bash:ffmpeg libx265 阻止输出

bash:ffmpeg libx265 阻止输出

我想使用新的编解码器 x265 (libx265) 对我的视频收藏进行编码。

为此,我在 Linux 下创建了一个可爱的 bash 脚本,它通常运行得很好!但有一点很奇怪:

我禁止ffmpeg的输出以我自己的方式回显。使用 x264(“旧”)一切正常。但一旦我使用 x265,我的终端上总是会得到这种输出:

x265 [info]: HEVC encoder version 1.7
x265 [info]: build info [Linux][GCC 5.1.0][64 bit] 8bpp
x265 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 Cache64
x265 [info]: Main profile, Level-2.1 (Main tier)
x265 [info]: Thread pool created using 2 threads
x265 [info]: frame threads / pool features       : 1 / wpp(5 rows)
x265 [info]: Coding QT: max CU size, min CU size : 64 / 8
x265 [info]: Residual QT: max TU size, max depth : 32 / 1 inter / 1 intra
x265 [info]: ME / range / subpel / merge         : hex / 57 / 2 / 2
x265 [info]: Keyframe min / max / scenecut       : 25 / 250 / 40
x265 [info]: Lookahead / bframes / badapt        : 20 / 4 / 2
x265 [info]: b-pyramid / weightp / weightb / refs: 1 / 1 / 0 / 3
x265 [info]: AQ: mode / str / qg-size / cu-tree  : 1 / 1.0 / 64 / 1
x265 [info]: Rate Control / qCompress            : CRF-28.0 / 0.60
x265 [info]: tools: rd=3 psy-rd=0.30 signhide tmvp strong-intra-smoothing
x265 [info]: tools: deblock sao

这是我使用 ffmpeg 编码视频的方式:

ffmpeg -i /input/file -c:v libx265 -c:a copy -loglevel quiet /output/file.mp4 <>/dev/null 2>&1

我以为

<>/dev/null 2>&1

-loglevel quiet

会这样做,但显然我错了。

我怎么解决这个问题?

感谢您的帮助!

答案1

解决方案

您需要添加一个额外的参数 ,如-x265-params log-level=xxxxx

ffmpeg -i /输入/文件 -c:v libx265 -c:a 副本 -loglevel 安静-x265-params 日志级别=安静\
        /output/file.mp4 <>/dev/null 2>&1

请注意,虽然 FFmpeg 选项为-loglevel,但 x25 选项为log-level,并且带有-之间;log​ level参见x265命令行选项文档。


解释

您编写的 FFmpeg 命令应该已经工作过(参见:ffmpeg 文档);但是,FFmpeg 似乎没有告诉 x265 编码器使用您告诉 FFmpeg 使用的日志级别。

因此,假设您希望整个 FFmpeg 命令安静地运行(即抑制来自主 FFmpeg 程序和 x265 编码器的消息),您需要为它们显式设置日志级别选项。

类似地,如果您有一个如下所示的 FFmpeg 命令:

ffmpeg -loglevel错误-stats -i“inputfile.xyz”-c:v libx265 -x265-params参数1=价值:参数2=价值输出文件.xyz

您可以将该log-level=error选项添加到 x265 参数列表中,如下所示:

ffmpeg -loglevel错误-stats -i“inputfile.xyz”-c:v libx265 -x265-params日志级别=错误:参数1=价值:参数2=价值……

答案2

<>/dev/null只会将标准输入和输出连接到/dev/null, 并2>&1应用 <>/dev/null,实际上什么都不做。

将其更改为 >/dev/null 2>&1 将执行您想要的操作。

相关内容