ffmpeg неявно сдвигает видео и аудио - PullRequest
0 голосов
/ 02 марта 2020

Я разделил файл .mkv с аудио и видео на два файла с помощью следующей команды:

ffmpeg -i input.mkv -vn -codec copy out.wav #extract audio
ffmpeg -i input.mkv -an -codec copy out.mkv #extract video

И я просто объединил их в один .mkv файл:

ffmpeg -i out.mkv -i out.wav -codec copy final.mkv #this behaves quite strangely

Я думал, что начальный вход input.mkv и конечный вывод final.mkv должны быть точно такими же, но в final.mkv видео и аудио были смещены примерно на пять секунд. Используя ffprobe, я обнаружил, что причина была в том, что видео часть (out.mkv) была обрезана по длине (т.е. пять секунд) без причины.

Что здесь происходит? Как мне избежать этого странного сдвига?


Подробное объяснение:

В дальнейшем я буду использовать этот пример ввода , называемый input.mkv. Сначала извлеките из него видео и аудио.

$ ffmpeg -i input.mkv -vn -codec copy out.wav
$ ffmpeg -i input.mkv -an -codec copy out.mkv

Затем проверьте продолжительность их.

$ ffprobe -i out.wav 2>&1 | grep Duration
  Duration: 00:00:18.88, bitrate: 1536 kb/s
$ ffprobe -i out.mkv 2>&1 | grep Duration
  Duration: 00:00:18.87, start: 0.000000, bitrate: 1877 kb/s

Затем объедините их.

$ ffmpeg -i out.mkv -i out.wav -codec copy final.mkv

Наконец, проверьте длительность потоков.

$ ffprobe -i final.mkv 
Input #0, matroska,webm, from 'final.mkv':
  Metadata:
    ENCODER         : Lavf58.29.100
  Duration: 00:00:18.88, start: 0.000000, bitrate: 3414 kb/s
    Stream #0:0: Video: h264 (High), yuv420p(tv, bt709, progressive), 900x586 [SAR 1:1 DAR 450:293], 30.30 fps, 30.30 tbr, 1k tbn, 60 tbc (default)
    Metadata:
      DURATION        : 00:00:18.866000000
    Stream #0:1: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
    Metadata:
      DURATION        : 00:00:18.880000000

Странно, длительность видеопотока была обрезана с 18.8700 до 18.8660, хотя длина аудиопотока не изменяется вообще.

Кажется, чем длиннее видео, тем большую часть обрезают. (В моем случае одночасового видео обрезалось не менее пяти секунд.)


Информация о версии:

~ $ ffmpeg -version
ffmpeg version n4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 9.2.1 (Arch Linux 9.2.1+20200130-2) 20200130
configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmfx --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3
libavutil      56. 31.100 / 56. 31.100
libavcodec     58. 54.100 / 58. 54.100
libavformat    58. 29.100 / 58. 29.100
libavdevice    58.  8.100 / 58.  8.100
libavfilter     7. 57.100 /  7. 57.100
libswscale      5.  5.100 /  5.  5.100
libswresample   3.  5.100 /  3.  5.100
libpostproc    55.  5.100 / 55.  5.100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...