Как восстановить или исправить продолжительность видео в формате mp4

У меня есть фильм, который ffmpeg и другие программы утверждают, что его длина составляет 07:03:52, но реальное время воспроизведения на самом деле больше похоже на 2:35:00.

ffprobe video.mp4
ffprobe version 3.0.2 Copyright (c) 2007-2016 the FFmpeg developers
  built with gcc 5.3.1 (Debian 5.3.1-17) 20160429
  configuration: --prefix=/usr --extra-cflags='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security ' --extra-ldflags='-Wl,-z,relro' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-nonfree --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --enable-libvpx --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-librtmp --enable-avfilter --enable-libfreetype --disable-decoder=amrnb --enable-libvo-amrwbenc --enable-libtesseract --libdir=/usr/lib/x86_64-linux-gnu --disable-vda --enable-libbluray --enable-libcdio --enable-gnutls --enable-frei0r --enable-openssl --enable-libass --enable-libopus --enable-fontconfig --enable-libpulse --disable-mipsdsp --disable-mips32r2 --disable-msa --disable-mipsfpu --disable-mipsdspr2 --enable-libvidstab --enable-libzvbi --enable-avresample --enable-libutvideo --enable-libfdk-aac --enable-libx265 --enable-libbs2b --enable-libilbc --enable-libopenh264 --enable-libkvazaar --enable-libsnappy --enable-libsoxr --enable-libiec61883 --enable-vaapi --enable-opencl --enable-libdc1394 --disable-altivec --shlibdir=/usr/lib/x86_64-linux-gnu
  libavutil      55. 17.103 / 55. 17.103
  libavcodec     57. 24.102 / 57. 24.102
  libavformat    57. 25.100 / 57. 25.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 31.100 /  6. 31.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 1
    compatible_brands: isomavc1
    creation_time   : 2012-12-12 07:03:52
  Duration: 07:13:45.09, start: 0.000000, bitrate: 274 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x528 [SAR 1:1 DAR 80:33], 601 kb/s, 23.98 fps, 23.98 tbr, 96k tbn, 47.95 tbc (default)
    Metadata:
      creation_time   : 2012-12-12 07:03:52
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 92 kb/s (default)
    Metadata:
      creation_time   : 2012-12-12 07:04:15
      handler_name    : GPAC ISO Audio Handler

Есть ли кто-нибудь, кто может помочь мне исправить время воспроизведения/длительность с помощью команды терминала на debian/centos

У меня установлен HandBrake-cli + FFmpeg

ОБНОВЛЕНИЕ Мысль: поскольку видео отлично воспроизводится в различных проигрывателях и частота кадров правильная, почему такие кодировщики, как HandBrake и ffmpeg, не могут рассчитать правильную продолжительность?

ОБНОВЛЕНИЕ 2 - Решение Я нашел это решение на сайте duckduckgo.com и нашел полезное решение на хорошем... торрент-сайте.

ffmpeg -i video.mp4 -t 2:09:39 -c:v copy -c:a copy -c:s copy out.mp4

Впрочем, это не исправление или какая-то акклиматизация работы, но это сработало.

Так вызовите, что это делает

Любая оптимизация или адаптация к этой рабочей нагрузке по-прежнему приветствуется.

07:03:52сообщается как время создания, хотя расчетная продолжительность составляет 07:13:45.09. Попробуйте ремукс:ffmpeg -i video.mp4 -c copy out.mp4
Привет @Mulvya, спасибо за повтор и предложение, пробовал, но выдает ту же ошибку во время воспроизведения. Также пытался конвертировать его в другие форматы, такие как webm, avi, mov и т. д.... то же самое :(
За исключением опции ручного времени, ваше решение такое же, как у меня. Запустите ffprobe video.mp4 -show_entries stream=codec_type,start_time,duration -of compactи покажите результат.
Привет, я думал, что ответил в этой теме, но я нашел решение, используя параметры -s -ss, чтобы просто сократить длину видео, и теперь оно воспроизводится прекрасно.
Команда из Обновления 2 сработала как по маслу... «Звездные врата» — отличный фильм, не так ли?

Ответы (2)

Хоакин, то, что вы предложили в своем обновлении 2, - это ремикс. В качестве альтернативы тому, что вы предложили, можно использовать ручное редактирование атома .

Ручное редактирование есть

(а) намного быстрее - просто изменяются метаданные

(б) может применяться в обоих направлениях - для увеличения и уменьшения масштаба. Мне лично удалось уменьшить длину путем повторного мультиплексирования, но мне не удалось ее увеличить.

У меня такая же проблема. Я решил это, удалив звук из видео. Вот почему видео кажется замороженным, но оно продолжает воспроизводиться из-за продолжительности звука.

По этой причине вы можете удалить весь звук из видеофайла, используя опцию «-an» ffmpeg. Когда он удален, неправильное время в видео не существует. Вы можете извлечь звук из исходного видеофайла, сопоставить его продолжительность с продолжительностью видео, а затем вы кодируете видео и аудио файлы вместе, в результате чего зависшие видеокадры не воспроизводятся.

например.

ffmpeg -i video_to_encode.MP4  -r 16 -crf 18  -vcodec libx264 -vb 10M -an  video_output.avi