Quale comando ffmpeg converte un video per iPad / iPhone / iPod?


24

Attualmente sto usando un file batch che (tra le altre cose) esegue la seguente riga di comando handbrakecli per convertire un video:

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

Questo mi è servito bene per molti anni, producendo un file video che è più piccolo dell'originale (buono quando hai solo dispositivi da 16Gb), sembra abbastanza buono e funziona praticamente su qualsiasi iPod, iPad e iPhone su cui lo metto.

Tuttavia nel tempo handbrakecli sta lottando per convertire sempre più video al punto che devo cercare un'alternativa. Non è aiutato dal fatto che i registri non forniscono assolutamente alcuna informazione sul motivo per cui si è bloccato. Questo video, ad esempio, si è bloccato al 71% durante la conversione e queste sono le ultime 4 righe:

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

Non molto utile.

Ho considerato l'utilizzo di ffmpeg come alternativa, ma tutti gli esempi che ho visto su Internet eseguono una o più delle seguenti operazioni:

  1. Non funziona (le opzioni della riga di comando non sono riconosciute) - comune!
  2. Risultato in un file che è più grande dell'originale - molto comune!
  3. Distorsione dell'immagine, soprattutto quando viene convertita una dimensione video imprevista (ad es. PAL non widescreen)
  4. Rimuovi l'audio
  5. Crea un video che l'iPhone, l'iPod o l'iPad non riprodurrà

Esiste una linea di comando ffmepg per tutti gli usi decente che farà funzionare felicemente qualsiasi video su tutti i dispositivi Apple oltre a ottenere una riduzione delle dimensioni del file?

Punti bonus se si restringe (ma non distorce) anche qualsiasi video oltre 720p.


Quando è stata aggiornata l'ultima volta handbrakecli?
Gene,

Abbastanza frequentemente nella speranza che l'errore si sia risolto. Attualmente sto eseguendo 0.10.2 (2015060900) - MinGW x86_64.
Richard,

Avevo un video mp4 che si rifiutava di funzionare su iOS, e questo è stato il comando più breve che ho potuto evocare per risolverlo: ffmpeg -i broken_video.mp4 -pix_fmt yuv420p working_video.mp4
Bemmu

Risposte:


30

Ecco la mia opinione su di esso. Prenderò l'iPhone 4 o più recente (compresi tutti gli iPad) come obiettivo: profilo principale H.264, livello 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

I valori che sei libero di cambiare:

  • -crf 23: L'impostazione della qualità costante. Valore più alto = meno qualità, file più piccolo. Minore = migliore qualità, file più grande. I valori sani sono [18 - 24]
  • -preset medium: Se è troppo lento per te, usa un preset più veloce. Se ne hai la pazienza, usane una più lenta. Vedi qui per maggiori informazioni.
  • -acodec copy: Tenta di copiare la traccia audio nel contenitore MP4. Se non può essere copiato, dovrai ricodificarlo in AAC / MP3 / AC3 ​​... ad es-acodec libmp3lame

Se il tuo video è superiore a 720p, aggiungi quanto segue dopo l'input:

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

Ciò ridurrà il tuo video a 720p e manterrà le proporzioni. L'algoritmo di ridimensionamento utilizzato sarà lanczos in quanto è molto meglio del valore predefinito.


3
Puoi usare -vf "scale=-2:720:flags=lanczos"invece. L'aggiunta -movflags +faststartè consigliata se il file verrà visualizzato tramite download progressivo, ad esempio in un browser (e in caso contrario l'opzione certamente non danneggia).
llogan,

La build di Zeranoe che sto usando non supporta x264-params. A meno di costruirlo da solo, c'è un modo per aggirare questo problema?
Richard,

Uso una build Zeranoe e -x264-paramsfunziona benissimo. Sei sicuro di non aver perso qualcosa? L'opzione è principalmente una sicurezza per evitare di avere più di 4 frame di riferimento che potrebbero non essere gestiti da un vecchio decodificatore.
Ely,

-acodec libmp3lamenon funziona per me. Per abilitare l'audio sul mio iPad Mini ho ricostruito ffmpegcon nonfreevariante e usato in libfdk_aaccodice.
Vitaly S.

0

Questo è di base ma ha funzionato immediatamente per me su un iPad 3

ffmpeg -i inputfile outputfile.m4v
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.