Jak ustawić poziom profilu h.264 za pomocą ffmpeg?


16

Mam film (m4v / h.264 / AAC), który dobrze gra na moim komputerze Mac, ale niedawno odkryłem, że nie będzie on odtwarzany na moim Apple TV3. Po przejrzeniu właściwości tego pliku filmowego widzę, że ma on profil High@4.1, ale Apple TV3 obsługuje tylko High@4.0. Myślę, że jedyną właściwością, która powoduje niezgodność tego wideo, jest maksymalna przepływność wideo, wszystkie inne właściwości wyglądają tak, jakby były obsługiwane w High@4.0.

Jak mogę użyć ffmpeg, aby obniżyć wersję tego filmu do High@4.0?

Czy też muszę zamiast tego zmienić rzeczywistą właściwość (maksymalna przepływność), która sprawia, że ​​ten film 4.1 zamiast 4.0? Martwię się, że jeśli po prostu zmienię szybkość transmisji, mimo że plik byłby zgodny z High@4.0, nadal byłby „oznaczony” jako High@4.1, a zatem nadal nie byłby odtwarzany na moim Apple TV3.

Odpowiedzi:


22

Podczas kodowania za pomocą libx264możesz ustawić profil H.264 i poziom za pomocą:

  • -profile:v- jeden z high, mainlub baseline(i inne, ale tutaj nie ma to znaczenia)
  • -level:v- jak określono w załączniku A do normy H.264, np 4.0.

Na przykład:

ffmpeg -i input.mp4 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy output.mp4

Właśnie skopiowaliśmy strumień audio, ponieważ nie będzie to miało wpływu.

Dane wyjściowe będą miały poprawny profil i poziom ustawiony w swoich metadanych. Możesz to sprawdzić podczas kodowania, gdy x264mówi coś takiego:

[libx264 @ 0x7fb26103a000] profile High, level 4.0

MediaInfo może również pomóc w analizie szczegółów kontenera i kodeka.

Oczywiście ponowne kodowanie wideo do pewnego stopnia obniży jego jakość, biorąc pod uwagę, że ponownie stosujesz konwersję stratną. Spróbuj ustawić -crfopcję wpływania na stały parametr jakości. Wartość domyślna to 23, a wartości od 18 do 28 są uważane za zdrowe. Niższa oznacza lepszą jakość. Jeśli twój sygnał wejściowy ma szybkość bitów do 65 000 kBit / s, są szanse, że nadal będzie wyglądał całkiem dobrze po konwersji.


1
To działało dobrze. Niestety stracił część metadanych, ale rzeczywiste wideo nie miało zauważalnej zmiany jakości. Czy w wyniku zainteresowania następujące polecenie osiągnęłoby to samo? ffmpeg -i input.mp4 -vcodec x264 -vprofile high -vlevel 4.0 -acodec copy output.mp4
Sam

Tak, dostępne -vopcje to pseudonimy :v. Jakie metadane straciłeś?
slhck 13.03.13

Myślę, że to mogła być tylko grafika, która zaginęła. Nie wiem, czy jest to technicznie uważane za metadane ... Czy kompozycja rzeczywiście zawiera się w pliku? Nie sprawdziłem wszystkiego innego, zanim ponownie dodałem do tego całość.
Sam

Mam teraz inny plik z podobnym problemem. Jest to zły poziom profilu, ale reszta specyfikacji wydaje się być zgodna z moim wymaganym poziomem (4.0). Jeśli użyję poleceń podanych powyżej, czy dane pozostaną nietknięte, chyba że będą niezgodne z wprowadzonym poziomem profilu? Zasadniczo nie chcę, aby ffmpeg dotykał danych innych niż znacznik informujący o profilu i poziomie. Czy to możliwe, czy zamierza ustawić wszystkie wartości (azotan, ilość klatek na sekundę itp.) Na ustawione wartości?
Sam

2
Właśnie natknąłem się na sposób, aby to osiągnąć. Po wybraniu strumienia wideo Subler ma opcję zmiany profilu i poziomu, aby był zgodny z niektórymi urządzeniami. Mówi ci, aby upewnić się, że wideo jest kompatybilne z ustawionym profilem, więc nie sądzę, że dokonuje żadnego ponownego kodowania, wystarczy zmienić metadane.
Sam

1

W odniesieniu do komentarza wypróbuj to polecenie:

ffmpeg -i input.mp4 -map 1 -c:v libx264 -profile:v high -level:v 4.0 -c:a copy \
# copies all global metadata from input.mp4 to output.mp4
-map_metadata 0 \
# copies video stream metadata from input.mp4 to output.mp4
-map_metadata:s:v 0:s:v \
# copies audio stream metadata from input.mp4 to output.mp4
-map_metadata:s:a 0:s:a \
output.mp4

Twoje zdrowie

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.