Смешанные результаты записи метаданных 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