有什么方法可以将 -ss 行为从位置前的最近搜索点更改为位置后的最近搜索点?
例子:
ffmpeg 能够从 中选择查找点98 秒或 102 秒 in.mp4
如果我使用以下命令,ffmpeg 将选择 98 秒作为搜索点。ffmpeg -ss 100 -i in.mp4 -c copy out.mp4
有没有办法添加一些选项,但保留 -ss 100
使 ffmpeg 选择 102 作为搜索点?
最佳答案
最后,我使用了带有 ffprobe
的 shell 脚本。实现我的目标。
正因为如此 ffmpeg -ss T
将在时间 之前选择最近的关键帧电话 ,所以我需要使用 ffprobe
获取时间后的下一个关键帧电话 .ffprobe
引用命令:ffprobe -skip_frame nokey -select_streams v -show_frames -show_entries frame=pkt_pts_time -of csv -read_intervals T+30
上面的命令将显示从开始到 T+30 的关键帧时间戳。
所以我只需要对 bash
使用一些字符串处理获取大于时间 的最小时间戳的脚本电话 .
并且不要忘记将 1 添加到下一个关键帧作为 -ss
ffmpeg
的参数
我的详细bash
脚本:
option="-skip_frame nokey -select_streams v -show_frames -show_entries frame=pkt_pts_time -of csv -read_intervals"
tg_file="test.mp4"
st_time=$1
probe_time=`expr $st_time + 20`
kf_arr=(`ffprobe ${option} %${probe_time} ${tg_file} | sed 's/.\+,//g'`)
for i in ${kf_arr[@]}
do
if (( $(echo "$i > ${st_time}" | tr -d $'\r' | bc -l) )); then
kf=${i%.*}
st=`expr $kf + 1`
break
fi
done
$1
: 预计开始时间tr -d $'\r'
: 删除 Windows 系统中的换行符。 (如果你使用 Linux 可以忽略它)$st
: 新时间戳(下一个关键帧时间戳 + 1 在预期开始时间之后)如果有人有更方便的方法,请告诉我,谢谢!
关于ffmpeg - 如何将 -ss 行为从位置前的最近搜索点更改为位置后最近的搜索点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68464667/