Apa perintah ffmpeg yang akan mengkonversi video untuk iPad / iPhone / iPod?

24

Saat ini saya menggunakan file batch yang (antara lain) menjalankan baris perintah handbrakecli berikut untuk mengonversi video:

HandBrakeCLI.exe -v0 --input "D:\input.mkv" --preset="Universal" --ipod-atom -t 1 --angle 1 --gain 0 --output="D:\output.mp4"

Ini telah membantu saya dengan baik selama bertahun-tahun, menghasilkan file video yang lebih kecil dari aslinya (bagus ketika Anda hanya memiliki perangkat 16Gb), terlihat cukup baik dan berfungsi pada hampir semua iPod, iPad dan iPhone yang saya pakai.

Namun seiring waktu handbrakecli berjuang untuk mengkonversi video semakin banyak ke titik yang saya perlu mencari alternatif. Ini tidak terbantu oleh fakta bahwa log sama sekali tidak memberikan informasi mengapa crash. Video ini, misalnya, mogok di 71% melalui konversi dan ini adalah 4 baris terakhir:

AC3 Passthru requested and input codec is not compatible for track 2, using AC3 encoder
x264 [info]: using SAR=9593/9600
x264 [info]: using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX
x264 [info]: profile Constrained Baseline, level 3.0

Tidak terlalu membantu.

Saya melihat menggunakan ffmpeg sebagai alternatif, tetapi semua contoh yang saya lihat di internet melakukan satu atau lebih hal berikut ini:

  1. Jangan bekerja (opsi baris perintah tidak dikenali) - umum!
  2. Menghasilkan file yang lebih besar dari aslinya - sangat umum!
  3. Distorsi gambar, terutama ketika ukuran video yang tidak terduga dikonversi (mis. PAL non-layar lebar)
  4. Hapus audio
  5. Menghasilkan video yang tidak dapat diputar oleh iPhone, iPod atau iPad

Apakah ada baris perintah ffmepg serba guna yang layak yang akan membuat video berjalan dengan bahagia di semua perangkat Apple plus mencapai pengurangan ukuran file?

Poin bonus jika itu akan menyusut (tetapi tidak merusak) video apa pun di atas 720p juga.

Richard
sumber
Kapan terakhir kali Anda meningkatkan versi handbrakecli?
Gene
Cukup sering dengan harapan bug menabrak diperbaiki. Saya saat ini menjalankan 0.10.2 (2015060900) - MinGW x86_64.
Richard
Saya punya video mp4 yang menolak untuk bekerja di iOS, dan ini adalah perintah terpendek yang dapat saya buat yang memperbaikinya: ffmpeg -i broken_video.mp4 -pix_fmt yuv420p working_video.mp4
Bemmu

Jawaban:

30

Inilah pendapat saya. Saya akan mengambil iPhone 4 atau yang lebih baru (termasuk semua iPad) sebagai target: H.264 Profil utama, level 3.1

ffmpeg -i input.mp4 -vcodec libx264 -profile:v main -level 3.1 -preset medium -crf 23 -x264-params ref=4 -acodec copy -movflags +faststart output.mp4

Nilai-nilai yang Anda bebas ubah:

  • -crf 23: Pengaturan kualitas konstan. Nilai lebih tinggi = kualitas kurang, file lebih kecil. Lebih rendah = kualitas lebih baik, file lebih besar. Nilai sane adalah [18 - 24]
  • -preset medium: Jika ini terlalu lambat untuk Anda, gunakan preset yang lebih cepat. Jika Anda memiliki kesabaran untuk itu, gunakan yang lebih lambat. Lihat di sini untuk informasi lebih lanjut.
  • -acodec copy: Mencoba menyalin trek audio ke wadah MP4. Jika tidak dapat disalin, Anda harus memasukkannya kembali ke AAC / MP3 / AC3 ​​... mis-acodec libmp3lame

Jika video Anda lebih besar dari 720p, tambahkan berikut ini setelah input:

-vf "scale=-2:720:flags=lanczos"

Ini akan mengecilkan video Anda menjadi 720p dan menjaga rasio aspek. Algoritma penskalaan yang digunakan adalah lanczos karena jauh lebih baik daripada standarnya.

Ely
sumber
3
Anda bisa menggunakannya -vf "scale=-2:720:flags=lanczos". Menambahkan -movflags +faststartdisarankan jika file akan dilihat melalui unduhan progresif seperti di browser (dan jika tidak opsi tentu tidak ada salahnya).
llogan
Zeranoe build yang saya gunakan tidak mendukung x264-params. Tanpa membangunnya sendiri, adakah cara untuk mengatasi masalah ini?
Richard
Saya menggunakan Zeranoe build sendiri dan -x264-paramsberfungsi dengan baik. Apakah Anda yakin tidak melewatkan sesuatu? Opsi utamanya adalah keamanan untuk menghindari memiliki lebih dari 4 kerangka referensi yang mungkin tidak ditangani oleh decoder yang lebih lama.
Ely
-acodec libmp3lametidak bekerja untuk saya. Untuk mengaktifkan audio pada iPad Mini saya, saya membuat ulang ffmpegdengan nonfreevarian dan menggunakan libfdk_aackode.
Vitaly S.
0

Ini dasar tetapi langsung bekerja untuk saya di iPad 3

ffmpeg -i inputfile outputfile.m4v
yeeking
sumber