@kilrea

Как склеить несколько видео с помощью ffmpeg без потери качества?

Я хочу сделать видео из картинок, потом склеить с ним еще несколько видео записей.
Код для создания слайдшоу:

# для каждой картинки создаем видео 
# длительность всего слайдшоу равна dur

dur = 12

for num, pic in enumerate(os.listdir(path)):
	os.system('ffmpeg -loop 1 -i %s -r %s -vf scale=%s:%s -t %s -y %s.ts' % (path+pic, fps, w,h, dur/len(os.listdir(path)), num))

# соединяем временные файлы со слайдами в один
slides = [i for i in os.listdir('.')]
command = 'ffmpeg -i concat:"' + '|'.join(slides) + '" -vf scale={}:{} -framerate {} -y '.format(w,h,fps) + 'slideshow.mp4'
os.system(command)


После этого склеиваю с остальными видео:
videos = ['vids/begin.mp4', 'slideshow.mp4', 'vids.mp4']
command = 'ffmpeg -i concat:"' + '|'.join(videos) + '" -vf scale={}:{} -framerate {} -y '.format(w,h,fps) + 'result.mp4'
os.system(command)


Файл slideshow.mp4 получается в хорошем качестве, begin.mp4 и end.mp4 - тоже в хорошем качестве, а вот конечный файл result.mp4 в плохом. В чем причина и как склеить видео без потери качества?
  • Вопрос задан
  • 460 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Taus
Одним из хороших способов будет использование медиаконтейнеров без финализации для промежуточных файлов, как вы это делаете с .ts. Их можно склеивать без потери качества конечного файла. А финальный результат завернуть в mp4. Если у вас уже есть файлы *.mp4 с правильным кодеком, который надо склеить, то преобразуйте их в ts:
ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы