问题
处理成视频文件是为了:
- 减少频繁读取一系列图片文件,对硬盘的影响
- 归档的时候方便管理
- 文件体积相对png序列小很多
- 使用cfhd 编码可以在保留透明通道的同时以较小体积与较高质量保存序列内容
解决
常规文件处理:将当前文件夹内的序列帧处理成视频
firstfile=`ls -l | grep '^-'|awk -F" " '{print $9}'|grep '[0-9][0-9][0-9][0-9]\.'|head -n 1`
index=`echo $firstfile|awk -F"." '{print $1}'|tail -c 5;`
encodefile=`echo $firstfile|sed "s/$index\./%04d\./"`
targetfile=`echo $firstfile|head -c -10`'.mov'
ffmpeg -r 30 -start_number $index -i $encodefile -vcodec cfhd -b 200M $targetfile -y
- 获取第一个文件
- 有些序列帧不是从0000开始的,所以要获取第一帧的数字字符,转换成数字
- 获取起始编码文件的名字
- 获取输出文件的名字,附加“MOV”后缀
- 以数字为起始,以%04d匹配,以cfhd编码200M进行编码。
综合方案
批量文件夹内部处理:在oc渲染结果所在文件夹使用,把所有序列转换成cfhd视频素材,生成到../../Precomp文件夹中(会覆盖)
for i in `ls -l | grep '/'|awk -F" " '{print $9}'`;
do firstfile=`ls $i -l | grep '^-'|awk -F" " '{print $9}'|grep '[0-9][0-9][0-9][0-9]\.'|head -n 1`;
index=`echo $firstfile|awk -F"." '{print $1}'|tail -c 5;`;
encodefile=`echo $i$firstfile|sed "s/$index\./%04d\./"`;
targetfile=`echo $firstfile|head -c -10`'.mov';
tmpcurDIR=`pwd|sed 's/\ /_/'`;
outputDIR=../../Precomp/`basename $tmpcurDIR`/$targetfile;
mkdir ../../Precomp;
mkdir ../../Precomp/`basename $tmpcurDIR`;
ffmpeg -r 30 -start_number $index -i $encodefile -vcodec cfhd -b 200M $outputDIR -y ;
done
另外,由于cfhd不支持竖屏,竖屏的编码要换用h264
for i in `ls -l | grep '/'|awk -F" " '{print $9}'`;
do firstfile=`ls $i -l | grep '^-'|awk -F" " '{print $9}'|grep '[0-9][0-9][0-9][0-9]\.'|head -n 1`;
index=`echo $firstfile|awk -F"." '{print $1}'|tail -c 5;`;
encodefile=`echo $i$firstfile|sed "s/$index\./%04d\./"`;
targetfile=`echo $firstfile|head -c -10`'.mp4';
tmpcurDIR=`pwd|sed 's/\ /_/'`;
outputDIR=../../Precomp/`basename $tmpcurDIR`/$targetfile;
mkdir ../../Precomp;
mkdir ../../Precomp/`basename $tmpcurDIR`;
ffmpeg -r 30 -start_number $index -i $encodefile -vcodec libx264 -b 100M $outputDIR -y ;
done