尽量减少输入以将 mp4 转换为 mp3

尽量减少输入以将 mp4 转换为 mp3

我正在尝试尽量减少将 mp4 转换为 mp3 所需的输入。

这就是我一直在做的事情:

ffmpeg -i 'Borrowed Angel.mp4' -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 'Borrowed Angel.mp3'

这是我目前所拥有的:

ffmpeg -i $1.mp4 -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 $1.mp3

我想我需要一个宏。

但它需要一个输出文件。

答案1

您可以设置一个脚本或程序来帮助您完成此操作。您需要创建一个目录~/.bin~/.scripts,并将其添加到您的$PATH环境变量中。您可以通过在末尾编辑并保存以下行来执行此操作~/.bashrc,但确切位置在这里并不重要:

export PATH=$HOME/.bin:$PATH

现在,在获取新文件后(即在新终端中),可以运行~/.bin/具有(可执行)访问权限的任何文件。+x~/.bashrc

touch ~/.bin/mov-dac
chmod +x ~/.bin/mov-dac
#!/bin/bash

MOV="$*"
FILENAME=$(basename "${MOV// /_}" | sed 's/\(.*\)-.*/\1/').mp3
ffmpeg -i "${MOV}" -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 /tmp/"${FILENAME}"

然后,在新的终端中,你可以运行mov-dac /path/to/My\ File.mp4并得到/tmp/My_File.mp3

我更喜欢保持音频原样,但将其从视频文件中剥离出来并保存在该文件类型/容器中。此外,任何超过 15 米(900 秒)长的曲目都会添加到“Sets”专辑中,而不是“Singles”,以便于排序。 $OUTDIR是最终目的地,并且有_Sets/_Singles/在其中。

#!/bin/bash

# @earthmeLon

MOV="$*"
OUTDIR="/mnt/DAC"
MEDIAINFO=$(mediainfo "${MOV}" --Output=JSON)
FORMAT=$(echo $MEDIAINFO | jq '.[]| .track[] | select(."@type"=="Audio")| .Format' | tr '[:upper:]' '[:lower:]')
FORMAT=$(echo $FORMAT | tr -d '"')
if [ $FORMAT == "vorbis" ]; then
    FORMAT="ogg"
fi
DURATION=$(echo $MEDIAINFO | jq '.[]| .track[] | select(."@type"=="Audio")| .Duration')
DURATION=$(echo $DURATION | tr -d '"')
DURATION=${DURATION%.*}
if [ $DURATION -gt 900 ]; then
    ALBUM="Sets"
else
    ALBUM="Singles"
fi

FILENAME=$(basename "${MOV// /_}" | sed 's/\(.*\)-.*/\1/').${FORMAT}
ffmpeg -y -i "$MOV" -vn -metadata album=$ALBUM -acodec copy /tmp/"${FILENAME}"
if [ -d ${OUTDIR}/_${ALBUM} ]; then
    cp /tmp/"${FILENAME}" ${OUTDIR}/_${ALBUM}/
    rm /tmp/"${FILENAME}"
fi

答案2

您可以将其写入文件,例如mp423(mp4 到 mp3 转换器),然后将其保存到特定文件夹(我个人使用~/.scripts),然后您必须将该路径添加到$PATH环境变量,以便能够直接在终端中执行它而无需提及完整路径。因此将其添加到您的~/.bashrc文件中:

export PATH=$PATH:/home/yourusername/.scripts/

然后你可以通过以下方式运行:

mp423 "Borrowed Angel"

不要忘记使用双引号如果名称包含空间因为 bash 会将其解释为两个独立的参数。

此致 :)

相关内容