由于我有一台运行Linux的低端计算机,我经常需要对高清视频进行重新编码,降低质量以便能够在我的机器上观看。一个典型的情况是,当我下载一系列剧集时,我无法一次性转换它们,我需要在系列中途开始重新编码。
我通常使用此行将单个剧集转换为较低的质量:
avconv -i anime_episode_01.mkv -map 0 -c copy -c:v libx264 -crf 31 anime_01.mkv
如果我要立即批量转换它们,我会使用类似的东西:
for i in *.mkv;do avconv -i "$i" -map 0 -c copy -c:v libx264 -crf 31 "encoded/$i";done
encoded
是子目录。
但是如果我需要在第5集开始重新编码呢?
我不知道。
答案 0 :(得分:0)
可能有很多方法可以做到这一点,这里有几个选项。
选项1:使用seq
使用seq
生成序列,循环并编码。
5到15的序列:
seq 5 15
如果您需要格式化数字,例如要获得一个数字的0前缀,你可以
使用-f
开关,它采用float / double的printf样式格式化参数。
seq -f %02.0f 5 15
这可以在循环中使用,例如像这样的东西:
for i in $(seq -f %02.0f 5 15); do
filename="anime_episode${i}.mkv"
echo "Encoding episode $i: $filename"
avconv -i "$filename" -map 0 -c copy -c:v libx264 -crf 31 "encoded/$filename"
done
选项2:检查编码文件是否存在
与您在当前循环中执行的操作几乎相同,但只执行编码 编码文件尚不存在。
for i in *.mkv; do
if [ ! -f encoded/$i ]; then
echo "Encoding file: $i"
avconv -i "$i" -map 0 -c copy -c:v libx264 -crf 31 "encoded/$i"
else
echo "Skipped file: $i"
fi
done