2013年4月4日星期四

利用FFmpeg转换音视频

老罗开了锤子发布会,又请了左小祖咒,左小祖咒唱的《忧伤的老板》,请了更牛的李延亮伴奏。于是想把视频下载下来看,奈何优酷没有mac os的客户端,第一个想法是到mac chrome的缓存里面去找,找了网上说的路径,Chrome:/Users/XXX/Library/Caches/Google/Chrome/Default/Cache
里面发现了其他的视频但没有发现优酷的
safari的是这个Safari:/Users/XXX/Library/Caches/com.apple.Safari
但是也只有一个很大Cache.db文件。

于是登陆iPhone的优酷客户端找到最近观看记录里面的这个视频,用缓存文件的功能
把视频缓存下来。打开iFunbox(由于优酷没有打开iTunes里面的共享文档目录只能用这种方式往外拷贝,不越狱还不行)在优酷应用程序里面的文档目录找到视频,ts格式的m3u8文件,一共是18段,优酷iPhone客户端比较会省事,我说下载下来用优酷本地播放的时候怎么一段一段的呢。

下面该ffmeg出马了。
谷歌一下搜到ffmpeg官方文档主页
http://ffmpeg.org/faq.html#How-can-I-join-video-files_003f
用了这种方式


Additionally, you can use the concat protocol instead of cat or copy which will avoid creation of a potentially huge intermediate file.
ffmpeg -i input1.avi -qscale:v 1 intermediate1.mpg
ffmpeg -i input2.avi -qscale:v 1 intermediate2.mpg
ffmpeg -i concat:"intermediate1.mpg|intermediate2.mpg" -c copy intermediate_all.mpg
ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi
一共十八个ts文件如果一个一个写就太坑爹了,简单的方式是写一个shell脚本,但是脚本不是很熟悉,于是又该vim神器出马了,用vim的宏操作也就是q(recored)功能加上ctrl+a数字加一功能可以不算很优雅但是很快的把脚本写出来


vim的q操作 具体是把一系列操作存到一个寄存器中(a-z)
然后@(a-z)就可以重复执行刚才记录的操作了、

具体操作步骤如下
1.vim的 normal 模式下 按下q开始记录接着按a,也就是存到寄存器a中,接着按0跳到行首,接着用vim的一些motion操作跳到这一行的你要增加的数字,然后ctrl+a,接着本行的下一个数字也这样,然后跳到下一行,然后按q结束宏录制。

好了这次可以按18@a然后刚才的一系列操作就会执行18次

文件最后合并成为一个MP4文件可以看了

都到这一步了,又想把这个视频转换成mp3,以便路上骑车的时候听,用ffmpeg也很容易做到

ffmpeg -i output.mp4 -f mp3 -ab 192000 -y -vn output.mp3
-f 指定格式 -ab指定声音码率 -y 覆盖已存在 -vn 不处理图像

转完又有一个问题,老罗开头的说话不想要,可以,重新剪切下音频
ffmpeg -i output.mp3 -ss 00:00:38 -t 00:05:51 -acodec copy -y recreate_output.mp3

-ss指定开始时间 -t指定结束时间 -acodec copy  表示编码不变
时间格式也可以直接是秒 像123这种

以上参数可以到 man ffmpeg里面搜索

好了
下面把我生成的脚本贴出来
https://github.com/sunjun/Tool/blob/master/concatenate_ffmpeg.sh
还有一个时间格式转换的小函数
https://github.com/sunjun/Tool/blob/master/convert_second_to_readable_string.c













没有评论:

发表评论