如何使用ffmpeg进行无损编码 - libx265

tea*_*ast 5 ffmpeg lossless libx265

我想使用ffmpeg,使用x265编码器在HEVC/mkv视频中转换16位灰度图像而不会丢失.我使用的是monochrome12配置文件.我的第一步是将图像转换为yuv格式:

ffmpeg -f image2 -i "C:\DATA FOLDER\images%d.png" video.yuv
Run Code Online (Sandbox Code Playgroud)

我尝试将其转换为.mkv文件,无损地:

ffmpeg video.yuv video.mkv -c:v libx265 -x265-params "profile=monochrome12:crf=0:lossless=1:preset=veryslow:qp=0" 
Run Code Online (Sandbox Code Playgroud)

但我明白了

Unrecognized option '-lossless' 
Error splitting the argument list : Option not found
Run Code Online (Sandbox Code Playgroud)

当我不写无损= 1时,一切都是正确的,但我没有设法通过这种方式获得无损视频.

谢谢您的帮助.

mwf*_*ley 6

如果我做一些改变,它对我有用:

ffmpeg -i video.avi -c:v libx265 \
    -x265-params "profile=monochrome12:crf=0:lossless=1:preset=veryslow:qp=0" \
    video.mkv
Run Code Online (Sandbox Code Playgroud)

这就像您提供的命令,只是我使用不同的输入格式,并预先-i将其标记为输入文件。

我还将输出文件名放在输出选项之后的末尾,否则它们不会应用,并且我在输出中收到此警告:

在命令行上找到了尾随选项。

我不认为你给出的命令会导致你得到的错误。

libx265 不会在它无法识别的参数上给出错误,但会显示如下警告:

[libx265 @ 0x563e4520e740] 未知选项:lessloss。

请注意,ffmpeg 参数仅使用一个破折号。我可以通过尝试添加--lossless(用两个破折号)作为 ffmpeg 的参数来重现您的确切错误:

ffmpeg --lossless -i video.avi video.mkv
Run Code Online (Sandbox Code Playgroud)

无法识别的选项“-lossless”。

分割参数列表时出错:未找到选项

  • 像这样格式化的命令对我来说效果很好,谢谢!但请注意,“qp=0”和“crf=0”可以省略,因为根据 [x265 文档](https://x265.readthedocs.io/en/default/lossless.html),“lossless”意味着“ qp=4`(*“在 HEVC 中,只有 QP=4 才是真正的无损量化,因此当无损编码时,x265 在其 RDO 决策中内部使用 QP=4。”*),并且速率控制也被禁用。 (2认同)