Я создал слайд-шоу на своем ноутбуке с командой

ffmpeg  LOOPS -i "AUDIO_FLAC" -filter_complex "TRANSITION MAP 
concat=n=30:v=1:a=0[v]" -map "[v]" -map 30:a -shortest -q:v 1 -q:a 1 output.mp4

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

Это нормально, что более сильный процессор может производить видео более эффективно (в значительной степени)? Или есть что-то другое между машинами (например, установленный кодек). Обе машины имеют Ubuntu 18.04.

ОБНОВИТЬ:

Когда я проверил файлы, сгенерированные на двух машинах, я обнаружил разницу.

  1. Вторая машина, по неизвестной мне причине, изменила вход FLAC на 12k mp3, несмотря на q:a 1 . Затем мне пришлось добавить -c:a copy -strict -2 для сохранения качества звука.

  2. Видеокодеки были разные:

Первая машина:

Stream #0:0(und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 4296 kb/s, 25 fps, 25 tbr, 12800 tbn, 25 tbc (default)

Вторая машина:

Stream #0:0(und): Video: h264 (High 4:4:4 Predictive) (avc1 / 0x31637661), yuvj444p(pc), 1920x1080 [SAR 1:1 DAR 16:9], 324 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default)

Я думаю, что огромная разница в размере (примерно в пять раз) связана с тем, что видео были сделаны из затухающих слайд-шоу. По-видимому, эти кодеки трактуют поведение затухания совершенно по-разному (например, повторение кадра; просто предположение).

2 ответа2

1

Кодеки работают (в общих чертах) детерминистически; другими словами: один и тот же ввод с тем же кодеком (версия и реализация) и одинаковыми настройками должен обеспечивать одинаковый вывод.

Могут быть некоторые незначительные различия в зависимости от реализации кодека и используемых инструкций процессора (например, процессор Intel x86-64 может отличаться по второстепенным аспектам при реализации ARM ; но я бы посчитал это различными реализациями кодека).

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

Вы можете проверить кодек и настройки кодека, используя:

ffprobe -show_streams file.mp4

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

1

Это нормально, что более сильный процессор может производить видео более эффективно (в значительной степени)?

Это зависит от того, что вы подразумеваете под «эффективным», и от используемого режима кодирования. При кодировании видео вы должны сделать компромиссы:

  • скорость (с точки зрения используемых функций кодирования)
  • размер файла
  • качественный

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

Однако обратите внимание, что эта «скорость» не имеет никакого отношения ко времени, если вы не учитываете скорость процессора. Если у вас более мощный процессор и вы задали фиксированное качество для кодирования, размер файла останется прежним при условии тех же настроек скорости. Процесс кодирования просто завершится быстрее.

Также могут быть небольшие различия в качестве и / или размере файла в зависимости от возможностей ЦП, например, когда вступают в действие оптимизации для конкретной платформы, которые может использовать кодировщик.

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

Или что-то другое между машинами (например, установленный кодек)

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

Например, если у вас не установлена libx264 (кодер H.264), ffmpeg выберет mpeg4 (кодер MPEG-4 Part II), что, скорее всего, произошло в вашем случае, начиная с MPEG-4 Part II. это гораздо менее эффективный кодек по сравнению с H.264. Это снова относится к трем пунктам выше.

Кроме того, с выходом MP4 вы не можете использовать звук FLAC. Ваше аудио будет преобразовано в MP3 или AAC, в зависимости от того, какой кодировщик поддерживает ваш ffmpeg.

Совет: убедитесь, что вы всегда явно указываете, какой кодировщик вам нужен, с помощью -c:a aac или -c:a libmp3lame и т.д., Чтобы избежать неожиданностей.

Но единственным решением было бы сравнить журналы кодирования и найти различия. Если вы не можете получить эти журналы, вам придется проверить закодированное видео на наличие очевидных подсказок, таких как разные кодеки или средние битрейты.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .