我的意见:
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]
我还在 macOS 上的 Finder 中检查过——零元数据。
但我检查了元数据的设置为 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