모든 파일을 처리하기 전에 FFMPEG 일괄 변환이 종료됩니다.

모든 파일을 처리하기 전에 FFMPEG 일괄 변환이 종료됩니다.

ffmpeg를 사용하여 mp3로 일괄 변환하려고 하는 700개 이상의 ra 파일(RealAudio)이 포함된 오디오북이 있습니다. RA 파일 이름은 Chapter-verse.ra(예: 13-01.ra)입니다.

스크립트를 실행하면 최대 32개의 파일을 처리한 다음 중지됩니다. 각 파일에 대해 오류가 표시되지만 여전히 변환됩니다.

이것은 내 스크립트입니다.

#!/bin/bash
#

outdir=/data/sounds/output
srcdir=/data/sounds

# Cleanup first
rm -f /data/sounds/output/*

ls -1 ${srcdir}/*.ra | while read file
do
    infile=$(basename $file)
    chapter=$(echo $infile | cut -f1 -d"-")
    verse=$(echo $infile | cut -f2 -d"-")
    verse=$(echo $verse | cut -f1 -d".")
    echo "File $file | Target: Chapter $chapter Verse $verse"
    echo
    ffmpeg -i $file -loglevel error -acodec libmp3lame ${outdir}/Chapter${chapter}_Verse${verse}.mp3
done

다음은 내가 얻은 출력의 일부입니다.

[ac3 @ 0x221e520] frame sync error
Error while decoding stream #0:0: Invalid data found when processing input
/data/sounds/13-02.ra: Input/output error
File data/sounds/13-03.ra | Target: Chapter 13 Verse 03
data/sounds/13-03.ra: No such file or directory
File /data/sounds/13-04.ra | Target: Chapter 13 Verse 04
[ac3 @ 0x1a4d520] frame sync error
Error while decoding stream #0:0: Invalid data found when processing input
/data/sounds/13-04.ra: Input/output error
File data/sounds/13-05.ra | Target: Chapter 13 Verse 05
data/sounds/13-05.ra: No such file or directory
File /data/sounds/13-06.ra | Target: Chapter 13 Verse 06

혼란스럽게도 "해당 파일이나 디렉터리가 없습니다"라고 불평하지만 ffmpeg 명령을 실행하지 않고 그냥 에코하면 스크립트가 끝까지 잘 실행됩니다.

스크립트가 중단되면 출력 디렉터리에 일부 파일이 있고 모두 잘 작동하는 것을 볼 수 있습니다. 그냥 모든 파일을 처리하기를 원합니까? ! 내 환경:

페도라 워크스테이션 21

ffmpeg 버전 2.4.8 저작권 (c) 2000-2015 FFmpeg 개발자

답변1

이것을 알아 냈습니다. 이것은 이미 답변되었습니다여기

이제 ffmpeg 줄은 다음과 같습니다.

   < /dev/null  ffmpeg -i $file -loglevel error -acodec libmp3lame ${outdir}/Chapter${chapter}_Verse${verse}.mp3

그리고 끝까지 가십시오.

답변2

나는 첫 번째 ffmpeg 명령이 stdin 키 입력으로 해석된다고 생각합니다. 따라서 -nostdin다음과 같이 ffmpeg 호출에 추가해야 합니다 .

#!/bin/bash
#

outdir=/data/sounds/output
srcdir=/data/sounds

# Cleanup first
rm -f /data/sounds/output/*

ls -1 ${srcdir}/*.ra | while read file
do
    infile=$(basename $file)
    chapter=$(echo $infile | cut -f1 -d"-")
    verse=$(echo $infile | cut -f2 -d"-")
    verse=$(echo $verse | cut -f1 -d".")
    echo "File $file | Target: Chapter $chapter Verse $verse"
    echo
    ffmpeg -nostdin -i $file -loglevel error -acodec libmp3lame ${outdir}/Chapter${chapter}_Verse${verse}.mp3
done

관련 정보