Я вижу здесь (Как преобразовать .ts файл в основной формат без потерь?), что MKV рекомендуется с этой целью (ffmpeg -i input -map 0 -c copy output.mkv
), но не MP4, который, как говорят, включает перекодирование видео.
(На основе этого я использую sh -c 'ffmpeg -i "$0" -map 0 -c copy "${0%%.*}".mkv' %f
в действии контекстного меню, как сказано здесь.)
Здесь (Как преобразовать .mkv файл в .mp4 файл без потерь?) Я вижу, что преобразование MKV к MP4 без перекодирования очень легко (ffmpeg -i input.mkv -codec copy output.mp4
), путем простого изменения контейнера.
Я добавил к своему контекстному меню файлового менеджера команду sh -c 'ffmpeg -i "$0" -map 0 -c copy "${0%%.*}".mp4' %f
и это работает без проблем на .ts файлы точно так же, как для .mkv.
Сверение с Mediainfo два получающихся файла MP4 ( TS->MP4
и TS->MKV->MP4
, где ->
вышеупомянутая команда), я вижу в основном ту же информацию об их видеоконтенте.
Остальное - то же:
Настройки кодировки: cabac=1 / ref=1 / deblock=1:0:0 / analyse=0x3:0x3 / me=dia / subme=3 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=0 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=0 / threads=8 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=0 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=0 / rc=crf / mbtree=0 / crf=24.0 / qcomp=0.60 / qpmin=10 / qpmax=51 / qpstep=4 / vbv_maxrate=3000 / vbv_bufsize=3000 / crf_max=0.0 / nal_hrd=none / filler=0 / ip_ratio=0.71 / pb_ratio=1.30 / aq=1:1.00
Да, видео TS быть преобразованным (повторно мультиплексированный) непосредственно в видео MP4, не повторно кодируя, если форматы видео и форматы аудио совместимы. Ваше видео является H.264, который в настоящее время является наиболее распространенным и самым совместимым форматом видео в MP4, таким образом копирование его от TS до MP4 не будет никакой проблемой.
TS поддерживает больше форматов, чем MP4. При попытке мультиплексировать произвольные форматы в MP4, возможные результаты:
Успех - форматы поддерживаются FFmpeg MP4 muxer и Вашим плеером/устройством.
Частичный успех - форматы поддерживаются FFmpeg MP4 muxer, но не поддерживаются Вашим плеером/устройством. Это могло иметь место для меньшего количества распространенных или унаследованных форматов, поддерживаемых MP4.
Отказ - форматы не поддерживаются, и muxer даст Вам сообщение об ошибке такой как Could not find tag for codec foo in stream #0, codec not currently supported in container
Таким образом для полной совместимости я рекомендую повторно кодировать, если форматы не являются общим и широко поддерживаемым H.264 или видео H.265/HEVC + аудио AAC.
Для автоматизации можно использовать ffprobe
определить форматы. Посмотрите там способ использовать ffmpeg для определения кодирования файла перед транскодированием? для примера. Затем используйте условный оператор в своем сценарии для выполнения корректной команды.
Основным исключением являются подзаголовки. MP4 не имеет хорошей поддержки подзаголовка. Если Ваш TS содержит текстовые подзаголовки (ASS/SSA, SRT) затем, можно преобразовать их в синхронизированный текст (-c:s mov_text
), но поддержка синхронизированных текстовых подзаголовков среди плееров не универсальна. Основанные на изображении подзаголовки должны будут быть исключены, такой как с отрицательным отображением -map 0 -map -0:s
.