Remux / кодировать / конвертировать MPG в MP4

1382
zarko

Я понимаю, что невозможно редактировать метаданные файлов MPG (т. Е. Созданный), поэтому я ищу другой способ «обновить» мои MPG до более нового формата файлов (предпочтительными являются форматы, которые работают как в Windows, так и в iOS).

Что я должен сделать, чтобы достичь этой цели? Remux / кодировать / конвертировать мои MPG-видео в MP4 или MOV и какие настройки следует использовать при ремуксинге / кодировании / конвертации файлов? Какое действие дало бы лучший результат; как можно ближе к оригинальным видео MPG?

Вот спецификация mediainfo одного из моих файлов MPG:

General Complete name : E:\Users\Owner\Desktop\test\MOV03521.MPG Format : MPEG-PS File size : 25.1 MiB Duration : 20s 124ms Overall bit rate mode : Variable Overall bit rate : 10.5 Mbps  Video ID : 224 (0xE0) Format : MPEG Video Format version : Version 1 Format settings, BVOP : No Format settings, Matrix : Default Format settings, GOP : N=1 Duration : 20s 100ms Bit rate mode : Variable Bit rate : 10.2 Mbps Width : 640 pixels Height : 480 pixels Display aspect ratio : 4:3 Frame rate : 30.000 fps Color space : YUV Chroma subsampling : 4:2:0 Bit depth : 8 bits Scan type : Progressive Compression mode : Lossy Bits/(Pixel*Frame) : 1.105 Time code of first frame : 00:00:00:00 Time code source : Group of pictures header GOP, Open/Closed : Closed Stream size : 24.4 MiB (97%)  Audio ID : 192 (0xC0) Format : MPEG Audio Format version : Version 1 Format profile : Layer 2 Duration : 20s 124ms Bit rate mode : Constant Bit rate : 64.0 Kbps Channel(s) : 1 channel Sampling rate : 32.0 KHz Compression mode : Lossy Stream size : 157 KiB (1%)  
3
MPEG-1 видео? Это кажется довольно старым. Но по какой причине вы хотите конвертировать их? Редактирование метаданных должно быть возможно даже в контейнерах MPEG-PS. Преобразование в MP4 / MOV снизит качество или, по крайней мере, займет немного места (это компромисс здесь). Или вы хотите совместимость с iOS (которая, как я полагаю, не поддерживает MPEG-1)? slhck 9 лет назад 1
Все, что я хочу, это добавить тег «createate» внутри моих файлов, так как в противном случае они не будут корректно отображаться на моей шкале Карусель от Dropbox. Я попытался отредактировать свой фильм MPG с EXIFTOOL, и это не сработало. Он работает со многими различными форматами, но не с MPG. Я не хочу конвертировать свои файлы, я просто хочу привязать метку времени к моим MPG-файлам (которые на самом деле являются видео с камеры). Конверсия привела к потере качества на моих устройствах iOS. Я не знаю, что делать, и поэтому я ищу совет от экспертов. zarko 9 лет назад 0
Ах, пожалуйста, игнорируйте «редактирование метаданных должно быть возможно». Это, конечно, не всегда так. Смотрите мой ответ ниже. Дайте мне знать, если вам нужна помощь в запуске ffmpeg из командной строки или в другом инструменте конвертации видео, который сделает эту работу за вас. slhck 9 лет назад 0

2 ответа на вопрос

2
slhck

Creation date (like many other metadata fields) is a property you can set for MP4/MOV and MKV containers (as well as several others), but not for MPEG Program Streams or Transport Streams. In fact, there's no standard for video metadata like there's EXIF for photos. And when they designed MPEG containers they probably just didn't think about this application (yet).

You have to be aware of the fact that MPEG-1 is very old—they started developing it when I was born—and you would probably be better off converting the videos to a more recent and compression-efficient codec like H.264. Your 10 MBit/s MPEG-1 video will probably end up looking just as good at 1 MBit/s H.264, or even less than that.

So if the real issue is that the videos need to show up in the correct order in a file manager of some sort, and you cannot change the file manager or use a metadata platform, you need to re-mux or re-encode the videos.

Re-muxing will not touch the video/audio bitstream, thus keeping the file size and quality intact. With ffmpeg, you could try the following:

ffmpeg -i input.mpeg -c copy output.mkv 

This may work or may not. It didn't when I tried, but in theory Matroska supports MPEG-1 video. Matroska is not natively supported on Windows or iOS though.

So, you can re-encode the video and audio to H.264/AAC in an MP4 container:

ffmpeg -i input.mpeg -c:v libx264 -preset slow -crf 18 -c:a aac -strict experimental -b:a 128k output.mp4 

Here, the CRF option sets the quality. 18 means very good. 23 is the default. Lower means better, so if you want to retain quality, you might even want to go below 18. A CRF of ±6 results in about half/double the file size. The H.264 encoding guide is very helpful. Note that your resulting file may be smaller than the input file but will still look just as good. That's because the codec is much more efficient. I recommend you vary the CRF until you find the value where you cannot perceive a difference anymore between the original and the re-encoded one.

H.264/AAC in MP4 is supported on (newer) Windows and iOS. Older Windows versions (that includes Windows 7 IIRC) will not play it unless a codec pack is installed. For iOS compatibility on older devices, you may have to set -profile:v baseline as an option.

After converting to MKV or MP4, setting metadata such as creation date will be possible.

Спасибо, slhck! Хорошо объяснил и легко следовать. Если у меня есть три MPG, которые я хотел бы перекодировать отдельно, нужно ли мне перекодировать их один за другим или есть более разумный способ? Мои файлы: MOV03521.mpg, MOV03552.mpg, MOV03553.mpg, и я хотел бы перекодировать их в одноименные файлы с расширением Mp4. Вы знаете, можно ли это сделать и какой командой / программой? zarko 9 лет назад 0
Зависит от вашей операционной системы! Я фанат сценариев командной строки, поэтому либо для пакетных файлов Windows, либо для сценариев Linux. Смотрите здесь несколько примеров кода: http://superuser.com/a/440639/48078 slhck 9 лет назад 0
Спасибо - я пробую :-) Я нахожусь на Win8. Startconvert.bat будет включать это: для %% i IN (* .mpg) DO (convert-to-mp4.bat "%% i") пауза Convert-to-mp4.bat будет включать это: IF EXIST "% 1. mp4 "GOTO exit echo Преобразование для% 1 началось в% DATE%% TIME% ffmpeg -i% 1 -c: v libx264 -preset slow -crf 18 -c: строгий экспериментальный -b: 128k% 1.mp4 : exit echo% 1.mp4 уже существует zarko 9 лет назад 0
(в приведенном выше комментарии отсутствует @ перед символом echo) - его легче прочитать здесь: http://pastebin.com/zy4FcbM2 zarko 9 лет назад 0
Не могли бы вы посмотреть, правильно ли я применил вашу команду в convert-to-mp4.bat (ffmpeg -i% 1 -c: v libx264 -preset slow -crf 18 -c: aac -strict экспериментальный -b: 128k% 1.mp4) zarko 9 лет назад 0
Я не эксперт по Windows - поэтому я не могу сказать вам, просто посмотрев, будет ли это работать для вас. Ты это пробовал? Если что-то в пакетном файле не работает, я рекомендую задать новый вопрос, тогда другие могут ответить на него :) slhck 9 лет назад 0
Пакетный файл работает. Я хотел, чтобы вы проверили, правильно ли я заменил части образца команды. Пример команды из вашего поста superuser.com/a/440639/48078: ffmpeg -i% 1 -c: v copy -c: копия% 1.mp4 в моем случае: ffmpeg -i% 1 -c: v libx264 -preset медленный -crf 18 -c: aac-строгий экспериментальный -b: 128k% 1.mp4 zarko 9 лет назад 0
Да, это выглядит хорошо для меня! slhck 9 лет назад 0
Спасибо! Последний вопрос: знаете ли вы, можем ли мы каким-то образом обмануть файл MPG и отредактировать, например, его видео или аудио поток (по дате)? Можем ли мы как-нибудь встроить XMP-данные в файл MPG? Или файл MPG может быть отредактирован в шестнадцатеричном формате? Можно ли создать sidecar / xmp для исходного файла MPG? Я нацеливаюсь на то, чтобы обмануть или, вернее, помочь Карусели расположить MPG-файл на временной шкале в соответствии с одноименным xmp-файлом? Это длинный выстрел, но я все еще хотел бы попробовать. zarko 9 лет назад 0
Это полностью зависит от того, что поддерживает Карусель. Я бы лучше спросил на их форумах или в поддержке. Я сомневаюсь, что у них есть поддержка метаданных для чего-то нестандартного (читай: не-EXIF или любые контейнеры, кроме, возможно, MP4 и MKV). Проблема в том, что на самом деле не существует стандартного способа добавления метаданных в файлы MPEG. Вы можете поместить все, что вам нравится, в так называемые «частные потоки пользователей», но для этого вам также понадобится специальный декодер. Я бы лучше пошел на перекодировку. Или, может быть, попробуйте еще раз подход к ремуксингу - может быть, даже с другими инструментами, такими как MKVToolNix. Вы можете задать новый вопрос об этом. slhck 9 лет назад 0
Привет! Сравнение двух команд: ffmpeg -i input.mpeg -c: v libx264 -preset slow -crf 18 -c: строгий экспериментальный -b: 128k output.mp4 и ffmpeg -i input -c: v libx264 -preset slow -crf 18 -pix_fmt yuv420p -c: aac -strict экспериментальный -b: 128k -movflags + faststart output.mp4 только следующие части: -pix_fmt yuv420p -movflags + faststart Улучшают ли они конверсию? Буду признателен за ваше понимание :-) zarko 9 лет назад 0
Параметр `-pix_fmt` может помочь улучшить совместимость с некоторыми плеерами или устройствами. Если не установлено, с некоторыми входами (например, изображениями) может случиться так, что видео не будет [chroma subsampled] (http://en.wikipedia.org/wiki/Chroma_subsampling). Вы можете безопасно установить эту опцию для любого преобразования. Параметр `faststart` перемещает индекс файла в начало, что ускоряет воспроизведение видео при потоковой передаче с сервера. Вы всегда можете установить это для контейнеров MP4. slhck 9 лет назад 0
Великолепно объяснил slhck! Спасибо! А что насчет -movflags? Вы знаете, что это делает? zarko 9 лет назад 0
`-movflags + faststart` принадлежат друг другу. Просто сказано, используйте опцию MOV (MP4 и MOV похожи) `faststart` :) slhck 9 лет назад 0
0
Salman A

I successfully used exiftool for this. Here is the metadata of an MPG file before correction:

C:\>exiftool.exe -s test.mp4 ExifToolVersion : 10.01 FileName : test.mp4 Directory : . FileSize : 14 MB FileModifyDate : 2015:09:04 22:33:16+05:00 FileAccessDate : 2015:09:05 14:10:08+05:00 FileCreateDate : 2015:09:05 14:10:08+05:00 FilePermissions : rw-rw-rw- FileType : MP4 FileTypeExtension : mp4 MIMEType : video/mp4 MajorBrand : MP4 Base Media v1 [IS0 14496-12:2003] MinorVersion : 0.2.0 CompatibleBrands : isom, iso2, avc1, mp41 MovieHeaderVersion : 0 CreateDate : 0000:00:00 00:00:00 ModifyDate : 0000:00:00 00:00:00 TimeScale : 1000 Duration : 0:01:22 -- snip -- TrackHeaderVersion : 0 TrackCreateDate : 0000:00:00 00:00:00 TrackModifyDate : 0000:00:00 00:00:00 -- snip -- MediaHeaderVersion : 0 MediaCreateDate : 0000:00:00 00:00:00 MediaModifyDate : 0000:00:00 00:00:00 -- snip -- 

I used this to change all dates:

C:\>exiftool.exe ^ -Quicktime:CreateDate="2007-01-02 03:04:05" ^ -Quicktime:ModifyDate="2007-01-02 03:04:05" ^ -TrackCreateDate="2007-01-02 03:04:05" ^ -TrackModifyDate="2007-01-02 03:04:05" ^ -MediaCreateDate="2007-01-02 03:04:05" ^ -MediaModifyDate="2007-01-02 03:04:05" ^ test.mp4 

Here is the metadata after correction:

FileModifyDate : 2015:09:05 14:20:54+05:00 FileAccessDate : 2015:09:05 14:20:54+05:00 FileCreateDate : 2015:09:05 14:10:08+05:00 -- snip -- CreateDate : 2007:01:02 03:04:05 ModifyDate : 2007:01:02 03:04:05 -- snip -- TrackCreateDate : 2007:01:02 03:04:05 TrackModifyDate : 2007:01:02 03:04:05 -- snip -- MediaCreateDate : 2007:01:02 03:04:05 MediaModifyDate : 2007:01:02 03:04:05 -- snip -- 

I would suggest that you first look at metadata of good, known MPG files and note down which date is which. Backup your files before experimenting (exiftool creates a backup by default). In my testing, the size of original and updated files remains exactly the same.

Похожие вопросы