ffmpeg não grava metadados no aac

0

Minha entrada:

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

Retornado:

    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 você vê - Metadata block tem Album : Vitaly

Mas ffprobe agora mostrou metadados:

$ 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]

Também verifiquei no Finder em metadados macOS - zero.

Mas verifiquei a configuração de metadados para o ogg em vez de aac - e funciona . Também achei que ffmpeg pode definir metadados como m4a , mas não posso usar esse formato para meu projeto porque o Android não pode ser reproduzido fora da caixa.

Parece um bug em ffmpeg - eu preciso criar um ticket sobre isso?

    
por Vitaly Zdanevich 19.09.2017 / 10:24

1 resposta

0

O que você está escrevendo é um bitstream de ADTS AAC bruto ( .aac ). Embora esses fluxos de bits possam transportar quadros de metadados (ID3), o ffmpeg não pode gravá-los. A ferramenta de linha de comando id3v2 deve ser capaz de fazer isso.

Com o ffmpeg, você precisa gravar seu fluxo de áudio em um contêiner que possa armazenar esses metadados, por exemplo, .mp4 , .mov ou .mkv . Por exemplo:

ffmpeg -i <input> -metadata title=Foo -metadata album=Bar output.mp4
    
por 19.09.2017 / 12:51