使用 FFmpeg 视频分割和合并

最近遇到一个很头大的事情,本来可以用VOD实现的视频拼接需要在本地完成,想了一圈祭出了 FFmpeg 这款神器。 趁着还热乎,赶快写篇文章分享出来。

首先第一个问题,安装:

下载:http://ffmpeg.org/download.html#build-windows

解压

添加环境变量

 

进入 cmd,输入 ffmpeg -version,可验证当前系统是否识别 ffmpeg,以及查看 ffmpeg 的版本

 

 

如上就是已经成功安装了。

下面是一些常用的指令

-ss 指定从什么时间开始
-t 指定需要截取多长时间
-i 指定输入文件

这个命令就是从00秒开始裁剪到00+30=30秒结束,总共30秒的视频。这个命令执行很快,因为只是原始数据的拷贝,中间没有什么编码和解码的过程。执行这个命令后你能得到output.mp4这个输出文件。你可以用视频播放软件播放这个视频看看。
可能有些视频裁剪后的效果,如期望一致,00秒开始,30秒结束,总共30秒的视频,但是有些视频裁剪后你会发现可能开始和结束都不是很准确,有可能是从00秒开始,33秒结束。这是为什么呢?
因为这些视频里30秒处地方刚好不是关键帧,而ffmpeg会在你输入的时间点附近圆整到最接近的关键帧处,然后做接下来的事情。如果你不懂什么是关键帧,没关系,这也不影响你使用这个命令。

合并视频

在list.txt文件中,对要合并的视频片段进行了描述。
内容如下

更多常用命令:

参数说明:

-vcodec xvid 使用xvid压缩
-s 320×240 指定分辨率
-r fps 设置帧频 缺省25
-b <比特率> 指定压缩比特
-acodec aac 设定声音编码
-ac <数值> 设定声道数,1就是单声道,2就是立体声
-ar <采样率> 设定声音采样率,PSP只认24000
-ab <比特率> 设定声音比特率
-vol <百分比> 设定音量
-y(覆盖输出文件
-t duration 设置纪录时间 hh:mm:ss[.xxx]格式的记录时间也支持
-ss position 搜索到指定的时间 [-]hh:mm:ss[.xxx]的格式也支持
-title string 设置标题
-author string 设置作者
-copyright string 设置版权
-hq 激活高质量设置
-aspect aspect 设置横纵比 4:3 16:9 或 1.3333 1.7777
-croptop size 设置顶部切除带大小 像素单位
-cropbottom size -cropleft size -cropright size
-padtop size 设置顶部补齐的大小 像素单位
-padbottom size -padleft size -padright size -padcolor color 设置补齐条颜色(hex,6个16进制的数,红:绿:兰排列,比如 000000代表黑色)
-bt tolerance 设置视频码率容忍度kbit/s
-maxrate bitrate设置最大视频码率容忍度
-minrate bitreate 设置最小视频码率容忍度
-bufsize size 设置码率控制缓冲区大小
-vcodec codec 强制使用codec编解码方式。 如果用copy表示原始编解码数据必须被拷贝。
-sameq 使用同样视频质量作为源(VBR)
-pass n 选择处理遍数(1或者2)。两遍编码非常有用。第一遍生成统计信息,第二遍生成精确的请求的码率
-passlogfile file 选择两遍的纪录文件名为file
-map file:stream 设置输入流映射
-debug 打印特定调试信息


好了,现在已经完成了差不多60%的内容了,但是我的需求是添加N份片头+正片的剪辑,用普通pr肯定完不成了,所以索性自己用C++开发一款拼接工具。

 

怎么样? 是不是很酷炫,代码实现非常简单,就是拿到值然后给cmd做处理:

源码下载:

http://t.cn/Ai0YEWYk

EXE打包下载(需要安装FFmpeg环境变量):

http://t.cn/Ai0YnWuE

 

就酱样,哈哈哈 希望对大家有所帮助把~



发表评论

电子邮件地址不会被公开。