2017-01-05 14 views
0

В течение лета я работал над составлением сценария, в котором принимал поток видео/mp3 x264 и разбивал его на разные потоки, чтобы он работал через MSE-DASH. (Основываясь на инструкциях на webmproject.org website) Те же самые скрипты перестали работать, превратив видео на 6 ГБ в несколько видеороликов на 25 Гб. Я продолжал обновлять ffmpeg, и поэтому не знаю, когда он перестает работать, но я предполагаю, что это было связано с обновлением их реализации DASH Webm.Почему один поток ffmpeg webm тире намного больше, чем другие?

Я нашел новый метод, который работает лучше, но все еще имеет серьезные проблемы с одним потоком. Я надеялся, что кто-то сможет объяснить, как работает эта кодировка, чтобы я мог понять основную причину.

#!/bin/bash 
COMMON_OPTS="-map 0:0 -an -threads 11 -cpu-used 4 -cmp chroma" 
WEBM_OPTS="-f webm -c:v vp9 -keyint_min 50 -g 50 -dash 1" 

ffmpeg -i $1 -vn -acodec libvorbis -ab 128k audio.webm & 
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 500k -vf scale=1280:720 -y vid-500k.webm & 
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 700k -vf scale=1280:720 -y vid-700k.webm & 
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 1000k -vf scale=1280:720 -y vid-1000k.webm & 
ffmpeg -i $1 $COMMON_OPTS $WEBM_OPTS -b:v 1500k -vf scale=1280:720 -y vid-1500k.webm 

перекодировать еще не завершен, но вы можете видеть, где это возглавляется:

-rw-r--r-- 1 user staff 87M Jan 4 23:27 audio.webm 
-rw-r--r-- 1 user staff 27M Jan 4 23:42 vid-1000k.webm 
-rw-r--r-- 1 user staff 285M Jan 4 23:42 vid-1500k.webm 
-rw-r--r-- 1 user staff 15M Jan 4 23:42 vid-500k.webm 
-rw-r--r-- 1 user staff 20M Jan 4 23:42 vid-700k.webm 

1500K вариант несоизмеримо больше, чем другие потоки.

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

ответ

1

Если вы хотите, чтобы битрейт видео был ограничен некоторым значением, недостаточно использовать только -b:v. В зависимости от источника (высокое перемещение, сложность сцены) фактический битрейт будет выше.

Необходимо также указать -maxrate и -bufsize.

Т.е. чтобы получить переменный битрейт (VBR) видео ограничена на уровне около 1500K - пик может быть выше в зависимости от размера VBV - вы бы использовать:

-b:v 1500k -maxrate 1500k -bufsize 1500k 

Для постоянного битрейта (CBR) лучший результат достигается при один кадр VBV. Пример для 25 кадров в секунду (1500/25 = 60):

-b:v 1500k -minrate 1500k -maxrate 1500k -bufsize 60k 
+0

Большое спасибо. Я знал, что это работает второй, я начал его, но я хотел убедиться, что видео не искажено. Я упомянул, что сценарии перестали работать, и я должен был упомянуть, что они перестали работать над видео, над которым они работали ранее. Вы знаете что-то, что изменилось с помощью ffmpeg, что теперь требует большей точности в строке параметров? – ranvel

+0

@renvel Да, странно, что один вариант идет так высоко. Я не знаю, что изменилось, хотя ... – aergistal