我有一些格式错误的 MP3 文件。具体来说,它们可以顺利播放所需的音频,但之后 FFplay 报告:
[mp3float @ 0x7fd7cb82a600] Header missing
[mp3float @ 0x7fd7cb82a600] overread, skip -5 enddists: -2 -2
并且相应地,FFmpeg 报告:
[mp3 @ 0x7fe0c180a400] Audio packet of size 749 (starting with 0F757F48...) is invalid, writing it anyway.
之后,在我尝试过的所有播放器(FFplay、Audacity、iTunes、VLC)中,曲目的最后几秒都会重复播放。除了 FFplay 之外,其他播放器对曲目的时长也感到困惑。
我该如何修复这些文件?
如果需要说的话:对我来说,结果是否使用 FFmpeg、是否涉及使用或不使用不同工具的多次传递都无关紧要,只要它是可编写脚本的即可。我有不少这样的脚本。我在 macOS 10.14.4 上。ffmpeg -version
:
ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
built with Apple LLVM version 10.0.1 (clang-1001.0.46.3)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.1.3 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags='-I/Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/openjdk-12.jdk/Contents/Home/include/darwin' --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libmp3lame --enable-libopus --enable-librubberband --enable-libsnappy --enable-libtesseract --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-libspeex --enable-videotoolbox --disable-libjack --disable-indev=jack --enable-libaom --enable-libsoxr
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
此外,avconv 12.3 根本没有记录任何错误,但也没有解决问题。
编辑:经过进一步思考,我认为最简单的解决方案是,由于错误始终是文件的最后一部分,因此准确确定错误发生的时间并截断流。因此,另一个子问题(对 SE 处理此类事情的礼仪并不完全有信心):我如何确定错误的时间戳?
答案1
加载损坏的mp3 文件mp3直接剪切然后只需使用新文件名保存该文件即可。
程序会在保存文件时自动修复文件中的各种错误。不确定它是否能解决您的特定问题,但值得一试。
mp3DirectCut 是一个用于直接编辑 MP3 的工具:
所有 mp3 帧都会重新写入新文件并重新编入索引。这样许多错误就得到修复,而无需重新编码文件(它不会转换为 .wav,而是完全作为 .mp3 帧序列进行处理)。