Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Both sides previous revision Попередня ревізія Наступна ревізія | Попередня ревізія | ||
video [2014/07/27 00:28] wombat [Захват с экрана] |
video [2021/03/25 16:21] (поточний) wombat [Багато кадрів] |
||
---|---|---|---|
Рядок 14: | Рядок 14: | ||
youtube-dl -g https://www.youtube.com/watch?v=<video_ID> | vlc - | youtube-dl -g https://www.youtube.com/watch?v=<video_ID> | vlc - | ||
+ | |||
+ | |||
+ | ===== Извлечение кадров ===== | ||
+ | [[https://stackoverflow.com/a/10962408 | Fastest way to extract frames using ffmpeg?]] | ||
+ | ffmpeg -i file.mpg -r 1/1 $filename%03d.bmp | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
====== Создание ====== | ====== Создание ====== | ||
Рядок 29: | Рядок 39: | ||
+ | |||
+ | ===== Из картинок ===== | ||
+ | |||
+ | |||
+ | ==== Один кадр ==== | ||
+ | |||
+ | [[https://stackoverflow.com/a/25895709 | Creating a video from a single image for a specific duration in ffmpeg]] | ||
+ | |||
+ | ffmpeg -loop 1 -i image.png -c:v libx264 -t 15 -pix_fmt yuv420p -vf scale=320:240 out.mp4 | ||
+ | |||
+ | Здесь ''-t 15'' обозначает длительность 15 секунд, а ''-vf scale=320:240'' устанавливает ширину и высоту кадра. | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | ==== Багато кадрів ==== | ||
+ | |||
+ | Якщо файли названо: | ||
+ | |||
+ | img001.jpg | ||
+ | img002.jpg | ||
+ | img003.jpg | ||
+ | ... | ||
+ | |||
+ | то поєднати їх в одному відео можна наступною командою: | ||
+ | |||
+ | ffmpeg -r 1/5 -i img%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" out.mp4 | ||
+ | |||
+ | При цьому параметр "''-r 1/5''" позначає, що одне зображення триматиметься протягом 5 секунд відео. Якщо потрібно змінювати швидше, наприклад, 2 картинки на секунду відео, то можна вказати просто "''-r 2''". | ||
Рядок 34: | Рядок 73: | ||
===== Монтаж ===== | ===== Монтаж ===== | ||
+ | |||
+ | ==== OpenShot ==== | ||
+ | |||
+ | [[http://www.openshot.org/ | OpenShot]] -- простой видеоредактор. Хорош для простого монтажа и создания видео из фрагментов видеофайлов, аудиофайлов, картинок. Графический интерфейс написан на языке Python и использует библиотеку ''PyQt''. Версии 1.X были основаны на библиотеке [[https://www.mltframework.org/ | MLT]]. Начиная с версии 2.0 используется своя собственная библиотека [[http://www.openshot.org/libopenshot/ | LibOpenShot]]. | ||
+ | |||
+ | ==== Соединение роликов ==== | ||
+ | |||
+ | [[https://video.stackexchange.com/a/10401 | How to concatenate clips from the same video with ffmpeg]] | ||
+ | |||
+ | === Демультиплескором === | ||
+ | |||
+ | Соединять видеоролики таким способом можно только при условии, что они имеют одинаковый формат: размеры кадра, кодеки, ... и т.д. | ||
+ | |||
+ | Создаём файл, в котором перечислено, какие фрагменты из каких файлов необходимо соединить(([[http://ffmpeg.org/ffmpeg-formats.html#concat-1 | FFmpeg Documentation]], [[https://trac.ffmpeg.org/wiki/Concatenate | FFmpeg wiki: Concatenating media files]], [[https://ffmpeg.org/faq.html#toc-How-can-I-join-video-files_003f | FFmpeg FAQ]])): | ||
+ | |||
+ | <file txt concat.txt> | ||
+ | file 'part1.mkv' | ||
+ | |||
+ | file 'part2.mkv' | ||
+ | duration 00:00:04.080 | ||
+ | inpoint 00:00:02.000 | ||
+ | outpoint 00:00:03.000 | ||
+ | |||
+ | file 'part3.mkv' | ||
+ | duration 300 | ||
+ | inpoint 15 | ||
+ | outpoint 25 | ||
+ | </file> | ||
+ | |||
+ | В этом файле ''part1.mkv'', ''part2.mkv'' и ''part3.mkv'' -- видеоролики, части которых нам надо соединить. После параметра ''duration'' указывается длительность соответствующего ролика. Параметр ''inpoint'' показывает начальный момент времени, с которого нужно считывать фрагмент. Параметр ''outpoint'' показывает конечный момент времени в ролике, до которого его нужно считывать. Все эти параметры относятся к предшествующему параметру ''file''. Соответственно, аналогичные параметры, стоящие после второго упоминания ''file'', будут относиться уже ко второму ролику. | ||
+ | |||
+ | Как видим, время можно указывать либо в формате ''чч:мм:сс.мс'', либо одним числом в секундах. | ||
+ | |||
+ | Другой вариант этой процедуры -- сначала вырезать нужные фрагменты из каждого ролика: | ||
+ | |||
+ | ffmpeg -ss 00:00:02.000 -i video2.mkv -t 1 part2.mkv | ||
+ | ffmpeg -ss 15 -i video3.mkv -t 10 part3.mkv | ||
+ | |||
+ | затем опустить все параметры в файле ''concat.txt'', оставить только имена файлов: | ||
+ | |||
+ | <file txt concat.txt> | ||
+ | file 'part1.mkv' | ||
+ | file 'part2.mkv' | ||
+ | file 'part3.mkv' | ||
+ | </file> | ||
+ | |||
+ | Затем, когда файл тем или иным образом составлен, можно запустить собственно соединение: | ||
+ | |||
+ | ffmpeg -f concat -i concat.txt -codec copy output.mkv | ||
+ | |||
+ | |||
+ | === Фильтром === | ||
+ | |||
+ | Применяя фильтр ''concat'', можно соединять даже видеоролики, бывшие в разных форматах и закодированные разными кодеками. Использовать этот фильтр удобно в комбинации с фильтром ''trim'', который вырезает нужный фрагмент из видеоролика. Важно при этом не забыть об одновременном применении фильтра ''atrim'', который вырезает нужный фрагмент из аудиодорожки. Как правило, вырезанные фрагменты видео и аудио должны совпадать по времени. | ||
+ | |||
+ | ffmpeg -i part1.mkv -i part2.mkv -i part1.mkv \ | ||
+ | -filter_complex \ | ||
+ | "[1:v]trim=start=2:end=3,setpts=PTS-STARTPTS[v1]; \ | ||
+ | [1:a]atrim=start=2:end=3,asetpts=PTS-STARTPTS[a1]; \ | ||
+ | [2:v]trim=15:25,setpts=PTS-STARTPTS[v2]; | ||
+ | [2:a]atrim=15:25,asetpts=PTS-STARTPTS[a2]; \ | ||
+ | [0:v][0:a][v1][a1][v2][a2]concat=n=3:v=1:a=1[out]" \ | ||
+ | -map "[out]" output.mkv | ||
+ | |||
+ | Такая команда передаст первый ролик из файла ''part1.mkv'' целиком в фильтр ''concat'', т.к. мы не применяли к нему обрезку (''trim''). При этом видеодорожка из этого файла обозначается ''[0:v]'', а аудиодорожка -- ''[0:a]''. Из второго входного файла ''part2.mkv'' будет вырезан фрагмент со 2й по 3ю секунды, и затем передан фильтру ''concat'' под обозначением ''[v1]'' для видео и ''[a1]'' для аудио. Из третьего файла ''part1.mkv'' будет вырезан фрагмент с 15й по 25ю секунды и тоже передан фильтру ''concat''. | ||
+ | |||
+ | Если при вырезании фрагмента будет отсутствовать параметр ''start='', это обозначает, что фрагмент должен начинаться с самого начала, а если отсутствует параметр ''end='', это обозначает, что фрагмент должен длиться до конца. | ||
+ | |||
+ | В качестве параметров фильтру ''concat'' передаётся количество входных фрагментов (''n=3''), количество видеодорожек в выходном файле (''v=1'') и количество аудиодорожек в выходном файле (''a=1''). | ||
+ | |||
+ | |||
+ | |||
+ | |||
===== Кодирование видео ===== | ===== Кодирование видео ===== | ||
Рядок 260: | Рядок 372: | ||
mkvmerge -o show_31.mkv 2010-05-23-07\:37\:34.avi -y 0:400 show_31.ogg | mkvmerge -o show_31.mkv 2010-05-23-07\:37\:34.avi -y 0:400 show_31.ogg | ||
+ | |||
+ | Объединение видеодорожки из файла ''Video.mkv'' и аудиодорожки из файла ''Separate_audio.ogg'' без перекодирования: | ||
+ | |||
+ | ffmpeg -i Video.mkv -i Separate_audio.ogg -map 0:v -map 1:a -сodec copy ResultVideo.mkv | ||
+ | |||
+ | То же самое, с перекодированием только аудиодорожки: | ||
+ | |||
+ | ffmpeg -i Video.mkv -i separate_audio.wav -map 0:v -map 1:a -vcodec copy -acodec libvorbis -q 3 ResultVideo.mkv | ||
+ | | ||
+ | Название аудиодорожек(([[https://superuser.com/a/835069 | How do I name an audio track with ffmpeg]])): | ||
+ | ffmpeg -i Video.mkv -i audio1.ogg -i audio2.ogg -map 0:v -map 1:a -map 2:a -codec copy -metadata:s:a:0 title="Звуковая дорожка 1" -metadata:s:a:1 title="Звуковая дорожка 2" ResultVideo.mkv | ||
+ | | ||
+ | | ||
===== Создание DVD ===== | ===== Создание DVD ===== | ||