Windows:带有 mp3 元数据的 ffmpeg drawtext

Windows:带有 mp3 元数据的 ffmpeg drawtext

尝试让 ffmpeg 使用来自 mp3/id3(首选 id3v2)标签的数据创建图像/视频,例如:

ffmpeg -f lavfi -i "color=c=white:s=720x480" -i "01 - Steel Guitar Rag.mp3" -shortest -filter_complex "drawtext=expansion=normal:fontfile=usb.ttf:fontcolor=black:x=10:y=10:fontsize=10:text='Artist\: %{metadata\:artist}'" "01 - Steel Guitar Rag.png"

应该打印:

艺术家:鲍勃·威尔斯和他的德克萨斯花花公子

但我似乎无法正确地获得字符串的键/转义以使其工作,我通常会打印“Artist:”或“artist}”,具体取决于我使用的位置/数量...

我需要如何格式化才能text=''真正正常工作?

答案1

ffmpeg -f lavfi -i "color=c=white:s=720x480" -i "01 - Steel Guitar Rag.mp3" -shortest -filter_complex "drawtext=expansion=normal:fontfile=usb.ttf:fontcolor=black:x=10:y=10:fontsize=10:text=\'Artist\: %{metadata:artist}\'" -vframes 1 "01 - Steel Guitar Rag.png"

我还添加了 -vframes 1 以防止生成多幅图像

答案2

这可能需要编写脚本。您可以使用自己喜欢的标记工具来获取艺术家元数据,然后将其用作ffmpeg命令中的变量。

ffprobe用于获取艺术家元数据的示例:

ffprobe -v error -select_streams a:0 -show_entries tags=artist -of default=nw=1:nk=1 input.mp3
Bob Wills And His Texas Playboys

不幸的是,我不知道如何在 Windows 中编写任何脚本,但是如果其他人有兴趣做同样的事情,这里有一个简单的 Bash 解决方案:

#!/bin/bash

# Usage: ./drawmeta input.mp3
# Will output a PNG with same basename as the input file.

artistname=$(ffprobe -v error -select_streams a:0 -show_entries tags=artist -of default=nw=1:nk=1 "$1")

ffmpeg -y -f lavfi -i "color=c=white:s=720x480" -i "$1" -filter_complex "drawtext=fontfile=/path/to/font.ttf:fontcolor=black:x=10:y=10:fontsize=10:text='Artist\: $artistname'" -frames:v 1 "${1%.*}.png"

相关内容