Вырежьте несколько частей видео с помощью ffmpeg - PullRequest
0 голосов
/ 30 мая 2018

В том, что я пытаюсь сделать, мне нужно удалить некоторые части видеофайла и создать из него новую.

Например , из видеофайлакак это:

===================

Я делаю два среза

======||=====||||==

и создаю новый меньший видеофайл:

=============

И когда я говорю 2, я имею в видупроизвольное количество отдельных срезов, в зависимости от видеофайла.

Если бы я хотел вырезать только одну часть, я бы сделал:

ffmpeg -i video.mp4 -ss 00:00:03.500 -to 00:00:08.500 -async 1 cut.mp4 -y

, которая отлично работает.Возможно, я мог бы сделать это много раз, а затем соединить все фрагменты вместе ... Но это очень неэффективно для больших видеофайлов.

Чтобы сделать два фрагмента, я смотрел на filter_complex .Я пытался сделать это правильно часами, но я не могу заставить это работать: /

Если я делаю что-то подобное, я получаю видео без звука:

command  = 'ffmpeg -i video.mp4 \
    -filter_complex "\
        [0]trim=start_frame=10:end_frame=20[v0];\
        [0]trim=start_frame=30:end_frame=40[v1];\
        [v0][v1]concat=n=2[v5]"\
     -map [v5]  -async 1 output.mp4'

Если я попытаюсь сделать это, все будет испорчено:

ffmpeg -y -i video.mp4 \
    -filter_complex "\
        [0:v]trim=start_frame=10:end_frame=20[v0];\
        [0:a]atrim=start=10:end=20[a0];\
        [0:v]trim=start_frame=30:end_frame=40[v1];\
        [0:a]atrim=start=30:end=40[a1];\
        [v0][a0][v1][a1]concat=2:v=1:a=1[v5][a]"\
     -map [v5] -map [a] -async 1 output.mp4

Я даже пытаюсь сделать это в Python с ffmpeg-python https://github.com/kkroening/ffmpeg-python, но ятакже не могу заставить работать звук.

Кто-нибудь может мне помочь?Большое спасибо !!

1 Ответ

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

Для этого лучше использовать фильтр выбора.

ffmpeg -i video -vf "select='between(t,4,6.5)+between(t,17,26)+between(t,74,91)',setpts=N/FRAME_RATE/TB" -af "aselect='between(t,4,6.5)+between(t,17,26)+between(t,74,91)',asetpts=N/SR/TB" out.mp4

выберите и его фильтр-аналог применяется к видео и аудио соответственно.Выбранные сегменты имеют значения времени от 4 до 6,5 секунд, от 17 до 26 секунд и, наконец, от 74 до 91 секунды.Временные метки делаются непрерывными с помощью setpts и соответствующего фильтра ..

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