批处理转换文件使用ffmpeg和查找-exec和parallel



从另一个堆栈交换帖子中,我知道我可以批量转换媒体文件,保留原始文件名,只使用以下

更改文件扩展名
find ./ -name '*.mp4' -exec bash -c 'ffmpeg -i $0 -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 ${0/mp4/mp3}' {} ;

由于现在大多数计算机都有多个核心,我如何修改上述命令,以便我可以在find的-exec部分使用所有4个核心,因此我可以同时转换4个媒体文件?

我知道GNU parallel可以做类似的事情,但我不知道如何将它们组合成一个命令。

Thanks in advance

哈里

您可以像这样将以空结尾的文件名传递给parallel:

find . -name *.mp4 -print0 | parallel -0 ...

您可以通过{}访问parallel中的参数,并且您可以使用{.}获得没有扩展名的文件名,因此您需要:

find . -name *.mp4 -print0 | parallel -0 ffmpeg -i {} ... {.}.mp3

先用parallel --dry-run试试,看看它看起来是否正确。默认情况下,它将使用所有内核。