当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : mp4播放器视频格式转换脚本
帖子发表于 : 2008-01-14 11:20 
头像

注册: 2005-10-25 11:15
帖子: 1016
送出感谢: 0 次
接收感谢: 1
这个脚本用于将一般格式的视频文件转换为很多常见mp4机所支持的xvid格式的avi,功能类似于mp4机驱动光盘中附带的AVIConverter。视频格式转换由mencoder完成,所以机器上需要预先装好mencoder才能使用这个脚本。它的使用方法很简单,如下面这个例子:
代码:
./mp4 -r 320x240 -v 300 -a 128 -t 2 ../abc/*.avi

将../abc/*.avi文件转换为mp4机使用的xvid格式并保存在当前目录,转换的目标视频分辨率为320x240,其中视频部分的码率为300kbps,音频的码率为128kbps,为提高双核cpu的使用率,使用两个线程同时转换。

注意:很多2寸的播放器需要将输出分辨率指定为220x176。

代码:
#!/bin/sh

res=320x240
vbr=300
abr=128
threads=2


encode_thread() {
    for f in "${src[@]}"; do
        name=`basename "$f"`
        if rm "${name}.lock" 1>/dev/null 2>&1; then
            name="[mp4]${name%.*}.avi"
            echo "[$1]Processing: $f"
            nice mencoder \
                "$f" \
                -o "$name" \
                -noodml \
                -of avi \
                -ofps 20 \
                -vf-add scale=${res%x*}:-3 \
                -vf-add expand=${res%x*}:${res#*x} \
                -vf-add scale=-3:${res#*x} \
                -vf-add expand=${res%x*}:${res#*x}:-1:-1:1 \
                -srate 44100 \
                -ovc xvid \
                -xvidencopts bitrate=${vbr}:max_bframes=0:quant_type=h263:me_quality=4 \
                -oac lavc \
                -lavcopts acodec=mp2:abitrate=${abr} \
                -really-quiet \
                1>/dev/null 2>&1
        fi
    done
}


unset src
while [[ -n "$@" ]]; do
    if getopts r:v:a:t: key $@; then
        case $key in
            r) res="$OPTARG" ;;
            v) vbr="$OPTARG" ;;
            a) abr="$OPTARG" ;;
            t) threads="$OPTARG" ;;
        esac
        shift $((OPTIND-1))
    else
        src[${#src[@]}]="$1"
        name=`basename "$1"`
        touch "${name}.lock"
        shift
    fi
    OPTIND=0
done

unset pid
for ((i=1; i<=threads; i++)); do
    encode_thread $i &
    pid[${#pid[@]}]="$!"
done

trap 'rm *.lock; kill "${pid[@]}"' SIGINT
wait "${pid[@]}"


附件:
文件注释: mp4转换脚本
mp4.gz [700 Bytes]
被下载 159 次


_________________
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser
页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-01-14 13:43 

注册: 2008-01-14 11:14
帖子: 41
送出感谢: 0 次
接收感谢: 0 次
看来搂住是mencoder大牛…… :shock:


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-01-15 16:07 

注册: 2006-07-09 12:22
帖子: 1331
地址: 南京
送出感谢: 0 次
接收感谢: 1
循环给var[${#var[@]}]赋值的方式不错。:)

代码:
if getopts r:v:a:t: key $@; then

r前加个前导冒号啊,既然只是判断,不必输出错误信息了吧。

laborer:
trap语句段是为何呢?


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-01-16 5:37 
头像

注册: 2005-10-25 11:15
帖子: 1016
送出感谢: 0 次
接收感谢: 1
aBiNg 写道:
循环给var[${#var[@]}]赋值的方式不错。:)

代码:
if getopts r:v:a:t: key $@; then

r前加个前导冒号啊,既然只是判断,不必输出错误信息了吧。

laborer:
trap语句段是为何呢?


错误信息还是有点用的

trap是为了在按ctrl-c以后停止后台运行的进程,另外做一些必要的清理。


_________________
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-01-16 8:37 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
网上有这种脚本。蛮多的。看不下去,复杂,而且功能都是通常的功能,没什么意义。直接mencoder写,也简单的。


_________________
● 鸣学


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-01-16 8:38 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
http://eexpress.blog.ubuntu.org.cn/2007/12/06/学习mencoder的好软件。devede/
除开把这软件加强。


_________________
● 鸣学


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

当前时区为 UTC + 8 小时


在线用户

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


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

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

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