【问题标题】:Video players questions视频播放器问题
【发布时间】:2014-12-21 18:38:41
【问题描述】:

鉴于 FFmpeg 是领先的多媒体框架,并且大多数视频/音频播放器都使用它,我想知道使用 FFmpeg 作为中间体的音频/视频播放器的一些事情。

我正在学习,我想知道音频/视频播放器的工作原理,我有一些问题。

我正在阅读 ffplay 源代码,我看到 ffplay 处理字幕流。我尝试使用带有字幕的 mkv 文件,但不起作用。我尝试使用诸如 -sst 之类的参数,但什么也没发生。 - 我正在阅读字幕以及视频文件如何使用它(或者我可以说容器?)。我看到有两种放置字幕的方法:hardsubs 和 softsubs - 粗略地说 hardsubs 模式被刻录并成为视频的一部分,softsubs 变成一个字幕流(我可能错了 - 请纠正我)。

  • 问题是:他们如何处理这个问题?我的意思是,当字幕是视频的一部分时,无事可做,视频流本身会显示字幕,但是软字幕呢?他们是如何处理的? (我也听说过一些关于文本潜艇的事情)。 - 字幕如何出现在屏幕上,可以配置更改字体、大小、颜色,而无需重新编码所有内容?

  • 我正在研究一些视频播放器的源代码,其中一些或大部分使用 OpenGL 作为帧的渲染器,而另一些则使用(例如 Qt 的 QWidget)(某种或肯定的)画布。 - 什么是最常用的,哪一个是最快和更好的?带有着色器和东西的OpenGL?处理 YUV 或 RGB 等?它是如何工作的?

  • 这可能是一个转储问题,但 AVFrame 返回的格式是什么?例如,当我们想先将帧保存为图像时,我们需要帧然后进行转换,我们从哪种格式转换?它是根据视频编解码器而变化还是始终相同?

  • 我一直在尝试处理的大多数视频都使用 YUV720P,我尝试将帧保存为 png,我需要先转换为 RGB。我和玩家做了一个测试,我把它们放在同一个帧上,我还截屏并进行了比较。视频播放器显示的帧更加丰富多彩。我对使用 SDL(OpenGL)的 ffplay 进行了同样的尝试,帧的颜色(质量)似乎非常低。可能是什么?他们做什么?是着色器(还是一种魔法?哈哈)。

嗯,我想现在就是这样。我希望你能帮助我。

如果这不是正确的地方,请告诉我在哪里。我还没有在 Stack Exchange 社区中找到其他位置。

【问题讨论】:

  • ffmpeg 可以使用 libass 渲染软字幕,您也可以只使用 ffmpeg 对字幕流进行解复用而不渲染它。渲染视频流的“最佳”解决方案取决于平台,OpenGL 几乎是硬件加速渲染的最佳“共同点”。至于颜色魔法,操作系统和驱动程序有时会在视频流上使用过滤器,进入这些设置并禁用“增强”
  • 感谢您回答@PeterT。字幕渲染是将字幕转换为图像还是必须在获得字幕流后进行渲染?是文字还是图片? - 例如,如果ffmpeg demux 字幕流并返回,如果它是文本流,程序员负责以某种方式呈现它,它通常是如何完成的?是否可以使用OpenGL并绘制字幕流文本? - 希望你能理解我的问题。
  • 如果您已经研究过ffplay 的资源,为什么不自己深入研究 ffmpeg 的库?
  • @alk - 我正在这样做(至少在尝试),但欢迎任何帮助。
  • ffmpeg 对字幕的支持并不完全整洁。

标签: c++ c ffmpeg libavcodec libav


【解决方案1】:

一篇文章中有很多问题:

“软字幕”是如何处理的

与任何其他流相同的方式:

  1. 从流中读取数据包到容器
  2. 将数据包交给解码器
  3. 根据需要使用解码的帧。在大多数容器支持字幕的情况下,将显示演示时间。此时您需要的只是获取文本并在同一演示时间将其刻录到图像上。有很多方法可以打印视频上的文字,使用 ffmpeg 或其他库

什么是最常用的渲染器,哪一个最快更好?

  1. 最常用的取决于底层系统。比如 Qt 只封装了原生渲染器,甚至还有一个 openGL 版本
  2. 您只能尽可能快地达到底层系统允许的速度。是否支持双缓冲?它可以以您解码的像素格式呈现,还是您必须先执行颜色转换?这个话题太宽泛了
  3. 更好只取决于用例。这太宽泛了

AVFrame 返回的格式是什么? 它是原始格式 (enum AVPixelFormat),取决于编解码器。有一个 list of YUV and RGB FOURCCs 涵盖了 ffmpeg 中的大多数格式。您可以通过编程方式访问表AVCodec::pix_fmts 以获得特定编解码器支持的像素格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    相关资源
    最近更新 更多