ffmpeg设置视频参数DAR,SAR

PAR、DAR、SAR 基本概念

FFmpeg中的视频参数 SAR,PAR,DAR, 从宏观上描述一个视频轮如何被播放器正确显示。在不同的文档中,通常对这三个参数有不同的表述。但是,均指代同一事物。首先来看解释:

PAR - pixel aspect ratio,单个像素的宽高比,大多数情况像素宽高比为1:1,也就是一个正方形像素,如果不是1:1, 则该像素可以理解为长方形像素。常用的PAR比率有(1:1,10:11, 40:33, 16:11, 12:11 )

DAR - display aspect ratio,显示宽高比。即最终播放出来的画面的宽与高之比。比如常见的16:9和4:3等。缩放视频也要按这个比例来,否则会使图像看起来被压扁或者拉长了似的。

SAR - Sample aspect ratio,采样纵横比, 表示横向的像素点数和纵向的像素点数的比值,即为我们通常提到的分辨率宽高比。就是对图像采集时,横向采集与纵向采集构成的点阵,横向点数与纵向点数的比值。比如VGA图像640/480 = 4:3,D-1 PAL图像720/576 = 5:4,高清视频 等。

三者的关系:
PAR x SAR = DAR
或者
PAR = DAR/SAR.

已知其中任意两个可以推导出另一个

通过ffmpeg设置SAR与DAR

ffmpeg -t 10 -i input.mp4 -vf scale=720x1280,setsar=sar=9/16,setdar=dar=16/9 -f mp4 out.mp4 -y
把视频分辨率scale为9:16,再强制设置为16:9
输出视频分辨率为 720x1280 ,播放的时候播放器会按16:9的画面进行播放

大部分正常的情况设置为 -vf “setsar=sar=1/1,setdar=dar=1920/1080” , SAR像素比设置为1:1,DAR播放比设置为输出分辨率的比值

确认一下mediainfo
Display aspect ratio : 16:9

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : High@L3.1
Format settings                          : CABAC / 4 Ref Frames
Format settings, CABAC                   : Yes
Format settings, Reference frames        : 4 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 43 s 760 ms
Bit rate                                 : 794 kb/s
Width                                    : 720 pixels
Height                                   : 1 280 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 25.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.034
Stream size                              : 4.14 MiB (86%)
Title                                    : Core Media Video
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要重新连接视频流,可以使用FFmpeg的`avformat_open_input`函数,并通过设置`AVFormatContext`的一些参数来实现。以下是一些常用的参数设置: ```cpp #include <libavformat/avformat.h> // 创建AVFormatContext对象 AVFormatContext* formatContext = avformat_alloc_context(); // 设置重连参数 formatContext->interrupt_callback.callback = [](void*){ return 0; }; // 设置中断回调函数,返回0表示继续执行 formatContext->interrupt_callback.opaque = nullptr; // 回调函数的私有数据,可以设置为nullptr // 打开视频流 int ret = avformat_open_input(&formatContext, m_url, nullptr, nullptr); if (ret < 0) { // 打开失败处理 avformat_free_context(formatContext); return; } // 启用自动重连 formatContext->flags |= AVFMT_FLAG_AUTO_BSF; // 启用自动比特流过滤器(Bitstream Filter) // ... // 使用formatContext进行后续操作,如读取视频帧等 ``` 在上述代码中,我们首先创建一个`AVFormatContext`对象,并使用`avformat_alloc_context`函数进行分配。 然后,我们设置了重连参数。通过设置`formatContext->interrupt_callback.callback`为一个返回0的回调函数,表示在需要中断时返回,从而实现重新连接的目的。同时,我们将`formatContext->interrupt_callback.opaque`设置为`nullptr`,即回调函数的私有数据为空。 接下来,我们使用`avformat_open_input`函数打开视频流。如果打开失败,可以根据需要进行相应的错误处理。 最后,我们启用了自动重连功能,通过设置`formatContext->flags |= AVFMT_FLAG_AUTO_BSF`来启用自动比特流过滤器(Bitstream Filter)。 请注意,以上代码只是一个示例,并不包含完整的错误处理和视频流读取逻辑。在实际应用中,你需要根据具体情况进行适当的修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值