ffmpeg - продолжительность использования во входном текстовом файле - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь использовать ffmpeg для объединения сегментов видео с некоторым черным экраном.Для этого я сначала сгенерировал чистое 10-секундное видео (без звуковой дорожки) с:

$ ffmpeg -f lavfi -i color=black:s=320x240:r=1 -f lavfi -i anullsrc -t 10 -vcodec libvpx -an blank.mkv

Затем я создал самый простой из возможных сценариев в input.txt. file (содержимое ниже), чтобы иметь три секунды черного экрана, за которым следует некоторое видео (без звуковой дорожки):

file 'blank.mkv'
duration 3
file 'video_example.mkv'

И, наконец, запустил следующую команду ffmpeg, чтобы объединить содержимоеэтот входной файл:

$ ffmpeg -f concat -i input.txt -codec:v copy -codec:a copy output.mkv

Проблема, с которой я столкнулся, заключается в том, что duration 3 не рассматривается, поэтому в окончательном видео все еще есть десять секунд черных кадров (вместо трех)с последующим моим видео.А также «Немонотонное DTS в выходном потоке 0: 0 ...» сообщение отображается при использовании duration x в файле.Если я удаляю длительность, предупреждения исчезают, и сначала выводится 10-секундный черный экран.

Полный вывод команды concat ffmpeg:

$ ffmpeg -hide_banner -f concat -i input.txt -codec:v copy -codec:a copy output.mkv
Input #0, concat, from 'input.txt':
  Duration: N/A, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: vp8, yuv420p(progressive), 320x240, SAR 1:1 DAR 4:3, 1 fps, 1 tbr, 1k tbn, 1k tbc
    Metadata:
      ENCODER         : Lavc57.107.100 libvpx
      DURATION        : 00:00:10.000000000
File 'output.mkv' already exists. Overwrite ? [y/N] y
Output #0, matroska, to 'output.mkv':
  Metadata:
    encoder         : Lavf57.83.100
    Stream #0:0: Video: vp8 (VP80 / 0x30385056), yuv420p(progressive), 320x240 [SAR 1:1 DAR 4:3], q=2-31, 1 fps, 1 tbr, 1k tbn, 1k tbc
    Metadata:
      ENCODER         : Lavc57.107.100 libvpx
      DURATION        : 00:00:10.000000000
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
[concat @ 000000000031a440] DTS 3000 < 9000 out of order
[matroska @ 0000000000328420] Non-monotonous DTS in output stream 0:0; previous: 9000, current: 3000; changing to 9000. This may result in incorrect timestamps in the output file.
[matroska @ 0000000000328420] Non-monotonous DTS in output stream 0:0; previous: 9000, current: 4001; changing to 9000. This may result in incorrect timestamps in the output file.
[matroska @ 0000000000328420] Non-monotonous DTS in output stream 0:0; previous: 9000, current: 4998; changing to 9000. This may result in incorrect timestamps in the output file.
[matroska @ 0000000000328420] Non-monotonous DTS in output stream 0:0; previous: 9000, current: 6004; changing to 9000. This may result in incorrect timestamps in the output file.
[matroska @ 0000000000328420] Non-monotonous DTS in output stream 0:0; previous: 9000, current: 7002; changing to 9000. This may result in incorrect timestamps in the output file.
[matroska @ 0000000000328420] Non-monotonous DTS in output stream 0:0; previous: 9000, current: 8005; changing to 9000. This may result in incorrect timestamps in the output file.
frame= 5794 fps=0.0 q=-1.0 Lsize=    7109kB time=01:37:09.70 bitrate=  10.0kbits/s speed=5.16e+004x
video:7043kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.926229%

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

Другая, возможно, полезная информация:

$ ffprobe -hide_banner blank.mkv
Input #0, matroska,webm, from 'blank.mkv':
  Metadata:
    ENCODER         : Lavf57.83.100
  Duration: 00:00:10.00, start: 0.000000, bitrate: 1 kb/s
    Stream #0:0: Video: vp8, yuv420p(progressive), 320x240, SAR 1:1 DAR 4:3, 1 fps, 1 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      ENCODER         : Lavc57.107.100 libvpx
      DURATION        : 00:00:10.000000000

$ ffprobe -hide_banner video_example.mkv
Input #0, matroska,webm, from 'video_example.mkv':
  Metadata:
    encoder         : GStreamer matroskamux version 1.8.1.1
    creation_time   : 2018-05-04T17:57:04.000000Z
  Duration: 01:37:08.70, start: 15434.269000, bitrate: 9 kb/s
    Stream #0:0(eng): Video: vp8, yuv420p(progressive), 320x240, SAR 1:1 DAR 4:3, 1 fps, 1 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      title           : Video

$ ffmpeg -v
ffmpeg version 3.4.2 Copyright (c) 2000-2018 the FFmpeg developers
  built with gcc 7.3.0 (GCC)

1 Ответ

0 голосов
/ 12 мая 2018

Для видео и аудио файлов необходимо использовать inpoint / outpoint.

file 'blank.mkv'
outpoint 3
file 'video_example.mkv'

duration полезно для одиночных изображений, например, при создании слайд-шоу, или для необработанных аудио / видео потоков, где ffmpeg можетНадежно определить продолжительность носителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...