【问题标题】:video normalization with ffmpeg使用 ffmpeg 进行视频标准化
【发布时间】:2016-10-09 10:49:05
【问题描述】:

是否可以使用 ffmpeg 脚本将视频亮度标准化为完整的动态范围?我一直在尝试像这样使用 lutyuv 来做到这一点:

ffmpeg -i input.mp4 -vf lutyuv=y='((val - minval)*255)/(maxval - minval)' output.mp4

但输出视频与输入完全相同。 (我确信输入没有使用它的完整动态范围)

谁能帮帮我?

非常感谢

【问题讨论】:

    标签: video image-processing ffmpeg


    【解决方案1】:

    试试

    ffmpeg -i input.mp4 -vf scale=out_range=full -color_range 2 -pix_fmt yuvj420p output.mp4
    

    我相信,由于您的输入被标记为受限并且没有为输出设置范围,FFmpeg 可能会重新调整过滤器输出。

    带有out_range=fullscale 过滤器将值扩展为0-255color_range 2 将输出标记为全范围。 -pix_fmt yuvj420p 只是作为安全措施放在那里,以防 FFmpeg 看到像素格式是默认的 yuv420p 并自动压缩范围。 yuvj420pyuv420p 全系列。这以前是一个问题,但现在不应该是。

    【讨论】:

    • 感谢您的解释,实际上我尝试了您的命令,但没有任何改变!如果您想查看dropbox.com/sh/9ooyxrslles5nii/AABr1PlOBuVAZdvxPT8FDeVWa?dl=0,这里是视频的链接
    • 如果你运行以下命令,你会看到你的 out3 mp4 是全范围的:ffmpeg -ss 5 -i out3.mp4 -vf signalstats,metadata=print -vframes 1 -f null - 在读数中查看lavfi.signalstats.YMAX 的值。它是 255。这是全范围的。问题在这里看起来是伽玛。使用ffmpeg -i input.mp4 -vf "eq=gamma=1/2.2" output.mp4
    • 是的,YMAX 是 255 但 YMIN 不是 0,有没有让 YMIN 为 0 以使用整个动态范围?
    • 如果源视频没有黑色像素,那么即使在全范围内也不会有Y=0的像素。您可以尝试使用 pp 滤镜强制扩大亮度,即pp=al:f
    • 我还想知道它是否可以使用以下方法扩展动态范围:-vf lutyuv=y='((val - YMIN) * 255) / (YMAX - YMIN))。但是有没有办法从 signalstats 命令中只提取 YMIN 和 YMAX 的值而不是打印所有的统计信息?
    猜你喜欢
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2020-09-24
    • 2020-12-24
    • 1970-01-01
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多