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'

그렇다면 두 번째 줄이 올바르게 에코되면 왜 첫 번째 줄이 명령을 실행하지 않습니까? 전체 스크립트는 다음과 같습니다.

#!/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는 명령줄 해석도 보고합니다.)

관련 정보