Як збільшити FPS відео і правильно швидко використовувати ffmpeg?


1

У мене є відео з 5 кадрів в секунду, тривалістю 120 годин - 2,5 годин, яке я хочу пришвидшити в 6 разів, зробивши його fps = 30

Я зробив це за допомогою цієї команди, яку я знайшов десь на цьому веб-сайті

ffmpeg -i "...local_Record.mkv"  -filter:v "fps=30, setpts=PTS/6" "...output1.mkv"

Вихід був млявим, його грають 3-5 секунд, а потім замерзають. Якщо я стрибаю назад або вперед, він розморожує ще 3-5 секунд, а потім знову застигає. Завантаживши його на youtube, я виявив, що він не відстає, проте youtube показує його тривалість як оригінальний 2,5 години. Він також показує, що його відсоток обробки становить 95% протягом 12+ годин (це означає, що це відео на 100% помилок і не буде коли-небудь оброблятися, оскільки його 90 Мб і 20 хв. довго за 10 хвилин)

Потім я спробував перекодувати відео, яке я отримав за допомогою цієї команди

ffmpeg -i "...mkv" -c:v libx264 -crf 18 -preset veryfast -max_muxing_queue_size 1024 output.mp4

Що дало мені 133 Мб результат, який також показується на YouTube як 2,5 години довгий і ніколи не закінчує обробку (можна відтворити, але її невидимість, у відео менеджері обидва відео кажуть, що її 95% оброблено)

Як це зробити правильно, щоб відео не відставало і youtube міг правильно набрати його довжину?

редагувати - Я знайшов, в чому проблема - в контейнері був якийсь звук, хоча тут взагалі не повинно було бути жодного звуку (я записав його з неприйнятим звуком). Тож після того, як я видалив цей звук з mmg, mpc відкрив його правильно, показавши, що його 26 хвилин, і youtube успішно обробив його за пару хвилин

Відповіді:


2

Замовлення має бути скасовано,

ffmpeg -i in -filter:v "setpts=PTS/6,fps=30" out

З першого фільтра в секунду, ffmpeg буде вставляти 25 повторюваних кадрів щосекунди, щоб перетворити 5 кадрів в секунду до 30, а потім прискорити його в 6 разів. При правильному порядку ffmpeg стискає потік, щоб він мав 30 вихідних кадрів в секунду, і тоді весь фільтр fps закінчується виконувати * - це зміни метаданих потоку на 30 кадрів в секунду.

* припускаючи джерело постійної частоти кадрів.

Також зауважте, що YT повторно кодує всі відео, тому ваш кодований keyint не переноситься YT.

Якщо у вас є звук, вам також потрібно буде до цього швидкості,

ffmpeg -i in -vf "setpts=PTS/6,fps=30" -af "atempo=6" out

Зауважте, що atempo до недавнього часу було обмеженням 2, тому для старих версій ffmpeg ви б використовували

ffmpeg -i in -vf "setpts=PTS/6,fps=30" -af "atempo=2,atempo=2,atempo=1.5" out

На жаль, мені довелося видалити 6 Гб вихідних відео, тому я не можу перевірити вашу команду на даний момент, але буду робити це для майбутніх спроб. Я оновив своє запитання, намагаючись виправити це вже пришвидшене відео. Я знайшов якусь команду перекодувати відео в надії виправити цю нескінченну помилку обробки YouTube, яку я помітив, але вона не працювала. Чи знаєте ви спосіб "виправити" це відео?
jstq

ніколи не знаю, у чому була проблема - в контейнері був якийсь звук, хоча взагалі не повинно було бути жодного звуку (я записав його з неприйнятим звуком). Тож після того, як я видалив цей звук з mmg, mpc зрозумів, що його 26 хвилин, а youtube успішно обробив його за пару хвилин
jstq

виконуючи це так (спочатку встановлюється), я отримує це попередження після закінчення кодування: 100000 буферів у черзі в out_0_0, щось може бути не так. і його там годинами завантажують усі мої процесорні ядра на 100% нічого не роблячи. Якщо я
скасую

Поділитися повним журналом.
Gyan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.