У меня есть два видео, которые я хочу обрезать, а затем объединить обрезанный вывод. Они все одинакового размера / кодека, поэтому я бы хотел сделать это без перекодирования. Но если я сделаю:
ffmpeg -i clip1.mp4 -ss 1.2 -t 2.0 -c copy clip1.trimmed.mp4
ffmpeg -i clip2.mp4 -ss 0.2 -t 2.0 -c copy clip2.trimmed.mp4
ffmpeg -filter_complex '[0:0] [0:1] [1:0] [1:1] concat=n=2:v=1:a=1 [v] [a]'\
-map [v] -map [a] -c:v libx264 merge.mp4
У объединенного видео есть проблемы с аудио / видео синхронизацией. Этого не произойдет, если я заменю -c copy
на -vcodec libx264
в команде обрезки. Возможно ли, что, не перекодировав, что-то пойдет не так с синхронизацией?
Правильный ответ, от Mulvya:
ffmpeg -ss 1.2 -t 2.0 -i clip1.mp4 -ss 0.2 -t 2.0 -i clip2.mp4 \
-filter_complex '[0:v] [0:a] [1:v] [1:a] concat=n=2:v=1:a=1 [v] [a]" \
-map [v] -map [a] -c:v libx264 merge.mp4
В случае, если это поможет, я бы добавил, что синтаксис для добавления определенных клиповых фильтров выглядит так:
ffmpeg -ss 1.2 -t 2.0 -i clip1.mp4 -ss 0.2 -t 2.0 -i clip2.mp4 \
-filter_complex '[0:v]scale=1920:960[v0]; [v0] [0:a] [1:v] [1:a] concat=n=2:v=1:a=1 [v] [a]" \
-map [v] -map [a] -c:v libx264 merge.mp4