Как быстро конвертировать mp4 в webm используя ffmpeg?

20

Мне нужно конвертировать 76 файлов mp4 в webm для веб-сайта, который использует HTML5-видео. Я говорю о 10 ГБ файлов mp4 ... Я знаю, что могу просто попросить ffmpeg сделать это, используя:

ffmpeg -i input_file.mp4 output_file.webm

Конечно, я сделаю это рекурсивно:

find ./ -name '*.mp4' -exec bash -c 'ffmpeg -i "$0" "${0%%.mp4}.webm"' {} \;

Я даже попробовал кое-что, что я нашел где-то в Интернете:

ffmpeg -i input_file.mp4 -cpu-used 4 -threads 8 output_file.webm

Но дело в том, что это не займет у меня меньше недели !!! Что я делаю неправильно? Есть ли какой-нибудь способ ускорить это? Если я перейду в ogg, получу ли я скорость? Пожалуйста помоги!!!

pr.nizar
источник
@LordNeckbeard вы должны написать ответ на основе этого руководства. Кроме того, следует отметить, что кодер vpx работает медленнее, чем патока, даже с нормальными настройками и т. Д., По сравнению с x264 ... если вы не готовы пожертвовать большим качеством, горит невозможно получить действительно быстрое кодирование с ним.
evilsoup
Проблема в совместимости. Вот небольшая таблица совместимости: {x264: IE (+) Safari (+) Chrome (+) Firefox (-) Opera (-)} {webm: IE (-) Safari (-) Chrome (+) Firefox (+) Opera (+)} Я знаю, что они говорят, что Safari и IE занимают большую часть рынка, но я серьезно сомневаюсь в этом и сделаю ставку на Firefox и Opera! ;)
пр.низар
@ pr.nizar Благодаря Cisco, выпустившей OpenH264 под BSD, Firefox теперь поддерживает h.264.
Wyatt8740
Похожие страницы : stackoverflow.com/questions/43612424/… | superuser.com/questions/1211786/…
Сиро Сантилли 新疆 at 中心 法轮功 六四 事件

Ответы:

11

Транскодирование видео занимает время. Также требуется гораздо больше знаний о параметрах кодирования; Значения по умолчанию для ffmpeg вряд ли подойдут вам и могут даже не создать пригодный для использования выходной файл.

Вот начало:

http://blog.pcode.nl/2010/10/17/encoding-webm-using-ffmpeg/

Эти настройки будут кодировать до определенного среднего битрейта (битрейт видео 3900 кбит), поэтому в битрейте будут скачки.

MP4 и WebM используют разные видеокодеки, поэтому кратчайшего пути нет; видео должно быть перекодировано.

Конечно, скорость кодирования будет сильно отличаться в зависимости от размера кадра, частоты кадров и настроек качества. Для кодирования 720p вы можете рассчитывать на кодирование примерно 1: 1 (т.е. 10 часов видео за 10 часов) на процессоре за последние пару лет. Если вы выполняете двухпроходное кодирование ABR, как в примере, приведенном в ссылке, почти вдвое больше.

thomasrutter
источник
8

Удвоить или сократить вдвое? Так что это тупик ... Я не буду играть с битрейтами, я никогда не знаю, чего ожидать от качества или размера ... Думаю, я буду придерживаться этого и заставлять клиента держаться, пока не закончится конвертация ...

find ./ -name '*.mp4' -exec bash -c 'ffmpeg -i "$0" -vcodec libvpx -acodec libvorbis -cpu-used 5 -threads 8 "${0%%.mp4}.webm"' {} \;

Я публикую это для будущих пользователей, на самом деле я набрал скорость, но мой процессор работает как ад: от 60 до 80% на каждое ядро! Теперь я думаю, что это займет меньше времени: 3 дня вместо 6 или 7 .. Надеюсь, это не сломается .. ^ _ ^

Спасибо, мужчина, в любом случае!

Изменить: Убрал переключатель -sameq после комментариев от LordNeckbeard и neon_overload -sameq не означает то же самое "качество"

pr.nizar
источник
3
-sameqне означает "то же качество" и был удален выше по течению. Не используйте это. Обратитесь по ссылке в моем комментарии к вашему вопросу для получения подробных инструкций по кодированию libvpx.
llogan
2
-sameq означает один и тот же квантователь, однако невозможно сравнить квантователи между h.264 и VP8, поэтому даже если это сработало, вы почти наверняка получите неверные результаты, если будете его использовать - так что не делайте.
Томасрутер
2
Спасибо, парень, за то, что обратил на это мое внимание! Я отредактировал свой ответ ..;) На самом деле я не использовал этот переключатель, потому что видел, что он становится еще медленнее ... Я даже бросил ffmpeg и использовал avconv: ЭТО ПУТЬ БЫСТРО! Работа была выполнена за полтора дня с помощью этого: find ./ -name '* .mp4' -exec bash -c 'avconv -i "$ 0" -vcodec libvpx -acodec libvorbis -cpu-used 5 -threads 8 " $ {0 %%. Mp4} .webm "'{} \; Я знаю, что отклоняю тему с помощью этого комментария, но я подумал, что стоило сказать это ... ^ _ ^ Надеюсь, это кому-нибудь поможет! ;)
пр.низар
По качеству действительно не могу отличить исходные файлы от транскодированных: у них практически одинаковые качества аудио и видео!
пр.низар
1
Тем не менее, рекомендуется либо установить значение crf, либо значение битрейта, а не использовать значения по умолчанию для ffmpeg / avconv, какими бы они ни были.
Томасруттер