Не работает -itsoffset в ffmpeg и avconv

Автор agentgoblin, 29 июля 2012, 12:51:01

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

agentgoblin

На LORе не отвечают, репостну сюда.

Стоит задача: организовать потоковое вещание рабочего стола со звуком от микрофона. Причём нельзя делать так, чтобы отдельно записать видео, отдельно звук и потом всё это смешать с нужными коррекциями. Вещать надо в режиме реального времени.

Проблема: звук опережает видео. Задержка достаточно стабильная - около 3,5 секунд. Читал мануалы и Гугл, пытался поправить с помощью -itsoffset. Не работает, такое впечатление, что параметр -itsoffset игнорируется. Для экспериментов начал всё записывать в файл, а не rtmp-поток - ничего не меняется.

Делаю захват скриптом так (в оригинале, без коррекции):

#!/bin/bash
INRES="hd720"
OUTRES="wvga"
FPS="24"
QUAL="medium"
ffmpeg -f x11grab -s "$INRES" -r "$FPS" -i :0.0 -f alsa -ac 2 -i hw:0 -vol 4096 -vcodec libx264 -vpre "$QUAL" -s "$OUTRES" -acodec libmp3lame -ab 96k -ar 22050 -threads 0 -f flv mystream.flv


Пробовал по разным мануалам делать так:

ffmpeg -f x11grab -s "$INRES" -r "$FPS" -i :0.0 -f alsa -ac 2 -itsoffset 3.5 -i hw:0 -vol 4096 -vcodec libx264 -vpre "$QUAL" -s "$OUTRES" -acodec libmp3lame -ab 96k -ar 22050 -threads 0 -f flv mystream.flv

или

ffmpeg -f x11grab -s "$INRES" -r "$FPS" -i :0.0 -itsoffset 3.5 -f alsa -ac 2 -i hw:0 -vol 4096 -vcodec libx264 -vpre "$QUAL" -s "$OUTRES" -acodec libmp3lame -ab 96k -ar 22050 -threads 0 -f flv mystream.flv


Задержка сохраняется. Пробовал синтаксис 00:00:03.5 для itsoffset, пробовал делать задержку для видео (соответственно вставляя itsoffset либо перед -f x11grab, либо перед -i :0.0), пробовал ставить itsoffset и перед видео, и перед аудио с разными значениями, пробовал выставлять задержку в 20 секунд (думал, что не замечаю уже задержек в 3.5). Ничего не помогает, такое впечатление, что опция itsoffset игнорируется.

На форуме Убунту прочитал, что вроде как кто-то решил подобную проблему обновлением ffmpeg. Обновился. При обновлении ffmpeg мне написали, что THIS PROGRAM IS DEPRECATED и посоветовали использовать avconv. ffmpeg, кстати, удалился. Пробовал avconv - аналогичная ситуация. itsoffset не работает. Снова поставил ffmpeg - он поставился свежее, чем есть, но проблема не исчезла.

Строка захвата для avconv:

avconv -f x11grab -s "$INRES" -r "$FPS" -i :0.0 -f alsa -ac 2 -i hw:0 -vol 4096 -vcodec libx264 -s "$OUTRES" -acodec libmp3lame -ab 96k -ar 22050 -threads 0 -f flv mystream.flv


C itsoffset извращался аналогично.

Пробовал ещё опцию async - с ней звук вообще не захватывается. Никак и ни в каком виде. При попытке поставить isync - теряю захват чего бы то ни было - нет ни видео, ни звука.

Система - Debian 6, подключены репы backports и debian-multimedia. Обновлён из backports. ffmpeg ставил из реп, ничего самосборного нет.
$ uname -sro
Linux 3.2.0-0.bpo.2-amd64 GNU/Linux


Версии ffmpeg и avconv (меня, кстати, они смущают - такое впечатление, что вместо ffmpeg без моего ведома работает avconv):
~$ ffmpeg
ffmpeg version 0.8.3-6:0.8.3-1~bpo60+1, Copyright (c) 2000-2012 the Libav developers
  built on Jun 16 2012 10:32:51 with gcc 4.4.5

$ avconv
avconv version 0.8.3-6:0.8.3-1~bpo60+1, Copyright (c) 2000-2012 the Libav developers
  built on Jun 16 2012 10:32:51 with gcc 4.4.5


Проверил, вроде как ffmpeg идёт отдельной сущностью:
$ which ffmpeg
/usr/bin/ffmpeg
$ which avconv
/usr/bin/avconv
~$ ls -l /usr/bin/ff*
-rwxr-xr-x 1 root root 108112 Июн 16 18:36 /usr/bin/ffmpeg
lrwxrwxrwx 1 root root      6 Июл 22 20:33 /usr/bin/ffplay -> avplay
lrwxrwxrwx 1 root root      7 Июл 22 20:33 /usr/bin/ffprobe -> avprobe
lrwxrwxrwx 1 root root      8 Июл 22 20:33 /usr/bin/ffserver -> avserver
$ ls -l /usr/bin/av*
-rwxr-xr-x 1 root root 111344 Июн 16 18:36 /usr/bin/avconv
-rwxr-xr-x 1 root root  77904 Июн 16 18:36 /usr/bin/avplay
-rwxr-xr-x 1 root root  42096 Июн 16 18:36 /usr/bin/avprobe
-rwxr-xr-x 1 root root  99864 Июн 16 18:36 /usr/bin/avserver


qupl

agentgoblin, про ffmpeg и avconv было, если что-то объяснит.