2

我在变量中遇到一些空格问题:

ALBUM=' -metadata album="Peregrinações Alheias"'

这个命令:

ffmpeg -i $R_IMG -r 1 -b 1800 -i $SOUND -acodec libmp3lame -ab 128k "$ALBUM" -y $OUT

回报:

Unable to find a suitable output format for ' -metadata album="Peregrinações Alheias"'

如果我从变量中取出“”:

ffmpeg -i $R_IMG -r 1 -b 1800 -i $SOUND -acodec libmp3lame -ab 128k $ALBUM -y $OUT

回报:

Unable to find a suitable output format for 'Alheias"'

而且我确信我在 bash sintax 中遗漏了一些东西......


更新:

所以看起来问题不在于空格,而在于“-metadata”参数......

问题是我有很多元数据,我想把它们放在一个变量中。像这样:

META=' -metadata album="Peregrinações" -metadata title="Passeio ao PETAR" -metadata author="Rogério Madureira" -metadata date="2012" -metadata description="Áudio de um passeio ao PETAR" -metadata comment="Áudio capturado com TACAM DR-07MKII e Foto capturada com Canon PowerShot S5IS" '

接着:

ffmpeg -i $R_IMG -r 1 -b 1800 -i $SOUND -acodec libmp3lame -ab 128k $META -y $OUT

4

5 回答 5

2

Bash 将引号中的单词解释为单个参数。尝试

ALBUM='album="Peregrinações Alheias"'
ffmpeg -i $R_IMG -r 1 -b 1800 -i $SOUND \
  -acodec libmp3lame -ab 128k -metadata "$ALBUM" -y $OUT
于 2012-04-13T15:29:29.083 回答
2

而是将您的命令放入数组中。

于 2012-04-13T15:29:38.567 回答
1
ALBUM='album=Peregrinações Alheias'

ffmpeg -i $R_IMG -r 1 -b 1800 -i $SOUND -acodec libmp3lame -ab 128k -metadata "$ALBUM" -y $OUT
于 2012-04-13T15:32:05.757 回答
1

如果你总是想设置ALBUM,那么亚当的回答是可以的。但是如果你想有选择地设置ALBUM然后使用这个:

ALBUM="Peregrinações Alheias"
TITLE="Passeio ao PETAR"
OPTIONAL=
ffmpeg -i $R_IMG -r 1 -b 1800 -i $SOUND \
    -acodec libmp3lame -ab 128k \
     ${ALBUM:+-metadata album="$ALBUM"} \
     ${TITLE:+-metadata title="$TITLE"} \
     ${OPTIONAL:+-metadata optional="$OPTIONAL"} \
    -y $OUT

未设置时省略ALBUM完整${var:+subst}块。其他变量当然是一样的-

当然,如果您要设置一组固定的数据,这可以扩展到多个-metadata选项。

于 2012-04-13T15:37:10.923 回答
1

使用eval可以做你想做的事情......根据你在$R_IMG,$SOUND和中的内容$OUT,他们可能需要双引号转义,例如。\"$SOUND\"……

您的$META(我认为这是您最初名为 $ALBUM 的另一个名称)不需要像这样布置,但它肯定对(我)有帮助......只是空格,就像在您的原始作品中一样。

META='
-metadata album="Peregrinações"
-metadata title="Passeio ao PETAR"
-metadata author="Rogério Madureira"
-metadata date="2012"
-metadata description="Áudio de um passeio ao PETAR"
-metadata comment="Áudio capturado com TACAM DR-07MKII e Foto capturada com Canon PowerShot S5IS"
'; META="$(echo "$META" |sed 's|"|\\\\"|g' |tr '\n' ' ')" 

eval "ffmpeg -i $R_IMG -r 1 -b 1800 -i $SOUND -acodec libmp3lame -ab 128k $META -y $OUT"

如果您不想使用sed转换线,您只需将每个更改为"如下示例所示: $META\\"

META=' -metadata album=\\"Peregrinações\\" -metadata title=\\"Passeio ao PETAR\\" -metadata author=\\"Rogério Madureira\\" -metadata date=\\"2012\\" -metadata description=\\"Áudio de um passeio ao PETAR\\" -metadata comment=\\"Áudio capturado com TACAM DR-07MKII e Foto capturada com Canon PowerShot S5IS" '
eval "ffmpeg -i $R_IMG -r 1 -b 1800 -i $SOUND -acodec libmp3lame -ab 128k $META -y $OUT"

我已经使用以下ffmpeg编码参数成功测试了它:

eval "ffmpeg -i ~/input.flv -sameq -acodec libmp3lame -ab 128k $META -y ~/output.mp3"
于 2012-04-13T17:00:34.537 回答