LINUX.ORG.RU

запись видеопотока в файл через ffmpeg со сбросом информации о времени потока

 ,


1

4

Здравствуйте! Не знаю, как правильно сформулировать вопрос, слабо разбираюсь в теме кодирования видео. Поэтому спрошу, как могу.

Есть видеопоток, я записываю его в файл:

$ ffmpeg -y -i 'http://$IP:$PORT' $FILE
Файл пишется, но при воспроизведении файла в VLC-плеере отсчет времени ведется не от нуля, а с момента начала записи потока. Но это полбеды. Главная же проблема в том, что прокрутка видео по времени не работает, невозможно ткнуть мышкой в прогрессбар (или как он правильно называется) и перейти в произвольное место видео. Сам же прогрессбар сразу показыает конечное положение. Текущий момент воспроизведения видео не отображается, только время начала записи.

Если писать поток через VLC, то при последующем воспроизведении отображается момент воспроизведения относительно начала записи, прогрессбар движется, и позволяет перемещаться по видео во времени кликом мыши.

Насколько я понимаю, в видео сохраняется информация о времени исходного потока, и это каким-то образом мешает адекватному отображению прогрессбара. Но на этом мысли останавливаются. Объясните, пожалуйста, в каком направлении копать.

Есть подозрение, что ты пишешь видеопоток «как есть», т.е. без всякого контейнера. Нет контейнера -> видеопроигрывателю неоткуда взять информацию о длительности видеозаписи и т.д.

tiandrey ★★★★★
()

Удивительно, как до сих пор находятся люди, использующие VLC. Он наносит куда больший урон имиджу СПО, нежели тот же wine. Mpv должен создавать индекс при его отсутствии, так что попробуй выкинуть VLC, для начала. Но сырые данные это не очень хорошо, конечно.

wakuwaku ★★★★
()
Ответ на: комментарий от tiandrey

Ну каждый раз, когда я его устанавливаю себе, с ним что-то не так. Уже лет 10 всё одно. То с ускорением проблемы, то арктефакты в самых различных случаях и на разных форматах, то скроллинг не работает, то субтитры, то внешние дорожки, то звук неправильно работает после скролинга. Это никогда не кончится. Не говоря о том, что по возможностям и дружественности к пользователю он тоже сливает mpv,

wakuwaku ★★★★
()
Ответ на: комментарий от wakuwaku

Т.е. на основании того, что у тебя всё плохо, ты делаешь вывод, что у всех всё плохо и это «наносит большой урон имиджу СПО»?

У меня, например, на рабочем ноуте (mint) mpv тормозит заметно, а vlc нормально работает. На домашних же mpv всё делает так, как нужно.

tiandrey ★★★★★
()
Ответ на: комментарий от tiandrey

Рекомендую правильно настроить ускорение. Вовсе не только у меня. И я делаю вывод, что кто-то может не замечать, КАК всё плохо. Это вовсе не значит, что софт нормальный.

Если смотреть только кино в варианте «1 файл сжатый популярным кодеком со скучными настройками» в формате «включил и забыл», vlc вполне справляется. При более глубоком использование его возможностей он всегда начинает косячить.

Ах да, ещё гуй глючный припоминается мне. И это всё у плеера, над которым огромная толпа обезьян уже лет 20 работает. Такое вот СПО.

wakuwaku ★★★★
()
Последнее исправление: wakuwaku (всего исправлений: 1)
Ответ на: комментарий от tiandrey

Решил проблему.
Контейнер я использовал, да не тот. Проблема проявляется, например, на mp4, asf. Нормально работает, например, flv. Годный вариант выглядит так:

$ ffmpeg -y -i 'http://$IP' -c copy ./cam02.flv
Спасибо!

alxdon-rs
() автор топика
Ответ на: комментарий от anonymous

Ваше мнение очень важно для нас, оставайтесь на связи.

tiandrey ★★★★★
()
Ответ на: комментарий от ValdikSS

Спасибо, это помогло, но привело к другой проблеме. Кроме прочего я использую ключ -c copy, я его не указал в команде, т.к. его наличие не влияло на проблему. Теперь же при одновременном использовании -c copy -filter:v "setpts=PTS-STARTPTS" я получаю сообщение

Filtergraph 'setpts=PTS-STARTPTS' was defined for video output stream 0:0 but codec copy was selected.
Filtering and streamcopy cannot be used together.
Можно ли как-то и перекодирование потока исключить и нужное представление времени указать?

alxdon-rs
() автор топика
Ответ на: комментарий от ValdikSS

Да не поможет, если в потоке нет меток, а контейнер выбран с инфой в хвосте, то перемотка будет поломана.

anonymous
()
Ответ на: комментарий от anonymous

Для меня не очевидно. Например, я использовал медиаконтейнер flv одноверменно с -c copy, при этом перемотка в видео работает правильно.

alxdon-rs
() автор топика
Ответ на: комментарий от alxdon-rs

Фильтр применяется к кодеку, не к контейнеру и с copy не имеет смысла

flv контейнер для потокового видео и ему практически по барабану, что вы в него пихаете, он сам в заголовке сформирует, что и как в него пихали. mp4 тоже контейнер, но не для потока и таких штук вытворять не умеет, пихали внутрь сырой поток и не позаботились сформировать данные о потоке, ну чтож, печально, следовало кодировать на ходу, чтоб сформировать данные. если уж использовать mp4 для стрима, то надо в начале подмешать ему заголовок, хоть и по дефолту он в конце, из начала он тоже читается, заголовок для настоящего стрима кстати будет липовый, такую штуку используют для трансляции на девайсы, если последние не умеет подходящие контейнеры

ну и на последок http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.