Usuń metadane ze wszystkich formatów za pomocą FFmpeg

43

Jak mogę usunąć wszystkie metadane ze wszystkich formatów za pomocą FFmpeg?

Mogę ustawić specjalne metadane dla każdego formatu dla każdego ffmpeg człowieka . Jakaś opcja lub metoda, aby usunąć wszystkie metadane i usunąć media ze wszystkich metadanych dostępnych na 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
sweb
źródło

Odpowiedzi:

63

Nieznacznie modyfikując wiersz poleceń przez @izx , otrzymałem to:

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

Rezultatem jest (ponownie sprawdzone za pomocą exiftool) rekord metadanych zmniejszony z 81 do 52 wierszy. Pamiętaj, że nie można po prostu usunąć wszystkich metadanych, niektóre rzeczy pozostaną. Jednak nie udało mi się zmienić daty utworzenia, co jest dziwne, ponieważ wydawało się, że działa w wersji Ubuntu.

Napisałem na liście mailingowej FFmpeg , pytając, czy są jakieś aktualizacje lub komentarze na ten temat. Zobaczmy, co mają do powiedzenia.

slhck
źródło
2
W movlub mp4plikach data utworzenia jest polem całkowitym w nagłówku filmu i nagłówkach ścieżek (wyrażonych w sekundach od 1904 r.). Chociaż można ustawić wartość 0 lub inną stałą wartość, nie ma sposobu, aby ją usunąć i nadal mieć poprawny movlub mp4plik.
mark4o
Wiem, że nie mogłem go całkowicie usunąć, ale z jakiegoś powodu zmiana nie była możliwa.
slhck 18.12.12 o
3
Korzystając z aktualnego ffmpeg, czas tworzenia można zmienić za pomocą -metadata creation_time=2012-12-17T21:30:00(UTC).
mark4o
1
Jak mogę to zmienić, aby usunąć tytuł? Obecnie ustawia tytuł na coś generowanego automatycznie. Chcę zobaczyć pełną nazwę pliku jako tytuł na końcu.
Świeżak
2
@Rookie Następnie musisz ustawić -metadata title="Some Value". Lub, dla pliku, coś takiego dla pliku MP4:ffmpeg -i "$file" -map_metadata -1 -c copy -metadata title="$file" "${file%%*.mp4}-new.mp4
slhck
9

Moje rozwiązanie do usuwania metadanych, rozdziałów, zmiany czasu utworzenia i tytułu. W ten sposób dowolny metakontent powinien różnić się od oryginalnego pliku:

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"
kicz
źródło
1
Ten wariant był dla mnie przydatny, dziękuję. Chciałbym, żeby instrukcja ffmpeg zawierała więcej przykładów takich jak powyższe; stackoverflow, superuser itp. ... stają się bardzo przydatne, ponieważ zawierają wiele pomocnych informacji.
shevy,
8

UWAGA: Od tego czasu zaktualizowałem ffmpeg(wcześniej miałem nieaktualną wersję avconvz repozytoriów Ubuntu).

Teraz @ slhck -map_metadata -1 działa idealnie.

Polecam rozwiązanie @ slhck, ponieważ jest mniej typowe i aktualne. Zostawiam to tutaj każdemu, kto używa przestarzałej wersji.


Najłatwiej to zrobić, -map_metadataużywając jednego ze strumieni wejściowych zamiast globalnych metadanych. W 99% przypadków powinno to działać. UWAGA: Używam avconv, ponieważ jest to w repozytoriach Ubuntu 12.04; prawdopodobnie będzie to drop-in kompatybilne z ffmpeg, ponieważ ich składnia zawsze jest moim doświadczeniem.

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

Spowoduje to pobranie metadanych z pierwszego strumienia danych (zwykle strumienia wideo) i wykorzystanie go do zastąpienia globalnych metadanych pliku kontenera. Działa to, ponieważ przez większość czasu strumienie danych nie mają zapisanych znaczących metadanych; czasem jednak tak się dzieje i chcesz całkowicie pozbyć się tych metadanych. Niestety, jedynym sposobem na zrobienie tego jest użycie potoku i dwóch procesów avconv.

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

Wykorzystuje to fakt, że pliki WAV nie mogą zawierać metadanych (ponieważ format został utworzony przed istnieniem znaczników metadanych).

Obie te metody wyczyściły wszystkie metadane w pliku, na którym właśnie je przetestowałem - wszystko, co exiftoolzgłoszono, to informacje o kodeku, a avprobe nie zgłosił mi żadnych metadanych. Używanie do tego rurki jest dość brzydkie, a pierwsza metoda zadziała w 99% przypadków, więc należy ją preferować.

zła
źródło
1
Pliki WAVE, podobnie jak inne pliki oparte na RIFF (np. AVI), mogą faktycznie zawierać metadane przy użyciu fragmentu listy „INFO”. Po prostu nie jest często używany.
blerontin