2016-12-27 37 views
1

我正在編寫一個shell腳本來編碼給定目錄中的音頻文件,並將.flac文件輸出到另一個目錄。我的概念驗證循環遍歷每個文件並通過ffmpeg運行。我懷疑有一種方法可以通過單個命令將整個輸入文件列表傳遞給ffmpeg,但一直無法弄清楚。FFmpeg可以一次編碼多個文件嗎?

我現在的版本是這樣的:

#!/bin/sh 

encode_album() { 
    local artist=$1; shift 
    local album=$1; shift 
    local in_dir="${HOME}/Music/raw-imports/${artist}/${album}" 
    local out_dir="${HOME}/Music/library/${artist}/${album}" 

    mkdir -p "${out_dir}" 

    find "${in_dir}" -type f -name *.aiff | while IFS= read -r in_file; do 
     local track_name=$(basename "${in_file}" .aiff) 
     local out_file="${out_dir}/${track_name}.flac" 

     encode_track "${in_file}" "${out_file}" 
    done 
} 

encode_track() { 
    local in_file=$1; shift 
    local out_file=$1; shift 

    </dev/null ffmpeg -i "${in_file}" -codec:a flac "${out_file}" 
} 

encode_album "Rolf Lislevand" "La Mascarade" 

這工作,但我需要將這些文件送入FFmpeg的一個接一個,或者是能夠接受一個批處理文件,並處理它們?

回答

2

基本語法

ffmpeg -i input1 
     -i input2 
     ... 
     -i inputn 
     -map 0 -f flac out1.flac 
     -map 1 -f flac out2.flac 
     ... 
     -map n-1 -f flac outn.flac 
-1

是的,你可以使用批處理。 在這裏看到更多的信息:

http://forum.videohelp.com/threads/356314-How-to-batch-convert-multiplex-any-files-with-ffmpeg

+0

在該線程的每個例子是關於一個接一個通過文件循環,就像我已經在做。我想知道如果ffmpeg支持類似'ffmpeg -i file1 file2 file3 ... -codec:a flac out1 out2 out3 ...' – ivan

+0

您可以將類似類型的多個文件轉換爲另一種相同類型的文件,例如:ls * .avi | xargs -I {} ffmpeg -i {} {} .mp3 –

+0

你也可以在這裏看到多個輸出: https://trac.ffmpeg.org/wiki/Creating%20multiple%20outputs –

相關問題