使用FFmpeg进行缩放时,为什么帧数会发生变化?

时间:2016-10-20 02:42:51

标签: ffmpeg

我用它来缩放1920x1080 H.264视频:

ffmpeg -i IMG_1438.MOV -threads 2 -vf scale=-2:600 IMG_1438_scaledTo600.MOV

And it works great!但这是我的问题:大部分时间,原始文件和缩放文件之间的帧速率保持完全相同。例如:

$ mediainfo -F IMG_1426.MOV | grep Frame\ rate
Frame rate                               : 29.970
Frame rate                               : 29.970 FPS
Frame rate mode                          : VFR
Frame rate mode                          : Variable
Frame rate                               : 29.970
Frame rate                               : 29.970 (29970/1000) FPS

$ mediainfo -F IMG_1426_scaledTo600.MOV | grep Frame\ rate
Frame rate                               : 29.970
Frame rate                               : 29.970 FPS
Frame rate mode                          : CFR
Frame rate mode                          : Constant
Frame rate                               : 29.970
Frame rate                               : 29.970 (30000/1001) FPS

但有时,帧率会急剧上升:

$ mediainfo -F IMG_1438.MOV | grep Frame\ rate
Frame rate                               : 25.044
Frame rate                               : 25.044 FPS
Frame rate mode                          : VFR
Frame rate mode                          : Variable
Frame rate                               : 25.044
Frame rate                               : 25.044 FPS

$ mediainfo -F IMG_1438_scaledTo600.MOV | grep Frame\ rate
Frame rate                               : 120.000
Frame rate                               : 120.000 FPS
Frame rate mode                          : CFR
Frame rate mode                          : Constant
Frame rate                               : 120.000
Frame rate                               : 120.000 FPS

我应该了解FFmpeg或libx264或libswscale,它们可以帮助我理解为什么会这样? (希望特别听到LordNeckbeard)。

mediainfo IMG_1438.MOV --Full输出:

General
Count                                    : 327
Count of stream of this kind             : 1
Kind of stream                           : General
Kind of stream                           : General
Stream identifier                        : 0
Count of video streams                   : 1
Count of audio streams                   : 1
OtherCount                               : 2
Video_Format_List                        : AVC
Video_Format_WithHint_List               : AVC
Codecs Video                             : AVC
Audio_Format_List                        : AAC
Audio_Format_WithHint_List               : AAC
Audio codecs                             : AAC LC
Complete name                            : IMG_1438.MOV
File name                                : IMG_1438
File extension                           : MOV
Format                                   : MPEG-4
Format                                   : MPEG-4
Format/Extensions usually used           : mp4 m4v m4a m4b m4p 3gpp 3gp 3gpp2 3g2 k3g jpm jpx mqv ismv isma f4v
Commercial name                          : MPEG-4
Format profile                           : QuickTime
Internet media type                      : video/mp4
Codec ID                                 : qt  
Codec ID                                 : qt   0000.00 (qt  )
Codec ID/Url                             : http://www.apple.com/quicktime/download/standalone.html
CodecID_Version                          : 0000.00
CodecID_Compatible                       : qt  
Codec                                    : MPEG-4
Codec                                    : MPEG-4
Codec/Extensions usually used            : mp4 m4v m4a m4b m4p 3gpp 3gp 3gpp2 3g2 k3g jpm jpx mqv ismv isma f4v
File size                                : 113990140
File size                                : 109 MiB
File size                                : 109 MiB
File size                                : 109 MiB
File size                                : 109 MiB
File size                                : 108.7 MiB
Duration                                 : 52268
Duration                                 : 52 s 268 ms
Duration                                 : 52 s 268 ms
Duration                                 : 52 s 268 ms
Duration                                 : 00:00:52.268
Duration                                 : 00:00:52:09
Duration                                 : 00:00:52.268 (00:00:52:09)
Overall bit rate                         : 17447026
Overall bit rate                         : 17.4 Mb/s
Frame rate                               : 25.044
Frame rate                               : 25.044 FPS
Frame count                              : 1309
Stream size                              : 56670
Stream size                              : 55.3 KiB (0%)
Stream size                              : 55 KiB
Stream size                              : 55 KiB
Stream size                              : 55.3 KiB
Stream size                              : 55.34 KiB
Stream size                              : 55.3 KiB (0%)
Proportion of this stream                : 0.00050
HeaderSize                               : 28
DataSize                                 : 113966271
FooterSize                               : 23841
IsStreamable                             : No
Encoded date                             : UTC 2016-10-08 22:51:19
Tagged date                              : UTC 2016-10-08 22:52:12
File last modification date              : UTC 2016-10-08 22:51:19
File last modification date (local)      : 2016-10-08 17:51:19
Writing library                          : Apple QuickTime
Writing library                          : Apple QuickTime
Encoded_Library_Name                     : Apple QuickTime
com.apple.quicktime.make                 : Apple
com.apple.quicktime.model                : iPhone 5
com.apple.quicktime.software             : 10.0.2
com.apple.quicktime.creationdate         : 2016-10-08T17:51:19-0500

Video
Count                                    : 334
Count of stream of this kind             : 1
Kind of stream                           : Video
Kind of stream                           : Video
Stream identifier                        : 0
StreamOrder                              : 0
ID                                       : 1
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format/Url                               : http://developers.videolan.org/x264.html
Commercial name                          : AVC
Format profile                           : High@L4.1
Format settings                          : CABAC / 1 Ref Frames
Format settings, CABAC                   : Yes
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 1
Format settings, ReFrames                : 1 frame
Internet media type                      : video/H264
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Codec ID/Url                             : http://www.apple.com/quicktime/download/standalone.html
Codec                                    : AVC
Codec                                    : AVC
Codec/Family                             : AVC
Codec/Info                               : Advanced Video Codec
Codec/Url                                : http://developers.videolan.org/x264.html
Codec/CC                                 : avc1
Codec profile                            : High@L4.1
Codec settings                           : CABAC / 1 Ref Frames
Codec settings, CABAC                    : Yes
Codec_Settings_RefFrames                 : 1
Duration                                 : 52268
Duration                                 : 52 s 268 ms
Duration                                 : 52 s 268 ms
Duration                                 : 52 s 268 ms
Duration                                 : 00:00:52.268
Duration                                 : 00:00:52:09
Duration                                 : 00:00:52.268 (00:00:52:09)
Bit rate                                 : 17375530
Bit rate                                 : 17.4 Mb/s
Width                                    : 1920
Width                                    : 1 920 pixels
Height                                   : 1080
Height                                   : 1 080 pixels
Stored_Height                            : 1088
Sampled_Width                            : 1920
Sampled_Height                           : 1080
Pixel aspect ratio                       : 1.000
Display aspect ratio                     : 1.778
Display aspect ratio                     : 16:9
Rotation                                 : 90.000
Rotation                                 : 90°
Frame rate mode                          : VFR
Frame rate mode                          : Variable
Frame rate                               : 25.044
Frame rate                               : 25.044 FPS
Minimum frame rate                       : 23.077
Minimum frame rate                       : 23.077 FPS
Maximum frame rate                       : 30.000
Maximum frame rate                       : 30.000 FPS
Frame count                              : 1309
Resolution                               : 8
Resolution                               : 8 bits
Colorimetry                              : 4:2:0
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Chroma subsampling                       : 4:2:0
Bit depth                                : 8
Bit depth                                : 8 bits
Scan type                                : Progressive
Scan type                                : Progressive
Interlacement                            : PPF
Interlacement                            : Progressive
Bits/(Pixel*Frame)                       : 0.335
Stream size                              : 113523046
Stream size                              : 108 MiB (100%)
Stream size                              : 108 MiB
Stream size                              : 108 MiB
Stream size                              : 108 MiB
Stream size                              : 108.3 MiB
Stream size                              : 108 MiB (100%)
Proportion of this stream                : 0.99590
Title                                    : Core Media Video
Encoded date                             : UTC 2016-10-08 22:51:19
Tagged date                              : UTC 2016-10-08 22:52:12
Color range                              : Limited
colour_description_present               : Yes
Color primaries                          : BT.709
Transfer characteristics                 : BT.709
Matrix coefficients                      : BT.709

Audio
Count                                    : 272
Count of stream of this kind             : 1
Kind of stream                           : Audio
Kind of stream                           : Audio
Stream identifier                        : 0
StreamOrder                              : 1
ID                                       : 2
ID                                       : 2
Format                                   : AAC
Format/Info                              : Advanced Audio Codec
Commercial name                          : AAC
Format profile                           : LC
Codec ID                                 : 40
Codec                                    : AAC LC
Codec                                    : AAC LC
Codec/Family                             : AAC
Codec/CC                                 : 40
Duration                                 : 52268
Duration                                 : 52 s 268 ms
Duration                                 : 52 s 268 ms
Duration                                 : 52 s 268 ms
Duration                                 : 00:00:52.268
Duration                                 : 00:00:52:15
Duration                                 : 00:00:52.268 (00:00:52:15)
Source duration                          : 52338
Source duration                          : 52 s 338 ms
Source duration                          : 52 s 338 ms
Source duration                          : 52 s 338 ms
Source duration                          : 00:00:52.338
Bit rate mode                            : CBR
Bit rate mode                            : Constant
Bit rate                                 : 64000
Bit rate                                 : 64.0 kb/s
Channel(s)                               : 1
Channel(s)                               : 1 channel
Channel positions                        : Front: C
Channel positions                        : 1/0/0
ChannelLayout                            : C
Samples per frame                        : 1024
Sampling rate                            : 44100
Sampling rate                            : 44.1 kHz
Samples count                            : 2305019
Frame rate                               : 43.066
Frame rate                               : 43.066 FPS (1024 spf)
Frame count                              : 2251
Source frame count                       : 2254
Compression mode                         : Lossy
Compression mode                         : Lossy
Stream size                              : 410424
Stream size                              : 401 KiB (0%)
Stream size                              : 401 KiB
Stream size                              : 401 KiB
Stream size                              : 401 KiB
Stream size                              : 400.8 KiB
Stream size                              : 401 KiB (0%)
Proportion of this stream                : 0.00360
Source stream size                       : 410894
Source stream size                       : 401 KiB (0%)
Source stream size                       : 401 KiB
Source stream size                       : 401 KiB
Source stream size                       : 401 KiB
Source stream size                       : 401.3 KiB
Source stream size                       : 401 KiB (0%)
Source_StreamSize_Proportion             : 0.00360
Title                                    : Core Media Audio
Encoded date                             : UTC 2016-10-08 22:51:19
Tagged date                              : UTC 2016-10-08 22:52:12

Other #1
Count                                    : 112
Count of stream of this kind             : 2
Kind of stream                           : Other
Kind of stream                           : Other
Stream identifier                        : 0
Stream identifier                        : 1
Type                                     : meta
Duration                                 : 52268
Duration                                 : 52 s 268 ms
Duration                                 : 52 s 268 ms
Duration                                 : 52 s 268 ms
Duration                                 : 00:00:52.268
Duration                                 : 00:00:52.268
Frame count                              : 6
Bit rate mode                            : VBR

Other #2
Count                                    : 112
Count of stream of this kind             : 2
Kind of stream                           : Other
Kind of stream                           : Other
Stream identifier                        : 1
Stream identifier                        : 2
Type                                     : meta
Duration                                 : 52268
Duration                                 : 52 s 268 ms
Duration                                 : 52 s 268 ms
Duration                                 : 52 s 268 ms
Duration                                 : 00:00:52.268
Duration                                 : 00:00:52.268
Frame count                              : 1
Bit rate mode                            : CBR

ffprobe IMG_1438.MOV输出:

ffprobe version 3.1.3 Copyright (c) 2007-2016 the FFmpeg developers
  built with Apple LLVM version 7.3.0 (clang-703.0.31)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/3.1.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libxvid --disable-lzma --enable-vda
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 41.100 / 57. 41.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 47.100 /  6. 47.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'IMG_1438.MOV':
  Metadata:
    major_brand     : qt  
    minor_version   : 0
    compatible_brands: qt  
    creation_time   : 2016-10-08 22:51:19
    com.apple.quicktime.make: Apple
    com.apple.quicktime.model: iPhone 5
    com.apple.quicktime.software: 10.0.2
    com.apple.quicktime.creationdate: 2016-10-08T17:51:19-0500
  Duration: 00:00:52.27, start: 0.000000, bitrate: 17446 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 17375 kb/s, 25.04 fps, 120 tbr, 600 tbn, 1200 tbc (default)
    Metadata:
      rotate          : 90
      creation_time   : 2016-10-08 22:51:19
      handler_name    : Core Media Data Handler
      encoder         : H.264
    Side data:
      displaymatrix: rotation of -90.00 degrees
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 62 kb/s (default)
    Metadata:
      creation_time   : 2016-10-08 22:51:19
      handler_name    : Core Media Data Handler
    Stream #0:2(und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
    Metadata:
      creation_time   : 2016-10-08 22:51:19
      handler_name    : Core Media Data Handler
    Stream #0:3(und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
    Metadata:
      creation_time   : 2016-10-08 22:51:19
      handler_name    : Core Media Data Handler
Unsupported codec with id 0 for input stream 2
Unsupported codec with id 0 for input stream 3

更新
为了澄清:我上面的视频,缩放后输出高帧速率(120 FPS)的视频,在使用FFmpeg缩放之前和之后播放完美(没有同步问题,120 FPS文件大小仅增加约14%),我是只是试图理解为什么帧速率的增加发生(稍微超出Mulvya的注意,存储在容器中的帧率是错误的)。

从编程的角度来看,我遇到的最初问题是我使用来自FFmpeg的sterr控制台输出的frame=来确定进度,当帧数在输出上显着增加时报告错误结果( "我有372%完成编码?!");我已经read another stackoverflow answer并将我的代码更改为使用time=,这似乎是一种更强大的方式来显示FFmpeg进度。 (当然,还有FFmpeg的-progress选项。

改进原始命令

我的新命令,可以扩展,保留有用的帧速率和优化线程:

ffmpeg -i IMG_1438.MOV -vf scale=-2:600 -r 30 -vsync 0 IMG_1438_scaledTo600.MOV

30是"最大帧速率"来自mediainfo

感谢评论中的帮助,我现在知道我并不完全理解FFmpeg使用三个不同的时间戳来计算时间戳:tbntbctbr
它们由Robert Swain in 2009解释,他的解释也用于answer a Stackoverflow question about tbn, tbc, tbr

听起来,正如我在下面和Michael Rampe at another forum的Mulvya的评论中所说的那样,tbr被猜到了;从变量变为恒定帧速率视频时,经常但并不总是最佳值。

留下这两个问题......

"field rate and frame rate"不同时,

(1)tbr不正确?这会发生很多吗? (2)-r 30 30 mediainfo是{{1}}报告的最大帧速率,是大多数编解码器/容器组合的最佳方法吗? (或者,当我缩放H.264 / MPEG-4 AVC视频时,我应该只使用这种方法吗?)

1 个答案:

答案 0 :(得分:1)

(1)当“字段速率和帧速率”不同时,tbr不正确?这会发生很多吗?

取决于使用的编码/渲染应用程序和编解码器。请注意,tbr是指帧速率而非字段速率。 50个场对仍然存储在25帧中。所以,这本身并不是答案。

(2)是-r = 30,其中30是mediainfo报告的最佳帧速率的最佳方式......

如果您希望编码为恒定帧速率流,则是,添加-r max(其间没有=符号。)。否则只使用-vsync 0。默认情况下,FFmpeg在输出到MOV / MP4时编码为CRF流,并且它引用tbr作为要使用的值。因此,当流实际包含较少的帧时,它会复制帧以便满足tbr值。使用最大值的原因CFR编码的帧速率是这样的,因此不会丢弃帧。使用较低的值时,输入将包含具有更多帧数的部分,并且ffmpeg将下降以满足您设置的r