Здесь я предполагаю, что ваш исходный файл находится в контейнере mp4
, но метод должен работать и для других контейнеров.
Один шаг метода - (немного более сложный) Также смотрите ответ, данный ptQa в ссылочной теме. Но вот то же самое с добавленным звуком:
ffmpeg -i inputfile.mp4 -filter_complex "[0:v]trim=start=10:end=16,setpts=PTS-STARTPTS[a]; [0:v]trim=start=20:end=26,setpts=PTS-STARTPTS[b]; [0:a]atrim=start=10:end=16,asetpts=PTS-STARTPTS[c]; [0:a]atrim=start=20:end=26,asetpts=PTS-STARTPTS[d]; [a][c][b][d]concat=n=2:v=1:a=1[e][f]" -map '[e]' -map '[f]' -strict -2 outputfile.mp4
Это добавляет аудиопоток и необходимые пэды для получения звука.
Предусмотрено для полноты:
Простой способ: вы можете использовать двухэтапный процесс, о котором вы уже знаете:
Сначала вырежьте и извлеките 2 фрагмента из видео во всю длину.
Второй Соедините эти 2 части вместе.
Это должен быть легкий выход.
Чтобы отрезать кусок, скажем, с третьей по девятую секунду:
ffmpeg -i in.mp4 -ss 00:00:03 -to 00:00:09 -c:v copy -c:a copy part1.mp4
Вы можете повторить процесс для второй части. Если это от 10 до 16 секунды:
ffmpeg -i in.mp4 -ss 00:00:10 -to 00:00:16 -c:v copy -c:a copy part2.mp4
Также смотрите эту ветку для более подробной информации.
Теперь у вас есть 2 файла, к которым вы можете присоединиться. Вы можете "объединить" как минимум 3 разными способами. Способ сделать это без перекодирования - сделать это с помощью опции demuxer. Создайте текстовый файл с именем (скажем) joinlist.txt с таким содержанием:
file 'part1.mp4'
file 'part2.mp4'
Чтобы объединить два файла, поместите 2 фильма и текст (joinlist.txt) в одну папку и используйте эту команду:
ffmpeg -f concat -i joinlist.txt -c copy joinedfile.mp4