使用mencoder进行视频分割

mencoder input_file -o output_file -ss 30 -endpos 60 -oac copy -ovc copy

以上命令可以截取视频文件从30秒开始持续1分钟的内容保存到output_file。如果仔细看输出的视频,会发现视频确实恰好有一分钟,但开始时间并不是准确的原视频的第30秒。在mplayer的文档中,关于这点写到mencoder定位在离-ss指定时间最近I帧。一般对于截取视频来说这样问题不大,但如果要对分割的连接视频再合并,就会出现问题。比如,再分割

mencoder input_file -o output_file2 -ss 0 -endpos 30 -oac copy -ovc copy,

一般对output_file和output_file2再合并,视频会缺帧或重帧。为了合并得到连续的视频,可以对mencoder.c做以下修改并重新编译(修改后合并视频会出错,得用原来的可执行文件),基本原理是让视频在ss+endpos最近的I帧结束:

1. 定义变量(以下改动都是在main中)

 

2. 把if(seek_to_sec)处改为

3. 把 play_n_frames=play_n_frames_mf;改为play_n_frames=next_frame_no-sh_video->num_frames;

4. 注释掉if ((end_at.type == END_AT_SIZE && end_at.ps <= stream_tell(muxer->stream)) || (end_at.type == END_AT_TIME && end_at.pos < v_muxer_time)) 这个条件语句(连同下面的break)。

 

注:本文使用源码为2010-11-19

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值