Как корректно разрезать и соединить видео ffmpeg?
У меня есть видео, длительностью 10 секунд (original_video.mp4).
Разделяю видео на 2 видеофайла
ffmpeg -ss 00:00:00 -to 00:00:05 -i original_video.mp4 -c copy cut_0.mp4
ffmpeg -ss 00:00:06 -to 00:00:10 -i original_video.mp4 -c copy cut_1.mp4
Объединяю видео
ffmpeg -f concat -i join_video_filelist.txt -c copy join_video.mp4
join_video_filelist.txt
file 'cut_0.mp4'
file 'cut_1.mp4'
В результате, в объединенном видео, "на стыке" 4 - 5 секунды пропадает звук. Пропадает на секунду и потом снова появляется. Почему это происходит и как это исправить? Как корректно разрезать и соединить видео ffmpeg?
Ответы (1 шт):
Без перекодирования видео ffmpeg режет видео по размеру блока, по ключевому кадру. А у звука размер блока меньше и режется он по отметке времени.
Попробуй найти ключевой кадр рядом с нужным отрезком тамким кодом:
ffprobe -select_streams v -show_frames -show_entries frame=pkt_pts_time,pict_type -v quiet in.mp4 |
awk -F= '
/pict_type=/ { if (index($2, "I")) { i=1; } else { i=0; } }
/pkt_pts_time/ { if (i && ($2 >= $INTERVAL)) print $2; }
' | head -n 1
Вычти из получившигося немного чтоб ffmpeg не резанул по следующему кейфрейму вместо нужного.
Если резать нужно точно, то только перекодирование.