我正在创建一个分段器来干预ffmpeg的write_frame函数并将输出数据写入单独的文件.每个分段文件包含大约3秒视频的片段.
代码确实如下:
1 - Get transcoded packet
2 - Check if it contains key frame data, if yes goto 3.
3 - Check the duration of current segment, if it exceed 3 seconds, goto 4
4 - Close file, and create new segment, write packet to segment file, goto-1
Run Code Online (Sandbox Code Playgroud)
一般来说,每个片段包含至少3秒的视频数据,并以关键帧开头.
问题是输出视频的持续时间非常不同,有些包含3秒,有些包含5或6.
我怀疑问题是由于ffmpeg在转码过程中如何生成关键帧.如果两个相邻关键帧之间的"距离"为6s,则我得到6秒的段.
这是我的问题:
这是真的,ffmpeg以不规则的间隔生成关键帧(间隔时间可以达到几秒钟(例如6))?
我们如何控制ffmpeg关键帧生成?(我想应该有一个ffmpeg命令的参数,-force_key_frames可能,但我不确定)
raj*_*esh 11
ffmpeg可以基于场景变化检测以不规则的间隔生成关键帧.
关键帧间隔可以由GOP大小控制.可以使用以下选项
-g(FFmpeg)关键帧间隔,也称为GOP长度.这决定了I帧之间的最大距离.非常高的GOP长度将导致稍微更高效的压缩,但会使视频中的搜索更加困难.
-keyint_min(FFmpeg)最小GOP长度,I帧之间的最小距离.
| 归档时间: |
|
| 查看次数: |
15024 次 |
| 最近记录: |