Opened 6 years ago

Closed 2 years ago

Last modified 2 years ago

#977 closed defect (fixed)

stream copy duration does not match the one specified by -t when -ss is used

Reported by: overclokkato Owned by:
Priority: normal Component: ffmpeg
Version: git-master Keywords:
Cc: svnpenn@gmail.com Blocked By:
Blocking: Reproduced by developer: yes
Analyzed by developer: no

Description

Hello,
i'm trying to cut an Adobe postprocessed F4v video (h.264 + mp3) with this command :

ffmpeg -ss 00:10:00 -t 10 -i c:\video.f4v -vcodec copy -acodec copy -f flv -async 1 videoout.f4v

but the output file duration is inaccurate;in my case 12 second and not 10 second .
If i try to insert an odd number in -ss (for example -ss 00:10:00) i have this issue while an even number the duration is correct.
Can you help me to resolve this issue ?
Is the command above right?
I tried to download last ffmpeg version and compile one version too but with the same results,
Thanks a lot in advance
Best regards

Change History (11)

comment:1 Changed 6 years ago by Selur

might be related to the placing of key frames, h.264 streams are only cut-able at key frames,..

comment:2 Changed 6 years ago by cehoyos

  • Component changed from FFmpeg to undetermined
  • Keywords f4v cutted inaccurate duration removed
  • Priority changed from critical to normal

Please provide a sample and complete, uncut console output.

comment:3 Changed 6 years ago by overclokkato

Hi,
of course :

C:\ffmpeg-r26400-swscale-r32676-mingw32-static\bin>ffmpeg.exe -ss 00:20:13 -t 00
:00:57 -i tagliato.f4v -vcodec copy -acodec copy -f flv -async 1 -y tagliato_out
_test1.f4v
FFmpeg version SVN-r26400, Copyright (c) 2000-2011 the FFmpeg developers

built on Jan 18 2011 04:07:05 with gcc 4.4.2
configuration: --enable-gpl --enable-version3 --enable-libgsm --enable-libvorb

is --enable-libtheora --enable-libspeex --enable-libmp3lame --enable-libopenjpeg

--enable-libschroedinger --enable-libopencore_amrwb --enable-libopencore_amrnb

--enable-libvpx --disable-decoder=libvpx --arch=x86 --enable-runtime-cpudetect -
-enable-libxvid --enable-libx264 --enable-librtmp --extra-libs='-lrtmp -lpolarss
l -lws2_32 -lwinmm' --target-os=mingw32 --enable-avisynth --enable-w32threads --
cross-prefix=i686-mingw32- --cc='ccache i686-mingw32-gcc' --enable-memalign-hack

libavutil 50.36. 0 / 50.36. 0
libavcore 0.16. 1 / 0.16. 1
libavcodec 52.108. 0 / 52.108. 0
libavformat 52.93. 0 / 52.93. 0
libavdevice 52. 2. 3 / 52. 2. 3
libavfilter 1.74. 0 / 1.74. 0
libswscale 0.12. 0 / 0.12. 0

[flv @ 02dc1380] Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 24.00 (24/1)
-> 25.00 (25/1)
Input #0, flv, from 'tagliato.f4v':

Metadata:

duration : 1757
width : 352
height : 288
videodatarate : 244
framerate : 1000
videocodecid : 7
audiodatarate : 31
audiosamplerate : 22050
audiosamplesize : 16
stereo : false
audiocodecid : 2
major_brand : f4v
minor_version : 0
compatible_brands: isommp42m4v
creation_time : 2033-01-13 05:07:24
encoder : Lavf53.12.0
filesize : 63495036

Duration: 00:29:17.01, start: 0.080000, bitrate: 281 kb/s

Stream #0.0: Video: h264, yuv420p, 352x288 [PAR 1:1 DAR 11:9], 249 kb/s, 25

tbr, 1k tbn, 24 tbc

Stream #0.1: Audio: mp3, 22050 Hz, 1 channels, s16, 32 kb/s

Output #0, flv, to 'tagliato_out_test1.f4v':

Metadata:

duration : 1757
width : 352
height : 288
videodatarate : 244
framerate : 1000
videocodecid : 7
audiodatarate : 31
audiosamplerate : 22050
audiosamplesize : 16
stereo : false
audiocodecid : 2
major_brand : f4v
minor_version : 0
compatible_brands: isommp42m4v
creation_time : 2033-01-13 05:07:24
filesize : 63495036
encoder : Lavf52.93.0
Stream #0.0: Video: libx264, yuv420p, 352x288 [PAR 1:1 DAR 11:9], q=2-31, 24

9 kb/s, 1k tbn, 12 tbc

Stream #0.1: Audio: libmp3lame, 22050 Hz, 1 channels, 32 kb/s

Stream mapping:

Stream #0.0 -> #0.0
Stream #0.1 -> #0.1

Press [q] to stop encoding
frame= 716 fps= 0 q=-1.0 Lsize= 2114kB time=56.94 bitrate= 304.2kbits/s

video:1832kB audio:232kB global headers:0kB muxing overhead 2.444589%

C:\ffmpeg-r26400-swscale-r32676-mingw32-static\bin>

And the duration is 59 second instead of 57 second. below the output

C:\ffmpeg-r26400-swscale-r32676-mingw32-static\bin>ffmpeg -i tagliato_out_test1.
f4v
FFmpeg version SVN-r26400, Copyright (c) 2000-2011 the FFmpeg developers

built on Jan 18 2011 04:07:05 with gcc 4.4.2
configuration: --enable-gpl --enable-version3 --enable-libgsm --enable-libvorb

is --enable-libtheora --enable-libspeex --enable-libmp3lame --enable-libopenjpeg

--enable-libschroedinger --enable-libopencore_amrwb --enable-libopencore_amrnb

--enable-libvpx --disable-decoder=libvpx --arch=x86 --enable-runtime-cpudetect -
-enable-libxvid --enable-libx264 --enable-librtmp --extra-libs='-lrtmp -lpolarss
l -lws2_32 -lwinmm' --target-os=mingw32 --enable-avisynth --enable-w32threads --
cross-prefix=i686-mingw32- --cc='ccache i686-mingw32-gcc' --enable-memalign-hack

libavutil 50.36. 0 / 50.36. 0
libavcore 0.16. 1 / 0.16. 1
libavcodec 52.108. 0 / 52.108. 0
libavformat 52.93. 0 / 52.93. 0
libavdevice 52. 2. 3 / 52. 2. 3
libavfilter 1.74. 0 / 1.74. 0
libswscale 0.12. 0 / 0.12. 0

[flv @ 01a6bc50] Estimating duration from bitrate, this may be inaccurate

Seems stream 0 codec frame rate differs from container frame rate: 24.00 (24/1)
-> 25.00 (25/1)
Input #0, flv, from 'tagliato_out_test1.f4v':

Metadata:

stereo : false
duration : 1757
width : 352
height : 288
videodatarate : 244
framerate : 1000
videocodecid : 7
audiodatarate : 31
audiosamplerate : 22050
audiosamplesize : 16
audiocodecid : 2
major_brand : f4v
minor_version : 0
compatible_brands: isommp42m4v
creation_time : 2033-01-13 05:07:24
encoder : Lavf52.93.0
filesize : 2165108

Duration: 00:00:59.76, start: 0.025000, bitrate: 281 kb/s

Stream #0.0: Video: h264, yuv420p, 352x288 [PAR 1:1 DAR 11:9], 249 kb/s, 25

tbr, 1k tbn, 24 tbc

Stream #0.1: Audio: mp3, 22050 Hz, 1 channels, s16, 32 kb/s

At least one output file must be specified

C:\ffmpeg-r26400-swscale-r32676-mingw32-static\bin>

comment:4 Changed 6 years ago by cehoyos

Please provide a sample.

Does it work if you move "-ss 00:20:13" behind "-i tagliato.f4v"?

comment:5 Changed 6 years ago by overclokkato

Yes,i tried but Result don't change,in fact I see that if i use -f flv, the duration is inaccurate so
i searched another solution and i found ffmbc command line that use the same ffmpg syntax.
In the codecs archive i found f4v (ffmbc -codecs |grep f4v , while in ffmpeg this format doesn't exist) and cropped f4v works perfectly with correct duration.
the question is :'why ffmpeg doesn't work?'i think that perheaps depend by libav library.
If you find a solution please tell me.
Thanks a lot for your support.

comment:6 Changed 6 years ago by cehoyos

  • Reproduced by developer set
  • Status changed from new to open
  • Version changed from unspecified to git-master

My suggestion was not helpful, -vcodec copy does not work well with -ss after -i, sorry.

Reproducible with the sample from ticket #578 (and probably many others):

$ ffmpeg -ss 11 -t 9 -i fails_open_cut.f4v -acodec copy -vcodec copy out.mov
ffmpeg version N-37798-gcd1c12b Copyright (c) 2000-2012 the FFmpeg developers
  built on Feb 12 2012 01:52:42 with gcc 4.5.3
  configuration: --cc=/usr/local/gcc-4.5.3/bin/gcc
  libavutil      51. 39.100 / 51. 39.100
  libavcodec     54.  1.100 / 54.  1.100
  libavformat    54.  0.100 / 54.  0.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 62.100 /  2. 62.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  6.100 /  0.  6.100
[h264 @ 0x13d8340] Missing reference picture
[h264 @ 0x13d8340] decode_slice_header error
[h264 @ 0x13d8340] concealing 576 DC, 576 AC, 576 MV errors
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'fails_open_cut.f4v':
  Metadata:
    major_brand     : f4v
    minor_version   : 0
    compatible_brands: isommp42m4v
    creation_time   : 2016-04-05 03:31:16
  Duration: 00:01:44.93, start: 0.000000, bitrate: 609 kb/s
    Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 512x288 [SAR 1:1 DAR 16:9], 501 kb/s, 25 tbr, 1k tbn, 50 tbc
    Metadata:
      creation_time   : 2016-04-05 03:31:16
      handler_name    : MainConcept
    Stream #0:1(eng): Audio: mp3 (.mp3 / 0x33706D2E), 22050 Hz, mono, s16, 48 kb/s
    Metadata:
      creation_time   : 2016-04-05 03:31:16
      handler_name    : MP3 Sound Media Handler
Output #0, mov, to 'out.mov':
  Metadata:
    major_brand     : f4v
    minor_version   : 0
    compatible_brands: isommp42m4v
    creation_time   : 2016-04-05 03:31:16
    encoder         : Lavf54.0.100
    Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), yuv420p, 512x288 [SAR 1:1 DAR 16:9], q=2-31, 501 kb/s, 1k tbn, 1k tbc
    Metadata:
      creation_time   : 2016-04-05 03:31:16
      handler_name    : MainConcept
    Stream #0:1(eng): Audio: mp3 (.mp3 / 0x33706D2E), 22050 Hz, mono, 48 kb/s
    Metadata:
      creation_time   : 2016-04-05 03:31:16
      handler_name    : MP3 Sound Media Handler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=  251 fps=  0 q=-1.0 Lsize=     665kB time=00:00:08.96 bitrate= 607.6kbits/s
video:597kB audio:59kB global headers:0kB muxing overhead 1.382583%
$ ffmpeg -i out.mov -f null -
ffmpeg version N-37798-gcd1c12b Copyright (c) 2000-2012 the FFmpeg developers
  built on Feb 12 2012 01:52:42 with gcc 4.5.3
  configuration: --cc=/usr/local/gcc-4.5.3/bin/gcc
  libavutil      51. 39.100 / 51. 39.100
  libavcodec     54.  1.100 / 54.  1.100
  libavformat    54.  0.100 / 54.  0.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 62.100 /  2. 62.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  6.100 /  0.  6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'out.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 512
    compatible_brands: qt
    creation_time   : 2016-04-05 03:31:16
    encoder         : Lavf54.0.100
  Duration: 00:00:10.06, start: 0.000000, bitrate: 541 kb/s
    Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 512x288 [SAR 1:1 DAR 16:9], 486 kb/s, 25 fps, 25 tbr, 1k tbn, 50 tbc
    Metadata:
      creation_time   : 2016-04-05 03:31:16
      handler_name    :
                        DataHandler
    Stream #0:1(eng): Audio: mp3 (.mp3 / 0x33706D2E), 22050 Hz, mono, s16, 47 kb/s
    Metadata:
      creation_time   : 2016-04-05 03:31:16
      handler_name    :
                        DataHandler
[buffer @ 0x13f5740] w:512 h:288 pixfmt:yuv420p tb:1/1000000 sar:1/1 sws_param:
Output #0, null, to 'pipe:':
  Metadata:
    major_brand     : qt
    minor_version   : 512
    compatible_brands: qt
    creation_time   : 2016-04-05 03:31:16
    encoder         : Lavf54.0.100
    Stream #0:0(eng): Video: rawvideo (I420 / 0x30323449), yuv420p, 512x288 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 90k tbn, 25 tbc
    Metadata:
      creation_time   : 2016-04-05 03:31:16
      handler_name    :
                        DataHandler
    Stream #0:1(eng): Audio: pcm_s16le, 22050 Hz, mono, s16, 352 kb/s
    Metadata:
      creation_time   : 2016-04-05 03:31:16
      handler_name    :
                        DataHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> rawvideo)
  Stream #0:1 -> #0:1 (mp3 -> pcm_s16le)
Press [q] to stop, [?] for help
frame=  251 fps=  0 q=0.0 Lsize=       0kB time=00:00:10.04 bitrate=   0.0kbits/s
video:0kB audio:434kB global headers:0kB muxing overhead -100.000000%

comment:7 Changed 6 years ago by michael

  • Component changed from undetermined to FFmpeg
  • Summary changed from F4v Cutted output video duration incaccurate,Why? to stream copy duration does not match the one specified by -t when -ss is used

comment:8 Changed 3 years ago by LiuYan

I have a similar issue, I don't know if they are same bug:
I want to strip only audio from a video file, so I issued

ffmpeg -report -y -ss '00:05:52.5' -t '30.1' -i '犯罪心理.Criminal.Minds.S11E01.中英字幕.HDTVrip.1024X576.mp4'   -vn   -c:a copy 'CriminalMinds-start.m4a'

The expected duration of output audio file is 30.1 seconds, but the real duration of output file is 06:22.60

size=    6058kB time=00:06:22.60 bitrate= 129.7kbits/s

It looks like the actual duration of output file is ${start position in time lengty}(-ss) + ${duration}(-t)

A workaround (thanks Fyr in #ffmpeg IRC channel) is: put the -t <duration> options after -i <input-file> options. that is: make -t <duration> option an OUTPUT OPTION.

ffmpeg -report -y -ss '00:05:52.5' -i '犯罪心理.Criminal.Minds.S11E01.中英字幕.HDTVrip.1024X576.mp4' -t '30.1'   -vn   -c:a copy 'CriminalMinds-start.m4a'
Last edited 3 years ago by LiuYan (previous) (diff)

comment:9 Changed 2 years ago by c-14

  • Resolution set to fixed
  • Status changed from open to closed

comment:10 Changed 2 years ago by svnpenn

If I use "-ss", "-t" and "-c copy", the duration is reduced, but not the
reported duration. This happens with "-ss -t -i", "-ss -i -t" and "-i -ss -t"

comment:11 Changed 2 years ago by svnpenn

  • Cc svnpenn@gmail.com added
Note: See TracTickets for help on using tickets.