Скажем, у меня есть 3 видеофайла и 2 аудиофайла: v1.mp4 , v2.mp4 , v3.mp4 , a2.mp3 , a1.mp3 .

Обычно каждый хочет "наложить" аудио на видео.

Что если кто-то действительно хочет следующее;

  • v1 играет, без звука
  • a1 проигрывает аудио, нет видео
  • v2 играет, без звука
  • a2 проигрывает аудио, нет видео
  • v3 воспроизводит видео, без звука

Все объединено в одном mp4. Мои попытки с треском провалились: либо аудио, объединенное в видео, либо поврежденное видео, либо длительное время кодирования.

В конце я хочу объединить эти видеопотоки вместе с "промежуточными" частями, которые являются пустыми и не имеют видео. я пытался

  • Сложный фильтр с color=black конкатенации. Работает, но перекодирует и очень медленно

    ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex "
    color=black:s=1280x720:d=5[s1];
    color=black:s=1280x720:d=10[s2];
    color=black:s=1280x720:d=15[s3];
    [0:v][s1][1:v][s2][2:v][s3]concat=n=6:v=1:a=0[aout]" -map [aout] -y output.mp4
    
  • Создайте группу color=black mp4 с нуля и используйте файл слияния. Видео становится зеленым и жалуется на сроки.

    ffmpeg -t 60 -s 640x480 -f rawvideo -pix_fmt rgb24 -r 25 -i /dev/zero empty.mpeg
    ffmpeg -f concat -i mylist.txt -c copy test.mp4
    

(список в основном 1.mp4 , empty.mp4 , 2.mp4 , empty.mp4 , 3.mp4)

  • Создайте кучу mp3-файлов с тишиной и объедините их вместе.

    ffmpeg -f concat -i mylist.txt -c copy test.mp4
    

(но mylist содержит файлы silence.mp3 вместо empty.mp4 между каждым)

1 ответ1

1

Ниже команда делает это. Он создает три звука без звука и два черных видеопотока с нуля, а затем объединяет их с другими потоками с помощью двух фильтров concat . (при условии, что все ваши входные данные имеют продолжительность 15 секунд).

ffmpeg -t 15 -f lavfi -i anullsrc -i a1.mp3 -t 15 -f lavfi -i anullsrc -i a2.mp3 -t 15 -f lavfi -i anullsrc -i v1.mp4 -f lavfi -i color=black:s=1280x720:r=25:d=15 -i v2.mp4 -f lavfi -i color=black:s=1280x720:r=25:d=15 -i v3.mp4 -filter_complex [0:a][1:a][2:a][3:a][4:a]concat=n=5:v=0:a=1[aud];[5:v][6:v][7:v][8:v][9:v]concat=n=5:v=1:a=0[vid] -c:v libx264 -c:a libmp3lame -map [vid] -map [aud] output.mp4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .