我有关于使用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。
为什么呢?任何人都可以帮忙
答案 0 :(得分:0)
我建议你将m3u8保存到单个TS,然后将其转码为MP4。
ffmpeg -i in.m3u8 -c copy src.ts
您当前的命令将每个TS转码为CFR的速率的一半但您的源时间戳有一些抖动,因此由于PTS量化,将存在不匹配。单个文件转码会将其最小化。