使用ffmpeg截取视频片段

本文将介绍2种使用ffmpeg截取视频的方法

  1. 指定截取视频的 开始时间结束时间,进行视频截取
  2. 指定截取视频的 开始时间截取的秒数,进行视频截取

两种截取方式的命令行如下

截取某一时间段视频

优先使用

ffmpeg -i ./input.mp4 -c:v libx264 -crf 18 -ss 00:00:10 -to 00:00:15 ./cut_out.mp4

或下面这种(不推荐使用)

ffmpeg -i ./input.mp4 -c:v copy -c:a copy -ss 00:00:10 -to 00:00:15 ./cut_out.mp4

字段说明

-i ./input.mp4  指定输入视频路径
-ss 00:00:10  指定截取视频的开始时间点
-to 00:00:15  指定截取视频的结束时间点
./cut_out.mp4 指定截取视频保存路径与文件名
-c:v libx264 -crf 18  指定使用H264标准 crf=18模式对原视频中的视频片段进行重新编码,从而得到截取视频
-c:v copy -c:a copy  不进行重新编码,直接拷贝原视频中的视频片段,保存为截取视频

除非对保持原始视频码流有强烈需求,否则不推荐使用-c:v copy 进行视频截取
原因:ffmpeg在使用-c:v copy对原视频码流进行直接截取时,并不是按照指定时间截取的,而是从指定时间附近的 I I I帧开始截取和终止(可查看右侧文章链接,了解IBP帧的含义: 什么是I帧、P帧和B帧?)。这样就会出现两个问题:

  1. 截取出来的视频片段时间长度与 指定的时间不同
  2. 截取的时间长度相同,但可能在使用部分播放器播放视频时,前几秒一直停顿在相同画面,等待播放了一段时间后,画面才恢复正常

使用-c:v libx264 的方式截取视频,其实是对指定的原始视频片段进行重新编码。通过指定-crf 18来保证编码视频的画面质量与原视频近似相同。
这种方式的优点是:截取视频的时间长度与指定时刻完全相同,且视频能正常播放
缺点是:视频画面与原始视频会存在轻微细小差异(毕竟重新编码了┓( ´∀` )┏)
如果对原视频画面没有特别强烈的需求,建议采用这种方式进行截取。

截取特定长度的视频

优先使用

ffmpeg -i ./input.mp4 -c:v libx264 -crf 18 -ss 00:00:10 -t 15 ./cut_out.mp4

或下面这种(不推荐使用)

ffmpeg -i ./input.mp4 -c:v copy -c:a copy -ss 00:00:10 -t 15 ./cut_out.mp4

字段说明

-t 15  指定截取视频的秒数
其它字段与上方描述一致

猜你喜欢

转载自blog.csdn.net/mooneve/article/details/132576731