FFmpeg视频处理入门ffprobe & ffmpeg

Posted 程序媛一枚~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFmpeg视频处理入门ffprobe & ffmpeg相关的知识,希望对你有一定的参考价值。

FFmpeg视频处理入门

1. ffprobe

ffprobe 是用于查看媒体文件头信息的工具,常用命令有:

ffprobe INPUT
ffprobe -show_format INPUT
ffprobe -show_streams INPUT
ffprobe -show_frames INPUT
ffprobe -show_packets INPUT …

show_format 用于查看文件格式、时长、码率等信息,较为简略;

show_streams 用于查看视频流、音频流的信息,包括编码器、帧率、采样率、宽高、像素格式、采样格式、码率、时长、总帧率等等,较为详细,是最常用的一个功能;

show_frames、show_packets 用于查看每一帧(解码前/解码后)的信息,可以配合 select_streams 使用;

eg:ffprobe -show_format INPUT
可以看到文件名称filename、文件开始时间start_time、文件持续时长duration

2. 基本概念

2.1 PTS 和 DTS

DTS(Decoding Time Stamp):解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧图像

PTS(Presentation Time Stamp):显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧图像

DTS、PTS 是在编码的时候由编码器生成的,当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序一致。但如果有 B 帧时,解码顺序和播放顺序就有区别了。

比如一个视频中,帧的显示顺序是:I B B P,现在我们需要在解码 B 帧时知道 P 帧中信息,因此这几帧在视频流中的顺序可能是:I P B B,这时候就体现出 DTS 和 PTS 的作用了。DTS 告诉我们该按什么顺序解码这几帧图像,PTS 告诉我们该按什么顺序显示这几帧图像。顺序大概如下:

PTS: 1 4 2 3 DTS: 1 2 3 4 Stream: I P B B

2.2 time_base

时间单位,比如帧率为 30帧/s 的视频,time_base 就等于 1/30,此时 pts * time_base 就等于当前帧显示的时间

参考

以上是关于FFmpeg视频处理入门ffprobe & ffmpeg的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg 音视频处理工具三剑客(ffmpegffprobeffplay)

Flutter音视频裁剪flutter_ffmpeg踩坑笔记

FFmpeg三件套之FFprobe使用介绍

ffmpeg音视频开发: 使用ffprobe获取媒体信息

ffmpeg使用说明:ffmpeg/ffplay/ffprobe

FFMPEG - 将FFPROBE的持续时间输出存储为变量