使用 ffmpeg 截取视频的某一个时间段内容

使用 ffmpeg 截取视频的某一个时间段,可以结合以下3个选项:

-ss time_off     设置开始时间的偏移量
-to time_stop    记录或转码停止时间
-t duration      记录或转码音频视频的“持续时间”秒

使用 -ss 选项指定需要截取的开始时间,结合 -to 或者 -t。

官方还特意提醒了下,当-ss放在-i参数前,其搜索到的时间点位置是不准确的,ffmpeg只能检索到目标时间点之前最近的某个点。当-ss参数在-i参数之后,ffmpeg会将视频重新解码,然后丢弃目标起始时间点之前的视频,这样截取的视频起始时间点才是准确的

使用 -to 选项

to 指定结束的时间点,以下命令将截取视频文件 input.mp4 从 00:00:05.000 开始,到 00:00:15.000 结束这一段视频。

ffmpeg -i input.mp4 -ss 00:00:05.000 -to 00:00:15.000 output.mp4

使用 -t 选项

t 指定持续时间,以下命令将截取视频文件 input.mp4 从 00:00:05.000 开始,持续 10 秒的一段视频。

ffmpeg -i input.mp4 -ss 00:00:05 -t -c copy 10 output.mp4

需要注意的是,使用 -c copy 时,剪切点(-ss 和 -to)会被调整到最近的关键帧,这可能会导致剪切不是特别精确。如果需要精确的剪切点,可能需要放弃使用 copy 模式。

如果你需要更精确的剪切:

# 精确剪切版本(会重新编码,但剪切更精确)
ffmpeg_cmd = f'ffmpeg -i "{video_file}" ' \
            f'-ss {clip_meta.start_t} ' \
            f'-to {clip_meta.end_t} ' \
            f'-c:v libx264 ' \
            f'-preset ultrafast ' \
            f'-crf 0 ' \  # 无损质量
            f'-c:a copy ' \  # 音频仍然可以直接复制
            f'-y "{final_output_file}"'

参考:
https://www.cpming.top/p/using-ffmpeg-to-cut-up-video
https://www.cnblogs.com/xuejianbest/p/10285284.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值