我正在使用以下脚本下载频道音频:
#!/bin/bash
...............
youtube-dl -o "%(upload_date)s %(title)s.%(ext)s" --write-annotations --download-archive "$ArchiveFile" --add-metadata --write-sub --sub-lang ru --write-auto-sub --sub-format srt -f "bestaudio[ext=webm]" -i "$ChannelPath"
这些参数的文件名格式如下:
yyyymmdd Corrected video title text.webm
之后,我将 WEBM 转换为 MP3,并ffmpeg
接管 WEBM 文件中的所有标签。
我希望不仅文件名,而且写入 ID3 标签的标题yyyymmdd
也带有时间戳。我可以使用一些工具将文件名写入相应的 ID3 标签。
问题在于ID3标签中的标题与视频标题完全对应,并且文件名是更正后的标题,删除了禁用字符。
如何从 ID3 标题标签中获取 MP3 标题并在其前面添加时间戳?
答案1
使用以下方法将 WebM 转换为 MP3
ffmpeg
:ffmpeg -i input.webm -map 0:a output.mp3
使用获取嵌入的日期和标题元数据并用或
ffprobe
写入:eyeD3
id3v2
eyeD3 --title "$(ffprobe -v error -show_entries format_tags=DATE -of csv=p=0 "input.webm") $(ffprobe -v error -show_entries format_tags=title -of csv=p=0 "input.webm")" output.mp3
ffmpeg
可以写入 ID3v2 标签,但是它有一些问题,因此eyeD3
建议改为。
答案2
我最终使用了这样的脚本:
#!/bin/bash
# File names will have following format "yyyymmdd Title.webm"
/usr/local/bin/youtube-dl -o "%(upload_date)s %(title)s.%(ext)s" --write-annotations --download-archive ".archive" --add-metadata -f "bestaudio[ext=webm]" -i "$ChannelPath"
for name in *.webm; do
# Recode to MP3
/usr/bin/ffmpeg -i "$name" -acodec libmp3lame "${name%.*}.mp3"
# Get title from WEBM tag
video_title=$(ffprobe -v error -show_entries format_tags=TITLE -of csv=p=0 "$name")
# We know file name format, lets extract timestamp from it
timestamp=${name%%[[:space:]]*}
# Concatenate timestamp with internal title
eyeD3 -t "$timestamp $video_title" "${name%.*}.mp3"
done