Ich habe Videos, denen das erste Keyframe fehlt. Wenn ich die Videodatei mit dem VLC-Player öffne, passiert daher bis zum ersten Keyframe nichts auf dem Bildschirm.
Beispielbild:https://i.stack.imgur.com/nBYrR.png(Ich kann der Frage kein Bild hinzufügen, da ich mindestens 10 Reputationspunkte benötige.)
Normalerweise wird das erste Keyframe innerhalb der ersten 10 Sekunden angezeigt und das Video wird abgespielt. Dann kann ich zurückspulen und mir auch die ersten 10 Sekunden ansehen.
Mit ffprobe habe ich die Position und Zeit zwischen den Keyframes untersucht.
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
Ich kann dieses Problem lösen, indem ich am Anfang der Videos (während der Kodierung) Keyframes hinzufüge. Aber die Lösung, die ich brauche, besteht darin, dieses Problem zu lösen, ohne Änderungen an den Videos vorzunehmen.
Meine FrageWie kann ich dieses Problem beheben? Ich muss mir dieses Video von Anfang an ansehen! Gibt es im VLC-Player eine Einstellung, um das Video bis zum ersten Keyframe abzuspielen? Ich habe alle Einstellungen von VLC durchgespielt, konnte aber nichts Nützliches finden.
BEARBEITEN: Das Ergebnis des ffprobe -show_streams 5-1601984964095.ts
Befehls, wie von @gyan angefordert.
>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]
Antwort1
Wenn Sie ein Schlüsselbild verloren haben, ist die Vorhersage normalerweise ungültig, was bedeutet, dass andere Bilder nicht dekodiert werden können und der Player sie überspringt.
Hierzu gibt es je nach Ihren Anforderungen mehrere Möglichkeiten.
- Wenn Sie das Originalvideo haben, fügen Sie das neueste Schlüsselbild einVorSie müssen die Wiedergabe starten.
- Wenn Sie das Originalvideo haben, das oben genannte jedoch nicht akzeptabel ist, müssen Sie das Video erneut kodieren, um das Schlüsselbild am Anfang des Bitstroms zu positionieren.
- Wenn das Original nicht vorliegt und das Schlüsselbild tatsächlich unwiederbringlich verloren ist, können die daraus vorhergesagten Bilder nicht wiedergegeben werden – wesentliche Informationen zur Dekodierung sind verloren.
- Sie können den Bitstrom bis zum nächsten Schlüsselbild kürzen. Dadurch wird die Wiedergabe zwar nicht früher gestartet, die schwarze (nicht abspielbare) Zeit am Anfang sollte jedoch vermieden werden.