Який командний рядок ffmpeg створює відео, більш сумісні на всіх пристроях?


15

Отже, у мене є користувачі, які говорять про відео H264, MP4 не відтворює аудіо на IPad Apple, і я намагаюся отримати MP4 відео, щоб грати належним чином і на Android.

Є два різні командні рядки, який командний рядок є той, який я повинен використовувати.

-profile:v baseline -level 3.0

І:

-vpre baseline

Що я повинен використовувати, щоб він працював на всіх пристроях?

Я також читав, що це може бути бітрейт аудіо, мій поточний бітрейт аудіо

-ab 192k

Можливо, я повинен її опустити

-ab 160k

Командний рядок, що використовується для кодування аудіо MP3 у файли MP4.

"C:/server/ffmpeg/bin/ffmpeg.exe" -y -i Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/54bbf30bb11a0f6b9dc832114c26fd29.mp4 -strict experimental -acodec libmp3lame -ar 44100 -ac 2 -ab 192k -s 480x360 -aspect 16:9 -r 24000/1001 -vcodec libx264 -b:v 1000k -minrate 800k -maxrate 1000k -bufsize 800K -crf 18 -preset veryslow -f mp4 -threads 0 -movflags +faststart Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/98382d43d31d4ff91ea44cb2aa1bbc49.mp4 2>&1

Відповіді:


26

Спочатку слід зрозуміти різницю між використанням профілів FFmpeg та параметрами прямого командного рядка. -vpreвикористовує .ffpresetфайл, розташований у /usr/share/ffmpeg/або де б не був встановлений ffmpeg. Це серія пар параметрів = значення , і у вашому випадку вам довелося б визначити це самостійно (принаймні, я не знаю baselineпресету, що постачається разом із ffmpeg).

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

Типовим командним рядком для генерації відео H.264, сумісного з більшістю пристроїв, буде:

ffmpeg -i <input> \
  -c:v libx264 -crf 23 -profile:v baseline -level 3.0 -pix_fmt yuv420p \
  -c:a aac -ac 2 -b:a 128k \
  -movflags faststart \
  output.mp4

Деякі примітки:

  • H.264 / AAC - найкраща комбінація для широкої підтримки в HTML5. Веб-переглядачам, які не мають декодерів H.264, знадобиться також відео VP8 / Vorbis. Для деяких прикладів командного рядка дивіться цю відповідь . Дивіться також сторінку підтримки браузера Вікіпедії для інших кодеків.

  • H.264 також добре працює на мобільних пристроях.

  • -profile:v baselineІ -level 3.0опції потрібні тільки для старих мобільних пристроїв , які не можуть обробляти ресурсомісткі функції H.264. Зазвичай їх можна залишати поза або замість цього використовувати -profile:v main.

  • CRF встановлює якість (18–28 - це розумний діапазон, нижчий означає кращу якість). Звичайно, ви також можете використовувати фіксований бітрейт з -b:v 1000kподібним або подібним. Виберіть бітрейт, який відповідає роздільній здатності відео. Деякі пристрої з низькою потужністю можуть не в змозі обробляти зайві бітрейти.

  • Цей -movflags faststartпараметр є важливим для потокового потоку, оскільки він переміщує метадані контейнера до початку файлу, а не залишає його в кінці. Це дозволить невідкладно розпочати відтворення, а не чекати повного завантаження файлу.

Однак все зводиться до пошуку найменшого загального знаменника для всіх націлених на вас пристроїв, який може не завжди існувати. Звичайно, ви не хочете використовувати будь-який інший (тобто гірший ) кодек, ніж H.264. Насправді, також не було б розумно пропонувати клієнтам, кодовані базовою лінією, клієнтам, які можуть розшифрувати головний або високий профіль. Ви торгуєте якістю, знижуючи складність декодування.

З мого досвіду, пристрої Android можуть чудово відтворювати Baseline H.264 з аудіо AAC-LC у контейнері MP4. У мене ніколи не було проблем з цим. Насправді, деякі пристрої можуть також відтворювати більш високі профілі, хоча це офіційно не підтримується. iOS, як правило, також підтримує Baseline H.264, але ви, звичайно, можете використовувати основний профіль і на деяких пристроях. Дивіться цю публікацію (яка трохи застаріла) про деякі вказівки.

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


1
Дякую за таку детальну відповідь, я продовжую її перечитувати :) Також я кодую з -acodec libmp3lame -ab 160k, а користувачі, які використовують пристрої ipad Apple, кажуть, що вони могли дивитись відео, але не чути звук, тому я припускаю, що це було щось спільне аудіокодек або бітрейт. Користувачі Android та Windows кажуть, що це добре, і вони мають аудіо у відеопотік, тому я не впевнений, чому використання libmp3lame замість Aac спричинить, що користувачі Apple не мають аудіо до відео.
C0nw0nk

Я рідко бачив MP3-аудіо, що використовується в контейнерах MP4. Можливо, AAC є більш безпечним вибором.
slhck

Ну, я використовую лише MP3, тому що я продовжував отримувати bit_rate, помилки з висотою ширини, коли Aac я перейшов на libmp3lame, і всі ці помилки зупиняються, а потім користувачі Apple кажуть, що у них немає аудіо, але все ж усі можуть дивитися той самий файл, і це добре зі звуком на всіх інших пристроях, напевно, я знайшов помилку, яка знає :( І відповідно до Apple MP3 має бути добре developer.apple.com/library/mac/documentation/…
C0nw0nk

@ user2068371 Це посилання стосується транспортного потоку MPEG-2, а не формату контейнера MP4.
логін

1
@ user2068371 У мене ніколи не було проблем з MediaElementjs. H.264 та MP3 підтримуються не в усіх браузерах . Зокрема, для відео з HTML5 завжди використовуйте H.264 / AAC та, можливо, VP8 / Vorbis як резервний. Якщо у вас є проблеми з перетворенням AAC, будь ласка, задайте нове запитання щодо цього та переконайтеся, що ви також включите повний вихідний командний рядок.
slhck
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.