【问题标题】:Batch avconv re-encode videos halfway through the list批量 avconv 在列表中途重新编码视频
【发布时间】:2023-03-22 10:50:01
【问题描述】:

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

我不知道。

【问题讨论】:

    标签: bash batch-processing avconv


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      • 2013-11-19
      • 2011-12-23
      • 2015-03-24
      相关资源
      最近更新 更多