Подтвердить что ты не робот

Повторная выборка видео H264 для снижения частоты кадров при сохранении высокого качества изображения

Здесь вывод mplayer для интересующего видео:

[email protected]:/tmp$ mplayer foo.mov 
mplayer: Symbol `ff_codec_bmp_tags' has different size in shared object, consider re-linking
MPlayer 1.0rc4-4.5.2 (C) 2000-2010 MPlayer Team
mplayer: could not connect to socket
mplayer: No such file or directory
Failed to open LIRC support. You will not be able to use your remote control.

Playing foo.mov.
libavformat file format detected.
[lavf] stream 0: video (h264), -vid 0
[lavf] stream 1: audio (aac), -aid 0, -alang eng
VIDEO:  [H264]  1280x720  24bpp  59.940 fps  2494.2 kbps (304.5 kbyte/s)
==========================================================================
Opening video decoder: [ffmpeg] FFmpeg libavcodec codec family
Selected video codec: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
==========================================================================
Opening audio decoder: [faad] AAC (MPEG2/4 Advanced Audio Coding)
AUDIO: 44100 Hz, 2 ch, s16le, 128.0 kbit/9.07% (ratio: 15999->176400)
Selected audio codec: [faad] afm: faad (FAAD AAC (MPEG-2/MPEG-4 Audio))
==========================================================================
AO: [pulse] 44100Hz 2ch s16le (2 bytes per sample)
Starting playback...
Movie-Aspect is 1.78:1 - prescaling to correct movie aspect.
VO: [vdpau] 1280x720 => 1280x720 Planar YV12

Я хотел бы использовать ffmpeg, mencoder или какой-нибудь другой транскодер для командной строки, чтобы перепробовать это видео на более низкую частоту кадров без потери качества изображения. То есть, каждый кадр должен оставаться максимально четким.

Попытки

ffmpeg -i foo.mov -r 25 -vcodec copy bar.mov
  • Целевая частота кадров - 25 кадров в секунду - достигается, но отдельные кадры являются "блочными".
mencoder -nosound -ovc copy foo.mov -ofps 25 -o bar.mov
  • Видео эффективно не просматриваются.

Помогите!

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

4b9b3361

Ответ 1

С момента публикации в 2012 году многое изменилось. Я добавляю этот ответ для таких людей, как я, которые находят это в поисковых системах. Мне повезло со следующим:

ffmpeg -y -i source.mp4 -r 25 -s 160x90 -c:v libx264 -b:v 3M -strict -2 -movflags faststart destination.mp4

Вот краткое объяснение того, что делает каждый параметр:

  • -y: перезаписывать выходные файлы без запроса
  • -i source.mp4: имя входного файла
  • -r 25: частота выходного кадра (в кадрах в секунду)
  • -s 160x90: размер выходного кадра (в пикселях) - вставляет масштабный видеофильтр
  • -c:v libx264: выходной видеокодер
    • -c:v не подходит для -codec:v и -vcodec
  • -b:v 3M: битрейт видео (в бит/с) передан кодировщик libx264
  • -strict -2: регулирует соответствие стандартам; -2 позволяет использовать экспериментальные функции, необходимые для включения встроенного аудиокодера FFmpeg AAC в версиях старше версии 2015-12-05, см. здесь, AAC теперь является аудиокодером по умолчанию.
  • -movflags faststart: переместите индекс в начало выходного файла (формат mov и mp4)

Подробнее см. официальную документацию .

Ответ 2

Как указал Энди Т, вы абсолютно должны перекодировать видео, но это не означает, что качество должно быть уменьшено любым заметным образом.

Во-первых, убедитесь, что вы не используете старое программное обеспечение. Видеокодеки являются быстро движущимся полем со значительным продвижением каждые несколько недель. В настоящее время x264 является самым передовым программным обеспечением видеокодера. Вероятно, это то, что использует mplayer, но вы можете получить последний реальный релиз от www.x264.nl

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

Затем используйте это как вход для x264. Я предлагаю вам использовать вспомогательное программное обеспечение, например Staxrip (поместите самый новый 32-разрядный 8-бит на канал x264 в StaxRip\Applications\x264.

Если вам требуется абсолютное лучшее качество с наименьшим размером файла, где вы вряд ли заметите разницу, используйте такую ​​командную строку (с x264):

x264 --preset placebo --tune film --crf 22 --level 4.1 --threads 1 --thread-input --sar 12:11 --output "<target>" "<source>"

У Staxrip есть опции, которые переключают пресет на плацебо, настраивают для источников фильма (при условии, что это не анимация, конечно) и уменьшить количество потоков до 1.

Вы можете изменить "-crf 22" на 21 для более высокого качества видео высокого качества, но я обнаружил, что CRF22 находится примерно в том месте, где мне очень трудно заметить разницу, даже при сравнении кадров -Рамка. Любое изменение в других настройках, вероятно, приведет к снижению качества или увеличению размера файла без повышения качества. Увеличение количества потоков значительно улучшит скорость кодирования (очевидно, на многоядерных системах), но будет немного уменьшать качество (или в этом случае, поскольку мы используем CRF, который основан на качестве, немного увеличит размер файла, например, менее 1% для 4 потоков).

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

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

Ответ 3

Вам нужно перекодировать видео в любом случае. Транскодирование означает, что вы будете декодировать поток, изменить частоту кадров (кадры в простом случае), а затем снова закодировать. Конфигурация кодирования и даже кодек не зависят от того, как было предварительно закодировано видео, поэтому вы можете использовать все, что подходит для ваших нужд. Если вам нужно максимально возможное качество, просто выполните кодировку с высоким профилем в качестве первой попытки. Затем вы можете попытаться настроить эту еще большую игру с многочисленными параметрами кодирования h.264.