Есть ли способ обрезать видео, кроме использования FFMPEG и MP4Parser? - PullRequest
0 голосов
/ 01 января 2019

Я использовал FFMPEG для обрезки видео, но это занимает слишком много времени для обработки видео.

String[] complexCommand = {"-ss", "" + startMs / 1000, "-y", "-i", yourRealPath, "-t", "" + (endMs - startMs) / 1000,"-vcodec", "mpeg4", "-b:v", "2097152", "-b:a", "48000", "-ac", "2", "-ar", "22050", filePath};

также использовал MP4Parser для того же, но некоторое время я получаю проблемы.для этого используется ниже lib.

com.googlecode.mp4parser:isoparser:1.1.21

Есть ли другой способ обрезки видео?

, например, продолжительность моего видео 20:00 и обрезка видео между 06: 00-09: 00продолжительность.

1 Ответ

0 голосов
/ 01 января 2019

Ваш пример выше перекодирует видео на основе команд, которые вы ему даете.Если вам НЕ нужно перекодировать видео, вы можете использовать опцию stream copy , которая напрямую копирует входной поток в выходной поток.Обратите внимание, что вам строго не гарантируется точное начальное поведение, поскольку у вас может не быть I-кадра или его эквивалента, который вам нужен в этой конкретной точке, или кодек, который я должен прыгнуть вперед или назад, чтобы найти его.Этот метод очень быстрый, потому что не нужно выполнять кодирование, это просто копирование из одного (файла) в другой.На моем ноутбуке класса 2018 мне потребовалось ~ 1,5 секунды, чтобы вырезать 3 минуты видео ...

$ time ffmpeg -hide_banner -y -i input.mpg -ss 6:00 -t 3:00 -c:v copy output.mpg      
[mpeg @ 0000024ffd46a740] start time for stream 0 is not set in estimate_timings_from_pts
Input #0, mpeg, from 'input.mpg':
  Duration: 00:29:57.45, start: 0.516689, bitrate: 4108 kb/s
    Stream #0:0[0x1bf]: Data: dvd_nav_packet
    Stream #0:1[0x1e0]: Video: mpeg2video (Main), yuv420p(tv, progressive), 1280x720 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
[mpeg @ 0000024ffd47d500] VBV buffer size not set, using default size of 230KB
If you want the mpeg file to be compliant to some specification
Like DVD, VCD or others, make sure you set the correct buffer size
Output #0, mpeg, to 'output.mpg':
  Metadata:
    encoder         : Lavf58.25.100
    Stream #0:0: Video: mpeg2video (Main), yuv420p(tv, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 59.94 fps, 59.94 tbr, 90k tbn, 59.94 tbc
Stream mapping:
  Stream #0:1 -> #0:0 (copy)
Press [q] to stop, [?] for help
[mpeg @ 0000024ffd47d500] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly
frame=10780 fps=0.0 q=-1.0 Lsize=   88314kB time=00:02:59.98 bitrate=4019.5kbits/s speed= 379x    
video:87826kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.556108%

real    0m1.546s
user    0m0.000s
sys     0m0.000s
...