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

Вопрос или проблема

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

Обычно, чтобы сделать это “вручную” (в Windows), нужно перейти к свойствам файла, затем на вкладку “Сведения”, кликнуть на ссылку внизу, затем либо создать новую копию без свойств, либо удалить их вручную; как показано на следующем изображении:

вставьте описание изображения сюда

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

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

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

Вы думали о 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="" \+

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

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 секунд на моем компьютере.

Ответ или решение

Для удаления всех атрибутов и свойств из файлов mkv (или mp4) можно использовать мощные инструменты, такие как ffmpeg и mkvtoolnix. Опишем несколько подходов для достижения этой задачи в среде Windows и Linux.

Подход 1: Использование ffmpeg

ffmpeg — это универсальный инструмент для обработки мультимедиа, который позволяет выполнять множество задач, включая удаление метаданных. Для удаления всех метаданных из видеофайла используйте следующую команду:

ffmpeg -i input.mkv -map_metadata -1 -c:v copy -c:a copy output.mkv

Объяснение команд:

  • -i input.mkv — указывает исходный файл.
  • -map_metadata -1 — удаляет все метаданные.
  • -c:v copy -c:a copy — копирует видео и аудио потоки без изменения.
  • output.mkv — имя выходного файла.

Если у вас есть дополнительные потоки (например, субтитры), и вы хотите их сохранить, используйте следующую команду:

ffmpeg -i input.mkv -map_metadata -1 -c copy -map 0 output.mkv

Здесь -map 0 включает все потоки (видео, аудио, субтитры) из исходного файла.

Подход 2: Использование mkvpropedit из mkvtoolnix

Если вам нужно более тонкое управление метаданными, вы можете воспользоваться mkvpropedit. Этот инструмент позволяет редактировать метаданные mkv-файлов напрямую. Чтобы удалить все теги из файла, выполните:

mkvpropedit "movie.mkv" --remove-all

Однако стоит учитывать, что некоторые атрибуты (например, заголовок) могут быть защищены от удаления. В этом случае необходимо использовать подходы, позволяющие очистить или переопределить конкретные атрибуты:

mkvpropedit "movie.mkv" --edit info --set title=""

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

Автоматизация процесса для всех файлов в директории

Если у вас есть множество файлов в иерархической структуре директорий, вы можете автоматизировать процесс удаления метаданных. Вот пример команд для Windows и Linux.

Windows Batch Script

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

Этот скрипт проходит по всем видеофайлам и создает новые файлы с префиксом "1", оставляя оригиналы нетронутыми.

Linux Bash Script

#!/bin/bash
for file in *.mkv *.mp4; do
    ffmpeg -i "$file" -map 0 -map_metadata -1 -c copy "1$file"
done

Этот сценарий работает аналогично: проходит по всем файлам и создает новые версии без метаданных.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...