Add SRT subtitle to video with ffmpeg

38,396

Solution 1

The MP4 container does not support SubRip subtitles, only a special mov_text format.

Option 1: Convert subtitles to 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

Option 2: Use an MKV container

Not sure if the iPod supports this.

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

Option 3: Burn in the subtitles to the video

May require additional steps to work, especially if you're in Windows. See https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo for more information.

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

Solution 2

Here is the command to Add srt file to video using FFmpeg in Windows Environment

ffmpeg -i Video.wmv -i hi.srt -map 0 -map 1 -c copy -crf 23 video-with-subtitles.mkv

Solution 3

It appears that two subtitle tracks are trying to be added, one of which has no codec. More recent versions of ffmpeg do not use -newsubtitle, so that might be your problem.

Try leaving off -newsubtitle.

Solution 4

very first install 'libass' library in your linux. after that configure ffmpeg with the command

./configure --enable-libass --disable-yasm --enable-libfreetype 

after that copy your srt in the ffmpeg directory then use these command

ffmpeg -i subtitle.srt subtitle.ass
ffmpeg -i input.flv -vf ass=subtitle.ass output.flv
Share:
38,396
jAckOdE
Author by

jAckOdE

A progreamer

Updated on June 26, 2021

Comments

  • jAckOdE
    jAckOdE about 3 years

    I use ffmpeg to encode, and add subtitle to a video by following command

    $ 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
    

    Here is the output

    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
    

    Can anyone tell what is wrong with my command?

  • jAckOdE
    jAckOdE over 12 years
    thanks, but it doesnt works, I found out that ffmpeg doesnt support text streams in mp4 and m4v container. It does work with mkv. I changed to mplayer/mencoder.
  • alexia
    alexia almost 9 years
    The OP's subtitles are in SubRip format, not Advanced SubStation. However, if burning in the subtitles is desired, subtitles=hifi.srt can be used instead, as mentioned in my answer.
  • user1767754
    user1767754 almost 9 years
    Nice i was looking what the end subtitle format is, as you stated, its mov_text, is there any other container which supports subrip?
  • llogan
    llogan about 5 years
    -crf 23 is ignored when using -c copy, so you can omit -crf 23. You should properly format your command so it looks nicer like the other answers.
  • Chris
    Chris about 3 years
    Why is this "better"?
  • Chris
    Chris about 3 years
    FYI, a whole bunch of your old answers are popping up in the Low Quality Posts review queue right now, including this one and an exact duplicate answer on another question. Mostly ones that have no context or explanation, just "copy this and trust me".