Jakie polecenie ffmpeg przekształciłoby wideo na iPada / iPhone'a / iPoda?

22

Obecnie używam pliku wsadowego, który (między innymi) uruchamia następujący wiersz poleceń handbrakecli do konwersji wideo:

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

Służy mi to od wielu lat, tworząc plik wideo, który jest mniejszy niż oryginał (dobry, gdy masz tylko 16 GB urządzeń), wygląda wystarczająco dobrze i działa na prawie każdym iPodzie, iPadzie i iPhonie, na którym go włożyłem.

Jednak z czasem handbrakecli stara się konwertować coraz więcej filmów do tego stopnia, że ​​muszę poszukać alternatywy. Nie pomaga w tym fakt, że dzienniki nie zawierają absolutnie żadnych informacji o tym, dlaczego się zawiesił. Na przykład ten film wideo uległ awarii w wyniku konwersji o 71% i są to ostatnie 4 linie:

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

Niezbyt pomocny.

Patrzyłem na użycie ffmpeg jako alternatywy, ale wszystkie przykłady, które widziałem w Internecie, wykonują co najmniej jedną z następujących czynności:

  1. Nie działa (opcje wiersza poleceń nie są rozpoznawane) - często!
  2. Rezultatem jest plik większy niż oryginał - bardzo często!
  3. Zniekształć obraz, zwłaszcza w przypadku konwersji nieoczekiwanego rozmiaru filmu (np. PAL niepanoramiczny)
  4. Usuń dźwięk
  5. Rezultatem jest wideo, którego iPhone, iPod lub iPad nie będą odtwarzać

Czy istnieje przyzwoita, uniwersalna linia komend ffmepg, która sprawi, że każde wideo będzie działało szczęśliwie na wszystkich urządzeniach Apple, a także osiągnie zmniejszenie rozmiaru pliku?

Punkty bonusowe, jeśli zmniejszą (ale nie zniekształcą) również wideo w rozdzielczości 720p.

Richard
źródło
Kiedy ostatni raz zaktualizowałeś handbrakecli?
Gene,
Dość często w nadziei, że błąd został naprawiony. Obecnie korzystam z wersji 0.10.2 (2015060900) - MinGW x86_64.
Richard,
Miałem video mp4, że odmówili pracy na iOS, a ta była najkrótsza komenda mógłbym wyczarować że naprawił: ffmpeg -i broken_video.mp4 -pix_fmt yuv420p working_video.mp4
Bemmu

Odpowiedzi:

29

Oto moje zdanie na ten temat. Jako cel wezmę iPhone'a 4 lub nowszy (w tym wszystkie iPady): H.264 Profil główny, poziom 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

Wartości, które możesz zmienić:

  • -crf 23: Stałe ustawienie jakości. Wyższa wartość = niższa jakość, mniejszy plik. Niższa = lepsza jakość, większy plik. Wartości rozsądne wynoszą [18–24]
  • -preset medium: Jeśli jest to zbyt wolne, użyj szybszego ustawienia wstępnego. Jeśli masz na to cierpliwość, użyj wolniejszego. Zobacz tutaj, aby uzyskać więcej informacji.
  • -acodec copy: Próbuje skopiować ścieżkę audio do kontenera MP4. Jeśli nie można go skopiować, musisz ponownie go zakodować w AAC / MP3 / AC3 ​​... np-acodec libmp3lame

Jeśli Twój film jest większy niż 720p, dodaj następujące dane po danych wejściowych:

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

Spowoduje to zmniejszenie wideo do 720p i zachowanie proporcji. Algorytmem skalowania będzie lanczos, ponieważ jest znacznie lepszy niż domyślny.

Ely
źródło
3
Zamiast tego możesz użyć -vf "scale=-2:720:flags=lanczos". Dodawanie -movflags +faststartjest zalecane, jeśli plik będzie przeglądany przez pobieranie progresywne, na przykład w przeglądarce (a jeśli nie, opcja na pewno nie zaszkodzi).
llogan
Kompilacja Zeranoe, której używam, nie obsługuje x264-params. Bez samodzielnego budowania, czy istnieje sposób na obejście tego problemu?
Richard
Sam używam wersji Zeranoe i -x264-paramsdziała dobrze. Jesteś pewien, że czegoś nie przegapiłeś? Opcja ta polega głównie na bezpieczeństwie, aby uniknąć posiadania więcej niż 4 ramek odniesienia, które mogą nie być obsługiwane przez starszy dekoder.
Ely
-acodec libmp3lamenie działa dla mnie Aby włączyć dźwięk na moim iPad Mini I przebudowany ffmpegz nonfreewariantem i używane libfdk_aackodowane.
Witalij S.
0

Jest to podstawowe, ale zadziałało od razu na iPadzie 3

ffmpeg -i inputfile outputfile.m4v
yeeking
źródło