我有一个小小的示例mp4视频(不幸的是,堆栈溢出不允许我直接嵌入我的问题)。根据之前提供的建议in this answer,我想在视频中添加一个字幕,它将在屏幕上闪烁2秒,使用如下所示的.srt文件:
1
00:00:02,000 --> 00:00:04,000
Test subtitle
如上面的链接所示,我发出一个如下所示的命令:
ffmpeg -i small.mp4 -f srt -i small.srt -c:v copy -c:a copy -c:s mov_text small_subtitles.mp4 >& err.log
err.log
文件如下所示:
ffmpeg version N-76950-g401c93d-tessus Copyright (c) 2000-2015 the FFmpeg developers
built with Apple LLVM version 6.0 (clang-600.0.57) (based on LLVM 3.5svn)
configuration: --cc=/usr/bin/clang --prefix=/opt/ffmpeg --as=yasm --extra-version=tessus --enable-avisynth --enable-fontconfig --enable-gpl --enable-libass --enable-libbluray --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopus --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzmq --enable-version3 --disable-ffplay --disable-indev=qtkit --disable-indev=x11grab_xcb
libavutil 55. 7.100 / 55. 7.100
libavcodec 57. 15.100 / 57. 15.100
libavformat 57. 17.100 / 57. 17.100
libavdevice 57. 0.100 / 57. 0.100
libavfilter 6. 15.100 / 6. 15.100
libswscale 4. 0.100 / 4. 0.100
libswresample 2. 0.101 / 2. 0.101
libpostproc 54. 0.100 / 54. 0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'small.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf56.40.101
Duration: 00:00:10.02, start: 0.000000, bitrate: 23 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 188x112 [SAR 1:1 DAR 47:28], 17 kb/s, 60 fps, 60 tbr, 15360 tbn, 120 tbc (default)
Metadata:
handler_name : VideoHandler
Input #1, srt, from 'small.srt':
Duration: N/A, bitrate: N/A
Stream #1:0: Subtitle: subrip
[mp4 @ 0x7f8492848000] Codec for stream 0 does not use global headers but container format requires global headers
Output #0, mp4, to 'small_subtitles.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.17.100
Stream #0:0(und): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 188x112 [SAR 1:1 DAR 47:28], q=2-31, 17 kb/s, 60 fps, 60 tbr, 15360 tbn, 15360 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1: Subtitle: mov_text ([8][0][0][0] / 0x0008) (default)
Metadata:
encoder : Lavc57.15.100 mov_text
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #1:0 -> #0:1 (subrip (srt) -> mov_text (native))
Press [q] to stop, [?] for help
frame= 601 fps=0.0 q=-1.0 Lsize= 29kB time=00:00:09.96 bitrate= 24.0kbits/s
video:21kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 39.561928%
结果输出small_subtitles.mp4
似乎没有预期的字幕。
此外,错误消息
[mp4 @ 0x7f8492848000] Codec for stream 0 does not use global headers but container format requires global headers
当我在命令行运行它时,以粗体颜色突出显示而不捕获err.log
文件(这使我认为它必须是一个重要的消息),虽然我无法在这里轻松地重现那种特殊的打印格式
我也尝试了this method,但是.avi替换了.av4,它似乎只是默默地失败 - 没有明显的错误信息,但也没有在结果视频中出现字幕。
有人知道如何解决这个问题吗?特别是,关于全局标题的业务是什么意思?
我正在开发OS X,并且愿意听取使用其他开源工具的答案。