ffmpeg не записывать метаданные в aac

812
Vitaly Zdanevich

Мой вклад:

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

Возвращается:

 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 

Как видите - Metadataблок имеет Album : Vitaly

Но ffprobeтеперь показать какие-либо метаданные:

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

Я также проверил в Finder на MacOS - ноль метаданных.

Но я проверил установку метаданных для ogg вместо aac - и это работает . Также я обнаружил, что ffmpegмогу установить метаданные m4a, но я не могу использовать этот формат для своего проекта, потому что Android не может воспроизводить его из коробки.

Похоже, ошибка в ffmpeg- мне нужно создать тикет об этом?

0

1 ответ на вопрос

0
slhck

То, что вы пишете, является необработанным потоком битов ADTS AAC ( .aac). Хотя эти битовые потоки могут переносить кадры метаданных (ID3), ffmpeg не может их записать. Инструмент id3v2командной строки должен быть в состоянии сделать это все же.

С FFmpeg, вы должны написать свой аудиопоток в контейнер, который может хранить такие метаданные, например .mp4, .mov, или .mkv. Например:

ffmpeg -i <input> -metadata title=Foo -metadata album=Bar output.mp4 
Хм, хорошо, спасибо за ответ. Но я думаю, что в таком случае FFmpeg может показывать предупреждение / ошибку пользователю. Vitaly Zdanevich 6 лет назад 0
Я нашел в [этом ответе] (https://superuser.com/a/351720/204068), чем я могу использовать `id3v2` - это правильное решение aac? Vitaly Zdanevich 6 лет назад 0
Ах, ты прав. Очевидно, фреймы метаданных поддерживаются, но ffmpeg их не записывает. Инструмент командной строки `id3v2` может помочь, да. slhck 6 лет назад 0
Я попытался `ffmpeg -i input.ogg -metadata author =" Vitaly "output.m4a`, и я вижу эти метаданные во время кодирования, но ffprobe и Finder не показывают эти метаданные. Vitaly Zdanevich 6 лет назад 0
`author` не является допустимым тегом, который распознают большинство игроков. Это также не является частью реализации ffmpeg ID3v2. Вы имеете в виду "художник"? slhck 6 лет назад 0
Да спасибо! Vitaly Zdanevich 6 лет назад 0

Похожие вопросы