FFmpeg常用基本命令
1.分离视频音频流
ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流 ffmpeg -i input_file -acodec copy -vn output_file_audio //分离音频流
2.视频解复用
ffmpeg –i test.mp4 –vcodec copy –an –f m4v test.264 ffmpeg –i test.avi –vcodec copy –an –f m4v test.264
3.视频转码
ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an –f m4v test.264 //转码为码流原始文件 ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an –f m4v test.264 //转码为码流原始文件 ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi //转码为封装文件 //-bf B帧数目控制,-g 关键帧间隔控制,-s 分辨率控制
4.视频封装
ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file
5.视频剪切
ffmpeg –i test.avi –r 1 –f image2 image-%3d.jpeg //提取图片 ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi //剪切视频 //-r 提取图像的频率,-ss 开始时间,-t 持续时间
6.视频录制
ffmpeg –i rtsp://192.168.3.205:5555/test –vcodec copy out.avi
7.YUV序列播放
ffplay -f rawvideo -video_size 1920x1080 input.yuv
8.YUV序列转AVI
ffmpeg –s w*h –pix_fmt yuv420p –i input.yuv –vcodec mpeg4 output.avi
常用参数说明:
主要参数:
-i 设定输入流
-f 设定输出格式
-ss 开始时间
视频参数:
-b 设定视频流量,默认为200Kbit/s
-r 设定帧速率,默认为25
-s 设定画面的宽与高
-aspect 设定画面的比例
-vn 不处理视频
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器
音频参数:
-ar 设定采样率
-ac 设定声音的Channel数
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-an 不处理音频
ffmpeg裁剪合并视频
这里裁剪是指时间轴裁剪,不是空间裁剪。
比如说,你想把视频的从一分20秒开始,30秒的视频裁剪出来,保存成一个视频。这是这个文章要讨论的问题。
一 裁剪视频
ffmpeg提供简单的命令参数:
ffmpeg -ss START -t DURATION -i INPUT -vcodec copy -acodec copy OUTPUT
对上面的命令稍做个解释。
-ss 开始时间,如: 00:00:20,表示从20秒开始;
-t 时长,如: 00:00:10,表示截取10秒长的视频;
-i 输入,后面是空格,紧跟着就是输入视频文件;
-vcodec copy 和 -acodec copy表示所要使用的视频和音频的编码格式,这里指定为copy表示原样拷贝;
INPUT,输入视频文件;
OUTPUT,输出视频文件;
比如:
ffmpeg -ss 00:00:20 -t 00:00:10 -i D:/MyVideo.mpg -vcodec copy -acopy copy D:/Split.mpg
这个命令就是从20秒开始裁剪到20+10=30秒结束,总共10秒的视频。这个命令执行很快,因为只是原始数据的拷贝,中间没有什么编码和解码的过程。
执行这个命令后你能得到Split.mpg这个输出文件。你可以用视频播放软件播放这个视频看看。可能有些视频裁剪后的效果,如期望一致,20秒开始,30秒结束,总共10秒的视频,但是有些视频裁剪后你会发现可能开始和结束都不是很准确,有可能是从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大很多倍,原因就是转换前一般采用的帧间编码,转换后变成了帧内编码。这里我们说是一般,原因是有些视频文件本身就采用了帧内编码。
接下来我们就开始裁剪。
ffmpeg -ss START -vsync 0 -t DURATION -i INPUT -vcodec VIDEOCODEC-acodec AUDIOCODEC OUTPUT
-ss 开始时间,如: 00:00:20,表示从20秒开始;
-t 时长,如: 00:00:10,表示截取10秒长的视频;
-i 输入,后面是空格,紧跟着就是输入视频文件;
-vcodec 视频的编码格表示所要使用的视频式;
-acodec 音频的编码格表示所要使用的视频式;
INPUT,输入视频文件;
OUTPUT,输出视频文件;
如:
ffmpeg -ss 00:00:30 -vsync 0 -t 00:00:30 -i D:/temp.mpg -vcodec libx264-acodec libfaac D:/result.mpg
这里音频和视频分别采用了aac和h264.
这样就得到了我们最终想要的结果。
二 合并视频
上面我们可以将一个视频中感兴趣的部分裁剪出来,比如我们裁剪出3段视频,而裁剪出来的视频,我们不想它是一个一个的,而是一整个。总的需求就是给定一个视频,用户可以挑选出自己喜欢的一些时间段,然后开始裁剪,最后得到那些挑选的时间段组成的视频。
要完成这个任务,有了前面我们裁剪视频的基础就好办多了,利用前面的方法将各个感兴趣的视频裁剪出了,这样得到多个小视频,然后再用下面的方法就可以实现:
现在这里声明一下,下面红色的部分是我早之前的版本,是错误,因此误导了大家,非常的抱歉。
所以直接忽略红色的部分,看后面的内容
【合并成一个完整的视频:
ffmpeg -i INPUT1 -i INPUT2 -f FORMAT -acodec AUDIOCODEC -vcodec VIDEOCODEC -sameq OUTPUT
这里的几乎所有用到的参数已经在上面做过解释,除了-f.
-f FORMAT, 表示视频的格式。如-f MP4, 那么我们的视频格式就是MP4。
另外,你几个想要的合并的视频就加入几个-i [Input file], 例如下面我有2个视频要合并.
ffmpeg -i D:/MyVideo1.avi -i D:/MyVideo2.avi -f mp4 -acodec libfaac -vcodec libx264 -sameq D:/Result.avi
这里的Result.avi, 你也可以改成是Result.mp4, 也没有问题。
如果你发现执行完上面的命令后,结果视频(result.avi)不是2个视频的合并,可能是前面你合并视频的时候2个视频的格式不一致导致,或者你所使用ffmpeg的版本有这个bug,你可以换下面的方法再尝试。
1. 将要合并的视频先转换成统一的格式,包括编码格式,帧率,尺寸。
ffmpeg -i [input] -f mpeg -r 25 [out]
2. 让后用copy或者cat命令合并。】
1. 首先将各个视频全部转换为mpeg格式:
ffmpeg -i INPUT -f mpeg OUTPUT
例如:
ffmpeg -i D:/temp1.avi -f mpeg D:/result1.mpg
ffmpeg -i D:/temp2.mp4 -f mpeg D:/result2.mpg
2. 通过copy或者cat命令合并视频
copy -b INPUT+INPUT OUTPUT
例如:
copy /b "D:/result1.mpg"+"D:/result1.mpg" "D:/result.mpge"
3. 将合并的视频进行编码生成最终的结果视频
ffmpeg -i INPUT -f FORMAT OUTPUT
例如:
ffmpeg -i "D:/result.mpge" -f mp4 "D:/result.mp4"
FFmpeg常用基本命令的更多相关文章
- ffmpeg常用基本命令(转)
[FFmpeg]FFmpeg常用基本命令 1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流 ffmpe ...
- 【转】ffmpeg常用基本命令
[FFmpeg]FFmpeg常用基本命令 1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流 ffmpe ...
- [转] FFmpeg常用基本命令
[FFmpeg]FFmpeg常用基本命令 1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流 ffmpe ...
- ffplay的快捷键以及选项 FFmpeg 基本用法 FFmpeg常用基本命令 ffmpeg常用转换命令,支持WAV转AMR
ffmpeg -i 32_mkv_h264_718x480_ac3.mkv -codec copy -bsf:v h264_mp4toannexb -f mpegts xx.ts ./ffmpeg ...
- 【FFmpeg】FFmpeg常用基本命令
1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an output_file_video //分离视频流 ffmpeg -i input_file -acod ...
- 【FFmpeg】FFmpeg常用基本命令(转载)
转自:http://www.cnblogs.com/dwdxdy/p/3240167.html 1.分离视频音频流 ffmpeg -i input_file -vcodec copy -an outp ...
- Linux(centos)的常用基本命令
Linux的常用基本命令. 首先启动Linux.启动完毕后需要进行用户的登录,选择登陆的用户不同自然权限也不一样,其中“系统管理员”拥有最高权限. 在启动Linux后屏幕出现如下界面显示: …… Re ...
- Linux的常用基本命令
Linux的常用基本命令. 首先启动Linux.启动完毕后需要进行用户的登录,选择登陆的用户不同自然权限也不一样,其中“系统管理员”拥有最高权限. 在启动Linux后屏幕出现如下界面显示: …… Re ...
- c# ffmpeg常用参数
c# ffmpeg常用参数 转换文件格式的同时抓缩微图: ffmpeg -i "test.avi" -y -f image2 -ss 8 -t 0.001 -s 350x240 ...
随机推荐
- css考核点整理(九)-有几种文字替换方式,之间的优缺点
有几种文字替换方式,之间的优缺点
- OSX 10.10+Xcode5.1 无法启动或者安装应用程序到iOS 6.1 simulator
错误症状: OSX 10.10+Xcode5.1 无法启动或者安装应用程序到iOS 6.1 simulator 错误原因: iOS Simulator 内核要使用OSX 系统内核,所以iOS Simu ...
- 第五篇:python高级之面向对象高级
python高级之面向对象高级 python高级之面向对象高级 本节内容 成员修饰符 特殊成员 类与对象 异常处理 反射/自省 单例模式 1.成员修饰符 python的类中只有私有成员和公有成员两 ...
- 高性能动画!HTML5 Canvas JavaScript框架KineticJS
高性能动画!HTML5 Canvas JavaScript框架KineticJS KineticJS是一款开源的HTML5 Canvas JavaScript框架,能为桌面和移动应用提供高性能动画,并 ...
- 阿里云服务器如何安装memcached
方法/步骤 1 使用Xshell登陆阿里云服务器. 请使用root帐号登陆.下面的操作全部在home目录里执行 2 安装libevent. 输入命令 yum -y install libevent-d ...
- 关于SQL IO的一些资料
前些天在做优化的时候发现一个有意思的现象,单纯的SQL执行很快,秒级返回,但是页面响应却很慢,一直在想这是为什么呢?有点怀疑服务器的IO有问题,想了想做了个实验,模拟了同样的场景,通过优化SQL将 ...
- 玩转CSLA.NET小技巧系列二:使用WCF无法上传附件,提示413 Entity Too Large
背景:由于系统需要展示图片,客户上传图片到本地客户端目录,然后在数据库中存储本地图片地址,和图片二进制数据 错误原因:我是使用CSLA的WCF服务,使用了数据门户,WCF协议使用的是wsHttpBin ...
- app图标和启动页设置
弄了一下午,终于把iOS中图标的设置和启动页的设置弄明白了.我想以后再也不会浑了. 进入正题: 一:apple 1).iPhone4s 3.5寸屏,也就是640*960,但在模拟器上正常用的是320* ...
- 十五、C# 使用查询表达式的LINQ
使用查询表达式的LINQ 本章介绍了一种新的语法,查询表达式. 1.查询表达式概述 2.特点:投射 筛选 排序 Let 分组 3.作为方法调用 标准查询运算符所实现的查询在功能上 ...
- angular.js 数字
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...