ffmpeg не записывать метаданные в aac
Мой вклад:
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
- Мне нужно создать билет об этом?
1 ответ
То, что вы пишете, является необработанным битовым потоком ADTS AAC (.aac
). Хотя эти битовые потоки могут переносить кадры метаданных (ID3), ffmpeg не может их записать. id3v2
инструмент командной строки должен быть в состоянии сделать это все же.
С помощью ffmpeg вам нужно записать свой аудиопоток в контейнер, который может хранить такие метаданные, например, .mp4
, .mov
, или же .mkv
, Например:
ffmpeg -i <input> -metadata title=Foo -metadata album=Bar output.mp4