在 MP3 ID3 标题标签前添加时间戳

在 MP3 ID3 标题标签前添加时间戳

我正在使用以下脚本下载频道音频:

#!/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

  1. 使用以下方法将 WebM 转换为 MP3 ffmpeg

    ffmpeg -i input.webm -map 0:a output.mp3
    
  2. 使用获取嵌入的日期和标题元数据并用或ffprobe写入:eyeD3id3v2

    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

相关内容