2017-01-11 7 views
2

Чтобы получить видеоролик 200x100, я делаю ffmpeg -ss 100 -i /tmp/video.mp4 -frames:v 1 -s 200x100 image.jpg. Но если исходное видео не совпадает с форматом 200x100, миниатюра искажается (растягивается или скручивается, горизонтально или вертикально), и это выглядит плохо.Используйте ffmpeg для создания миниатюры видео без каких-либо искажений

Есть ли способ, что ffmpeg может выяснить, например, что 500x200 видео 100px слишком широк, и удалить 50px справа и 50px слева, делая видео 400x200? И поскольку 400x200 имеет такое же соотношение сторон, как и 200x100, эскиз не будет искажать.

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

+0

Это может помочь: https://stackoverflow.com/questions/8218363/maintaining-ffmpeg-aspect-ratio –

ответ

2

Вы можете использовать опцию force_original_aspect_ratio в формате scale.

ffmpeg -ss 100 -i /tmp/video.mp4 -frames:v 1 -q:v 2 -vf "scale=200:100:force_original_aspect_ratio=increase,crop=200:100" image.jpg 
+0

Будет ли это работать одинаково, если видео является более высоким или более широким, чем соотношение сторон миниатюры, которую вы хотите? И если, например, видео имеет ширину в 100 пикселей для соотношения сторон, оно будет удалять равные части слева и справа (по 50 пикселей каждый)? – user779159

+0

@LordNeckbeard - сканер сохраняет SAR в выходе, который не подчиняется сторонним приложениям. Фотошоп, например. чтит SAR для JPG, но не PNG. Firefox не оценивает его ни для одного формата. – Mulvya

+0

@ user779159 Он обрезает лишний, если он слишком широкий или слишком высокий. Обрезка будет автоматически центрирована. Если вы хотите отрегулировать координаты обрезки, см. Документацию [фильтрация фильтра] (https://ffmpeg.org/ffmpeg-filters.html#crop). – LordNeckbeard

4

Если ваш размер миниатюр 200x100 фиксирован, а затем запустить

ffmpeg -ss 100 -i /tmp/video.mp4 -vf "scale='if(gt(dar,200/100),100*dar,200)':'if(gt(dar,200/100),100,200/dar)',setsar=1,crop=200:100" -frames:v 1 image.jpg 

Масштаба фильтр проверяет соотношение сторон источника и масштаба так, что один размер подходит 200x100 холсту и другие проскакивании, если это не идеальное совпадение. Затем фильтр урожая обрезает его до 200x100 от центра, таким образом, заботясь о области за пределами.

+0

Это может привести к выходу менее чем один из требуемых размеров и вызовет урожай на провал (используя вход с SAR 115: 87, например). – LordNeckbeard

+0

Да, '-1' не учитывает SAR. Исправленный. – Mulvya