![VLC 媒体播放器缺少初始关键帧问题导致视频开始时出现几秒钟的空白屏幕](https://linux22.com/image/1636652/VLC%20%E5%AA%92%E4%BD%93%E6%92%AD%E6%94%BE%E5%99%A8%E7%BC%BA%E5%B0%91%E5%88%9D%E5%A7%8B%E5%85%B3%E9%94%AE%E5%B8%A7%E9%97%AE%E9%A2%98%E5%AF%BC%E8%87%B4%E8%A7%86%E9%A2%91%E5%BC%80%E5%A7%8B%E6%97%B6%E5%87%BA%E7%8E%B0%E5%87%A0%E7%A7%92%E9%92%9F%E7%9A%84%E7%A9%BA%E7%99%BD%E5%B1%8F%E5%B9%95.png)
我的视频缺少初始关键帧。因此,当我使用 VLC 播放器打开视频文件时,屏幕上直到第一个关键帧才出现任何内容。
示例图片:https://i.stack.imgur.com/nBYrR.png(我无法在问题上添加图片,因为我至少需要 10 个声誉点。)
通常,它会在前 10 秒内遇到第一个关键帧,然后视频开始播放。然后我可以倒回去看前 10 秒。
使用 ffprobe,我检查了关键帧之间的位置和时间。
ffprobe -loglevel error -skip_frame nokey -select_streams v:0 -show_entries frame=pkt_pts_time -of csv=print_section=0 5-1601984964095.ts
3610.187967
3620.185489
3630.193133
3640.187944
3650.185311
3660.182822
3670.188500
3680.184133
3690.185078
3700.182911
3710.183367
3720.182778
3730.184022
3740.184567
3750.182689
3760.185767
3770.184700
3780.190100
3790.189033
3800.184422
3810.195578
3820.184767
3830.189644
3840.191533
3850.200800
3860.189211
3870.186956
3880.182989
3890.187878
3900.180167
3910.179522
3920.181411
3930.182022
3940.186422
3950.185778
3960.189856
3970.192444
3980.182833
3990.182367
4000.181000
4010.184000
4020.183622
4030.184178
4040.186367
4050.180144
4060.177833
4070.194067
4080.197444
4090.197700
4100.178944
4110.185444
4120.180544
4130.186956
4140.184967
4150.188178
4160.202444
4170.193300
我可以通过在视频开头添加关键帧(编码期间)来解决此问题。但我需要的解决方案是在不对视频进行任何更改的情况下解决此问题。
我的问题是 我该如何解决这个问题?我必须从头开始看这个视频!Vlc 播放器中是否有设置可以播放视频直到第一个关键帧?我篡改了 VLC 的所有设置,但没有找到任何有用的东西。
编辑ffprobe -show_streams 5-1601984964095.ts
: @gyan 请求的命令的结果。
>ffprobe -show_streams 5-1601984964095.ts
ffprobe version N-99830-g112fe0ff19 Copyright (c) 2007-2020 the FFmpeg developers
built with gcc 9.3-win32 (GCC) 20200320
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-zlib --enable-libxml2 --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-opencl --enable-libvmaf --disable-vulkan --enable-libvorbis --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-libdavs2 --enable-ffnvcodec --enable-cuda-llvm --disable-libglslang --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-libs=-lgomp
libavutil 56. 60.100 / 56. 60.100
libavcodec 58.112.101 / 58.112.101
libavformat 58. 64.100 / 58. 64.100
libavdevice 58. 11.102 / 58. 11.102
libavfilter 7. 88.100 / 7. 88.100
libswscale 5. 8.100 / 5. 8.100
libswresample 3. 8.100 / 3. 8.100
libpostproc 55. 8.100 / 55. 8.100
Input #0, mpegts, from '5-1601984964095.ts':
Duration: 00:09:28.41, start: 3610.187967, bitrate: 1656 kb/s
Program 1
Stream #0:0[0x41]: Video: h264 (High 4:2:2) (HDMV / 0x564D4448), yuv422p(tv, bt470bg/smpte170m/bt709, progressive), 720x576 [SAR 1:1 DAR 5:4], 25 fps, 25 tbr, 90k tbn, 50 tbc
[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=High 4:2:2
codec_type=video
codec_time_base=1/50
codec_tag_string=HDMV
codec_tag=0x564d4448
width=720
height=576
coded_width=720
coded_height=576
closed_captions=0
has_b_frames=2
sample_aspect_ratio=1:1
display_aspect_ratio=5:4
pix_fmt=yuv422p
level=30
color_range=tv
color_space=bt470bg
color_transfer=bt709
color_primaries=smpte170m
chroma_location=left
field_order=progressive
timecode=N/A
refs=1
is_avc=false
nal_length_size=0
id=0x41
r_frame_rate=25/1
avg_frame_rate=25/1
time_base=1/90000
start_pts=324916917
start_time=3610.187967
duration_ts=51156594
duration=568.406600
bit_rate=N/A
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
[/STREAM]
答案1
如果丢失了一张关键图片,那么通常预测就会被打破,这意味着其他图片无法解码,玩家将跳过它们。
根据您的要求,有多种方法可以处理这个问题。
- 如果有原始视频,请附上最新的关键图片前您需要播放才能开始。
- 如果您有原始视频,但上述情况不可接受,则需要重新编码视频以将关键帧定位在比特流的开始处。
- 如果您没有原件,而关键图片确实丢失且无法恢复,那么您就无法播放从中预测的图片——解码它们所需的基本信息就消失了。
- 您可以将比特流修剪到下一个关键帧;这不会提前开始播放,但应该可以避免开始时的黑屏(无法播放)时间。