Я ищу конкретные способы различать файлы, использующие контейнеры MPEG-1 и MPEG-2, поскольку большинство ресурсов, которые я нахожу, предполагают, что начальный код - 00 00 01 BA для обоих контейнеров.
Я попытался преобразовать видео в контейнере MP4 в контейнер MPEG-1, используя графический интерфейс VLC, и код начала пакета для полученного файла был 00 00 01 BA, что является причиной моего замешательства.
Возможно ли даже преобразовать видео в MP4 в контейнер MPEG-1, используя FFMPEG, поскольку все, что я пытаюсь, вместо этого генерирует файл в контейнере программного потока MPEG-2. Используемая команда была ffmpeg -i video.mp4 video.mpg.





Команда ffmpeg -i video.mp4 video.mpg создаст системный контейнер MPEG-1. Используйте ffmpeg -i video.mp4 -f vob video.mpg для MPEG-2 PS.
Сразу после PACK START CODE 00 00 01 BA. если следующие два бита - 01, это MPEG-2 PS (VOB, DVD-VOB или SVCD), иначе - 0010. это системы MPEG-1 или VCD.
Два контейнера в основном одинаковы; разница заключается в частоте системных заголовков и добавлении / изменении нескольких полей пакета и т. д. FFmpeg имеет один демультиплексор для обоих, поэтому вы получите один и тот же идентификатор.
У меня есть файл mpeg-2, который начинается с 00 00 01 B3. Параметр -show_format на ffprobe возвращает следующий результат «имя_формата = mpegvideo, имя_длинного_формата = необработанное видео MPEG». Меня смущает формат контейнера, используемый в этом случае. Разве в данном случае это не контейнер MPEG-1 или MPEG-2?
Это необработанный битовый поток, то есть MPEG ES, а не контейнер PS. У него будет ровно один поток.
Я попробовал обе команды и запустил ffprobe -show_format в выходных файлах, дал тот же результат, который: «имя_формата = mpeg, имя_формата = MPEG-PS (программный поток MPEG-2)». Я ошибаюсь, полагая, что 00 00 01 B3 - это начальный код пакета для контейнера MPEG-1.