LLL
LLL

Reputation: 47

Problem using -to, combining -to with framerate change

I have a question regarding the use of the -to option:

In FFmpeg version 3 (at least 3.2.12 included in Debian 9), -to was an output only option. In more recent version it seems to be accepted as an input option as well (as written here https://www.ffmpeg.org/ffmpeg.html#Main-options) but I run into limitations when using in conjunction with -r. What I expect, if I increase the framerate of the input, is that the output will be shorter. But it is not the case if I'm not using the whole input:

ffmpeg -r 30 -to 10 -i my18fpsFile.avi out.mp4

out.mp4 will be 10 seconds long, so the input has been read further than 10 seconds in. In other terms, even as an input option, it seems to behave like an output option.

Tested with ffmpeg version N-48102-g7cab5471b2-static https://johnvansickle.com/ffmpeg/ on Debian Stretch.

Thanks for your advice or confirmation that this is not normal.

Edit: Thank you Gyan for your reply and your explanation.

While it seems to work, some testing makes me remember why I wasn't satisfied with this solution: Stating -r as an input option forces the framerate for the reading of the input and ensures one frame in the input is one frame in the output. This is what I want.

Using yours solution with the filter on the output does cause dropped frames sometimes (which I have never had with -r). However, some more testing draws me to the conclusion that the dropped frames problem happens only with an mkv container! Your solution works fine with other containers (as far as I have tested), but with mkv (and various video codecs, it doesn't seem to make a difference), I get a lot of dropped frames. Using -r with mkv causes no dropped frames.

In conclusion, I'm not sure how to generalize this solution, as avoiding mkv is annoying for me. But thank you, and if anyone has some more experience or ideas, please chime in.

Adding logs: Note the line: [avi @ 0x6cf6880] parser not found for codec rawvideo, packets or times may be invalid I guess it is the cause of the problem? Is there a solution if the files are raw avi with no index?

Although the warning is the same, I don't get dropped frames if I use the exact same command only with f.mov instead of mkv.

ffmpeg -v 40 -to 10 -i f.avi -vf setpts=N/30/TB -r 30 f.mkv
ffmpeg version N-48102-g7cab5471b2-static https://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --disable-ffplay --disable-indev=sndio --disable-outdev=sndio --cc=gcc-6 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-gmp --enable-gray --enable-libaom --enable-libfribidi --enable-libass --enable-libvmaf --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librubberband --enable-libsoxr --enable-libspeex --enable-libvorbis --enable-libopus --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libdav1d --enable-libxvid --enable-libzvbi --enable-libzimg
  libavutil      56. 26.100 / 56. 26.100
  libavcodec     58. 46.100 / 58. 46.100
  libavformat    58. 26.100 / 58. 26.100
  libavdevice    58.  6.101 / 58.  6.101
  libavfilter     7. 48.100 /  7. 48.100
  libswscale      5.  4.100 /  5.  4.100
  libswresample   3.  4.100 /  3.  4.100
  libpostproc    55.  4.100 / 55.  4.100
[avi @ 0x6cf6880] parser not found for codec rawvideo, packets or times may be invalid.
    Last message repeated 1 times
Input #0, avi, from 'f.avi':
  Duration: 00:01:11.62, start: 0.000000, bitrate: 846067 kb/s
    Stream #0:0: Video: rawvideo, 1 reference frame, bgr24, 1632x1200, 846638 kb/s, 18 fps, 18 tbr, 18 tbn, 18 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[graph 0 input from stream 0:0 @ 0x6d0fc00] w:1632 h:1200 pixfmt:bgr24 tb:1000/17999 fr:17999/1000 sar:0/1 sws_param:flags=2
[auto_scaler_0 @ 0x6d105c0] w:iw h:ih flags:'bicubic' interl:0
[format @ 0x6cfe5c0] auto-inserting filter 'auto_scaler_0' between the filter 'Parsed_setpts_0' and the filter 'format'
[trim_in_0_0 @ 0x6d109c0] TB:0.055559 FRAME_RATE:17.999000 SAMPLE_RATE:nan
[auto_scaler_0 @ 0x6d105c0] w:1632 h:1200 fmt:bgr24 sar:0/1 -> w:1632 h:1200 fmt:yuv444p sar:0/1 flags:0x4
[libx264 @ 0x6cfb2c0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
[libx264 @ 0x6cfb2c0] profile High 4:4:4 Predictive, level 4.0, 4:4:4, 8-bit
[libx264 @ 0x6cfb2c0] 264 - core 157 r2935 545de2f - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x1:0x111 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=4 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to 'f.mkv':
  Metadata:
    encoder         : Lavf58.26.100
    Stream #0:0: Video: h264 (libx264), 1 reference frame (H264 / 0x34363248), yuv444p, 1632x1200, q=-1--1, 30 fps, 1k tbn, 30 tbc
    Metadata:
      encoder         : Lavc58.46.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
Past duration 0.666481 too large
*** dropping frame 5 from stream 0 at ts 3
Past duration 0.666191 too large
*** dropping frame 9 from stream 0 at ts 8
Past duration 0.665916 too large
*** dropping frame 13 from stream 0 at ts 13
Past duration 0.665642 too large
*** dropping frame 17 from stream 0 at ts 18
Past duration 0.665367 too large
*** dropping frame 21 from stream 0 at ts 23
Past duration 0.665092 too large
*** dropping frame 25 from stream 0 at ts 28
Past duration 0.664803 too large
*** dropping frame 29 from stream 0 at ts 33me=00:00:00.00 bitrate=N/A dup=0 drop=6 speed=   0x    
Past duration 0.664528 too large
*** dropping frame 33 from stream 0 at ts 38
Past duration 0.664253 too large
*** dropping frame 37 from stream 0 at ts 43
Past duration 0.663979 too large
*** dropping frame 41 from stream 0 at ts 48
Past duration 0.663689 too large
*** dropping frame 45 from stream 0 at ts 53
Past duration 0.663414 too large      1kB time=00:00:00.00 bitrate=N/A dup=0 drop=11 speed=   0x    
*** dropping frame 49 from stream 0 at ts 58
Past duration 0.663139 too large
*** dropping frame 53 from stream 0 at ts 63ime=00:00:00.00 bitrate=5768.0kbits/s dup=0 drop=12 speed=0.00049x    
Past duration 0.662865 too large
*** dropping frame 57 from stream 0 at ts 68ime=00:00:00.13 bitrate=  43.0kbits/s dup=0 drop=13 speed=0.0514x    
Past duration 0.662590 too large
*** dropping frame 61 from stream 0 at ts 73ime=00:00:00.30 bitrate=  19.2kbits/s dup=0 drop=14 speed=0.094x    
Past duration 0.662300 too large
*** dropping frame 65 from stream 0 at ts 78ime=00:00:00.46 bitrate=  12.3kbits/s dup=0 drop=15 speed=0.125x    
Past duration 0.662025 too large       1kB time=00:00:00.60 bitrate=   9.6kbits/s dup=0 drop=16 speed=0.142x    
*** dropping frame 69 from stream 0 at ts 83
Past duration 0.661751 too large       1kB time=00:00:00.76 bitrate=   7.5kbits/s dup=0 drop=17 speed=0.162x    
*** dropping frame 73 from stream 0 at ts 88
Past duration 0.661476 too large       1kB time=00:00:00.93 bitrate=   6.2kbits/s dup=0 drop=18 speed=0.175x    
*** dropping frame 77 from stream 0 at ts 93
Past duration 0.661201 too large
*** dropping frame 81 from stream 0 at ts 98ime=00:00:01.13 bitrate=8036.9kbits/s dup=0 drop=19 speed=0.193x    
Past duration 0.660912 too large
*** dropping frame 85 from stream 0 at ts 103me=00:00:01.30 bitrate=7005.3kbits/s dup=0 drop=20 speed=0.204x    
Past duration 0.660637 too large
*** dropping frame 89 from stream 0 at ts 108me=00:00:01.46 bitrate=6208.3kbits/s dup=0 drop=21 speed=0.21x    
Past duration 0.660362 too large
*** dropping frame 93 from stream 0 at ts 113
Past duration 0.660088 too large    1113kB time=00:00:01.76 bitrate=5154.9kbits/s dup=0 drop=23 speed=0.235x    
*** dropping frame 97 from stream 0 at ts 118
Past duration 0.659813 too large    1113kB time=00:00:01.83 bitrate=4969.4kbits/s dup=0 drop=24 speed=0.229x    
*** dropping frame 101 from stream 0 at ts 123
Past duration 0.659523 too large
*** dropping frame 105 from stream 0 at ts 128e=00:00:02.13 bitrate=4270.8kbits/s dup=0 drop=25 speed=0.235x    
Past duration 0.659248 too large
*** dropping frame 109 from stream 0 at ts 133
Past duration 0.658974 too large    2399kB time=00:00:02.43 bitrate=8075.2kbits/s dup=0 drop=27 speed=0.252x    
*** dropping frame 113 from stream 0 at ts 138
Past duration 0.658699 too large
*** dropping frame 117 from stream 0 at ts 143e=00:00:02.63 bitrate=7462.1kbits/s dup=0 drop=28 speed=0.25x    
Past duration 0.658424 too large
*** dropping frame 121 from stream 0 at ts 148
Past duration 0.658134 too large    2399kB time=00:00:02.93 bitrate=6699.1kbits/s dup=0 drop=30 speed=0.266x    
*** dropping frame 125 from stream 0 at ts 153
Past duration 0.657860 too large
*** dropping frame 129 from stream 0 at ts 158e=00:00:03.13 bitrate=6271.6kbits/s dup=0 drop=31 speed=0.265x    
Past duration 0.657585 too large
*** dropping frame 133 from stream 0 at ts 163
Past duration 0.657310 too large    2399kB time=00:00:03.33 bitrate=5895.4kbits/s dup=0 drop=33 speed=0.271x    
*** dropping frame 137 from stream 0 at ts 168e=00:00:03.46 bitrate=5667.6kbits/s dup=0 drop=33 speed=0.269x    
Past duration 0.657036 too large
*** dropping frame 141 from stream 0 at ts 173
Past duration 0.656746 too large
No more output streams to write to, finishing.e=00:00:03.80 bitrate=5171.0kbits/s dup=0 drop=35 speed=0.279x    
frame=  145 fps=8.0 q=-1.0 Lsize=    4590kB time=00:00:05.90 bitrate=6372.0kbits/s dup=0 drop=35 speed=0.326x    
video:4588kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.042357%
Input file #0 (f.avi):
  Input stream #0:0 (video): 181 packets read (1063411200 bytes); 181 frames decoded; 
  Total: 181 packets (1063411200 bytes) demuxed
Output file #0 (f.mkv):
  Output stream #0:0 (video): 145 frames encoded; 145 packets muxed (4698140 bytes); 
  Total: 145 packets (4698140 bytes) muxed
[AVIOContext @ 0x6cfe940] Statistics: 20 seeks, 33 writeouts
[libx264 @ 0x6cfb2c0] frame I:4     Avg QP:25.17  size: 84331
[libx264 @ 0x6cfb2c0] frame P:40    Avg QP:26.64  size: 47807
[libx264 @ 0x6cfb2c0] frame B:101   Avg QP:27.85  size: 24236
[libx264 @ 0x6cfb2c0] consecutive B-frames:  4.1%  8.3%  2.1% 85.5%
[libx264 @ 0x6cfb2c0] mb I  I16..4: 29.5%  0.0% 70.5%
[libx264 @ 0x6cfb2c0] mb P  I16..4: 12.0%  0.0% 20.1%  P16..4: 38.5% 16.5%  4.5%  0.0%  0.0%    skip: 8.4%
[libx264 @ 0x6cfb2c0] mb B  I16..4:  1.8%  0.0%  2.7%  B16..8: 46.5% 11.4%  1.6%  direct: 7.6%  skip:28.4%  L0:40.6% L1:55.6% BI: 3.8%
[libx264 @ 0x6cfb2c0] coded y,u,v intra: 55.9% 11.8% 19.2% inter: 22.1% 1.1% 2.6%
[libx264 @ 0x6cfb2c0] i16 v,h,dc,p: 30% 15%  7% 48%
[libx264 @ 0x6cfb2c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 26% 16% 18%  7%  8%  8%  7%  7%  3%
[libx264 @ 0x6cfb2c0] Weighted P-Frames: Y:17.5% UV:10.0%
[libx264 @ 0x6cfb2c0] ref P L0: 54.3% 15.8% 20.0%  8.8%  1.2%
[libx264 @ 0x6cfb2c0] ref B L0: 87.9%  9.3%  2.8%
[libx264 @ 0x6cfb2c0] ref B L1: 95.9%  4.1%
[libx264 @ 0x6cfb2c0] kb/s:6263.27
[AVIOContext @ 0x6cff580] Statistics: 1063666996 bytes read, 4 seeks

Upvotes: 0

Views: 664

Answers (1)

Gyan
Gyan

Reputation: 93068

Use

ffmpeg -to 10 -i my18fpsFile.avi -vf settb=AVTB,setpts=N/30/TB -r 30 out.mp4

-t and -to as input options act upon the retimed input, so you need to delay the retiming action.

Upvotes: 1

Related Questions