ffmpeg - 如何将 -ss 行为从位置前的最近搜索点更改为位置后最近的搜索点

标签 ffmpeg

有什么方法可以将 -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/

相关文章:

FFMPEG小波变换

windows - ffmpeg 如何将音频转换为 aac 但保持旧文件使用的比特率?

c# - FFmpeg.AutoGen 使用 avfilter_graph_create_filter 返回 -22

Java 进程使用的内存比 VisualVM 显示的多

ffmpeg - MacOS上如何使用FFmpeg录制多屏?

python - Boto3 视频从 Heroku 上传 0 字节

node.js - 哪个ffmpeg命令序列可以生成视频的第一帧【Node.js app需要缩略图】

c++ - 使用 ffmpeg 解码 h264 流会引入延迟,如何避免?

ffmpeg - 在ffmpeg中添加两个命令

macos - 在山狮上安装 FFmpeg 1.1.2 "Fire Flower"