bash - 在进行 ffmpeg 转换时将元数据值转换为字符串

标签 bash ffmpeg metadata

我有一个脚本,可以将 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"不会创建带有前导零的增量数字。

最佳答案

%03d语法仅对输入或输出文件模式有效,对于那些实现这种解析的(de)muxer(例如,image2segment)。您不能使用它来设置元数据属性。换句话说,您不能让 ffmpeg 使用当前段文件名填充该字段。

此外,$$%03d没有意义——你在这里指的不是 shell 变量。

如果要根据生成的文件的文件名设置元数据,则必须在第二遍中执行此操作。遍历每个生成的文件,解析其文件名,并使用它来设置元数据值。使用 -c copy 复制现有的音频/视频流和 -map 0 (如果您有多个音频/视频流,则后者是必要的)。

关于bash - 在进行 ffmpeg 转换时将元数据值转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54515413/

相关文章:

linux - bash:如何执行函数而不是同名命令

python - 自动化DOSbox应用程序

file - ffmpeg 在编码/调整多个视频大小时保留文件创建和修改日期

ffmpeg - 如何使用 libwebp for android 构建 ffmpeg?

opencv - 使用 ffmpeg、OpenCV 的硬件加速 h264 解码

amazon-web-services - AWS::EC2::Instance/Metadata 不支持 SSM 安全引用

linux - Windows 上的 Ubuntu 上的 Bash 上的 Hadoop 权限被拒绝

linux - 如何退出从 bash 脚本创建的 ssh session ?

macos - 如何以编程方式将 OS X "tags"添加到文件?

audio - 如何在文件副本之间同步音频元数据(例如ID3)?