我正在尝试尽量减少将 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 会将其解释为两个独立的参数。
此致 :)