Tôi cần tập hợp các tập lệnh ffmpeg nào để có được Video Video tương thích với HTML5 cho mọi người?


12

Danh sách các lệnh tôi nên làm trong ffmpeg / mencoder / some_other_CLI_app để nhận video ở tất cả các định dạng phù hợp để sử dụng Video cho mọi người ?

tức là có một sự tinh tế ngăn cản việc có một hướng dẫn cơ học nói rằng

VIDEO=video.mp4
TYPE=$(ffmpeg --find-information-about-the-video ... )
ffmpeg ... > video.mov
ffmpeg ... > video.flv
ffmpeg ... > video.webm
ffmpeg ... > video.h.264
...

Sau đó sao chép và dán mã Video cho mọi người vào trang của bạn?

Mục tiêu của tôi là có một video nhúng trong trang web cá nhân do tôi lưu trữ. HTML5 với flash dự phòng được ưa thích, vì vậy cách đơn giản nhất dường như là Video cho mọi người. Nhưng trang đó để lại phần phức tạp nhất, mã hóa video thành tất cả các định dạng khác nhau, để người đọc tìm ra bằng cách đọc một bài viết dài và đầy đủ về các định dạng video . Chắc chắn điều này là không cần thiết. Tôi có thể cung cấp một danh sách các lệnh để người dùng chuyển đổi một cách mù quáng một tệp âm thanh thành một loạt các định dạng khác nhau. Hy vọng rằng một bậc thầy ffmpeg có thể làm điều tương tự cho video.


1
Nhận xét nhỏ cho các ví dụ mã giả của bạn: Không có .movvideo HTML5 và cũng không có h.264phần mở rộng. Có .264 , đó là bytestream Phụ lục B liệu cho các đơn vị NAL. Mã hóa video không phải là khoa học tên lửa, nhưng bạn cần đầu tư một chút thời gian để tìm hiểu các khái niệm.
slhck

Câu trả lời:


21

Lưu ý: Câu trả lời này đã được chỉnh sửa rất nhiều kể từ khi đăng bài gốc. Bây giờ là năm 2017; phát trực tuyến hoạt động khác với trước đây. Hướng dẫn này giả định tải xuống lũy ​​tiến đơn giản một luồng video ở một độ phân giải nhất định - không phát trực tiếp thích ứng.

Yêu cầu

Trước hết, hãy đảm bảo tải xuống ffmpegphiên bản gần đây (tải xuống bản dựng tĩnh; không gọi apt-get install ffmpeghoặc tương tự). Lý tưởng nhất, tự biên dịch nó . Nó không mất quá nhiều thời gian.

Để tạo video được hầu hết các trình duyệt hỗ trợ, luôn kiểm tra bảng tương thích mới nhất . Không có codec / định dạng duy nhất hoạt động trong mọi trình duyệt, nhưng nếu bạn tạo H.264 trong MP4 và VP9 trong WebM, với codec âm thanh tương ứng, bạn sẽ có hỗ trợ cho Chrome, Firefox, Safari và một số phiên bản IE.

WebM (VP9 / Vorbis)

Thực hiện theo các đề xuất trong hướng dẫn FF9 của FFmpeg và sử dụng phương pháp mã hóa hai lần với các ràng buộc về tỷ lệ:

ffmpeg -y -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 1 -f webm /dev/null && \
ffmpeg -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 2 output.webm

Tốc độ bit mục tiêu phụ thuộc vào độ phân giải, tốc độ khung hình, loại nội dung và chất lượng bạn muốn. 2,5 MBit / s nên là một sự thỏa hiệp tốt cho video HD ở 30 khung hình / giây. Xem hướng dẫn này của Google để biết một số khuyến nghị.

MP4 (H.264 / AAC)

Thực hiện theo các khuyến nghị trong hướng dẫn FFmpeg H.264 và sử dụng phương pháp mã hóa hai lần với các ràng buộc về tốc độ:

ffmpeg -y -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 1 -c:a aac -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 2 -c:a aac -movflags faststart output.mp4

Ở đây, tốc độ bit mục tiêu phải cao hơn khoảng 50% so với video VP9, ​​vì H.264 không hiệu quả. Thêm -movflags faststarttùy chọn vào đường chuyền thứ hai để tải video ban đầu nhanh hơn.

Để cài đặt tùy chọn âm thanh, xem hướng dẫn mã hóa AAC .


1
Phiên bản 2013-12-19 của một trong những đoạn văn của bạn bị cắt ở giữa câu. "Âm thanh mặc định trở lại 128 kBit / s, nhưng bạn có thể đặt q: a cho bitrate biến, trong đó các giá trị nằm trong khoảng từ 0 đến 500. 100 là mặc định và cao hơn có nghĩa là tốt hơn. Nếu"
Alan De Smet

@slhck có rất nhiều ý nghĩa, nhưng hai xu của tôi là bạn bỏ Ogg và thay thế nó bằng mpegts / m3u8 để hỗ trợ tất cả các thiết bị iOS hoặc những thiết bị chấp nhận HLS. Bạn có thể sử dụng lại các tệp .mp4 và chỉ cần thêm xử lý mpeg-ts trong ffmpeg.
Paul Gregoire

@Mondain Thật vậy, nhưng MPEG-TS / .m3u8 thường không phải là video tương thích với HTML5. Bạn cần một máy chủ HLS và bạn cần biết thêm một chút về phát trực tuyến, điều này không thực sự nằm trong phạm vi của câu hỏi này.
slhck

Điểm tốt, nhưng từ kinh nghiệm của tôi cho đến nay, một máy chủ http đơn giản có thể phục vụ m3u8 cho thẻ video. Điều duy nhất người ta thường cần làm là thêm các loại mime cho m3u8 và ts vào cấu hình máy chủ tương ứng.
Paul Gregoire
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.