#ffmpeg
#ffmpeg
Вопрос:
Я хочу взять входное видео и горизонтально объединить его с самим собой в обратном порядке (воспроизвести его вперед, а затем назад), используя filter_complex . До сих пор я разделил его на 3 команды: реверсирование, объединение и потоковое воспроизведение, но я хочу сделать это одной командой. Следующее передает видео дважды, но я не знаю, как отменить второе видео. Как можно отменить вторую копию видео, не изменяя первую?
ffmpeg -re -stream_loop -1 -i self_recording.mkv -filter_complex
"[0:v]split=2[r1][r2];[0:v][r1][0:v][r2] concat=n=4:v=1[v]"
-map "[v]" -f v4l2 /dev/video2
Комментарии:
1. Вам нужно будет закодировать видео один раз, когда прямое воспроизведение соединяется с обратным воспроизведением. Затем stream_loop этот результирующий файл.
2. Есть ли способ сделать это в ffmpeg, не дожидаясь, пока видео будет полностью перевернуто и объединено, прежде чем начнется потоковая передача? Например. если требуется потоковое видео продолжительностью 2 минуты, может ли поток начаться немедленно без создания временных файлов? Мой неэффективный способ потоковой передачи вперед и назад можно найти здесь в строках 112, 116 и, наконец, 130, и я хочу заменить его чем-то более эффективным. github.com/intermezzio/webcam-video-effects/blob /…
3. Нет. В этом случае ввод должен быть готов до запуска команды потоковой передачи. Но файл можно подготовить за один шаг с помощью водяных знаков.
4. Какой будет команда для подготовки ввода в одной команде с помощью водяных знаков?
Ответ №1:
Подготовка к видео:
ffmpeg -i "$video" -i "$watermark"
-filter_complex "[0]split=2[fr][rv];[rv]reverse[rv];
[fr][rv]concat=n=2:v=1:a=0,$memestr,$rotatestr[jt];
[1][jt]scale2ref[i][m];[m][i]overlay=format=auto,format=yuv420p[v]"
-map "[v]" -g 30 stream.mp4
Поток:
ffmpeg -stream_loop -1 -re -i "stream.mp4" -c copy -f v4l2 "/dev/video$output"