Я пытаюсь добавить теги метаданных id3v2.3 в некоторые файлы, которые я конвертировал в mp3 с помощью медиаплеера VLC. Вот команда, которую я использую:

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%

Как видите, файл в итоге выдает до 67 КБ и имеет длину всего 1,64 секунды. Теги добавлены правильно, но весь файл разрушен.

Сначала FFmpeg видит правильный размер (4:32.56), но по какой-то причине он отказывается правильно выводить. Это не то же самое, что и у других людей, когда теряются несколько секунд. Весь файл исчез. Я также проверил и воспроизвел файл, все, что есть, это 1.64 секунд начала. Кто-нибудь понимает почему?

1 ответ1

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"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .