2016-03-07 4 views
2

Я пишу скрипт, чтобы объединить/нарезать произвольные видеофайлы с S3 на одно выходное видео. До сих пор я делаю это, сначала обрезая видео до их надлежащей длины, используя ffmpeg -i input-X.mp4 -ss start -t duration slice-X.mp4 и рекомбинируя результирующие фрагменты с фильтром ffmpeg concat.Сочетание видеороликов с ffmpeg с использованием кроссфейдов и простых разрезов

Я хочу, чтобы иметь возможность перекрестного скрещивания и вырезания между видео. concat не поддерживает переходы. Каков наилучший способ объединить видео с кроссфейдами и сокращениями в командной строке Linux? Является ли ffmpeg лучшим инструментом для работы?

Мой вопрос похож на "How do you create a crossfade transition between multiple videos in FFMPEG?", но мне не обязательно использовать ffmpeg. Кроме того, я хочу, чтобы уметь исчезать между некоторыми срезами и срезать между другими.

ответ

0

Я закончил это, итерации на каждом фрагменте и добавления каждого к временному выходному файлу.

[выход] < - срез копии 1
[выход] < - разрез срез 2 на выход
[выход] [срез 2] < - замирание среза 3 на выход
[ выход] [ломтик 2] [склейка] [ломтик 3] < - замирание срез 4 на выход и т.д. ...

Так что п инструкции FFmpeg для нарезать ввод видео до нужной длины, и затем n-1 инструкции ffmpeg, чтобы объединить их все с соответствующими переходами.

+0

Вы повторно кодируете видео много. Вы могли бы сделать это в одной, хотя и длинной, команде. Если вам интересно, я напишу это в ближайшие пару дней. – Mulvya

+0

@Mulvya Мне было бы интересно увидеть эту мерзость да – Zach

+0

Отрицание. – Mulvya

3

Ниже приведен шаблон шага команды, предполагающий пять фрагментов.

ffmpeg -i input.mp4 -i input.mp4 -i input.mp4 -i input.mp4 -i input.mp4 \ 
-filter_complex \ 
"[0:v]trim=0.5:4.5,setpts=PTS-STARTPTS[1]; \ 
[1:v]trim=12:17,setpts=PTS-STARTPTS+(3/TB),format=yuva420p,fade=in:st=3:d=1:alpha=1[2]; \ 
[2:v]trim=34.1:36,setpts=PTS-STARTPTS+(7/TB),format=yuva420p,fade=in:st=7:d=1:alpha=1[3]; \ 
[3:v]trim=21:25,setpts=PTS-STARTPTS[4]; \ 
[4:v]trim=27:31,setpts=PTS-STARTPTS+(3/TB),format=yuva420p,fade=in:st=0:d=1:alpha=1[5]; \ 
[0:a]atrim=0.5:4.5,asetpts=PTS-STARTPTS[1a]; \ 
[1:a]atrim=12:17,asetpts=PTS-STARTPTS[2a]; \ 
[2:a]atrim=34.1:36,asetpts=PTS-STARTPTS[3a]; \ 
[3:a]atrim=21:25,asetpts=PTS-STARTPTS[4a]; \ 
[4:a]atrim=27:31,asetpts=PTS-STARTPTS[5a]; \ 
[1][2]overlay,format=yuv420p[12]; \ 
[12][3]overlay,format=yuv420p[123]; \ 
[4][5]overlay,format=yuv420p[45]; \ 
[1a][2a]acrossfade=d=1[12a]; \ 
[12a][3a]acrossfade=d=1[123a]; \ 
[4a][5a]acrossfade=d=1[45a]; \ 
[123][123a][45][45a]concat=n=2:v=1:a=1[v][a]" \ 
-map [v] -map [a] SingleStepOutput.mp4 

Я ввожу видео несколько раз, один раз для каждого среза, потому что с помощью одного входной подкладки (даже с split/asplit) приводит к переполнению буфера. используются

В setpts/asetpts фильтры, потому что trim/atrim унос оригинальные временные метки. Фильтры setpts смещены для срезов, которые должны затухать. Значение смещения равно preceding slide duration - crossfade duration. yuva420p необходим для создания альфа-канала, значение которого фактически модулируется фильтром затухания.

 Смежные вопросы

  • Нет связанных вопросов^_^