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