Я пытаюсь записать аудио и видео с Kinect, используя avconv, но у меня, похоже, возникают проблемы с выбором правильных опций.
avconv -f video4linux2 -video_size 640x480 -c:v h264 -c:a ac3 -i /dev/video1 test.mp4
приводит к:
avconv: /build/buildd/libav-extra-0.8.3ubuntu0.12.04.1/libav/libavutil/mathematics.c:79: av_rescale_rnd: Assertion `c > 0' failed.
Aborted (core dumped)
Сыр совершенно счастлив, записывая аудио и видео с Kinect, так что это не проблема установки. Для дополнительного удовольствия мне также нужно показывать видео одновременно.
Я не смог заставить работать описанный выше метод, но мне удалось заставить работать стример.
streamer -q -c /dev/video0 -f rgb24 -r 3 -t 00:30:00 -o ~/outfile.avi
Я также играю с Kinect. У меня еще нет звука.
Правильное использование avconv:
avconv [global options] [input options] -i input [output options] output
Вы ставите все параметры перед вводом, поэтому avconv рассматривает их как параметры ввода. Это было бы лучше:
avconv -f video4linux2 -i /dev/video1 -s 640x480 -c:v libx264 -c:a ac3 test.mp4
Настройки по умолчанию могут быть не идеальными для вас; для libx264 вы можете установить значение -crf (от 0 до 51, 23 по умолчанию, 18-28 - нормальный диапазон для использования, ниже = лучшее качество, но файл большего размера) и -preset (я обычно использую очень быстро) , Для получения дополнительной информации смотрите здесь . Обычно я бы рекомендовал использовать кодирование VBR для звука, но я не знаю, что такое кодирование AC3, поэтому вам, возможно, придется использовать фиксированный битрейт (-b: для стереозвука, вероятно, подойдет 192k).
Кроме того, изменение размера видео может не потребоваться, используйте только -s 640x480
, если вам нужно уменьшить больший вход до этого размера.
Что касается просмотра во время записи, я могу придумать два решения. Во-первых, просто откройте файл, который вы создаете, с помощью предпочитаемого программного обеспечения видеоплеера. Это будет означать небольшую задержку в просмотре.
Второе решение состоит в том, чтобы отправить второй вывод из avconv в stdout, а затем использовать перенаправление ввода / вывода для ввода информации в видеопроигрыватель. Это будет быстрее, но это займет примерно вдвое большую вычислительную мощность, поскольку в существующем состоянии avconv может сделать это только путем повторного кодирования (это может измениться в будущем).
avconv -f video4linux2 -i /dev/video1 -s 640x480 -c:v libx264 -c:a ac3 test.mp4 \
-s 640x480 -c:v libx264 -c:a ac3 -f mp4 - | vlc -
Я использую VLC в качестве примера, но все известные мне видеоплееры linux могут это делать. Так как avconv обычно определяет, какой формат контейнера использовать из расширения файла, но -
(stdout) не имеет его, вы должны объявить формат контейнера с помощью -f mp4
.