I have spent a lot of time on this issue. Hope someone can help.

I want to convert 3147 images + ac3 audio file into an mpeg2 video at 29.97fps (about 1m45s). My command:

~/ffmpeg/ffmpeg/ffmpeg -loop_input \
  -t 105 -i v%4d.tga -i final.ac3 \
  -vcodec mpeg2video -qscale 1 -s 400x400 -r 30000/1001 \
  -acodec copy -y out.mpeg 2> out.txt

However, the audio file ends before the frame sequence. Which means the video is slower then audio.

I checked the output file with imageinfo and see:

Complete name                    : out.mpeg
Format                           : MPEG-PS
File size                        : 7.18 MiB
Duration                         : 1mn 44s
Overall bit rate                 : 574 Kbps

ID                               : 224 (0xE0)
Format                           : MPEG Video
Format version                   : Version 2
Format profile                   : Main@Main
Format settings, BVOP            : No
Format settings, Matrix          : Default
Format_Settings_GOP              : M=1, N=12
Duration                         : 1mn 44s
Bit rate mode                    : Variable
Bit rate                         : 103 Kbps
Width                            : 400 pixels
Height                           : 400 pixels
Display aspect ratio             : 1.000
Frame rate                       : 29.970 fps
Resolution                       : 8 bits
Colorimetry                      : 4:2:0
Scan type                        : Progressive
Bits/(Pixel*Frame)               : 0.021
Stream size                      : 1.29 MiB (18%)

ID                               : 128 (0x80)
Format                           : AC-3
Format/Info                      : Audio Coding 3
Duration                         : 1mn 44s
Bit rate mode                    : Constant
Bit rate                         : 448 Kbps
Channel(s)                       : 6 channels
Channel positions                : Front: L C R, Side: L R, LFE
Sampling rate                    : 44.1 KHz
Stream size                      : 5.61 MiB (78%)

The log from ffmpeg shows many duplicate frames. But I don't know how to get rid of that.

-loop_input is deprecated, use -loop 1
[image2 @ 0x9c17a80] max_analyze_duration 5000000 reached at 5000000
Input #0, image2, from 'v%4d.tga':
  Duration: 00:02:05.88, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: targa, bgr24, 400x400, 25 fps, 25 tbr, 25 tbn, 25 tbc
-loop_input is deprecated, use -loop 1
[ac3 @ 0x9ca5420] max_analyze_duration 5000000 reached at 5014400
[ac3 @ 0x9ca5420] Estimating duration from bitrate, this may be inaccurate
Input #1, ac3, from 'Final.ac3':
  Duration: 00:20:10.68, start: 0.000000, bitrate: 447 kb/s
    Stream #1:0: Audio: ac3, 44100 Hz, 5.1(side), s16, 448 kb/s
Incompatible pixel format 'bgr24' for codec 'mpeg2video', auto-selecting format 'yuv420p'
[buffer @ 0x9c1e060] w:400 h:400 pixfmt:bgr24 tb:1/1000000 sar:0/1 sws_param:
[buffersink @ 0x9dd56c0] auto-inserting filter 'auto-inserted scale 0' between the filter 'src' and the filter 'out'
[scale @ 0x9c178e0] w:400 h:400 fmt:bgr24 -> w:400 h:400 fmt:yuv420p flags:0x4
[mpeg @ 0x9d58060] VBV buffer size not set, muxing may fail
Output #0, mpeg, to 'out.mpeg':
    encoder         : Lavf53.21.0
    Stream #0:0: Video: mpeg2video, yuv420p, 400x400, q=2-31, 200 kb/s, 90k tbn, 29.97 tbc
    Stream #0:1: Audio: ac3, 44100 Hz, 5.1(side), 448 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (targa -> mpeg2video)
  Stream #1:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=  267 fps=  0 q=1.0 size=     564kB time=00:00:08.87 bitrate= 520.6kbits/s dup=43 drop=0    
frame=  544 fps=542 q=1.0 size=    1186kB time=00:00:18.11 bitrate= 536.2kbits/s dup=89 drop=0    
frame=  821 fps=546 q=1.0 size=    1818kB time=00:00:27.36 bitrate= 544.3kbits/s dup=135 drop=0    
frame= 1098 fps=548 q=1.0 size=    2444kB time=00:00:36.60 bitrate= 547.0kbits/s dup=181 drop=0    
frame= 1376 fps=549 q=1.0 size=    3072kB time=00:00:45.87 bitrate= 548.5kbits/s dup=227 drop=0    
frame= 1653 fps=550 q=1.0 size=    3700kB time=00:00:55.12 bitrate= 549.9kbits/s dup=273 drop=0    
frame= 1930 fps=550 q=1.0 size=    4326kB time=00:01:04.36 bitrate= 550.6kbits/s dup=319 drop=0    
frame= 2208 fps=551 q=1.0 size=    4960kB time=00:01:13.64 bitrate= 551.8kbits/s dup=365 drop=0    
frame= 2462 fps=546 q=1.0 size=    5746kB time=00:01:22.11 bitrate= 573.2kbits/s dup=407 drop=0    
frame= 2728 fps=544 q=1.0 size=    6354kB time=00:01:30.99 bitrate= 572.1kbits/s dup=451 drop=0    
frame= 3007 fps=545 q=1.0 size=    6980kB time=00:01:40.28 bitrate= 570.2kbits/s dup=498 drop=0    
frame= 3146 fps=546 q=1.0 Lsize=    7352kB time=00:01:44.93 bitrate= 573.9kbits/s dup=521 drop=0    

video:1518kB audio:5745kB global headers:0kB muxing overhead 1.230493%

migrated from stackoverflow.com Nov 21 '11 at 23:25

This question came from our site for professional and enthusiast programmers.

up vote 6 down vote accepted

Finally, I found the solution. Very simple. Sync problem happened because the input stream of images is considered 25fps by default (even if I specified output frame rate is 29.97fps), so ffmpeg duplicates frames to match from 25fps to 29.97fps.

To force input rate, just put another -r 30000/1001 before the input:

~/ffmpeg/ffmpeg/ffmpeg -loop_input \
  -t 105 -r 30000/1001 -i v%4d.tga -i final.ac3 \
  -vcodec mpeg2video -qscale 1 -s 400x400 -r 30000/1001 \
  -acodec copy -y out.mpeg 2> out.txt

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.