¿Qué comando ffmpeg convertiría un video para iPad / iPhone / iPod?

24

Actualmente estoy usando un archivo por lotes que (entre otras cosas) ejecuta la siguiente línea de comando handbrakecli para convertir un video:

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

Esto me ha servido bien durante muchos años, produciendo un archivo de video que es más pequeño que el original (bueno cuando solo tienes dispositivos de 16 Gb), se ve lo suficientemente bien y funciona en casi cualquier iPod, iPad y iPhone que lo puse.

Sin embargo, con el tiempo, handbrakecli está luchando para convertir cada vez más videos hasta el punto de que necesito buscar una alternativa. No le ayuda el hecho de que los registros no proporcionan absolutamente ninguna información de por qué se ha bloqueado. Este video, por ejemplo, se bloqueó al 71% a través de la conversión y estas son las últimas 4 líneas:

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

No muy útil

Observé el uso de ffmpeg como alternativa, pero todos los ejemplos que he visto en Internet hacen uno o más de los siguientes:

  1. No funciona (no se reconocen las opciones de la línea de comandos): ¡común!
  2. El resultado es un archivo que es más grande que el original, ¡muy común!
  3. Distorsiona la imagen, especialmente cuando se convierte un tamaño de video inesperado (por ejemplo, PAL sin pantalla panorámica)
  4. Eliminar el audio
  5. Resulta en un video que el iPhone, iPod o iPad no reproducirá

¿Existe una línea de comando ffmepg decente para todo uso que haga que cualquier video se ejecute felizmente en todos los dispositivos Apple y logre una reducción en el tamaño del archivo?

Puntos de bonificación si también reducirá (pero no distorsionará) cualquier video de más de 720p.

Ricardo
fuente
¿Cuándo es la última vez que actualizaste handbrakecli?
Gene
Con bastante frecuencia con la esperanza de que el error se solucione. Actualmente estoy ejecutando 0.10.2 (2015060900) - MinGW x86_64.
Richard
Tenía un video mp4 que se negaba a funcionar en iOS, y este fue el comando más corto que pude conjurar que lo solucionó: ffmpeg -i broken_video.mp4 -pix_fmt yuv420p working_video.mp4
Bemmu

Respuestas:

30

Aquí está mi opinión al respecto. Tomaré el iPhone 4 o más reciente (incluidos todos los iPads) como objetivo: perfil principal H.264, nivel 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

Los valores que puede cambiar libremente:

  • -crf 23: El ajuste de calidad constante. Mayor valor = menor calidad, archivo más pequeño. Inferior = mejor calidad, archivo más grande. Los valores correctos son [18 - 24]
  • -preset medium: Si esto es demasiado lento para usted, use un preajuste más rápido. Si tienes paciencia para ello, usa uno más lento. Ver aquí para más información.
  • -acodec copy: Intenta copiar la pista de audio en el contenedor MP4. Si no se puede copiar, deberá volver a codificarlo en AAC / MP3 / AC3 ​​... p. Ej.-acodec libmp3lame

Si su video es superior a 720p, agregue lo siguiente después de la entrada:

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

Esto reducirá su video a 720p y mantendrá la relación de aspecto. El algoritmo de escala utilizado será lanczos ya que es mucho mejor que el predeterminado.

Ely
fuente
3
Puedes usar -vf "scale=-2:720:flags=lanczos"en su lugar. -movflags +faststartSe recomienda agregar si el archivo se verá a través de una descarga progresiva, como en un navegador (y si no, la opción ciertamente no hace daño).
llogan
La construcción Zeranoe que estoy usando no es compatible x264-params. A menos que lo construya yo mismo, ¿hay alguna forma de solucionar este problema?
Richard
Yo uso una construcción Zeranoe y -x264-paramsfunciona bien. ¿Estás seguro de que no te perdiste algo? La opción es principalmente una seguridad para evitar tener más de 4 cuadros de referencia que podrían no ser manejados por un decodificador antiguo.
Ely
-acodec libmp3lameno funciona para mi Para habilitar el audio en mi iPad Mini, lo reconstruí ffmpegcon una nonfreevariante y lo usé libfdk_aaccodificado.
Vitaly S.
0

Esto es básico pero funcionó de inmediato para mí en un iPad 3

ffmpeg -i inputfile outputfile.m4v
yeeking
fuente