Redux:如何使用ffmpeg为mp4添加字幕?

时间:2015-11-24 23:01:01

标签: video ffmpeg

我有一个小小的示例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,并且愿意听取使用其他开源工具的答案。

0 个答案:

没有答案