小编jac*_*ode的帖子

如何使用FFmpeg在给定时间戳之前获取最近关键帧的时间戳?

我想要一个快速准确的 FFmpeg 搜索命令。我找到了这个

解决方案是我们同时申请-ss输入(快速搜索)和输出(精确搜索)。但是:如果输入的搜索不准确,我们如何确定搜索位置是准确的?


例如:如果我们要搜索到 00:03:00,命令是这样的:

ffmpeg -ss 00:02:30 -i <INPUT> ... -ss 00:00:30 <OUTPUT>
Run Code Online (Sandbox Code Playgroud)

第一个-ss将寻求其他地方,而不是00:02:30,比如说00:02:31。在应用第二次搜索之后,最终结果将是00:03:01-不是我们想要的。那是对的吗?

第一个-ss寻求到哪里去?它是否寻找最接近 的关键帧00:02:30

如果是这样,这就是我的想法——如果我错了,请纠正我:在第一次寻找之后,我们得到结果的时间戳(在这个例子中:)00:02:31,然后我们在适当的时间应用第二次寻找,在这种情况下00:00:29

问题是:我们如何获得第一个搜索结果的时间戳?

ffmpeg

22
推荐指数
2
解决办法
2万
查看次数

如何强制第一帧为关键帧?

我想在寻找到某个位置后进行编码,并且我想让第一帧成为关键帧,这里我使用的命令是:

ffmpeg -ss 300  -i howimet.mp4 -acodec libfaac -ar 48000 -ab 128k -ac 2  -vcodec libx264 -vf "scale=480:270" -f mpegts -force_key_frames 300 -t 120 howimet2.ts
Run Code Online (Sandbox Code Playgroud)

-force_key_frames 设置为寻找位置以在那里制作关键帧。我使用以下脚本(来自此处)来检查第一帧是否是关键帧

ffprobe -show_frames -v quiet howimet2.ts | awk -F= '   /pict_type=/ { if (index($2, "I")) { i=1; } else { i=0; } } 
  /pkt_pts_time/ { if (i && ($2 >= 0)) print $2; }  
' | head -n 1
Run Code Online (Sandbox Code Playgroud)

结果显示第一个关键帧不在第二个 0 处。

我想我的命令不正确。我错过了什么?

ffmpeg

2
推荐指数
1
解决办法
2万
查看次数

标签 统计

ffmpeg ×2