当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 【原创】ubuntu下压制rmvb文件的脚本,从此压rmvb可以不用回win$了
帖子发表于 : 2010-08-18 9:36 

注册: 2006-06-27 15:48
帖子: 142
送出感谢: 0 次
接收感谢: 0 次
现在dvd都开始支持rmvb了,rmvb格式一直在国内很有市场,可惜linux下无法方便的压制rmvb格式,不能不说是一大遗憾。real公司也太歧视linux了,有压缩工具producer,可偏偏只支持2g的非压缩格式,而且不支持管道,我只好把大文件分成小文件再压缩后合成,分割过程中还涉及到关键帧的取舍问题,不过准算解决了,可惜压缩速度太慢,要说通用性和速度,还是 mpeg4最好!脚本如下,分享给大家尝个鲜。

代码:
#! /bin/bash
PARAM=$#
if [ $PARAM -lt 2 ]; then
   echo -e "usage: tormvb srcfile cut_frame"
   echo -e "usage: tormvb 1.avi  10000"
   exit 1
fi
declare -f fps
declare -i frame
declare -i last_frame
declare -f stime
declare -i cut_frame

#获取字幕文件名
file=`echo $1 | sed -e 's/\.avi$//'`

#获取fps
fps=`mplayer -identify $1 -endpos 1 2>/dev/null -ao null -vo null |grep ID_VIDEO_FPS|cut -d '=' -f 2 `

#生成关键帧文件
#mplayer -vo null -nosound $1 -vf framestep=I -speed 100 1>f.txt
cat f.txt |sed -e 's/\r/\n/g'|awk '{if(/I!/){printf $0" ";next} else{print}}'|grep I\!|cut -d "/" -f 2|awk '{print $1}'>tmp.txt
last_frame=1
while read line
do
  frame=$line
  if [ $(($frame - $last_frame)) -gt $2 ]
  then
    if [ $last_frame -eq 1 ]
    then
      stime=0
      cut_frame=$(($frame - $last_frame - 1))
    else
      stime=`echo "scale=3;$(($last_frame - 2))/ $fps"|bc`
      cut_frame=$(($frame - $last_frame))
    fi
   #echo $stime $cut_frame
    mencoder "$1" -ovc raw -oac pcm  -vf scale=512:-2,harddup,format=i420 -srate 44100 -sub "./$file.srt"  -subcp cp936 -subfont-text-scale 4 -o  temp.avi  -ss $stime -frames $cut_frame
    #将fps降为rmvb格式最常用的23幀
    mencoder -ovc copy -oac copy temp.avi -ofps 23 -o temp2.avi
    cp temp2.avi temp.avi
    producer -i temp.avi -ad  "450k Download (VBR).rpad" -vm Normal -o temp.rmvb -dt -dlf -dls
    if [ $last_frame -eq 1 ]
    then
      mv temp.rmvb $1.rmvb
    else
      rmeditor -i $1.rmvb -i temp.rmvb -o temp1.rmvb
      rm $1.rmvb temp.rmvb
      mv temp1.rmvb $1.rmvb
    fi
    last_frame=$frame
  fi
done < tmp.txt
stime=`echo "scale=3;$(($last_frame - 2))/ $fps"|bc`
cut_frame=$(($frame - $last_frame))
mencoder "$1" -ovc raw -oac pcm  -vf scale=512:-2,harddup,format=i420 -srate 44100  -sub "./$file.srt"  -subcp cp936 -subfont-text-scale 4 -o  temp.avi  -ss $stime
mencoder -ovc copy -oac copy temp.avi -ofps 23 -o temp2.avi
cp temp2.avi temp.avi
producer -i temp.avi -ad  "450k Download (VBR).rpad" -vm Normal -o temp.rmvb -dt -dlf -dls
rmeditor -i $1.rmvb -i temp.rmvb -o temp1.rmvb
rm $1.rmvb temp.rmvb
mv temp1.rmvb $1.rmvb
rm temp.avi
rm tmp.txt



注解:producer需到real的网站下载,该例子中压缩为512宽的视频,第二个参数为每个分割文件包括的幀数,一般选7000-10000之间,否则生成的临时文件会大于2G,就出错了!


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 【原创】ubuntu下压制rmvb文件的脚本,从此压rmvb可以不用回win$了
帖子发表于 : 2010-08-18 22:32 
头像

注册: 2008-06-30 22:32
帖子: 2869
送出感谢: 0 次
接收感谢: 10
学习 :em11


_________________
הללויה
想看看鄙人的新浪微博麽?那就點這吧!


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 【原创】ubuntu下压制rmvb文件的脚本,从此压rmvb可以不用回win$了
帖子发表于 : 2010-08-18 23:43 
头像

注册: 2008-04-26 12:41
帖子: 11000
送出感谢: 11
接收感谢: 38
:em09


_________________
[新手必读]wubi安装常见问题(FAQ)
[分享]装双系统的同学必看——Windows与Linux系统共享交换分区的方法
kde下唯美的暗黑内透主题(无需编译)
无穷老机上的Trinity Desktop Environment


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 【原创】ubuntu下压制rmvb文件的脚本,从此压rmvb可以不用回win$了
帖子发表于 : 2010-08-21 17:38 
头像

注册: 2007-12-01 14:56
帖子: 249
送出感谢: 0 次
接收感谢: 0 次
别再普及rm格式了……
被这格式折腾惨了…所以个人非常希望——Real Media 你早点上路吧,走好走不好就不关我事情了。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 【原创】ubuntu下压制rmvb文件的脚本,从此压rmvb可以不用回win$了
帖子发表于 : 2010-08-21 18:00 
头像

注册: 2009-08-10 14:34
帖子: 261
送出感谢: 0 次
接收感谢: 0 次
话说,会转码的有几个用DVD看片的。。。。。。。。。。。


_________________
如果我们过于爽快地承认失败,就可能使自己发觉不了我们非常接近于正确。——卡尔·波普尔


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译