Как исправить ошибку «Несоответствие размера пакета PES» в FFmpeg? - PullRequest
0 голосов
/ 15 февраля 2019

Как исправить ошибку Несоответствие размера пакета PES в FFmpeg -

Я собираюсь ответить на свой вопрос, потому что фраза Несоответствие размера пакета PES регулярно появляется в сообщениях, касающихся ffmpeg, но я нигде не видел удовлетворительного решения.

Обычно возникает проблема, связанная с файлами транспортных потоков .TS: либо в связи с конкатенацией таких файлов, либо с их повторным мультиплексированием (от .ts до .mp4).Где-то в выводе из ffmpeg смертельная фраза несоответствие размера пакета внезапно начнет повторяться.

Решение состоит в том, чтобы объединить их в виде файлов .ts (то есть в их original format), затем возьмите выходной файл .ts, разделите его на видеофайл (.ts) и аудиофайл (.ts), затем смените их (на .ts или .mp4), используя опцию itsoffset.Даже если используется потоковая копия , вывод в формат .mp4 часто будет давать худшее качество изображения, чем сохранение формата .ts.

Это делает следующий код, выводя видео .mp4 или .tsвидео (скопируйте код в простой .bat пакетный файл , затем запустите этот файл) -

.

:: Program Location
SET ffmpeg="C:\Program Files\FFmpeg\ffmpeg.exe" -hide_banner  


::  STEP 1 -

::  Create File List
IF EXIST mylist.txt DEL mylist.txt
FOR %%i IN (*.ts) DO ECHO file '%%i'>> mylist.txt

::  Concatenate Files : TS
%ffmpeg%  -f concat  -safe 0  -i mylist.txt  -c copy  -threads 1  out.ts


::  STEP 2 -

::  Extract Video stream
%ffmpeg%  -i out.ts  -vcodec copy  -an  -sn  -threads 1  video.ts

::  Extract Audio stream
%ffmpeg%  -i out.ts  -acodec copy  -vn  -sn  -threads 1  audio.ts


::  STEP 3 -

::  Combine Video and Audio streams (with .MP4 options)
SET mapping=-i video.ts -itsoffset -0  -i audio.ts   -map 0:v -map 1:a
SET options=-flags global_header  -movflags faststart  -threads 1
%ffmpeg%  %mapping%  -c:v copy -c:a copy  %options%  output.mp4

::  Combine Video and Audio streams (with .TS options)
SET mapping=-i video.ts -itsoffset -0  -i audio.ts  -map 0:v -map 1:a
SET options=-threads 1
%ffmpeg%  %mapping%  -c:v copy -c:a copy  %options%  output.ts

.

Приложение :

Похоже, есть некоторые разногласия по поводу предложенного мной решения, как подробно описано в комментариях ниже.Кажется, говорят, что мое решение игнорирует тот факт, что в исходных файлах отсутствуют данные.

Я думаю, что самое малое, что я могу сделать, это признать, что, поскольку ffmpeg сообщает об ошибке в исходных файлах,это предупреждение о несоответствии размера пакета; возражение, выдвинутое в Комментариях, может быть действительным.

Однако, даже если данные отсутствуют, моя предложенная процедура по крайней мере даст вам файл, который будет воспроизводиться в большинстве медиаплееров.Во многих случаях даже не будет слышимой или визуальной неисправности в точке соединения, указанной в сообщенной ошибке.

Трудно увидеть, как могут быть восстановлены недостающие данные, но, пожалуйста, внесите предложения.Должны быть возможности для улучшения моего сценария, потому что раньше этому типу ошибки уделялось так мало внимания.

К счастью, похоже, что этот тип ошибки НЕ приведет к потере синхронизации звука с изображением.Таким образом, звук после точки соединения не будет несинхронизирован, даже если при соединении отсутствуют некоторые данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...