ffmpeg - 使用 ffmpeg 为视频添加 SRT 字幕

标签 ffmpeg subtitle

我使用 ffmpeg 进行编码,并通过以下命令为视频添加字幕

$ ffmpeg -i hifi.avi -i hifi.srt -acodec libfaac -ar 48000 -ab 128k -ac 2 -vcodec libx264 -vpre ipod640 -s 480x240 -b 256k -scodec copy  hifi.m4v -newsubtitle
这是输出
ffmpeg version 0.8.git, Copyright (c) 2000-2011 the FFmpeg developers
  built on Aug  4 2011 11:11:39 with gcc 4.5.2
  configuration: --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib --disable-shared --enable-static --enable-gpl --enable-postproc --enable-pthreads --enable-ffplay --disable-ffserver --enable-memalign-hack --enable-nonfree --enable-libfaac --arch=x86 --enable-swscale --enable-libx264 --enable-avfilter --enable-debug=3
  libavutil    51. 11. 1 / 51. 11. 1
  libavcodec   53.  9. 1 / 53.  9. 1
  libavformat  53.  6. 0 / 53.  6. 0
  libavdevice  53.  2. 0 / 53.  2. 0
  libavfilter   2. 27. 5 /  2. 27. 5
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  51.  2. 0 / 51.  2. 0
Input #0, avi, from 'hifi.avi':
  Metadata:
    encoder         : VirtualDubMod 1.5.4.1 (build 2178/release)
    IAS1            : English
  Duration: 01:49:02.20, start: 0.000000, bitrate: 897 kb/s
    Stream #0.0: Video: mpeg4 (Simple Profile), yuv420p, 544x304 [SAR 1:1 DAR 34:19], 25 tbr, 25 tbn, 25 tbc
    Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 32 kb/s
[srt @ 0152c100] Estimating duration from bitrate, this may be inaccurate
Input #1, srt, from 'hifi.srt':
  Duration: N/A, start: 56.080000, bitrate: N/A
    Stream #1.0: Subtitle: srt
File 'hifi.m4v' already exists. Overwrite ? [y/N] y
[buffer @ 02548920] w:544 h:304 pixfmt:yuv420p tb:1/1000000 sar:1/1 sws_param:
[scale @ 02558ee0] w:544 h:304 fmt:yuv420p -> w:480 h:240 fmt:yuv420p flags:0x4
[libx264 @ 02547f20] Default settings detected, using medium profile
[libx264 @ 02547f20] using SAR=1/1
[libx264 @ 02547f20] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.1 Cache64
[libx264 @ 02547f20] profile High, level 3.0
[libx264 @ 02547f20] 264 - core 115 - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=0 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=256 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=10000 vbv_bufsize=10000 nal_hrd=none ip_ratio=1.40 aq=1:1.00
Output #0, ipod, to 'hifi.m4v':
    Stream #0.0: Video: libx264, yuv420p, 480x240 [SAR 1:1 DAR 2:1], q=2-31, 256 kb/s, 90k tbn, 25 tbc
    Stream #0.1: Audio: libfaac, 48000 Hz, 2 channels, s16, 128 kb/s
    Stream #0.2: Subtitle: srt
    Stream #0.3: Subtitle: [0][0][0][0] / 0x0000, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
  Stream #1.0 -> #0.2
  Stream #1.0 -> #0.3
Encoder (codec id 0) not found for output stream #0.3
谁能告诉我的命令有什么问题?

最佳答案

MP4 容器不支持 SubRip 字幕,只有一个特殊的 mov_text格式。

选项 1:将字幕转换为 mov_text

ffmpeg -i hifi.avi -i hifi.srt -acodec libfaac -ar 48000 -ab 128k -ac 2 -vcodec libx264 -vpre ipod640 -s 480x240 -b 256k -scodec mov_text hifi.m4v

选项 2:使用 MKV 容器

不确定 iPod 是否支持此功能。
ffmpeg -i hifi.avi -i hifi.srt -acodec libfaac -ar 48000 -ab 128k -ac 2 -vcodec libx264 -vpre ipod640 -s 480x240 -b 256k -scodec copy hifi.mkv

选项 3:将字幕刻录到视频中

可能需要额外的步骤才能工作,尤其是在 Windows 中时。见 https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo了解更多信息。
ffmpeg -i hifi.avi -vf subtitles=hifi.srt -acodec libfaac -ar 48000 -ab 128k -ac 2 -vcodec libx264 -vpre ipod640 -s 480x240 -b 256k hifi.m4v

关于ffmpeg - 使用 ffmpeg 为视频添加 SRT 字幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7240247/

相关文章:

css - .vtt 文件中的字体样式?

audio - 从文件中的 AVSubtitle 转储字幕

ios - 副标题 TableView 单元格

uitableview - Swift UITableViewCell 对齐

audio - 用ffmpeg传输音频,开头出乎意料的无声

iphone - 在 iOS 中使用 FFMPEG 进行 H.264 编码时未找到编解码器

php - 返回 shell_exec 作为字符串 PHP 使用 soundtouch/soundstrech 检测 BPM

java - 在 Android 中获取视频的精确帧

javascript - 在 Shaka Player 中更改字幕的文本大小

android - 视频未在 Android 设备的默认播放器中播放