2016-05-11 8 views
1

Можно ли конкатенировать несколько файлов, если некоторые из файлов являются видео с аудио, а некоторые - только аудио. Конечный результат должен выглядеть следующим образом:ffmpeg: concat видео и аудиофайлы

-------------------------------------------------------- 
|###(v/a)### | ### (a) ### | ### (a) ### | ###(v/a)### | 
-------------------------------------------------------- 

v/a: video + audio 
a : audio only (blank screen) 

Я пытался сделать это с помощью следующей команды:

ffmpeg 
-i chunk1.mp4 
-i chunk2.m4a 
-i chunk3.mp4 
-filter_complex "[0:v:0] [0:a:0] [1:v:0] [1:a:0] [2:v:0] [2:a:0] concat=n=3:v=1:a=1 [v] [a]" 
-map "[v]" -map "[a]" -strict -2 result.mp4 

Так что я попытался использовать только звуковую дорожку от входа 1 ([1:a:0]), но, к сожалению, Я получаю сообщение об ошибке:

Stream specifier ':v:0' in filtergraph description [0:v:0] [0:a:0] [1:v:0] [1:a:0] [2:v:0] [2:a:0] concat=n=3:v=1:a=1 [v] [a] matches no streams. 

Я подумал, что это должно быть возможно как-то, так как я могу также объединить большой звуковой файл и небольшой видео с помощью FFmpeg. Результатом будет видеофайл, в котором последний кадр просто зависает, но звук все еще воспроизводится. Я хотел бы добиться того же результата либо с замороженным последним фреймом, либо просто с черными кадрами. Это возможно?

+0

Какова резолюция и частота кадров видео? – Mulvya

+0

@ Mulvya Я не знаю разрешения. У всех видеокубков определенно будет одно и то же, но это может варьироваться от задачи к задаче. То же самое касается частоты кадров. Так что, я думаю, мне хотелось бы, чтобы ffmpeg просто применил все, что у других видео-кусков. Если это невозможно, и мне нужно явно указать частоту кадров и/или разрешение, я уверен, что могу прочитать эти параметры вручную через ffprobe. – basilikum

ответ

2

Для команды, приведенной в Q, используйте

ffmpeg -i chunk1.mp4 -i chunk2.m4a -i chunk3.mp4 -filter_complex \ 
     "color=black:s=WxH:r=N:d=T[1v]; \ 
     [0:v:0] [0:a:0] [1v] [1:a:0] [2:v:0] [2:a:0] concat=n=3:v=1:a=1 [v] [a]" 
-map "[v]" -map "[a]" -strict -2 result.mp4 

где WxH является разрешение видео, N, что частота кадров и T длительность звукового файла.

+0

Отлично! Спасибо, это работает как шарм. – basilikum

+0

Кстати, я обнаружил, что частота кадров и длительность обоих не кажутся важными. В любом случае ffmpeg будет растягивать видео, чтобы соответствовать длине аудио. Итак, есть ли недостаток, если я просто укажу r = 20: d = 1 каждый раз? – basilikum

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