1

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

我不知道。

4

1 回答 1

0

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

选项 1:使用seq

用于seq生成序列,循环并编码。

从 5 到 15 的序列:

seq 5 15

如果您需要格式化数字,例如要为一位数字获取 0 前缀,您可以使用-f开关,该开关采用浮点/双精度的 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
于 2014-03-26T19:36:26.187 回答