FFMPEG 批量转换在处理所有文件之前退出

FFMPEG 批量转换在处理所有文件之前退出

我有一本有声读物,其中包含 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

相关内容