Elimine metadatos de todos los formatos con FFmpeg

43

¿Cómo puedo eliminar todos los metadatos de todos los formatos a través de FFmpeg?

Solo puedo establecer metadatos especiales para cada formato por hombre ffmpeg . ¿Alguna opción o método para borrar todos los metadatos y tiras de todos los metadatos disponibles en 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
barrido
fuente

Respuestas:

63

Modificando ligeramente la línea de comando por @izx , obtuve esto:

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

El resultado es (nuevamente, verificado con exiftool), un registro de metadatos reducido de 81 a 52 líneas. Tenga en cuenta que no puede simplemente eliminar todos los metadatos, algunas cosas permanecerán. Sin embargo, no pude cambiar la fecha de creación, lo cual es extraño porque parecía funcionar en la versión de Ubuntu.

Publiqué en la lista de correo de FFmpeg , preguntando si había actualizaciones o comentarios al respecto. Veamos qué tienen que decir.

slhck
fuente
2
En movo mp4archivos, la fecha de creación es un campo entero en el encabezado de la película y los encabezados de las pistas (expresados ​​en segundos desde 1904). Aunque podría establecerlo en 0 o en algún otro valor fijo, no hay forma de eliminarlo y aún así tener un archivo válido movo mp4.
mark4o
Sé que no podía eliminarlo por completo, pero el cambio no fue posible por alguna razón.
slhck
3
Usando el ffmpeg actual, el tiempo de creación se puede cambiar con -metadata creation_time=2012-12-17T21:30:00(UTC).
mark4o
1
¿Cómo puedo modificar esto para eliminar el título también? Actualmente establece el título en algo generado automáticamente. Quiero ver el nombre de archivo completo como título al final.
Novato
2
@Rookie Entonces tienes que configurar -metadata title="Some Value". O, para un archivo, algo así para un archivo MP4:ffmpeg -i "$file" -map_metadata -1 -c copy -metadata title="$file" "${file%%*.mp4}-new.mp4
slhck
9

Mi solución para eliminar metadatos, capítulos, para cambiar el tiempo de creación y el título. De esta manera, cualquier metacontenido debe ser diferente del archivo original:

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"
shub
fuente
1
Esa variante me fue útil, gracias. Desearía que el manual ffmpeg muestre más ejemplos como el anterior; stackoverflow, superusuario, etc ... todos se vuelven muy útiles porque contienen mucha información útil.
shevy
8

NOTA: Desde entonces he actualizado ffmpeg(anteriormente tenía la versión desactualizada de avconvlos repositorios de Ubuntu).

Ahora @ slhck's -map_metadata -1 funciona perfectamente.

Recomiendo la solución de @ slhck porque es menos tipeada y está más actualizada. Dejo esto aquí para cualquiera que use una versión desactualizada.


La forma más fácil de hacer esto es configurar -map_metadatapara usar una de las secuencias de entrada, en lugar de usar metadatos globales. 99% del tiempo esto debería funcionar. NOTA: Estoy usando avconv, porque está en los repositorios de Ubuntu 12.04; Esto probablemente será compatible con ffmpeg, ya que su sintaxis siempre está en mi experiencia.

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

Esto tomará los metadatos del primer flujo de datos (normalmente el flujo de video) y los usará para reemplazar los metadatos globales del archivo contenedor. Esto funciona porque la mayoría de las veces, los flujos de datos no tienen metadatos significativos escritos en ellos; sin embargo, a veces lo hacen, y desea deshacerse por completo de esos metadatos. Desafortunadamente, la única forma en que se me ocurre hacer esto es mediante una tubería y dos procesos avconv.

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

Esto aprovecha el hecho de que los archivos WAV no pueden contener metadatos (ya que el formato se creó antes de que existieran las etiquetas de metadatos).

Ambos métodos pusieron en blanco todos los metadatos en un archivo en el que los probé, todo lo que se exiftoolinformó fue la información del códec, y avprobe no me informó ningún metadato. Usar una tubería para esto es bastante feo, y el primer método funcionará en el 99% de los casos, por lo que debería preferirse.

maldad
fuente
1
Los archivos WAVE, como otros archivos basados ​​en RIFF (por ejemplo, AVI) pueden contener etiquetas de metadatos utilizando un fragmento de lista "INFO". Simplemente no se usa con mucha frecuencia.
blerontin