Bashスクリプト - ffmpegは期待どおりに呼び出されません。

Bashスクリプト - ffmpegは期待どおりに呼び出されません。

私の音楽ライブラリをogg *に変換するためのbashスクリプトを書いていますが、正しいコマンドを実行するとなぜか混乱しています。これを行う必要がある行は次のとおりです。

ffmpeg -i "${file}" -f flac pipe:1 | oggenc - -o "${NEWOGGFILE}"

実際にこの出力行をコピーすると、期待どおりにエンコードされます。

echo "ffmpeg -i \"${file}\" -f flac pipe:1 | oggenc - -o \"${NEWOGGFILE}\""

たとえば、

ffmpeg -i "./Music/Oldies/Sam Cooke/23 Shake.m4a" -f flac pipe:1 | oggenc - -o "/mnt/Primary/Audio_OGG_Cache/./Music/Oldies/Sam Cooke/23 Shake.ogg"

ただし、スクリプトを実行すると、ffmpegは次のエラーメッセージを表示します。 'pipe:1' に適した出力形式が見つかりません。パイプライン:1:無効な引数の解析エラー、3argsの証明に証明が必要でした。文字列には1つだけが提供されました。 'al Warm-up/Vocal Lessons- V1 Vocalize & Breath/01-05- 123454321.mp3'

もしそうなら、2行目が正しくエコーされたら、なぜ最初の行がコマンドを実行しないのですか?完全なスクリプトは次のとおりです。

#!/bin/bash
pushd "${1}"

find ./ | while read file
do
  BASENAME=`basename "${file}"`
  NEWOGGFILE=${2}`dirname "${file}"`/${BASENAME%.*}.ogg
  NEWFILE=${2}`dirname "${file}"`/${BASENAME}

  # Ignore directories, and don't re-copy existing files.
  if [ ! -d "${file}" ] && [ ! -f "${NEWFILE}" ] && [ ! -f "${NEWOGGFILE}" ]; then
    mkdir -p "`dirname "${NEWFILE}"`"
    # m4a, mp3, and flac get converted
    if [ "${file##*.}" = "flac" ]; then
      oggenc "${file}" -o "${NEWOGGFILE}"
    elif [ "${file##*.}" = "m4a" ] || [ "${file##*.}" = "mp3" ]; then
      ffmpeg -i "${file}" -f flac pipe:1 | oggenc - -o "${NEWOGGFILE}"
    # any other remaining types of files (typically album art) are copied directly.
    else
      cp "${file}" "${NEWFILE}"
    fi
  else
    echo "${NEWFILE}" already exists.
  fi
done

popd

*別のキャッシュディレクトリにあります。熱心なファンの皆さん、気をつけないでください!

ベストアンサー1

ファイルシステムの問題であれ、もっと基本的な問題(ディレクトリ名に印刷できない文字など)であれ、コマンドラインに何か奇妙なことが起こっています。

「パイプに適した出力形式が見つかりません:1」というエラーメッセージは、前の「-f flac」を省略したために発生します。

mp3の名前を問題で指定されたファイル名に変更し、スクリプトを実行してみましたが、うまくいきました(oggencが標準入力でflacエンコーディングを好まないまで)。

(don_crisstiが提案したように)-loglevel debugコマンドラインに追加し、実際に何が起こっているのかを確認するために、ディレクトリのサブセットでスクリプトを実行して問題を引き起こすファイルまたはディレクトリを分離することをお勧めします。 (デバッグレベルでは、ffmpegはコマンドラインの解釈も報告します。)

おすすめ記事