2016-12-30 3 views
0

Я пытаюсь преобразовать клип mp4 в формат h264 bytestream с использованием FFMPEG. Я успешно скомпилировал FFMPEG из источника с доступом к libx264.Как преобразовать mp4 в h264, добавляя AUD с помощью FFMPEG

Посмотрите на документацию для FFMPEG (версия 3.2.2) под libx264, есть флаг bool -aud. В online documentation это дает пример

ffmpeg -i input.flac -id3v2_version 3 out.mp3 

Используя этот формат, следующую команду работает, но не дает желаемый AUDS в выходном файле:

ffmpeg -i input.mp4 -codec:v libx264 -aud 1 output.h264 

Я также пробовал разные варианты с этим в том числе:

ffmpeg -i input.mp4 -vcodec libx264 -aud 1 output.h264 
ffmpeg -i input.mp4 -aud 1 output.h264 

т.д.

I Assum e есть что-то, что я не понимаю о выполнении этой операции. Я в основном хочу взять h264-фильм в контейнере mp4 и выгрузить его как поток h264 с добавленными AUD. Любая идея, почему это не работает?

(Я также пробовал использовать x264 с флагом -aud, также работал нормально, но не выдавал желаемый результат).

ответ

1
ffmpeg -i input.mp4 -x264opts aud=1 output.h264 
+0

Спасибо за ссылки, мне нужно посмотреть на них дальше. Просто попробуйте команду, которую вы предоставили, хотя не производит AUD на выходе (хотя это намного быстрее, чем то, что я делал ранее). Я также попытался добавить флаг -aud 1 безрезультатно. Со второй ссылки я попытался использовать именно то, что у них только что было output.h264 вместо output.ts, и это все еще не сработало. Все они имеют первый тип единицы доступа как SEI (6), а не AUD (9), как я ожидал бы, если бы он был в формате приложения B. На самом деле я не могу найти ожидаемые единицы AUD (00 00 01 69) в шестнадцатеричном дампе выходного файла. – SyntheticGio

+1

См. Под https://ffmpeg.org/ffmpeg-codecs.html#Options-23 – Mulvya

+1

Конечно, с '-c copy', это не будет иметь никакого эффекта, поскольку libx264 не в игре. – Mulvya

1

Так как MPEG-TS мультплексор создает AUDS, этот 2-ступенчатый неразрушающий процесс работы:

ffmpeg -i in.mp4 -c copy -map v -vbsf h264_mp4toannexb in.ts 

, а затем

ffmpeg -i in.ts -c copy -map v -f h264 in.h264 
+0

Я получаю сообщение об ошибке с этим методом (я думаю, потому что, по-видимому, во втором потоке в формате mjpeg, помимо первого потока h264, есть, по-видимому, второй), и он жалуется, что mjpeg не поддерживается.Я думаю, мне нужно добавить флаг, чтобы использовать только первый поток (# 0: 0). Я смутно вспоминаю, как это можно сделать в документации, но я не могу вспомнить об этом. – SyntheticGio

+1

В этом случае используйте '-map 0: v: 0' вместо' -map v' – Mulvya