У меня есть видео длиной 20 секунд (00.20.00).
Я хочу разделить его на 20 частей (часть 1, часть 2, пат 3, ... часть 20), затем я хочу вставить между этими разделами видеоэффект (часть 1, видеоэффект 1, часть 2, видеоэффект 1, часть 3, видеоэффект 1, .... пар20).

Я не представлял команду для ее выполнения, как я могу это сделать?

========================= Я методом проб и ошибок @Mulvya

ffmpeg -i inputvideo.mp4 -i effect.mp4 -filter_complex
   "[0]split=20[v1][v2][v3][v4][v5][v6][v7][v8][v9][v10][v11][v12][v13][v14][v15][v16][v17][v18][v19][v20];
    [v1]trim=0:1,setpts=PTS-STARTPTS[v1t];
    [v2]trim=1:2,setpts=PTS-STARTPTS[v2t];
    [v3]trim=2:3,setpts=PTS-STARTPTS[v3t];
    [v4]trim=3:4,setpts=PTS-STARTPTS[v4t];
    [v5]trim=4:5,setpts=PTS-STARTPTS[v5t];
    [v6]trim=5:6,setpts=PTS-STARTPTS[v6t];
    [v7]trim=6:7,setpts=PTS-STARTPTS[v7t];
    [v8]trim=7:8,setpts=PTS-STARTPTS[v8t];
    [v9]trim=8:9,setpts=PTS-STARTPTS[v9t];
    [v10]trim=9:10,setpts=PTS-STARTPTS[v10t];
    [v11]trim=10:11,setpts=PTS-STARTPTS[v11t];
    [v12]trim=11:12,setpts=PTS-STARTPTS[v12t];
    [v13]trim=12:13,setpts=PTS-STARTPTS[v13t];
    [v14]trim=13:14,setpts=PTS-STARTPTS[v14t];
    [v15]trim=14:15,setpts=PTS-STARTPTS[v15t];
    [v16]trim=15:16,setpts=PTS-STARTPTS[v16t];
    [v17]trim=16:17,setpts=PTS-STARTPTS[v17t];
    [v18]trim=17:18,setpts=PTS-STARTPTS[v18t];
    [v19]trim=18:19,setpts=PTS-STARTPTS[v19t];      
    [v20]trim=19:20,setpts=PTS-STARTPTS[v20t];
    [v1t][1][v2t][1][v3t][1][v3t][1][v4t][1][v5t][1][v6t][1][v7t][1][v8t][1][v9t][1][v10t][1][v11t][1][v12t][1][v13t][1][v14t][1][v15t][1][v16t][1][v17t][1][v18t][1][v19t][1][v20t]concat=n=39:v=1:a=0[v]" -map [v] processed.mp4

, , , [AVFilterGraph @ 03e5dae0] Слишком много входов, указанных для фильтра "concat". Ошибка инициализации сложных фильтров. Недействительным аргумент

2 ответа2

1

Чтобы сделать это в одной команде, используйте

ffmpeg -i video.avi -i effect.avi -filter_complex
       "[0]split=20[v1][v2][v3]...[v20];
        [v1]trim=0:1,setpts=PTS-STARTPTS[v1t];
        [v2]trim=1:2,setpts=PTS-STARTPTS[v2t];
        [v3]trim=2:3,setpts=PTS-STARTPTS[v3t];
        ...
        [v20]trim=19:20,setpts=PTS-STARTPTS[v20t];
        [v1t][1][v2t][1][v3t][1]...[v19t][1][v20t]concat=n=39:v=1:a=0[v]"
-map [v] processed.mp4

Я предположил, что нет звука.

На случай, если неясно, я пропустил запись всех операций обрезки и всех входных данных в фильтр concat. Это все должно быть указано.

0

ffmpeg -i myVideo.avi -acodec copy -f segment -segment_time 1 -vcodec copy -reset_timestamps 1 -map 0 -an video%d.avi

Взято с unix.stackexchange.com

Разделит видео на 20 сегментов с именем video1.avi - video20.avi; Затем нам нужно снова связать видео с видеоEffect1.avi между ними:

ffmpeg -f concat -i <(for f in ./video*.avi; do echo "file '$PWD/$f'" && echo "file '$PWD/videoEffect1.avi'"; done) -c copy output.avi

Больше информации на вики ffmpeg

Или, как одна огромная команда:

ffmpeg -i myVideo.avi -acodec copy -f segment -segment_time 1 -vcodec copy -reset_timestamps 1 -map 0 -an video%d.avi && ffmpeg -f concat -i <(for f in ./video*.avi; do echo "file '$PWD/$f'" && echo "file '$PWD/videoEffect1.avi'"; done) -c copy output.avi && rm -rf ./video[0-9]*.avi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .