Установите правильное время запуска ts-файла с помощью ffmpeg - PullRequest
1 голос
/ 08 февраля 2020

Я делю видео на несколько 10-секундных ts-частей (формат mpeg-ts), используя ffmpeg на windows.

Чтобы создать 2-ю часть (которая начинается через 10 секунд в видео и заканчивается на 20 секундах видео):

ffmpeg -i sample.avi -ss 00:00:10 -to 00:00:20 -vcodec libx264 -acodec aac -vf scale=426:-1 out1.ts

Но когда я проверяю файл с помощью ffprobe, он говорит:

Duration: 00:00:10.02, start: 1.458667, bitrate: 359 kb/s

Так что продолжительность в порядке, но время начала неверно. В любом случае я могу использовать ffmpeg, чтобы исправить это до 00:00:20? Конечно, лучшим решением было бы установить правильное время начала в моей первой команде, где я убрал 10-секундную часть, но я также был бы в порядке, выполнив вторую команду, чтобы зафиксировать время.

Is это возможно? Не могу найти любую документацию, и все примеры, которые я нашел, не для моей точной проблемы и, кажется, не работают, тогда я играюсь с ними.

Полный вывод из ffprobe:

ffprobe.exe out1.ts
ffprobe version git-2020-02-06-343ccfc Copyright (c) 2007-2020 the FFmpeg developers
  built with gcc 9.2.1 (GCC) 20200122
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 39.100 / 56. 39.100
  libavcodec     58. 68.100 / 58. 68.100
  libavformat    58. 38.100 / 58. 38.100
  libavdevice    58.  9.103 / 58.  9.103
  libavfilter     7. 74.100 /  7. 74.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Input #0, mpegts, from 'out1.ts':
  Duration: 00:00:10.02, start: 1.458667, bitrate: 359 kb/s
  Program 1
    Metadata:
      service_name    : Service01
      service_provider: FFmpeg
    Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(progressive), 426x260 [SAR 780:781 DAR 18:11], 25 fps, 25 tbr, 90k tbn, 50 tbc
    Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 131 kb/s

1 Ответ

1 голос
/ 09 февраля 2020

Вы можете добавить -muxdelay 10 аргумент.

Я нашел решение здесь .

Используя следующую команду:

ffmpeg -y -i sample.avi -ss 00:00:10 -to 00:00:20 -vcodec libx264 -acodec aac -vf scale=426:-1 -muxdelay 10 out1.ts   

Я получаю следующий результат из ffprobe:

Input #0, mpegts, from 'out1.ts':
  Duration: 00:00:10.05, start: 20.020222, bitrate: 141 kb/s

Я использовал следующие команды для тестирования:

  • Создание файла сэмпла AVI с синтезированным c видео и syntheti c аудио (в несжатом виде необработанный формат):

    ffmpeg -y -f lavfi -i testsrc=size=192x108:rate=30 -f lavfi -i sine=frequency=500 -c:v rawvideo -pix_fmt bgr24 -c:a pcm_s16le -ar 22050 -t 30 sample.avi
    
  • Выполнение команды из вашего вопроса и ffprobe (я добавил -y для перезаписи вывода):

    ffmpeg -y -i sample.avi -ss 00:00:10 -to 00:00:20 -vcodec libx264 -acodec aac -vf scale=426:-1 -muxdelay 10 out1.ts
    ffprobe out1.ts
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...