Как изменить частоту кадров видео без повторного кодирования

Вы можете запустить скрипт, используя start-stop-daemon. start-stop-daemon может разветвлять поток, выполняемый как разные uid и gid, следовательно, решая вашу проблему.

Что вам нужно сделать, так это написать скрипт задания, размещенный в системе PATH, например /usr/bin, и создайте дополнительный сценарий демона в /etc/pm/sleep.d. Соответствующее действие pm-suspend, например resume или thaw, сценарий демона выполняет скрипт задания через

start-stop-daemon --start $ARGs --name nm-rtvt--exec /usr/bin/job_script

, где ARGs может быть --chuid 1001:1001 или просто --user your_username.

И для обеспечения целостности вы можете также попытаться, чтобы сценарий демона остановил дамона с именем nm-rtvt перед тем, как приостановить с помощью

start-stop-daemon --stop <...>

соответствующие pm-suspend действия, такие как suspend или hibernate.

Подробнее см. man start-stop-daemon. И есть много других примеров из /etc/init.d сценариев демона.

1
задан 4 November 2013 в 04:42

3 ответа

Изменение частоты кадров в заголовке видео (контейнера) не влияет на сам видеопоток (или аудиопоток). Reencoding - единственный вариант.

Видеопотоки имеют временные метки, а в большинстве видеофрагментов взаимозависимы друг от друга из-за межкадрового сжатия. Некоторые игроки могут ускорить и замедлить видео, но не встроенными командами или чем-то еще. Ни один игрок не может изменить частоту кадров на лету, когда контейнерная команда попросит об этом. Видеофайл окажется вне спецификации (т. Е. Не соответствует стандартам), и 99,9% игроков откажутся от этого. Совершенно невозможно сделать то, что вы хотите, без перекодировки. Конечно, вы можете подождать с перекодировкой до последнего шага редактирования.

6
ответ дан 24 May 2018 в 15:44
  • 1
    Спасибо, Том! Глупый вопрос - почему? У каждого кадра есть временная метка, которая заставляет игрока использовать определенную скорость воспроизведения? Я хочу, чтобы те же самые кадры, я просто хочу, чтобы они воспроизводились по-другому. – EboMike 4 November 2013 в 23:14
  • 2
    Привет Майк, нет вашего вопроса не глупо, честно, как вы думаете, достаточно умный. Мне нравится ваш образ мыслей. Я добавил больше информации к моему ответу, потому что слишком долго было помещать это в комментарий. – thom 5 November 2013 в 00:07
  • 3
    Благодаря! Это довольно информативно. Что же касается перекодировки - что лучший способ сделать это с чем-то вроде avconv? Я использовал командную строку выше, но это привело к ужасному качеству - я мог почти видеть каждый макроблок. – EboMike 5 November 2013 в 04:17
  • 4
    Думаю, отметки времени в видеопотоках хранятся в контейнере, а не в сыром h.264 битовом потоке. Пока вы просто хотите изменить время, но не порядок, какой кадр отображается, когда вам не нужно перекодировать, просто remux. (И если вы делаете xcode, с более быстрым аппаратным обеспечением вы используете -preset медленнее или очень мало, чтобы получить больше качества в бит битрейта, а не просто бросать больше бит в проблему. И использовать -crf 18 или что-то, а не ABR) – Peter Cordes 27 December 2014 в 10:31
  • 5
    Я не могу понять, как получить ffmpeg для вывода другой частоты кадров. Похоже, mkvmerge / mp4box необходимы, если вы не можете получить ffmpeg для вывода исходного потока данных .264, а затем использовать параметр fps для демкемера h.264 (который -h полные документы, которые он имеет, поскольку бит-поток не имеет времени info, просто заказываю.) – Peter Cordes 27 December 2014 в 10:40

В том случае, если ваше основное намерение состоит в том, чтобы воспроизвести его в замедленном режиме, а не для того, чтобы сохранить файл как MP4, вы можете использовать инструмент GUI MQVmerge, чтобы перевести его в контейнер Matroska, который может легко изменить частоту кадров.

Сначала вы устанавливаете пакет

sudo apt-get install mkvtoolnix-gui

Затем вы запускаете MKVmerge GUI. Вы столкнетесь с таким окном

Просто нажмите кнопку добавления и выберите свой файл или просто перетащите файл в папку «Входные файлы». На этом этапе вы сможете выбрать видеопоток в своем видео. Вы также можете удалить другие потоки, так как они будут как-то мешать.

После того, как вы его выбрали, вы увидите, что нижние вкладки становятся активными:

mkvmerge gui 1 [ ! d4]

Изменить на «Форматировать конкретные действия»

Вы можете увидеть, что есть поле «FPS», где вы можете ввести значение кадров в секунду. Похоже, вы планировали замедлить работу в четыре раза, поэтому ваша цель составит около 7 кадров в секунду. Вы также можете использовать опцию «Stretch by».

После этого вы можете просто изменить имя выходного файла (если хотите) и нажать «Start muxing».

Программа и вы должны иметь свой файл.

3
ответ дан 24 May 2018 в 15:44

Я также хотел без потерь замедлить мои 120 фильмов FPS до 30 FPS. Я сделал скрипт, который делает это, изменяя темп звука и изменяя FPS непосредственно в контейнере MP4. Необходимы следующие инструменты:

avconv для преобразования аудиопотоков sondstretch для замедления темпа звука gpac, чтобы MP4Box изменил FPS

Сценарий, используемый для преобразования, приведен здесь:

Этот скрипт создает копию MP4 с постпостером _slow.

1
ответ дан 24 May 2018 в 15:44

Другие вопросы по тегам:

Похожие вопросы: