使用mencoder进行视频分割

本文介绍如何使用mencoder命令行工具精确截取视频文件,并针对默认设置下开始时间和结束时间不精确的问题,提供了修改源码的方法,确保视频片段能够平滑连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值