簡體   English   中英

使用 bash 腳本時 ffmpeg 輸入文件名的問題

[英]Problems with ffmpeg input filenames when using bash script

我正在嘗試使用ffmpeg將一些 .m4a 音頻文件轉換為 .mp3,並且遇到了一些讓我感到困惑的事情。 我想在與 .m4a 相同的位置和相同的文件名中創建 .mp3,因此我使用find/exec和 bash 腳本的組合來執行此操作,如下所示:

find /Volumes/Untitled/ -name '[!.]*' -name '*.m4a' -exec ./m4atomp3.sh {} \;

其中 m4atomp3.sh 看起來像:

#!/usr/bin/env bash
[[ -f "$1" ]] || { echo "$1 not found" ; exit 1 ; }
P="$1"
echo "$P is the full filename"
filename=${P%.*}
echo "$filename is the stripped filename"
m4afilename=\"$filename.m4a\"
echo "$m4afilename is the input filename"
mp3filename=\"$filename.mp3\"
echo "$mp3filename is the output filename"
mycmd="/Users/nickstyles/Downloads/ffmpeg -i "$m4afilename" -codec:a libmp3lame -qscale:a 2  -nostdin "$mp3filename
echo $mycmd
$mycmd

每當我嘗試此操作時,它都會失敗,因為ffmpeg找不到該文件,這似乎是因為文件名中有空格,例如,如果文件名為/Volumes/Untitled/My M4As/My M4A.m4a我會看到:

ffmpeg version N-99346-g003b5c800f-tessus  https://evermeet.cx/ffmpeg/  Copyright (c) 2000-2020 the FFmpeg developers
  built with Apple clang version 11.0.0 (clang-1100.0.33.17)

[configuration details]

"/Volumes/Untitled/My: No such file or directory

但是,如果我只是將echo $mycmd返回的內容粘貼到命令行中,例如:

/Users/nickstyles/Downloads/ffmpeg -i "/Volumes/Untitled/My M4As/My M4A.m4a" -codec:a libmp3lame -qscale:a 2 -nostdin "/Volumes/Untitled/My M4As/My M4A.mp3"

然后它工作得很好。 我確定我遺漏了一些非常明顯的東西,希望有人能發現!

正如Benjamin W.指出的那樣,問題是由於WordSplitting ,變量仍然被 bash 拆分,而我添加到變量內容中的引號無濟於事 關鍵是要確保將引號放在變量本身周圍,例如:

m4afilename=$filename.m4a
echo "$m4afilename is the input filename"
mp3filename=$filename.mp3
echo "$mp3filename is the output filename"
/Users/nickstyles/Downloads/ffmpeg -i "$m4afilename" -codec:a libmp3lame -qscale:a 2  -nostdin "$mp3filename" 

現在這有效!

試試這個: mycmd="/Users/nickstyles/Downloads/ffmpeg -i $m4afilename -codec:a libmp3lame -qscale:a 2 -nostdin $mp3filename"

在 bash 中,您可以將變量直接放入雙引號中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM