ffmpeg 在添加元数据标签时切断大部分音频

ffmpeg 在添加元数据标签时切断大部分音频

我正在尝试将元数据 id3v2.3 标签添加到使用 VLC 媒体播放器转换为 mp3 的一些文件中。这是我使用的命令:

ffmpeg -i "100000A9.mp3" -id3v2_version 3 -write_id3v1 1 -metadata title="titlename" -metadata artist="artistname" -metadata album="albumname" -b:a 320k "100000A9.mp3"

不幸的是,当我这样做时,我得到了以下输出:

    ffmpeg version N-79630-g9ac154d Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.3.0 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av
isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab
le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --
enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-lib
modplug --enable-libmfx --enable-libmp3lame --enable-libopencore-amrnb --enable-
libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enabl
e-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable
-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --ena
ble-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx
264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable
-lzma --enable-decklink --enable-zlib
  libavutil      55. 22.101 / 55. 22.101
  libavcodec     57. 38.100 / 57. 38.100
  libavformat    57. 34.103 / 57. 34.103
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 44.100 /  6. 44.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
[mp3 @ 0000000001e42b80] Estimating duration from bitrate, this may be inaccurat
e
Input #0, mp3, from '100000A9.mp3':
  Duration: 00:04:32.56, start: 0.000000, bitrate: 320 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
File '100000A9.mp3' already exists. Overwrite ? [y/N] y
[mp3 @ 00000000006271e0] Using AVStream.codec to pass codec parameters to muxers
 is deprecated, use AVStream.codecpar instead.
Output #0, mp3, to '100000A9.mp3':
  Metadata:
    TIT2            : titlename
    TPE1            : artistname
    TALB            : albumname
    TSSE            : Lavf57.34.103
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
    Metadata:
      encoder         : Lavc57.38.100 libmp3lame
Stream mapping:
  Stream #0:0 -> #0:0 (mp3 (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
size=      67kB time=00:00:01.64 bitrate= 331.1kbits/s speed=10.2x
video:0kB audio:65kB subtitle:0kB other streams:0kB global headers:0kB muxing ov
erhead: 1.915571%

如您所见,文件最终输出为 67kb,长度仅为 1.64 秒。标签已正确添加,但整个文件已损坏。

FFmpeg 一开始确实看到了正确的大小(4:32.56),但出于某种原因,它拒绝正确输出。这和其他人丢失几秒钟时遇到的情况不一样。整个文件都消失了。我也检查并播放了文件,里面只有 1.64 秒的开头。有人知道为什么吗?

答案1

FFmpeg 不会对文件进行任何就地编辑或处理!

通过指定与输入文件相同的输出文件,ffmpeg 会清除文件,并且只有在输出令牌被操作之前最初读入内存的数据包才会被编码和写入。

您应该始终指定与输入不同的输出文件。

也就是说,你可以这样添加或更改标签

ffmpeg -i "current.mp3" -id3v2_version 3 -write_id3v1 1 \
  -metadata title="titlename" -metadata artist="artistname" -metadata album="albumname" \
  -c:a copy "new.mp3"

相关内容