Вопрос или проблема
У меня есть видеофайл (Dolby Vision) test.mp4
, в котором в видеотреке указан hev1
в поле Codec ID
(ffmpeg) или Compressor ID
(exiftool).
exiftool -CompatibleBrands -CompressorID test.mp4
Совместимые бренды : isom, dby1, iso2, mp41
ID компрессора : hev1
Когда я выполняю команду exiftool -CompatibleBrands=isom -CompressorID=dvhe
, выводится следующее:
Предупреждение: Извините, CompatibleBrands не подлежит записи
Предупреждение: Извините, CompressorID не подлежит записи
Нечего менять.
В медиапотоке указано HDR формат : Dolby Vision, Version 1.0, dvhe.05.07, BL+RPU
в mediainfo, так что это должно быть dvhe.
Я также пробовал команду ffmpeg -i test.mp4 -map 0 -codec copy -brand dvhe -strict experimental test2.mp4
, но hev1 все еще остается.
perl -pi -e 's/hev1/dvhe/g' test.mp4
частично срабатывает, но также изменяет Format
и общий Codec ID
на dvhe
(Codec ID
становится dvhe (dvhe/dby1/iso2/mp41)
).
Можно ли изменить две (и другие неперезаписываемые) секции?
CompressorID
является тегом QuickTime ImageDesc, в то время как CompatibleBrands
является тегом QuickTime FileType.
Эти теги не подлежат записи, потому что они необходимы для воспроизведения этого медиаконтента. Вы не можете изменить эти теги, по крайней мере, не используя ExifTool. Возможно, это можно сделать с помощью какого-либо видеоредактора, но я не могу порекомендовать какой-либо конкретный редактор.
Чтобы безопасно изменить эти теги, самый простой способ — повторно закодировать медиаприведение.
Теоретически вы можете изменить эти теги с помощью ExifTool. Но для этого вам необходимо изменить его конфигурацию и переопределить определения тегов, изменив их тип Writable
на string
. Примеры можно найти в секции %Image::ExifTool::UserDefined
в приведенном выше примере, например:
%Image::ExifTool::UserDefined = (
'Image::ExifTool::Exif::Main' => {
0xd000 => {
Name => 'NewEXIFTag',
Writable => 'int16u',
WriteGroup => 'IFD0',
},
},
);
Данные конфигурации нужно адаптировать под ваши теги в соответствии с таблицами здесь или в исходном коде.
Теперь, стоит ли вам заниматься этим и пытаться изменить эти теги? Вы могли бы протестировать это на резервной копии файла, конечно, но это, скорее всего, будет потерей времени. Даже если в конце концов вы сможете их редактировать (по словам @StarGeek, вы не сможете), названия тегов явно намекают на то, что с ними не следует манипулировать вручную, такие как совместимость устройства/программного обеспечения.
Это выглядит как очевидная XY-проблема, и я бы рекомендовал вместо этого спросить о вашей основной цели.
Почему я могу опубликовать ответ, прежде чем смогу оставить комментарий как новый пользователь здесь? Кажется … странным.
В любом случае…
Я хочу поблагодарить @StarGeek за ссылку и отметить, что пользователю действительно удалось записать этот тег. Тема была недавно обновлена. Но это подводит меня к очень похожему вопросу: можно ли переписать теги gopro этим методом? Я заметил строку “PROCESS_PROC => &Image::ExifTool::ProcessBinaryData” в файле определения gopro.pm, что вызывает у меня сомнения. Это возможно? Это действительно было бы полезно для меня.
Ответ или решение
Изменение тегов, не подлежащих записи, с помощью ExifTool действительно представляет собой сложную задачу. В данном случае вы пытаетесь изменить теги CompressorID
и CompatibleBrands
в файле видео, который имеет кодек Dolby Vision. Эти теги являются частью спецификации QuickTime и защищены от прямого редактирования, так как они критически важны для воспроизведения медиафайла.
Причины, почему теги не подлежат записи
- Жесткие ограничения: Теги, такие как
CompressorID
иCompatibleBrands
, являются частью метаданных, которые определяют совместимость медиафайла с определенными видеоиграми и плеерами. Их изменение может привести к проблемам с воспроизведением. - ExifTool: Как вы уже заметили, при попытке изменения тегов с помощью ExifTool получаете предупреждение о том, что эти теги не подлежат записи.
Возможности изменения тегов
-
Перекодирование файла: Наиболее безопасный и рекомендуемый способ изменения этих тегов – это перекодировать видеофайл. Вы можете воспользоваться ffmpeg для создания нового файла с корректными тегами. Например:
ffmpeg -i test.mp4 -map 0 -c copy -metadata:s:v:0 CodecID=dvhe -strict experimental test2.mp4
Однако, перекодирование может потребовать изменения кодека или формата, что может не всегда быть желаемым.
-
Изменение через конфигурацию ExifTool: Теоретически, вы можете изменить конфигурацию ExifTool, чтобы изменить статус доступности тегов. Вам нужно будет создать новую конфигурацию, которая позволит использовать тег как записываемый. Однако это сложный и рискованный процесс, который может привести к повреждению файла или потере данных. Пример как это может выглядеть:
%Image::ExifTool::UserDefined = ( 'Image::ExifTool::QuickTime::Main' => { 0xd000 => { Name => 'CompressorID', Writable => 'string', }, }, );
Но я настоятельно не рекомендую это делать, если вы не уверены в своем понимании структуры метаданных.
Рекомендации
- Фокусируйтесь на цели: Вместо того чтобы пытаться изменить теги, возможно, вам стоит уточнить, что именно вы хотите достичь. Можете ли вы решить свою задачу через другие методы, такие как создание новых файлов с нужными параметрами?
- Безопасность данных: Если вы решитесь на переработку файла или изменение через ExifTool, всегда делайте резервные копии оригинальных файлов, чтобы предотвратить потерю данных.
Заключение
Изменение тегов CompressorID
и CompatibleBrands
в MP4-файле является сложной задачей и требует осторожного подхода. Самый безопасный и практичный вариант заключается в перекодировании файла, что позволит избежать потенциальных проблем с воспроизведением. Пробуйте разные инструменты, но всегда проявляйте осторожность.