我在 macOS Catalina (10.15.7) 上运行 FFmpeg 版本 4.3.1(通过 Homebrew 安装)。今天早上我正在运行一个标准的 FFmpeg 命令来合并 MP4 和 SRT 字幕:
ffmpeg -y -i input.mp4 -i input.srt -c:v copy -c:a copy -c:s mov_text -metadata:s:s:0 language=eng output.mp4
当它突然在屏幕上显示这些行时失败:
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Stream #1:0 -> #0:2 (subrip (srt) -> mov_text (native))
Press [q] to stop, [?] for help
Segmentation fault: 11
这对我来说很奇怪,因为几天前我使用了完全相同的命令——甚至是过去——没有任何问题。
检查输出文件本身仅显示以下内容;似乎在为输出文件创建标题时立即死亡:
ftypisomisomiso2avc1mp4freemdat
检查我的一些可用 MP4 文件显示,这ftypisomisomiso2avc1mp4freemdat
也是这些文件的初始内容的一部分。但是可以正常工作的 MP4 文件显然有标题和二进制内容。
为什么这会突然发生在如此简单的内容复制/合并命令上?该命令只是将 MP4 视频与字幕合并,而不对内容进行转码,并且应该花费不到一秒钟左右的时间来完成它的工作。
唯一需要注意的是定期运行brew update
,brew upgrade
几乎没有问题。但我假设最近的 FFmpeg 升级导致了这个问题。这是我的 macOS 机器上的完整版本输出以供参考:
ffmpeg version 4.3.1 Copyright (c) 2000-2020 the FFmpeg developers
built with Apple clang version 12.0.0 (clang-1200.0.32.21)
configuration: --prefix=/usr/local/Cellar/ffmpeg/4.3.1_2 --enable-shared --enable-pthreads --enable-version3 --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --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-libsoxr --enable-videotoolbox --disable-libjack --disable-indev=jack
libavutil 56. 51.100 / 56. 51.100
libavcodec 58. 91.100 / 58. 91.100
libavformat 58. 45.100 / 58. 45.100
libavdevice 58. 10.100 / 58. 10.100
libavfilter 7. 85.100 / 7. 85.100
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 7.100 / 5. 7.100
libswresample 3. 7.100 / 3. 7.100
libpostproc 55. 7.100 / 55. 7.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run 'man ffmpeg'
可以做些什么来解决这个问题?只需等待发布新版本/补丁 FFmpeg 即可解决该问题?是否有可以添加到该命令的参数以确保该命令按预期工作?
注意:似乎在 2020 年 11 月 6 日左右对 FFmpeg 进行了更新,从版本
4.3.1_2
到4.3.1_3
解决了这个问题。所以这是一个暂时性的错误,已被清除。如果其他人遇到类似问题,请留下答案以供将来参考。我对此唯一的解决方案是使用早期版本的 FFmpeg 的解决方法。
我知道 FFmpeg 2.8.17 是 4.3.1 版本之后的两个主要版本,但是为了快速找到一种无需转码即可将 MP4 与字幕合并的解决方案,该解决方案可以快速实施并解决我的问题。
虽然我希望可以在命令中添加一个参数来解决这个问题,但不知道还能做什么,我启动了一个我在 VirtualBox 中设置的 Ubuntu 16.04 VM,在其上安装了 FFmpeg,将视频和字幕复制到那个 Ubuntu 16.04 虚拟机,运行相同的命令并且一切都按预期工作。
Ubuntu 16.04 上安装的 FFmpeg 版本
sudo aptitude install ffmpeg
是 2.8.17;这绝对是我在 macOS 中通过 Homebrew (4.3.1) 获得的较低版本,但对于纯粹的合并字幕,它完成了这项工作。以下是 Ubuntu 16.04 VM 上 FFmpeg 的完整版本输出以供参考: