Baris perintah ffmpeg apa yang menghasilkan video yang lebih kompatibel di semua perangkat?

13

Jadi saya memiliki pengguna yang mengatakan video H264 MP4 tidak memutar audio di Apple iPad dan saya kesulitan untuk mendapatkan video MP4 untuk diputar dengan benar di Android juga.

Ada dua baris perintah yang berbeda baris perintah apa yang harus saya gunakan.

-profile:v baseline -level 3.0

Dan:

-vpre baseline

Apa yang harus saya gunakan yang akan membuatnya bekerja di semua perangkat?

Saya juga sudah membacanya bisa berupa bitrate audio saya saat ini bitrate audio

-ab 192k

Mungkin saya harus menurunkannya

-ab 160k

Baris perintah digunakan untuk menyandikan audio MP3 ke file 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
C0nw0nk
sumber

Jawaban:

17

Pertama, Anda harus memahami perbedaan antara menggunakan profil FFmpeg dan opsi perintah langsung. -vpremenggunakan .ffpresetfile yang terletak di /usr/share/ffmpeg/atau di mana ffmpeg diinstal. Ini adalah serangkaian pasangan opsi = nilai , dan dalam kasus Anda, Anda harus mendefinisikannya sendiri (setidaknya saya tidak tahu baselinepreset yang dikirimkan dengan ffmpeg).

Saya akan merekomendasikan untuk tidak menggunakan preset kecuali Anda membuatnya sendiri dan tahu untuk apa opsi baris perintah. Saya telah menggunakan ffmpeg selama bertahun-tahun sekarang, dan saya tidak pernah menggunakan preset — saya tidak pernah benar-benar harus melakukannya.

Baris perintah khas untuk menghasilkan video H.264 yang kompatibel dengan sebagian besar perangkat adalah:

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

Beberapa catatan:

  • H.264 / AAC adalah kombinasi terbaik untuk dukungan luas di HTML5. Browser yang tidak memiliki decoder H.264 akan membutuhkan video VP8 / Vorbis juga. Untuk beberapa contoh baris perintah, lihat jawaban ini . Lihat juga halaman dukungan browser Wikipedia untuk codec lainnya.

  • H.264 juga berfungsi dengan baik di seluruh perangkat seluler.

  • The -profile:v baselinedan -level 3.0pilihan hanya diperlukan untuk perangkat mobile lama yang tidak dapat menangani fitur CPU-intensif H.264. Anda biasanya dapat mengabaikannya atau menggunakannya -profile:v main.

  • CRF menentukan kualitas (18–28 adalah kisaran yang masuk akal, lebih rendah berarti kualitas yang lebih baik). Anda tentu saja dapat juga menggunakan bitrate tetap dengan -b:v 1000katau serupa. Pilih bitrate yang cocok dengan resolusi video. Beberapa perangkat berdaya rendah mungkin tidak dapat menangani bitrate tinggi yang tidak perlu.

  • The -movflags faststartpilihan adalah penting untuk streaming, karena bergerak metadata kontainer ke awal file daripada meninggalkannya di akhir. Ini akan memungkinkan pemutaran untuk segera mulai alih-alih harus menunggu file dimuat seluruhnya.

Namun, semuanya bermuara pada menemukan penyebut umum terendah untuk semua perangkat yang Anda targetkan, yang mungkin tidak selalu ada. Tentu saja Anda tidak ingin menggunakan codec lain (yaitu, lebih buruk ) daripada H.264. Bahkan, tidak bijaksana untuk menawarkan video yang dikodekan Baseline kepada klien yang dapat memecahkan kode Utama atau Profil Tinggi. Anda akan menukar kualitas dengan kompleksitas penguraian yang dikurangi.

Dari pengalaman saya, perangkat Android dapat memainkan Baseline H.264 dengan audio AAC-LC dalam wadah MP4. Saya tidak pernah punya masalah dengan itu. Bahkan, beberapa perangkat mungkin memainkan profil yang lebih tinggi juga, meskipun tidak didukung secara resmi. iOS umumnya juga mendukung Baseline H.264, tetapi Anda tentu dapat menggunakan profil Utama pada beberapa perangkat juga. Lihat posting ini (yang sedikit ketinggalan jaman) untuk beberapa pedoman.

Jika Anda memiliki pengguna dengan masalah pemutaran, Anda harus mencari tahu video mana yang menyebabkan masalah, dan mendapatkan rincian lebih lanjut tentang perangkat keras dan perangkat lunak pemutar apa yang mereka gunakan. Lalu kita bisa berbicara tentang pemecahan masalah kasus tertentu.

slhck
sumber
Terima kasih atas jawaban terperinci seperti itu, saya terus membacanya kembali :) Saya juga menyandikannya dengan -acodec libmp3lame -ab 160k dan pengguna yang menggunakan perangkat iPad mengatakan bahwa mereka dapat menonton video tetapi tidak mendengar suara jadi saya menganggap itu ada hubungannya dengan codec audio atau bitrate. Pengguna Android dan Windows mengatakan itu baik-baik saja dan mereka memiliki audio ke aliran video jadi saya tidak yakin mengapa menggunakan libmp3lame bukan aac akan menyebabkan pengguna apel tidak memiliki audio ke video.
C0nw0nk
Saya jarang melihat audio MP3 yang digunakan dalam wadah MP4. Mungkin AAC adalah pilihan yang lebih aman.
slhck
Yah saya hanya menggunakan MP3 karena saya terus mendapatkan bit_rate, kesalahan tinggi lebar dengan aac saya beralih ke libmp3lame dan semua kesalahan itu berhenti dan kemudian pengguna apel mengatakan mereka tidak memiliki audio tetapi semua orang dapat menonton file yang sama dan tidak masalah dengan suara pada semua perangkat lain, Mungkin saya menemukan bug yang tahu :( Dan menurut apel MP3 haruslah developer.apple.com/library/mac/documentation/…
C0nw0nk
@ user2068371 Tautan itu mengacu pada aliran transportasi MPEG-2, bukan format wadah MP4.
Logan
1
@ user2068371 Saya tidak pernah mengalami masalah dengan MediaElementjs. H.264 dan MP3 tidak didukung di semua browser . Khusus untuk video HTML5, selalu gunakan H.264 / AAC dan mungkin VP8 / Vorbis sebagai cadangan. Jika Anda memiliki masalah dengan konversi AAC, silakan ajukan pertanyaan baru tentang hal itu dan pastikan untuk menyertakan output baris perintah penuh juga.
slhck