Кращі прапори ffmpeg для забезпечення портативності процесу суміші та перекодування


1

Я тех, хто підтримує програмне забезпечення, яке використовує ffmpegдля автоматичного змішування та перекодування двох вхідних потоків в єдиний вихід із відео- та аудіодоріжкою. В даний час я стикаюся з деякими проблемами з портативністю і хотів би вдосконалити своє використання, ffmpegщоб гарантувати, що моя програма буде максимально портативною:

  • Працює майже на всіх ОС та дистрибутивах
  • Працюватиме зі старими випусками ffmpeg (дебійський стиск все ще використовує ffmpeg 0.5.10)

Моє перше джерело - це файл FLV або mp4. Він містить два потоки: аудіо та відео. Мене не хвилює відео, воно не входить у підсумковий файл.

Друге джерело - це список зображень PNG або JPG. Вони будуть використані для створення відеопотоку за допомогою image2.

Вихід повинен бути файлом з двох потоків: аудіо та відео. У мене немає жодних вимог щодо контейнера, аудіокодека та відеокодека. Вони повинні бути легко доступними на будь-якій ОС / пристрої. Я хочу максимально зберегти якість звуку. Відеопотік - це лише набір статичних слайдів. Було б чудово мінімізувати розмір вихідного файлу.

Відповідно до цього опису, які прапорці / контейнер / кодеки ви б використовували?


Опис поточного процесу наступний:

  1. Витягніть аудіозапис з першого джерела

    ffmpeg -v error -i source_1_path -vn -acodec libvorbis audio_track.ogg
    
  2. Створіть підсумковий файл

    ffmpeg -v error -f image2 -r 1 -i frame_pattern.jpg -i audio_track.ogg output.avi
    

Я думав, що ffmpeg автоматично використовувати найбільш підходящі аудіо / відео кодеки та налаштування. На жаль , це не буде працювати на деяких дистрибутивів Linux ( [ac3 @ 0x1e60380] invalid bit rateз 0.8.6-6:0.8.6-0ubuntu0.12.10.1, наприклад).

Очевидно, було б краще зробити це за один прохід, а не створювати тимчасову звукову доріжку.

Відповіді:


2

ffmpegверсії та упаковки ffmpegсамостійно

Якщо хтось використовує ffmpeg0,5.10, то ви насправді не винні, якщо щось не працює. Причина номер один із проблемами з ffmpegкомандами (принаймні з мого досвіду) - застаріла версія. Від 0,5 до останніх 1,2 є буквально тисячі виправлених помилок та сотні нових функцій. Найбільш помітно, що вони змінили (і видалили) кілька варіантів командного рядка, які порушують деякі робочі процеси.

Зауважте, що Ubuntu, через деякі обставини , насправді не використовує ffmpegпроект FFmpeg, але насправді використовує Libav's avconv. У новіших версіях Ubuntu, тобто. Старі версії Ubuntu все ще постачали двійковий під назвою, ffmpegщо прийшов з Лібава, який зламаний і застарілий, але люди все ще думають, що він походить від FFmpeg. Підсумок: Ви не можете і не повинні довіряти своєму користувачеві, щоб він працював ffmpegу своїй системі.

Є багато проектів, які включають частину інструментів FFmpeg , і ви можете включити статичну збірку зі своїм програмним забезпеченням, якщо це не є юридичною проблемою (IANAL, тому, будь ласка, перевірте). Єдиний недолік, який я бачу тут, - це те, що старші ядра можуть не виконувати всі статичні збірки.


Зважаючи на все, ось що повинно працювати скрізь, за припущенням, яке ffmpegбуло складено libx264та libmp3lameувімкнено. Оригінальна команда, яку ви мали, не працюватиме надійно, оскільки аудіо Vorbis проблематично в AVI , а кодер AC3, який автоматично вибрано для AVI, може заглушитися на деяких входах. Крім того, ви б перекодували аудіо з Vorbis в AC3, що погіршує якість.

Витягніть аудіо в MP3

Швидше експорт до MP3-аудіо, наприклад, з 320 КБ / с CBR або VBR 4 ( -Vеквівалент LAME ). Остання може не працювати на старих версіях через :aсуфікс.

ffmpeg -v error -i source_1_path -vn -acodec libmp3lame -ab 320k audio_track.mp3
ffmpeg -v error -i source_1_path -vn -acodec libmp3lame -q:a 4 audio_track.mp3

Поєднайте з відео H.264

Для поєднання ми використовуватимемо відео x264 (кодер H.264):

ffmpeg -v error -f image2 -r 1 -i frame_pattern.jpg -i audio_track.mp3 \
-acodec copy -vcodec libx264 output.mp4

Тут ви просто скопіюєте аудіопотік замість того, щоб ffmpegповторно кодувати його. Це допоможе вам зберегти первісну якість.

Що стосується відео, зауважте, що не всі пристрої можуть грати H.264 поза коробкою. Деякі можуть грати лише в H.264 з базовим профілем, який ви встановили -profile:v baselineв новіших версіях ffmpeg, або -vprofile baselineв деяких версіях близько 0,7 (не впевнені, який… тоді був недокументований), або -vpre baselineдля справді старих версій, які використовували внутрішні пресети замість того, щоб покладатися на бібліотека кодерів x264

Альтернатива: комбінуйте з відео MPEG-4

Якщо H.264 не є варіантом, ви можете спробувати відео MPEG-4, частина II - тут встановлено бітрейт 2 Мбіт / с -vb:

ffmpeg -v error -f image2 -r 1 -i frame_pattern.jpg -i audio_track.mp3 \
-acodec copy -vcodec mpeg4 -vb 2M output.mp4

Варіант має бути -b:vзараз, але старий псевдонім все ще працює.


Дякуємо за вашу раціональну та цінну відповідь. Я буду використовувати його як основу. На жаль, це підтверджує моє відчуття, що портативність досягти не так просто. Що стосується старих версій у дикій природі, то це частина гри. Ви не можете звинувачувати користувачів у використанні стабільних дистрибутивів, але можете звинувачувати проекти, які не переймаються сумісністю (назад | для) палати;)
Clément MATHIEU
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.