ffmpeg для уменьшения отношения и качества YUV к любому другому формату

У меня есть видео в формате HD 1920x1080 YUV. Я хотел бы сжать их в 640x480, а другой преобразовать в другой формат (mp4/avi..). Я использовал следующую команду:

ffmpeg -f rawvideo -pix_fmt yuv420p -s:v 1920x1080 -r 25 -i input.yuv -c:v libx264 output.mp4
It converts the video but it looks **blurry** and **broken**.

Есть ли у кого-нибудь лучшее решение моей проблемы? [Я нашел много решений, похожих на приведенное выше, но ни одно из них не работает хорошо] Я был бы очень признателен за вашу помощь.


person mrana    schedule 08.08.2015    source источник
comment
Можете ли вы добавить образцы кадров?   -  person Rekin    schedule 08.08.2015
comment
@ Рекин, я не уверен, что ты имеешь в виду. Можете ли вы дать мне код, который я бы попробовал, если это поможет сжать и ..   -  person mrana    schedule 08.08.2015
comment
Можете ли вы загрузить где-нибудь скриншот сравнения ввода и вывода, чтобы указать, почему вы считаете, что качество плохое? Мне кажется, что вы не выбираете какие-либо переменные управления скоростью/качеством для кодирования видео, поэтому я бы начал с выбора некоторых из них. Например, попробуйте -b:v 1024k -preset:v veryslow (после -c:v libx264, но перед output.mp4). См. также trac.ffmpeg.org/wiki/Encode/H.264.   -  person Ronald S. Bultje    schedule 08.08.2015
comment
оригинал (yuv): dropbox.com/s/a1hf5hv6omqthaw/original.png ?dl=0 После сжатия (mp4): dropbox.com/s/2m7f43vwvtjvyuo/after-compression.png?dl=0   -  person mrana    schedule 09.08.2015
comment
@RonaldS.Bultje этот код: ffmpeg -f rawvideo -pix_fmt yuv420p -s:v 1920x1080 -r 25 -i input.yuv -c:v libx264 -b:v 1024k -preset:v veryslow output.mp4 Сломанный вывод: dropbox.com/s/7bhq6pe4cpz2u5x/test2.png?dl=0   -  person mrana    schedule 09.08.2015
comment
Первый снимок экрана (2m7f43vwvtvyuo) предполагает, что ввод не является необработанным yuv при разрешении 1920x1080. Я не знаю, что это такое, мне понадобятся первые 10-20 МБ файла, чтобы понять это. Я предполагаю, что это y4m или какой-то другой необработанный формат yuv с заголовком вокруг него. Что говорит ffprobe input.yuv?   -  person Ronald S. Bultje    schedule 09.08.2015
comment
@RonaldS.Bultje, будет здорово, если вы попробуете любое видео из этого списка: ftp.ivc.polytech.univ-nantes.fr/IRCCyN_IVC_1080i_Database/   -  person mrana    schedule 09.08.2015
comment
Прежде чем я что-нибудь скачаю, не могли бы вы сначала дать вывод ffprobe file.yuv?   -  person Ronald S. Bultje    schedule 09.08.2015
comment
команда: ffprobe input.yuv Результат ›› [IMGUTILS @ 0x7fff50400140] Picture size 0x0 is invalid Last message repeated 1 times [rawvideo @ 0x7fe99a802a00] Could not find codec parameters for stream 0 (Video: rawvideo (I420 / 0x30323449), yuv420p, -4 kb/s): unspecified size Consider increasing the value for the 'analyzeduration' and 'probesize' options input.yuv: Operation not permitted   -  person mrana    schedule 09.08.2015
comment
@RonaldS.Bultje, ты что-нибудь нашел? Спасибо   -  person mrana    schedule 10.08.2015
comment
@RonaldS.Bultje, не могли бы вы попытаться ответить на этот вопрос: stackoverflow.com/questions/33378548/   -  person mrana    schedule 28.10.2015


Ответы (2)


Ваши видео не yuv420p, они yuv422p. Используйте следующую командную строку:

ffmpeg -f rawvideo -pix_fmt yuv422p -s:v 1920x1080 -r 25 -i input.yuv -c:v libx264 output.mp4

Затем используйте переменные управления скоростью для кодирования H264, как описано здесь.

person Ronald S. Bultje    schedule 10.08.2015
comment
Это отлично!! Как я могу преобразовать видео в пайку: 640 × 480 Большое спасибо. - person mrana; 10.08.2015
comment
ffmpeg -f rawvideo -pix_fmt yuv422p -s:v 1920x1080 -r 25 -i input.yuv -c:v libx264 -vf scale=640:480 output.mp4 - person Ronald S. Bultje; 10.08.2015
comment
Уважаемый @Ronald, я не хочу потери качества от оригинала к новому. Как я могу доказать, что качество видео не изменилось, может быть значение PSNR? Кроме того, если качество видео изменится, можем ли мы уменьшить количество искажений качества видео? Буду признателен за идеи. Спасибо еще раз. - person mrana; 12.08.2015
comment
Отсутствие потери качества означает отсутствие потерь, проверьте раздел без потерь в trac.ffmpeg.org/wiki/Encode /H.264 - чтобы проверить это, используйте, например. фильтр psnr: ffmpeg -f rawvideo -pix_fmt yuv422p -s:v 1920x1080 -r 25 -i input.yuv -i output.mp4 -lavfi psnr -f null - и проверьте наличие строки [Parsed_psnr_0 @ 0x7f8b98525600] PSNR y: inf u:inf v:inf medium:inf min:inf max:inf на выходе. Значение inf означает, что преобразование было без потерь. Типичное значение составляет около 40, все, что значительно выше (50 или 60), является невероятно хорошим качеством, а все, что ниже (например, 30), довольно ужасно. - person Ronald S. Bultje; 13.08.2015
comment
Дорогой Рональд, большое спасибо (я отвечу вам на это позже). Я разместил еще один вопрос: stackoverflow.com/questions/31981455/ У меня все еще нет решения, можете ли вы проверить это тоже. Большое спасибо - person mrana; 13.08.2015
comment
Уважаемый @Ronald, у меня есть еще 2 вопроса, которые я хочу задать вам: 1. Я изменил размер видео с 1920x1080 до 480:270 (хорошее соотношение) без потерь с помощью следующей команды: ffmpeg -f rawvideo -pix_fmt yuv422p -s:v 1920x1080 -r 25 -i above_marathon_250.yuv -c:v libx264 -vf scale=480:270 -qp 0 above_marathon_250.mp4 Как только я пытаюсь найти значение PSNR, я получаю следующую проблему: выпадающий ящик. com/s/h2djohk3d3q6uj6/ 2. Каково минимальное значение PSNR для отсутствия видимых артефактов (без видимых искажений) и как его установить? Спасибо большое. - person mrana; 20.08.2015
comment
Привет, mrana, вы, вероятно, хотите открыть новый вопрос, это довольно не по теме для этого вопроса, что не помогает для общей возможности поиска в стеке. - person Ronald S. Bultje; 20.08.2015
comment
Я разместил его здесь: (не уверен, как публиковать для экспертов) stackoverflow.com/questions/32125123/ - person mrana; 20.08.2015
comment
Рональд, не могли бы вы проверить этот пост: stackoverflow.com/questions/32125123/ - person mrana; 21.08.2015

Вы не указываете коэффициент качества или битрейт, поэтому для вас выбирается значение по умолчанию. попробуйте добавить что-то вроде -crf 18.

person szatmary    schedule 08.08.2015
comment
Добавление -crf 18 дает мне неверный вывод: ffmpeg -f rawvideo -pix_fmt yuv420p -s:v 1920x1080 -r 25 -i input.yuv -c:v libx264 -crf 18 output.mp4 Вывод: dropbox.com/s/q0typhkyna3mc6r/test1.png?dl=0 - person mrana; 09.08.2015
comment
ffmpeg -f rawvideo -pix_fmt yuv420p -s:v 1920x1080 -r 25 -i input.yuv -c:v libx264 -crf 18 output.mp4 Плохой результат: dropbox.com/s/q0typhkyna3mc6r/test1.png?dl=0 @szatmary - person mrana; 09.08.2015