批量avconv重新编码列表中途的视频

时间:2014-03-26 17:53:45

标签: bash batch-processing avconv

由于我有一台运行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集开始重新编码呢?

我不知道。

1 个答案:

答案 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