LINUX.ORG.RU

Ролик 30 фпс

 


2

1

Друзья, ай нид хелп. Что происходит? Мне нужен ролик 30 фпс из коллекции фреймов, пробую два варианта:

$ ffmpeg -i %04d.png -c:v libx264 -preset slow -crf 18 -c:a aac -ar 48000 -ac 2 -profile:v high -level 4.0 -bf 2 -coder 1 -pix_fmt yuv420p -b:v 10M -r 30 -b:a 320k output.mp4

$ ffmpeg -i %04d.png -c:v libx264 -preset slow -crf 18 -c:a aac -ar 48000 -ac 2 -profile:v high -level 4.0 -bf 2 -coder 1 -pix_fmt yuv420p -b:v 10M -framerate 30 -b:a 320k output.mp4

т.е. в первом варинте применил опию -r, а во втором -framerate. Во втором случае получаю 25 (или 24, не помню) фпс, во втором 30 фпс, но вставляются автоматом доп фреймы, которые делают ролик по продолжительности равным аналогичному видосу на 25 фпс. Опции для ффмпг брал с сети, рекомендуемые для ютуба. Мне нужен честные 30 фпс лишь из тех фреймов, который я указал (-i %04d.png). Что я неправильно передал в консоли?

★★

Может нужно передать ещё какую-то инфу в метаданные про фпс? Как?

pavlick ★★
() автор топика

Всё, въехал. Надо передать ещё одну -r 30 опцию пред входными данными

$ ffmpeg -r 30 -i %04d.png -c:v libx264 -preset slow -crf 18 -c:a aac -ar 48000 -ac 2 -profile:v high -level 4.0 -bf 2 -coder 1 -pix_fmt yuv420p -b:v 10M -r 30 -b:a 320k output.mp4

Спасибо, вы лучшие ))

pavlick ★★
() автор топика

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

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

-framerate опция у меня вообще ни на что не влияет. Дефолт для неизвестной fps у ffmpeg’а - 25p. -r после -i не меняет длительность, а появляются дропы/дубли. -r перед -i задает длительность (длительность зависит от fps).

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

-crf 18
-b:v 10M

Две конфликтующие настройки. -b:v 10M нужно убрать.

-c:a aac -b:a 320k

-c:a aac не рекомендуется. Лучше использовать -c:a libfdk_aac -vbr 5
Если уж используешь ffmpeg'овский aac, укажи режим качества -q:a 2.3

-bf 2

Не нужно. Параметр задается в -preset

-r 30

После -i параметр лишний. Он ничего не делает, пока равен -r перед -i. А если не равен, будут дропы/дубли.

output.mp4

mp4 поганый контейнер. Для ютуба лучше mkv. А звук -c:a libopus -b:a 256k. И неплохо бы дописать -async 1. Но в твоем случае звук вообще не нужен, т.к. картинки его не содержат.

anonymous
()

Ребят, а как смеджить кусок ролика с голыми фреймами? Т.е. я хочу добавлять фреймы, озвучивать, добавлять следующии, ну там просто нужно копировать некоторые кадры (имитировать речь). Попытался так:

ffmpeg -i ../inter.mp4 -r 30 -i %04d.png ... output.mp4

но в оutput.mp4 попал лишь ../inter.mp4

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

Интересно, что если для -c:a aac указать

-q:a 2.3 -b:a 320K
(порядок не имеет значение), то ffmpeg aac работает в каком-то новом режиме, некий гибрид между -q и -bitrate.

Для сложного материала (когда музыка сложная, а битрейта мало) он очень похож на режим -q (в том числе по характеру искажений).

Для простого материала (когда звук простой, типа речь, а битрейта указано много) он наоборот становится похож на режим -bitrate

Скажем так, он стремится следовать битрейту, но когда его дефицит, начинает использовать алгоритмы режима -q.

Хочу напомнить, что в режиме -q не применяется обрезка частот, а на низких битрейтах она нужна. Так что для качества уровня ~128k нужно указать -q:a 1.6 -cutoff 16000 (это ощутимо лучше режима -b:a 128k).

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

а чем поганый?

Тем, что если он повредится, то в 99% файл придется выбрасывать. У него очень мало служебной информации, а важная информация, без которой не начнется декодирование, чаще всего расположена в хвосте файла. В случае ютуба это чревато тем, что он начнет обрабатывать только после полной загрузки файла. Поэтому они рекомендуют использовать режим «для стриминга», тогда муксер указывает информацию в начале файла (ffmpeg по умолчанию в конце).

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

Еще в mp4 очень криво указывается fps. Вместо постоянной частоты кадров в заголовке может быть указана переменная, с какими-то левыми min framerate и max framerate. На это можно забить, но я из-за этого стокнулся с проблемой в Dailymotion. Основываясь на этой кривой информации о fps, он переконвертировал с неправильной частотой (появились дропы/дубли кадров).

Так это ютубовские рекомендации и по контейнеру, и по кодекам

На заборе тоже написано. У них обычный ffmpeg, который ест всё подряд. Проверено. mkv менее проблемный, а opus гораздо более качественный (особенно в сравнении с ffmpeg -c:a aac -b:a).

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

При указании нескольких -i, ffmpeg их не склеивает, а использует первые дорожки из каждого файла и добавляет в один файл. Это аналог -map 0:0 -map 1:0. Чтобы использовал все дорожки, а не только первые нужно указать -map 0 -map 1
Синтаксис файл:дорожка, нумерация начинается с нуля.

Клеить файлы можно через формат ts

ffmpeg -i concat:"1File.ts|2File.ts|3File.ts"
Или обычным cat'ом в консоли. Или в MKVToolnix.

Так варварски можно делать только в формате ts и только, если параметры кодирования видеодорожки (и аудио тоже) совпадают!

То есть, сначала закодируй изображения в ts, а потом склеивай.

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