2015-05-22 25 views
3

Я пытаюсь объединить несколько видеороликов с помощью ffmpeg и применить переход между переходами между переходами. Я получил видео-перекрестное затухание, обращаясь к this. В то же время мне также необходимо иметь звук, чтобы использовать перекрестное затухание для оригинальных аудио, связанных с каждым видео. Я сослался на несколько мест, но они привели,FFmpeg audio crossfade

Переполнение буфера, падение.

This, this и this мало я говорил. Я получил решение от this и this, производя выход с опцией concat, где длина звука больше видео. Хотя я использовал точные значения fade, используемые в видео, он не работает, как в видео. Ниже приведена команда ffmpeg, которую я тестирую.

ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -i 4.mp4 -i 5.mp4 -f lavfi -i color=black -filter_complex " 
[0:v]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=out:st=15:d=2:alpha=1,setpts=expr=PTS-STARTPTS[va0]; 
[1:v]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=in:st=0:d=2:alpha=1,fade=t=out:st=30:d=2:alpha=1,setpts=expr=PTS-STARTPTS[va1]; 
[2:v]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=in:st=0:d=2:alpha=1,fade=t=out:st=43:d=2:alpha=1,setpts=expr=PTS-STARTPTS[va2]; 
[3:v]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=in:st=0:d=2:alpha=1,fade=t=out:st=54:d=2:alpha=1,setpts=expr=PTS-STARTPTS[va3]; 
[4:v]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=in:st=0:d=2:alpha=1,setpts=expr=PTS-STARTPTS[va4]; 
[5:v]scale=1280x720,trim=duration=69[over0]; 
[0:a]afade=t=out:st=15:d=2,asetpts=PTS-STARTPTS[a0]; 
[1:a]afade=t=in:st=0:d=2,afade=t=out:st=30:d=2,asetpts=PTS-STARTPTS[a1]; 
[2:a]afade=t=in:st=0:d=2,afade=t=out:st=43:d=2,asetpts=PTS-STARTPTS[a2]; 
[3:a]afade=t=in:st=0:d=2,afade=t=out:st=54:d=2,asetpts=PTS-STARTPTS[a3]; 
[4:a]afade=t=in:st=0:d=2,asetpts=PTS-STARTPTS[a4]; 
[a0][a1][a2][a3][a4]concat=n=5:v=0:a=1[outa]; 
[over0][va0]overlay[over1]; 
[over1][va1]overlay[over2]; 
[over2][va2]overlay[over3]; 
[over3][va3]overlay[over4]; 
[over4][va4]overlay=format=yuv420[outv]" 
-vcodec libx264 -preset fast -r 60 -b:v 45000k -aspect 1.78 -map [outv] -map [outa] -c:a libfdk_aac -ac 2 -b:a 128k -shortest test.mp4 

Кроме того, когда я использовать тот же asetpts как видео это результат тот же вопрос, упомянутых выше. Что я делаю неправильно здесь, и есть ли какой-либо другой метод, который я могу использовать, чтобы иметь как видео, так и звук, перечеркнутый?

ответ

0

Наконец-то решена проблема, добавив пространство без звука в начало каждого звука, следующего за первым. Это будет смешать звук один за другим.

[0:a]afade=t=out:st=15:d=2[a0]; 
[1:a]afade=t=in:st=0:d=2[a1]; 
aevalsrc=0:d=15[s1]; 
[s1][a1]concat=n=2:v=0:a=1[ac1]; 
[a0][ac1]amix[a] 
2

Я попытался упростить команду, которую вы используете выше (для наглядности), уменьшая только до двух видео/аудио потоков, но я думаю, что это должно относиться к 5 видео или более.

Я не думаю;

Буфер переполнения очереди, сброс.

это ошибка ... это предупреждение, связанное с вашим видео. Я также получаю их, но мой результат кажется прекрасным. Может быть, кто-то с большим опытом может дать вам больше информации здесь.

Я думаю, что у вас возникла проблема с тем, что ваш звук работает не так, как ожидалось, потому что вы используете фильтр concat. Это добавляет аудиопоток в конец предыдущего потока. Я думаю, что вы действительно хотите объединить/наложить ваши аудиопотоки, как в видеопотоках. Это может быть достигнуто с помощью amerge фильтра:

ffmpeg -y -i 1.mp4 -i 2.mp4 -f lavfi -i color=black -filter_complex "\   
[0:v]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=out:st=5:d=2:alpha=1,setpts=expr=PTS-STARTPTS[va0];\ 
[1:v]scale=iw*min(1280/iw\,720/ih):ih*min(1280/iw\,720/ih),pad=1280:720:(1280-iw*min(1280/iw\,720/ih))/2:(720-ih*min(1280/iw\,720/ih))/2,format=pix_fmts=yuva420p,fade=t=in:st=0:d=2:alpha=1,setpts=expr=PTS-STARTPTS+5/TB[va1];\ 
[2:v]scale=1280x720,trim=duration=10[over0];\         
[0:a]afade=t=out:st=5:d=2,asetpts=PTS-STARTPTS[a0];\        
[1:a]afade=t=in:st=5:d=2,asetpts=PTS-STARTPTS[a1];\        
[a0][a1]amerge[outa];\               
[over0][va0]overlay[over1];\              
[over1][va1]overlay=format=yuv420[outv]" \          
-vcodec libx264 -preset fast -r 60 -b:v 45000k -aspect 1.78 -t 12 -map [outv] -map [outa] -c:a libfdk_aac -ac 2 -b:a 128k -shortest test.mp4 

Этот пример принимает два видео и замирает между ними аудио и видео через 5 секунд.