[FFmpeg-user] concatenating files in FFMPEG causing the wrong file length

Philip Orrill philip.orrill at outlook.com
Wed Oct 7 14:46:38 EEST 2020


Hi there

I have an input coming from an rtsp source in 2 second increments to convert
to a HLS stream. The stream itself seems fine. However I do sometimes get
the warning:

*Non-monotonous DTS in output stream 0:0*

my current command for obtaining the stream is 

*-stimeout 60000000 -y -rtsp_transport tcp -use_wallclock_as_timestamps 1 -i
{url} -c:v copy -hls_segment_type mpegts -hls_time 2 -hls_list_size 5 -f hls
output.m3u8*

The idea was to then concatenate these together to get a full file. However
the concatenation generates a file with a very different length. I may do a
10 minute video. When concatenated this comes out to be 15 minutes or more.

I figured this was due to the warnings. I thought I could process each
segment and re-generate the timestamps. I know all my files are around 2
second long for instance. So re-generate and then concatenate.

I am so far having no luck.

*I have tried a few different commands below are some examples:*

*Reset timestamps* -i "D:\TestFiles\output18.ts" -c:v libx264 -crf 17
-preset veryfast -reset_timestamps 1 "D:\TestFiles\output18_new.ts"

*setting framerate and fflags* -i "D:\TestFiles\output18.ts" -r 20 -c:v
libx264 -preset veryfast -g 20 -fflags +genpts "D:\TestFiles\output18.mp4"

*Vsync and wall clock* -i "D:\TestFiles\output18.ts" -r 20
-use_wallclock_as_timestamps 1 -c:v libx264 -preset veryfast -vsync drop
"D:\TestFiles\output18.mp4"

The files are generated and I can concatenate them but the time is still off
by a lot.

Interestingly even when converting a single file from just a ts to an mp4
the files changes more then I expect.

For example the file size goes from 260KB to 694KB

I have done a lot of tests and they all seem to produce slightly different
wrong results.

Here is an example from FFPROBE on the 2 files I have run.

*ts file*
ffprobe version git-2019-11-11-20c5f4d Copyright (c) 2007-2019 the FFmpeg
developers
  built with gcc 9.2.1 (GCC) 20191010
  configuration: --enable-gpl --enable-version3 --enable-sdl2
--enable-fontconfig --enable-gnutls --enable-iconv --enable-libass
--enable-libdav1d --enable-libbluray --enable-libfreetype
--enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb
--enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy
--enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx
--enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265
--enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp
--enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc
--enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom
--enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va
--enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
--enable-libopenmpt --enable-amf
  libavutil      56. 35.101 / 56. 35.101
  libavcodec     58. 61.100 / 58. 61.100
  libavformat    58. 34.101 / 58. 34.101
  libavdevice    58.  9.100 / 58.  9.100
  libavfilter     7. 66.100 /  7. 66.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, mpegts, from 'D:\TestFiles\output18.ts':
  Duration: 00:00:01.99, start: 38.121067, bitrate: 1034 kb/s
  Program 1
    Metadata:
      service_name    : Media Presentation
      service_provider: FFmpeg
    Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B),
yuv420p(tv, bt709, progressive), 1920x1080, 20 fps, 24.92 tbr, 90k tbn, 40
tbc

*MP4*
ffprobe version git-2019-11-11-20c5f4d Copyright (c) 2007-2019 the FFmpeg
developers
  built with gcc 9.2.1 (GCC) 20191010
  configuration: --enable-gpl --enable-version3 --enable-sdl2
--enable-fontconfig --enable-gnutls --enable-iconv --enable-libass
--enable-libdav1d --enable-libbluray --enable-libfreetype
--enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb
--enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy
--enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx
--enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265
--enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp
--enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc
--enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom
--enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va
--enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
--enable-libopenmpt --enable-amf
  libavutil      56. 35.101 / 56. 35.101
  libavcodec     58. 61.100 / 58. 61.100
  libavformat    58. 34.101 / 58. 34.101
  libavdevice    58.  9.100 / 58.  9.100
  libavfilter     7. 66.100 /  7. 66.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'D:\TestFiles\output18.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.34.101
  Duration: 00:00:02.05, start: 0.000000, bitrate: 1151 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
1920x1080, 1145 kb/s, 20 fps, 20 tbr, 10240 tbn, 40 tbc (default)
    Metadata:
      handler_name    : VideoHandler


The file length is slightly longer on the mp4 at 2.05 instead of 1.99. Some
other items have also changed. The length seems to be consistently 2.05 but
the bits and tbn seem to change slightly depending on what inputs I use for
encoding to the mp4.

All I am trying to achieve.
I have 10 minutes of ts files. I concatenate them and have a 10 minute
video. My guess is that due to the issues with timestamps or an inconsistent
frame rate it is causing the issues with the concatenation.

I don't mind re-encoding the files and generating new timestamps etc. I
can't seem to quite get it to work. I'm not sure if i'm missing something. I
have been banging my head against this for a few days now.

I know the length of the file (ffprobe gets it correct). I know the fps it
should be, so I can add add/remove frames if needed.

It would be appreciated if someone could point me in the correct direction.

thanks




--
Sent from: http://www.ffmpeg-archive.org/


More information about the ffmpeg-user mailing list