2014-03-26 31 views
1

由于我有一台运行Linux的低端计算机,我经常需要对高清视频进行重新编码,降低质量以便能够在我的机器上观看它们。一个典型的例子是当我下载一个系列的几集时,我无法一次完成所有的转换,我需要在系列的一半中开始重新编码。批量avconv通过列表中途重新编码视频

我通常使用这条线一集转换为低质量:

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

可能有很多方法可以做到这一点,这里有几个选项。

选项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