Почему мое видео не может воспроизводиться с того места, где я перетаскиваю панель воспроизведения?

Я застрял и действительно не знаю, как объяснить это правильно. Таким образом, я положил его в деталях непрофессионала.

У меня есть два 30-секундных видео в формате mp4, сохраненных в облачном хранилище.

  • video1 создан кем-то другим и
  • video2 генерируется мной на ffmpeg.

Они оба имеют одинаковый видеоконтент.

Моя проблема

Если я открою video2в браузере Safari, я не могу найти точное время (в секундах) на индикаторе выполнения видеоплеера.

Я имею в виду, например, что я предпринимаю шаги:

  1. Я ставлю видео на паузу,
  2. перетащите индикатор выполнения на первую секунду,
  3. Я играю видео.

видеоплеер перейдет к 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

Ответы (1)

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 ​​кадров.

ты как всегда спасаешь жизнь! Вы действительно спасли меня от дней депрессии!! Еще один вопрос, хочу ли я как хороший интервал между ключевыми кадрами, так и размер файла около 3 м. Тем временем я должен уменьшить битрейт видео и частоту звука, что, конечно, приведет к снижению качества. Я прав?
Уменьшить битрейт видео? да. Частота дискретизации звука не будет иметь большого значения.
понятно. добрый день!
мой звук hls имеет ту же частоту ключевого кадра. Но проблема все еще здесь. Есть ли какая-либо другая проблема, которая может повлиять на это?