2014-03-26 51 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