Я пытаюсь удалить сегмент (00:26:00 - 00:32:30) из видеофайла input.mp4
.
Поскольку нет способа сделать это напрямую с помощью ffmpeg (насколько я знаю), я вместо этого обрезаю сегменты, которые мне нужны, в выводе, а затем объединяю их.
После небольшого поиска я обнаружил, что есть 2 способа сделать это:
- Использование
trim
как указано в этом ответе - Использование
seek
как указано в этом ответе.
К сожалению, оба эти метода не работают для меня.
Я собираюсь объяснить шаги, которые я выполнил в обоих методах:
1. Используя trim
:
РЕДАКТИРОВАТЬ: этот метод работает сейчас; вместо этого перейдите ко второму способу.
Используемая команда:
ffmpeg -i input.mp4 -filter_complex \
"[0:v]trim=duration=00:26:00[a]; \
[0:v]trim=start=00:32:30,setpts=PTS-STARTPTS[b]; \
[a][b]concat[c]" -map [c] out.mp4
Вывод команды: ссылка
Длина выходного файла составляет менее 1 минуты и составляет всего 6,8 МБ, тогда как размер входного файла составлял 900 МБ.
2. Используя seek
Используемая команда:
# Cut first wanted segment
ffmpeg -ss 00:00:00 -i input.mp4 -t 00:26:00 -c copy -avoid_negative_ts 1 first.mp4
# Cut second wanted segment
ffmpeg -ss 00:32:30 -i input.mp4 -c copy -avoid_negative_ts 1 second.mp4
# Combine all the wanted segments
ffmpeg -f concat -i input.txt -c copy output.mp4
где input.txt
содержит:
file first.mp4
file second.mp4
Вывод команды: ссылка (ошибка указана в строке 90: input.txt: Invalid argument
)
Выходной файл, который я получаю в этом случае, составляет всего около 500 МБ (входной файл 900 МБ) и содержит первое видео + первые несколько минут второго видео.
Детали моей системы:
Убунту 14.04
версия ffmpeg: ссылка
РЕДАКТИРОВАТЬ:
Метод 1, использующий trim
, теперь работает, благодаря комментарию @ Mulvya относительно записи секунд в качестве единицы времени вместо нотации HH:MM:SS, поскольку она нарушена.
Новая команда:
ffmpeg -i input.mp4 -filter_complex \
"[0:v]trim=duration=1500[av]; \
[0:a]atrim=duration=1500[aa];\
[0:v]trim=start=1980,setpts=PTS-STARTPTS[bv]; \
[0:a]atrim=start=1980,asetpts=PTS-STARTPTS[ba];\
[av][bv]concat[outv]; [aa][ba]concat=v=0:a=1[outa]" \
-map [outv] -map [outa] out.mp4
Но я все еще хочу знать, что случилось со вторым методом.