Уберите метаданные из всех форматов с помощью FFmpeg

43

Как я могу удалить все метаданные из всех форматов через FFmpeg?

Я могу просто установить специальные метаданные для каждого формата на человека ffmpeg . Любой вариант или метод, чтобы очистить все метаданные и раздеть носители из всех метаданных, доступных на ffmpeg?

   -metadata key=value
       Set a metadata key/value pair.

       For example, for setting the title in the output file:

               ffmpeg -i in.avi -metadata title="my title" out.flv
sдоступна из
источник

Ответы:

63

Немного модифицировав командную строку @izx , я получил это:

ffmpeg -i in.mov -map_metadata -1 -c:v copy -c:a copy out.mov

В результате (опять же, проверено с помощью exiftool) запись метаданных уменьшена с 81 до 52 строк. Обратите внимание, что вы не можете просто удалить все метаданные, некоторые вещи останутся. Тем не менее, я не получил дату создания, чтобы изменить, что странно, потому что она, казалось, работала в версии Ubuntu.

Я разместил в списке рассылки FFmpeg вопрос о том, есть ли какие-либо обновления или комментарии по этому поводу. Посмотрим, что они скажут.

slhck
источник
2
В movили mp4файлах дата создания представляет собой целочисленное поле в заголовке фильма и заголовках дорожек (выражается в секундах с 1904 года). Хотя вы можете установить его в 0 или другое фиксированное значение, нет способа удалить его, но у вас все еще есть действительный файл movили mp4файл.
mark4o
Я знаю, что не мог удалить это полностью, но изменение не было возможно по некоторой причине.
Slhck
3
Используя текущий ffmpeg, время создания можно изменить с помощью -metadata creation_time=2012-12-17T21:30:00(UTC).
mark4o
1
Как я могу изменить это, чтобы удалить заголовок тоже? В настоящее время он устанавливает заголовок для чего-то автоматически сгенерированного. Я хочу видеть полное имя файла в качестве заголовка в конце.
Новобранец
2
@ Rookie Тогда вам нужно установить -metadata title="Some Value". Или для файла, что-то вроде этого для файла MP4:ffmpeg -i "$file" -map_metadata -1 -c copy -metadata title="$file" "${file%%*.mp4}-new.mp4
slhck
9

Мое решение убрать метаданные, главы, изменить время создания и заголовок. Таким образом, любой метаконтент должен отличаться от исходного файла:

ffmpeg -y -i "test.mkv" -c copy -map_metadata -1 -metadata title="My Title" -metadata creation_time=2016-09-20T21:30:00 -map_chapters -1 "test.mkv"
шуб
источник
1
Этот вариант был полезен для меня, спасибо. Я бы хотел, чтобы руководство ffmpeg показало больше примеров, подобных приведенному выше; stackoverflow, superuser и т. д. ... все они становятся очень полезными, поскольку содержат много полезной информации.
Шев
8

ПРИМЕЧАНИЕ: с тех пор я обновил ffmpeg(ранее у меня была устаревшая версия avconvиз репозиториев Ubuntu).

Теперь @ slhck -map_metadata -1 работает отлично.

Я рекомендую решение @ slhck, потому что оно менее типично и актуально. Я оставляю это здесь для тех, кто использует устаревшую версию.


Самый простой способ сделать это - -map_metadataиспользовать один из входных потоков вместо использования глобальных метаданных. 99% времени это должно работать. ПРИМЕЧАНИЕ: я использую avconv, потому что это в репозиториях Ubuntu 12.04; это, вероятно, будет совместимо с ffmpeg, так как их синтаксис всегда в моем опыте.

avconv -i input.mp4 -map 0 -map_metadata 0:s:0 -c copy output.mp4

Это возьмет метаданные из первого потока данных (обычно видеопоток) и использует их для замены глобальных метаданных файла контейнера. Это работает, потому что большую часть времени потоки данных не имеют значимых метаданных, записанных в них; однако иногда это происходит, и вы хотите полностью избавиться от этих метаданных. К сожалению, единственный способ сделать это - использовать канал и два процесса avconv.

avconv -i input.mp4 -f wav - | avconv -i - -i input.mp4 -map 1 -map_metadata 0 -c copy output.mp4

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

Оба эти метода очищали все метаданные в файле, на котором я только что их протестировал - все, что exiftoolсообщалось, было информацией о кодеке, и avprobe не сообщал мне метаданных. Использование канала для этого довольно уродливо, и первый метод будет работать в 99% случаев, поэтому это должно быть предпочтительным.

evilsoup
источник
1
Файлы WAVE, как и другие файлы на основе RIFF (например, AVI), могут фактически содержать теги метаданных с использованием фрагмента списка «INFO». Просто не очень часто.
Белронтин