转码后的持续时间变化ts

时间:2017-05-01 00:48:30

标签: ffmpeg

我有关于使用ffmpeg进行转码的问题

我想将m3u8覆盖到mp4,所以我首先对每个ts文件进行转码,然后将它们连接到mp4,但我发现持续时间将大于源文件。

  

源文件是:   http://oc7iy3eta.bkt.clouddn.com/src_20.ts

     

转码后,测试文件为:   http://oc7iy3eta.bkt.clouddn.com/test_20.ts

我使用命令如下改为5fps和400k比特率:

sudo ffmpeg -analyzeduration 2147483647 -probesize 2147483647 -nostdin -y -v warning -i ./src_20.ts -threads 3 -movflags faststart -metadata:s:v rotate=0 -chunk_duration 520000 -video_track_timescale 25000 -pix_fmt yuv420p -copytb 1 -vcodec libx264 -b:v 400000 -minrate 400000 -maxrate 400000 -bufsize 500k -force_key_frames "expr:gte(t,n_forced*2)" -vsync 1 -r 5 -s 544*960 -acodec libfaac -async 1 ./test_20.ts

我使用ffprobe命令查看视频信息:

源文件信息:

持续时间:00:00:01.26,开始:28.346989,比特率:921 kb / s   计划1     元数据:       service_name:Service01       service_provider:FFmpeg     流#0:0 [0x100]:音频:aac([15] [0] [0] [0] / 0x000F),44100 Hz,立体声,fltp,23 kb / s     流#0:1 [0x101]:视频:h264(高)([27] [0] [0] [0] / 0x001B),yuv420p,544x960,10.67 tbr,90k tbn,180k tbc

测试文件:

输入#0,mpegts,来自' test_20.ts':   持续时间:00:00:01.62,开始时间:1.576778,比特率:447 kb / s   计划1     元数据:       service_name:Service01       service_provider:FFmpeg     流#0:0 [0x100]:视频:h264(高)([27] [0] [0] [0] / 0x001B),yuv420p,544x960,5 fps,5 tbr,90k tbn,10 tbc     流#0:1 [0x101]:音频:aac([15] [0] [0] [0] / 0x000F),44100 Hz,立体声,fltp,5 kb / s

=============================================== ========================

问题

所以,我们可以看到src文件的持续时间是1.26s,但是在转码后,测试文件是1.62s。

为什么呢?任何人都可以帮忙

1 个答案:

答案 0 :(得分:0)

我建议你将m3u8保存到单个TS,然后将其转码为MP4。

ffmpeg -i in.m3u8 -c copy src.ts

您当前的命令将每个TS转码为CFR的速率的一半但您的源时间戳有一些抖动,因此由于PTS量化,将存在不匹配。单个文件转码会将其最小化。