鉴于FFmpeg是领先的多媒体框架,大多数视频/音频播放器使用它,我想知道有关使用FFmpeg作为中间体的音频/视频播放器的事情。
我正在学习,我想知道音频/视频播放器是如何工作的,我有一些问题。
我正在阅读ffplay源代码,我看到ffplay处理字幕流。我尝试使用带有字幕的mkv文件,但不起作用。我尝试使用诸如-sst这样的参数但没有发生任何事情。 - 我正在阅读有关字幕以及视频文件如何使用它的信息(或者我可以说容器?)。我看到有两种方式放一个副标题:hardsubs和softsubs - 大概说硬盘模式被烧掉并成为视频的一部分,而softsubs变成了一个字幕流(我可能错了 - 拜托,纠正我)。
问题是:他们如何处理这个问题?我的意思是,当副标题是视频的一部分时,没有什么可做的,视频流本身就会显示副标题,但是softsubs呢?他们是如何处理的? (我也听说过关于文字潜艇的事情)。 - 如何在屏幕上显示字幕,并且可以配置更改字体,大小,颜色,而无需再次编码所有内容?
我正在研究一些视频播放器源代码,其中一些或大部分使用OpenGL作为框架的渲染器,而其他人使用(例如Qt的QWidget)(有点或肯定)画布。 - 什么是最常用的,哪一个最快,更好? OpenGL与着色器和东西?处理YUV或RGB等?这有什么作用?
这可能是转储问题,但AVFrame返回的格式是什么?例如,当我们首先想要将帧保存为图像时,我们需要帧然后转换,我们从哪种格式转换?它是根据视频编解码器改变还是总是相同的?
我一直试图处理的大部分视频都是使用YUV720P,我试图将帧保存为png,我需要先转换为RGB。我和玩家一起做了一个测试,我放在相同的框架上,我也拍了截图并进行了比较。视频播放器显示帧更丰富多彩。我尝试使用SDL(OpenGL)的ffplay,并且帧的颜色(质量)似乎非常低。可能是什么?他们做什么?它是着色器(还是一种魔术?哈哈)。
嗯,我认为现在就是这样。我希望你帮助我。
如果这不是正确的地方,请告诉我在哪里。我还没有在Stack Exchange社区找到另一个地方。
答案 0 :(得分:0)
一篇文章中有很多问题:
如何处理'软字幕'
与任何其他流的方式相同:
最常用的渲染器是哪个,哪个是最快更好的?
AVFrame返回的格式是什么? 它是一种原始格式(
enum AVPixelFormat
),取决于编解码器。有一个list of YUV and RGB FOURCCs涵盖了ffmpeg中的大多数格式。以编程方式,您可以访问表AVCodec::pix_fmts
以获取特定编解码器支持的像素格式。