Warum unterscheidet sich die angezeigte Bitrate der resultierenden Dateien, wenn Sie eine Videobitrate mit ffmpeg angeben?

Ich bin ziemlich neu in der Transcodierung. Ich habe einige mp4-Dateien aus mxf-Dateien generiert. Ich habe mit einigen Einstellungen auf ffmpeg herumgespielt und verschiedene Bitraten für Audio und Video mit den Argumenten -b:vund angegeben. -b:aWenn ich die Datei überprüfe, nachdem sie mit erstellt mediainfowurde, stelle ich fest, dass die angezeigte Audio-Bitrate immer genau dieselbe ist wie angegeben, aber die Video-Bitrate ist unterschiedlich. Beispielsweise habe ich -b:v 1500kaber die Video-Bitrate für erstellte Datei beim Abfragen mit mediainfo6943 kb/s angegeben. Ich habe mich nur gefragt, warum das so ist? Warum ist die Audio-Bitrate immer die gleiche wie die ausgewählte und nicht die Video-Bitrate? Der vollständige Befehl lautet:

 ffmpeg -i mediafile.mxf -vcodec libx264 -crf 23 -b:v 1500k mediafile.mp4

Die Ausgabe ist:

ffmpeg version 2.6.8 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-4)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --enable-bzlib --disable-crystalhd --enable-gnutls --enable-ladspa --enable-libass --enable-libcdio --enable-libdc1394 --enable-libfaac --enable-nonfree --enable-libfdk-aac --enable-nonfree --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libx264 --enable-libx265 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Guessed Channel Layout for  Input Stream #0.1 : mono
Guessed Channel Layout for  Input Stream #0.2 : mono
Guessed Channel Layout for  Input Stream #0.3 : mono
Guessed Channel Layout for  Input Stream #0.4 : mono
Input #0, mxf, from 'mediafile.mxf':
  Metadata:
    uid             : adab4424-2f25-4dc7-92ff-29bd000b0000
    generation_uid  : adab4424-2f25-4dc7-92ff-29bd000b0001
    company_name    : FFmbc
    product_name    : OP1a Muxer
    product_version : 53.6.0
    product_uid     : adab4424-2f25-4dc7-92ff-29bd000b0002
    modification_date: 2016-04-08 15:58:38
    material_package_umid: 0x060A2B340101010501010D0013D24E0A529471342FD24E0A00529471342FD200
    timecode        : 00:00:00:00
  Duration: 00:02:42.56, start: 0.000000, bitrate: 118682 kb/s
    Stream #0:0: Video: dvvideo, yuv422p, 1440x1080 [SAR 4:3 DAR 16:9], 25 fps, 25 tbr, 25 tbn, 25 tbc
    Metadata:
      file_package_umid: 0x060A2B340101010501010D0013D24E0A529471342FD24E0A00529471342FD201
    Stream #0:1: Audio: pcm_s16le, 48000 Hz, 1 channels, s16, 768 kb/s
    Metadata:
      file_package_umid: 0x060A2B340101010501010D0013D24E0A529471342FD24E0A00529471342FD201
    Stream #0:2: Audio: pcm_s16le, 48000 Hz, 1 channels, s16, 768 kb/s
    Metadata:
      file_package_umid: 0x060A2B340101010501010D0013D24E0A529471342FD24E0A00529471342FD201
    Stream #0:3: Audio: pcm_s16le, 48000 Hz, 1 channels, s16, 768 kb/s
    Metadata:
      file_package_umid: 0x060A2B340101010501010D0013D24E0A529471342FD24E0A00529471342FD201
    Stream #0:4: Audio: pcm_s16le, 48000 Hz, 1 channels, s16, 768 kb/s
    Metadata:
      file_package_umid: 0x060A2B340101010501010D0013D24E0A529471342FD24E0A00529471342FD201
File 'mediafile.mp4' already exists. Overwrite ? [y/N] y
No pixel format specified, yuv422p for H.264 encoding chosen.
Use -pix_fmt yuv420p for compatibility with outdated media players.
[libx264 @ 0xe3b9a0] using SAR=4/3
[libx264 @ 0xe3b9a0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2
[libx264 @ 0xe3b9a0] profile High 4:2:2, level 4.0, 4:2:2 8-bit
[libx264 @ 0xe3b9a0] 264 - core 142 r2495 6a301b6 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - 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=18 lookahead_threads=3 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, mp4, to 'mediafile.mp4':
  Metadata:
    uid             : adab4424-2f25-4dc7-92ff-29bd000b0000
    generation_uid  : adab4424-2f25-4dc7-92ff-29bd000b0001
    company_name    : FFmbc
    product_name    : OP1a Muxer
    product_version : 53.6.0
    product_uid     : adab4424-2f25-4dc7-92ff-29bd000b0002
    modification_date: 2016-04-08 15:58:38
    material_package_umid: 0x060A2B340101010501010D0013D24E0A529471342FD24E0A00529471342FD200
    timecode        : 00:00:00:00
    encoder         : Lavf56.25.101
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv422p, 1440x1080 [SAR 4:3 DAR 16:9], q=-1--1, 1500 kb/s, 25 fps, 12800 tbn, 25 tbc
    Metadata:
      file_package_umid: 0x060A2B340101010501010D0013D24E0A529471342FD24E0A00529471342FD201
      encoder         : Lavc56.26.100 libx264
    Stream #0:1: Audio: aac (libfaac) ([64][0][0][0] / 0x0040), 48000 Hz, mono, s16, 128 kb/s
    Metadata:
      file_package_umid: 0x060A2B340101010501010D0013D24E0A529471342FD24E0A00529471342FD201
      encoder         : Lavc56.26.100 libfaac
Stream mapping:
  Stream #0:0 -> #0:0 (dvvideo (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (pcm_s16le (native) -> aac (libfaac))
Press [q] to stop, [?] for help
frame= 4064 fps= 22 q=-1.0 Lsize=  139476kB time=00:02:42.56 bitrate=7028.7kbits/s    
video:137744kB audio:1640kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.065406%
[libx264 @ 0xe3b9a0] frame I:72    Avg QP:21.59  size: 65595
[libx264 @ 0xe3b9a0] frame P:3978  Avg QP:24.85  size: 34252
[libx264 @ 0xe3b9a0] frame B:14    Avg QP:23.42  size:  5032
[libx264 @ 0xe3b9a0] consecutive B-frames: 99.3%  0.7%  0.0%  0.0%
[libx264 @ 0xe3b9a0] mb I  I16..4: 12.6% 85.9%  1.5%
[libx264 @ 0xe3b9a0] mb P  I16..4:  2.4% 25.6%  0.5%  P16..4: 44.5%  9.3%  5.3%  0.0%  0.0%    skip:12.5%
[libx264 @ 0xe3b9a0] mb B  I16..4:  0.2%  0.9%  0.0%  B16..8: 27.5%  0.5%  0.1%  direct: 1.0%  skip:69.9%  L0:41.2% L1:57.3% BI: 1.5%
[libx264 @ 0xe3b9a0] 8x8 transform intra:89.8% inter:88.5%
[libx264 @ 0xe3b9a0] coded y,uvDC,uvAC intra: 76.2% 60.7% 7.8% inter: 38.4% 53.3% 0.1%
[libx264 @ 0xe3b9a0] i16 v,h,dc,p:  5% 72%  3% 19%
[libx264 @ 0xe3b9a0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 21% 35%  4%  4%  5%  4%  4%  5%
[libx264 @ 0xe3b9a0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 13% 57% 13%  3%  3%  3%  3%  2%  3%
[libx264 @ 0xe3b9a0] i8c dc,h,v,p: 55% 20% 21%  4%
[libx264 @ 0xe3b9a0] Weighted P-Frames: Y:3.7% UV:2.4%
[libx264 @ 0xe3b9a0] ref P L0: 43.9% 13.1% 26.1% 16.5%  0.4%
[libx264 @ 0xe3b9a0] ref B L0: 68.4% 31.6%
[libx264 @ 0xe3b9a0] kb/s:6941.41

Vielen Dank

Zeigen Sie den Befehl und die vollständige Konsolenausgabe an.
Sieht so aus, als hätten Sie zwei Konten erstellt (andernfalls hätten Sie die Frage bearbeiten können, ohne auf die Genehmigung warten zu müssen). Siehe , ich habe versehentlich zwei Konten erstellt; wie füge ich sie zusammen? .
CRF- und Bitratenmodus sind exklusiv, und x264 verwendet hier CRF. Lassen Sie ersteres fallen. Hinzufügen-bufsize 1600k -maxrate 1600k

Antworten (2)

Das Problem ist, dass Sie -crfmit verwenden -b:v. ffmpeg ist ein gut gebautes Programm, also ignoriert -b:vund verwendet es einfach -crf. Wenn Sie eine bestimmte Bitrate haben möchten, entfernen Sie den Befehl crf.

CRF ist "Constant Rate Factor", was bedeutet, dass eine Qualitätsvariable angegeben wird und dann basierend auf dem Inhalt eine variable Bitrate berechnet wird. Es ist mein Favorit für h.264, weil es normalerweise sehr gut herauskommt.

Das Einstellen einer konstanten Bitrate funktioniert wie erwartet. Die Komprimierung entspricht fast genau der von Ihnen eingegebenen, aber die Qualität kann darunter leiden. Ich benutze es nie für h.264. Mir fällt kein Anwendungsfall ein, wo ich das tun würde.

Die Antwort von DigiVision Media hat es für mich gelöst, ich habe -crf und -b:v verwendet, sobald ich -crf entfernt habe, war die Ausgabebitrate wie im Parameter b:v eingestellt. (musste als Antwort posten, da ich keinen Kommentar abgeben kann)

Die von Ihnen angegebene Bitrate ist eine Zielbitrate, keine garantierte Bitrate. Es gibt keine Möglichkeit, genau zu wissen, wie groß ein Frame sein wird, bis es kodiert ist. Wenn Sie in einen Frame gehen, ist es möglich, etwas mehr oder weniger aggressiv zu sein, wie viele Informationen Sie beim Codieren zu verlieren bereit sind, aber wie Informationsverlust zu einer Reduzierung der Datengröße führt (Daten sind nicht dasselbe wie Informationen ( AAAAund A4beides enthalten er die gleichen Informationen (4 A's), aberA4ist die Hälfte der Daten)) ist nicht 100% vorhersehbar. Encoder verwenden eine sogenannte Ratensteuerung, um dies zu erreichen. Wenn die Frames am Ende etwas größer als erwartet sind, werden Informationen beim nächsten Frame aggressiver verloren. Da die meisten Leute die Bitrate angeben, um auf bestimmte Anwendungsfälle abzuzielen (z. B. Streaming über das Internet), gehen viele Stream-Steuerungsalgorithmen auf die Seite von zu niedrig, da eine zu hohe zu Problemen wie Pufferung führen kann.