[FFmpeg-user] ffmpeg architecture question
Mark Filipak
markfilipak.windows+ffmpeg at gmail.com
Fri Apr 17 13:47:15 EEST 2020
On 04/17/2020 03:56 AM, Michael Koch wrote:
> Am 17.04.2020 um 09:44 schrieb Mark Filipak:
>> On 04/17/2020 02:41 AM, Michael Koch wrote:
>>> Am 17.04.2020 um 08:02 schrieb Mark Filipak:
>>>> Thanks to pdr0 -at- shaw.ca, My quest for the (nearly perfect) p24-to-p60 transcode has concluded.
>>>>
>>>> But remaining is an ffmpeg behavior that seems (to me) to be key to understanding ffmpeg
>>>> architecture, to wit: The characteristics of frame traversal through a filter chain.
>>>>
>>>> From a prior topic:
>>>> -----
>>>> Filter graph:
>>>>
>>>> split[A] select='not(eq(mod(n+1\,5)\,3))' [C]interleave
>>>> [B]split[D]select='eq(mod(n+1\,5)\,2)'[F]blend[D]
>>>> [E]select='eq(mod(n+1\,5)\,3)'[G]
>>>>
>>>> What I expected/hoped:
>>>>
>>>> split[A] 0 1 _ 3 4 [C]interleave 0 1 B 3 4 //5 frames
>>>> [B]split[D] _ 1 _ _ _ [F]blend[D] |
>>>> [E] _ _ 2 _ _ [G] blend of 1+2
>>>>
>>>> What appears to be happening:
>>>>
>>>> split[A] 0 1 _ 3 4 [C]interleave 0 1 _ 3 4 //4 frames
>>>> [B]split[D] _ _ _ _ _ [F]blend[D]
>>>> [E] _ _ 2 _ _ [G]
>>>>
>>>> The behavior is as though because frame 1 (see Note) can take the [A][C] path, it does take it &
>>>> that leaves nothing left to also take the [B][D][F] path, so blend never outputs.
>>>
>>> Only an untested idea, what happens when you change the order of the inputs of the blend filter,
>>> first [G] and then [F]?
>>
>> This would be an important topic for someone writing a book, eh?
>>
>> I assume you mean this, Michael:
>>
>> split[A] select='not(eq(mod(n+1\,5)\,3))' [C]interleave
>> [B]split[D]select='eq(mod(n+1\,5)\,2)'[F]blend[D]
>> [E]select='eq(mod(n+1\,5)\,3)'[G]
>>
>> split[A] 0 1 _ 3 4 [C]interleave 0 1 _ 3 4 //4 frames
>> [B]split[D] _ _ 2 _ _ [F]blend[D]
>> [E] _ _ _ _ _ [G]
>>
>
> no, I meant replace [F][G]blend[D] by [G][F]blend[D] and leave everything else as it is.
>
> Michael
I found my old command lines in a log file.
=====
: Run original filter chain
SET FFREPORT=file=FOO-HG.LOG:level=32
ffmpeg -i %1 -filter_complex
"telecine=pattern=46,split[A][B],[A]select='not(eq(mod(n+1\,5)\,3))'[C],[B]split[E][F],[E]select='eq(mod(n+1\,5)\,2)'[G],[F]select='eq(mod(n+1\,5)\,3)'[H],[H][G]blend[D],[C][D]interleave"
-map 0 -c:v libx264 -crf 20 -an -sn "C:\AVOut\FOO-HG.MKV"
: Run reversed 'blend' inputs
SET FFREPORT=file=FOO-GH.LOG:level=32
ffmpeg -i %1 -filter_complex
"telecine=pattern=46,split[A][B],[A]select='not(eq(mod(n+1\,5)\,3))'[C],[B]split[E][F],[E]select='eq(mod(n+1\,5)\,2)'[G],[F]select='eq(mod(n+1\,5)\,3)'[H],[G][H]blend[D],[C][D]interleave"
-map 0 -c:v libx264 -crf 20 -an -sn "C:\AVOut\FOO-GH.MKV"
=====
There is a difference. Here are the logs
ffmpeg started on 2020-04-17 at 06:36:11
Report written to "FOO-HG.LOG"
Log level: 32
Command line:
ffmpeg -i "M:\\Test Videos\\23.976p.mkv" -filter_complex
"telecine=pattern=46,split[A][B],[A]select='not(eq(mod(n+1\\,5)\\,3))'[C],[B]split[E][F],[E]select='eq(mod(n+1\\,5)\\,2)'[G],[F]select='eq(mod(n+1\\,5)\\,3)'[H],[H][G]blend[D],[C][D]interleave"
-map 0 -c:v libx264 -crf 20 -an -sn "C:\\AVOut\\FOO-HG.MKV"
ffmpeg version git-2020-04-03-52523b6 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9.3.1 (GCC) 20200328
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-libsrt
--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-libvmaf --enable-libvorbis --enable-libvo-amrwbenc
--enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx
--enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec
--enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
libavutil 56. 42.102 / 56. 42.102
libavcodec 58. 77.101 / 58. 77.101
libavformat 58. 42.100 / 58. 42.100
libavdevice 58. 9.103 / 58. 9.103
libavfilter 7. 77.101 / 7. 77.101
libswscale 5. 6.101 / 5. 6.101
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
Input #0, matroska,webm, from 'M:\Test Videos\23.976p.mkv':
Metadata:
encoder : libebml v1.3.9 + libmatroska v1.5.2
creation_time : 2020-04-04T03:44:24.000000Z
Duration: 00:00:10.01, start: 0.000000, bitrate: 544 kb/s
Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9],
23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Metadata:
BPS-eng : 538378
DURATION-eng : 00:00:10.010000000
NUMBER_OF_FRAMES-eng: 240
NUMBER_OF_BYTES-eng: 673646
_STATISTICS_WRITING_APP-eng: mkvmerge v41.0.0 ('Smarra') 64-bit
_STATISTICS_WRITING_DATE_UTC-eng: 2020-04-04 03:44:24
_STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
[Parsed_telecine_0 @ 000001c0aff784c0] Telecine pattern 46 yields up to 3 frames per frame, pts
advance factor: 4/10
Stream mapping:
Stream #0:0 (h264) -> telecine
interleave -> Stream #0:0 (libx264)
Press [q] to stop, [?] for help
[Parsed_telecine_0 @ 000001c0afb7bec0] Telecine pattern 46 yields up to 3 frames per frame, pts
advance factor: 4/10
[libx264 @ 000001c0af952d40] using SAR=1/1
[libx264 @ 000001c0af952d40] MB rate (8160000000) > level limit (16711680)
[libx264 @ 000001c0af952d40] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 000001c0af952d40] profile High, level 6.2, 4:2:0, 8-bit
[libx264 @ 000001c0af952d40] 264 - core 159 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 -
http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex
subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0
deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 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=20.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to 'C:\AVOut\FOO-HG.MKV':
Metadata:
encoder : Lavf58.42.100
Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9],
q=-1--1, 1k tbn, 1000k tbc (default)
Metadata:
encoder : Lavc58.77.101 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame= 36 fps=0.0 q=0.0 size= 1kB time=00:00:00.00 bitrate=N/A speed= 0x
frame= 94 fps= 93 q=28.0 size= 1kB time=00:00:00.58 bitrate= 8.4kbits/s speed=0.58x
frame= 177 fps=117 q=28.0 size= 1kB time=00:00:01.97 bitrate= 2.5kbits/s speed=1.31x
frame= 260 fps=129 q=28.0 size= 1kB time=00:00:03.35 bitrate= 1.5kbits/s speed=1.66x
frame= 328 fps=130 q=28.0 size= 180kB time=00:00:04.48 bitrate= 327.6kbits/s speed=1.78x
frame= 408 fps=135 q=28.0 size= 180kB time=00:00:05.82 bitrate= 252.6kbits/s speed=1.93x
frame= 485 fps=138 q=28.0 size= 180kB time=00:00:07.10 bitrate= 206.9kbits/s speed=2.02x
frame= 568 fps=141 q=28.0 size= 256kB time=00:00:08.49 bitrate= 246.9kbits/s speed=2.11x
frame= 594 fps=131 q=28.0 size= 256kB time=00:00:08.92 bitrate= 234.9kbits/s speed=1.97x
frame= 594 fps= 36 q=-1.0 Lsize= 442kB time=00:00:09.86 bitrate= 366.8kbits/s speed=0.595x
video:437kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.073745%
[libx264 @ 000001c0af952d40] frame I:3 Avg QP: 6.19 size: 11408
[libx264 @ 000001c0af952d40] frame P:186 Avg QP:19.13 size: 1739
[libx264 @ 000001c0af952d40] frame B:405 Avg QP:16.99 size: 220
[libx264 @ 000001c0af952d40] consecutive B-frames: 0.7% 16.2% 27.3% 55.9%
[libx264 @ 000001c0af952d40] mb I I16..4: 96.1% 0.9% 2.9%
[libx264 @ 000001c0af952d40] mb P I16..4: 0.6% 0.4% 0.2% P16..4: 2.2% 0.7% 0.2% 0.0% 0.0%
skip:95.7%
[libx264 @ 000001c0af952d40] mb B I16..4: 0.1% 0.0% 0.0% B16..8: 1.4% 0.1% 0.0% direct:
0.0% skip:98.5% L0:42.8% L1:55.4% BI: 1.8%
[libx264 @ 000001c0af952d40] 8x8 transform intra:14.6% inter:40.6%
[libx264 @ 000001c0af952d40] coded y,uvDC,uvAC intra: 3.9% 14.9% 12.4% inter: 0.1% 0.4% 0.2%
[libx264 @ 000001c0af952d40] i16 v,h,dc,p: 89% 10% 1% 0%
[libx264 @ 000001c0af952d40] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 6% 4% 90% 0% 0% 0% 0% 0% 0%
[libx264 @ 000001c0af952d40] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 44% 25% 24% 2% 1% 2% 0% 2% 0%
[libx264 @ 000001c0af952d40] i8c dc,h,v,p: 67% 13% 21% 0%
[libx264 @ 000001c0af952d40] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 000001c0af952d40] ref P L0: 75.3% 2.0% 12.2% 10.4%
[libx264 @ 000001c0af952d40] ref B L0: 79.5% 13.9% 6.6%
[libx264 @ 000001c0af952d40] ref B L1: 98.4% 1.6%
[libx264 @ 000001c0af952d40] kb/s:355.76
ffmpeg started on 2020-04-17 at 06:35:28
Report written to "FOO-GH.LOG"
Log level: 32
Command line:
ffmpeg -i "M:\\Test Videos\\23.976p.mkv" -filter_complex
"telecine=pattern=46,split[A][B],[A]select='not(eq(mod(n+1\\,5)\\,3))'[C],[B]split[E][F],[E]select='eq(mod(n+1\\,5)\\,2)'[G],[F]select='eq(mod(n+1\\,5)\\,3)'[H],[G][H]blend[D],[C][D]interleave"
-map 0 -c:v libx264 -crf 20 -an -sn "C:\\AVOut\\FOO-GH.MKV"
ffmpeg version git-2020-04-03-52523b6 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 9.3.1 (GCC) 20200328
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-libsrt
--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-libvmaf --enable-libvorbis --enable-libvo-amrwbenc
--enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx
--enable-ffnvcodec --enable-cuda-llvm --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec
--enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
libavutil 56. 42.102 / 56. 42.102
libavcodec 58. 77.101 / 58. 77.101
libavformat 58. 42.100 / 58. 42.100
libavdevice 58. 9.103 / 58. 9.103
libavfilter 7. 77.101 / 7. 77.101
libswscale 5. 6.101 / 5. 6.101
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
Input #0, matroska,webm, from 'M:\Test Videos\23.976p.mkv':
Metadata:
encoder : libebml v1.3.9 + libmatroska v1.5.2
creation_time : 2020-04-04T03:44:24.000000Z
Duration: 00:00:10.01, start: 0.000000, bitrate: 544 kb/s
Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9],
23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc (default)
Metadata:
BPS-eng : 538378
DURATION-eng : 00:00:10.010000000
NUMBER_OF_FRAMES-eng: 240
NUMBER_OF_BYTES-eng: 673646
_STATISTICS_WRITING_APP-eng: mkvmerge v41.0.0 ('Smarra') 64-bit
_STATISTICS_WRITING_DATE_UTC-eng: 2020-04-04 03:44:24
_STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
[Parsed_telecine_0 @ 000001aa1b2384c0] Telecine pattern 46 yields up to 3 frames per frame, pts
advance factor: 4/10
Stream mapping:
Stream #0:0 (h264) -> telecine
interleave -> Stream #0:0 (libx264)
Press [q] to stop, [?] for help
[Parsed_telecine_0 @ 000001aa18f0e700] Telecine pattern 46 yields up to 3 frames per frame, pts
advance factor: 4/10
[libx264 @ 000001aa18ee2d40] using SAR=1/1
[libx264 @ 000001aa18ee2d40] MB rate (8160000000) > level limit (16711680)
[libx264 @ 000001aa18ee2d40] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 000001aa18ee2d40] profile High, level 6.2, 4:2:0, 8-bit
[libx264 @ 000001aa18ee2d40] 264 - core 159 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 -
http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex
subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0
deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 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=20.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, matroska, to 'C:\AVOut\FOO-GH.MKV':
Metadata:
encoder : Lavf58.42.100
Stream #0:0: Video: h264 (libx264) (H264 / 0x34363248), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9],
q=-1--1, 1k tbn, 1000k tbc (default)
Metadata:
encoder : Lavc58.77.101 libx264
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame= 46 fps=0.0 q=0.0 size= 1kB time=00:00:00.00 bitrate=N/A dup=0 drop=11 speed= 0x
frame= 116 fps=111 q=28.0 size= 1kB time=00:00:01.18 bitrate= 4.1kbits/s dup=0 drop=29
speed=1.14x
frame= 195 fps=126 q=26.0 size= 1kB time=00:00:02.83 bitrate= 1.7kbits/s dup=0 drop=49
speed=1.83x
frame= 262 fps=128 q=28.0 size= 1kB time=00:00:04.23 bitrate= 1.2kbits/s dup=0 drop=65
speed=2.07x
frame= 333 fps=131 q=27.0 size= 211kB time=00:00:05.72 bitrate= 302.5kbits/s dup=0 drop=83
speed=2.25x
frame= 408 fps=133 q=28.0 size= 211kB time=00:00:07.27 bitrate= 238.0kbits/s dup=0 drop=102
speed=2.38x
frame= 479 fps=135 q=27.0 size= 211kB time=00:00:08.76 bitrate= 197.6kbits/s dup=0 drop=120
speed=2.46x
frame= 479 fps=118 q=27.0 size= 211kB time=00:00:08.76 bitrate= 197.6kbits/s dup=0 drop=120
speed=2.15x
video:401kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.988793%
[libx264 @ 000001aa18ee2d40] frame I:2 Avg QP: 8.81 size: 10038
[libx264 @ 000001aa18ee2d40] frame P:178 Avg QP:18.73 size: 1750
[libx264 @ 000001aa18ee2d40] frame B:299 Avg QP:18.46 size: 261
[libx264 @ 000001aa18ee2d40] consecutive B-frames: 0.4% 48.4% 1.9% 49.3%
[libx264 @ 000001aa18ee2d40] mb I I16..4: 79.3% 18.2% 2.5%
[libx264 @ 000001aa18ee2d40] mb P I16..4: 0.7% 0.4% 0.2% P16..4: 2.3% 0.7% 0.2% 0.0% 0.0%
skip:95.7%
[libx264 @ 000001aa18ee2d40] mb B I16..4: 0.1% 0.0% 0.0% B16..8: 1.6% 0.1% 0.0% direct:
0.0% skip:98.2% L0:26.8% L1:71.3% BI: 2.0%
[libx264 @ 000001aa18ee2d40] 8x8 transform intra:24.7% inter:40.6%
[libx264 @ 000001aa18ee2d40] coded y,uvDC,uvAC intra: 4.3% 16.3% 13.6% inter: 0.1% 0.4% 0.3%
[libx264 @ 000001aa18ee2d40] i16 v,h,dc,p: 85% 14% 1% 0%
[libx264 @ 000001aa18ee2d40] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 34% 3% 63% 0% 0% 0% 0% 0% 0%
[libx264 @ 000001aa18ee2d40] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 46% 25% 24% 1% 1% 1% 0% 1% 0%
[libx264 @ 000001aa18ee2d40] i8c dc,h,v,p: 61% 14% 24% 0%
[libx264 @ 000001aa18ee2d40] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 000001aa18ee2d40] ref P L0: 69.3% 1.7% 16.8% 12.1%
[libx264 @ 000001aa18ee2d40] ref B L0: 69.3% 13.6% 17.1%
[libx264 @ 000001aa18ee2d40] ref B L1: 98.4% 1.6%
[libx264 @ 000001aa18ee2d40] kb/s:328.46
More information about the ffmpeg-user
mailing list