2015-10-26 4 views
0

у меня есть h264/ААС файл видео mp4, что FFMPEG говорит это о:FFMPEG преобразование создает файлы меньшего размера, несмотря на неизменных кодеки

Metadata: 
    major_brand  : qt 
    minor_version : 0 
    compatible_brands: qt 
    creation_time : 2015-10-15 16:41:52 
    Duration: 00:03:36.20, start: 0.000000, bitrate: 4298 kb/s 
    Stream #0:0(eng): Audio: aac (LC) (mp4a/0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default) 
    Metadata: 
     creation_time : 2015-10-15 16:41:53 
     handler_name : Core Media Data Handler 
    Stream #0:1(eng): Video: h264 (High) (avc1/0x31637661), yuv420p(tv, bt709), 1280x720, 4160 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc (default) 
    Metadata: 
     creation_time : 2015-10-15 16:41:53 
     handler_name : Core Media Data Handler 
     encoder   : H.264 

Затем я бегу преобразование на него, сохраняя при этом его те же кодеки и разрешение с этой командной строки:

ffmpeg -i x.mp4 -vcodec h264 -acodec libvo_aacenc y.mp4 

Полученная информация выходного файла:

Metadata: 
    major_brand  : isom 
    minor_version : 512 
    compatible_brands: isomiso2avc1mp41 
    encoder   : Lavf56.36.100 
    Duration: 00:03:36.29, start: 0.033333, bitrate: 1913 kb/s 
    Stream #0:0(eng): Video: h264 (High) (avc1/0x31637661), yuv420p, 1280x720, 1780 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default) 
    Metadata: 
     handler_name : VideoHandler 
    Stream #0:1(eng): Audio: aac (LC) (mp4a/0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default) 
    Metadata: 
     handler_name : SoundHandler 

Казалось s, что входной и выходной файлы должны быть идентичными, а входной файл - 116 МБ, а итоговый выходной файл - 51,7 МБ.

Если кодеки и разрешение одинаковы, и качество видео невооруженным глазом не меняется, почему размер файла настолько отличается?

+1

По какой причине вы это делаете? – Danijel

ответ

3

Это не так lossy codecs работа. Кодирование - это компромисс между временем процессора, затрачиваемым на кодирование, битрейт и качество восприятия. С различными настройками для одного и того же кодека вы получите другой выход.

Даже используя точные настройки, подача выходного сигнала x264 обратно в качестве входа, вызывает каждый раз generation loss. Некоторые кодеки (например, я думаю) спроектированы так, что потери поколений прекращаются после поколения или двух, но h.264 не так. Отчасти потому, что он имеет фильтр деблокирования в цикле, а отчасти просто из-за того, как он имеет ограниченную точность для ссылок.

https://trac.ffmpeg.org/wiki/Encode/H.264 может помочь некоторым, но вы недопонимаете некоторые очень простые понятия в lossy compression.

0

В данной команде указаны только имена кодеков, есть дополнительные параметры, которые управляют качеством видео во время кодирования.
Например, вы могли бы указать -b: v 4160 или -crf 20, тогда вы не увидите большого изменения качества и размера видео.
Если вы не укажете все параметры, ffmpeg примет значения по умолчанию для них. Если вы хотите сохранить одинаковый размер файла, вы не должны перекодировать видео. Вы можете использовать команду как

ffmpeg -i input.mp4 -acodec copy -vcodec copy output.mp4 

Для Referance пожалуйста, посетите эту страницу https://trac.ffmpeg.org/wiki/Encode/H.264?

Смежные вопросы