[FFmpeg-trac] #6217(ffmpeg:new): Ffmpeg ignores bitrate parameter when encoding with libxvid at 2nd pass

FFmpeg trac at avcodec.org
Fri Mar 3 23:46:25 EET 2017


#6217: Ffmpeg ignores bitrate parameter when encoding with libxvid at 2nd pass
-------------------------------------+-------------------------------------
             Reporter:  danieldc     |                     Type:  defect
               Status:  new          |                 Priority:  normal
            Component:  ffmpeg       |                  Version:
             Keywords:  ffmpeg       |  unspecified
  libxvid dual pass                  |               Blocked By:
             Blocking:               |  Reproduced by developer:  0
Analyzed by developer:  0            |
-------------------------------------+-------------------------------------
 Summary of the bug: with some really old version of ffmpeg I would use 2
 pass encoding to convert anyfile to AVI/XVID at medium/low resolution
 (900k), but all newer versions of FFMPEG ignores "bitrate" parameter at
 "2nd pass" encoding and this result in a file bigger and at high bitrate
 (as if using some low quantizer).


 How to reproduce:
 {{{
 ffmpeg-last64.exe  -i "teste.mkv" -vcodec libxvid -vtag DIVX -b:v 900k -an
 -pass 1 -passlogfile logfile -f rawvideo -y nul

 ffmpeg-last64.exe -i "teste.mkv" -vcodec libxvid -vtag DIVX -b:v 900k
 -acodec libmp3lame -b:a 96k -ac 2 -pass 2 -passlogfile logfile  -f avi -y
 newfile.avi


 FFMPEG version (N-74645-g4c39892)
 }}}


 Thank you,
 from Brazil


 ----




 '''1st pass:'''
 {{{
 ffmpeg-last64.exe  -v 9 -loglevel 99  -i "teste.mkv" -vcodec libxvid -vtag
 DIVX -b:v 900k -an -pass 1 -

 passlogfile logfile -f rawvideo -y nul

 ffmpeg version N-74645-g4c39892 Copyright (c) 2000-2015 the FFmpeg
 developers
   built with gcc 4.9.3 (GCC)
   configuration: --enable-gpl --enable-version3 --disable-w32threads
 --enable-av
 isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls
 --enab
 le-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-
 libcaca --
 enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm
 --enable-l
 ibilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb
 --enab
 le-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-
 librtmp --en
 able-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora
 --ena
 ble-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-
 amrwbenc
  --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp
 --enabl
 e-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-lzma
 --ena
 ble-decklink --enable-zlib
   libavutil      54. 31.100 / 54. 31.100
   libavcodec     56. 58.100 / 56. 58.100
   libavformat    56. 40.101 / 56. 40.101
   libavdevice    56.  4.100 / 56.  4.100
   libavfilter     5. 37.100 /  5. 37.100
   libswscale      3.  1.101 /  3.  1.101
   libswresample   1.  2.101 /  1.  2.101
   libpostproc    53.  3.100 / 53.  3.100
 Splitting the commandline.
 Reading option '-v' ... matched as option 'v' (set logging level) with
 argument '9'.
 Reading option '-loglevel' ... matched as option 'loglevel' (set logging
 level) with argument '99'.
 Reading option '-i' ... matched as input file with argument 'teste.mkv'.
 Reading option '-vcodec' ... matched as option 'vcodec' (force video codec
 ('copy' to copy stream)) with argument

 'libxvid'.
 Reading option '-vtag' ... matched as option 'vtag' (force video
 tag/fourcc) with argument 'DIVX'.
 Reading option '-b:v' ... matched as option 'b' (video bitrate (please use
 -b:v)) with argument '900k'.
 Reading option '-an' ... matched as option 'an' (disable audio) with
 argument '1'.
 Reading option '-pass' ... matched as option 'pass' (select the pass
 number (1 to 3)) with argument '1'.
 Reading option '-passlogfile' ... matched as option 'passlogfile' (select
 two pass log file name prefix) with

 argument 'logfile'.
 Reading option '-f' ... matched as option 'f' (force format) with argument
 'rawvideo'.
 Reading option '-y' ... matched as option 'y' (overwrite output files)
 with argument '1'.
 Reading option 'nul' ... matched as output file.
 Finished splitting the commandline.

 Parsing a group of options: global .
 Applying option v (set logging level) with argument 9.
 Applying option y (overwrite output files) with argument 1.
 Successfully parsed a group of options.
 Parsing a group of options: input file teste.mkv.
 Successfully parsed a group of options.
 Opening an input file: teste.mkv.
 Probing matroska,webm score:100 size:2048
 Probing mp3 score:1 size:2048

 [matroska,webm @ 0000000003140280] Format matroska,webm probed with
 size=2048 and score=100
 [matroska,webm @ 0000000003140280] Unknown entry 0x55B0
 st:0 removing common factor 1000000 from timebase
 st:1 removing common factor 1000000 from timebase
 [matroska,webm @ 0000000003140280] Before avformat_find_stream_info() pos:
 5227 bytes read:32768 seeks:0
 [h264 @ 0000000003141d60] no picture
 [matroska,webm @ 0000000003140280] All info found
 [matroska,webm @ 0000000003140280] 0: start_time: 0.000 duration:
 -9223372036854.775
 [matroska,webm @ 0000000003140280] 1: start_time: 0.000 duration:
 -9223372036854.775
 [matroska,webm @ 0000000003140280] stream: start_time: 0.000 duration:
 30.003 bitrate=1212 kb/s
 [matroska,webm @ 0000000003140280] After avformat_find_stream_info() pos:
 7061 bytes read:32768 seeks:0 frames:9
 Input #0, matroska,webm, from 'teste.mkv':
   Metadata:
     ENCODER         : Lavf57.63.100
   Duration: 00:00:30.00, start: 0.000000, bitrate: 1212 kb/s
     Stream #0:0, 4, 1/1000: Video: h264 (High), 4 reference frames,
 yuv420p(left), 720x404 (720x416) [SAR 1:1 DAR

 180:101], 1/48, 24 fps, 24 tbr, 1k tbn, 48 tbc (default)
     Metadata:
       title           : Video
       ENCODER         : Lavc57.75.100 libx264
       DURATION        : 00:00:30.003000000
     Stream #0:1, 5, 1/1000: Audio: vorbis, 44100 Hz, stereo, fltp
 (default)
     Metadata:
       title           : Audio
       ENCODER         : Lavc57.75.100 libvorbis
       DURATION        : 00:00:30.003000000
 Successfully opened the file.
 Parsing a group of options: output file nul.
 Applying option vcodec (force video codec ('copy' to copy stream)) with
 argument libxvid.
 Applying option vtag (force video tag/fourcc) with argument DIVX.
 Applying option b:v (video bitrate (please use -b:v)) with argument 900k.
 Applying option an (disable audio) with argument 1.
 Applying option pass (select the pass number (1 to 3)) with argument 1.
 Applying option passlogfile (select two pass log file name prefix) with
 argument logfile.
 Applying option f (force format) with argument rawvideo.
 Successfully parsed a group of options.

 Opening an output file: nul.
 Successfully opened the file.

 detected 4 logical cores
 [graph 0 input from stream 0:0 @ 0000000003149700] Setting 'video_size' to
 value '720x404'
 [graph 0 input from stream 0:0 @ 0000000003149700] Setting 'pix_fmt' to
 value '0'
 [graph 0 input from stream 0:0 @ 0000000003149700] Setting 'time_base' to
 value'1/1000'
 [graph 0 input from stream 0:0 @ 0000000003149700] Setting 'pixel_aspect'
 to value '1/1'
 [graph 0 input from stream 0:0 @ 0000000003149700] Setting 'sws_param' to
 value'flags=2'
 [graph 0 input from stream 0:0 @ 0000000003149700] Setting 'frame_rate' to
 value '24/1'
 [graph 0 input from stream 0:0 @ 0000000003149700] w:720 h:404
 pixfmt:yuv420p tb:1/1000 fr:24/1 sar:1/1

 sws_param:flags=2
 [format @ 00000000031e9f40] compat: called with args=[yuv420p]
 [format @ 00000000031e9f40] Setting 'pix_fmts' to value 'yuv420p'
 [AVFilterGraph @ 00000000031eb320] query_formats: 4 queried, 3 merged, 0
 already done, 0 delayed
 Output #0, rawvideo, to 'nul':
   Metadata:
     encoder         : Lavf56.40.101
     Stream #0:0, 0, 1/24: Video: mpeg4 (libxvid), 1 reference frame (DIVX
 / 0x58
 564944), yuv420p(left), 720x404 [SAR 1:1 DAR 180:101], 1/24, q=2-31, pass
 1, 900
  kb/s, 24 fps, 24 tbn, 24 tbc (default)
     Metadata:
       title           : Video
       DURATION        : 00:00:30.003000000
       encoder         : Lavc56.58.100 libxvid
 Stream mapping:
   Stream #0:0 -> #0:0 (h264 (native) -> mpeg4 (libxvid))
 Press [q] to stop, [?] for help
 [h264 @ 0000000005b12200] no picture
 [h264 @ 0000000005a51d60] no picture
 *** 1 dup!
 frame=  160 fps=0.0 q=2.0 size=    1079kB time=00:00:06.66
 bitrate=1326.2kbits/s
 frame=  272 fps=271 q=2.0 size=    3358kB time=00:00:11.33
 bitrate=2427.5kbits/s
 frame=  408 fps=271 q=2.0 size=    4794kB time=00:00:17.00
 bitrate=2309.9kbits/s
 frame=  561 fps=280 q=2.0 size=    5579kB time=00:00:23.37
 bitrate=1955.3kbits/s
 [output stream 0:0 @ 00000000031e9aa0] EOF on sink link output stream
 0:0:defaul
 t.
 No more output streams to write to, finishing.
 frame=  720 fps=292 q=2.0 Lsize=    6396kB time=00:00:30.00
 bitrate=1746.5kbits/s dup=1 drop=0
 video:6396kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB
 muxingoverhead: 0.000000%
 Input file #0 (teste.mkv):
   Input stream #0:0 (video): 719 packets read (4107831 bytes); 719 frames
 decoded;
   Input stream #0:1 (audio): 5 packets read (884 bytes);
   Total: 724 packets (4108715 bytes) demuxed
 Output file #0 (nul):
   Output stream #0:0 (video): 720 frames encoded; 720 packets muxed
 (6549199 bytes);
   Total: 720 packets (6549199 bytes) muxed
 719 frames successfully decoded, 0 decoding errors
 [AVIOContext @ 00000000031e80e0] Statistics: 0 seeks, 741 writeouts
 [AVIOContext @ 0000000003149a40] Statistics: 4548715 bytes read, 0 seeks
 }}}


 '''2nd pass:'''
 {{{
 ffmpeg-last64.exe -v 9 -loglevel 99  -i "teste.mkv" -vcodec libxvid -vtag
 DIVX -b:v 900k -acodec libmp3lame -b:a

 96k -ac 2 -pass 2 -passlogfile logfile  -f avi -y newfile.avi

 ffmpeg version N-74645-g4c39892 Copyright (c) 2000-2015 the FFmpeg
 developers
   built with gcc 4.9.3 (GCC)
   configuration: --enable-gpl --enable-version3 --disable-w32threads
 --enable-avisynth --enable-bzlib --enable-

 fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass
 --enable-libbluray --enable-libbs2b --

 enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme
 --enable-libgsm --enable-libilbc --

 enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-
 libopencore-amrwb --enable-libopenjpeg

 --enable-libopus --enable-librtmp --enable-libschroedinger --enable-
 libsoxr --enable-libspeex --enable-libtheora

 --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-
 libvo-amrwbenc --enable-libvorbis --

 enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264
 --enable-libx265 --enable-libxavs --enable-

 libxvid --enable-lzma --enable-decklink --enable-zlib
   libavutil      54. 31.100 / 54. 31.100
   libavcodec     56. 58.100 / 56. 58.100
   libavformat    56. 40.101 / 56. 40.101
   libavdevice    56.  4.100 / 56.  4.100
   libavfilter     5. 37.100 /  5. 37.100
   libswscale      3.  1.101 /  3.  1.101
   libswresample   1.  2.101 /  1.  2.101
   libpostproc    53.  3.100 / 53.  3.100
 Splitting the commandline.
 Reading option '-v' ... matched as option 'v' (set logging level) with
 argument'9'.
 Reading option '-loglevel' ... matched as option 'loglevel' (set logging
 level)with argument '99'.
 Reading option '-i' ... matched as input file with argument 'teste.mkv'.
 Reading option '-vcodec' ... matched as option 'vcodec' (force video codec
 ('copy' to copy stream)) with argument

 'libxvid'.
 Reading option '-vtag' ... matched as option 'vtag' (force video
 tag/fourcc) with argument 'DIVX'.
 Reading option '-b:v' ... matched as option 'b' (video bitrate (please use
 -b:v)) with argument '900k'.
 Reading option '-acodec' ... matched as option 'acodec' (force audio codec
 ('copy' to copy stream)) with argument

 'libmp3lame'.
 Reading option '-b:a' ... matched as option 'b' (video bitrate (please use
 -b:v)) with argument '96k'.
 Reading option '-ac' ... matched as option 'ac' (set number of audio
 channels) with argument '2'.
 Reading option '-pass' ... matched as option 'pass' (select the pass
 number (1 to 3)) with argument '2'.
 Reading option '-passlogfile' ... matched as option 'passlogfile' (select
 two pass log file name prefix) with

 argument 'logfile'.
 Reading option '-f' ... matched as option 'f' (force format) with argument
 'avi'.
 Reading option '-y' ... matched as option 'y' (overwrite output files)
 with argument '1'.
 Reading option 'newfile.avi' ... matched as output file.
 Finished splitting the commandline.

 Parsing a group of options: global .
 Applying option v (set logging level) with argument 9.
 Applying option y (overwrite output files) with argument 1.
 Successfully parsed a group of options.

 Parsing a group of options: input file teste.mkv.
 Successfully parsed a group of options.
 Opening an input file: teste.mkv.
 Probing matroska,webm score:100 size:2048
 Probing mp3 score:1 size:2048
 [matroska,webm @ 00000000031d0820] Format matroska,webm probed with
 size=2048 and score=100
 [matroska,webm @ 00000000031d0820] Unknown entry 0x55B0st:0 removing
 common factor 1000000 from timebasest:1

 removing common factor 1000000 from timebase
 [matroska,webm @ 00000000031d0820] Before avformat_find_stream_info() pos:
 5227bytes read:32768 seeks:0
 [h264 @ 00000000031e4820] no picture
 [matroska,webm @ 00000000031d0820] All info found
 [matroska,webm @ 00000000031d0820] 0: start_time: 0.000 duration:
 -9223372036854.775
 [matroska,webm @ 00000000031d0820] 1: start_time: 0.000 duration:
 -9223372036854.775
 [matroska,webm @ 00000000031d0820] stream: start_time: 0.000 duration:
 30.003 bitrate=1212 kb/s
 [matroska,webm @ 00000000031d0820] After avformat_find_stream_info() pos:
 7061 bytes read:32768 seeks:0 frames:9
 Input #0, matroska,webm, from 'teste.mkv':
   Metadata:
     ENCODER         : Lavf57.63.100
   Duration: 00:00:30.00, start: 0.000000, bitrate: 1212 kb/s
     Stream #0:0, 4, 1/1000: Video: h264 (High), 4 reference frames,
 yuv420p(left), 720x404 (720x416) [SAR 1:1 DAR

 180:101], 1/48, 24 fps, 24 tbr, 1k tbn, 48 tbc (default)
     Metadata:
       title           : Video
       ENCODER         : Lavc57.75.100 libx264
       DURATION        : 00:00:30.003000000
     Stream #0:1, 5, 1/1000: Audio: vorbis, 44100 Hz, stereo, fltp
 (default)
     Metadata:
       title           : Audio
       ENCODER         : Lavc57.75.100 libvorbis
       DURATION        : 00:00:30.003000000
 Successfully opened the file.

 Parsing a group of options: output file newfile.avi.
 Applying option vcodec (force video codec ('copy' to copy stream)) with
 argument libxvid.
 Applying option vtag (force video tag/fourcc) with argument DIVX.
 Applying option b:v (video bitrate (please use -b:v)) with argument 900k.
 Applying option acodec (force audio codec ('copy' to copy stream)) with
 argument libmp3lame.
 Applying option b:a (video bitrate (please use -b:v)) with argument 96k.
 Applying option ac (set number of audio channels) with argument 2.
 Applying option pass (select the pass number (1 to 3)) with argument 2.
 Applying option passlogfile (select two pass log file name prefix) with
 argument logfile.
 Applying option f (force format) with argument avi.
 Successfully parsed a group of options.

 Opening an output file: newfile.avi.
 [AVIOContext @ 00000000031d91e0] Statistics: 17370 bytes read, 0 seeks
 Successfully opened the file.
 detected 4 logical cores
 [graph 0 input from stream 0:0 @ 000000000592f4c0] Setting 'video_size' to
 value '720x404'
 [graph 0 input from stream 0:0 @ 000000000592f4c0] Setting 'pix_fmt' to
 value '0'
 [graph 0 input from stream 0:0 @ 000000000592f4c0] Setting 'time_base' to
 value'1/1000'
 [graph 0 input from stream 0:0 @ 000000000592f4c0] Setting 'pixel_aspect'
 to value '1/1'
 [graph 0 input from stream 0:0 @ 000000000592f4c0] Setting 'sws_param' to
 value'flags=2'
 [graph 0 input from stream 0:0 @ 000000000592f4c0] Setting 'frame_rate' to
 value '24/1'
 [graph 0 input from stream 0:0 @ 000000000592f4c0] w:720 h:404
 pixfmt:yuv420p tb:1/1000 fr:24/1 sar:1/1

 sws_param:flags=2
 [format @ 0000000005927740] compat: called with args=[yuv420p]
 [format @ 0000000005927740] Setting 'pix_fmts' to value 'yuv420p'
 [AVFilterGraph @ 00000000031d92e0] query_formats: 4 queried, 3 merged, 0
 already done, 0 delayed
 [graph 1 input from stream 0:1 @ 000000000592d620] Setting 'time_base' to
 value'1/44100'
 [graph 1 input from stream 0:1 @ 000000000592d620] Setting 'sample_rate'
 to value '44100'
 [graph 1 input from stream 0:1 @ 000000000592d620] Setting 'sample_fmt' to
 value 'fltp'
 [graph 1 input from stream 0:1 @ 000000000592d620] Setting
 'channel_layout' to value '0x3'
 [graph 1 input from stream 0:1 @ 000000000592d620] tb:1/44100
 samplefmt:fltp samplerate:44100 chlayout:0x3
 [audio format for output stream 0:1 @ 000000000327a900] Setting
 'sample_fmts' to value 's32p|fltp|s16p'
 [audio format for output stream 0:1 @ 000000000327a900] Setting
 'sample_rates' to value '44100|48000|32000|

 22050|24000|16000|11025|12000|8000'
 [audio format for output stream 0:1 @ 000000000327a900] Setting
 'channel_layouts' to value '0x3'
 [AVFilterGraph @ 0000000005925920] query_formats: 4 queried, 9 merged, 0
 already done, 0 delayed

 Output #0, avi, to 'newfile.avi':
   Metadata:
     ISFT            : Lavf56.40.101
     Stream #0:0, 0, 1/24: Video: mpeg4 (libxvid), 1 reference frame (DIVX
 / 0x58564944), yuv420p(left), 720x404

 [SAR 1:1 DAR 180:101], 1/24, q=2-31, pass 2, 900 kb/s, 24 fps, 24 tbn, 24
 tbc (default)
     Metadata:
       title           : Video
       DURATION        : 00:00:30.003000000
       encoder         : Lavc56.58.100 libxvid
     Stream #0:1, 0, 32/1225: Audio: mp3 (libmp3lame) (U[0][0][0] /
 0x0055), 4410
 0 Hz, stereo, fltp, 96 kb/s (default)
     Metadata:
       title           : Audio
       DURATION        : 00:00:30.003000000
       encoder         : Lavc56.58.100 libmp3lame

 Stream mapping:
   Stream #0:0 -> #0:0 (h264 (native) -> mpeg4 (libxvid))
   Stream #0:1 -> #0:1 (vorbis (native) -> mp3 (libmp3lame))

 Press [q] to stop, [?] for help
 [h264 @ 0000000005a6e0e0] no picture
 [h264 @ 0000000005a6ed80] no picture
 frame=  108 fps=0.0 q=2.0 size=     471kB time=00:00:04.59 bitrate=
 840.1kbits/s
 frame=  184 fps=183 q=2.0 size=    1913kB time=00:00:07.75
 bitrate=2019.7kbits/s
 frame=  253 fps=168 q=2.0 size=    3222kB time=00:00:10.63
 bitrate=2482.9kbits/s
 frame=  346 fps=172 q=2.0 size=    4239kB time=00:00:14.49
 bitrate=2395.4kbits/s
 frame=  441 fps=176 q=2.0 size=    5125kB time=00:00:18.44
 bitrate=2276.4kbits/s
 frame=  544 fps=181 q=2.0 size=    5658kB time=00:00:22.75
 bitrate=2037.1kbits/s
 frame=  648 fps=185 q=2.0 size=    6210kB time=00:00:27.08
 bitrate=1878.0kbits/s

 [output stream 0:1 @ 0000000005930060] EOF on sink link output stream
 0:1:default.
 [output stream 0:0 @ 0000000005927680] EOF on sink link output stream
 0:0:default.
 No more output streams to write to, finishing.

 [libmp3lame @ 00000000059e51a0] Trying to remove 687 more samples than
 there are in the queue
 frame=  719 fps=185 q=2.0 Lsize=    6643kB time=00:00:30.01
 bitrate=1813.0kbits/s
 video:6236kB audio:352kB subtitle:0kB other streams:0kB global headers:0kB
 muxing overhead: 0.828692%

 Input file #0 (teste.mkv):
   Input stream #0:0 (video): 719 packets read (4107831 bytes); 719 frames
 decoded;
   Input stream #0:1 (audio): 1538 packets read (419597 bytes); 1537 frames
 decoded (1323008 samples);
   Total: 2257 packets (4527428 bytes) demuxed

 Output file #0 (newfile.avi):
   Output stream #0:0 (video): 719 frames encoded; 719 packets muxed
 (6385808 bytes);
   Output stream #0:1 (audio): 1149 frames encoded (1323008 samples); 1150
 packets muxed (360490 bytes);
   Total: 1869 packets (6746298 bytes) muxed

 2256 frames successfully decoded, 0 decoding errors

 [AVIOContext @ 00000000031d91e0] Statistics: 12 seeks, 1892 writeouts
 [AVIOContext @ 00000000031d9fe0] Statistics: 4548715 bytes read, 0 seeks
 }}}

--
Ticket URL: <https://trac.ffmpeg.org/ticket/6217>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list