FFMPEG的用法1

FFMPEG的用法


参考一:

转自:http://www.cnblogs.com/gmapapi/archive/2013/01/18/2866405.html

FFMPEG是一个视频软件的装换工具。


DOS下的操作如下:


ffmpeg 转换


D:\ffmpeg\bin>ffmpeg.exe -i C:\Users\pc\Desktop\sp.mp4 -vf scale=500:-1 -t 100 ss.flv


C:\Users\pc\Desttop\sp.mp4 是所需要转换的文件地址


scale=500:-1 表示准换后的视频的宽度为500px -1表示高度自适应,也可以写成500:500,表示宽度和高度都是500px


-t 100 表示截取的视频的时间为100毫秒,


ss.flv表示命名的新文件名,文件存放在D盘.


ffmpeg 截图


ffmpeg -i demo.mp4 -ss 10.1 -t 0.001 1.jpg


截取demo.mp4的视频 从10.1秒开始 -t 0.001表示截取10.1秒的这张图片 保存为 1.jpg


ffmpeg 裁剪


ffmpeg -i demo.mp4 -filter:v "crop=10:20:100:100" out.mp4


crop里的参数依次为: 左边距:右边距:宽度:高度


ffmpeg 相同分辨率转flv


ffmpeg -i demo.mp4 -vcodec copy -acodec copy out.flv


Ipad 可以直接播放mp4,可以用html5的video标签


<video width="555" height="315" controls preload="auto" src="demo.mp4"></video>


 


ffmpeg 视频合成


因为 ffmpeg 是支持切分 mp4 视频的,所以我就理所当然的以为 ffmpeg 是支持视频合并。直到今天同事找我问方法,才发现一直以为的方法是错误的, mp4 不支持直接 concate(丢人了。。。),赶紧补了一下能量,从网上抓来了多种实现。


注: 这里的 mp4 指的是网上最多见的 h264+aac mpeg4 容器的方式


ffmpeg + ts


这个的思路是先将 mp4 转化为同样编码形式的 ts 流,因为 ts流是可以 concate 的,先把 mp4 封装成 ts ,然后 concate ts 流, 最后再把 ts 流转化为 mp4。


1
2
3
ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
  


关于页面视频播放的一些总结


1.如果文件比较大的话一般只能播放流媒体格式的文件,比如flv格式,采用边下载边播放的形式,所以如果文件不是flv格式的话需要按照上面所介绍的转换方式进行转换。


2.文件的码率会影响下载的速度,如果当前网络为1M,那么想要流畅的播放视频文件的话,播放的文件的码率必须在1024Kbps以下,否则就需要进行转换,以达到最佳播放效果。


更多关于Ffmpeg的介绍 http://ffmpeg.org/


更多关于Jplayer的介绍 http://www.jplayer.org/


参考二:

转自:http://suncup.info/2014/07/ffmpeg_concatenate_h264/


使用FFMPEG命令行裁剪合并MP4封装的H.264视频音频流

最近因为工作上的关系又要重操旧业折腾视频编码了,而且这次更偏向实际应用一些。

工作时使用到的工具:

  • CamStudio - 屏幕录像,可录音。Free, GPL license
  • MediaCoder - Audio/Video Transcode Interface
  • FFmpeg - Audio/Video CODEC Converter. Free, LGPL
  • StreamEye - 视频码流分析器。Commercial
  • YUVviewer - YUV RAW码流播放器
  • MediaPlayer

这次的工作是为了录制一次培训讲座中Lab部分的演示。录制很麻烦,起码NG了千万次,而且有过长时间的返工。那么最后为了减少重新录制的麻烦,我选择了输出片段的方式。期望依靠后期处理来进行裁剪和合并的操作。但我并没有Adobe Premier这种非线性编辑器,所以就略显麻烦。折腾很久。

首先CamStudio输出的视频是AVI封装,视频为CamStudio专用编码、音频则是PCM。所以第一步是将这个原始的AVI码流使用MediaCoder的界面小批量地将它用x264编码,Baseline profile@L3.1。这样可以在其他并未预装CamStudio解码器的机器正常播放。

接下来,需要把录成的各个章节小片段合并。我尝试过许多种组合,国产流氓软件我们就不再提及。这里记录下使用FFmpeg的操作过程。来源于搜索到的这篇文章。它的一个思路就是将mp4用MPEG TS码流,而TS码流在文本数据层面可以进行拼接的动作。那么我这里还多了一步转换成mp4封装的步骤,vcode和acode就不指定了,FFmpeg的默认编码必然满足我的需要。

ffmpeg -i demo2-1.avi demo2-1.mp4
ffmpeg -i demo2-2.avi demo2-2.mp4
...
ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4

后来嫌麻烦,写了个Batch做这个合并的事情。放心,FFmpeg跑的挺快的。我在Windows下干活,也可以根据需要转成shell脚本。

@echo off

ffmpeg -i %1 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i %2 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc %3

del 1.ts
del 2.ts

最后呢,就是按照需要去裁剪那些因为不断失误而录下来的错误。参考了这篇这篇文章。他们的一个思路都是利用ffmpeg -ss <Start time> -t <Duration>的选项去做裁剪输出。但是直接对H.264和AAC等编码的码流使用会有两大问题:1、视频裁剪只能对关键参考帧动刀子,如果需要裁切的时间落在了P帧或者B帧最后输出的视频片断肯定有偏差。2、比较明显的音画不同步问题。

那么为了解决上述问题,思路则为:针对问题1,首先将码流转换为仅帧内预测编码(Intra Prediction),另外将AAC等压缩的音频流还原成PCM也对问题2有帮助。参考文章之一选择了MJPEG作为“无损”的视频编码格式,并且提到不使用RAW的理由。而在我的实际使用步骤并不绝对符合。我使用h264的纯帧内编码和PCM音频。

ffmpeg -i demo3-1_1.avi -vcodec h264 -intra -acodec pcm_s16e demo3-1_out.avi

接下来,想要将一段25秒长的错误之处去掉。这里利用MPlayer播放暂停后使用Goto(Ctrl+G)得到比较精确的时间:2'59.121'' ~ 3'24.638''。那么用FFmpeg裁剪,就等价于截取0'0''~2'59.121''和3'24.638''这段,抛弃不要的,用上面讲的方法合并前后。为了计算Duration方便,我将分秒格式的时间(1:2.30)换算成秒钟浮点数(62.30)——这两种格式都被FFmpeg支持。

ffmpeg -ss 0.00 -t 179.121 -i demo3-1_out.avi -vcodec libx264 -acodec libvo_aacenc
-ab 320k demo3-1_1.mp4
ffmpeg -ss 204.638 -t 80.372 -i demo3-1a.avi -vcodec libx264 -acodec libvo_aace
nc -ab 320k demo3-1_2.mp4

join_mp4.bat demo3-1_1.mp4 demo3-1_2.mp4 demo3-1.mp4

好了,烦恼我一个月的视频编辑做完啦。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值