ffmpeg добавляет метаданные в ogg (opus) и вставляет изображение - PullRequest
0 голосов
/ 25 мая 2018

как заголовок, который я хочу добавить / изменить метаданные на ogg(opus) файлы в одной папке (один альбом / один исполнитель). Когда я кодирую от wav/flac до opus, я обычно использую

for f in *.*; do ffmpeg -i "$f" -c:a libopus -b:a 510000 "${f%.*}.ogg"; done

Затем, когда я проверяю один файл с

for f in *.*; do ffmpeg -i "$f" -c copy -metadata artist="artist name" -metadata album="album name" "${f%.*}.ogg"; done

В результате файл уменьшается до 47 КБ (поэтому я предположил, что имя входа и выхода не может быть одинаковым).

Таким образом, любой эффективный способ добавить / изменить метаданные, сохраняя то же имя?А как встроить изображение в файлы ogg (opus)? Я хочу, чтобы при воспроизведении файлов отображались обложка / изображение.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Извините, я забыл этот пост, поскольку ответа больше месяца нет.Так что на самом деле после некоторого тестирования в то время моя проблема просто в том, что по причинам, которые я не знаю (я не разбираюсь в технологиях), ffmpeg и другие тегеры отказываются маркировать файлы, когда используется кодек opus с расширением .ogg.Я немного искал, и родным и рекомендуемым расширением для кодека opus является расширение .opus, поэтому я использовал его и с функцией ffmpeg -map метаданные из flac, скопированные в новые файлы opus, которые я создал правильно.

Изображение такжеможет быть легко встроен с помощью ffmpeg или любого другого тегера.

Что касается проблемы с перезаписью, на самом деле с небольшим количеством логики действительно невозможно сделать то, что я хочу, просто файлы должны иметь разные полные имена (.flacи .opus работает) или просто вывести файлы в другой каталог.

0 голосов
/ 30 января 2019

Я не уверен, почему ffmpeg делает это с выходным файлом при использовании -metadata.Я пытался переписать -y, не используя регулярное выражение или переменную ... это странно.потому что если вы напишите в новый файл, он будет работать.Некоторое время назад мне пришлось заставить песни правильно отображаться на автомобильной стереосистеме, и мне пришлось исправить некоторые треки и сделать это:

#!/bin/bash

ICO="applications-multimedia"

f=$(yad --window-icon="$ICO" --center --title "Select MP3 File" --file)

function fthelp () {
yad --window-icon="gtk-help" --title="Help?" --borders=10 --center --skip-taskbar --image-on-top --image="gtk-help" --text-align=center --text="None so far..." --button=gtk-close:0
}
export -f fthelp

# SCAN FOR EXISTING TAGS
scan_art=$(ffprobe -loglevel error -show_entries format_tags=artist -of default=noprint_wrappers=1:nokey=1 "$f")
scan_alb=$(ffprobe -loglevel error -show_entries format_tags=album -of default=noprint_wrappers=1:nokey=1 "$f")
scan_tit=$(ffprobe -loglevel error -show_entries format_tags=title -of default=noprint_wrappers=1:nokey=1 "$f")
scan_year=$(ffprobe -loglevel error -show_entries format_tags=year -of default=noprint_wrappers=1:nokey=1 "$f")
scan_len=$(ffmpeg -i "$f" 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,//)
scan_gen=$(ffprobe -loglevel error -show_entries format_tags=genre -of default=noprint_wrappers=1:nokey=1 "$f")
scan_lyr=$(ffprobe -loglevel error -show_entries format_tags=lyrics -of default=noprint_wrappers=1:nokey=1 "$f")

# MAIN DIALOG
MD=$(yad --window-icon="$ICO" --geometry="275x475" --center --borders="20" --justify="center" --title="2J ID3 Editor 1.0" --buttons-layout="center" --text-align="center" --text "ID3 Tag Editor" --form \
--field="Artist:" "$scan_art" \
--field="Title:" "$scan_tit" \
--field="Album:" "$scan_alb" \
--field="Year:" "$scan_year" \
--field="Length:":RO "$scan_len" \
--field="Genre:" "$scan_gen" \
--field="Lyrics:":TXT "$scan_lyr" \
--field="Create Backup?":CHK "FALSE" > /tmp/entries \
--button=gtk-help:"bash -c fthelp" \
--button=gtk-apply:0 \
--button=gtk-quit:1)

fld1=$(cut -d'|' -f1 < /tmp/entries)
fld2=$(cut -d'|' -f2 < /tmp/entries)
fld3=$(cut -d'|' -f3 < /tmp/entries)
fld4=$(cut -d'|' -f4 < /tmp/entries)
fld5=$(cut -d'|' -f5 < /tmp/entries)
fld6=$(cut -d'|' -f6 < /tmp/entries)
fld7=$(cut -d'|' -f7 < /tmp/entries)
fld8=$(cut -d'|' -f8 < /tmp/entries)

if [[ $MD == 1 ]]
then rm /tmp/entries
exit 1
else [[ $MD == 0 ]]

if [[ $fld8 == TRUE ]]
then cp "$f" "$f.bak"

ffmpeg -y -i "$f" -c copy -metadata artist="$fld1" -metadata title="$fld2" -metadata album="$fld3" -metadata year="$fld4" -metadata genre="$fld6" -metadata lyrics="$fld7" "${f#./}.new.mp3" && mv "${f#./}.new.mp3" "$f"

rm /tmp/entries
fi
fi
exit 0

Если вы удалите .out.mp3 и переместитесь в конце этой команды ffmpeg, это сломает этот файл.Он переписывает вашу песню в какой-то файл размером всего в килобайт, как вы и говорили.Не знаю почему.Я просто попытался использовать файл out вместо перезаписи, и это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...