ffmpeg для преобразования и объединения 3 видео в одно широкоэкранное видео

У меня есть три файла .mov с видео в Apple ProRes (apcn) и звуком в PCM S24 LE (in24), одинаковой длины и размера (1920x1080), частоты кадров (23,976024) и с одинаковой звуковой дорожкой. Хотелось бы:

  • конвертировать в видео H.264 и аудио AAC, сохраняя очень хорошее качество (для публичного показа) и

  • сгенерировать одно широкоэкранное видео в формате H.264/AAC, т. е. оно будет иметь размеры 1920 пикселей, умноженные на 3, и высоту 1080 пикселей.

Для создания широкоформатного изображения, которое я разработал, я могу использовать эту команду, предполагая, что я подготовил отдельные файлы mp4:

ffmpeg -i left.mp4 -i centre.mp4 -i right.mp4 
   -filter_complex "[0:v:0][1:v:0][2:v:0]hstack=inputs=3" triple.mp4

Основной вопрос:

Должен ли я выполнять процесс в два этапа - (а) конвертировать файлы, (б) создавать широкоэкранные файлы - или это означает, что широкоэкранное видео перекодируется, поэтому его качество хуже? Я бы хотел сохранить отдельные файлы, поэтому, если нет других последствий, я бы предпочел сделать это в два этапа. Если я должен сделать преобразование в H.264 одновременно с созданием широкоэкранного режима, как мне объединить разные команды?

Подвопросы:

  1. При подготовке широкоформатного изображения я столкнулся с альтернативным методом, overlayкак показано ниже. Есть ли преимущество в любом случае? Вроде как overlayдолжно быть медленнее, но при тестировании выглядело примерно так же.

    ffmpeg -i left.mp4 -i centre.mp4 -i right.mp4 -filter_complex "[0:v:0]pad=iw*3:ih[bg]; [bg][1:v:0]overlay=w[leftcentre]; [leftcentre][2:v:0]overlay=w*2" triple.mp4

  2. При подготовке широкоформатного изображения я думаю , что ffmpeg выбирает звук только из одного из входных файлов. Так как звук одинаков на всех, для меня не имеет значения, какой из них. Так ли это или это как-то объединяет их?

  3. Прав ли я, думая, что такой термин, как [1:v:0]в filter_complexвыражении, означает «второй вход, только первая видеодорожка»?

  4. Вот моя команда для преобразования файлов .mov, которая, кажется, работает по желанию. Есть ли в этом что-то явно не так?

    ffmpeg -i left.mov -c:v libx264 -preset medium -tune film -crf 16 -c:a aac -b:a 256k left.mp4

Могу я спросить, как продвигается ваш проект? Я планирую сделать то же самое, но я не знаю, сработает ли то, что я хочу сделать. Я планирую использовать два кармана osmo и щелкнуть запись одновременно, а также один слева и один справа для записи одновременно. Я думаю, что это очень похоже на то, что у вас более широкий взгляд. Могу я спросить, есть ли у вас образец или как он получился? Большое спасибо, и я надеюсь услышать от всех
Привет! Проект работал хорошо, я использовал команды ffmpeg, подобные приведенным выше, чтобы создать один файл широкоэкранного фильма. Я использовал это, чтобы воспроизвести его на трех проекторах с помощью Matrox TripleHead2Go.
fwiw это команда, которую я использовал (я думаю):ffmpeg -i 1920_LEFT.mov -i 1920_CENTRE.mov -i 1920_RIGHT.mov -filter_complex "[0:v:0][1:v:0][2:v:0]hstack=inputs=3" -c:v libx264 -tune film -crf 16 -b:a 256k myOutputFile.mp4
К вашему сведению, моим источником были не записи с нескольких камер, а несколько часов записей с одной камеры, которые были отредактированы в многоэкранное изображение, которое должно было проецироваться с использованием трех проекторов одновременно. Я объединял три видео в одно широкоэкранное, чтобы обеспечить их точную синхронизацию при воспроизведении, поскольку они будут воспроизводиться непрерывно в течение нескольких дней в среде галереи, и никто не будет проверять синхронизацию. Поэтому мы использовали Matrox TripleHead2Go для разделения широкоэкранного видео на три отдельных, но синхронизированных выхода для проекторов. Был только один звуковой поток.
Это на самом деле не отвечает на вопрос. Если у вас есть другой вопрос, вы можете задать его, нажав Задать вопрос . Вы также можете добавить вознаграждение , чтобы привлечь больше внимания к этому вопросу, когда у вас будет достаточно репутации . - Из обзора

Ответы (1)

С точки зрения качества лучше использовать оригинальные MOV, но если стек на основе MP4 выглядит нормально, это окончательный арбитр.

ffmpeg -i left.mov -i centre.mov -i right.mov 
-filter_complex "[0:v:0][1:v:0][2:v:0]hstack=inputs=3"
-c:v libx264 -tune film -crf 16 -b:a 256k triple.mp4

При использовании оригиналов не имеет значения, делаете ли вы это за один шаг или за два. В целях оптимизации я бы сделал это двумя, тогда два кодирования не будут конкурировать за память или процессор.

  1. stackФильтры несколько эффективнее . Они требуют, чтобы все входы имели одинаковый размер по нормали к направлению соединения, т. е. одинаковую высоту для hstack. Наложение — это общий фильтр, поэтому он не работает. Кроме того, стековые фильтры будут зависать на первом и последнем кадре входных данных, которые начинаются поздно или заканчиваются раньше.

  2. В цифровых файлах аудио и видео независимы, т. е. они существуют в одном файле и синхронизируются с помощью меток времени, но логически они являются отдельными объектами. ffmpeg использует параметры -map для выбора потоков для включения в вывод. При отсутствии какой-либо опции -map он выбирает один звук — «лучший» — из всех входных данных. См. https://ffmpeg.org/ffmpeg.html#Stream-selection

  3. [1:v:0]... " означает "второй вход, только первая видеодорожка"? " --> Да.

  4. Выглядит хорошо. Подходящее tuneзначение зависит от материала.

Большое спасибо! Я только что сделал это в два этапа: создал файлы .mp4, а затем использовал hstackих для создания .mp4 тройной ширины. Я удивлен, увидев, что размер файла тройной ширины меньше , чем размер любого отдельного файла .mp4! Средство просмотра битрейта показывает мне, что файл с тройной шириной имеет значительно более низкий битрейт (в среднем 12 Мбит/с вместо 18 Мбит/с), несмотря на то, что его ширина в три раза больше. Это перекодирование с использованием некоторых значений по умолчанию, и мне нужно использовать некоторые аргументы для контроля уровня качества этого перекодирования?
Просто для ясности: вы использовали MP4 или MOV в качестве источника для стека?
Я использовал .mp4. Вместо этого он сделает это с файлами .mov.
Небольшое дополнение: если я решил -crf 16обеспечить подходящее качество для моих отдельных файлов .mp4 1920x1080, следует ли мне продолжать использовать его для создания моего сложенного широкоэкранного файла .mp4 или мне нужно уменьшить это значение, чтобы получить такое же качество в файле 5760x1080. ?
Чем выше разрешение, тем более расслабленным может быть CRF (до определенного момента), но похоже, что вы получаете противоположный результат. Не смотрите на размер файла, делайте субъективную проверку.