ffmpeg视频截取切片

本文详细介绍了如何使用ffmpeg进行视频文件的切片,包括指定不同格式的切片文件、查看切片时间范围、按时间点裁剪、使用ss/t参数以及重置时间戳。同时涵盖了CSV、M3U8和FFconcat格式的索引文件生成。适合音视频开发者深入理解FFmpeg的高级用法。
摘要由CSDN通过智能技术生成

通过segment_format指定切片文件的格式

ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 test_outpout-%d.mp4

查看分片文件的开始时间跟结束时间

开始时间:

ffprobe -v quiet -show_packets -select_streams v test_outpout-0.mp4 2> x |grep pts_time |head -n 3

结束时间:

ffprobe -v quiet -show_packets -select_streams v test_outpout-0.mp4 2> x |grep pts_time |tail -n 3

本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

segment_list与segment_list_type指定切片索引列表

使用segment切割文件时不仅仅可以切割MP4,同样也可以切割TS或者FLV等文件,生成的文件索引列表名称也可以指定,当然,列表不仅仅是M3U8,也可以是其他的格式:

生成ffconcat格式索引文:

ffmpeg -re -i inuput.mp4 -c copy -f segment -segment_format mp4 -segment_list output.lst test_output-%d.mp4

 上面这条命令将生成ffconcat格式的索引文件名output.lst这个文件将会生成一个mp4切片的文件列表:

生成CSV格式索引文件

ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 -segment_list_type csv -segment_list filelist.csv out-%d.mp4

 上述命令将会生成CSV格式的列表文件,列表文件中的内容分为三个字段,文件名,文件起始时间和文件结束时间

从输出的内容可以看到切片文件的信息生成到了CSV文件,CSV文件可以用类似于操作数据库的方式进行操作,也可以根据CSV生成的视图图像

生成M3U8格式索引文件

ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 -segment_list_sypr m3u8 -segment_list output.m3u8 test-output-%d.mp4

生成M3U8列表不仅仅可以生成MPEGTS格式文件,同样还可以生成其他格式:

从输出的内容可以看到输出的M3U8与使用HLS模块生成的M3U8基本相同

reset_timestamps使切片时间戳归0 使每一片的时间戳归0可使用reset_timestamps进行设置,命里行如下:

ffmpeg -re -i inuput.mp4 -c copy -f segment -segment_format mp4 -reser_timestamps 1 test_output-%d.mp4

命令执行完成之后,可以查看一下是否每一个切片的时间戳都从0开始

查看生成的切片文件:

然后查看一下第一片的结束时间:

然后查看第二片的开始时间:

  从验证的效果来看,每一片的开始时间戳已归0,参数设置生效

segment_times按照时间点剪切
  对文件进行切片时,也时候需要均匀的切片,有时候需要按照指定的时间长度进行切片,segment可以根据指定的时间点进行切片,下面列举说明:

ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 -segment_format mp4 -segment_times 3,9,12 out-%d.mp4

根据命令行的参数可以看到,切片的时间点分别为第3秒,第9秒,和第12秒,在这三个时间点进行切片

ffmpeg使用ss与t参数进行切片

在ffmpeg中,使用ss可以进行视频文件的seek定位,ss所传递的参数为时间值,t所传递的参数也为时间值,下面就来列举说明ss与t的作用

使用ss指定剪切开头部分

ss参数可以用作切片定位起始时间点,例如从一个视频文件的第10秒钟开始截取内容:

ffmpeg -ss 10 -i input.mp4 -c copy out.ts

  命令执行之后,生成的output.ts将会比input.mp4的视频少8秒,英文output.ts是从input.mp4的第8秒开始截取的,使用前面介绍过的ffprobe分别获得input.mp4与output.ts的文件duration并进行对比。信息如下;

ffprobe -v quiet -show_format input.mp4 |grep duration ; ffprobe -v quiet -show_format out.ts |grep duration
duration=20.000000
duration=9.966667

使用t指定视频中长度

使用ffmpeg截取视频除了可以指定开始截取位置,

还可以指定截取数据的长度, ffmpeg的t参数可以指定截取的视频长度,例如截取input.mp4文件的前10秒的数据:

ffmpeg -i input.mp4 -c copy -t 10 -copyts output.mp4

命令执行完之后,会生成一个时间从0开始的output.mp4,查看input,mp4与output.mp4的起始时间与长度相关信息:

 从两个文件的duration信息可以看到,input的start_time是0,duration是10,00,而output.mp4的start_time也是0,duration则是3.69,参数生效

使用output_ts_offset指定输出start_time

ffmpeg支持ss与t两个参数一同使用以达到切割视频的某一段的效果,但其并不能阻挡输出文件的start_time,而且也不希望时间戳归0,可以使用output_ts_offset来达到指定输出文件的start_timed目的

ffmpeg -i input.mp4 -c copy -t 10 -output_ts_offset 120 output.mp4

  命令执行之后输出output.mp4的文件的start_time即将被指定为120,下面就来看一下其效果:

 从输出的内容可以看到start_time是从120秒开始,而durations是10秒,指定开始时间与duration操作生效。

如果你对音视频开发感兴趣,或者对本文的一些阐述有自己的看法,可以在下方的留言框给我留言,一起探讨。 

本文福利, 免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

使用FFmpeg可以非常方便地进行视频截取。可以通过指定参数来实现不同的截图格式,如将-vcodec参数指定为mjpeg或者使用-f参数指定为mjpeg可以输出jpg截图,指定-vcodec参数为png或者指定输出文件扩展名为png可以输出png截图。要指定截取视频的具体时间,可以使用-ss参数来实现。比如,如果要截取视频的第5秒,可以通过-ss参数来指定。 此外,还有一种方法是使用OpenCV来截取视频,该方法在精确性方面被认为是非常高的,但是无法捕捉视频的音频。可以使用FFmpeg截取音频,然后将音频和视频合并在一起。 具体的关于FFmpeg截取视频的详细教程可以参考以下链接:http://www.kindcent.com/blog/view/ffmpeg-mjpeg <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [使用ffmpeg可以生成视频截图](https://blog.csdn.net/xiaochawan/article/details/8804789)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [使用FFmpeg实现精确剪切视频](https://blog.csdn.net/yunxiaobaobei/article/details/106529585)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值