查看: 3938|回复: 0
收起左侧

[技巧] 关于ffmpeg在DOS命令下对视频文件进行编辑的参数备录

[复制链接]
sonshine
发表于 2014-10-25 09:55:35 | 显示全部楼层 |阅读模式
本帖最后由 sonshine 于 2014-10-25 20:06 编辑

首先声明,这个备录其实就是写给自己的,怕以后突然心血来潮想用的时候忘记了,又要各种百度。本文作为交流之余,更多的是以之为自用,所以我写的也不可能全面,只保留自己感兴趣和试验过的方法,难免有失偏颇,不对的地方欢迎指正



一、准备工作
简单介绍一下ffmpeg
这款软件呢,作为业余爱好者不得不佩服开发人员的智慧,集录制、转换、音/视频编码解码功能为一体,纯粹而完整,开源当然也复杂。所以只适合那些喜欢折腾,体验动手乐趣的骚年们,毕竟视频处理软件现在市场上还是蛮多的,操作简单易用的大众化产品也已经拥有很多的拥护者。一句话你喜欢,你就可以尝试。
ffmpeg软件包经编译过后将生成三个可执行文件,ffmpeg,ffserver,ffplay(目前是在bin文件夹下)。
其中ffmpeg用于对媒体文件进行处理,ffserver是一个http的流媒体服务器,ffplay是一个基于SDL的简单播放器。
ffmpeg中有五个库文件,libavcodec,libavformat,libavutil,libswscale,libpostproc,其中库libavcodec,libavformat用于对媒体文件进行处理,如格式的转换;libavutil是一个通用的小型函数库,该库中实现了CRC校验码的产生,128位整数数学,最大公约数,整数开方,整数取对数,内存分配,大端小端格式的转换等功能;libswscale,libpostproc暂时不知道何用。

关于软件的下载地址,我是直接下载的编译好的windows可用版本,
下载地址(官网中可以连接到这个网站,和官方网站保持同步): http://ffmpeg.zeranoe.com/builds/ 然后选择我所需要的32位稳定版

首先从最小白的操作开始:(全文以win7 32位系统为例)
上文提到的ffmpeg三剑客ffmpeg,ffserver,ffplay之中,ffmpeg这货就是我们编辑处理媒体文件所要用到的,那么问题来了,不论是双击还是右键你会发现,他都会闪退,怎样正确运行这个EXE呢?我们需要运行DOS,将工作目录调整到ffmpeg所在的文件夹:
win+r运行cmd
光标所在位置提示目前是在C盘用户名目录: C:\Users\Son>_
C:\Users\Son>d:
D:\>cd ffmpeg\bin(我ffmpeg解压包直接放在D盘根目录)
D:\ffmpeg\bin>
之后就可以输入指定参数进行运算处理了。

二、视频裁剪
ffmpeg提供简单的命令参数,但我们需要对一个位于同目录下的视频文件进行原声原画(即保持原有音视频格式不变)的裁剪时,可以直接接上面命令行输入:
ffmpeg -ss 00:00:10 -t 00:10:20 -i D:\ffmpeg\bin\1.mp4 -vcodec copy -acodec copy D:\ffmpeg\bin\2.mp4

这个命令就是从10秒开始裁剪到20+10:20=10:30结束,总共10分30秒的视频。这个命令执行很快,因为只是原始数据的拷贝,中间没有什么编码和解码的过程。
执行这个命令后你能得到2.mp4这个输出文件。你可以用视频播放软件播放这个视频看看。可能有些视频裁剪后的效果,如期望一致,10秒开始,10分30秒结束。
但是有些视频裁剪后你会发现可能开始和结束都不是很准确,有可能是从18秒开始,33秒结束。这是为什么呢?
因为这些视频里20秒和30秒处地方刚好不是关键帧,而ffmpeg会在你输入的这两个时间点附近圆整到最接近的关键帧处,然后做接下来的事情。如果你不懂什么是关键帧,没关系,这也不影响你使用这个命令。
如果你的要求能够接受几秒的误差,那么这个命令完全就可以满足你的需要,接下来的内容你也没有必要往下看了。
但是在有些项目里要求很严格,或者说我有很重的强迫症一定要到确定的时间。所以要用另外一种方式。
上面的造成那样的原因是所选的时间不是关键帧,那如果我们将输入的视频先转换成所有的帧都为关键帧的视频,其实就是将所有的帧的编码方式转为帧内编码(不理解帧内编码也没关系,你就当没看见它,接着往下看),这个问题就有解了。ffmpeg也可以帮我们完成这个事情。
到这一步,查阅相关帖子的时候提到的方法是下列参数组合:
ffmpeg -i INPUT -sameq -intra OUTPUT
-i 输入,后面是空格,紧跟着就是输入视频文件;
INPUT 输入文件;
-sameq 表示保持同样的视频质量;
-intra, 帧内编码;
OUTPUT 输出文件名。
如:ffmpeg -i D:/MyVideo.mpg -sameq -intra D:/temp.mpg
这个命令的结果文件就是D:/temp.mpg.这个文件的视频和D:/MyVideo.mpg是一样的,但是你会发现这个文件会比D:/MyVideo.mpg大很多倍,原因就是转换前一般采用的帧间编码,转换后变成了帧内编码。这里我们说是一般,原因是有些视频文件本身就采用了帧内编码。

但是实际情况是运行时DOS窗口中会提示"Option 'sameq' was removed. If you are looking for an option to preserve the qua
lity (which is not what -sameq was for), use -qscale 0 or an equivalent quality factor option."
看提示的意思是'sameq'这个参数已经被舍弃了,不过倒是提供了一些线索。(据说0.85版本的ffmpeg可以支持,我还是坚持使用已经更新的稳定版本,所以留待考证吧)
根据提示我把相同位置的选项替换为'-qscale 0',貌似可行,只不过会警告色提醒'Please use -q:a or -q:v, -qscale is ambiguous'。
那么我把参数选项最终更改为'ffmpeg -i D:/MyVideo.mpg -q:a 0 -q:v 0 -intra D:/temp.mpg'
顺利执行完毕。
后来发现貌似直接采用最上面的参数也能执行'ffmpeg -i D:/MyVideo.mpg -vcodec copy -acodec copy -intra D:/temp.mpg'.
相关网页与帖子:
http://ffmpeg.org/ffmpeg.html 官网说明书,可用于查阅参数
http://blog.csdn.net/maopig/article/details/6610257  
http://blog.csdn.net/hemingwang0902/article/details/4382205
http://blog.360converter.com/archives/101
http://3xin2yi.info/wwwroot/tech ... eg?do=export_xhtml#常用输出选项
http://blog.51yip.com/linux/1584.html
未完待续,艾玛发现篇幅太长了,有时间配个图吧,会好看一下,这我自己都看不下去啊。。。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-11-25 02:19 , Processed in 0.129480 second(s), 21 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表