По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
В этом подробном руководстве показано, как установить ffmpeg в Ubuntu и других дистрибутивах Linux. Он также демонстрирует некоторые полезные команды ffmpeg для практического использования. ffmpeg - это утилита командной строки (CLI) для обработки мультимедийных файлов. Это фреймворк с множеством функций и, благодаря лицензии с открытым исходным кодом, является основой для многих распространенных приложений, таких как VLC, YouTube, iTunes и многих других. Ряд видеоредакторов для Linux используют ffmpeg под GUI. В этом руководстве мы расскажем, как установить ffmpeg, и как использовать его базовые и продвинутые функции. Установка ffmpeg в Linux Установка ffmpeg - это простой процесс. Это популярное приложение, которое доступно в большинстве дистрибутивов Linux через менеджер пакетов. Установка ffmpeg в Ubuntu В Ubuntu ffmpeg доступен в репозитории Universe , поэтому убедитесь, что он включен. а затем обновите список пакетов и установите ffmpeg. Вы можете сделать все это, используя следующие команды в терминале: sudo add-apt-repository universe sudo apt update sudo apt install ffmpeg Готово! Чтобы проверить установку выполните: ffmpeg Вы должны увидеть вывод, описывающий вашу конфигурацию ffmpeg, включая версию. Как вы можете видеть на скриншоте выше, установлена версия 3.4.4. Однако последняя версия ffmpeg на момент написания этой статьи - 4.2. Чтобы установить любую версию 4.x, вы должны установить ffmpeg через PPA (персональный архив пакетов). Существует неофициальный PPA, который вы можете использовать для установки последней версии ffmpeg. Просто используйте эти команды: sudo add-apt-repository ppa:jonathonf/ffmpeg-4 sudo apt update sudo apt install ffmpeg -y Установка ffmpeg в дистрибутивах на основе Arch Чтобы установить ffmpeg в дистрибутивах на основе Arch, используйте следующую команду: sudo pacman -S ffmpeg Установка ffmpeg в дистрибутивах на основе Fedora Чтобы установить ffmpeg в дистрибутивы Linux на основе Fedora, вы можете использовать эту команду: sudo dnf install ffmpeg Установка ffmpeg в CentOS/RHEL FFmpeg недоступен в репозиториях CentOS 8 по умолчанию. Вы можете собрать инструменты ffmpeg из исходного кода или установить его с помощью утилиты dnf из репозитория Negativo17. Репозиторий Negativo17 зависит от репозиториев EPEL (Extra Packages for Enterprise Linux) и PowerTools. Для их включения используйте: sudo dnf install epel-release sudo yum config-manager --set-enabled PowerTools sudo yum-config-manager --add-repo=https://negativo17.org/repos/epel-multimedia.repo После включения этих репозиториев уже можно установить сам ffmpeg: sudo dnf install ffmpeg Установка ffmpeg в Debian Официальные репозитории Debian содержат пакеты FFmpeg, которые можно установить с помощью менеджера пакетов apt. sudo apt install ffmpeg Как использовать ffmpeg: Основы С установленным ffmpeg перейдем к основным командам, чтобы вы начали использовать этот мощный инструмент. Основные строительные блоки ffmpeg: ffmpeg - инструмент командной строки для конвертации мультимедийных файлов между форматами ffplay - простой медиаплеер на основе SDL и библиотек FFmpeg ffprobe - простой мультимедийный анализатор потоков ffmpeg также содержит библиотеки для разработчиков - libavutil, libavcodec, libavformat, libavdevice, libavfilter, libswscale и libswresample. Процесс транскодирования в ffmpeg для может быть описан следующей схемой: 0. Команды ffmpeg Основная форма команды ffmpeg: ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ... Вы должны иметь в виду, что все параметры файла применяются только к файлу, который следует за ними (и вы должны будете записать их снова для следующего файла). Любой файл, которому не предшествует -i, считается выходным файлом. ffmpeg использует столько входов и выходов, сколько вы предоставляете. Вы также можете использовать одно и то же имя как для входного, так и для выходного файла, но вам придется добавить тег -y перед именем выходного файла. Вы не должны смешивать входы и выходы: сначала укажите входные файлы, затем укажите выходные файлы. 1. Получить информацию медиа файла Первое использование ffmpeg - отображение информации о медиафайле. Это можно сделать, не вводя никаких выходных файлов. Просто введите: ffmpeg -i file_name Это работает для аудио и видео файлов: ffmpeg -i video_file.mp4 ffmpeg -i audio_file.mp3 Хотя эта команда полезна, она отображает слишком много информации, которая не относится к вашему файлу (информация о ffmpeg). Чтобы пропустить это, добавьте флаг -hide_banner: ffmpeg -i video_file.mp4 -hide_banner ffmpeg -i audio_file.mp3 -hide_banner Как вы можете видеть, команда теперь выводит только информацию, касающуюся указанного вами медиа-файла (кодировщик, потоки и так далее). 2. Конвертировать медиа файлы Еще один очень полезный способ использования ffmpeg - это беспроблемное преобразование между различными форматами мультимедиа. Вам нужно только указать входные и выходные файлы, так как ffmpeg получит требуемый формат из расширений файлов. Это работает для преобразования видео в видео и аудио в аудио. Вот некоторые примеры: ffmpeg -i video_input.mp4 video_output.avi ffmpeg -i video_input.webm video_output.flv ffmpeg -i audio_input.mp3 audio_output.ogg ffmpeg -i audio_input.wav audio_output.flac Вы даже можете указать больше выходных файлов: ffmpeg -i audio_input.wav audio_output_1.mp3 audio_output_2.ogg Это преобразует входные файлы во все указанные форматы. Чтобы увидеть список всех поддерживаемых форматов, используйте: ffmpeg -formats Опять же, вы можете добавить -hide_banner, чтобы опустить информацию о приложении. Вы можете указать параметр -qscale 0 перед выходным файлом, чтобы сохранить качество видеофайла: ffmpeg -i video_input.wav -qscale 0 video_output.mp4 Кроме того, вы можете указать кодеки, которые вы хотите использовать, добавив -c:a (для аудио) и -c:v (для видео) с последующим названием кодеков, или скопировать, если хотите использовать те же кодеки, что и оригинальный файл: ffmpeg -i video_input.mp4 -c:v copy -c:a libvorbis video_output.avi 3. Извлечение аудио из видео Чтобы извлечь аудио из видеофайла, вы делаете простое преобразование и добавляете флаг -vn: ffmpeg -i video.mp4 -vn audio.mp3 Обратите внимание, что эта команда будет использовать битрейт (скорость передачи) исходного файла. Вы можете установить его вручную, и для этого использовать -ab (audio bit rate): ffmpeg -i video.mp4 -vn -ab 128k audio.mp3 Некоторые распространенные битрейты: 96 КБ, 128 КБ, 192 КБ, 256 КБ, 320 КБ (максимальный битрейт, поддерживаемый mp3). Другими общими параметрами являются -ar (частота звука: 22050, 441000, 48000), -ac (количество аудиоканалов), -f (формат аудио, хотя обычно определяется автоматически). -ab также можно заменить на -b:a. Например: ffmpeg -i video.mov -vn -ar 44100 -ac 2 -b:a 128k -f mp3 audio.mp3 4. Отключение звука в видео Как и в последнем примере, для этого мы добавим простой тег: -an (вместо -vn). ffmpeg -i video_input.mp4 -an -video_output.mp4 Примечание: Тег -an сделает все параметры звука для этого выходного файла бесполезными, поскольку в результате операции не будет звука. 5. Извлечение изображений из видео Допустим, у вас есть серия изображений (например, слайд-шоу), и вы хотите получить все изображения из этого. Просто введите: ffmpeg -i video.mp4 -r 1 -f image2 image-%3d.png -r указывает частоту кадров (сколько кадров извлекается в изображения за одну секунду, по умолчанию: 25), -f указывает формат вывода. Последний параметр (выходной файл) имеет несколько интересное название: в конце он использует %3d. Это просто нумерует ваши изображения с 3 цифрами (000, 001 и так далее). Вы также можете использовать %2d (двухзначный формат) или даже %4d (четырехзначный формат), если хотите. 6. Изменение разрешения видео или соотношения сторон Еще одно простое задание для ffmpeg. Все, что вам нужно сделать, чтобы изменить размер видео, это указать новое разрешение после флага -s: ffmpeg -i video_input.mov -s 1024x576 video_output.mp4 Кроме того, вы можете указать -c:a, чтобы убедиться в правильности аудиокодеков выходного файла: ffmpeg -i video_input.h264 -s 640x480 -c:a video_output.mov Вы также можете изменить соотношение сторон, используя -aspect: ffmpeg -i video_input.mp4 -aspect 4:3 video_output.mp4 7. Добавить изображение обложки в аудио Это отличный способ превратить аудио в видео, используя одну фотографию (например, обложку альбома) для аудио. Это очень полезная функция, когда вы хотите загружать аудиофайлы на сайты, на которых не разрешено ничего, кроме видео и изображений (YouTube и Facebook являются примерами таких сайтов). Вот пример: ffmpeg -loop 1 -i image.jpg -i audio.wav -c:v libx264 -c:a aac -strict experimental -b:a 192k -shortest output.mp4 Просто измените кодеки (-c:v указывает видеокодеки, -c:a указывает аудиокодеки) и имена ваших файлов. Также вам не нужно использовать -strict experimental, если вы используете более новую версию (4.x). 8. Добавить субтитры к видео С ffmpeg просто добавить субтитры к видео. Введите следующее: ffmpeg -i video.mp4 -i subtitles.srt -c:v copy -c:a copy -preset veryfast -c:s mov_text -map 0 -map 1 output.mp4 Конечно, вы можете указать любые кодеки, которые вы хотите (и любые другие дополнительные параметры, связанные с аудио и видео). 9. Сжатие медиа-файлов Сжатие файлов значительно уменьшает размер файла, экономя вам много места. Это может быть важно для передачи файлов. С ffmpeg есть несколько способов уменьшить размер файла. Примечание: Слишком большое сжатие файлов заметно ухудшит качество получаемого файла. Прежде всего, для аудиофайлов просто уменьшите битрейт (используя -b:a или -ab): ffmpeg -i audio_input.mp3 -ab 128k audio_output.mp3 ffmpeg -i audio_input.mp3 -b:a 192k audio_output.mp3 Опять же, некоторые значения битрейта: 96k, 112k, 128k, 160k, 192k, 256k, 320k. Чем выше битрейт, тем выше размер файла и качество. Для видео файлов у вас есть больше вариантов. Один из способов - уменьшить битрейт видео (используя -b:v): ffmpeg -i video_input.mp4 -b:v 1000k -bufsize 1000k video_output.mp4 Вы можете установить флаг -crf (Constant Rate Factor - коэффициент постоянной скорости). Чем ниже CRF, тем выше скорость передачи данных. Также помогает использование libx264 в качестве видеокодека. Вот очень эффективное уменьшение размера с очень небольшим снижением качества: ffmpeg -i video_input.mp4 -c:v libx264 -crf 28 video_output.mp4 CRF от 20 до 30 распространен, но можно выставлять и другие значения. Снижение частоты кадров (фреймрейта) может работать в некоторых случаях (хотя это может очень легко сделать видео медленным): ffmpeg -i video_input.mp4 -r 24 video_output.mp4 -r указывает частоту кадров (в данном случае 24). Вы также можете попробовать уменьшить разрешение видео (смотри выше как это сделать). Дополнительным советом является сжатие звука, делая его стереофоническим и снижая скорость передачи данных. Например: ffmpeg -i video_input.mp4 -c:v libx264 -ac 2 -c:a aac -strict -2 -b:a 128k -crf 28 video_output.mp4 Примечание: -strict -2 и -ac 2 позаботятся о стерео части 10. Обрезать медиа файлы Чтобы обрезать файлы с самого начала, вы должны указать продолжительность, используя -t: ffmpeg -i input_video.mp4 -t 5 output_video.mp4 ffmpeg -i input_audio.wav -t 00:00:05 output_audio.wav Как видите, это работает как для видео, так и для аудио файлов. Обе команды выше делают одно и то же: сохраняют первые 5 секунд входного файла в выходной файл. Можно использовать различные способы ввода длительности, как видно в примере - одно число (количество секунд) и ЧЧ:ММ:СС (часы, минуты, секунды). Вы можете пойти еще дальше, указав время начала с -ss и даже время окончания с -to: ffmpeg -i input_audio.mp3 -ss 00:01:14 output_audio.mp3 ffmpeg -i input_audio.wav -ss 00:00:30 -t 10 output_audio.wav ffmpeg -i input_video.h264 -ss 00:01:30 -to 00:01:40 output_video.h264 ffmpeg -i input_audio.ogg -ss 5 output_audio.ogg Вы можете тут видеть время начала -ss (ЧЧ:ММ:СС), длительность -t в секундах, время окончания -to (ЧЧ:ММ:СС) и время начала -s (начать после указанного времени в секундах). Как использовать ffmpeg: Расширенное использование Теперь мы расскажем о чуть более продвинутых функциях, таких как запись экрана, использование устройств и другие. 1. Обрезка медиа-файлов Чтобы разделить файл на несколько частей, нужно указать несколько разделений (указать время начала, время окончания или продолжительность перед каждым выходным файлом). Посмотрите на этот пример: ffmpeg -i video.mp4 -t 00:00:30 video_1.mp4 -ss 00:00:30 video_2.mp4 Синтаксис довольно прост. Мы указали -t 00:00:30 как продолжительность для первой части (первая часть будет состоять из первых 30 секунд исходного видео). Далее мы указали, что мы хотели бы, чтобы остальные были частью второго видео (начиная с конца последней части, 00:00:30). Это можно сделать для любого количества частей. Имейте в виду, что это работает со звуком тоже. 2. Склейка медиа-файлов ffmpeg также может выполнить противоположный процесс: собрать несколько частей вместе. Для этого вам нужно будет создать новый текстовый файл и начать редактировать его, используя предпочитаемый вами редактор. В примере мы будем использовать touch и >vim. Неважно, как вы называете этот файл. Например, назовем его join.txt и создадим, используя touch: touch videos_to_join.txt Теперь отредактируем его в vim vim videos_to_join.txt Здесь введите полные пути ко всем файлам, которые вы хотите присоединить (они будут объединены в том порядке, в котором вы их здесь пишете), по одному на строку. Убедитесь, что они имеют одинаковое расширение (например, mp4). Вот пример: /home/ubuntu/Desktop/video_1.mp4 /home/ubuntu/Desktop/video_2.mp4 /home/ubuntu/Desktop/video_3.mp4 Сохраните файл, который вы только что отредактировали. Этот метод работает для любых аудио или видео файлов. Теперь введите следующее: ffmpeg -f concat -i join.txt output.mp4 Примечание: наш выходной файл - output.mp4, потому что все наши входные файлы имеют расширение mp4. Это должно объединить все файлы, которые мы записали в join.txt, в один выходной файл. 3. Соедините изображения в видео Таким образом вы можете создать слайдшоу или что-то подобное. Первое, что мы рекомендуем сделать, это убедиться, что фотографии, которые вы хотите собрать, находятся в одном каталоге. Мы поместим наши в папку my_photos. Для картинок рекомендуются расширения .png и .jpg. Какой бы вариант вы ни выбрали, убедитесь, что все изображения имеют одинаковое расширение. Формат -f нашего преобразования должен быть image2pipe. Для ввода необходимо указать дефис -. image2pipe позволяет вам пайпировать (pipe), используя |, результаты команды, такой как cat, в ffmpeg вместо того, чтобы вводить все имена одно за другим. Чтобы это работало, мы также должны упомянуть, что мы хотим, чтобы видеокодеки были скопированы -c:v copy (чтобы правильно использовать изображения): cat my_photos/* | ffmpeg -f image2pipe -i - -c:v copy video.mkv Если вы воспроизводите этот файл, вы можете подумать, что в слайд-шоу были добавлены только некоторые изображения. На самом деле все ваши фотографии были добавлены, но ffmpeg проходит по ним их как можно быстрее. Это означает 1 кадр на фотографию, ffmpeg по умолчанию работает со скоростью около 23 кадров в секунду. Чтобы изменить это, вам нужно указать желаемую частоту кадров -framerate: cat my_photos/* | ffmpeg -framerate 1 -f image2pipe -i - -c:v copy video.mkv В нашем примере мы устанавливаем частоту кадров равную 1, что означает, что каждый кадр (что также означает каждое изображение) появляется в течение 1 секунды. Чтобы добавить аудио, например, фоновую песню, нам нужно указать аудиофайл в качестве входного файла -i audo_file и скопировать аудиокодеки -c: copy. Для кодеков вы можете копировать аудио и видео кодеки одновременно с -c copy. Убедитесь, что вы установили кодеки прямо перед указанием выходного файла. Вы также можете установить частоту кадров, чтобы все ваши изображения синхронизировались с продолжительностью звука, который вы хотите использовать. Чтобы сделать это, разделите количество изображений на продолжительность аудио (в секундах). Для нашего примера у нас есть аудиофайл длиной 22 секунды и 9 изображений. 9 разделить на 22 составляет приблизительно 0,40, поэтому мы будем использовать это для нашей частоты кадров: cat my_photos/* | ffmpeg -framerate 0.40 -f image2pipe -i - -i audio.wav -c copy video.mkv 4. Запись экрана Тут нужно использовать формат -f x11grab. Это запишет ваш XSERVER. В качестве входных данных вы должны будете указать номер вашего экрана (основной экран обычно должен быть 0:0). Но это будет захватывать только верхнюю левую часть экрана. Вы должны добавить размер экрана (или экранов). Наш размер - 1920?1080. Размер экрана должен быть указан перед вводом: ffmpeg -f x11grab -s 1920x1080 -i :0.0 output.mp4 Нажмите q или CTRL + C в любое время, чтобы остановить запись. Вы можете сделать размер выходного файла полноэкранным, введя следующее для размера (вместо 1920?1080 или любого другого установленного разрешения): -s $(xdpyinfo | grep dimensions | awk '{print $2;}') Полная команда: ffmpeg -f x11grab -s $(xdpyinfo | grep dimensions | awk '{print $2;}') -i :0.0 output.mp4 5. Запишите свою веб-камеру Запись ввода с вашей веб-камеры (или другого устройства, такого как USB-камера) еще проще. В Linux устройства хранятся в /dev как /dev/video0, /dev/video1 и так далее: ffmpeg -i /dev/video0 output.mkv И также нажмите q или CTRL + C, чтобы остановить запись. 6. Запишите ваше аудио Linux обрабатывает аудио в основном через ALSA и pulseaudio. ffmpeg может записывать оба, но мы рассмотрим pulseaudio, так как дистрибутивы на основе Debian включают его по умолчанию. Синтаксис немного отличается для двух методов. Для pulseaudio, вы должны использовать force -f alsa и указать устройство ввода по умолчанию как input -i default: ffmpeg -f alsa -i default output.mp3 В настройках звука у дистрибутива убедитесь, что записывающим устройством по умолчанию является то устройство, которое вы хотите записать. Конечно, для любого типа записи вы также можете указать кодеки. Вы можете выбрать конкретную частоту кадров -r. Вы также можете совмещать запись звука с записью с веб-камеры/экрана. ffmpeg -i /dev/video0 -f alsa -i default -c:v libx264 -c:a flac -r 30 output.mkv Вместо записи звука вы можете так же легко добавить аудиофайл в качестве звука поверх для записи экрана или веб-камеры: ffmpeg -f x11grab -s $(xdpyinfo | grep dimensions | awk '{print $2;}') -i :0.0 -i audio.wav -c:a copy output.mp4 Записи в ffmpeg мелкими, поэтому очень маленькая запись может не сохраниться. Мы рекомендуем сделать запись немного дольше и затем обрезать ее (если вам нужно всего несколько секунд), просто чтобы убедиться, что файл действительно будет записан на ваш диск. Основное использование фильтров в ffmpeg Фильтры являются невероятно мощной функцией ffmpeg. Вам доступно огромное количество фильтров, что делает ffmpeg полностью способным обрабатывать любые потребности редактирования. Основная структура для использования фильтра: ffmpeg -i input.mp4 -vf "filter=setting_1=value_1:setting_2=value_2" output.mp4 ffmpeg -i input.wav -af "filter=setting_1=value_1:setting_2=value_2" output.wav Как вы можете видеть, мы указываем видео фильтры -vf, (сокращенно от -filter:v) и аудио фильтры -af, (сокращенно от -filter:a). Фактические фильтры пишутся в двойных кавычках " и могут быть объединены в цепочку через запятую ,. Вы можете указать столько фильтров, сколько хотите. Общая форма фильтра: filter=setting_2=value_2:setting_2=value_2 Различные настройки фильтра и их значения разделены двоеточиями. Вы также можете выполнять математические операции в качестве значений для различных настроек. Более подробное описание различных констант, используемых в выражениях, и различных настроек можно найти в официальной документации фильтра ffmpeg. 1. Масштабирование видео Это очень простой фильтр. Единственными настройками являются ширина w и высота h: ffmpeg -i input.mp4 -vf "scale=w=800:h=600" output.mp4 Как мы уже упоминали, вы можете использовать математические операции для значений: ffmpeg -i input.mkv -vf "scale=w=1/2*in_w:h=1/2*in_h" output.mkv Эта команда устанавливает размер вывода равным половине (1/2) от размера ввода in_w, in_h. 2. Обрезка видео Что касается фильтра масштабирования, настройки - это ширина и высота результирующего файла. При желании вы можете указать координаты для верхнего левого угла разреза (по умолчанию: центр входного видео): ffmpeg -i input.mp4 -vf "crop=w=1280:h=720:x=0:y=0" output.mp4 ffmpeg -i input.mkv -vf "crop=w=400:h=400" output.mkv Как уже отмечалось, вторая обрезка будет вырезать в центре входного файла (так как мы не указали координаты x и y для верхнего левого угла). Первая команда будет вырезать из левого верхнего угла x=0:y=0. Вот пример, который использует математические выражения в качестве значений: ffmpeg -i input.mkv -vf "crop=w=3/4*in_w:h=3/4*in_h" output.mkv Эта команда устанавливает размер вывода на 3/4 от размера ввода (in_w, in_h). 3. Поворот видео Вы также можете повернуть видео по часовой стрелке на определенную величину в радианах. Чтобы упростить задачу, вы можете указать значение в градусах и преобразовать его в радианы, умножив это значение на PI/180: ffmpeg -i input.avi -vf "rotate=90*PI/180" ffmpeg -i input.mp4 -vf "rotate=PI" Первая команда повернет видео по часовой стрелке на 90 градусов. Вторая команда перевернет видео вверх ногами (PI рад = 180 градусов). 4. Преобразование аудиоканала Это может быть полезно, если вы каким-то образом получаете звук только в правом ухе или что-то подобное. Вы можете сделать звук слышимым из обоих ушей (в данном конкретном случае) следующим образом: ffmpeg -i input.mp3 -af "channelmap=1-0|1-1" output.mp3 Это мапит правый 1 аудиоканал на левый 0 и правый 1 аудиоканалы (левое число представляет собой вход, правое число представляет собой выход). 5. Увеличение громкости звука Вы можете умножить громкость звука на любое действительное число. Вам нужно только указать множитель: ffmpeg -i input.wav -af "volume=1.5" output.wav ffmpeg -i input.ogg -af "volume=0.75" output.ogg Первая команда увеличивает громкость в 1,5 раза. Вторая команда делает звук в 1/4 (0,25) раза тише. 6. Настройка скорости воспроизведения Фильтр для видео - setpts (PTS = presentation time stamp). Поскольку мы на самом деле модифицируем PTS, больший коэффициент означает более медленный результат, и наоборот: ffmpeg -i input.mkv -vf "setpts=0.5*PTS" output.mkv ffmpeg -i input.mp4 -vf "setpts=2*PTS" output,mp4 Первая команда удваивает скорость воспроизведения, а вторая команда замедляет видео до 1/2 скорости. Фильтр для аудио - atempo. Есть одно маленькое предостережение: оно может принимать значения только от 0,5 (половина скорости) до 2 (удвоение скорости). Чтобы обойти это, вы можете использовать их один за другим: ffmpeg -i input.wav -af "atempo=0.75" output.wav ffmpeg -i input.mp3 -af "atempo=2.0,atempo=2.0" ouutput.mp3 Первая команда замедляет звук на 1/4 от первоначальной скорости. Вторая команда ускоряет звук в 4 раза (2*2) Чтобы изменить скорость воспроизведения видео и аудио с помощью одной и той же команды, вам нужно использовать filtergraphs 7. Добавить водяной знак Для размещения водяного знака используем фильтр overlay, вместе с координатами его расположения на видео. Например, вотермарк размером 100*100 мы хотим расположить в центре видео с размерами 1280?720. Получим по горизонтали x = (1280 - 100) / 2 = 590 и по вертикали y = (720 - 100) / 2 = 310. Поэтому значение будет overlay=590:310. Но удобнее использовать формулу overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2, где main_w и main_h - высота и ширина видео, а overlay_w и overlay_h - водяного знака. Получим команду: ffmpeg -i source_video.mp4 -i watermark.png -filter_complex "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" -codec:a copy video_protected.mp4 Завершение В этом руководстве мы рассмотрели установку, базовое использование, расширенное использование и основы фильтров ffmpeg. Мы надеемся, что это может быть полезно для всех, кто хочет попробовать ffmpeg, для кого-то, кто хочет использовать ffmpeg для нескольких задач, или даже просто для того, кто хочет больше узнать о широких возможностях этой удивительной утилиты.
img
@media screen and (max-width: 736px){ .video-container { position: relative; padding-bottom: 56.25%; padding-top: 30px; height: 0; overflow: hidden; } .video-container iframe { position: absolute; top:0; left: 0; width: 100%; height: 100%; }} В этом руководстве мы расскажем про основы языка Python, расскажем как его установить, как запускать программы и на примерах разберем все основные темы. Прежде всего, что такое Python? По словам его создателя Гвидо ван Россума, Python - это: «Язык программирования высокого уровня и его основная философия проектирования - это все о читабельности кода и синтаксисе, который позволяет программистам выражать концепции в нескольких строках кода». Мы можем использовать кодирование на Python по-разному: здесь блистают наука о данных, автоматизация задач, написание скриптов, веб-разработка и машинное обучение. Quora, Pinterest и Spotify используют Python для своей внутренней веб-разработки. Итак, давайте немного узнаем об этом языке и разберем его основы. О языке Что умеет Python? Python можно использовать на сервере для создания веб-приложений. Python можно использовать вместе с программным обеспечением для создания рабочих процессов. Python может подключаться к системам баз данных. Он также может читать и изменять файлы. Python можно использовать для обработки больших данных и выполнения сложной математики. Python можно использовать для быстрого создания прототипов или для разработки программного обеспечения, готового к производству. Почему Python? Python работает на разных платформах (Windows, Mac, Linux, Raspberry Pi и т.д.). Python имеет простой синтаксис, аналогичный английскому языку. Синтаксис Python позволяет разработчикам писать программы с меньшим количеством строк, чем в некоторых других языках программирования. Python работает в системе интерпретатора, что означает, что код может быть выполнен, как только он будет написан. Это означает, что прототипирование может быть очень быстрым. Python можно рассматривать как процедурный, объектно-ориентированный или функциональный. Python популярный и имеет хорошо развитую экосистему. Хорошо знать Самая последняя основная версия Python - это Python 3. Однако Python 2, хотя и не обновляется ничем, кроме обновлений безопасности, по-прежнему довольно популярен. Можно написать Python в интегрированной среде разработки, такой как Thonny, Pycharm, Netbeans или Eclipse, которые особенно полезны при управлении большими коллекциями файлов Python. Синтаксис Python по сравнению с другими языками программирования Python был разработан для удобства чтения и имеет некоторое сходство с английским языком с влиянием математики. Python использует новые строки для завершения команды, в отличие от других языков программирования, в которых часто используются точки с запятой или круглые скобки. Python полагается на отступы с использованием пробелов для определения области видимости; например, объем циклов, функций и классов. В других языках программирования для этой цели часто используются фигурные скобки. Подготовка Установка Python На многих ПК и Mac уже установлен Python. Чтобы проверить, установлен ли у вас Python на ПК с Windows, выполните поиск Python на панели запуска или выполните в командной строке cmd.exe следующее: C:UsersYour Name>python --version Чтобы проверить, установлен ли у вас python на Linux или Mac, то на Linux откройте командную строку или на Mac откройте Терминал и введите: python --version Если вы обнаружите, что на вашем компьютере не установлен python, вы можете бесплатно загрузить его со следующего веб-сайта: https://www.python.org/ Быстрый старт Python - это интерпретируемый язык программирования, это означает, что как разработчик вы пишете файлы Python .py в текстовом редакторе, а затем помещаете эти файлы в интерпретатор Python для выполнения. Способ запуска файла Python в командной строке выглядит следующим образом: C:UsersYour Name>python helloworld.py Где helloworld.py - это имя вашего файла python. Давайте напишем наш первый файл Python под названием helloworld.py, который можно сделать в любом текстовом редакторе. print("Hello, World!") Сохраните ваш файл. Откройте командную строку, перейдите в каталог, в котором вы сохранили файл, и запустите: C:UsersYour Name>python helloworld.py Результат должен быть таким: Hello, World! Поздравляем, вы написали и выполнили свою первую программу на Python. Командная строка Python Чтобы протестировать небольшой объем кода на Python, иногда проще и быстрее всего не записывать код в файл. Это стало возможным, потому что Python можно запускать из командной строки. Введите в командной строке Windows, Mac или Linux следующее: C:UsersYour Name>python Или, если команда python не сработала, вы можете попробовать py: C:UsersYour Name>py Оттуда вы можете написать любой Python, включая наш пример hello world из ранее в руководстве: C:UsersYour Name>python Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> print("Hello, World!") Которая напишет "Hello, World!" в командной строке: C:UsersYour Name>python Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> print("Hello, World!") Hello, World! Когда вы закончите в командной строке Python, вы можете просто ввести следующее, чтобы выйти из интерфейса командной строки Python: exit() Основы 1. Переменные Вы можете думать о переменных как о словах, хранящих значение. Вот так просто. В Python действительно легко определить переменную и присвоить ей значение. Представьте, что вы хотите сохранить номер 1 в переменной под названием one (единица). Давай сделаем это: one = 1 Заметили насколько это было просто? Вы только что присвоили значение 1 переменной one. two = 2 some_number = 10000 Python - динамически типизированный язык, и это не нужно указывать типы переменных, которые вы используете, и переменные не привязаны к конкретному типу. И вы можете присвоить любое другое значение любым другим переменным, которые захотите. Как вы видите в таблице выше, переменная two хранит целое число 2, а some_number хранит 10 000. Помимо целых чисел, мы также можем использовать булевые логические значения (True или False), строки, числа с плавающей запятой и многие другие типы данных. # booleans (булевые значения) true_boolean = True false_boolean = False # string (строка) my_name = "Leandro Tk" # float (числа с плавающей запятой) book_price = 15.80 Комментарии начинаются с символа #, и Python их игнорирует: 2. Поток управления: условные операторы if использует выражение для оценки того, является ли утверждение истинным или ложным. Если это True, он выполняет то, что находится внутри оператора if. Например: if True: print("Hello Python If") if 2 > 1: print("2 is greater than 1") Обратите внимание, что на после строк с if у нас стоит отступ. Если в других языках программирования отступы в коде предназначены только для удобства чтения, отступы в Python очень важны. Python использует отступ для обозначения блока кода. Тут должен стоять хотя бы один пробел, иначе мы получим ошибку. 2 больше 1, поэтому выполняется код print. Оператор else будет выполнен, если выражение if ложно. Функция print () выводит указанное сообщение на экран. if 1 > 2: print("1 is greater than 2") else: print("1 is not greater than 2") В Python при сравнении используется двойное равно ==, а при присвоении - одно. 1 не больше 2, поэтому код внутри оператора else будет выполнен. Вы также можете использовать оператор elif, который значит else if: if 1 > 2: print("1 is greater than 2") elif 2 > 1: print("1 is not greater than 2") else: print("1 is equal to 2") 3. Цикл / Итератор В Python мы можем выполнять итерацию в разных формах. Мы расскажем о двух: while и for. Цикл while: пока оператор имеет значение True, код внутри блока будет выполнен. Итак, этот код напечатает число от 1 до 10. num = 1 while num some_value Это пример того, как его использовать. Для каждого ключа в словаре мы печатаем ключ и соответствующее ему значение. Другой способ сделать это - использовать метод items, который вернет нам ключ и значение. Используем его для словаря, что будет выглядеть как dictionary.items() dictionary = { "some_key": "some_value" } for key, value in dictionary.items(): print("%s --> %s" %(key, value)) # some_key --> some_value Мы назвали эти два параметра key и value, но это не обязательно. Мы можем называть их как угодно. Давай посмотрим: dictionary_tk = { "name": "Leandro", "nickname": "Tk", "birthplace": "Brazil", "age": 24 } for attribute, value in dictionary_tk.items(): print("My %s is %s" %(attribute, value)) # My name is Leandro # My nickname is Tk # My birthplace is Brazil # My age is 24 Мы видим, что мы использовали атрибут в качестве параметра для ключа словаря, и он работает правильно. Отлично! Функции Функция - это блок кода, который запускается только при его вызове. Вы можете передавать данные, называемые параметрами, в функцию. В результате функция может возвращать данные. Все как везде В Python функция определяется с помощью ключевого слова def: def my_function(): print("Hello from a function") Чтобы вызвать функцию, используйте имя функции, за которым следует скобка: def my_function(): print("Hello from a function") my_function() Информация может быть передана в функции как аргументы. Аргументы указываются после имени функции в круглых скобках. Вы можете добавить сколько угодно аргументов, просто разделив их запятыми. В следующем примере есть функция с одним аргументом fname. Когда функция вызывается, мы передаем имя, которое используется внутри функции для печати полного имени: def my_function(fname): print(fname + " Refsnes") my_function("Emil") my_function("Tobias") my_function("Linus") По умолчанию функция должна вызываться с правильным количеством аргументов. Это означает, что если ваша функция ожидает 2 аргумента, вы должны вызвать функцию с 2 аргументами, не больше и не меньше. Если вы попытаетесь вызвать функцию с 1 или 3 аргументами, то получите ошибку. def my_function(fname, lname): print(fname + " " + lname) my_function("Emil", "Refsnes") Если вы не знаете, сколько аргументов будет передано вашей функции, добавьте * перед именем параметра в определении функции. def my_function(*kids): print("The youngest child is " + kids[2]) my_function("Emil", "Tobias", "Linus") Мы можем использовать значение параметра по умолчанию. Если мы вызываем функцию без аргументов, то она не сломается и будет использовать значение по умолчанию: def my_function(country = "Norway"): print("I am from " + country) my_function("Sweden") #I am from Sweden my_function() #I am from Norway Вы можете отправить любой тип данных аргумента функции (строка, число, список, словарь), И он будет обрабатываться как тот же тип данных внутри функции. Например если вы отправите список в качестве аргумента, он все равно будет списком, когда достигнет функции: def my_function(food): for x in food: print(x) fruits = ["apple", "banana", "cherry"] my_function(fruits) Ну и чтобы позволить функции вернуть значение, используйте оператор return: def my_function(x): return 5 * x print(my_function(3)) #15 print(my_function(5)) #25 Пользовательский ввод Python Python позволяет вводить данные пользователем. Это означает, что мы можем попросить пользователя ввести данные. Этот метод немного отличается в Python 3.6 от Python 2.7. Python 3.6 использует метод input(). username = input("Enter username:") print("Username is: " + username) Python 2.7 использует метод raw_input(). username = raw_input("Enter username:") print("Username is: " + username) Python прекращает выполнение, когда доходит до функции input (), и продолжает выполнение, когда пользователь ввел некоторый ввод. Обработка ошибок Python Блок try позволяет вам проверить блок кода на наличие ошибок. Блок except позволяет вам обрабатывать ошибку. Блок finally позволяет выполнять код независимо от результата блоков try и except. Обработка исключений Когда возникает ошибка или исключение, как мы это называем, Python обычно останавливается и генерирует сообщение об ошибке. Эти исключения можно обрабатывать с помощью оператора try: try: print(x) except: print("An exception occurred") Блок try сгенерирует исключение, потому что x не определен. Поскольку блок try вызывает ошибку, блок except будет выполнен. Без блока try программа выйдет из строя и выдаст ошибку. Вы можете определить столько блоков исключений, сколько захотите, например если вы хотите выполнить специальный блок кода для особого типа ошибки. try: print(x) except NameError: print("Variable x is not defined") except: print("Something else went wrong") Выведите одно сообщение, если блок try вызывает NameError, а другое - для других ошибок. Вы можете использовать ключевое слово else, чтобы определить блок кода, который будет выполняться, если ошибок не возникло: try: print("Hello") except: print("Something went wrong") else: print("Nothing went wrong") Блок finally, если он указан, будет выполнен независимо от того, вызывает ли блок try ошибку или нет. try: print(x) except: print("Something went wrong") finally: print("The 'try except' is finished") Как разработчик Python сами вы можете создать исключение при возникновении условия. Чтобы вызвать (или выкинуть) исключение, используйте ключевое слово raise. x = -1 if x < 0: raise Exception("Sorry, no numbers below zero") Вы можете определить, какую ошибку выдавать, и текст, который будет выводить пользователь. x = "hello" if not type(x) is int: raise TypeError("Only integers are allowed") Классы и объекты Немного теории: Объекты представляют собой объекты реального мира, таких как автомобили, собаки или велосипеды. У объектов есть две основные характеристики: данные и поведение. У автомобилей есть данные, такие как количество колес, количество дверей и вместимость. Они также демонстрируют поведение: они могут ускоряться, останавливаться, показывать, сколько топлива осталось, и многое другое. Мы идентифицируем данные как атрибуты, а поведение как методы в объектно-ориентированном программировании. А класс - это чертеж или план, из которого создаются отдельные объекты. В реальном мире мы часто находим много объектов одного типа. Как машины. Каждая машина была построена по одному и тому же набору чертежей и состоит из одинаковых компонентов (у всех есть двигатель, колеса, двери и т.д.). Объектно-ориентированное программирование Python Python как объектно-ориентированный язык программирования имеет следующие концепции: класс и объект. Класс - это план или чертерж, модель для своих объектов. Итак, опять же, класс - это просто модель или способ определения атрибутов и поведения. Например, класс транспортного средства имеет свои собственные атрибуты, определяющие, какие объекты являются транспортными средствами. Количество колес, тип бака, вместимость и максимальная скорость - все это атрибуты транспортного средства. Имея это в виду, давайте посмотрим на синтаксис Python для классов: class Vehicle: pass pass это оператор-заглушка, равноценный отсутствию операции. Тут мы используем его потому что еще не указали атрибуты. Мы определяем классы с помощью оператора class - и все. Легко, правда? Объекты - это экземпляры класса. Мы создаем экземпляр, называя класс. car = Vehicle() print(car) # Здесь car - это объект (или экземпляр) класса Vehicle. Помните, что у нашего класса транспортных средств есть четыре атрибута: количество колес, тип бака, вместимость и максимальная скорость. Мы устанавливаем все эти атрибуты при создании объекта транспортного средства. Итак, здесь мы определяем наш класс для получения данных, когда он их инициирует: class Vehicle: def __init__(self, number_of_wheels, type_of_tank, seating_capacity, maximum_velocity): self.number_of_wheels = number_of_wheels self.type_of_tank = type_of_tank self.seating_capacity = seating_capacity self.maximum_velocity = maximum_velocity Метод __init__, который автоматически вызывается при создании объектов называется конструктором объектов класса Переменная self представляет текущий объект класса. Мы используем метод init. Мы называем это методом конструктора. Итак, когда мы создаем объект транспортного средства, мы можем определить эти атрибуты. Представьте, что мы любим Tesla Model S и хотим создать такой объект. У него четыре колеса, он работает на электроэнергии, вмещает пять сидений, а максимальная скорость составляет 250 км/час. Давайте создадим этот объект: tesla_model_s = Vehicle(4, 'electric', 5, 250) Четыре колеса + электробанк + пять сидений + максимальная скорость 250 км/час. Все атрибуты установлены. Но как мы можем получить доступ к значениям этих атрибутов? Мы отправляем объекту сообщение с вопросом о них. Мы называем это методом. Это поведение объекта. Давайте применим это это: class Vehicle: def __init__(self, number_of_wheels, type_of_tank, seating_capacity, maximum_velocity): self.number_of_wheels = number_of_wheels self.type_of_tank = type_of_tank self.seating_capacity = seating_capacity self.maximum_velocity = maximum_velocity def number_of_wheels(self): return self.number_of_wheels def set_number_of_wheels(self, number): self.number_of_wheels = number Это реализация двух методов: number_of_wheels и set_number_of_wheels. Мы называем это геттером (getter) и сеттером (setter). Потому что первый получает значение атрибута, а второй устанавливает новое значение атрибута. В Python мы можем сделать это, используя @property (декораторы) для определения геттеров и сеттеров. Посмотрим на код: class Vehicle: def __init__(self, number_of_wheels, type_of_tank, seating_capacity, maximum_velocity): self.number_of_wheels = number_of_wheels self.type_of_tank = type_of_tank self.seating_capacity = seating_capacity self.maximum_velocity = maximum_velocity @property def number_of_wheels(self): return self.__number_of_wheels @number_of_wheels.setter def number_of_wheels(self, number): self.__number_of_wheels = number И мы можем использовать эти методы как атрибуты, вызывав их через точку: tesla_model_s = Vehicle(4, 'electric', 5, 250) print(tesla_model_s.number_of_wheels) # 4 tesla_model_s.number_of_wheels = 2 # устанавливаем число колес равное 2 print(tesla_model_s.number_of_wheels) # 2 Это немного отличается от определения методов. Методы работают как атрибуты. Например, когда мы устанавливаем новое количество колес, мы не применяем два в качестве параметра, а устанавливаем значение 2 равным number_of_wheels. Это один из способов написания геттеров и сеттеров в Python. Но мы также можем использовать методы для других вещей, например, метод make_noise. Давай увидим это: class Vehicle: def __init__(self, number_of_wheels, type_of_tank, seating_capacity, maximum_velocity): self.number_of_wheels = number_of_wheels self.type_of_tank = type_of_tank self.seating_capacity = seating_capacity self.maximum_velocity = maximum_velocity def make_noise(self): print('VRUUUUUUUM') Когда мы вызываем этот метод, он просто возвращает строку «VRRRRUUUUM». tesla_model_s = Vehicle(4, 'electric', 5, 250) tesla_model_s.make_noise() # VRUUUUUUUM Инкапсуляция: скрытие информации Инкапсуляция - это механизм, ограничивающий прямой доступ к данным и методам объектов. Но в то же время это облегчает работу с этими данными (методами объектов). Все внутреннее представление объекта скрыто снаружи. Только объект может взаимодействовать со своими внутренними данными. Во-первых, нам нужно понять, как работают общедоступные и непубличные переменные и методы экземпляра - pubulic и non-public. Переменные общедоступного экземпляра Для класса Python мы можем инициализировать общедоступную переменную экземпляра в нашем методе конструктора. class Person: def __init__(self, first_name): self.first_name = first_name Здесь мы применяем значение first_name в качестве аргумента к общедоступной переменной экземпляра (public instance variable). tk = Person('TK') print(tk.first_name) # => TK Внутри класса: class Person: first_name = 'TK' Здесь нам не нужно применять first_name в качестве аргумента, и все объекты экземпляра будут иметь атрибут класса, инициализированный с помощью TK. tk = Person() print(tk.first_name) # => TK Теперь мы узнали, что можем использовать общедоступные переменные экземпляра и атрибуты класса. Еще одна интересная особенность публичной части - это то, что мы можем управлять значением переменной. Что то значит? Наш объект может управлять своим значением переменной: получать и устанавливать значения переменных. Помня о классе Person, мы хотим установить другое значение для его переменной first_name: tk = Person('TK') tk.first_name = 'Kaio' print(tk.first_name) # => Kaio Мы просто устанавливаем другое значение kaio для переменной экземпляра first_name, и она обновляет значение. Вот так просто. Поскольку это общедоступная переменная, мы можем это сделать. Непубличная переменная экземпляра В качестве общедоступной переменной экземпляра мы можем определить непубличную (non-public) переменную экземпляра как внутри метода конструктора, так и внутри класса. Разница в синтаксисе: для закрытых переменных экземпляра используйте символ подчеркивания _ перед именем переменной. «Частные» переменные экземпляра, к которым нельзя получить доступ, кроме как изнутри объекта, в Python не существует. Однако существует соглашение, которому следует большая часть кода Python: имя с префиксом подчеркивания (например, _spam) должно рассматриваться как закрытая часть API (будь то функция, метод или член данных). Вот пример: class Person: def __init__(self, first_name, email): self.first_name = first_name self._email = email Вы видели переменную _email? Вот как мы определяем непубличную переменную: tk = Person('TK', 'tk@mail.com') print(tk._email) # tk@mail.com Мы можем получить к ней доступ и обновить. Непубличные переменные - это просто соглашение, и их следует рассматривать как непубличную часть API. API - это программный интерфейс приложения. Это интерфейс взаимодействия с программой. Итак, мы используем метод, который позволяет нам делать это внутри определения нашего класса. Давайте реализуем два метода (emali и update_email), чтобы понять это: class Person: def __init__(self, first_name, email): self.first_name = first_name self._email = email def update_email(self, new_email): self._email = new_email def email(self): return self._email Теперь мы можем обновлять непубличные переменные и обращаться к ним с помощью этих методов. Давайте посмотрим: tk = Person('TK', 'tk@mail.com') print(tk.email()) # => tk@mail.com # tk._email = 'new_tk@mail.com' -- рассматривать как непубличную часть API класса print(tk.email()) # => tk@mail.com tk.update_email('new_tk@mail.com') print(tk.email()) # => new_tk@mail.com Мы инициировали новый объект с именем TK и адресом электронной почты tk@mail.com Распечатали email, обратившись к закрытой переменной с помощью метода Пытались установить новый адрес электронной почты вне нашего класса Нам нужно рассматривать непубличную переменную как непубличную часть API. Обновлена непубличная переменная с помощью нашего метода экземпляра Успех! Мы можем обновить ее внутри нашего класса с помощью вспомогательного метода Публичный метод С общедоступными методами мы также можем использовать их вне нашего класса: class Person: def __init__(self, first_name, age): self.first_name = first_name self._age = age def show_age(self): return self._age Давайте проверим это: tk = Person('TK', 25) print(tk.show_age()) # => 25 Отлично - мы можем использовать его без проблем. Непубличный метод Но с помощью закрытых методов мы не можем этого сделать. Давайте реализуем тот же класс Person, но теперь с закрытым методом show_age с подчеркиванием _. class Person: def __init__(self, first_name, age): self.first_name = first_name self._age = age def _show_age(self): return self._age А теперь мы попробуем вызвать этот непубличный метод с нашим объектом: tk = Person('TK', 25) print(tk._show_age()) # => 25 Тут все так же. Мы можем получить к нему доступ и обновить. Непубличные методы - это просто соглашение, и их следует рассматривать как непубличную часть API. Вот пример того, как мы можем это использовать: class Person: def __init__(self, first_name, age): self.first_name = first_name self._age = age def show_age(self): return self._get_age() def _get_age(self): return self._age tk = Person('TK', 25) print(tk.show_age()) # => 25 Здесь у нас есть закрытый метод _get_age и открытый метод show_age. show_age может использоваться нашим объектом (вне нашего класса), а _get_age может использоваться только внутри нашего определения класса (внутри метода show_age). Но опять же: условно. Сводка по инкапсуляции С помощью инкапсуляции мы можем гарантировать, что внутреннее представление объекта скрыто снаружи. Наследование: поведение и характеристики У некоторых объектов есть общие черты: их поведение и характеристики. В объектно-ориентированном программировании классы могут наследовать общие характеристики (данные) и поведение (методы) от другого класса. Давайте посмотрим на другой пример и реализуем его на Python. Представьте себе машину. Количество колес, пассажировместимость и максимальная скорость - все это атрибуты автомобиля. Можно сказать, что класс ElectricCar наследует те же атрибуты от обычного класса Car. class Car: def __init__(self, number_of_wheels, seating_capacity, maximum_velocity): self.number_of_wheels = number_of_wheels self.seating_capacity = seating_capacity self.maximum_velocity = maximum_velocity В нашем классе Car реализованы: my_car = Car(4, 5, 250) print(my_car.number_of_wheels) print(my_car.seating_capacity) print(my_car.maximum_velocity) После запуска мы можем использовать все созданные переменные экземпляра. Отлично. В Python мы применяем родительский (parent) класс к дочернему (child) классу в качестве параметра. Класс ElectricCar может быть унаследован от нашего класса Car. class ElectricCar(Car): def __init__(self, number_of_wheels, seating_capacity, maximum_velocity): Car.__init__(self, number_of_wheels, seating_capacity, maximum_velocity) Вот так просто. Нам не нужно реализовывать какой-либо другой метод, потому что он уже есть в этом классе (унаследованный от класса Car). Докажем это: my_electric_car = ElectricCar(4, 5, 250) print(my_electric_car.number_of_wheels) # => 4 print(my_electric_car.seating_capacity) # => 5 print(my_electric_car.maximum_velocity) # => 250 Модули в Python Что такое модуль? Считайте, что модуль - это то же самое, что и библиотека кода. Файл, содержащий набор функций, которые вы хотите включить в свое приложение. Чтобы создать модуль, просто сохраните нужный код в файле с расширением .py: Сохраните этот код в файле с именем mymodule.py def greeting(name): print("Hello, " + name) Теперь мы можем использовать только что созданный модуль, используя оператор import: import mymodule mymodule.greeting("Jonathan") #Hello, Jonathan Вы можете создать псевдоним при импорте модуля, используя ключевое слово as: import mymodule as mx Встроенные модули В Python есть несколько встроенных модулей, которые вы можете импортировать в любое время. import platform x = platform.system() print(x) Существует встроенная функция для отображения всех имен функций (или имен переменных) в модуле. Это функция dir(): import platform x = dir(platform) print(x) Получим такой вывод: ['DEV_NULL', '_UNIXCONFDIR', 'WIN32_CLIENT_RELEASES', 'WIN32_SERVER_RELEASES', '__builtins__', '__cached__', '__copyright__', '__doc__', '__file__', '__loader__', '__name__', '__package __', '__spec__', '__version__', '_default_architecture', '_dist_try_harder', '_follow_symlinks', '_ironpython26_sys_version_parser', '_ironpython_sys_version_parser', '_java_getprop', '_libc_search', '_linux_distribution', '_lsb_release_version', '_mac_ver_xml', '_node', '_norm_version', '_perse_release_file', '_platform', '_platform_cache', '_pypy_sys_version_parser', '_release_filename', '_release_version', '_supported_dists', '_sys_version', '_sys_version_cache', '_sys_version_parser', '_syscmd_file', '_syscmd_uname', '_syscmd_ver', '_uname_cache', '_ver_output', 'architecture', 'collections', 'dist', 'java_ver', 'libc_ver', 'linux_distribution', 'mac_ver', 'machine', 'node', 'os', 'platform', 'popen', 'processor', 'python_branch', 'python_build', 'python_compiler', 'python_implementation', 'python_revision', 'python_version', 'python_version_tuple', 're', 'release', 'subprocess', 'sys', 'system', 'system_aliases', 'uname', 'uname_result', 'version', 'warnings', 'win32_ver'] Работа с файлами в Python Работа с файлами - важная часть любого приложения. Python имеет несколько функций для создания, чтения, обновления и удаления файлов. Обработка файлов Ключевой функцией для работы с файлами в Python является функция open(). Функция open() принимает два параметра - имя файла и режим. Существует четыре различных метода (режима) открытия файла: r - Чтение - значение по умолчанию. Открывает файл для чтения, возвращает ошибку, если файл не существует a - Добавить - открывает файл для добавления, создает файл, если он не существует. w - Запись - открывает файл для записи, создает файл, если он не существует. x - Создать - создает указанный файл, возвращает ошибку, если файл существует. Кроме того, вы можете указать, следует ли обрабатывать файл в двоичном или текстовом режиме. t - Текст - значение по умолчанию. Текстовый режим b - Двоичный - Двоичный режим (например, изображения) Чтобы открыть файл для чтения, достаточно указать имя файла: f = open("demofile.txt") Код выше по сути такой же, как: f = open("demofile.txt", "rt") Поскольку r для чтения и t для текста являются значениями по умолчанию, вам не нужно их указывать. Открыть файл на сервере Предположим, у нас есть следующий файл, расположенный в той же папке, что и Python: Чтобы открыть файл, используйте встроенную функцию open(). Функция open() возвращает файловый объект, у которого есть метод read() для чтения содержимого файла: f = open("demofile.txt", "r") print(f.read()) Если файл находится в другом месте, вам нужно будет указать путь к файлу, например: f = open("D:\myfileswelcome.txt", "r") print(f.read()) Вы можете вывести одну строку, используя метод readline(): f = open("demofile.txt", "r") print(f.readline()) Рекомендуется всегда закрывать файл по окончании работы с ним. В некоторых случаях из-за буферизации изменения, внесенные в файл, могут не отображаться, пока вы не закроете файл. f = open("demofile.txt", "r") print(f.readline()) f.close() Запись в существующий файл Для записи в существующий файл необходимо добавить параметр к функции open(): a - Добавить - добавит в конец файла w - Запись - перезапишет весь существующий контент Откройте файл "demofile2.txt" и добавьте содержимое в файл: f = open("demofile2.txt", "a") f.write("Now the file has more content!") f.close() #откройте и прочитайте файл после добавления нового содержимого: f = open("demofile2.txt", "r") print(f.read()) Откройте файл "demofile3.txt" и перезапишите его содержимое: f = open("demofile3.txt", "w") f.write("Woops! I have deleted the content!") f.close() Создать новый файл Чтобы создать новый файл в Python, используйте метод open() с одним из следующих параметров: x - Создать - создаст файл, вернет ошибку, если файл существует a - Добавить - создаст файл, если указанный файл не существует w - Запись - создаст файл, если указанный файл не существует Создайте файл с именем myfile.txt: f = open ("myfile.txt", "x") Результат: создан новый пустой файл! Удалить файл Чтобы удалить файл, вы должны импортировать модуль os и запустить его функцию os.remove(): import os os.remove("demofile.txt") Чтобы избежать появления ошибки, вы можете проверить, существует ли файл, прежде чем пытаться удалить его: import os if os.path.exists("demofile.txt"): os.remove("demofile.txt") else: print("The file does not exist") Удалить папку Чтобы удалить всю папку, используйте метод os.rmdir(): import os os.rmdir("myfolder") Удалить можно только пустые папки. Python PIP Что такое PIP? PIP - это менеджер пакетов для пакетов Python или модулей, если хотите. Примечание. Если у вас Python версии 3.4 или новее, PIP включен по умолчанию. Что такое пакет? Пакет содержит все файлы, необходимые для модуля. Модули - это библиотеки кода Python, которые вы можете включить в свой проект. Проверьте, установлен ли PIP Перейдите в командной строке к каталогу скриптов Python и введите следующее: C:UsersYour NameAppDataLocalProgramsPythonPython36-32Scripts>pip --version Установить PIP Если у вас не установлен PIP, вы можете загрузить и установить его с этой страницы: https://pypi.org/project/pip/ Скачать пакет Загрузить пакет очень просто. Откройте интерфейс командной строки и скажите PIP загрузить нужный пакет. Перейдите в командной строке к каталогу сценариев Python и введите следующее: C:UsersYour NameAppDataLocalProgramsPythonPython36-32Scripts>pip install camelcase Мы скачали пакет camelcase Использование пакета После установки пакет готов к использованию. Импортируйте пакет camelcase в свой проект при помощи ключевого слова import. import camelcase c = camelcase.CamelCase() txt = "hello world" print(c.hump(txt)) Дополнительные пакеты можно найти на https://pypi.org/. Удалить пакет Используйте команду uninstall, чтобы удалить пакет: C:UsersYour NameAppDataLocalProgramsPythonPython36-32Scripts>pip uninstall camelcase Диспетчер пакетов PIP попросит вас подтвердить, что вы хотите удалить пакет: Uninstalling camelcase-02.1: Would remove: c:usersYour Nameappdatalocalprogramspythonpython36-32libsite-packagescamecase-0.2-py3.6.egg-info c:usersYour Nameappdatalocalprogramspythonpython36-32libsite-packagescamecase* Proceed (y/n)? Нажмите y, и пакет будет удален. Список пакетов Используйте команду list, чтобы вывести список всех пакетов, установленных в вашей системе: C:UsersYour NameAppDataLocalProgramsPythonPython36-32Scripts>pip list Package Version ----------------------- camelcase 0.2 mysql-connector 2.1.6 pip 18.1 pymongo 3.6.1 setuptools 39.0.1 Вот и все! Мы узнали много нового об основах Python: Как установить Python и запустить свою первую программу Как работают переменные Python Как работают условные операторы Python Как работает цикл Python (while и for) Как работают функции Python Как работают исключения Python Как вводить данные в Python Как работать с файлами в Python Как работать с модулями в Python Как пользоваться PIP Как использовать списки: Коллекция и Массив Коллекция ключей и значений словаря Dictionary Как мы можем перебирать эти структуры данных Объекты и классы Атрибуты как данные объектов Методы как поведение объектов Использование геттеров и сеттеров Python и декоратора свойств Инкапсуляция: скрытие информации Наследование: поведение и характеристики Также вам может быть интересно наше Руководство по изучению PHP с нуля с примерами
img
Телефонная станция Cisco Unified Communications Manager (далее CUCM) является системой обработки вызовов на базе программного обеспечения, разработанного компанией Cisco Systems. Первая версия CUCM была анонсирована в 1997 году, под названием CallManager 1.0. На момент написания статьи последняя и самая актуальная версия - CUCM 10.5. CUCM работает с такими элементами сетей передачи голоса поверх протокола IP (VoIP) как: шлюзы, телефонные аппараты, мосты для конференцсвязи, голосовая почта, видеоконференцсвязью и многими другими. Чаще всего, для работы с оконечными устройствами CUCM использует собственный протокол сигнализации, разработанный компанией Cisco Systems под названием Skinny Client Control Protocol (SCCP). Помимо собственных разработок, CUCM поддерживает и открытые стандарты, такие как H.323, Media Gateway Control Protocol (MGCP) или Session Initiation Protocol (SIP). Схема работы CUCM приведена рисунке ниже: На рисунке схематично обозначена схема работы CUCM в рамках корпоративной сети. Пунктирными линиями обозначены Real-time Transport Protocol (RTP) потоки, которые переносят в поле информационной (полезной) нагрузки медиа – данные разговора. Особое внимание следует обратить на расположение линий направления RTP – они проходят напрямую от телефонного аппарата до телефонного аппарата. Телефонная станция CUCM контролирует телефонную сигнализацию, на данном примере, по протоколам SIP/SCCP. Это означает, что если во время разговора CUCM перестанет работать, разговор между абонентами будет продолжен, но такие функции как удержание, трансфер, отбой вызова и другие функции управления вызовом будут не доступны. Цифровая телефонная станция CUCM выполнена на базе операционной системы Linux с закрытыми правами администратора и с предустановленной базой данных IBM Informix. В совокупности, такой вид операционной системы носит название VOS (voice operating system). Продукт устанавливается пакетом, сначала VOS, а затем само программное обеспечение. Интерфейс управления цифровой телефонной станцией CUCM выполнен как WEB – приложение, доступное через протокол HyperText Transfer Protocol (HTTP). Интерфейс имеет удобную навигацию по вкладкам, пять разных Graphical user interface (GUI) для сегментации функций администрирования и возможность предоставлять уровни доступа администраторам. Основной интерфейс проиллюстрирован на рисунке: Как было сказано ранее, CUCM имеет пять различных панелей администрирования: Cisco Unified CM Administration Cisco Unified Reporting Disaster Recovery System Cisco Unified Serviceability Cisco Unified OS Administration Интерфейс Cisco Unified CM Administration – основной интерфейс администратора. Здесь можно настраивать системные настройки, параметры маршрутизации вызовов, настройка медиа – ресурсов, таких как Music On Hold (MOH), параметров интеграции с другими продуктами компании Cisco Systems, конфигурацию телефонных аппаратов, шлюзов, «привратников» (gatekeepers), администрирование групп пользователей и многие другие настройки. Интерфейс Cisco Unified Reporting обеспечивает доступ к отчетам о работе телефонной станции. Данная консоль отчетности собирает данные с различных системных журналов и предоставляет эту информацию в просто для администратора виде. Интерфейс Disaster Recovery System (DRS) создан для резервирования конфигурации, или как принято говорить «бэкапа» телефонной станции CUCM. Бэкап может происходить как локально на сервер, так и на удаленные площадки по протоколу SSH File Transfer Protocol (SFTP). Графический интерфейс Cisco Unified Serviceability предоставляет наблюдение и контроль работоспособности телефонной станции, включая в себя такие настройки как конфигурацию опций оповещения о проблемах в работе CUCM, систему трассировки для обнаружения причин проблем, богатое меню инструментов, в котором можно смотреть отчеты Call Detail Record (CDR). Данный интерфейс позволяет настроить параметры Simple Network Management Protocol (SNMP), созданного для управления и контроля. Последним в списке интерфейсов значится Cisco Unified OS Administration. Он предназначен для мониторинга аппаратной платформы и различных системных статистических данных, таких как: загруженность центрального процессора, свободного пространства жестких дисков, мониторинга системного времени, информации об IP – адресах, работы в рамках протокола Internet Control Message Protocol (ICMP). Еще один немаловажный интерфейс, это Command Line Interface (CLI) – консоль. Он удобен для перезагрузки сервиса, например, при недоступности основного графического интерфейса через порт 8080. Cisco UCM - решение для крупного бизнеса или государственного учреждения Телефонная станция CUCM это гибкое и масштабируемое решение. Одним из важных преимуществ является возможность кластеризации серверов, или другими словами объединения. В общем случае, в одном кластере может работать до 20 серверов. Среди них только 8 серверов занимаются обработкой вызовов, остальные, это дополнительные сервера предназначенные для расширения функционала кластера (сервисы музыка на удержании, Trivial File Transfer Protocol (TFTP) сервер и многие другие). Работая в кластере, сервера CUCM могут работать с 30 000 абонентами. При работе в кластере различают два типа серверов – «паблишер» (публикатор) и «сабскрайбер» (подписчики). В данной модели один сервер, который является «паблишером» дублирует базу данных на все остальные сервера, которые являются «сабскрайберами. Схема работы кластера показана на рисунке: Большое преимущество IP PBX CUCM – это возможность развернуть сервер в виртуальной среде. Системы виртуализации появились после того, как соотношение эффективности использования одного аппаратного сервера к стоимости данного сервера, с каждым днем стремилось к меньшему и меньшему значению. Виртуализация позволяет делить аппаратные ресурсы сервера между различными приложениями. Например, предприятие покупает аппаратный сервер, для конкретной цели. Системный администратор данной организации устанавливает на него операционную систему на базе Windows, а затем, приложение, для которого был куплен этот сервер. Спустя некоторое время, у организации появилось требование для внедрения в корпоративный контур бизнес – приложений, которые работают на базе Linux. За неимением систем виртуализации, компания сталкивается с новой проблемой – покупкой нового сервера, по причине того, что разнородные операционные системы не смогут существовать на одном и том же аппаратном ресурсе. При наличии системы виртуализации, компания может установить специальное программное обеспечение «гипервизор» на имеющийся Windows сервер. Гипервизор позволит изолировать друг от друга различные операционные системы на одном и том же сервере, обеспечит безопасность, защиту, целостность данных, предоставит централизованное и удобное управление виртуальным серверным ресурсом компании, а так же множество встроенных средств и инструментов автоматизации, предназначенных для автоматического резервирования данных и конфигурации серверов. Предприятия решит поставленную задачу, оптимизировав расходы на аппаратные сервера. Преимущества Выделим основные конкурентные преимущества систем виртуализации Экономия расходов предприятия на покупке дополнительного сервера. Экономия места в телекоммуникационной стойке. Снижение тепловыделения и электропотребления. «Бесшовное» обновление операционной системы сервера, позволяющее не производить перезагрузку и не останавливать работу приложения. Централизация управления и администрирования серверов. Гибкая настройка конфигурации, автоматического резервирования. Создание отказоустойчивости внутренними средствами программного обеспечения гипервизора. Общий принцип работы систем виртуализации проиллюстрирован на рисунке: Виртуализация CUCM Ведущие производители систем виртуализации, это такие компании как VMware, Hyper-V, Xen и Citrix Systems.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59