变量中的空格

时间:2012-04-13 15:24:22

标签: bash ffmpeg

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

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

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

答案 2 :(得分:1)

ALBUM='album=Peregrinações Alheias'

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

答案 3 :(得分:1)

如果您总想设置ALBUM,那么Adam的答案就可以了。但是如果你想选择设置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选项

答案 4 :(得分: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"