Моя камера принимает файлы .mov как фильмы. Как я могу удалить из них все метаданные, чтобы чувствовать себя уверенно, делясь ими на YouTube, не сообщая случайно, когда / где они были сняты, какой у меня тип камеры и т. Д. Однострочное использование командной строки - это хорошо, но если это слишком запутанно программа с графическим интерфейсом была бы лучше.
Ну, у меня есть ответ командной строки:
Примечание: Это только работает с ffmpeg
включенный в Ubuntu по умолчанию: это будет иметь версию подобной 0.8.1-4:0.8.1-0ubuntu1
; это НЕ будет работать ни с какими ffmpeg двоичными файлами, которые Вы установили от стороннего PPA или скомпилировали сами. Ваш пробег может варьироваться.
sudo apt-get install ffmpeg libimage-exiftool-perl
test.mov
И выполненный:
ffmpeg -i test.mov -map_metadata -1 -vcodec copy -acodec copy test-nometadata.mov
Можно затем использовать exiftool
проверять, что это работало; exiftool test.mov
и exiftool test-nometadata.mov
должен показать Вам различие.
Вот мои демонстрационные выводы от старого Nikon .mov с тоннами метаданных (pastebin'd):
(обратите внимание, что порядок в ffmpeg выше важен - входные и выходные файлы должны быть указаны в самом конце),
ПРИМЕЧАНИЕ: с последней версией ffmpeg (и, вероятно, avconv, но я не проверял это), вы можете просто использовать:
ffmpeg -i input.mp4 -map 0 -map_metadata -1 -c copy output.mp4
Использование -map_metadata -1
создает пустой «фиктивный» источник метаданных. Для версии avconv в репозиториях или других устаревших версий используйте метод, описанный ниже.
Использование avconv (или ffmpeg, если это ваше оружие выбора, синтаксис тот же):
Самый простой способ сделать это - установить -map_metadata
для использования одного из входных потоков. вместо использования глобальных метаданных. 99% времени это должно работать.
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% случаев, поэтому это должно быть предпочтительным.
БОНУС: создать бланкованную версию каждого MP4 в каталоге, , а затем заменить версии метаданных бланкированными версиями (предупреждение - почти необратимое):
for f in *.mp4; do avconv -i "$f" -map 0 -map_metadata 0:s:0 -c copy "out.$f"; mv "out.$f" "$f"; done