ffmpeg 实用命令 -- 截取视频

截图

下例利用 select 过滤器,抽取了视频中的第 86 帧,保存为 extract.png:

bash 复制代码
ffmpeg -i video.mp4 -vf 'select=eq(n\,85)' -vframes 1 extract.png

帧是从0开始的,所以要写85才是对应第86帧

如果不需要特别精确,也可以用时间戳来截取:

bash 复制代码
ffmpeg -ss 00:00:04.22 -i video.mp4 -vframes 1 extract.png

截取视频

下面,以想要截取 video.mp4 视频的第2到第5分钟为例。

对于容易计算片段秒数的截取任务(本例中片段长为 (5-2)*60=180秒),可以使用 -t 参数,即指定片段长度。

bash 复制代码
ffmpeg -ss 00:02:00 -i video.mp4 -t 180 cut.mp4

其中, -ss 参数指定了起始的时间戳记,而 -t 参数指定了片段长度(秒)。传递给 -t 的片段长度可以写成 00:03:00 的形式。它也可以带有小数,比如用 180.5 表示 180.5 秒。

或者,用户可以不用 -t 指定片段长度,而是用 -to 指定终止时刻。下例中把参数 -ss 与 -to 都放在了 -i 参数之前:

bash 复制代码
ffmpeg -ss 00:02:00 -to 00:05:00 -i video.mp4 cut.mp4

需要注意,在上面的例子中, 参数 -ss 均被放在了 -i 参数之前 ,这称为输入(inputing)参数语法;对应的时间戳检索方式称为输入检索(inputing seek)。如果放在 -i 参数之后,则称为输出(outputing)参数与输出检索。

  • 输入检索根据关键帧来检索,而输出检索是逐帧地检索地。因此输入检索地速度会比输出检索更快。

  • 由于关键帧定位的特性,输入检索在执行流复制操作(如 -c copy )时定位可能并不精确;在非流复制(即重新编码)并指定了 -accurate_seek (默认已指定)时,则无此问题。关于为何会造成定位的不精确,请参考本小节末尾的注释。

  • 输入检索会提前将 -ss 参数指定的时间戳设置为 0;因此,如果将 -t/-to 参数放在 -i 参数之后(作为输出参数),FFmpeg 都实质将参数值当作一个片段长度(而不是终止时刻)。例如:

    复制代码
    ffmpeg -ss 00:02:00 -i video.mp4 -t 00:05:00 cut.mp4
    ffmpeg -ss 00:02:00 -i video.mp4 -to 00:05:00 cut.mp4  # 意外的结果

    这两种命令的结果是一样的,都截取了第 2 到第 7 分钟;这对于使用 -to 参数的用户来说,可能是不希望看到的。因此,推荐将 -t/-to 参数一起都作为输入参数来使用。

总结

bash 复制代码
# 任务:截取视频的第 2 至 5 分钟。

# 1. 可接受起始片段前的额外内容,可能长达数秒 ------ 方案 A
# 2. 不可接受上述精度,要求精确到给定时刻最近的关键帧 ------ 方案 B
# 3. 不可接受上述精度,要求精确到给定时刻最近的帧 ------ 方案 C

# 根据上述问题的回答,选择合适的方案:

# A) 用快速截取(输入参数),配合流复制。该方案截取速度非常快。
## 以 -t 参数指定片段长,或以 -to 参数指定终止时间戳
ffmpeg -ss 00:02:00 -t 00:03:00 -i video.mp4 -c copy cut.mp4
ffmpeg -ss 00:02:00 -to 00:05:00 -i video.mp4 -c copy cut.mp4

# B) 用快速截取,但不能使用流复制,片段会被重编码。截取速度近似于编码等长视频的速度。
ffmpeg -ss 00:02:00 -t 00:03:00 -i video.mp4 cut.mp4
ffmpeg -ss 00:02:00 -to 00:05:00 -i video.mp4 cut.mp4

# C) 用慢速截取(输出参数),片段之前的内容也会被重编码。截取速度极慢。
ffmpeg -i video.mp4 -ss 00:02:00 -t 00:03:00 cut.mp4
ffmpeg -i video.mp4 -ss 00:02:00 -to 00:05:00 cut.mp4
相关推荐
2601_966827459 小时前
电视端云盘在线播放怎么选?支持4K HDR的应用推荐
音视频
开开心心就好10 小时前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节
zslefour13 小时前
使用ffmpeg遍历获取音频文件相关信息
ffmpeg
AI视频工具指南13 小时前
AI视频的声音和画面怎么配合?先分清谁在传递信息
人工智能·aigc·音视频
辰辰观影16 小时前
无广告播放器推荐来啦
音视频
TrueDei16 小时前
GStreamer 使用 valve 分别控制音视频流的暂停与恢复
音视频
Android系统攻城狮16 小时前
Linux FFmpeg深度解析之avcodec_parameters_from_context调用流程与实战(十六)
linux·运维·ffmpeg·音视频进阶·ffmpeg音视频·车载音视频进阶
一条破秋裤17 小时前
基于 Hi3516CV610 的立定跳远视频测量系统调研与实施方案
arm开发·音视频
Android系统攻城狮17 小时前
Linux FFmpeg深度解析之avcodec_alloc_context3调用流程与实战(十四)
linux·运维·ffmpeg·车载音视频·音视频进阶·ffmpeg音视频进阶
2601_9668274517 小时前
视频里的特效字幕怎么翻译?外挂字幕与AI字幕一键处理教程
音视频