У меня есть вопрос относительно использования опции -to
:
В FFmpeg версии 3 (по крайней мере, 3.2.12, включенной в Debian 9), -to
была опцией только для вывода.В более поздней версии это, кажется, также принимается как опция ввода (как написано здесь https://www.ffmpeg.org/ffmpeg.html#Main-options), но я сталкиваюсь с ограничениями при использовании вместе с -r
. Что я ожидаю, если увеличу частоту кадровявляется то, что вывод будет короче, но это не тот случай, если я не использую весь ввод:
ffmpeg -r 30 -to 10 -i my18fpsFile.avi out.mp4
out.mp4 будет длиться 10 секунд, поэтому вход был прочитанбольше, чем на 10 секунд. Другими словами, даже как опция ввода, она выглядит как опция вывода.
Протестировано с версией ffmpeg N-48102-g7cab5471b2-static https://johnvansickle.com/ffmpeg/ в DebianРастянуть.
Спасибо за ваш совет или подтверждение того, что это не нормально.
Редактировать: Спасибо, Гьян, за ваш ответ и ваши объяснения.
Хотя это похоже на работу, некоторые тесты заставляют меня вспомнить, почему я не был удовлетворен этим решением: указание -r
в качестве опции ввода приводит к увеличению частоты кадров для чтения ввода и гарантирует, что один кадр на входе включене кадр на выходе.Это то, что я хочу.
Использование вашего решения с фильтром на выходе иногда приводит к пропущенным кадрам (чего у меня никогда не было с -r
).Тем не менее, еще некоторое тестирование приводит меня к выводу, что проблема с пропущенными кадрами возникает только с контейнером mkv!Ваше решение прекрасно работает с другими контейнерами (насколько я тестировал), но с mkv (и различными видеокодеками, похоже, ничего не изменилось), я получаю много пропущенных кадров.Использование -r
с mkv не приводит к пропущенным кадрам.
В заключение я не уверен, как обобщить это решение, так как избегание mkv раздражает меня.Но спасибо, и если у кого-то есть еще опыт или идеи, пожалуйста, включите.
Добавление журналов: Обратите внимание на строку: [avi @ 0x6cf6880] parser not found for codec rawvideo, packets or times may be invalid
Я думаю, это является причиной проблемы?Есть ли решение, если файлы являются сырыми avi без индекса?
Хотя предупреждение одно и то же, я не получаю пропущенные кадры, если использую ту же самую команду только с f.mov вместо 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