1

Я попробовал метод, описанный в ответе на вопрос «Как удалить несколько фрагментов из видео с помощью FFmpeg?». Работает хорошо, разве что звук отсутствует. Кто-нибудь может подсказать, как вывести как видео, так и аудио на выход?

Пример:
У меня есть 2-минутное видео, снятое в отпуске, о кенгуру. Есть 2 раздела (длиной около 6 сек.), Которые я хочу извлечь (включая аудио) в один короткий фрагмент, содержащий только эти 2 симпатичных фрагмента.
Я знаю, что могу извлечь два отдельных бита и соединить их, но упомянутая выше статья позволила мне сделать именно то, что я хотел, но НЕТ АУДИО, когда вы будете следовать этому методу.
Я хотел бы использовать аналогичный одиночный вызов ffMpeg.

1 ответ1

5

Здесь я предполагаю, что ваш исходный файл находится в контейнере 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

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