Преобразование FFMPEG в MXF

Мне нужно обернуть видеофайл MPEG2 в контейнер MXF и преобразовать звук в процессе. У меня работает упаковка MXF, но она не преобразует аудиопоток (который должен быть 16-битным, 48 кГц Linear PCM).

Вот что я пытаюсь:

ffmpeg -i input.mpg -map 0:0 -map 0:1 -vcodec copy -f mpeg2video -acodec pcm_s16le -ar 48000 -ac 2 output.mxf

Полученные результаты:

ffmpeg version 0.10 Copyright (c) 2000-2012 the FFmpeg developers
  built on Jan 30 2012 17:49:23 with gcc 4.2.1 (Apple Inc. build 5666) (dot 3)
  configuration: *{snipped}*
runtime-cpudetect
  libavutil      51. 34.101 / 51. 34.101
  libavcodec     53. 60.100 / 53. 60.100
  libavformat    53. 31.100 / 53. 31.100
  libavdevice    53.  4.100 / 53.  4.100
  libavfilter     2. 60.100 /  2. 60.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0.  6.100 /  0.  6.100
  libpostproc    52.  0.100 / 52.  0.100
[mpeg @ 0x10201ae00] max_analyze_duration 5000000 reached at 5000000
Input #0, mpeg, from '/Volumes/Extra/test.mpg':
  Duration: 00:00:59.97, start: 0.192911, bitrate: 6513 kb/s
    Stream #0:0[0x1c0]: Audio: mp2, 48000 Hz, stereo, s16, 384 kb/s
    Stream #0:1[0x1e0]: Video: mpeg2video (Main), yuv420p, 720x576 [SAR 16:15 DAR 4:3], 12000 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
Output #0, mpeg2video, to 'video.mxf':
  Metadata:
    encoder         : Lavf53.31.100
    Stream #0:0: Video: mpeg2video, yuv420p, 720x576 [SAR 16:15 DAR 4:3], q=2-31, 12000 kb/s, 25 fps, 90k tbn, 25 tbc
Stream mapping:
  Stream #0:1 -> #0:0 (copy)
Press [q] to stop, [?] for help
frame= 1500 fps=  0 q=-1.0 Lsize=   43949kB time=00:00:59.96 bitrate=6004.6kbits/s    
video:43949kB audio:0kB global headers:0kB muxing overhead 0.000000%

Видео воспроизводится нормально, как и MXF, но аудиопотока нет вообще. Любая помощь будет здорово.


person MFB    schedule 16.02.2012    source источник
comment
Это связано с программированием как?   -  person Richard J. Ross III    schedule 16.02.2012


Ответы (2)


В вашей команде в качестве формата выходного файла указан видеокодек. В результате звук удаляется, а выходной файл имеет номер mpeg, а не mxf.

Преобразование можно выполнить с помощью следующей команды:

ffmpeg -i input.mpg -vcodec mpeg2video -acodec pcm_s16le -ar 48000 -ac 2 output.mxf

Формат выходного файла будет угадываться по расширению файла. В качестве альтернативы можно использовать опцию -f mxf. Из-за ограничений формата MXF может потребоваться указать частоту кадров -r 25. Опции -vcodec и -acodec могут быть опущены для того же результата.

person Dmitry Shkuropatsky    schedule 16.02.2012
comment
Я знаю, что это поздний ответ, но у меня были хорошие результаты с ffmpeg -i INPUT.mov -vcodec mpeg2video -qscale 1 -qmin 1 -ar 48000 OUTPUT.mxf. Вы можете выбрать уровень качества видео с помощью -qscale:v n (или псевдонима -q:v n), где n = число от 1 до 31, 1 — высокое -q/наибольший размер файла, а 31 — самый маленький размер файла. Это режим с переменным битрейтом. [trac.ffmpeg.org/wiki/Encode/MPEG-4] qmax&qmin - это "диапазоны качества" для кодирования.qmin 50,qmax 51=low-q.qmin 0,qmax 1=high-q [stackoverflow.com/questions/18563764/ - person thvs86; 14.01.2019

Я думаю, вы преувеличиваете. Пытаться:

ffmpeg -i input.mpg -vcodec copy -acodec pcm_s16le -ar 48000 -ac 2 output.mxf

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

Я подозреваю, что ваша проблема возникла в результате указания mpeg2video («необработанное видео MPEG-2»), формата, который, похоже, не включает звук.

person blahdiblah    schedule 16.02.2012
comment
Спасибо, бладибла, но все еще не идет. Я попробовал ваше предложение, а затем сделал еще один шаг ffmpeg -i input.mpg output.mxf, и аудиопоток по-прежнему отсутствует. Любые другие идеи? - person MFB; 16.02.2012