Как конвертировать .ts файл в основной формат без потерь?

13

У меня есть файл, который заканчивается на .ts (например, здесь первые 10 МБ ). Я хотел бы преобразовать его в более основной формат потока (например, mp4, MPEG2-PS ...), без потерь, если это возможно (например, ремиксинг).

Я прочитал, как я могу конвертировать .ts файлы во что-то полезное? вопрос. Я пробовал avidemuxс настройками «копировать» для видео и аудио потоков, а также с форматом контейнера «PS» для MPEG. Это не удалось с сообщением об ошибке «Несовместимый звук / Для DVD звук должен быть 48 кГц MP2 (стерео), AC3, DTS или LPCM (стерео)».

Я также попробовал предложенную команду CLI.

avconv -i 10MB.ts -vcodec copy -acodec copy 10MB.mpg

Выходной файл имеет правильное видео, но без звука, по крайней мере, при воспроизведении с VLC. Это довольно загадочно, потому что, avconvкажется, правильно обнаружил аудиопоток.

Input #0, mpegts, from '10MB.ts':
  Duration: 00:00:06.36, start: 51523.824800, bitrate: 12563 kb/s
  Program 37888 
    Stream #0.0[0x100]: Video: mpeg2video (Main), yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 20000 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0.1[0x110]: Audio: aac, 0 channels, fltp, 144 kb/s
    Stream #0.2[0x130]: Data: [6][0][0][0] / 0x0006
    Stream #0.3[0x138]: Data: [6][0][0][0] / 0x0006
    Stream #0.4[0x140]: Data: [13][0][0][0] / 0x000D
    Stream #0.5[0x160]: Data: [13][0][0][0] / 0x000D
    Stream #0.6[0x161]: Data: [13][0][0][0] / 0x000D
    Stream #0.7[0x162]: Data: [13][0][0][0] / 0x000D
    Stream #0.8[0x170]: Data: [13][0][0][0] / 0x000D
    Stream #0.9[0x171]: Data: [13][0][0][0] / 0x000D
    Stream #0.10[0x172]: Data: [13][0][0][0] / 0x000D
Output #0, mpeg, to '10MB.mpg':
  Metadata:
    encoder         : Lavf54.20.4
    Stream #0.0: Video: mpeg2video, yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], q=2-31, 20000 kb/s, 90k tbn, 90k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (copy)

Я также попробовал команду CLI, предложенную в комментариях к другому вопросу .

avconv -i 10MB.ts -c:v copy -c:a libfaac 10MB.mp4

Опять нет звука в выходном файле.

РЕДАКТИРОВАТЬ: я попробовал VLC как предложено @Daniel. Это было почти идеально. Это было быстро и удобно для пользователя. Мне просто нужно было нажать «Преобразовать / Сохранить», добавить входной файл, выбрать профиль MP4, настроить видеокодек и аудиокодек на «Сохранить исходную видео / аудиодорожку», выбрать файл назначения и нажать «Пуск». Видео выглядело идеально, но звук был слегка поврежден, но это могло быть вызвано чем-то весьма экзотическим в аудиопотоке моего видео.

лактон
источник
Вы пробовали VLC? videolan.org/vlc/index.html
Даниил
Вы упомянули, что хотите сделать ремукс, а не перекодировать, если это возможно. Вы уверены, что VLC только ремуксинг?
Llogan
@LordNeckbeard Хороший вопрос! Как я могу быть уверен?
лактон
Я не знаком с VLC для конвертации, но я добавил ответ, используя ffmpeg.
Llogan
VLC преобразует что угодно во что угодно с выдающимися потерями. По сути, вы ограничены выбранным форматом.
Даниэль

Ответы:

22

Матроска (MKV)

Это будет потоковое копирование (повторное мультиплексирование) всех потоков:

ffmpeg -i input -map 0 -c copy output.mkv

-map 0Параметр используется , чтобы включить все потоки. В противном случае он будет использовать поведение выбора потока по умолчанию, которое приведет к тому, что будет выбран только один поток на тип потока. Так как Matroska может обрабатывать большинство произвольных потоков, которые я включил -map 0.

MP4

Это будет потоковое копирование (повторное мультиплексирование) всех потоков:

ffmpeg -i input -map 0 -c copy output.mp4
  • Если ваши входные форматы не совместимы с MP4, вы получите ошибку.
  • Ваш плеер / устройство может не поддерживать все произвольные, менее распространенные или устаревшие форматы, даже если они поддерживаются MP4.
  • В случае сомнений перекодируйте в H.264 + AAC, как показано ниже.

Это перекодирует видео в H.264 и выполняет потоковое копирование аудио:

ffmpeg -i input.ts -c:v libx264 -c:a copy output.mp4

Следующий пример перекодирует видео и аудио:

ffmpeg -i input.ts -c:v libx264 -c:a aac output.mp4

Пример без потерь H.264:

ffmpeg -i input.ts -c:v libx264 -crf 0 -c:a copy output.mp4

Файлы без потерь будут огромными.

См. FFmpeg Wiki: H.264 для получения дополнительной информации.

llogan
источник
Если вы хотите закодировать MP4-файл без потерь, добавьте -qp 0 или -crf 0, как указано на вики-странице FFMpeg: trac.ffmpeg.org/wiki/Encode/H.264
SuperSluether
2
@SuperSluether Lossless создает огромные файлы. Под «без потерь» я полагаю, что лактон означает «ремуксинг».
Llogan
Образец файла, который я предоставил, действительно усечен. Фактический файл, который я хочу перемаковать, слишком велик для простого обмена.
лактон
1
@lacton Попробуйте мультиплексирование в Matroska: ffmpeg -i 10MB.ts -c copy output.mkv. Вы получите сообщение об ошибке: Error parsing AAC extradata, unable to determine samplerate. Вот почему мой пример MKV перекодировал аудио. Также смотрите # 4472: Копирование AAC из потока без кодирования завершается ошибкой, а lavf / mkv: Исправляет повторное смешивание AAC . Тем не менее, ничего из этого не может применяться к вашему большому, не усеченному входному файлу, и он может работать как положено.
Llogan
1
@LordNeckbeard ffmpeg -i input -c:v copy -c:a aac output.mkvработал отлично. Видео было смешано, и звук звучит так же хорошо, как и оригинал, без небольшого искажения, которое я получил при конвертации с VLC.
лактон
3

VideoLAN (VLC - http://www.videolan.org/vlc/index.html ) легко конвертирует практически все в что угодно.

Дать ему шанс. Он работает на Linux, Windows и Mac OS X и имеет очень удобный интерфейс.

Даниил
источник
Теперь, когда я использовал VLC для преобразования видео, я бы порекомендовал его. Спасибо за это предложение. Для моего файла .ts это почти сработало. Видео выглядело отлично, но звук был как-то слегка поврежден. Это может быть вызвано чем-то довольно экзотическим в аудиопотоке моего видео. Я отредактировал оригинальный вопрос, чтобы включить это.
лактон
Да, это может работать лучше, если вы используете другой субконтейнер для аудио внутри mp4. Возможно, RAW.
Даниэль
0

В качестве дополнения к другому ответу @llogan - в качестве потоковой копии все равно предпочтительнее:

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

Итак, для «демультиплексирования и мультиплексирования» без изменения имени файла используйте:

ffmpeg -i "$0" -map 0 -c copy "${0%%.*}".mkv

Я добавил это в пользовательские действия Thunar и в инструмент настройки действий FileManager (Nautilus, Nemo, Caja, PCManFM), например так:

sh -c 'ffmpeg -i "$0" -map 0 -c copy "${0%%.*}".mkv' %f

ограничивая его "* .ts" в Thunar и video/mp2tFileManager Actions.

cipricus
источник