add media api

This commit is contained in:
Alex Kup 2024-03-10 16:20:57 +03:00 committed by GitHub
parent 53c94bbeff
commit d2fb6b4fed
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 452 additions and 212 deletions

306
posh.txt
View file

@ -7,9 +7,7 @@ GitHub Repo stars: https://img.shields.io/github/stars/Lifailon/PS-Commands
Большая база заметок PowerShell на русском языке.
Веб-версия (https://lifailon.github.io/)
WinForms - тестовый стенд с примерами (https://github.com/Lifailon/PS-Commands/blob/rsa/WinForms/WinForms-Test-Stend.ps1)
Веб-версия (https://lifailon.github.io)
Habr: PowerShell и его возможности (https://habr.com/ru/articles/782592/)
@ -18,7 +16,9 @@ Habr: PowerShell и его возможности (https://habr.com/ru/articles/
# npp
# Regex
# DataType
# Module
# Bit
# Cycle
# Files
# Credential
# WinEvent
@ -97,13 +97,16 @@ Habr: PowerShell и его возможности (https://habr.com/ru/articles/
# Git
# DSC
# Ansible
# Win_Modules
# GigaChat
# YandexGPT
# SuperAGI
# Replicate
# Google-Filter
# Google-API
# RapidAPI
# TMDB
# OMDb
# ivi
# Kinopoisk
# VideoCDN
@ -111,8 +114,8 @@ Habr: PowerShell и его возможности (https://habr.com/ru/articles/
# Discord
# oh-my-posh
# Pester
# FFmpeg
# Pandoc
# FFmpeg
# ImageMagick
# Help
@ -332,6 +335,65 @@ $(foreach ($Group in $Groups) {
$Group.Group[0]
}) | Format-Table
### Error
$Error # выводит все ошибки текущего сеанса
$Error[0].InvocationInfo # развернутый отчет об ошибке
$Error.clear()
$LASTEXITCODE # результат выполнения последней команды (0 - успех)
exit 1 # код завершения, который возвращается $LASTEXITCODE
### Property
$srv.Count # кол-во элементов в массиве
$srv.Length # содержит количество символом строки переменной [string] или количество значений (строк) объекта
$srv.Chars(2) # отобразить 3-й символ в строке
$srv[2] # отобразить 3-ю строку в массиве
### Method
$srv.Insert(0,"https://") # добавить значение перед первым символом
$srv.Substring(4) # удалить (из всего массива) первые 4 символа
$srv.Remove(3) # удалить из всего массива все после 3 символа
$string = "123" # создать строку
$int = [convert]::ToInt32($string) # преобразовать строку в тип данных число
[string]::Concat($text,$num) # объеденить переменные в одну строку
[string]::Join(":",$text,$num) # объеденить используя разделитель
[string]::Compare($text,$num,$true) # выдает 0 при совпадении или 1/-1 при несовпадении, $true (без учета регистра) или $false (с учетом регистра)
[string]::Equals($text,$num) # производит сравнение двух строк и выдает $true при их совпадении или $false при несовпадении
[string]::IsNullOrEmpty($text) # проверяет наличие строки, если строка пуста $true, если нет $false
[string]::IsNullOrWhiteSpace($text2) # проверяет на наличие только символов пробел, табуляция или символ новой строки
### DateTime
Get-TimeZone # часовой пояс
[DateTime]::UtcNow # время в формате UTC 0
(Get-Date).AddHours(-3)
$Date = (Get-Date -Format "dd/MM/yyyy hh:mm:ss")
$Date = Get-Date -f "dd/MM/yyyy" # получаем тип данных [string]
[DateTime]$gDate = Get-Date "$Date" # преобразовать в тип [DateTime]
[int32]$days=($fDate-$gDate).Days # получить разницу в днях
"5/7/07" -as [DateTime] # преобразовать входные данные в тип данных [DateTime]
New-TimeSpan -Start $VBRRP.CreationTimeUTC -End $VBRRP.CompletionTimeUTC # получить разницу во времени
### Measure-Command
(Measure-Command {ping ya.ru}).TotalSeconds # узнать только время выполнения
(Get-History)[-1] | select @{Name="RunTime"; Expression={$_.EndExecutionTime - $_.StartExecutionTime}},ExecutionStatus,CommandLine # посчитать время работы последней [-1] (select -Last 1) выполненной команды и ее узнать статус
### Timer
$start_time = Get-Date # зафиксировать время до выполнения команды
$end_time = Get-Date # зафиксировать время по завершению
$time = $end_time - $start_time # высчитать время работы скрипта
$min = $time.minutes
$sec = $time.seconds
Write-Host "$min минут $sec секунд"
$timer = [System.Diagnostics.Stopwatch]::StartNew() # запустить таймер
$timer.IsRunning # статус работы таймера
$timer.Elapsed.TotalSeconds # отобразить время с момента запуска (в секундах)
$timer.Stop() # остановить таймер
# npp
pwsh -NoExit -ExecutionPolicy Unrestricted -WindowStyle Maximized -File "$(FULL_CURRENT_PATH)"
@ -550,31 +612,79 @@ $srv -isnot [System.Object] # проверка на несоответствие
[Char] # cимвол Юникода (16-разрядный)
$char = $srv.ToCharArray() # разбить строку [string] на массив [System.Array] из букв
# Module
### psd1
@{
RootModule = "Get-Function.psm1"
ModuleVersion = "0.1"
Author = "Lifailon"
CompanyName = "Open Source Community"
Copyright = "Apache-2.0"
Description = "Function example"
PowerShellVersion = "7.2"
PrivateData = @{
PSData = @{
Tags = @("Function","Example")
ProjectUri = "https://github.com/Lifailon/PS-Commands"
LicenseUri = "https://github.com/Lifailon/Console-Translate/blob/rsa/LICENSE"
ReleaseNotes = "Second release"
}
}
}
### psm1
function Get-Function {
<#
.SYNOPSIS
Описание
.DESCRIPTION
Описание
.LINK
https://github.com/Lifailon/PS-Commands
#>
param (
[Parameter(Mandatory,ValueFromPipeline)][string]$Text,
[ValidateSet("Test1","Test2")][string]$Provider = "Test1",
[ValidateRange(1,3)][int]$Number = 2,
[Switch]$Switch
)
Write-Host Param Text: $Text
Write-Host Param Provider: $Provider
Write-Host Param Number: $Number
Write-Host Param Switch: $Switch
}
Get-Function Test
### Switch
$MMM = Get-Date -UFormat "%m"
switch($MMM) {
"01" {$Month = 'Jan'}
"02" {$Month = 'Feb'}
"03" {$Month = 'Mar'}
"04" {$Month = 'Apr'}
"05" {$Month = 'May'}
"06" {$Month = 'Jun'}
"07" {$Month = 'Jul'}
"08" {$Month = 'Aug'}
"09" {$Month = 'Sep'}
"10" {$Month = 'Oct'}
"11" {$Month = 'Nov'}
"12" {$Month = 'Dec'}
"01" {$Month = 'Jan'}
"02" {$Month = 'Feb'}
"03" {$Month = 'Mar'}
"04" {$Month = 'Apr'}
"05" {$Month = 'May'}
"06" {$Month = 'Jun'}
"07" {$Month = 'Jul'}
"08" {$Month = 'Aug'}
"09" {$Month = 'Sep'}
"10" {$Month = 'Oct'}
"11" {$Month = 'Nov'}
"12" {$Month = 'Dec'}
}
### function switch
Function fun-switch (
[switch]$param
[switch]$param
) {
If ($param) {"yes"} else {"no"}
If ($param) {"yes"} else {"no"}
}
fun-switch -param
# Bit
@ -687,53 +797,10 @@ Get-Process pwsh | fl ProcessorAffinity # привязка процесса к
(Get-Process pwsh).ProcessorAffinity = 61440 # 1111000000000000 присвоить 4 последних ядра
(Get-Process pwsh).ProcessorAffinity = (ConvertFrom-Bit 1111000000000000)
### Property
$srv.Count # кол-во элементов в массиве
$srv.Length # содержит количество символом строки переменной [string] или количество значений (строк) объекта
$srv.Chars(2) # отобразить 3-й символ в строке
$srv[2] # отобразить 3-ю строку в массиве
### Method
$srv.Insert(0,"https://") # добавить значение перед первым символом
$srv.Substring(4) # удалить (из всего массива) первые 4 символа
$srv.Remove(3) # удалить из всего массива все после 3 символа
$string = "123" # создать строку
$int = [convert]::ToInt32($string) # преобразовать строку в тип данных число
[string]::Concat($text,$num) # объеденить переменные в одну строку
[string]::Join(":",$text,$num) # объеденить используя разделитель
[string]::Compare($text,$num,$true) # выдает 0 при совпадении или 1/-1 при несовпадении, $true (без учета регистра) или $false (с учетом регистра)
[string]::Equals($text,$num) # производит сравнение двух строк и выдает $true при их совпадении или $false при несовпадении
[string]::IsNullOrEmpty($text) # проверяет наличие строки, если строка пуста $true, если нет $false
[string]::IsNullOrWhiteSpace($text2) # проверяет на наличие только символов пробел, табуляция или символ новой строки
### DateTime
Get-TimeZone # часовой пояс
[DateTime]::UtcNow # время в формате UTC 0
(Get-Date).AddHours(-3)
$Date = (Get-Date -Format "dd/MM/yyyy hh:mm:ss")
$Date = Get-Date -f "dd/MM/yyyy" # получаем тип данных [string]
[DateTime]$gDate = Get-Date "$Date" # преобразовать в тип [DateTime]
[int32]$days=($fDate-$gDate).Days # получить разницу в днях
"5/7/07" -as [DateTime] # преобразовать входные данные в тип данных [DateTime]
New-TimeSpan -Start $VBRRP.CreationTimeUTC -End $VBRRP.CompletionTimeUTC # получить разницу во времени
### Measure-Command
(Measure-Command {ping ya.ru}).TotalSeconds # узнать только время выполнения
(Get-History)[-1] | select @{Name="RunTime"; Expression={$_.EndExecutionTime - $_.StartExecutionTime}},ExecutionStatus,CommandLine # посчитать время работы последней [-1] (select -Last 1) выполненной команды и ее узнать статус
### Timer
$start_time = Get-Date # зафиксировать время до выполнения команды
$end_time = Get-Date # зафиксировать время по завершению
$time = $end_time - $start_time # высчитать время работы скрипта
$min = $time.minutes
$sec = $time.seconds
Write-Host "$min минут $sec секунд"
$timer = [System.Diagnostics.Stopwatch]::StartNew() # запустить таймер
$timer.IsRunning # статус работы таймера
$timer.Elapsed.TotalSeconds # отобразить время с момента запуска (в секундах)
$timer.Stop() # остановить таймер
# Cycle
### Foreach
$list = 100..110 # создать массив из цифр от 100 до 110
foreach ($srv in $list) {ping 192.168.3.$srv -n 1 -w 50} # $srv хранит текущий элемент из $list и повторяет команду до последнего элемента в массиве
$foreach.Current # текущий элемент в цикле
@ -741,6 +808,7 @@ $foreach.Reset() # обнуляет итерацию, перебор начне
$foreach.MoveNext() # переход к следующему элементу в цикле
### ForEach-Object (%)
100..110 | %{ping -n 1 -w 50 192.168.3.$_ > $null
if ($LastExitCode -eq 0) {Write-Host "192.168.3.$_" -ForegroundColor green
} else {
@ -750,6 +818,7 @@ $_ # переменная цикла и конвеера ($PSItem)
gwmi Win32_QuickFixEngineering | where {$_.InstalledOn.ToString() -match "2022"} | %{($_.HotFixID.Substring(2))} # gwmi создает массив, вывод команды передается where для поиска подходящих под критерии объектов. По конвееру передается в цикл для удаления первых (2) символов методом Substring из всех объектов HotFixID.
### While
$srv = "yandex.ru"
$out2 = "Есть пинг"
$out3 = "Нет пинга"
@ -773,13 +842,6 @@ Try {$out = pping 192.168.3.1}
Catch {Write-Warning "$($error[0])"} # выводит в случае ошибки (вместо ошибки)
finally {$out = "End"} # выполняется в конце в любом случае
### Error
$Error # выводит все ошибки текущего сеанса
$Error[0].InvocationInfo # развернутый отчет об ошибке
$Error.clear()
$LASTEXITCODE # результат выполнения последней команды (0 - успех)
exit 1 # код завершения, который возвращается $LASTEXITCODE
# Files
$file = [System.IO.File]::Create("$home\desktop\test.txt") # создать файл
@ -791,6 +853,7 @@ $file.ReadLine() # построчный вывод
$file.ReadToEnd() # прочитать файл целиком
### Read/Write Bytes
$file = [io.file]::ReadAllBytes("$home\desktop\powershell.jpg") # метод открывает двоичный файл, считывает его в массив байт и закрывает файл
[io.file]::WriteAllBytes("$home\desktop\tloztotk-2.jpg",$file) # сохранить байты в файл (можно использовать для выгрузки двоичных файлов из БД)
@ -4975,10 +5038,11 @@ New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\
Get-Service SNMP | Restart-Service
### snmpwalk
snmpwalk -v 2c -c public 192.168.3.100
snmpwalk -v 2c -c public -O e 192.168.3.100
### Modules
### SNMP Modules
Install-Module -Name SNMP
Get-SnmpData -IP 192.168.3.100 -OID 1.3.6.1.2.1.1.4.0 -UDPport 161 -Community public
@ -6074,7 +6138,7 @@ ansible_shell_type=powershell
ansible-inventory --list # проверить конфигурацию (читает в формате JSON) или YAML (-y) с просмотром все применяемых переменных
# Modules
# Win_Modules
ansible us -m ping
ansible win_ssh -m ping
@ -6742,6 +6806,23 @@ while ($response.status -ne "succeeded") {
}
$response.output
# Google-Filter
https://www.google.com/search?q=the+rookie+2018+imdb # формат url-запроса поиска с пробелами
https://www.google.com/search?q=the+rookie+2018+site:imdb.com # поиск по сайту
https://www.google.com/search?q=the+rookie+intitle:index.of+"last modified"+(mkv|avi) # искать страницы, на которых указано "last modified" (последние изменения), заголовок страницы через расширенный оператор поиска (все перечисленные слова должны встречаться в заголовке) содержит слово "index.of" (указывает на директорию на веб-сервере, которая содержит список файлов) и искать файлы с расширениями .mkv или (|) .avi
https://www.google.com/search?q=the+rookie+2018+filetype:torrent
инструкция gopro hero 11 filetype:pdf # искать сразу документ (на странице .pdf или загрузка)
"действия/глаголы, утвержденные для использования в командлетах" # искать по фразе целиком, без разбиения на отдельные слова
"ягуар скорость -животное -xe -xj" # узнаем скорость Ягуара, исключаем животное и модели автомобиля
"intitle:лучшие фильмы 2023" # запрос ищет страницы, заголовки (title HTML документа) которых содержат слова "лучшие", "фильмы" и "2023" (все слова должны быть в заголовке)
"allintitle:лучшие фильмы 2023" # запрос ищет страницы, заголовки (title HTML документа) которых содержат слова "лучшие", "фильмы" или "2023" (одно из)
"intext:telegram бот powershell" # поиск страниц, содержащих указанное ключевое слово в тексте страницы (а не только в заголовке)
"inurl:lifailon" # поиск страниц, в URL которых содержится указанное ключевое слово
intitle:index.of "game of thrones" mkv daterange:2010..2015 # фильтрация по дате изменения, оператор позволяет задать диапазон дат в формате YYYYMMDD..YYYYMMDD
intitle:index.of "game of thrones" mkv after:2015 # ограничить результаты поиска файлов, измененных до (before) или после (after) указанной даты
intitle:index.of "game of thrones" mkv from:2010 to:2015 # фильтрация по диапазону дат
# Google-API
### Google-Translate
@ -6834,6 +6915,20 @@ $(Invoke-RestMethod -Uri $url -Method Get) # список сезонов (.seaso
(Invoke-RestMethod -Uri "https://api.themoviedb.org/3/tv/$id/season/2?api_key=$Token" -Method Get).episodes # вывести 2 сезон
Invoke-RestMethod -Uri "https://api.themoviedb.org/3/tv/$id/season/2/episode/8?api_key=$Token" -Method Get # вывести 8 эпизод
# OMDb
Получение API ключа по email (https://www.omdbapi.com)
$API_KEY = "XXXXXXXX"
$IMDb_ID = "tt7587890"
curl -s "https://omdbapi.com/?apikey=$($API_KEY)&i=$($IMDb_ID)" | jq .
curl -s "https://omdbapi.com/?apikey=$($API_KEY)&i=$($IMDb_ID)" | ConvertFrom-Json
Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&s=The Rookie"
Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&t=The Rookie" # поиск по Title
Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&t=The Rookie&y=1990" # поиск по Title и году выхода
Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&t=The Rookie&type=movie" # поиск только фильма (movie) или сериала (series)
$(Invoke-RestMethod "https://omdbapi.com/?apikey=$($API_KEY)&s=The Rookie").Search # поиск всех совпадений (фильмы и сериалы)
# ivi
https://ask.ivi.ru/knowledge-bases/10/articles/51697-dokumentatsiya-dlya-api-ivi
@ -6853,7 +6948,7 @@ id=$(curl -s https://api.ivi.ru/mobileapi/search/v7/?query=zimorodok | jq .resul
id=5106881
get=$(curl -s https://www.kinopoisk.ru/film/$id/episodes/)
printf "%s\n" "${get[@]}" | grep -A 1 "Сезон 2" | grep "эпизодов" | sed -r "s/^.+\: //" # количество эпиздовод во втором сезоне (8)
printf "%s\n" "${get[@]}" | grep -A 1 "Сезон 2" | grep "эпизодов" | sed -r "s/^.+\: //" # количество эпиздовод во втором сезоне
### kinopoisk.dev
@ -6943,6 +7038,31 @@ percent-decode() {
}
percent-decode "%D0%B7%D0%B8%D0%BC%D0%BE%D1%80%D0%BE%D0%B4%D0%BE%D0%BA"
### KinopoiskApiUnofficial
Бесплатно 500 запросов в сутки. Swagger documentation (https://kinopoiskapiunofficial.tech/documentation/api)
API_KEY="828ec96a-f45d-4e3d-84b1-XXXXXXXXXXXX"
$headers = @{
"accept" = "application/json"
"X-API-KEY" = "$API_KEY"
}
Invoke-RestMethod -Uri 'https://kinopoiskapiunofficial.tech/api/v2.2/films/1142153' -Headers $headers
curl -s "https://kinopoiskapiunofficial.tech/api/v2.2/films/1142153" -H "accept: application/json" -H "X-API-KEY: $API_KEY" | jq .
### Kinobox
$url = "https://www.kinopoisk.ru/film/694051"
$kp_id = $url -replace ".+/"
https://kinomix.web.app/#694051
curl -s -X GET "https://kinobox.tv/api/players/main?kinopoisk=$kp_id" -H "accept: application/json" # поиск по id Кинопоиск
curl -s -X GET "https://kinobox.tv/api/players/main?imdb=tt2293640" -H "accept: application/json" # поиск по id IMDb
curl -s -X GET "https://kinobox.tv/api/players/main?title=minions" -H "accept: application/json" # поиск основных плееров по названию
curl -s -X GET "https://kinobox.tv/api/players/all?title=minions" -H "accept: application/json" # поиск всех плееров
curl -s -X GET "https://kinobox.tv/api/popular/films" -H "accept: application/json" # популярные фильмы
curl -s -X GET "https://kinobox.tv/api/popular/series" -H "accept: application/json" # популярные сериалы
# VideoCDN
https://github.com/notssh/videocdn-api
@ -7277,26 +7397,6 @@ Describe "Get-RunningProcess" {
}
}
# FFmpeg
$release_latest = Invoke-RestMethod "https://api.github.com/repos/BtbN/FFmpeg-Builds/releases/latest"
$url = $($release_latest.assets | Where-Object name -match "ffmpeg-master-latest-win64-gpl.zip").browser_download_url
Invoke-RestMethod $url -OutFile $home\Downloads\ffmpeg-master-latest-win64-gpl.zip
Expand-Archive -Path "$home\Downloads\ffmpeg-master-latest-win64-gpl.zip" -DestinationPath "$home\Downloads\"
Copy-Item -Path "$home\Downloads\ffmpeg-master-latest-win64-gpl\bin\ffmpeg.exe" -Destination "C:\Windows\System32\ffmpeg.exe"
Remove-Item "$home\Downloads\ffmpeg-*" -Force -Recurse
ffmpeg -i input.mp4 output.gif # конвертировать mp4 в gif
ffmpeg -i input.mp4 -filter_complex "scale=1440:-1:flags=lanczos" output.gif # изменить разрешение на выходе
ffmpeg -i input.mp4 -filter_complex "scale=1440:-1:flags=lanczos" -r 10 output.gif # изменить количество кадров в секунду на выходе
ffmpeg -i input.mp4 -filter_complex "fps=5,scale=960:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=32[p];[s1][p]paletteuse=dither=bayer" output.gif # сжатие за счет цветовой политры
ffmpeg -i input.mp4 -ss 00:00:10 -frames:v 1 -q:v 1 output.jpg # вытащить скриншот из видео на 10 секунде
ffmpeg -i input.mp4 -ss 00:00:05 -to 00:00:10 -c copy output.mp4 # вытащить кусок видео
ffmpeg -i "%d.jpeg" -framerate 2 -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4 # создать видео из фото (1.jpeg, 2.jpeg и т.д.) с framerate (частотой кадров) в создаваемом видео 2 кадра в секунду
ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -c:v copy -c:a aac -strict experimental output.mp4 # запись без перекодирования (copy) RTSP-потока с камеры видеонаблюдения (+ аудио в кодеке AAC) в файл
ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -c:v copy -c:a aac -strict experimental -movflags +faststart+frag_keyframe+empty_moov output.mp4 # переместить метаданные в начало файла, что позволяет начать воспроизведение файла в видеоплеере до его полной загрузки
ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -frames:v 1 -c:v mjpeg output.jpg # сделать скриншот
# Pandoc
$release_latest = Invoke-RestMethod "https://api.github.com/repos/jgm/pandoc/releases/latest"
@ -7318,6 +7418,26 @@ Import-Module ImportExcel
Import-Excel -Path srv.xlsx | Export-Csv -Path $csvFilePath -NoTypeInformation -Encoding UTF8 # конвертация Excel в csv
pandoc -s -f csv -t markdown input.csv -o output.md # конвертация таблицу csv в markdown
# FFmpeg
$release_latest = Invoke-RestMethod "https://api.github.com/repos/BtbN/FFmpeg-Builds/releases/latest"
$url = $($release_latest.assets | Where-Object name -match "ffmpeg-master-latest-win64-gpl.zip").browser_download_url
Invoke-RestMethod $url -OutFile $home\Downloads\ffmpeg-master-latest-win64-gpl.zip
Expand-Archive -Path "$home\Downloads\ffmpeg-master-latest-win64-gpl.zip" -DestinationPath "$home\Downloads\"
Copy-Item -Path "$home\Downloads\ffmpeg-master-latest-win64-gpl\bin\ffmpeg.exe" -Destination "C:\Windows\System32\ffmpeg.exe"
Remove-Item "$home\Downloads\ffmpeg-*" -Force -Recurse
ffmpeg -i input.mp4 output.gif # конвертировать mp4 в gif
ffmpeg -i input.mp4 -filter_complex "scale=1440:-1:flags=lanczos" output.gif # изменить разрешение на выходе
ffmpeg -i input.mp4 -filter_complex "scale=1440:-1:flags=lanczos" -r 10 output.gif # изменить количество кадров в секунду на выходе
ffmpeg -i input.mp4 -filter_complex "fps=5,scale=960:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=32[p];[s1][p]paletteuse=dither=bayer" output.gif # сжатие за счет цветовой политры
ffmpeg -i input.mp4 -ss 00:00:10 -frames:v 1 -q:v 1 output.jpg # вытащить скриншот из видео на 10 секунде
ffmpeg -i input.mp4 -ss 00:00:05 -to 00:00:10 -c copy output.mp4 # вытащить кусок видео
ffmpeg -i "%d.jpeg" -framerate 2 -c:v libx264 -r 30 -pix_fmt yuv420p output.mp4 # создать видео из фото (1.jpeg, 2.jpeg и т.д.) с framerate (частотой кадров) в создаваемом видео 2 кадра в секунду
ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -c:v copy -c:a aac -strict experimental output.mp4 # запись без перекодирования (copy) RTSP-потока с камеры видеонаблюдения (+ аудио в кодеке AAC) в файл
ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -c:v copy -c:a aac -strict experimental -movflags +faststart+frag_keyframe+empty_moov output.mp4 # переместить метаданные в начало файла, что позволяет начать воспроизведение файла в видеоплеере до его полной загрузки
ffmpeg -i "rtsp://admin:password@192.168.3.201:554" -rtsp_transport tcp -frames:v 1 -c:v mjpeg output.jpg # сделать скриншот
# ImageMagick
Source (https://sourceforge.net/projects/imagemagick)