Dòng lệnh ffmpeg nào tạo ra video tương thích hơn trên tất cả các thiết bị?


15

Vì vậy, tôi có người dùng nói rằng video H264 MP4 không phát âm thanh trên IPad của Apple và tôi đấu tranh để có video MP4 để phát đúng trên Android.

Có hai dòng lệnh khác nhau, dòng lệnh nào là dòng lệnh tôi nên sử dụng.

-profile:v baseline -level 3.0

Và:

-vpre baseline

Những gì tôi nên sử dụng sẽ làm cho nó hoạt động trên tất cả các thiết bị?

Tôi cũng đã đọc nó có thể là bitrate âm thanh bitrate âm thanh hiện tại của tôi là

-ab 192k

Có lẽ tôi nên hạ nó xuống

-ab 160k

Dòng lệnh được sử dụng để mã hóa âm thanh MP3 thành các tệp 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

Câu trả lời:


25

Trước tiên, bạn nên hiểu sự khác biệt giữa việc sử dụng các cấu hình FFmpeg và các tùy chọn dòng lệnh trực tiếp. -vpresử dụng một .ffpresettập tin nằm trong /usr/share/ffmpeg/hoặc bất cứ nơi nào ffmpeg được cài đặt. Đó là một loạt các cặp tùy chọn = giá trị và trong trường hợp của bạn, bạn sẽ phải tự xác định nó (ít nhất là tôi không biết một baselinecài đặt sẵn được vận chuyển với ffmpeg).

Tôi khuyên bạn không nên sử dụng các cài đặt trước trừ khi bạn tự tạo và biết các tùy chọn dòng lệnh để làm gì. Tôi đã sử dụng ffmpeg trong nhiều năm nay và tôi chưa bao giờ sử dụng các cài đặt trước mà tôi chưa bao giờ thực sự phải làm.

Một dòng lệnh điển hình để tạo video H.264 tương thích với hầu hết các thiết bị sẽ là:

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

Một số lưu ý:

  • H.264 / AAC là sự kết hợp tốt nhất để hỗ trợ rộng rãi trong HTML5. Các trình duyệt không có bộ giải mã H.264, tuy nhiên, cũng sẽ cần một video VP8 / Vorbis. Đối với một số ví dụ dòng lệnh, xem câu trả lời này . Xem thêm trang hỗ trợ trình duyệt của Wikipedia cho các codec khác.

  • H.264 cũng hoạt động tốt trên các thiết bị di động.

  • Các tùy chọn -profile:v baseline-level 3.0chỉ cần thiết cho các thiết bị di động cũ không thể xử lý các tính năng thâm dụng CPU của H.264. Bạn thường có thể bỏ chúng ra hoặc thay vào đó sử dụng -profile:v main.

  • CRF đặt chất lượng (18 Hàng28 là phạm vi hợp lý, thấp hơn có nghĩa là chất lượng tốt hơn). Tất nhiên bạn cũng có thể sử dụng bitrate cố định với -b:v 1000khoặc tương tự. Chọn một bitrate phù hợp với độ phân giải của video. Một số thiết bị có công suất thấp có thể không thể xử lý bitrate cao không cần thiết.

  • Các -movflags faststarttùy chọn là điều cần thiết cho streaming, vì nó di chuyển các siêu dữ liệu chứa đến đầu của tập tin thay vì để nó ở cuối. Điều này sẽ cho phép phát lại ngay lập tức bắt đầu thay vì phải đợi tệp được tải hoàn toàn.

Tuy nhiên, tất cả bắt nguồn từ việc tìm mẫu số chung thấp nhất cho tất cả các thiết bị bạn đang nhắm mục tiêu, có thể không phải lúc nào cũng tồn tại. Chắc chắn bạn sẽ không muốn sử dụng bất kỳ codec nào khác (nghĩa là tệ hơn ) so với H.264. Trên thực tế, sẽ không khôn ngoan khi cung cấp video được mã hóa Đường cơ sở cho các khách hàng có thể giải mã cấu hình Chính hoặc Cao. Bạn sẽ đánh đổi chất lượng chống lại sự phức tạp giải mã giảm.

Theo kinh nghiệm của tôi, các thiết bị Android có thể phát Baseline H.264 với âm thanh AAC-LC trong một thùng chứa MP4 tốt. Tôi chưa bao giờ có vấn đề với nó. Trên thực tế, một số thiết bị cũng có thể phát cấu hình cao hơn, mặc dù nó không được hỗ trợ chính thức. iOS nói chung cũng hỗ trợ Baseline H.264, nhưng bạn chắc chắn cũng có thể sử dụng Cấu hình chính trên một số thiết bị. Xem bài đăng này (một chút lỗi thời) cho một số hướng dẫn.

Nếu bạn có người dùng gặp sự cố phát lại, bạn cần tìm hiểu video nào đang gây ra sự cố và nhận thêm thông tin chi tiết về phần cứng và phần mềm trình phát nào họ đang sử dụng. Sau đó chúng ta có thể nói về việc khắc phục sự cố cụ thể đó.


1
Cảm ơn câu trả lời chi tiết như vậy tôi tiếp tục đọc lại :) Ngoài ra tôi mã hóa bằng -acodec libmp3lame -ab 160k và người dùng sử dụng thiết bị ipad apple đang nói rằng họ có thể xem video nhưng không nghe thấy âm thanh nên tôi cho rằng đó là việc cần làm codec âm thanh hoặc bitrate. Người dùng Android và Windows nói rằng nó ổn và họ có âm thanh cho luồng video, vì vậy tôi không chắc tại sao sử dụng libmp3lame thay vì aac sẽ khiến người dùng apple không có âm thanh cho video.
C0nw0nk

Tôi hiếm khi thấy âm thanh MP3 được sử dụng trong các thùng chứa MP4. Có lẽ AAC là sự lựa chọn an toàn hơn.
slhck

Vâng, tôi chỉ sử dụng MP3 vì tôi liên tục nhận được bit_rate, lỗi chiều cao với aac tôi đã chuyển sang libmp3lame và tất cả các lỗi đó đều dừng và sau đó người dùng apple nói rằng họ không có âm thanh nhưng mọi người khác có thể xem cùng một tệp và âm thanh vẫn ổn trên tất cả các thiết bị khác, có lẽ tôi đã tìm thấy một lỗi người biết :( Và theo apple MP3 nên là nhà phát triển
tốt.apple.com / l Library / mac / document / khăn

@ user2068371 Liên kết đó đề cập đến luồng truyền tải MPEG-2, không phải định dạng chứa MP4.
llogan

1
@ user2068371 Tôi chưa bao giờ gặp sự cố với MediaEuityjs. H.264 và MP3 không được hỗ trợ trong tất cả các trình duyệt . Đối với video HTML5 cụ thể, luôn luôn sử dụng H.264 / AAC và có thể cả VP8 / Vorbis làm dự phòng. Nếu bạn gặp vấn đề với chuyển đổi AAC, vui lòng đặt câu hỏi mới về điều đó và đảm bảo bao gồm cả đầu ra dòng lệnh đầy đủ.
slhck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.