On 5/20/25 10:32 PM, Def Etienne wrote:
>> On 19 May 2025, at 03:01, George Welch via ffmpeg-user 
>> <ffmpeg-user@ffmpeg.org> wrote:
>>
>> Howdy ffmpeg users.
>>
>> I have found a behavior that seems strange to me.  The following two 
>> commands:
>>
>> $ ffmpeg -i input.mkv -an -c:v libx265 -preset slow -crf 21 output1.mkv
>>
>> and
>>
>> $ ffmpeg -i input.mkv -an -c:v libx265 -preset slow -crf 21 -vf 
>> "setpts=PTS-STARTPTS" output2.mkv
>>
>> produce output files that are very different.  The input file is 1080p h264 
>> recorded at 15Mbps.  The output file in the first case is about 1.66 times 
>> larger than the second output file.  The video channel in the first case 
>> averages 7342 kbps while the video channel in the second case averages 4423 
>> kbps.
>>
>> Unsurprisingly, dumping frames to png files and using imagemagick to compare 
>> them shows that the first output file has much higher fidelity to the 
>> original than the second.
>>
>> This is with ffmpeg 7.1.1 installed via homebrew on a fairly modern macbook 
>> pro.  Checking on a linux machine with a fairly old intel xeon processor 
>> (all I have access to) also with ffmpeg installed via homebrew produces 
>> nearly identical files.
>>
>> I wonder if this a bug in the mac version of ffmpeg?  I don't see why the 
>> setpts filter should produce a much lower bitrate, nor why it would be 
>> different under linux.
> The complete uncut console output in each case would have been a good 
> starting point to explain the differences.
>
> Def


Happy to!

For the first case, with no filter:
george@austin:test2$ ffmpeg -i input.mkv -an -c:v libx265 -preset slow 
-crf 21 output1.mkv
ffmpeg version 7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
   built with Apple clang version 15.0.0 (clang-1500.3.9.4)
   configuration: 
--prefix=/opt/homebrew/Cellar/ffmpeg/7.1.1-with-options_1 
--enable-shared --cc=clang --host-cflags= --host-ldflags= --enable-gpl 
--enable-libaom --enable-libdav1d --enable-libharfbuzz 
--enable-libmp3lame --enable-libopus --enable-libsnappy 
--enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 
--enable-libx265 --enable-libfontconfig --enable-libfreetype 
--enable-frei0r --enable-libass --enable-demuxer=dash --enable-neon 
--enable-opencl --enable-audiotoolbox --enable-videotoolbox 
--disable-htmlpages --enable-libfdk-aac --enable-nonfree
   libavutil      59. 39.100 / 59. 39.100
   libavcodec     61. 19.101 / 61. 19.101
   libavformat    61.  7.100 / 61.  7.100
   libavdevice    61.  3.100 / 61.  3.100
   libavfilter    10.  4.100 / 10.  4.100
   libswscale      8.  3.100 /  8.  3.100
   libswresample   5.  3.100 /  5.  3.100
   libpostproc    58.  3.100 / 58.  3.100
Input #0, matroska,webm, from 'input.mkv':
   Metadata:
     ENCODER         : Lavf61.1.100
   Duration: 00:00:10.00, start: 0.000000, bitrate: 15814 kb/s
   Stream #0:0: Video: h264 (Main), yuv420p(tv, bt709, progressive), 
1920x1080, 30 fps, 30 tbr, 1k tbn
       Metadata:
         DURATION        : 00:00:10.000000000
   Stream #0:1: Audio: flac, 48000 Hz, stereo, s16
       Metadata:
         title           : Track1
         DURATION        : 00:00:09.984000000
Stream mapping:
   Stream #0:0 -> #0:0 (h264 (native) -> hevc (libx265))
Press [q] to stop, [?] for help
x265 [info]: HEVC encoder version 4.1+1-1d117be
x265 [info]: build info [Mac OS X][clang 16.0.0][64 bit] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: NEON Neon_DotProd Neon_I8MM
x265 [info]: Main profile, Level-4 (Main tier)
x265 [info]: Thread pool created using 12 threads
x265 [info]: Slices                              : 1
x265 [info]: frame threads / pool features       : 3 / wpp(17 rows)
x265 [info]: Coding QT: max CU size, min CU size : 64 / 8
x265 [info]: Residual QT: max TU size, max depth : 32 / 1 inter / 1 intra
x265 [info]: ME / range / subpel / merge         : star / 57 / 3 / 3
x265 [info]: Keyframe min / max / scenecut / bias  : 25 / 250 / 40 / 5.00
x265 [info]: Lookahead / bframes / badapt        : 25 / 4 / 2
x265 [info]: b-pyramid / weightp / weightb       : 1 / 1 / 0
x265 [info]: References / ref-limit  cu / depth  : 4 / on / on
x265 [info]: AQ: mode / str / qg-size / cu-tree  : 2 / 1.0 / 32 / 1
x265 [info]: Rate Control / qCompress            : CRF-21.0 / 0.60
x265 [info]: tools: rect limit-modes rd=4 psy-rd=2.00 rdoq=2 psy-rdoq=1.00
x265 [info]: tools: rskip mode=1 signhide tmvp strong-intra-smoothing 
lslices=4
x265 [info]: tools: deblock sao
Output #0, matroska, to 'output1.mkv':
   Metadata:
     encoder         : Lavf61.7.100
   Stream #0:0: Video: hevc, yuv420p(tv, bt709, progressive), 1920x1080, 
q=2-31, 30 fps, 1k tbn
       Metadata:
         DURATION        : 00:00:10.000000000
         encoder         : Lavc61.19.101 libx265
       Side data:
         cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/matroska @ 0x600001d40000] video:8958KiB audio:0KiB subtitle:0KiB 
other streams:0KiB global headers:2KiB muxing overhead: 0.058398%
frame=  300 fps= 17 q=29.2 Lsize=    8963KiB time=00:00:09.93 
bitrate=7392.2kbits/s speed=0.562x
x265 [info]: frame I:      2, Avg QP:20.59  kb/s: 44433.72
x265 [info]: frame P:     70, Avg QP:22.11  kb/s: 20672.38
x265 [info]: frame B:    228, Avg QP:28.77  kb/s: 2918.24
x265 [info]: Weighted P-Frames: Y:2.9% UV:2.9%

encoded 300 frames in 17.65s (17.00 fps), 7337.64 kb/s, Avg QP:27.16

For the second case, with the setpts filter:
george@austin:test2$ ffmpeg -i input.mkv -an -c:v libx265 -preset slow 
-crf 21 -vf "setpts=PTS-STARTPTS" output2.mkv
ffmpeg version 7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
   built with Apple clang version 15.0.0 (clang-1500.3.9.4)
   configuration: 
--prefix=/opt/homebrew/Cellar/ffmpeg/7.1.1-with-options_1 
--enable-shared --cc=clang --host-cflags= --host-ldflags= --enable-gpl 
--enable-libaom --enable-libdav1d --enable-libharfbuzz 
--enable-libmp3lame --enable-libopus --enable-libsnappy 
--enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 
--enable-libx265 --enable-libfontconfig --enable-libfreetype 
--enable-frei0r --enable-libass --enable-demuxer=dash --enable-neon 
--enable-opencl --enable-audiotoolbox --enable-videotoolbox 
--disable-htmlpages --enable-libfdk-aac --enable-nonfree
   libavutil      59. 39.100 / 59. 39.100
   libavcodec     61. 19.101 / 61. 19.101
   libavformat    61.  7.100 / 61.  7.100
   libavdevice    61.  3.100 / 61.  3.100
   libavfilter    10.  4.100 / 10.  4.100
   libswscale      8.  3.100 /  8.  3.100
   libswresample   5.  3.100 /  5.  3.100
   libpostproc    58.  3.100 / 58.  3.100
Input #0, matroska,webm, from 'input.mkv':
   Metadata:
     ENCODER         : Lavf61.1.100
   Duration: 00:00:10.00, start: 0.000000, bitrate: 15814 kb/s
   Stream #0:0: Video: h264 (Main), yuv420p(tv, bt709, progressive), 
1920x1080, 30 fps, 30 tbr, 1k tbn
       Metadata:
         DURATION        : 00:00:10.000000000
   Stream #0:1: Audio: flac, 48000 Hz, stereo, s16
       Metadata:
         title           : Track1
         DURATION        : 00:00:09.984000000
Stream mapping:
   Stream #0:0 -> #0:0 (h264 (native) -> hevc (libx265))
Press [q] to stop, [?] for help
x265 [info]: HEVC encoder version 4.1+1-1d117be
x265 [info]: build info [Mac OS X][clang 16.0.0][64 bit] 8bit+10bit+12bit
x265 [info]: using cpu capabilities: NEON Neon_DotProd Neon_I8MM
x265 [info]: Main profile, Level-6.1 (Main tier)
x265 [info]: Thread pool created using 12 threads
x265 [info]: Slices                              : 1
x265 [info]: frame threads / pool features       : 3 / wpp(17 rows)
x265 [info]: Coding QT: max CU size, min CU size : 64 / 8
x265 [info]: Residual QT: max TU size, max depth : 32 / 1 inter / 1 intra
x265 [info]: ME / range / subpel / merge         : star / 57 / 3 / 3
x265 [info]: Keyframe min / max / scenecut / bias  : 25 / 250 / 40 / 5.00
x265 [info]: Lookahead / bframes / badapt        : 25 / 4 / 2
x265 [info]: b-pyramid / weightp / weightb       : 1 / 1 / 0
x265 [info]: References / ref-limit  cu / depth  : 4 / on / on
x265 [info]: AQ: mode / str / qg-size / cu-tree  : 2 / 1.0 / 32 / 1
x265 [info]: Rate Control / qCompress            : CRF-21.0 / 0.60
x265 [info]: tools: rect limit-modes rd=4 psy-rd=2.00 rdoq=2 psy-rdoq=1.00
x265 [info]: tools: rskip mode=1 signhide tmvp strong-intra-smoothing 
lslices=4
x265 [info]: tools: deblock sao
Output #0, matroska, to 'output2.mkv':
   Metadata:
     encoder         : Lavf61.7.100
   Stream #0:0: Video: hevc, yuv420p(tv, bt709, progressive), 1920x1080, 
q=2-31, 1k tbn
       Metadata:
         DURATION        : 00:00:10.000000000
         encoder         : Lavc61.19.101 libx265
       Side data:
         cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
[out#0/matroska @ 0x60000095c540] video:5377KiB audio:0KiB subtitle:0KiB 
other streams:0KiB global headers:2KiB muxing overhead: 0.096275%
frame=  300 fps= 19 q=33.8 Lsize=    5382KiB time=00:00:09.90 
bitrate=4453.7kbits/s speed=0.643x
x265 [info]: frame I:      2, Avg QP:24.75  kb/s: 1110316.00
x265 [info]: frame P:     70, Avg QP:26.52  kb/s: 405911.66
x265 [info]: frame B:    228, Avg QP:32.98  kb/s: 58793.19
x265 [info]: Weighted P-Frames: Y:2.9% UV:2.9%

encoded 300 frames in 15.36s (19.53 fps), 146797.66 kb/s, Avg QP:31.42

I can also post the input and output files on my cloud server if you 
want to try them.  However, I have tried several different input files 
and it does not seem to matter.

Thanks again,

--George
_______________________________________________
ffmpeg-user mailing list
ffmpeg-user@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-user

To unsubscribe, visit link above, or email
ffmpeg-user-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to