【FFmpeg】ffplay 命令行参数 ⑧-灵析社区

没晒干的咸鱼

一、ffplay 命令行参数 - 设置自动旋转视频

1、设置自动旋转视频 -autorotate 参数

该参数值仅用于参考 , 如果需要开发 视频 根据 旋转元数据 自动旋转的功能 , 只需要阅读 ffplay 程序的 处理 -autorotate 参数 的源码即可 ;

ffplay 命令 的 -autorotate 参数 用于 设置自动旋转视频 , 文件中的 元数据 中有视频的方向 , 如 横屏 / 竖屏 ; 该参数值 默认 1 , 自动旋转视频 默认 是 打开的 ;

播放 1920 x 1080 像素的 视频 ,

  • 如果 视频 旋转元数据 是 横向的 , 直接将视频播放出来 ,
  • 如果 视频中的 旋转元数据 是 纵向的 , 则会 旋转 90 度 显示视频画面 ;

使用 手机 / 摄像机 录制视频时 会 将 录制视频的 方向 设置到 元数据 中 , 一般 会 根据设备的 自然方向 来设置视频的旋转元数据 ;

  • 如 : 手机竖屏录制视频 会设置 竖屏的元数据 , 录制的视频是 1920 x 1080 像素的 , 显然这是横向视频 , 但是播放时 会 根据 元数据 中的 视频方向 将 视频 旋转 90 度 正常显示 ;

-autorotate 参数值 只能是 0 或 1 :

  • -autorotate 1 : 当 -autorotate 参数值设置为 1 时 , ffplay 播放视频时 会根据视频文件中的 旋转元数据 自动调整视频的显示方向 ;
  • -autorotate 2 : 当 -autorotate 参数值 设置为 0 时 , ffplay 播放视频时 会忽略旋转元数据 , 按视频的原始像素方向播放 ;

2、设置自动旋转视频示例

执行

ffplay -autorotate fengjing.mp4

命令 , 不设置值 , 就是使用默认值 1 ;

二、ffplay 命令行参数 - 设置丢弃视频帧

1、设置丢弃视频帧 -framedrop 参数

ffplay 命令的 -framedrop 参数 用于 设置 丢弃 失去同步的 视频帧 , 当 视频帧 的 播放速度 与 主时钟 不同步时 , 可以丢弃 视频帧 ;

默认状态下 , -framedrop 参数值为 -1 , 此时

  • 同步时钟 为 视频时钟 时 , 不会丢弃 视频帧 ;
  • 同步时钟 为 音频时钟 或 外部时钟 时 , 可能会丢弃 失去同步的 视频帧 ;

执行

ffplay -framedrop fengjing.mp4

命令 , framedrop 的参数值被设置为 1 , 无论同步方式是什么

  • 同步到视频
  • 同步到音频
  • 同步到外部时钟

都会 丢弃 失去同步的视频帧 , 可以有效 防止视频播放 卡顿 ;

2、设置丢弃视频帧 -noframedrop 参数

ffplay 命令的 -noframedrop 参数 用于 设置 不丢弃 失去同步的 视频帧 , 当 视频帧 的 播放速度 与 主时钟 不同步时 , 也不可以丢弃 视频帧 ;

显然 , 该操作会导致 视频播放卡顿的情况 ;

执行

ffplay -noframedrop fengjing.mp4

命令 , framedrop 的参数值被设置为 0 , 无论同步方式是什么

  • 同步到视频
  • 同步到音频
  • 同步到外部时钟

都不会 丢弃 失去同步的视频帧 , 会导致 视频播放 卡顿 , 但可以保证 视频的 完整显示 和 每一帧显示 ;

三、ffplay 命令行参数 - 设置输入缓冲区

1、设置输入缓冲区 -infbuf 参数

ffplay 命令的 -infbuf 参数 用于 设置输入缓冲区 ;

在 流媒体播放 或 处理实时数据 时 , 缓冲区的大小 和 管理方式 对于播放的流畅性和性能至关重要 ;

使用 -infbuf 参数 设置 输入缓冲区 , 会增加播放开始的延迟 , 因为播放器会在开始播放前尝试填充缓冲区 ; 在 开始 播放 时 , 能够 很好地 应对 网络波动 和 数据传输的不稳定性 ;

2、设置输入缓冲区示例

-infbuf 参数 不是一个独立使用的参数 , 该参数 经常 与 -probesize-analyzeduration 等参数一起使用 ,

  • -probesize 参数指定了 ffplay 在尝试确定 输入流格式 时应该读取的 数据量 , 在本示例中 设置为 50MB , 增加这个值可以让 ffplay 对输入流进行更深入的分析 , 这有助于正确识别某些复杂的媒体格式 , 但也会增加启动时的延迟 ;
  • -analyzeduration 参数 通常用于限制输入流的分析时长 , 单位是 微秒 μs ; 本示例中设置 100000 微秒 , 也就是 100 毫秒 , 0.1 秒 ;

执行

ffplay -infbuf -probesize 50M -analyzeduration 100000 fengjing.mp4

命令 , 设置 初始读取 50MB 的数据 , 分析时长 0.1 秒 ;



阅读量:513

点赞量:0

收藏量:0