我有一本有声读物,其中包含 700 多个 ra 文件(RealAudio),我正在尝试使用 ffmpeg 将其批量转换为 mp3。 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 命令(而不执行它),脚本就会一直正常运行直到最后。
当脚本中止时,我发现我的输出目录中有一些文件,它们都工作正常,我只是希望它能够处理所有这些文件?!我的环境:
Fedora 工作站 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 命令被解释为标准输入击键。因此,您需要添加-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