ffmpeg 为啥输出视频对比度/亮度太亮?

     2023-03-07     261

关键词:

【中文标题】ffmpeg 为啥输出视频对比度/亮度太亮?【英文标题】:ffmpeg why is output video contrast / brightness too bright?ffmpeg 为什么输出视频对比度/亮度太亮? 【发布时间】:2021-12-31 17:14:52 【问题描述】:

我有一个 .mov 文件,我通过 ffmpeg 运行它来创建 HLS 段/块。但是,当我播放 HLS 视频时,它太亮了。

为了进行完整性检查,我通过FlowPlayer 处理管道运行了相同的 .mov 视频文件,结果相同,输出视频太亮了!

我有很多视频。大多数都没有这个问题,但是一些(并且只有一些).mov 文件会出现这个问题。

一个损坏的视频流报告(完整输出见下文):

Stream #0:0[0x1](und): Video: hevc (Main 10) (hvc1 / 0x31637668), yuv420p10le(tv, bt2020nc/bt2020/arib-std-b67), 1920x1080, 8507 kb/s, 29.98 fps, 29.97 tbr, 600 tbn (default)

工作视频流报告(完整输出见下文):

Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160, 45457 kb/s, 29.99 fps, 29.97 tbr, 600 tbn (default)

这与hevc v h264(不管它们的意思)有关吗?

顺便说一句,我将原生 HTML5 视频播放器与 hls.js 结合使用来播放视频。

我该如何解决这个问题? TIA

这是我的ffmpeg 命令:

ffmpeg -i "rgb.mov" \
  -v warning -preset ultrafast -g 59.96 -sc_threshold 0 \
  -map 0:0 -map 0:0 \
  -s:v:0 1920x1080 -c:v:0 libx264 -b:v:0 4521k \
  -s:v:1 1920x1080 -c:v:1 libx264 -b:v:1 7347k \
  -var_stream_map "v:0 v:1" \
  -master_pl_name master.m3u8 -f hls \
  -hls_time 6 -hls_list_size 0 -hls_playlist_type vod \
  -hls_segment_filename "hls/v%v/chunk%d.ts" "hls/v%v/index.m3u8"

这里有一些屏幕截图显示了原始视频与输出视频的对比。

原文:

输出:

对于问题视频ffmpeg -i "rgb.mov" -hide_banner给出:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'rgb.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 0
    compatible_brands: qt
    creation_time   : 2021-08-03T11:23:40.000000Z
    com.apple.quicktime.location.accuracy.horizontal: 3.594173
    com.apple.quicktime.location.ISO6709: +51.5483+000.1628+000.459/
    com.apple.quicktime.make: Apple
    com.apple.quicktime.model: iPhone 12 Pro
    com.apple.quicktime.software: 14.7.1
    com.apple.quicktime.creationdate: 2021-08-03T12:23:40+0100
  Duration: 00:00:54.54, start: 0.000000, bitrate: 8730 kb/s
  Stream #0:0[0x1](und): Video: hevc (Main 10) (hvc1 / 0x31637668), yuv420p10le(tv, bt2020nc/bt2020/arib-std-b67), 1920x1080, 8507 kb/s, 29.98 fps, 29.97 tbr, 600 tbn (default)
    Metadata:
      creation_time   : 2021-08-03T11:23:40.000000Z
      handler_name    : Core Media Video
      vendor_id       : [0][0][0][0]
      encoder         : HEVC
    Side data:
      DOVI configuration record: version: 1.0, profile: 8, level: 4, rpu flag: 1, el flag: 0, bl flag: 1, compatibility id: 4
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 172 kb/s (default)
    Metadata:
      creation_time   : 2021-08-03T11:23:40.000000Z
      handler_name    : Core Media Audio
      vendor_id       : [0][0][0][0]
  Stream #0:2[0x3](und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
    Metadata:
      creation_time   : 2021-08-03T11:23:40.000000Z
      handler_name    : Core Media Metadata
  Stream #0:3[0x4](und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
    Metadata:
      creation_time   : 2021-08-03T11:23:40.000000Z
      handler_name    : Core Media Metadata
  Stream #0:4[0x5](und): Data: none (mebx / 0x7862656D), 34 kb/s (default)
    Metadata:
      creation_time   : 2021-08-03T11:23:40.000000Z
      handler_name    : Core Media Metadata
At least one output file must be specified

对于工作视频ffmpeg -i "rgb.mov" -hide_banner 给出:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'rgb.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 0
    compatible_brands: qt
    creation_time   : 2021-12-01T10:53:47.000000Z
    com.apple.quicktime.location.accuracy.horizontal: 4.785777
    com.apple.quicktime.location.ISO6709: +51.5485+000.1627+012.533/
    com.apple.quicktime.make: Apple
    com.apple.quicktime.model: iPhone 12 Pro
    com.apple.quicktime.software: 14.8.1
    com.apple.quicktime.creationdate: 2021-12-01T10:53:47+0000
  Duration: 00:00:36.35, start: 0.000000, bitrate: 45692 kb/s
  Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160, 45457 kb/s, 29.99 fps, 29.97 tbr, 600 tbn (default)
    Metadata:
      creation_time   : 2021-12-01T10:53:47.000000Z
      handler_name    : Core Media Video
      vendor_id       : [0][0][0][0]
      encoder         : H.264
  Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 188 kb/s (default)
    Metadata:
      creation_time   : 2021-12-01T10:53:47.000000Z
      handler_name    : Core Media Audio
      vendor_id       : [0][0][0][0]
  Stream #0:2[0x3](und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
    Metadata:
      creation_time   : 2021-12-01T10:53:47.000000Z
      handler_name    : Core Media Metadata
  Stream #0:3[0x4](und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
    Metadata:
      creation_time   : 2021-12-01T10:53:47.000000Z
      handler_name    : Core Media Metadata
  Stream #0:4[0x5](und): Data: none (mebx / 0x7862656D), 34 kb/s (default)
    Metadata:
      creation_time   : 2021-12-01T10:53:47.000000Z
      handler_name    : Core Media Metadata
At least one output file must be specified

【问题讨论】:

您的源视频是 HDR。您必须将其色调映射到 SDR。 感谢您的建议,有关如何执行此操作的任何指针或链接? 【参考方案1】:

caniuse.com 解释说:

高效视频编码 (HEVC) 压缩标准是一种旨在继承 H.264 的视频压缩格式

并进一步表明目前浏览器对 HEVC 的支持很差。

@Gyan 认为:

您的源视频是 HDR。您必须将其色调映射到 SDR。

现在我假设@Gyan 基于它使用 HEVC 的事实知道它 HDR。此article 解释了 HDR(高动态范围)并详细讨论了它如何影响亮度、颜色和对比度。

最后,article 解释说 HDR 看起来很糟糕 - 例如亮度、对比度和颜色问题 - 在不支持 HDR 的设备上。值得庆幸的是,它还通过使用此过滤器提供了ffmpeg 修复:

-vf zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=t=bt709:m=bt709:r=tv,format=yuv420p

将此标志添加到我现有的 ffmpeg 命令中,完成了 HD​​R 到 SDR(标准动态范围)的转换/色调映射,使其在 Chrome 上运行并解决了我的问题。

注意:检测 HDR 本身就是一个问题,所以我不会在这里介绍,但请参阅 this link

【讨论】:

使用 ffmpeg 获取视频信息 - 为啥我需要指定输出文件?

】使用ffmpeg获取视频信息-为啥我需要指定输出文件?【英文标题】:Usingffmpegtogetvideoinfo-whydoIneedtospecifyanoutputfile?使用ffmpeg获取视频信息-为什么我需要指定输出文件?【发布时间】:2012-07-0903:47:53【问题描述】:我正在使用ffmpeg... 查看详情

为啥将音频流添加到 ffmpeg 的 libavcodec 输出容器会导致崩溃?

】为啥将音频流添加到ffmpeg的libavcodec输出容器会导致崩溃?【英文标题】:Whydoesaddingaudiostreamtoffmpeg\'slibavcodecoutputcontainercauseacrash?为什么将音频流添加到ffmpeg的libavcodec输出容器会导致崩溃?【发布时间】:2021-06-1613:24:00【问题... 查看详情

ffmpeg滤镜实现区域视频增强及d3d实现视频播放区的拉大缩小

...区域增强功能。   用eq滤镜就可以实现亮度、对比度、饱和度等的常用视频增强功能。   推荐两篇写得不错的博文:       (1)ffmpeg综合应用示例(二)&md 查看详情

在 OpenCV 和 Python 中控制视频流的对比度和亮度

】在OpenCV和Python中控制视频流的对比度和亮度【英文标题】:ControllingContrastandBrightnessofVideoStreaminOpenCVandPython【发布时间】:2020-04-0317:07:00【问题描述】:我正在使用OpenCV3和Python3.7从我的网络摄像头捕获实时视频流,我想控制亮... 查看详情

为啥 .ts 格式的 ffmpeg 开始时间非零?

】为啥.ts格式的ffmpeg开始时间非零?【英文标题】:Whyisffmpegstarttimenon-zeroin.tsformat?为什么.ts格式的ffmpeg开始时间非零?【发布时间】:2014-02-1212:04:12【问题描述】:我正在使用ffmpeg将视频转码为.ts格式,并且在输出文件中出现... 查看详情

线稿图视频制作补充(调整视频亮度对比度;删除无用文件)(代码片段)

🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝 🥰博客首页:knighthood2001😗欢迎点赞👍评论 查看详情

线稿图视频制作补充(调整视频亮度对比度;删除无用文件)(代码片段)

🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝 🥰博客首页:knighthood2001😗欢迎点赞👍评论 查看详情

使用 FFmpeg 通过管道输出视频片段

】使用FFmpeg通过管道输出视频片段【英文标题】:OutputvideosegmentsviaapipeusingFFmpeg【发布时间】:2014-07-0110:45:32【问题描述】:我的Node.js应用程序使用FFmpeg来捕获DirectShow设备的视频,然后输出用于实时流(HLS)的片段。目前我将段输... 查看详情

opencv学习之路对比度亮度调整与通道分离

一、对比度亮度调整1#include<opencv2/opencv.hpp>2usingnamespacecv;34#defineWIN_NAME"输出图像"5Matsrc,dst;6intcontrast=20,bright=20;78voidonChange(int,void*){9for(inti=0;i<src.rows;i++)10{11for(intj=0;j< 查看详情

优派vx2880-4k-hdu-2亮度、对比度、色温调不了

参考技术A可以在OSD菜单,把显示器调节亮度、对比度、色温。在OSD菜单的首页是几个快捷功能键,我们可快速对亮度、对比度、信号输出、画面显示模式等功能进行调节。 查看详情

视频解码性能对比opencv+cuvid+gpuvs.ffmpeg+cpu

...尺寸:480*848帧数:275opencv+cuvid+teslaP4,解码性能:1426.84fpsffmpeg4.0API+[Intel(R)Xeon(R)Gold6133CPU@2.50GHz],解码性能:206.46fpsGPU解码是CPU解码的6.9倍。注意:1.GPU解码丢了两帧;2.如果使用cudastream流水线技术,理论上性能还会再提升。 查看详情

opencv4opencv视频教程c++7手动调整图像亮度与对比度g(i,j)=αf(i,j)+β(点操作与邻域操作概念)(代码片段)

...;]入门强推!!!【B站最全】文章目录亮度与对比度公式(点操作与邻域操作概念)重要的api代码演示:提高图像对比度亮度与对比度公式(点操作与邻域操作概念)公式中α影响对比度,β影... 查看详情

为啥带有 2 个视频的 ffmpeg concat 会丢失第二个音频?

】为啥带有2个视频的ffmpegconcat会丢失第二个音频?【英文标题】:Whyffmpegconcatwith2videosislosingthe2ndaudio?为什么带有2个视频的ffmpegconcat会丢失第二个音频?【发布时间】:2016-04-3014:16:50【问题描述】:我正在尝试合并视频(与其各... 查看详情

使用ffmpeg libavcodec将视频流编码为H264,为啥持续时间为零

】使用ffmpeglibavcodec将视频流编码为H264,为啥持续时间为零【英文标题】:usingffmpeglibavcodecencodevideostreamtoH264,whydurationiszero使用ffmpeglibavcodec将视频流编码为H264,为什么持续时间为零【发布时间】:2018-02-1008:14:14【问题描述】:需... 查看详情

使用ffmpeg压缩png图片与tinypng压缩结果对比

Tinypng https://tinypng.com/一个在线png压缩工具FFmpeg https://ffmpeg.org/download.html 原图903kbTinypng压缩过的96KB 目标就是用FFmpeg做到近似Tinypng的处理效果首先是判断颜色格式这里我提前做好了准备原图的rgb24输出是 pal8也... 查看详情

为啥 FFmpeg 打印 SAR 而不是 PAR?

】为啥FFmpeg打印SAR而不是PAR?【英文标题】:WhyFFmpegprintSARinsteadofPAR?为什么FFmpeg打印SAR而不是PAR?【发布时间】:2013-09-2312:12:27【问题描述】:如果我的知识是正确的,SAR(存储纵横比)是像素尺寸的比率。例如,640×480视频的S... 查看详情

使用 FFmpeg 将一个视频处理为多个输出会导致最后一个输出中没有音频

】使用FFmpeg将一个视频处理为多个输出会导致最后一个输出中没有音频【英文标题】:ManipulatingonevideointomultioutputswithFFmpegresultsinnoaudiointhelastoutput【发布时间】:2016-01-2510:29:22【问题描述】:使用FFmpeg,我正在尝试对一个输入视... 查看详情

将ffmpeg中的视频文件直接输出到谷歌云存储

】将ffmpeg中的视频文件直接输出到谷歌云存储【英文标题】:Outputavideofilefromffmpegdirectlytogooglecloudstorage【发布时间】:2021-09-0719:07:47【问题描述】:问题的背景我们正在尝试使用托管在GoogleAppEngine(GAE)中的服务器中的FFmpeg压缩视... 查看详情