MyTetra Share
Делитесь знаниями!
Видео из командной строки
Время создания: 22.06.2016 11:34
Автор: easy_john
Текстовые метки: видео, ffmpeg
Раздел: Обычные - Linux
Запись: sirrichar/sirdata/master/base/1466584470ttkoasduie/text.html на raw.githubusercontent.com

— Первым делом, дабы избежать потери информации из-за массовых перекодировок, я бы рекомендовал перевести все имеющиеся форматы в loosless h.265 (или любой другой loseless raw формат, с которым вам удобно работать)
trac.ffmpeg.org/wiki/Encode/H.264
Запаситесь местом, каждые минута FullHD видео будут занимать ~1.3 Gb.

— Склеить видео состоящее из нескольких кусков в один фаил:
echo -e "file './180318AA.mp4'\nfile './180618AA.mp4'" | ffmpeg -f concat -safe 0 -i - -c copy ./dome_full.mp4

— Вырезать 60 секунд видео со второй минуты 21 секунды (порядок ключей имеет значение):
ffmpeg -i ./AMBA0003.mp4 -ss 02:21 -t 60 -c copy ./carcamq2_1_1.mp4

— Поворот кадра на 2.5 градуса против часовой стрелки (использовал только для обзорных видео, ибо это вносит искажение в картинку):
ffmpeg -i ./contour_2_1.mp4 -vf "rotate=-2.5*PI/180:ow=iw:oh=ih" -acodec copy ./contour_2_1_rotated.mp4

— Из видео сохраняем все кадры, из кадров вырезаем только горизонтальную полосу, полосы склеиваем одна под другой в большую картинку:

#convet video to png pictures (15 png per second)
ffmpeg -i ./carcamq2_1_1.mp4 -r 15 ./picture_%04d.png
# crop area=1920x100, started from x=0, y=550
for filename in ./picture_*.png ; do convert ${filename} -crop 1920x100+0+550 +repage ${filename} ; done
montage ./picture_*.png -border 1 -geometry +0+0 -tile 1x ./carcamq2_1_1-full.png
rm ./picture_*.png



— Вырезать из видео горизонтальную полосу, если ширина куска меньше 1920 — добавить черный фон по бокам:

# video crop=width:heigth:pos_x:pos_y
ffmpeg -i gopro_2_1.mp4 -filter_complex "[0:v]crop=1600:360:iw/3:ih/3 , pad=width=1920:height=ih:x=(1920-iw)/2:y=0:color=black" ./gopro_2_1_crop.mp4



— Склеить видео из трех полосок в одно полнокадровое:

ffmpeg -i gopro_2_1_crop.mp4 -i gopro_2_2_crop.mp4 -i gopro_2_3_crop.mp4 \
   -qscale 0 -filter_complex \
"pad=1920:1080[tmp1]; \
[tmp1][0:v]overlay=0:0[tmp2]; \
[tmp2][1:v]overlay=300:360[tmp3]; \
[tmp3][2:v]overlay=500:720[out]" -map "[out]" gopro_all.mp4



— Наложение прозрачного png поверх видео:
ffmpeg -i test1_day.mp4 -i test1_overlay.png -qscale 0 -filter_complex "[0:v][1:v]overlay=0:0[out]" -map "[out]" test1_day_overlay.mp4

— создать 5-секундную видео-вставку из готовой картинки
ffmpeg -framerate 1/5 -i test1_day_overview.png -c:v libx264 -r 30 test1_day_overview.mp4

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

Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования