| Порівняння попередніх версійПопередня ревізіяНаступна ревізія | Попередня ревізія |
| video-editing [2013/05/15 04:04] – [Фильтры] Видео-фильтры wombat | video-editing [2026/02/04 09:30] (поточний) – Накладання тексту wombat |
|---|
| | ====== Кодирование видео ====== |
| |
| | ===== Mencoder ===== |
| | |
| | ==== XviD ==== |
| | |
| | time mencoder -vf yadif=0,hqdn3d=0:0:15:15,scale=360:288 -ovc xvid -xvidencopts bitrate=500:threads=2 -nosound -lavcopts acodec=libmp3lame:abitrate=64 -o /mnt/multimedia/encoded.avi /mnt/multimedia/Мой\ фильм.avi |
| | |
| | time mencoder -vf yadif=0,hqdn3d=0:0:15:15 -ovc xvid -xvidencopts bitrate=1200:threads=2 -oac lavc -lavcopts acodec=libmp3lame:abitrate=64 -o /mnt/multimedia/encoded.avi /mnt/multimedia/Мой\ фильм.avi |
| | |
| | time (mencoder -dvd-device /temp/ dvd://1 -vf yadif=0,scale=704:528,dsize=4/3 -nosound -ovc xvid -xvidencopts pass=1:bitrate=1200:threads=2 -o Rojdennie_mislit-1-video.avi && mencoder -dvd-device /temp/ dvd://1 -vf yadif=0,scale=704:528,dsize=4/3 -nosound -ovc xvid -xvidencopts pass=2:bitrate=1200:threads=2 -o Rojdennie_mislit-1-video.avi) |
| | |
| | ==== x264 ==== |
| | |
| | |
| | /x264-enc-2p.sh "-nosound /mnt/multimedia/Films/ToRecompress/show_32.avi" 935 "scale=576:432,dsize=4/3," |
| | |
| | |
| | <file bash x264-enc-2p.sh> |
| | #!/bin/bash |
| | # x264-enc-3p.sh |
| | source="$1" |
| | bitrate="$2" |
| | filters="$3" |
| | name="$(date +%F-%T)".avi |
| | log="$name".log |
| | |
| | # With niceness = 19 (the lowest priority |
| | #E1="nice -n 19 mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:subq=1:frameref=1:bframes=3:b_pyramid=normal:direct_pred=auto:bitrate=$bitrate" |
| | #E2="nice -n 19 mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:psnr:ssim:b_adapt=2:deblock:cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=16:trellis=2:frameref=5:bframes=3:b_pyramid=normal:weight_b:mixed_refs:direct_pred=auto:bitrate=$bitrate" |
| | |
| | # With niceness = 0 (normal priority) |
| | #E1="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:subq=1:frameref=1:bframes=3:b_pyramid=normal:direct_pred=auto:bitrate=$bitrate" |
| | #E2="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:psnr:ssim:b_adapt=2:deblock:cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=16:trellis=2:frameref=5:bframes=3:b_pyramid=normal:weight_b:mixed_refs:direct_pred=auto:bitrate=$bitrate" |
| | E1="mencoder "$source" -vf "$filters"harddup -ovc x264 -x264encopts threads=2:subq=1:frameref=1:bframes=3:b_pyramid=normal:direct_pred=auto:bitrate=$bitrate" |
| | E2="mencoder "$source" -vf "$filters"harddup -ovc x264 -x264encopts threads=2:psnr:ssim:b_adapt=2:deblock:cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=16:trellis=2:frameref=5:bframes=3:b_pyramid=normal:weight_b:mixed_refs:direct_pred=auto:bitrate=$bitrate" |
| | |
| | |
| | time (\ |
| | time $E1:pass=1 -o /dev/null && \ |
| | time $E2:pass=2 -o "$name" && \ |
| | echo "Encoding time:") |
| | |
| | rm -v divx2pass.log |
| | |
| | |
| | #(time (\ |
| | #time $E1:pass=1 -o /dev/null && \ |
| | #time $E2:pass=2 -o "$name" && \ |
| | #echo "Encoding time:") &> "$log"; \ |
| | #)& |
| | |
| | #rm -v divx2pass.log |
| | #(time (\ |
| | #time $E1:pass=1 -o /dev/null && \ |
| | #time $E2:pass=2 -o "$name" && \ |
| | #echo "Encoding time:") &> "$log";\ |
| | #rm -v divx2pass.log*\ |
| | #) & |
| | |
| | #(time (\ |
| | #time $e:pass=1 -o /dev/null && \ |
| | #time $e:pass=3 -o /dev/null && \ |
| | #time $e:pass=3 -o "$name" && \ |
| | #echo "Encoding time:") &> "$log";\ |
| | #rm -v divx2pass.log*\ |
| | #) & |
| | #tail -f "$log" |
| | </file> |
| | |
| | <file bash x264-enc-3p.sh> |
| | #!/bin/bash |
| | # x264-enc-3p.sh |
| | source="$1" |
| | bitrate="$2" |
| | filters="$3" |
| | name="$(date +%F-%T)".avi |
| | log="$name".log |
| | # 21 |
| | #e="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=auto:psnr:ssim: b_adapt=2:deblock:cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate: me_range=32:trellis=2:frameref=16:bframes=16:b_pyramid:weight_b:mixed_refs:direct_pred=auto: keyint=750:keyint_min=25:direct_8x8=-1:aq_mode=1:aq_strength=1.0:psy_rd=1.0,0.0:bitrate=$bitrate"( |
| | #e="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:psnr:ssim:b_adapt=2:deblock:cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=32:trellis=2:frameref=16:bframes=16:b_pyramid:weight_b:mixed_refs:direct_pred=auto:keyint=750:keyint_min=25:direct_8x8=-1:aq_mode=1:aq_strength=1.0:psy_rd=1.0,0.0:bitrate=$bitrate" |
| | |
| | # With niceness = 19 (the lowest priority |
| | #E1="nice -n 19 mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:subq=1:frameref=1:bframes=3:b_pyramid=normal:direct_pred=auto:bitrate=$bitrate" |
| | #E2="nice -n 19 mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:psnr:ssim:b_adapt=2:deblock:cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=16:trellis=2:frameref=5:bframes=3:b_pyramid=normal:weight_b:mixed_refs:direct_pred=auto:bitrate=$bitrate" |
| | |
| | # With niceness = 0 (normal priority) |
| | E1="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:subq=1:frameref=1:bframes=3:b_pyramid=normal:direct_pred=auto:bitrate=$bitrate" |
| | E2="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:psnr:ssim:b_adapt=2:deblock:cabac:chroma_me:subq=9:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=16:trellis=2:frameref=5:bframes=3:b_pyramid=normal:weight_b:mixed_refs:direct_pred=auto:bitrate=$bitrate" |
| | |
| | #E2="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:psnr:ssim: b_adapt=2:deblock:cabac:chroma_me:subq=6:partitions=all:8x8dct:me=umh:nofast_pskip:nodct_decimate:me_range=32:trellis=2:frameref=5:bframes=3:b_pyramid:weight_b:mixed_refs:direct_pred=auto:keyint=750:keyint_min=25:direct_8x8=-1:aq_mode=1:aq_strength=1.0:psy_rd=1.0,0.0:bitrate=$bitrate" |
| | #E2="mencoder "$source" -vf pullup,softskip,"$filters"harddup -ovc x264 -x264encopts threads=2:subq=1:frameref=1:bframes=3:b_pyramid=normal:direct_pred=auto:bitrate=$bitrate" |
| | |
| | |
| | time (\ |
| | time $E1:pass=1 -o /dev/null && \ |
| | time $E2:pass=2 -o "$name" && \ |
| | echo "Encoding time:") |
| | |
| | rm -v divx2pass.log |
| | |
| | |
| | #(time (\ |
| | #time $E1:pass=1 -o /dev/null && \ |
| | #time $E2:pass=2 -o "$name" && \ |
| | #echo "Encoding time:") &> "$log"; \ |
| | #)& |
| | |
| | #rm -v divx2pass.log |
| | #(time (\ |
| | #time $E1:pass=1 -o /dev/null && \ |
| | #time $E2:pass=2 -o "$name" && \ |
| | #echo "Encoding time:") &> "$log";\ |
| | #rm -v divx2pass.log*\ |
| | #) & |
| | |
| | #(time (\ |
| | #time $e:pass=1 -o /dev/null && \ |
| | #time $e:pass=3 -o /dev/null && \ |
| | #time $e:pass=3 -o "$name" && \ |
| | #echo "Encoding time:") &> "$log";\ |
| | #rm -v divx2pass.log*\ |
| | #) & |
| | #tail -f "$log" |
| | </file> |
| | |
| | ===== FFMpeg (avconv) ===== |
| | |
| | |
| | |
| | ====== Кодирование аудио ====== |
| | |
| | mplayer -dvd-device /mnt/cdrom/ mplayer dvd://1 -vc null -vo null -ao pcm:file=audio.fifo:waveheader:fast |
| | |
| | |
| | |
| | oggenc -o Rojdennie_mislit-1-audio.ogg -q2 audio.fifo |
| | |
| | |
| | |
| | |
| | |
| | ====== Мультиплексирование ====== |
| | |
| | mkvmerge -o Rojdennie_mislit-1.mkv Rojdennie_mislit-1-video.avi -y 0:250 Rojdennie_mislit-1-audio.ogg |
| | |
| | mkvmerge -o Patria.mkv 2010-05-23-01\:13\:27.avi -y 0:0 /mnt/data/Patria_o_muerte.ogg |
| | |
| | mkvmerge -o show_31.mkv 2010-05-23-07\:37\:34.avi -y 0:400 show_31.ogg |
| | |
| | ====== Фильтры ====== |
| | |
| | ===== Видеофильтры ===== |
| | |
| | ==== Изменение размера ==== |
| | |
| | mplayer -vf crop=620:432:10:0,scale=576:432,dsize=4/3 -nosound /mnt/multimedia/Films/ToRecompress/show_22.avi |
| | |
| | mplayer -vf scale=576:432,dsize=4/3 -nosound /mnt/multimedia/Films/ToRecompress/show_26.avi |
| | |
| | mplayer -vf scale=576:432,dsize=4/3 -endpos 1497 -nosound /mnt/multimedia/Films/ToRecompress/show_33_34.avi |
| | |
| | ==== Обрезка краёв ==== |
| | |
| | mplayer -vf crop=624:480:16:0,scale=576:432,dsize=4/3 -ss 1497 -nosound /mnt/multimedia/Films/ToRecompress/show_33_34.avi |
| | |
| | mplayer -vf crop=624:480:16:0,scale=576:432,dsize=4/3 -nosound /mnt/multimedia/Films/ToRecompress/show_35.avi |
| | |
| | ==== Подавление шумов ==== |
| | |
| | mplayer -ss 510 -vf hqdn3d=0:0:15:15 -ao null dvd://2 -dvd-device /mnt/lan/data/Родина\ или\ смерть\!\ \(Фидель\ Кастро\)/ |
| | |
| | |
| | ==== Добавление чёрных полос ==== |
| | |
| | |
| | |
| | ==== Пришвидшення / сповільнення ==== |
| | |
| | Щоб пришвидшити відео разом з аудіодоріжкою у вісім разів, можна скористатися такими фільтрами: |
| | ffmpeg -i input_video.mp4 -vf "setpts=0.125*PTS" -af "atempo=8.0" output_video_x8speed.mp4 |
| | |
| | Тут число ''0.125 = 1/8'' показує, у скільки разів повинна зменшитись тривалість відео. |
| | |
| | [[https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video|FFmpeg: Speeding up/slowing down video]] |
| | |
| | |
| | ==== Пропалювання субтитрів ==== |
| | |
| | Якщо в нас є відеофайл, в якому субтитри збережено окремою доріжкою (так звані «м'які» субтитри), а нам потрібно «пропалити» їх у зображення кадрів, то це можна зробити наступним чином: |
| | |
| | ffmpeg -i video.mkv -vf subtitles=video.mkv out.avi |
| | |
| | У більш складному випадку, коли потрібно вирізати шматок з відеофайлу, а також коли в ньому є декілька доріжок субтитрів та декілька аудіодоріжок, команда може виглядати так: |
| | |
| | ffmpeg -ss 1:09:51 -to 1:10:03 -copyts -i video.mkv -vf subtitles=video.mkv:si=2 -map 0:0 -map 0:3 -c:v libx264 -crf 23 -c:a aac -b:a 160k out.mp4 |
| | |
| | Тут параметр ''si=2'' фільтра ''subtitles'' означає вибір третьої доріжки субтитрів, а параметри ''-map 0:0 -map 0:3'' вказують, що з початкового відеофайлу потрібно взяти перший та четвертий потоки (це можуть бути відео- та аудіопотоки, наприклад). Нумерація аудіо-, відео- та доріжок субтитрів починається з нуля. |
| | |
| | |
| | |
| | ==== Накладання тексту ==== |
| | |
| | Додати текстовий напис поверх відео можна за допомогою відеофільтра «''drawtext''»((https://ffmpeg.org/ffmpeg-filters.html#drawtext-1)). Розглянемо приклад: |
| | |
| | ffmpeg -i input_video.mp4 -vf "drawtext=fontfile=monofonto.ttf: fontsize=24: box=1: boxcolor=black@0.5: boxborderw=5: fontcolor=white: x=10: y=10: text='Some text'" -c:v libx264 -crf 23 video_with_some_text.mp4 |
| | |
| | В цьому прикладі параметри фільтра «''drawtext''» значать наступне: |
| | * ''fontfile=monofonto.ttf'' -- вказує файл зі шрифтом TrueType, яким потрібно написати текст; |
| | * ''fontsize=24'' -- розмір шрифту; |
| | * ''box=1'' -- означає, що на тлі тексту потрібно намалювати прямокутник; |
| | * ''boxcolor=black@0.5'' -- означає, що прямокутник повинен бути чорного кольору з прозорістю 0.5; |
| | * ''boxborderw=5'' -- ширина полів прямокутника навколо тексту; |
| | * ''fontcolor=white'' -- колір тексту повинен бути білий; |
| | * ''x=10: y=10'' -- координати від лівого верхнього кута відео; |
| | * ''text='Some text''' -- означає, що потрібно написати слова «Some text». |
| | |
| | Якщо ми хочемо, щоб напис був показаний лише у проміжку між 5-ю та 10-ю секундами, то можна додати параметр "''enable='between(t,5,10)'''": |
| | |
| | ffmpeg -i input_video.mp4 -vf "drawtext=fontfile=LiberationSerif-Bold.ttf: fontsize=124: box=1: boxcolor=black@0.5: boxborderw=5: fontcolor=red: x=10: y=10: text='Some Text':enable='between(t,5,10)'" -c:v libx264 -crf 23 -an -sn some_text_between_5s_and_10s.mp4 |
| | |
| | |
| | Також можна накладати різні написи в різні моменти часу: |
| | |
| | ffmpeg -i input_video.mp4 -vf "drawtext=fontfile=LiberationSerif-Bold.ttf: fontsize=124: box=1: boxcolor=black@0.5: boxborderw=5: fontcolor=red: x=10: y=10: text='Old →':enable='between(t,0,23)', drawtext=fontfile=LiberationSerif-Bold.ttf: fontsize=124: box=1: boxcolor=black@0.5: boxborderw=5: fontcolor=#00FF00: x=10: y=10: text='New →':enable='between(t,30,500)'" -c:v libx264 -crf 23 -an -sn compare_old_vs_new.mp4 |
| | |
| | |
| | Замість статичного тексту можна накласти поточну дату у вказаному форматі: |
| | |
| | ffmpeg -i input_video.mp4 -vf "drawtext=fontfile=monofonto.ttf: fontsize=24: box=1: boxcolor=black@0.5: boxborderw=5: fontcolor=white: x=10: y=10: text='%{localtime\:%d.%m.%Y %H\\\\\:%M\\\\\:%S}'" -c:v libx264 -crf 23 video_with_local_time.mp4 |
| | |
| | |
| | |
| | |
| | |
| | ===== Аудіофільтри ===== |
| | |
| | ==== Підсилення звуку ==== |
| | |
| | Спочатку необхідно дізнатися, який максимальний рівень гучності у файлі: |
| | |
| | ffmpeg -i videofile.mp4 -af "volumedetect" -vn -f null /dev/null |
| | |
| | Ця команда видасть на екран наступні рядки: |
| | |
| | mean_volume: -28.4 dB |
| | max_volume: -12.3 dB |
| | |
| | Це означає, що середній рівень гучності у файлі складає ''-28.4 dB'', а максимальний -- ''-12.3 dB''. Отже, можна підсилити на ''<=12.3 dB'', і це не призведе до перевантаження. |
| | |
| | Потім необхідно перерахувати коефіцієнт підсилення з децибел у амплітудні значення для рівня напруги за формулою: |
| | |
| | volume = 10^(volumedB/20) |
| | |
| | Наприклад, для ''12.3dB'' коефіцієнт підсилення амплітуди складе ''4.12'' |
| | |
| | Далі застосовуємо потрібний коефіцієнт підсилення до файлу: |
| | |
| | ffmpeg -i videofile.mp4 -af "volume=4.12" -vcodec copy -acodec aac -b:a 160k videofile_12dB.mp4 |
| | |
| | Згідно з документацією FFMPEG((https://trac.ffmpeg.org/wiki/AudioVolume)), можна також вказувати коефіцієнт підсилення в децибелах: |
| | ffmpeg -i videofile.mp4 -af "volume=12dB" -vcodec copy -acodec aac -b:a 160k videofile_12dB.mp4 |
| | |
| | Від'ємні значення коефіцієнта приведуть до зменшення гучності. |
| | ====== Полезные ссылки ====== |
| | |
| | https://libav.org/avconv.html#libx264 |
| | https://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping |