FFmpeg выполняет ненужное мультиплексирование

Я пишу сценарий, который берет видеофайлы, такие как MKV или AVI, и преобразует их в MP4, а затем подготавливает их из потоковой передачи в Интернете. Я хочу, чтобы мой вывод использовал кодеки H.264 и AAC.

Пока моя команда выглядит так:

ffmpeg -i input.mkv -vcodec h264 -acodec aac -ab 128k -ac 2 -strict -2 output.mp4

Однако, когда кодек уже является h.264, он все еще мультиплексирует его, он говорит: (h264 -> libx264).

Если я заменю «-vcodec h264» на «-vcodec copy», он будет работать намного быстрее, если кодек H.264, но, конечно, не изменит кодек, если во входном файле есть другой кодек.

Есть ли способ для FFmpeg распознать, что кодек почти такой же, и, следовательно, не мультиплексировать видеопоток, но все же изменить видеокодек, если источник не H.264?


person Mattis    schedule 10.03.2013    source источник
comment
Вам нужно будет проанализировать видео, прежде чем передать его в ffmpeg. если уже х264 то мультиплексировать, если не транскодировать.   -  person BlueVoodoo    schedule 10.03.2013


Ответы (1)


Нет. FFmpeg может только копировать битовые потоки или перекодировать. Он не может угадать, хотите ли вы сохранить определенный кодек. Вам нужно будет проанализировать информацию о файле, а затем решить, хотите ли вы копировать или нет.

Некоторые примеры того, как это сделать, перечислены здесь: скрипт транскодирования MKV в MP4. вопросы

В принципе, вы могли бы сделать это (бесстыдный плагин от @evilsoup):

ffprobe input.mkv 2>&1 | sed -n '/Video:/s/.*: \([a-zA-Z0-9]*\).*/\1/p' | sed 1q'

Это выведет h264 для видеопотока H.264.

Небольшой совет: попробуйте привыкнуть к указанию именно того кодировщика, который вам нужен. h264 на самом деле не является кодировщиком для FFmpeg — по умолчанию он равен libx264. Поэтому лучше используйте -c:v libx264.
Еще одна вещь: aac — это встроенный кодировщик AAC от FFmpeg. Кодировщики сторонних производителей, такие как libfdk_aac или libfaac, предлагают режим кодирования VBR и, как правило, более высокое качество, чем aac.

person slhck    schedule 10.03.2013
comment
Я боялся, что мне придется делать проверку. Но большое спасибо за советы!! - person Mattis; 12.03.2013