3

我正在尝试将一些 .flac 文件转换为 .mp3,我可以将其导入 iTunes。我尝试使用 find、xargs 和 ffmpeg,但 xargs 给了我一个未终止的引用错误(因为我在文件名中有引号)。

那是我的命令行:

MacKassner:Geto Boys kassner$ find . -type f | egrep "\.flac$" | xargs -I {} ffmpeg -i {} -ab 192k -acodec libmp3lame -ac 2 {}.mp3

它停止并在文件名“Talkin' Loud Ain't Saying Nothin'.flac”中引发错误。

一些技巧可以使这个工作?

- 仅通过查找解决 - 查找。-type f -name "*.flac" -exec ffmpeg -i {} -ab 192k -acodec libmp3lame -ac 2 {}.mp3 \;

4

3 回答 3

4

使用 GNU 并行。它是专门为此目的而构建的:

MacKassner:Geto Boys kassner$ find . -type f | egrep "\.flac$" | parallel ffmpeg -i {} -ab 192k -acodec libmp3lame -ac 2 {}.mp3

您可能还想使用 {.}.mp3 来摆脱 .flac:

MacKassner:Geto Boys kassner$ find . -type f | egrep "\.flac$" | parallel ffmpeg -i {} -ab 192k -acodec libmp3lame -ac 2 {.}.mp3

观看介绍视频以了解更多信息:http ://www.youtube.com/watch?v=OpaiGYxkSuQ

于 2011-02-20T13:28:09.457 回答
2

某些版本的 xargs 支持自定义分隔符。如果是这种情况,它就像添加-d'\n'指示应该使用换行符来分隔项目一样简单(这通常是有道理的)。

在这种情况下,您可以按如下方式使用它:

# find files_containing_quotes/ | xargs -d'\n' -i{} echo "got item '{}'"
于 2013-09-13T18:28:37.597 回答
1

从 egrep 手册页:

-Z, --null
          Output  a  zero  byte  (the  ASCII NUL character) instead of the character that normally follows a file
          name.  For example, grep -lZ outputs a zero byte after each file name instead  of  the  usual  newline.
          This  option  makes  the  output  unambiguous,  even  in  the presence of file names containing unusual
          characters like newlines.  This option can be used with commands like find -print0, perl -0,  sort  -z,
          and xargs -0 to process arbitrary file names, even those that contain newline characters.

所以使用 -Z 和 egrep,和 -0 和 xargs

于 2011-02-18T01:22:37.743 回答