ffmpeg no escribe metadatos en el aac

0

Mi entrada:

ffmpeg -i input.ogg -metadata Album='Vitaly' output.aac

Devuelto:

    ffmpeg version 3.3.4-static http://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2017 the FFmpeg developers
      built with gcc 6.4.0 (Debian 6.4.0-4) 20170820
      configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gray --enable-libfribidi --enable-libass --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg
      libavutil      55. 58.100 / 55. 58.100
      libavcodec     57. 89.100 / 57. 89.100
      libavformat    57. 71.100 / 57. 71.100
      libavdevice    57.  6.100 / 57.  6.100
      libavfilter     6. 82.100 /  6. 82.100
      libswscale      4.  6.100 /  4.  6.100
      libswresample   2.  7.100 /  2.  7.100
      libpostproc    54.  5.100 / 54.  5.100
    Input #0, ogg, from 'concatenated_by_python.ogg':
      Duration: 00:01:27.62, start: 0.000000, bitrate: 41 kb/s
        Stream #0:0: Audio: vorbis, 22050 Hz, mono, fltp, 35 kb/s
    File 'concatenated_by_python__output_ffmpeg.aac' already exists. Overwrite ? [y/N] y
    Stream mapping:
      Stream #0:0 -> #0:0 (vorbis (native) -> aac (native))
    Press [q] to stop, [?] for help
    Output #0, adts, to 'concatenated_by_python__output_ffmpeg.aac':
      Metadata:
        Album           : Vitaly
        encoder         : Lavf57.71.100
        Stream #0:0: Audio: aac (LC), 22050 Hz, mono, fltp, 69 kb/s
        Metadata:
          encoder         : Lavc57.89.100 aac
    size=     818kB time=00:01:28.21 bitrate=  75.9kbits/s speed=  53x
    video:0kB audio:805kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.614694%
    [aac @ 0x4c73760] Qavg: 2966.099

Como puede ver, el Metadatabloque tiene Album : Vitaly

Pero ffprobeahora mostró algún metadato:

$ ffprobe -v error -show_format -show_streams output.aac
[STREAM]
index=0
codec_name=aac
codec_long_name=AAC (Advanced Audio Coding)
profile=LC
codec_type=audio
codec_time_base=1/22050
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
sample_fmt=fltp
sample_rate=22050
channels=1
channel_layout=mono
bits_per_sample=0
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/28224000
start_pts=N/A
start_time=N/A
duration_ts=2696886288
duration=95.552944
bit_rate=70112
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
[/STREAM]
[FORMAT]
filename=concatenated_by_python__output_ffmpeg.aac
nb_streams=1
nb_programs=0
format_name=aac
format_long_name=raw ADTS AAC (Advanced Audio Coding)
start_time=N/A
duration=95.552944
size=837426
bit_rate=70111
probe_score=51
[/FORMAT]

También revisé Finder en macOS: cero metadatos.

Pero verifiqué la configuración de metadatos para el ogg en lugar de aac, y funciona . También descubrí que ffmpegpuede establecer metadatos en m4a, pero no puedo usar este formato para mi proyecto porque Android no puede reproducirlo de fábrica.

Parece un error en ffmpeg- ¿Necesito crear un ticket sobre eso?

Vitaly Zdanevich
fuente

Respuestas:

0

Lo que está escribiendo es un flujo de bits ADTS AAC sin procesar ( .aac). Si bien estos flujos de bits pueden transportar marcos de metadatos (ID3), ffmpeg no puede escribirlos. Sin id3v2embargo, la herramienta de línea de comandos debería poder hacerlo.

Con ffmpeg, tiene que escribir su flujo de audio en un contenedor que puede almacenar metadatos tales, por ejemplo .mp4, .movo .mkv. Por ejemplo:

ffmpeg -i <input> -metadata title=Foo -metadata album=Bar output.mp4
slhck
fuente
Hm, ok, gracias por la respuesta. Pero creo que en ese caso FFmpeg puede mostrar advertencia / error a un usuario.
Vitaly Zdanevich
Encontré en esta respuesta lo que puedo usar id3v2: ¿es una solución correcta de aac?
Vitaly Zdanevich
Ah, tienes razon. Aparentemente, los marcos de metadatos son compatibles, pero ffmpeg no los escribe. La herramienta de línea de comandos id3v2puede ayudar, sí.
slhck
Lo intenté ffmpeg -i input.ogg -metadata author="Vitaly" output.m4ay veo estos metadatos durante la codificación, pero ffprobe y Finder no muestran estos metadatos.
Vitaly Zdanevich
authorno parece ser una etiqueta válida que la mayoría de los jugadores reconocen. Tampoco es parte de la implementación ID3v2 de ffmpeg. Quieres decir artist?
slhck