我有一个脚本,可将mp3文件拆分为较小的文件,并对它们进行递增编号。我现在也尝试逐步增加-元数据标题的值和-元数据轨道的值,但是ffmpeg会将所有内容视为字符串。我遇到的问题是。
ffmpeg -i "$f" -f segment -segment_time 1200 -ar 22050 -ac 1 -metadata title="$%03d-$fn.mp3" -metadata track="$%02d" "$splitdirname/%03d-$fn.mp3" #split every 20mins
如果您查看创建的元数据标题,它会显示 $%03d-title_of_file.mp3 。我正在尝试使元数据标题递增,如 001-title_of_file.mp3 , 002-title_of_file.mp3 , 003-title_of_file.mp3 ,...
我正在使用的完整脚本如下:
#!/bin/bash
#run using bash mp3spl.sh
currentdir="$(pwd)" #get current directory
for f in *.mp3 # only look for mp3 files
do
#fn=`echo "$1" | cut -d'.' -f1` #get just the filename no extension
fn=$(basename "$f" | cut -d'.' -f1) #get just the filename no extension
echo "($fn)"
splitdirname="$currentdir/split-$fn" #sub directory with correct names
#echo "splitdirname $splitdirname"
mkdir -p "$splitdirname" #make split directory
#echo "Processing $f"
ffmpeg -i "$1" 2> tmp.txt
ffmpeg -i "$f" -f segment -segment_time 1200 -ar 22050 -ac 1 -metadata title="$%03d-$fn.mp3" -metadata track="$%02d" "$splitdirname/%03d-$fn.mp3" #split every 20mins
#rm tmp.txt
done
与ffmpeg一起使用时,使用-metadata title =“ $%03d- $ fn.mp3” -metadata track =“ $%02d”不会创建带有前导零的增量数字。
答案 0 :(得分:1)
%03d
语法仅对输入或输出文件模式有效,对于那些实现这种解析的(解复用器)(例如image2
,segment
)而言。您不能将其用于设置元数据属性。换句话说,您无法让ffmpeg使用当前句段文件名填充该字段。
此外,$
中的$%03d
毫无意义-您在这里不是指shell变量。
如果要根据生成的文件的文件名设置元数据,则必须第二遍。遍历每个生成的文件,解析其文件名,然后使用该文件名设置元数据值。使用-c copy
和-map 0
复制现有的音频/视频流(如果您有多个音频/视频流,则后者是必需的)。