FFMPEG: как исправить файл WebM, созданный путем сшивания нескольких файлов WebM?

У меня есть файл, в котором последовательно соединено несколько потоков WebM(vp9/opus).

При попытке воспроизвести его через обычные медиаплееры он останавливается в конце 1-го потока в последовательности.

При использовании с FFMPEG для транскодирования в MP4 транскодирование останавливается в конце первого потока.

Можно ли с помощью FFMPEG создать обычный файл WebM(vp9/opus) из файла, содержащего несколько последовательно сшитых вместе WebM(vp9/opus)?


person thedeadalive    schedule 08.09.2020    source источник
comment
Вы можете попробовать использовать -ssи -t, чтобы выбрать определенную часть вашего видео, соответствующую одному потоку. Документация по основным параметрам, включая -t и -ss Пример в другом вопросе   -  person Jao    schedule 08.09.2020
comment
Спасибо за комментарий и предложение! Я мог бы попробовать это, но конечная цель, которую я пытаюсь достичь, состоит в том, чтобы обработать поток данных, природа которого описана в вопросе выше, поэтому решение, которое я искал, состоит в том, чтобы настроить транскодер, чтобы приспособиться к различному характеру поток.   -  person thedeadalive    schedule 08.09.2020
comment
Я предполагаю, что у вас больше нет оригинальных WebM. Вы работаете с файлом или потоком данных, т. е. доступны ли входные данные для поиска и сохранения?   -  person Gyan    schedule 08.09.2020
comment
@Gyan У меня есть файл, содержащий несколько потоков, сшитых вместе для тестирования.   -  person thedeadalive    schedule 08.09.2020


Ответы (1)


Вы не можете добиться этого с помощью командной строки ffmpeg, но если вы пишете свой собственный транскодер на основе библиотек ffmpeg (avformat и avcodec), вы можете использовать собственный AVIOContext; когда первый поток завершится, ваш обработчик контекста узнает смещение файла; теперь вы можете пропустить вперед, пока не встретите следующий маркер 1a 45 df a3, и открыть следующий «входной файл» в этой позиции.

person Alex Cohn    schedule 08.09.2020
comment
Большое спасибо за ответ! Если у вас есть какие-либо указатели на образец реализации для ссылки на него, было бы здорово! - person thedeadalive; 09.09.2020
comment
Я бы начал с официального примера transcode. Здесь вы можете увидеть, как можно ввести собственный AVIOContext. Вам не нужна специфическая для fd логика, но я бы посоветовал выполнять всю работу с stdin, тогда вам все равно, какой входной файл открывать. - person Alex Cohn; 09.09.2020