Я застрял и действительно не знаю, как объяснить это правильно. Таким образом, я положил его в деталях непрофессионала.
У меня есть два 30-секундных видео в формате mp4, сохраненных в облачном хранилище.
Они оба имеют одинаковый видеоконтент.
Моя проблема
Если я открою video2
в браузере Safari, я не могу найти точное время (в секундах) на индикаторе выполнения видеоплеера.
Я имею в виду, например, что я предпринимаю шаги:
видеоплеер перейдет к 0 и начнет воспроизведение вместо воспроизведения с 1 секунды.
Есть несколько временных интервалов, в video2
которых есть эта проблема.
Тем не менее, video1
не имеет этой проблемы.
видео1 информация из ffmpeg
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'origin.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf56.4.101
Duration: 00:00:33.78, start: 0.000000, bitrate: 584 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 545 kb/s, 23.98 fps, 23.98 tbr, 11988 tbn, 47.95 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 32 kb/s (default)
Metadata:
handler_name : SoundHandler
информация о видео2 из ffmpeg
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'my.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.71.100
Duration: 00:00:35.04, start: 0.000000, bitrate: 734 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 90:67 DAR 160:67], 599 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 129 kb/s (default)
Metadata:
handler_name : SoundHandler
video1
имеет очень короткий интервал между ключевыми кадрами — он имеет ключевой кадр каждые несколько кадров. video2
нет. У некоторых игроков есть возможность беззвучно декодировать до не-KF и начинать играть с точки поиска. Если у вас нет, то он начнется с ближайшего ключевого кадра, предшествующего точке поиска.
ffprobe origin.mp4 -show_entries frame=key_frame,pkt_pts_time -select_streams v -of compact=p=0 | grep ame=1
Результат:
key_frame=1|pkt_pts_time=0.000000
key_frame=1|pkt_pts_time=0.333667
key_frame=1|pkt_pts_time=0.667334
key_frame=1|pkt_pts_time=1.001001
key_frame=1|pkt_pts_time=1.334668
key_frame=1|pkt_pts_time=1.668335
key_frame=1|pkt_pts_time=2.002002
...
key_frame=1|pkt_pts_time=32.699366
key_frame=1|pkt_pts_time=33.033033
key_frame=1|pkt_pts_time=33.366700
key_frame=1|pkt_pts_time=33.700367
Видео2:
ffprobe my.mp4 -show_entries frame=key_frame,pkt_pts_time -select_streams v -of compact=p=0 | grep ame=1
Результат:
key_frame=1|pkt_pts_time=0.000000
key_frame=1|pkt_pts_time=2.293958
key_frame=1|pkt_pts_time=5.171833
key_frame=1|pkt_pts_time=7.257250
key_frame=1|pkt_pts_time=9.718042
key_frame=1|pkt_pts_time=13.221542
key_frame=1|pkt_pts_time=15.473792
key_frame=1|pkt_pts_time=21.271250
key_frame=1|pkt_pts_time=24.357667
key_frame=1|pkt_pts_time=29.195833
key_frame=1|pkt_pts_time=32.407375
Добавьте -g 8
команду транскодирования ffmpeg, чтобы размещать ключевой кадр каждые 8 кадров.
Си Сяо
Гьян
Си Сяо
Цзямо