我想使用新的编解码器 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
将执行您想要的操作。