zoukankan      html  css  js  c++  java
  • Linux下视频转换工具:转换,切割,连接,

    首先当然是需要安装ffmpeg软件包,可以直接从源中进行安装!但我安装后并不能成功执行后面所需要执行的转换命令,所以我只能重新从源码编译安装ffmpeg:

    (1)下载ffmpeg源码包,注意版本不能太高,应该与直接从源中安装的版本大抵相当最好;我刚开始下的版本比较高,编译时提示说有一个编译选项找不到,我到网上也没搜出什么结果,所以只能又降低了版本,最后使用的是ffmpeg-0.4.9-p20050906.tbz!

    (2)参考文档 https://wiki.ubuntu.com/ffmpeg 进行编译安装,在编译的时候可能还会有很多错误提示,但多半是由于某些头文件找不到所致,所以直接从源中安装提供这些头文件的包即可(技巧提示,可以在源中直接搜索头文件*.h去掉后缀.h的名称*即可,一般需要安装其对应的*-dev包)!

    安装完毕之后就可以进行转码操作了:

    (1) 对于普通的avi视频文件,可以直接使用命令:
    ffmpeg -y -i "tt.avi" -vcodec xvid -s 400x240 -r 29.97 -b 1500 -acodec aac -ac 2 -ar 48000 -ab 128 -vol 200 -f mp4   "tt.mp4"

    参数解释如下:

    -y 覆盖输出文件,即如果tt.mp4文件已经存在的话,不经提示就覆盖掉了
    -i "tt.avi" 输入文件名,可以自己修改路径和名字
    -vcodec xvid 使用XVID编码压缩视频,不能改的
    -s 400x240 输出的分辨率,注意片源一定要是16:9的不然会变形
    -r 29.97 帧数 (一般用25就可以了)
    -b 1500 视频数据流量,用-b xxx表示使用固定码率,数字可更改;还可以用动态码率如:-qscale 4和-qscale 6,4的质量比6高(一般用800就可以了,否则文件会很大)
    -acodec aac 音频编码用AAC
    -ac 2 声道数1或2
    -ar 48000 声音的采样频率
    -ab 128 音频数据流量,一般选择32、64、96、128
    -vol 200 200%的音量,可更改(如果源文件声音很小,可以提升10到20倍(1000%~2000%),我试过,效果还行!但不能太大,200000%我也试验过,但嘈杂声太大了)
    -f mp4 输出mp4格式
    "tt.mp4" 输出文件名,也可以修改路径和名称

    至于这些参数的值是如何得到的,那就得看你的播放设备(mp4,psp,手机等等)了!刚买播放设备的时候,里面肯定会预置有一些视频文件,通过查看这些预置文件即可得到你的播放设备所支持视频的各项参数!最简单的方法,可以到windows下用暴风影音或KMP播放器打开一个预置视频文件(KMP列出的比暴风影音还要详细),然后通过查看属性就能得到所有你需要的参数了!

    (2) 对于wmv9,rm,rmvb等视频格式,ffmpeg还无法解析,但可以通过两次转换达到目的:
    先用mencoder将其转换成avi格式:
    mencoder tt.rmvb -ovc lavc -oac mp3lame -o tt.avi 
    然后再利用(1)中的命令对该avi文件进行转换即可!

    参数说明:

    tt.rmvb 输入文件(可自己修改路径及名称)
    -ovc lavc 视频编码格式(mp4视频)
    -oac mp3lame 音频编码格式(mp3音频)
    -o tt.avi 输出文件(可自己修改路径及名称)

    mencoder是与mplayer一起安装的,安装了mplayer,系统肯定就会有mencoder! mencoder与ffmpeg好像都有windows版的!
    mencoder的功能也很强大,至于为什么不用mencoder一次性转换到位?这个问题我也还在抽时间研究,因为它的参数使用更加复杂,我现在还没试验成功!

    至于其它的视频文件格式,我用的不多,所以也没测试过,不过应该都能利用(1)中的命令进行搞定!

    就这样,你喜欢的电影就能与你形影相随了!

    补充一点:

    我个人比较喜欢单个的视频文件,所以如果一个视频文件被分成了两个,也可以通过mencoder对其进行合并(好像仅支持avi视频格式的合并)!

    假如有两个rmvb文件cd1.rmvb和cd2.rmvb,反正也是分别需要转换成avi格式的,那么转换到avi之后,就可以通过命令:
    mencoder t1.avi t2.avi -ovc copy -oac copy -o all.avi 
    对分割的文件进行合并,合并完之后,再将其转换成mp4即可!主要是看个人的爱好了!

    参数说明:

    t1.avi t2.avi 输入文件(可自己修改路径及名称,还可以更多,空格分开,注意顺序,还有这些输入文件的码流也需要一致)
    -ovc copy 表示视频编码格式不变(因为是合并而不是转换,所以没必要变)
    -oac copy 表示音频编码格式不变(同上)
    -o tt.avi 输出文件(可自己修改路径及名称,按输入文件的顺序进行连接的)

      15条常用的视频音频编辑脚本命令(mencoder/ffmpeg等)

    可以把它当快速简易参考看,主要的功能有:

    1. 视频格式转换
    2. 音频格式转换
    3. 切割视频及音频
    4. 连接两段视频
    5. 视频音频同步
    6. 将图像系列转换成视频     
    这里是百鬼丸以前收集的一部分命令行视频音频编辑脚本命令,一直在自己的记事本里随时用,现在觉得新浪编辑器够方便,速度也够快,觉得把它们放在博客上更合适些。这些命令都是基于一些开源免费软件,如mencoder,ffmpeg, lame, sox,perl, ffmpeg2theora等,这些软件一般都没有图形界面,需要在命令行窗口输入执行。因此对家庭用户可能并不是太合适,需要花不少时间了解掌握。但对批量处理或者后台处理视频音频很有效。当你不想购买商业软件或者使用linux操作系统时,可以试试。 
     
     
     
    任务1: 延迟视频部分 (对avi文件有效)
    mencoder -delay 0.7 -oac copy -ovc copy input.avi -ooutput.avi
     
    解释:让视频轨比当前的音频轨落后0.7秒钟
     
     
     
    任务2: 延迟音频部分(对avi文件有效)
    mencoder -oac copy -ovc copy -audio-delay -0.7 input.avi -ooutput.avi
     
    解释:让音频轨比当前的视频轨落后0.7秒钟
     
     
     
    任务3:切割视频轨
    mencoder -ss 00:00:10 -endpos 60 -ovc copy -oac copy input.avi-o output.avi
     
    解释:切割视频部分,从0分10秒开始,到1分10秒,时间长度为60秒。将结果存储为output.avi 
     
     
     
    任务4: 连接两段视频 (必须比特率相同)
    mencoder -oac copy -ovc copy -idx -o output.avi input1.aviinput2.avi         
    or(不要求bitrate相同):
    ffmpeg -i test1.avi -i test2.avi -vcodec copy -acodec copy -vcodec copy -acodec copy test12.avi -newvideo -newaudio
     
     
    解释
     
    任务5: 将一系列静止图像和一个mp3文件转换为AVI视频文件
    mencoder "mf://snap*.bmp" -mf fps=25 -oac mp3lame -lameoptsabr:br=128:mode=3 -audiofile test.mp3 -ovc lavc -lavcoptsvcodec=msmpeg4v2:vpass=1:vbitrate=2560000:mbd=2:keyint=132:vqblur=1.0:cmp=2:subcmp=2:dia=2:mv0:last_pred=3-o leadnull
     
    mencoder "mf://snap*.bmp" -mf fps=25 -oac mp3lame -lameoptsabr:br=128:mode=3 -audiofile test.mp3 -ovc lavc -lavcoptsvcodec=msmpeg4v2:vpass=2:vbitrate=2560000:mbd=2:keyint=132:vqblur=1.0:cmp=2:subcmp=2:dia=2:mv0:last_pred=3-o lead.avi
     
    解释:mono=3 代表单声道音频输出, mono=0 代表立体声音频输出。上面使用的视频编码是微软的msmpeg4,因此这个AVI文件可以直接在Windows mediaplayer中播放,不需要另外安装插件。 上面两条命令,表示两遍压缩。 为提高速度,也可以只实用第一条做单次压缩。输出视频的fps为25。
     
     
     
    任务6: 切割mp3音频文件
     
    mplayer -ss 00:01:59 -endpos 102.5 input.mp3 -ao pcm
     
    sox audiodump.wav result1.wav fade t 3
     
    sox result1.wav result2.wav fade t 0 102.5 3.5
     
    lame result2.wav -o fighting.mp3 -b 160
     
    解释:这个过程由四条命令组成。 上面的例子中,
    第一步:切割部分为1分59秒开始,到3分41.5秒结束,长度102.5秒。用户需自己计算切割部分,设定上述参数。 
    第二步:用sox对音频开头3秒钟做一个淡入效果(声音逐渐增强)
    第三步:用sox对音频结束3.5秒钟做一个淡出效果(声音逐渐衰减)
    第四步:将lame处理好的音频重新编码成160kbps的mp3文件
     
    其中,第二、第三步是可以省略的。 
     
     
     
    任务7: 将wma文件转换为mp3文件
     
    mplayer input.wma -ao pcm
     
    lame audiodump.wav -o output.mp3 -b 160
     
    解释:一共两条命令。第一条将wma转化为wav文件,第二条再将wav转换为mp3文件,比特率为160kbps. 
     
     
     
    任务8: 将一系列图像文件转换为flv视频文件
     
    mencoder  "mf://snap*.bmp" -mf fps=25-audiofile test.mp3 -o output.flv   -afresample=22050:0:0 -sws 9 -vf scale=448:-3,expand=448:336 -of lavf-ovc lavc -lavcoptsvcodec=flv:vbitrate=260:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:vpass=1
     
    mencoder  "mf://snap*.bmp" -mf fps=25 -ooutput.flv -audiofile test.mp3  -afresample=22050:0:0 -sws 9 -vf scale=448:-3,expand=448:336 -of lavf-ovc lavc -lavcoptsvcodec=flv:vbitrate=260:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:qns=2:vpass=2
     
    解释:两遍压缩,将一系列snap001.bmp, snap002.bmp,...图像和一个mp3文件"test.mp3"转换成fps=25的录像。音频采样率设定为22050,视频画面大小为448x336,视频的比特率为260kbps。 
    如果你希望更改视频中的keyframe,你可以在第一条命令执行后,手动编辑一个divx2pass.log文件。文件中"Type:1"表示关键帧keyframe (或者叫iframe), "Type:2"表示p-frame,就是只记录相邻帧变化部分的帧。 
     
     
     
    任务9: 将一系列图像文件转换为ogg视频文件
     
    ffmpeg2theora -f image2 snap%05d.bmp -V 320 -ooutput.ogg
     
    解释:ogg录像还是有点用的,wikipedia, wikimeida都在用。上面的视频比特率为320kbps
     
     
     
    任务10: 将一系列图像转化为与NTSCDVD兼容的mpeg2格式文件。 
     
    mencoder -oac lavc -ovc lavc -of mpeg -mpegoptsformat=dvd:tsaf -vf scale=720:480,harddup -srate 48000 -aflavcresample=48000 -lavcoptsvcodec=mpeg2video:vpass=1:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=18:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9-ofps 30000/1001 -o ntscdvd.mpg "mf://snap*.bmp" -mf fps=25-audiofile test.mp3
     
    mencoder -oac lavc -ovc lavc -of mpeg -mpegoptsformat=dvd:tsaf -vf scale=720:480,harddup -srate 48000 -aflavcresample=48000 -lavcoptsvcodec=mpeg2video:vpass=2:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=18:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9-ofps 30000/1001 -o ntscdvd.mpg "mf://snap*.bmp" -mf fps=25-audiofile test.mp3
     
    解释:两遍压缩,输入图像帧率为25fps, 输出帧率为29.97fps,视频编码mpeg2, 音频编码192kbpsac3.  
     
     
     
    任务11: 将一系列图像文件转换为与PALDVD兼容的mpeg2格式视频文件
     
    mencoder -oac lavc -ovc lavc -of mpeg -mpegoptsformat=dvd:tsaf -vf scale=720:576,harddup -srate 48000 -aflavcresample=48000 -lavcoptsvcodec=mpeg2video:vpass=1:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9-ofps 25 -o paldvd.mpg "mf://snap*.bmp" -mf fps=25 -audiofiletest.mp3
     
    mencoder -oac lavc -ovc lavc -of mpeg -mpegoptsformat=dvd:tsaf -vf scale=720:576,harddup -srate 48000 -aflavcresample=48000 -lavcoptsvcodec=mpeg2video:vpass=2:vrc_buf_size=1835:vrc_maxrate=9800:vbitrate=5000:keyint=15:vstrict=0:acodec=ac3:abitrate=192:aspect=16/9-ofps 25 -o paldvd.mpg "mf://snap*.bmp" -mf fps=25 -audiofiletest.mp3
     
    解释:两遍压缩,输入为snap001.jpg, snap002.jpg...和test.mp3,图像系列的fps为25, 输出视频文件的fps为25. 视频编码为mpeg2, 音频编码为192kbpsac3. 
     
     
     
    任务12: 将视频文件转换为一系列图像
    用ffmpeg命令如下
     
    ffmpeg -i test.avi snap%05d.bmp
     
    也可以用mplayer完成同样功能
     
    mplayer video.avi -vo png -ss 00:00:10 -endpos 5.0 -vfcrop=480:360:80:60
     
    解释:这里mplayer的例子中,还提供了额外的切割选择功能。切割的部分从0分10秒开始,到0分15秒结束,长达5秒。同时画面也被切割,切割的位置从坐标(80,60)开始,宽度480像素,高度360像素。这里坐标系以屏幕左上角为(0,0). 
     
     
     
    任务13: 将midi文件转换为mp3文件
     
    timidity input.mid -Ow
     
    lame -b 160 -h -k input.wav output.mp3
     
    解释:第一条命令使用timidity将midi转换为wav文件,第二条命令用lame将wav转换为160kbpsmp3文件。 
    timidity配置和安装还是比较麻烦的。还需要额外安装高品质的sf2声音字体文件,配置sf2文件也异常容易出错。总体效果还可以接受。但无法使用目前流行的vst,因此可能会被慢慢淘汰掉。 
     
     
     
    任务14: 将一系列图像转换为swf格式的flash文件(需要perl) 
     
    flv2swf  input.flv output.swf
     
    解释:有时候可能用swf来保存视频比flv更方便。如果图像数量不多的话,可以采用swftools来进行转换 
    如果图像数量很多的话,首先我们用任务8中的命令将图像转换为一个flv文件。然后我们可以用adobe的各种软件很轻松的将flv录像加入一个flash项目里,最后输出为swf. 如果你熟悉perl的话,也可以用一个perl脚本将flv文件转换成swf.CPAN(Perl公共模块库)有一个FLV::info的模块,安装后就可以使用flv2swf命令了。
     
     
     
     
    任务15: 将mp3文件转换为wma文件
     
    mplayer input.mp3 -ao pcm
     
    ffmpeg -i audiodump.wav -acodec wmav2 -ab 128000test.wma1
     
    解释:偶尔也需要这个功能的。第一步,将mp3文件转换为wav文件,第二步用ffmpeg将wav文件转换为wma. 
     
     
    如果你只需要将单幅图像如某个封面,和一个mp3合并成一个视频文件,请参看前一篇博文。 
     
    参考链接
    上述命令基本上是参考了mplayer的用户手册,videohelp.com的论坛帖子写的。
    http://www.mplayerhq.hu/DOCS/HTML/en/encoding-guide.html
    http://forum.videohelp.com/
     
    软件主页
    mencoder的Windows binary: http://oss.netfarm.it/mplayer-win32.php
    ffmpeg的Windows binary: http://ffmpeg.arrozcru.org/builds/
    Active perl的Windows版本:http://www.activestate.com/activeperl/
     
    上述软件被广泛使用,其源代码部分没有什么问题,但因为专利和版权的问题,公布其Windows的二进制可执行文件则可能触犯了一些国家的法律,目前合法性这个问题还比较模糊。
     
     
    wav转aac命令 可参考
    ffmpeg -i soundtrack.wav -acodec aac -ab 128kb output.m4a
  • 相关阅读:
    SSIS-SqlTask控件使用
    每年有20万人进军IT行业,为何人才缺口依旧这么大?
    推荐!5 本经典著作描绘C++学习路线图!
    C语言有了"链表"还用"数组"干嘛?因为你傻呀,怕你学不会!
    如何优化【if else】的面条代码,我们一起来解决代码复杂度问题!
    为什么要学编程一定要热爱?对不起我并不热爱编程,我只喜欢创造!
    程序员如何应对双十一的大数据冲击!是服务器先崩溃还是程序员先崩溃?
    【C语言项目】这21个入门练手项目,让你对C语言不再说难!
    【学习编程】有0.5倍速和2倍速的学习方法,那你看到过10倍速的学习技巧吗!
    外包程序员入职蚂蚁金服被质疑,网友评论人生污点,真就不拿外包当人了呗?
  • 原文地址:https://www.cnblogs.com/timssd/p/5637992.html
Copyright © 2011-2022 走看看