Використання ffmpeg для кодування високоякісного відео [закрито]


92

У мене є набір відеокадрів, збережених як зображення в каталозі, і я намагаюся закодувати їх у якісне відео, однак кожен параметр і кожен формат, який я намагаюся, дають дуже помітні артефакти.

Основна команда:

ffmpeg -r 25 -i %4d.png myvideo.mpg

і я спробував прапорці minrate та maxrate. Підійде будь-який із форматів {mpg, avi, mov, flv}.

Будь-які пропозиції щодо налаштувань? Остаточний розмір файлу не є проблемою.


7
На моєму Mac, я використовую наступну команду: ffmpeg -r 20 -f image2 -i myImage%04d.png -f mp4 -q:v 0 -vcodec mpeg4 -r 20 myVideo.mp4. Я виявив, що, щоб примусити частоту кадрів, мені довелося вказати її як для вхідних, так і для вихідних файлів. Здається, цей кодек працює для мене - можливо, вам не потрібно буде його вказувати. Я просто хотів включити те, що я зробив, тому що я витратив багато часу на це. Єдиним недоліком є ​​те, що мої вхідні зображення мають високу контрастність (сині та червоні кулі на білому тлі), а пізніше у фільмі кулі починають набувати однаковий темний колір - небажаний ефект контрасту.
jvriesem

Дякую @jvriesem! Для мене це чудово працювало.
Dan Loewenherz

Я пропоную поставити це питання в StackOverflow для мультимедійних систем
Hamed

версія c ++ stackoverflow.com/a/43464269/6180077 перейдіть за цим посиланням для робочої програми реєстратора екрану формату mp4 FFMPEG c ++.
Абдулла Фарвіз

перевірити це посилання , яка демонструє відеофайл записи з допомогою FFMPEG ЛІЕС програмно: stackoverflow.com/a/43464269/6180077
Абдулла Farweez

Відповіді:


64

Кілька речей:

  • Вам потрібно встановити бітрейт відео. Я ніколи не використовував minrate та maxrate, тому я не знаю, як саме вони працюють, але, встановивши бітрейт за допомогою -bперемикача, я можу отримати високоякісне відео. Вам потрібно придумати бітрейт, який пропонує хороший компроміс між стисненням та якістю відео. Можливо, вам доведеться поекспериментувати з цим, оскільки все залежить від розміру кадру, частоти кадрів та обсягу руху у вмісті вашого відео. Майте на увазі, що DVD, як правило, становить приблизно 4-5 Мбіт / с в середньому для 720x480, тому я зазвичай починаю звідти і вирішую, чи потрібно мені більше чи менше, а потім просто експериментую. Наприклад, ви можете додати -b 5000kдо командного рядка, щоб отримати більший або менший бітрейт DVD-відео.

  • Вам потрібно вказати відеокодек. Якщо ви цього не зробите, ffmpeg за замовчуванням встановить MPEG-1, який є досить старим і не забезпечує близького рівня стиснення, як MPEG-4 або H.264. Якщо ваша версія ffmpeg побудована з підтримкою libx264, ви можете вказати -vcodec libx264як частину командного рядка. Інакше -vcodec mpeg4також буде працювати краще, ніж MPEG-1, але не так добре, як x264.

  • Є безліч інших вдосконалених опцій, які допоможуть вам отримати найкращу якість при найнижчих бітрейтах. Подивіться тут кілька прикладів.


6
Постійний бітрейт погано впливає на якість. Використання коефіцієнта постійної швидкості є вищим (це один із x264 режимів роботи). Наприклад: ffmpeg -i … -c:a copy -c:v libx264 -crf 18 -preset veryslow …. 18 - це CRF з дуже незначними втратами якості, але бітрейт буде, ймовірно, низьким. І ви можете спробувати більші значення CRF, якщо вам потрібен менший розмір файлу. І як бачите, це досить просто.
Відображуване ім’я

зауважте, що -b має бути перед відео, але після введення -i
mateuszb

45

Вам потрібно вказати параметр -vb, щоб збільшити бітрейт відео, інакше ви отримаєте за замовчуванням, що створює менші відео, але з більшою кількістю артефактів.

Спробуйте щось подібне:

ffmpeg -r 25 -i %4d.png -vb 20M myvideo.mpg


1
це прекрасна робота для мене, дякую;)
thiago.adriano26

15

Перш ніж створювати відео, переконайтеся, що файли PNG повністю непрозорі

наприклад, за допомогою imagemagick, надайте їм чорний фон:

convert 0.png -background black -flatten +matte 0_opaque.png

З моїх тестів, жодного бітрейту або кодека недостатньо, щоб відео виглядало добре, якщо ви годуєте PNG-файли ffmpeg прозоро


Це вирішило проблему для мене.
Matěj Kripner

0

Якщо ви не зробите якусь пост-обробку, відео ніколи не буде кращим за оригінальні кадри. Також як і книжка, якщо у вас великий «стрибок» між ключовими кадрами, це буде виглядати смішно. Як правило, між ключовими кадрами потрібна достатня кількість «підлітків», щоб отримати плавну анімацію. HTH


Зображення спочатку складаються з відеопослідовності. Вони щойно трохи обрізали, масштабували та не робили нічого із imagemagick. Ефекти - це, безумовно, компресійні артефакти. Я тепер бачив цей пост, який , здається, є відповідь: stackoverflow.com/questions/3158235 / ...
CakeMaster

@CakeMaster Я не згадував стиснення з втратами, оскільки у вашому прикладі є зображення ".png". .png можуть мати збитки, але я вважаю, що вони, як правило, не є. .jpg майже завжди мають збитки, тому артефакти при їх використанні. Якщо ви можете, ви можете зберегти .png із стисненням без втрат.
JustBoo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.