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踩坑笔记