Объедините видео h.264 и аудио поток opus в один видеофайл

У меня есть видеофайл, закодированный как H.264 в файле mp4, и аудио, закодированный как Opus в файле webm. Как лучше всего объединить эти файлы в один mp4? Я не хочу перекодировать файлы и терять их качество.

4
задан 7 May 2016 в 05:55

2 ответа

Это может быть сделано относительно легко с FFmpeg. Если Вы используете Гостеприимный Xerus LTS, просто выполняет следующее:

sudo apt-get install ffmpeg

Однако при выполнении Испытанного Тара LTS, Вы были бы лучшими для создания собственного из них простая копия и инструкции по вставке...

Для демонстрации техники, я создал 2 тестовых файла:

  1. Этот файл называют test.mp4 имеет h.264 поток, который Вы хотите, и находится в следующем формате, отнеситесь со вниманием к потоковым идентификаторам:

    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661) ...
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D)...
    
  2. Это регистрирует названный test1.webm имеет поток Опуса, который Вы хотите, и находится в следующем формате, снова отнеситесь со вниманием к потоковым идентификаторам:

    Stream #0:0: Video: vp9 (Profile 0)...
    Stream #0:1: Audio: opus, 48000 Hz, stereo, fltp (default)
    

Примечание: В Вашем примере webm контейнер может иметь только аудиопоток без видеопотока. В этом случае Ваш аудиопоток Опуса имел бы идентификатор Stream #0:0.

Примите во внимание также, что в данный момент Вы не можете поместить Аудио Опуса в mp4 контейнер, но оно находится вполне счастливо в mkv контейнере. Следующее является самым простым методом:

ffmpeg -i test.mp4 -i test1.webm -c copy -map 0:0 -map 1:1 -shortest out.mkv

Это выполняет следующее:

  1. -c copy скопируйте кодеки без транскодирования
  2. -map 0:0 выберите 1-й входной файл: 1-й поток = желаемый h.264 поток
  3. -map 1:1 выберите 2-й входной файл: 2-й поток = желаемый поток Опуса
  4. -shortest прекратите кодировать когда самые короткие входные концы потока

Для более тщательно продуманных методов, которые будут требоваться с мультипотоковыми файлами, см. ссылку в моих ссылках...

Ссылки:

3
ответ дан 7 May 2016 в 15:55
  • 1
    На самом деле я использовал smlinux репозиторий мерзавца. Я вытянул и объединился снова, и dkms создал прекрасный модуль. BTW, Вы замечали столько сообщений в kern.log с этим драйвером? – Confguy2016 25 December 2017 в 00:28

Так как Опус не соответствует контейнерному стандарту MP4, и H.264 столь же неуместен в WebM (ограниченный MKV) контейнеры, необходимо использовать MKV и надеяться, что плееры поддерживают аудиотреки Опуса.

Перемультиплексирование может быть столь же простым как открытие Mkvmerge GUI, позорящий оба файла и выбирающий конкретные дорожки, которые Вы хотите иметь в выводе. Но никто не мешает Вам исследовать все опции, включенные для утилиты командной строки (новый GUI должен все еще иметь опцию скопировать всю команду), или обучение использовать ffmpeg.

2
ответ дан 7 May 2016 в 15:55
  • 1
    Огромное спасибо, это работало, в сочетании с заменой//nas/shared с//nas.local/shared – Angelos Kyritsis 20 October 2017 в 22:37

Другие вопросы по тегам:

Похожие вопросы: