Как-то зачастил я кататься куда попало, решил время зря не терять, посмотреть что-нибудь в поездке (а то что-то выходит новое в киноиндустрии, да дома времени нет даже пролистать).
Девайс у меня HTC Desire Z (Qualcomm 800MHz Display 800x480). Родное видео с камеры выдаёт по ffmpeg -iInput #0, mov,mp4,m4a,3gp,3g2,mj2, from 'VIDEO0008.3gp':
Metadata:
major_brand : 3gp4
minor_version : 0
compatible_brands: isom3gp4
Duration: 00:00:05.59, start: 0.000000, bitrate: 4249 kb/s
Stream #0.0(eng): Audio: aac, 44100 Hz, mono, s16, 63 kb/s
Stream #0.1(eng): Video: h264 (Baseline), yuv420p, 480x800, 3089 kb/s, PAR 65536:65536 DAR 3:5, 23.34 fps, 90k tbr, 90k tbn, 180k tbcНу и соответственно из рассчёта что может быть ЭТО смартфоном будет декодироваться как-то аппаратно (не так тормозить, не так садить батарею), хотелось бы оптимально подогнать конвертируемое видео к такому формату.
Пока получился такой вот скрипт
#!/bin/sh
size=800x480
video_out=video$size
mkdir $video_outfor i in *.flv *.mp4
do
ffmpeg -i "$i" -vf "scale=800:480,unsharp" -r 24 -vb 1200k -vcodec mpeg4 -acodec libfaac -ab 96k -ar 44100 $video_out/"$i.mp4"
doneИз косяков:
1) Видео более маленького разрешения растягивается. Есть какой-то параметр у ffmpeg чтобы не увеличивать разрешение?
2) Не совсем разобрался, как оно будет масштабировать левые пропорции. Будет опять же растягивать лица или обрезать края?Ну и может кто подскажет ещё пару каких фокусов, как оптимизировать это под смартфоны/телефоны?
> 1) Видео более маленького разрешения растягивается. Есть какой-то параметр у ffmpeg чтобы
> не увеличивать разрешение?Так и должно быть при применении видеофильтра scale, если нужен другой размер то надо поменять параметры фильтра, вместо 800:480 указать нужные, если ненадо изменять размер то вместо видеофильтра scale надо использовать фильтр copy.
Можно задать размер с помощью параметра -s.
> 2) Не совсем разобрался, как оно будет масштабировать левые пропорции. Будет опять
> же растягивать лица или обрезать края?Будет растягивать-сжимать. Для обрезания кадра есть параметры -croptop, -cropbottom и т.д., этого эффекта можно добиться с помощью фильтра crop.
> вместо видеофильтра scale надо использовать фильтр copy.И тогда перекодирования видеоданных вообще не будет, в итоге смартфон не справляется с раскодированием.
Нужно
1) Для видео бОльшего размера уменьшить разрешение до 800:480
2) Для видео меньшего размера оставить разрешение без изменений
3) Перекодировать из всяких жестоко тормозных flv в mpeg4
Я понимаю что каждый файл можно ручками тискать, подгоняя разрешение по необходимости, но хотелось бы всю очередь скриптом прогнать за ночь и утром уже забрать нормальные файлы на смартфон и ехать, а не плясать всю ночь над каждым файлом с подгонкой разрешения
>> вместо видеофильтра scale надо использовать фильтр copy.
> И тогда перекодирования видеоданных вообще не будет, в итоге смартфон не справляется
> с раскодированием.вообще фильтры scale и copy перекодированием не занимаются, они задуманы для работы с размером изображения.
> вообще фильтры scale и copy перекодированием не занимаются, они задуманы для работы
> с размером изображения.Поэтому у меня этот пункт выполняется через указание -vcodec mpeg4. Вопрос не в этом. Вопрос в том, как изменить размер в меньшую сторону, если он больше заданного, но оставить неизменным, если он меньше заданного.
>[оверквотинг удален]
> ffmpeg -i "$i" -vf "scale=800:480,unsharp" -r 24 -vb
> 1200k -vcodec mpeg4 -acodec libfaac -ab 96k -ar 44100 $video_out/"$i.mp4"
> done
> Из косяков:
> 1) Видео более маленького разрешения растягивается. Есть какой-то параметр у ffmpeg чтобы
> не увеличивать разрешение?
> 2) Не совсем разобрался, как оно будет масштабировать левые пропорции. Будет опять
> же растягивать лица или обрезать края?
> Ну и может кто подскажет ещё пару каких фокусов, как оптимизировать это
> под смартфоны/телефоны?Для аппаратного декодирования важен вот этот параметр: Video: h264 (Baseline)
Для своей NOKIA C7 кодирую с
-vcodec libx264 -profile:v baseline