Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
fedora:040-multimedia [16.12.2023 22:16] (текущий) – [Картинка в картинке из двух видео] Oleg Kochkin
Строка 1: Строка 1:
 +====== Мультимедиа ======
 +===== Видео в png и png в видео =====
 +  ffmpeg -i input.mkv "%08d.png"
 +  ffmpeg -framerate 10 -i "%08d.png" -vcodec huffyuv output.mkv
 +
 +===== Все png файлы в jpg =====
 +  mogrify -format jpg *.png
 +  mogrify -format jpg *.png && rm *.png
 +
 +===== Скачивание видеофайла с URL с ограничением скорости и продолжительности =====
 +  youtube-dl --hls-prefer-native -r 3m -o - <URL> | ffmpeg -y -i - -t 300 -c copy test.ts
 +Скачивает файл "<URL>" со скоростью не более 3-х мегабайт/сек (-r 3m) продолжительностью 5 минут (-t 300) в файл "test.ts"
 +
 +===== Сглаживание перехода между кадрами (minterpolate) =====
 +  ffmpeg -i inpit.mkv -filter:v "minterpolate=fps=60:mi_mode=mci:mc_mode=aobmc:me_mode=bidir:vsbmc=1" -vcodec huffyuv output.mkv
 +
 +https://drive.google.com/file/d/1GjHINk-mZDbf_-egTIL-h8TyP2zHJUVw/view?usp=sharing
 +
 +===== Видео в webp (ffmpeg) =====
 +На март 2021г. в репах rpmfusion для Fedora 33 ffmpeg (4.3.2) был собран без возможности кодирования в webp, поэтому был использован [[https://johnvansickle.com/ffmpeg/|ffmpeg 4.3.1 статической сборки]]:
 +
 +4.3.2:
 +  $ ffmpeg -hide_banner -codecs | grep webp
 +  D.VILS webp                 WebP
 +4.3.1-static:
 +  $ ffmpeg-alt -hide_banner -codecs | grep webp
 +  DEVILS webp                 WebP (encoders: libwebp_anim libwebp )
 +
 +  ffmpeg-alt -i input.mp4 -vcodec libwebp -lossless 1 -q 60 -loop 0 -preset default -an -vsync 0 output.webp
 +
 +<html>
 +WebP (9.1 Mb) vs Gif (58.1 Mb):<br>
 +<a href="https://i.postimg.cc/QMjgJHhM/image.webp"><img src="https://i.postimg.cc/brS1wnHm/th.webp" /></a> <a href="https://pic.maxiol.com/images2/1683199584.1494721472..gif"><img src="https://pic.maxiol.com/images2/1683199754.1494721472.tn.gif" /></a>
 +</html>
 +===== Поворот видео на 90º без перекодирования =====
 +  ffmpeg -i in.mp4 -metadata:s:v rotate=-90 -c copy -y out.mp4
 +Поворачивает видео на 90º по часовой стрелке. Не сохраняет метаданные в MKV.
 +
 +===== Записать ffmpeg-ом поток в виде фрагментированного MP4 =====
 +ffmpeg по умолчанию записывает нефрагментированный поток MP4, из-за чего, невозможно просматривать записываемый файл одновременно с записью, а так-же получить параметры записываемого файла  тем-же mediainfo.
 +
 +Для получения фрагментированного MP4 файла, необходимо добавить параметр **-movflags frag_keyframe** и, как правило, параметр **-bsf:a aac_adtstoasc**. Перекодирование не требуется, параметры влияют только на контейнер.
 +
 +===== Изменение FPS без перекодирования =====
 +Из исходного файла **in.mp4** удаляется звук, устанавливается 10 fps и сохраняется в файл **in-10fps.mkv**:
 +  mkvmerge --output in-10fps.mkv --no-audio --default-duration 0:10p in.mp4
 +И, уже с 10 fps в mp4:
 +  ffmpeg -i in-10fps.mkv -c copy out-10fps.mp4
 +
 +===== Анимационный gif с плавным переходом из двух (или более) картинок =====
 +  convert 1.png 1.png 2.png 2.png 1.png -morph 10 -set delay 10 out.gif
 +[[https://www.imagemagick.org/Usage/anim_mods/#morph|Из документации по ImageMagick]]
 +===== Опции FFMPEG для захвата HTTP потока плохого качаства =====
 +  ffmpeg -reconnect 1 -reconnect_at_eof 1 -reconnect_streamed 1 -reconnect_delay_max 2 -timeout 10000000 -i ...
 +[[https://ffmpeg.org/ffmpeg-protocols.html#http|Из документации по FFMPEG]]
 +
 +===== Получение из одной картинки видео заданной продолжительности (10 секунд) =====
 +  ffmpeg -filter_complex aevalsrc=0 -loop 1 -i picture.png -t 10 -vcodec huffyuv -y out.avi
 +или одна картинка с аудиотреком:
 +  ffmpeg -loop 1 -i picture.jpg -i sound.mp3 -t 05:40 -c:v libx264 -c:a copy -y out.mkv
 +
 +===== Добавление текста к видео =====
 +  ffmpeg -i input.mkv -vf drawtext="text='Текст для вывода': \
 +    font=URW Chancery L: \
 +    fontcolor=red@.5: \
 +    shadowcolor=gray@.5: \
 +    shadowx=1: \
 +    shadowy=1: \
 +    fontsize=20: \
 +    x=5: y=5" \
 +    -acodec copy -crf 20 -vcodec libx264 -y output.mkv
 +
 +[[https://ffmpeg.org/ffmpeg-filters.html#drawtext|ffmpeg filter "drawtext"]]
 +
 +===== Комбинирование нескольких видео в одно (мозаика) =====
 +
 +Исходные видео:
 +  * **1-up.avi** - Размер 1920x768 (должно будет располагаться сверху)
 +  * **2-bt.avi** - Размер 1920x312 (должно будет располагаться снизу)
 +
 +Необходимо получить видео с общим размером 1920x1080.
 +
 +Команда:
 +  ffmpeg -i 1-up.avi -i 2-bt.avi -filter_complex "nullsrc=size=1920x1080 [base];[0:v]setpts=PTS-STARTPTS,scale=1920x768[upperleft];[1:v]setpts=PTS-STARTPTS,scale=1920x312[lowerleft];[base][upperleft]overlay=shortest=1[tmp1];[tmp1][lowerleft]overlay=shortest=1:y=769" -vcodec huffyuv -acodec copy -y 3-all.avi
 +
 +Подробнее [[https://trac.ffmpeg.org/wiki/Create%20a%20mosaic%20out%20of%20several%20input%20videos|здесь]].
 +
 +Ещё один пример (**"hstack"** стыкует видео по горизонтали, **"vstack"** - по вертикали):
 +  ffmpeg -i left.mkv -i right.mkv -filter_complex "[0:v][1:v]hstack" -acodec copy -vcodec huffyuv -y out.mkv
 +  ffmpeg -i top.mkv -i bottom.mkv -filter_complex "[0:v][1:v]vstack" -acodec copy -vcodec huffyuv -y out.mkv
 +**"left.mkv"** и **"right.mkv"** имеют одинаковую высоту.\\
 +**"top.mkv"** и **"bottom.mkv"** имеют одинаковую ширину.\\
 +
 +===== Картинка в картинке из двух видео =====
 +  ffmpeg -hide_banner -y -i big.mp4 -i little.mkv -map 1:1 -filter_complex "[1]scale=iw/5:-1[pip];[0][pip]overlay=W-w-20:H-h-20:shortest=1[v];[0:a][1:a]amerge[a]" -map "[v]" -map "[a]" -c:a aac -c:v huffyuv out.mkv
 +Полупрозрачный
 +  ffmpeg -hide_banner -y -i big.mp4 -i little.mkv -map 1:1 -filter_complex "[1]scale=iw/5:-1,format=rgba,colorchannelmixer=aa=0.4[pip];[0][pip]overlay=W-w-20:H-h-20:shortest=1[v];[0:a][1:a]amerge[a]" -map "[v]" -map "[a]" -c:a aac -c:v huffyuv out.mkv
 +
 +Встраиваемая (little.mkv) уменьшается в пять раз (scale=iw/5:-1) и располагается в правом нижнем углу с отступом от края 20 пикс. (W-w-20:H-h-20). Звук из little.mkv ( -map 1:1).
 +===== Добавить логотип в видео =====
 +
 +  ffmpeg -i input.mkv -i logo.png -filter_complex "[0:v][1:v]overlay=8:8" -vcodec libx264 -acodec ac3 -y output.mkv
 +
 +input.mkv - Входной видео файл\\
 +logo.png - Файл логотипа\\
 +output.mkv - Выходной видео файл\\
 +8:8 - координаты логотипа (0:0 - верхний левый угол).
 +
 +[[http://superuser.com/questions/683643/how-to-add-my-logo-for-the-first-30-seconds-in-a-video-with-ffmpeg|Ещё варианты]]
 +
 +===== Сжатие динамического диапазона для аудио (DRC) =====
 +Выравнивает громкость аудио.
 +  sox input.wav output.wav compand 0.3,.8 -120,-10 -10 -100 .1
 +<html><details><summary>Исходник и результат:</summary></html>
 +{{:fedora:input.jpg|}} {{:fedora:output.jpg|}}
 +<html></details></html>
 +
 +<html><details><summary>Аналогичный фильтр в AudaCity - "Компрессор...":</summary></html>
 +{{:fedora:audacity-drc.png|}}
 +<html></details></html>
 +
 +=== Для ffmpeg. ===
 +  ffmpeg -i input.ts -vcodec copy -af "compand=0 0:1 1:-60/-24 -48/-12 0/0:6:2:0:0" -acodec ac3 output.mkv
 +[[http://forum.videohelp.com/threads/366765-FFMPEG-Compand-settings-suggestions-please?p=2347254&viewfull=1#post2347254|Отсюда]], [[https://ffmpeg.org/pipermail/ffmpeg-user/2013-November/018656.html|отсюда]] и [[http://ffmpeg.org/ffmpeg-filters.html#compand|отсюда]]
 +
 +=== Для PulseAudio. ===
 +Установить пакет ladspa-swh-plugins\\
 +В файл /etc/pulse/default.pa добавляем:
 +  load-module module-ladspa-sink sink_name=drc sink_master=speakers plugin=sc4_1882 label=sc4 control=1,1.5,401,-24,10,10,12
 +  update-sink-proplist drc device.description="Dynamic Range Compressor (DRC)"
 +В данном примере, родительским синком для DRC канала является виртуальный синк speakers.
 +
 +===== Собрать анимационный GIF из видеофайла =====
 +  mplayer -vo jpeg input.avi
 +
 +  * Создаёт кучу JPG файлов в текущей папке.
 +  * input.avi должен быть того разрешения, которое необходимо для GIF.
 +  * Частота кадров должна соответствовать задержке анимации.
 +
 +  convert *.jpg -delay 100 -layers optimize output.gif
 +
 +  * Собирает из кучи JPG файлов анимированный output.gif.
 +  * Задержка между картинками в GIF файле - 100 миллисекунд, что соответствует 10 кадров секунду.
 +
 +А можно ещё проще:
 +  ffmpeg -i input.avi output.gif
 +Более качественный вариант:
 +  ffmpeg -i input.avi -r 10 -f image2pipe -vcodec ppm - | convert -delay 5 -loop 0 -layers Optimize - output.gif
 +
 +Прямое и обратное проигрывание.\\
 +Прямой файл:
 +  convert in.avi forward.gif
 +Обратный файл:
 +  convert in.avi -reverse reverse.gif
 +Слияние полученных файлов:
 +  convert -coalesce forward.gif reverse.gif out.gif
 +
 +===== Просмотр потока с ТВ тюнера на VLC =====
 +  vlc v4l2:///dev/video0 :v4l2-standard=SECAM :input-slave=alsa://hw:1,0
 +/dev/video0 - тюнер\\
 +SECAM - стандарт вещания\\
 +hw:1,0 - аудио устройство ("звук по шине PCI")
 +-----
 +
 +===== Перекодировка тегов mp3 файлов из CP1251 в UTF8 =====
 +  find -iname '*.mp3' -print0 | xargs -0 mid3iconv -eCP1251 --remove-v1
 +Необходим пакет python-mutagen\\
 +[[http://forum.russianfedora.ru/viewtopic.php?p=309#p309|forum.russianfedora.ru]]
 +-----
 +
 +===== Захват части экрана в видеофайл =====
 +//Изменено 25 мая 2013г. (Fedora 18).//
 +
 +  ffmpeg -y -t 600 -s 800x600 -f x11grab -i :0.0+100,200 -vpre libx264-lossless_ultrafast /mnt/cap/screen.avi
 +
 +Опции:
 +  
 +  -y                               - Перезаписывать существующий файл
 +  -t 600                           - Продолжительность записи в секундах
 +  -s 800x600                       - Размер захватываемой области
 +  -f x11grab                       - Устройство захвата (экран)
 +  -i :0.0+100,200                  - Параметры устройства захвата. Номер экрана - :0.0, координаты захватываемой области - +100,200
 +  -vpre libx264-lossless_ultrafast - Предустановки видеокодека (быстрый способ, почти без сжатия)
 +  /mnt/cap/screen.avi              - Сохраняемый файл
 +
 +**В Fedora 27 вместо "-vpre libx264-lossless_ultrafast" используется "-preset speed".**
 +
 +Содержимое файла предустановок ("/usr/share/ffmpeg/libx264-lossless_ultrafast.ffpreset"):
 +  vcodec=libx264
 +  flags=+loop+cgop
 +  partitions=-parti8x8-parti4x4-partp8x8-partp4x4-partb8x8
 +  me_method=dia
 +  subq=0
 +  me_range=16
 +  g=250
 +  keyint_min=25
 +  sc_threshold=40
 +  i_qfactor=0.71
 +  b_strategy=1
 +  qcomp=0.6
 +  qmin=0
 +  qmax=69
 +  qdiff=4
 +
 +[[http://youtu.be/hTe7sz-lHsU|Ролик, снятый таким способом (youtube.com, 1920x1080)]]
 +
 +Со звуком:
 +  ffmpeg -y -t 600 -s 1920x1080 -f x11grab -i :0.0+0,0 -f alsa -ac 2 -i pulse -vpre libx264-lossless_ultrafast /mnt/cap/screen.avi
 +Весь экран с кодеком HuffYUV:
 +  ffmpeg -y -s 1920x1080 -f x11grab -i :0.0+0,0 -vcodec huffyuv -y screen.avi
 +
 +-----
 +
 +===== Сохранение в wmv без перекодирования =====
 +Сохраняются дорожки 1 (audio) и 4 (video):
 +  mencoder input.wmv -of lavf -ovc copy -oac copy -aid 1 -vid 4 -o output.wmv
 +
 +===== Кодирование звукового файла DTS -> AC3 =====
 +
 +<html><details><summary>Исходный файл DTS (audio.dts):</summary></html>
 +  Audio
 +  Format                           : DTS
 +  Format/Info                      : Digital Theater Systems
 +  Format profile                   : MA / Core
 +  Duration                         : 3h 9mn
 +  Bit rate mode                    : Variable
 +  Bit rate                         : 1 750 Kbps / 1 510 Kbps
 +  Channel(s)                       : 8 channels / 6 channels
 +  Channel positions                : Front: L C R, Side: L R, Back: L R, LFE / Front: L C R, Side: L R, LFE
 +  Sampling rate                    : 48.0 KHz
 +  Bit depth                        : 16 bits
 +  Compression mode                 : Lossless / Lossy
 +<html></details></html>
 +
 +Команда:
 +  ffmpeg -i audio.dts -ab 448000 -ar 48000 -ac 6 -acodec ac3 -y audio.ac3
 +<html><details><summary>Результат AC3 (audio.ac3):</summary></html>
 +  Audio
 +  Format                           : AC-3
 +  Format/Info                      : Audio Coding 3
 +  Mode extension                   : CM (complete main)
 +  Duration                         : 2h 0mn
 +  Bit rate mode                    : Constant
 +  Bit rate                         : 448 Kbps
 +  Channel(s)                       : 6 channels
 +  Channel positions                : Front: L C R, Side: L R, LFE
 +  Sampling rate                    : 48.0 KHz
 +  Bit depth                        : 16 bits
 +  Compression mode                 : Lossy
 +  Stream size                      : 388 MiB (100%)
 +<html></details></html>
 +
 +===== Преобразовать DVD в один vob файл с сохранением всех аудиодорожек. =====
 +
 +  vobcopy -i VIDEO_TS -l -n 3
 +
 +**-i VIDEO_TS** - Папка с структурой DVD.\\
 +**-l** - Возможность создать vob файл размером более 2Гб.\\
 +**-n 3** - Создавать файл из третьего заголовка.
 +
 +Параметры DVD можно узнать командой\\
 +Краткая информация:
 +  lsdvd VIDEO_TS
 +Полная информация:
 +  lsdvd VIDEO_TS -x
 +
 +===== Параметры аудиофильтра "pan" mencoder. =====
 +
 +Нумерация каналов:
 +
 +0 - Front Left (Передний Левый) - FL\\
 +1 - Front Right (Передний Правый) - FR\\
 +2 - Rear Left (Задний Левый) - RL\\
 +3 - Rear Right (Задний Правый) - RR\\
 +4 - Front Center (Передний Центральный) - FC\\
 +5 - Subwoofer (Сабвуфер) - SW\\
 +
 +Преобразование шестиканального звука в двухканальный, с ослаблением всех каналов, кроме Переднего Центрального:
 +
 +||||||||||||  Входные каналы  ||||||||||||
 +||  FL  ||  FR  ||  RL  ||  RR  ||  FC  ||  SW  ||
 +|  0.5  |  0  |  0  |  0.5  |  0.5  |  0  |  0  |  0.5  |  1  |  1  |  0.5  |  0.5  |
 +||||||||||||  Выходные каналы  ||||||||||||
 +|  L  |  R  |  L  |  R  |  L  |  R  |  L  |  R  |  L  |  R  |  L  |  R  |
 +
 +{{  mencoder-pan.png?640}}
 +Т.е.:\\
 +  * Передний Левый входной на 0.5 громкости в Левый выходной,\\
 +  * Передний Левый входной на 0 громкости в Правый выходной,\\
 +  * Передний Правый входной на 0 громкости в Левый выходной,\\
 +  * Передний Правый входной на 0.5 громкости в Правый выходной,\\
 +  * Задний Левый входной на 0.5 громкости в Левый выходной,\\
 +  * Задний Левый входной на 0 громкости в Правый выходной,\\
 +  * Задний Правый входной на 0 громкости в Левый выходной,\\
 +  * Задний Правый входной на 0.5 громкости в Правый выходной,\\
 +  * Передний Центральный входной на 1 громкости в Левый выходной,\\
 +  * Передний Центральный входной на 1 громкости в Правый выходной,\\
 +  * Сабвуфер входной на 0.5 громкости в Левый выходной,\\
 +  * Сабвуфер входной на 0.5 громкости в Правый выходной,\\
 +
 +Первый параметр устанавливает количество выходных каналов.
 +
 +**-af pan=2:0.5:0:0:0.5:0.5:0:0:0.5:1:1:0.5:0.5**
 +
 +Преобразование 6 -> 6 с усилением тыловых и переднего центрального каналов и ослаблением сабвуфера:\\
 +**-af pan=6:1:0:0:0:0:0:0:1:0:0:0:0:0:0:2:0:0:0:0:0:0:2:0:0:0:0:0:0:2:0:0:0:0:0:0:0.5**
 +
 +Пример для ffmpeg:\\
 +  ffmpeg -i 4359-rus.dts -ab 128000 -vf pan="stereo: FL<0.5*FL+1.0*FC+0.1*BC+0.1*SL : FR<0.5*FR+1.0*FC+0.1*BC+0.1*SR" -ac 2 -acodec ac3 -y 4359-rus.ac3
 +
 +===== Разобрать DVD на файлы по главам. =====
 +  $ cat dvd-chapters-to-mpg VIDEO_TS 5 7
 +  
 + #!/usr/bin/perl
 +  
 + $folder=@ARGV[0];
 + $chapter_start=@ARGV[1];
 + $chapter_end=@ARGV[2];
 + if ("$folder" eq ""){
 + print "\nCommand:\n";
 + print "dvd-chapters-to-mpg dvd_folder [chapter_start] [chapter_end]\n";
 + exit;
 + }
 + if ("$chapter_start" eq ""){ $chapter_start=1;}
 + if ("$chapter_end" eq ""){ $chapter_end=$chapter_start;}
 + for ($i=$chapter_start;$i<=$chapter_end;$i++){
 + $chap=$i;
 + while (length ($chap)<3) {$chap="0".$chap;}
 + print "Chapter - $chap\n";
 + `mencoder dvd:// -dvd-device \"$folder\" -chapter $i-$i -ovc copy -oac copy -of mpeg -o $chap.mpg`;
 + }
 +
 +Параметры запуска; dvd-chapters-to-mpg dvd_folder [chapter_start] [chapter_end]\\
 +dvd_folder - папка со структурой DVD диска (VIDEO_TS)\\
 +chapter_start - начальная глава (5)\\
 +chapter_end - конечная глава (7)
 +
 +===== Создание скриншотов из видеофайла. =====
 +
 +  mplayer file.avi -vo png -nosound -sstep 60
 +
 +===== Перекодирование файлов ape в mp3. =====
 +
 +Преобразование ape в wav:
 +
 +  mac file.ape file.wav
 +
 +Преобразование wav в mp3:
 +
 +  lame --preset insane file.wav file.mp3
 +
 +Разрезание файла mp3 на треки (необходим cue файл):
 +
 +  mp3splt -c file.cue file.mp3 -o "@n - @a - @t"
 +
 +Где @n - номер дорожки, @a - артист, @t - композиция.
 +
 +Необходимые пакеты, отсутствующие в репозиториях Fedora 18:
 +
 +{{:fedora:mp3splt-2.4.3-11.fc18.x86_64.rpm|}}\\
 +{{:fedora:mp3splt-gtk-0.7.3-11.fc18.x86_64.rpm|}}\\
 +{{:fedora:libmp3splt-0.7.3-11.fc18.x86_64.rpm|}}
 +
 +===== Исправление и декодинг AVI файлов. =====
 +Исправление индексов:
 +  mencoder -idx input.avi -ovc copy -oac copy -o output.avi
 +
 +Перекодирование 1.mkv в o1.avi (первый проход):
 +  mencoder 1.mkv -nosound -ovc xvid -xvidencopts vhq=1:pass=1:qpel:trellis -o /dev/null
 +
 +(второй проход):
 +  mencoder 1.mkv -oac mp3lame -aid 1 -ovc xvid -xvidencopts vhq=1:pass=2:qpel:trellis:bitrate=1563 -o o1.avi
 +
 +----
 +
 +===== Извлечение звуковой дорожки из видео файлов. =====
 +  mplayer видеофайл.avi -dumpaudio -dumpfile аудиофайл.ac3
 +
 +----
 +
 +===== Изменение соотношения сторон в заголовке AVI файла. =====
 +  mencoder -vf dsize=4/3 ...
 +
 +----
 +
 +===== Соединение avi файлов. =====
 +Для соединения двух (и более) avi файлов:
 +
 +  mencoder -oac copy -ovc copy -o out.avi in-1.avi in-2.avi
 +
 +----
 +
 +===== Указание выходного контейнера видео.=====
 +  mencoder -of mpeg
 +  mencoder -of help (доступные контейнеры)
 +
 +----
  
Наверх