2012-07-29 10 views
9

He intentado convertir algunos videos que tomé en mi cámara a un formato comprimido para ahorrar algo de espacio de almacenamiento. Descubrí cómo usar ffmpeg para convertir los videos al formato que quiero, pero lo que no he podido descifrar es cómo copiar los metadatos. Me gustaría copiar los metadatos originales de cuando se tomó el video (lo más importante es el momento de la creación). Intenté ejecutar ffmpeg usando la opción -map_meta_data 0: 0, pero eso no pareció funcionar. ¿Algunas ideas?Conversión de formatos de video y copia de etiquetas con ffmpeg

Parece que los datos que deseo copiar en este caso se encuentran en la sección de formato del video. Usando ffprobe con la opción show_format, consigo esta salida:

[FORMAT] 
filename=video.AVI 
nb_streams=2 
format_name=avi 
format_long_name=AVI format 
start_time=0.000000 
duration=124.565421 
size=237722700 
bit_rate=15267331 
TAG:creation_time=2012-02-07 12:15:27 
TAG:encoder=CanonMVI06 
[/FORMAT] 

me gustaría copiar las dos etiquetas a mi nuevo video.

+0

Por favor, mostrar su comando ffmpeg y la salida de la consola completa. – LordNeckbeard

Respuesta

5

Tenga una mirada en the documentation on dumping and loading metadata:

FFmpeg es capaz de volcar los metadatos de los archivos multimedia en un archivo de texto similar al INI codificado en UTF-8 simple y luego cargar de nuevo usando los metadatos muxor/demultiplexor.

El proceso podría ser algo como esto:

# First extract metadata 
ffmpeg -i original.mov -f ffmetadata metadata.txt 
# Next, transcode, including extracted metadata 
ffmpeg -i original.mov -f ffmetadata -i metadata.txt compressed.mp4 

que no tienen un video-ful metadatos para probar con este momento, pero algo así debería funcionar.

+0

Parece que debería funcionar, pero cuando extraigo los metadatos, no se extrae la etiqueta creation_time. Esto es todo lo que se guarda en el archivo, lo que también podría explicar por qué la opción map_meta_data no funcionaba: '; FFMETADATA1 encoder = CanonMVI06' – Scott

+0

@Scott De hecho, podría ser. Aunque es completamente poco elegante y no debería ser necesario, he intentado usar ffprobe y grep para obtener el tiempo de creación y luego configurarlo directamente en la salida usando ['-metadata'] (http://www.ffmpeg.org/ffmpeg. html # Main-options)? – blahdiblah

+2

Esto todavía no funcionaba del todo, pero me indicó la dirección correcta. Finalmente noté que un mensaje salía cuando ejecuté el comando ffmpeg que decía que stfptime no estaba disponible (he estado tratando de hacer esto en Windows). Resulta que como esa biblioteca no estaba disponible en Windows, la fecha nunca se colocó en los metadatos. Entonces, traté de convertir mis videos en Linux, donde stfptime está disponible, y las opciones map_metadata y ffmetadata funcionaron para guardar la etiqueta creation_time en los metadatos del video. – Scott

3

Utilice "-map_metadata 0: g" para copiar todos los metadatos globales.

0 significa entrada # 0. g significa metadata global.

Aquí está mi resultado de ffprobe. ¡disfrutar!

input.mp4

[FORMAT] 
filename=input.mp4 
nb_streams=2 
nb_programs=0 
format_name=mov,mp4,m4a,3gp,3g2,mj2 
format_long_name=QuickTime/MOV 
start_time=0.000000 
duration=60.560500 
size=190252680 
bit_rate=25132246 
probe_score=100 
TAG:major_brand=mp42 
TAG:minor_version=1 
TAG:compatible_brands=mp42avc1 
TAG:creation_time=2016-05-14 10:01:17 
[/FORMAT] 

output.mp4

[FORMAT] 
filename=output.mp4 
nb_streams=2 
nb_programs=0 
format_name=mov,mp4,m4a,3gp,3g2,mj2 
format_long_name=QuickTime/MOV 
start_time=0.000000 
duration=60.632000 
size=38636429 
bit_rate=5097826 
probe_score=100 
TAG:major_brand=isom 
TAG:minor_version=512 
TAG:compatible_brands=isomiso2avc1mp41 
TAG:creation_time=2016-05-14 01:01:17 
TAG:encoder=Lavf57.36.100 
[/FORMAT] 
Cuestiones relacionadas