Mp4 文件可以在 Windows Quicktime 上正常播放,但视频帧在 VLC 中不按顺序播放,并且与音频不同步

Mp4 文件可以在 Windows Quicktime 上正常播放,但视频帧在 VLC 中不按顺序播放,并且与音频不同步

有人给我发了一个视频,我想把它嵌入到我正在制作的演示文稿中。但是,它无法按照作者的意图播放,无论是嵌入还是独立播放。我怀疑它是在 Mac 上编码的,但目前不确定使用了什么工具 - 仍在调查这些信息...

我发现视频在 Windows Quicktime v7.7.9 中播放正常,但使用 VLC v3.0.16 和 Windows Media Players 以及 K-Lite Media Player Classic 时,播放不正常。具体情况取决于哪个播放器,但 VLC 会显示大约 10 秒的不连续帧,然后是第一部分的帧,然后似乎视频播放挂起。WMP 播放的音频与视频不同步。

我应该补充一下,这是某人在幻灯片上讲话的录音,很多视频帧都相同 - 角落里没有说话的头像或任何东西。我认为这可能解释了帧速率出奇的低 - 没有太多不同的帧。

我尝试过几次使用 FFmpeg 重新编码,但无济于事。我想知道我还能提取哪些信息来帮助诊断问题。同时,我正在尝试让作者制作另一种导出方式,以防万一有帮助……

MediaInfo 报道:

General
CompleteName                     : C:\work\video\input.mp4
Format/String                    : MPEG-4
Format_Profile                   : Base Media / Version 2
CodecID/String                   : mp42 (isom/mp41/mp42)
FileSize/String                  : 10.0 MiB
Duration/String                  : 8 min 54 s
OverallBitRate_Mode/String       : Variable
OverallBitRate/String            : 157 kb/s
Encoded_Date                     : UTC 2021-11-24 19:15:52
Tagged_Date                      : UTC 2021-11-24 19:15:52

Video
ID/String                        : 2
Format/String                    : AVC
Format/Info                      : Advanced Video Codec
Format_Profile                   : High@L4
Format_Settings                  : CABAC / 2 Ref Frames
Format_Settings_CABAC/String     : Yes
Format_Settings_RefFrames/String : 2 frames
CodecID                          : avc1
CodecID/Info                     : Advanced Video Coding
Duration/String                  : 8 min 54 s
Source_Duration/String           : 10 min 4 s
BitRate_Mode/String              : Variable
BitRate/String                   : 26.9 kb/s
BitRate_Maximum/String           : 768 kb/s
Width/String                     : 1 920 pixels
Height/String                    : 1 080 pixels
DisplayAspectRatio/String        : 16:9
FrameRate_Mode/String            : Variable
FrameRate/String                 : 0.046 FPS
FrameRate_Minimum/String         : 0.010 FPS
FrameRate_Maximum/String         : 5.000 FPS
ColorSpace                       : YUV
ChromaSubsampling/String         : 4:2:0
BitDepth/String                  : 8 bits
ScanType/String                  : Progressive
Bits-(Pixel*Frame)               : 0.282
StreamSize/String                : 1.88 MiB (19%)
Source_StreamSize/String         : 2.01 MiB (20%)
Title                            : Core Media Video
Encoded_Date                     : UTC 2021-11-24 19:15:52
Tagged_Date                      : UTC 2021-11-24 19:15:52
CodecConfigurationBox            : avcC

Audio
ID/String                        : 1
Format/String                    : AAC LC
Format/Info                      : Advanced Audio Codec Low Complexity
CodecID                          : mp4a-40-2
Duration/String                  : 8 min 54 s
Source_Duration/String           : 8 min 54 s
BitRate_Mode/String              : Constant
BitRate/String                   : 128 kb/s
Channel(s)/String                : 1 channel
ChannelLayout                    : C
SamplingRate/String              : 44.1 kHz
FrameRate/String                 : 43.066 FPS (1024 SPF)
Compression_Mode/String          : Lossy
StreamSize/String                : 7.91 MiB (79%)
Source_StreamSize/String         : 7.91 MiB (79%)
Title                            : Core Media Audio
Encoded_Date                     : UTC 2021-11-24 19:15:52
Tagged_Date                      : UTC 2021-11-24 19:15:52

根据以下关于低帧率可能会让玩家感到困惑的评论,我尝试了几个我认为可以插入以产生更“预期”的输出帧率的选项:

ffmpeg -i input.mp4 -crf 10 -filter:v tblend -r 24 output.24fps.mp4
ffmpeg -i input.mp4 -filter:v "minterpolate=mi_mode=dup" output.mp4

在这两种情况下,视频中都会出现第一张幻灯片被删除的情况 - 因此视频从第二张幻灯片开始,然后音频就不同步了。有迹象表明 ffmpeg 输出中报告的问题可能与之有关:

c:\work\video>ffmpeg -y -i input.mp4 -crf 10 -filter:v tblend -r 24 output.24fps.mp4
ffmpeg version 4.4.1-essentials_build-www.gyan.dev Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 11.2.0 (Rev1, Built by MSYS2 project)
  configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 00000168edd2b740] decoding for stream 1 failed
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: isommp41mp42
    creation_time   : 2021-11-24T19:15:52.000000Z
  Duration: 00:08:54.25, start: 0.000000, bitrate: 157 kb/s
  Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 124 kb/s (default)
    Metadata:
      creation_time   : 2021-11-24T19:15:52.000000Z
      handler_name    : Core Media Audio
      vendor_id       : [0][0][0][0]
  Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 27 kb/s, 0.05 fps, 100 tbr, 600 tbn, 1200 tbc (default)
    Metadata:
      creation_time   : 2021-11-24T19:15:52.000000Z
      handler_name    : Core Media Video
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:1 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:0 -> #0:1 (aac (native) -> aac (native))
Press [q] to stop, [?] for help
[libx264 @ 00000168ee7bf380] using SAR=1/1
[libx264 @ 00000168ee7bf380] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 00000168ee7bf380] profile High, level 4.0, 4:2:0, 8-bit
[libx264 @ 00000168ee7bf380] 264 - core 164 r3075 66a5bc1 - H.264/MPEG-4 AVC codec - Copyleft 2003-2021 - 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=24 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=10.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'output.24fps.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 1
    compatible_brands: isommp41mp42
    encoder         : Lavf58.76.100
  Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 24 fps, 12288 tbn (default)
    Metadata:
      creation_time   : 2021-11-24T19:15:52.000000Z
      handler_name    : Core Media Video
      vendor_id       : [0][0][0][0]
      encoder         : Lavc58.134.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
  Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 69 kb/s (default)
    Metadata:
      creation_time   : 2021-11-24T19:15:52.000000Z
      handler_name    : Core Media Audio
      vendor_id       : [0][0][0][0]
      encoder         : Lavc58.134.100 aac
More than 1000 frames duplicated    1792kB time=00:03:04.85 bitrate=  79.4kbits/s dup=628 drop=0 speed=  30x
frame= 4100 fps=127 q=15.0 size=    5376kB time=00:05:01.51 bitrate= 146.1kbits/s dup=4092 drop=0 speed=9.37x

输出包含以下行:

[mov,mp4,m4a,3gp,3g2,mj2 @ 00000168edd2b740] 流 1 解码失败

我可以将 -analyzeduration 设置为更大的数字以消除故障,但我怀疑这只是掩盖而不是修复它。

如需进一步了解,请点击此处https://stackoverflow.com/questions/4425413/how-to-extract-the-1st-frame-and-restore-as-an-image-with-ffmpeg/4425466这应该提取第一帧:

ffmpeg -i input.mp4 -vf "select=eq(n\,0)" -vframes 1 out.png

但是它提供了演示文稿中的第二张幻灯片,而 QT 在屏幕上清楚地显示了第一张标题幻灯片至少 10 秒......

答案1

如果质量不是大问题:

使用音频/视频抓取器,例如OBS工作室,并在 Quicktime 中播放视频时捕捉视频。

相关内容