Попытка заставить ffmpeg создавать изображения / видео с данными из тегов mp3 / id3 (pref. 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"

ДОЛЖЕН печатать:

Исполнитель: Bob Wills And His Texas Playboys

но я просто не могу заставить ключи / экранирование строки работать правильно, я обычно печатаю "Artist:" или "artist}" в зависимости от того, где / как-много \ я использую ...

Как мне нужно отформатировать text='' для правильной работы?

2 ответа2

0

Это, вероятно, потребует сценариев. Вы можете использовать ваш любимый инструмент тегирования, чтобы получить метаданные исполнителя, а затем использовать их в качестве переменной в вашей команде 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"
0
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, чтобы предотвратить создание нескольких изображений

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .