Смешанные результаты записи метаданных M4A

Учитывая этот файл, у меня смешанные результаты записи метаданных. Например, эта команда

ffmpeg -i confetti.mp4 -c copy -f adts - |
ffmpeg -i - -c copy -bsf aac_adtstoasc -movflags faststart \
  -metadata title= конфетти good.m4a

Создает файл M4A, который корректно воспроизводится с распознанными метаданными. Однако эта команда

ffmpeg -i confetti.mp4 -c copy -vn -movflags faststart \
  -metadata title=Confetti bad.m4a

Создает файл, который воспроизводится правильно, но мой проигрыватель не распознает метаданные. Обратите внимание, я также попытался добавить -bsf aac_adtstoasc плохая команда безрезультатно. Как настроить вторую команду, чтобы она заработала?

Связанный тикет с выводом командной строки

Связанная тема

2 ответа

Когда вы извлекаете/преобразовываете аудиопоток в «необработанный AAC» (ADTS), метаданные исходного файла отбрасываются, поскольку они состоят только из минимального заголовка.

Чтобы удалить метаданные без дополнительного шага, вы можете сделать:

      ffmpeg -i in.m4a -c copy -map_metadata -1 out.m4a

Отрицательный индекс файла для коммутатораотключает копирование метаданных (кстати, НЕ включает в себя главы; естьдля этого).

Этот переключатель не должен препятствовать созданию новых элементов метаданных в том же процессе, поэтому вы можете добавитьпосле этого.

Я не смог сказать, что именно мешает конкретному проигрывателю, который вы используете, распознавать метаданные в источнике (или, может быть, просто их копию на выходе), но поскольку, видимо, создание метаданных «с нуля» для него работает, и сокращенный подход это то, что вы просили, вот ответ.

Судя по ответу Тома, я думаю, что смог решить эту проблему. Если я запускаю эти команды:

      ffmpeg -i in.m4a -c copy -movflags faststart -metadata title=Confetti bad.m4a
ffmpeg -i in.m4a -c copy -movflags faststart -metadata title=Confetti `
   -map_metadata -1 good.m4a
mp4dump bad.m4a > bad.txt
mp4dump good.m4a > good.txt
git diff bad.txt good.txt

Я получаю такой результат:

      -        handler_name = ISO Media file produced by Google Inc.
+        handler_name = SoundHandler

Я протестировал еще несколько, и, кажется, ничегоhandler_nameболее 29 символов не будут выполнены, что, вероятно, составляет 30, включая нулевой байт или, возможно, байт длины. Вот пример, который едва пройдет:

      ffmpeg -i in.m4a -c copy -movflags faststart -metadata title=Confetti `
-metadata:s handler_name=SoundHandlerSoundHandlerSound good.m4a
Другие вопросы по тегам