Удалить все атрибуты / свойства фильмов MKV

У меня слишком много фильмов в какой-то иерархической структуре данных, начиная с каталога. Мне нужно удалить все их атрибуты / свойства, потому что некоторые из них имеют неверную информацию, и, честно говоря, мне это не нужно.

Как правило, способ сделать это "вручную" (в Windows) - перейти в "Свойства" файла, затем на вкладку "Подробности", щелкнуть ссылку внизу, а затем либо создать новую копию со свойствами, либо удалить их вручную; как показано на следующем рисунке:

Я знаю, как перебрать все файлы в моем каталоге фильмов (как в Windows, так и в Linux). Итак, мой вопрос: есть ли команда командной строки / терминала Windows или Linux, которая удалит эти свойства, учитывая файл mkv / mp4?

Я ожидаю что-то вроде:

mkvtoolnix --remove-all-attributes my-movie.mkv

3 ответа

Вы думали о ffmpeg? Это отличный инструмент для манипуляции видеофайлами. Посмотрите здесь и посмотрите, сможет ли он выполнить то, что вы ищете.

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

Это удаляет метаданные и копирует аудио и видео потоки в новый файл.

Обновить:

Допустим, у вас есть другие потоки (например, субтитры), которые вы хотите сохранить, команда становится (обратите внимание, что это удалит метаданные всех потоков):

ffmpeg -i in.mkv -map_metadata -1 -c copy -map 0 out.mkv

Допустим, вы хотите подавить только один или несколько метаданных, а не все:

ffmpeg -i in.mkv -metadata title='' -c copy -map 0 out.mkv

Важно помнить, что многие свойства нельзя удалить, включая такие, как заголовок.

Удаление вещей, которые можно удалить:

      find . -iname \*.mkv -exec mkvpropedit "{}" --tags all: \+

Установка нежелательных элементов, которые нельзя удалить, пустыми :

      find . -iname \*.mkv -exec mkvpropedit "{}" -e info -s title="" \+

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

      setlocal enabledelayedexpansion
for %%a in ( "*.avi" "*.mkv" "*.mp4" ) do (
(ffmpeg -i "%%a" -map 0 -map_metadata -1 -c copy "1%%%a"))

Однако здесь каждый файл .avi .mkv .mp4 внутри папки:

  • Обрабатывается каждый файл, даже если он не содержит заголовка/комментария.
  • Исходный файл остается нетронутым с тем же именем и теми же метаданными.
  • Имя выходного файла начинается с 1, например, myfile.mp4 будет выведено как 1myfile.mp4, потому что мне это было удобно, но вы можете удалить 1, появляющуюся перед именем выходного файла, если вы предпочитаете это, но ожидаете чтобы получить запрос на перезапись для каждого файла.

Обработка файла размером 1,5 ГБ на моей установке занимает около 8 секунд.

Другие вопросы по тегам