Bagaimana saya bisa mengatur level profil h.264 dengan ffmpeg?

16

Saya memiliki film (m4v / h.264 / AAC) yang diputar dengan baik di Mac saya, tetapi saya baru-baru ini menemukan bahwa itu tidak akan diputar di Apple TV3 saya. Setelah melihat properti dari file film ini saya melihat bahwa ia memiliki profil [email protected] tetapi Apple TV3 hanya mendukung hingga [email protected]. Saya pikir satu-satunya properti yang membuat video ini tidak kompatibel adalah laju bit video maks, semua properti lainnya sepertinya didukung di [email protected].

Bagaimana saya bisa menggunakan ffmpeg untuk menurunkan versi video ini ke [email protected]?

Atau apakah saya harus mengubah properti aktual (bit rate maksimum) yang menjadikan video ini 4.1 bukannya 4.0? Saya khawatir jika saya hanya mengubah bit rate, meskipun file tersebut kemudian akan kompatibel dengan [email protected] masih akan 'ditandai' sebagai [email protected] dan karena itu masih tidak akan bermain di Apple TV3 saya.

Sam
sumber

Jawaban:

22

Saat menyandikan libx264, Anda dapat mengatur profil dan level H.264 dengan:

  • -profile:v- salah satu high,, mainatau baseline(dan lainnya, tetapi ini tidak relevan di sini)
  • -level:v- sebagaimana didefinisikan dalam Lampiran A dari standar H.264, misalnya 4.0,.

Sebagai contoh:

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

Di sini kami baru saja menyalin aliran audio karena itu tidak akan terpengaruh.

Output akan memiliki profil dan level yang benar diatur dalam metadata-nya. Anda dapat memeriksa ini saat penyandian, di mana x264dikatakan sesuatu seperti:

[libx264 @ 0x7fb26103a000] profile High, level 4.0

MediaInfo juga dapat membantu Anda menganalisis detail wadah dan codec.

Tentu saja, pengodean ulang video akan menurunkan kualitasnya hingga taraf tertentu, mengingat Anda menerapkan konversi yang hilang lagi. Coba atur -crfopsi untuk memengaruhi parameter kualitas konstan. Nilai default di sini adalah 23, sedangkan nilai antara 18 dan 28 dianggap waras. Lebih rendah berarti kualitas yang lebih baik. Jika input Anda memiliki bit rate hingga 65.000 kBit / s, kemungkinan itu masih akan terlihat cukup baik setelah konversi sekalipun.

slhck
sumber
1
Itu bekerja dengan baik. Sayangnya itu kehilangan sebagian metadata tetapi video sebenarnya tidak memiliki perubahan nyata dalam kualitas. Karena ketertarikan, apakah perintah berikut ini akan mencapai hal yang sama? ffmpeg -i input.mp4 -vcodec x264 -vprofile high -vlevel 4.0 -acodec copy output.mp4
Sam
Ya, -vopsi tersebut adalah alias :v. Metadata apa yang hilang dari Anda?
slhck
Saya pikir itu mungkin hanya karya seni yang hilang. Saya tidak tahu apakah itu secara teknis dianggap metadata ... Apakah karya seni itu sebenarnya terdapat di dalam file? Saya tidak memeriksa semuanya sebelum saya menambahkan keseluruhannya lagi.
Sam
Saya sekarang memiliki file berbeda dengan masalah serupa. Ini adalah level profil yang salah tetapi spesifikasi lainnya sepertinya kompatibel dengan level yang saya butuhkan (4.0). Jika saya menggunakan perintah yang Anda berikan di atas, akankah data tidak tersentuh kecuali tidak sesuai dengan tingkat profil yang dimasukkan? Pada dasarnya, saya tidak ingin ffmpeg menyentuh salah satu data selain dari tag yang menyebutkan profil dan level apa. Apakah itu mungkin atau apakah akan mengatur semua nilai (nitrat, framerate dll) ke nilai yang telah ditetapkan?
Sam
2
Saya hanya menemukan cara untuk mencapai ini. Subler sebenarnya memiliki opsi, ketika Anda memilih aliran video, untuk mengubah profil dan level agar kompatibel dengan perangkat tertentu. Ini memberitahu Anda untuk memastikan bahwa video itu kompatibel dengan profil yang Anda atur jadi saya tidak berpikir itu melakukan encoding ulang, itu hanya harus mengubah metadata.
Sam
1

Mengacu pada komentar Anda , coba perintah ini:

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

Bersulang

Riccardo Volpe
sumber