ฉันจะตั้งค่าระดับโปรไฟล์ h.264 ด้วย ffmpeg ได้อย่างไร


16

ฉันมีภาพยนตร์ (m4v / h.264 / AAC) ซึ่งเล่นได้ดีบน Mac ของฉัน แต่ฉันเพิ่งค้นพบว่ามันจะไม่เล่นบน Apple TV3 ของฉัน หลังจากดูคุณสมบัติของไฟล์ภาพยนตร์นี้แล้วฉันเห็นว่ามันมีโปรไฟล์ High@4.1 แต่จะรองรับ sup@4.0 ของ Apple TV3 เพียงอย่างเดียวเท่านั้น ฉันคิดว่าคุณสมบัติเดียวที่ทำให้วิดีโอนี้ไม่สามารถทำงานร่วมกันได้คืออัตราบิตวิดีโอสูงสุดคุณสมบัติอื่น ๆ ทั้งหมดดูเหมือนว่าได้รับการสนับสนุนใน High@4.0

ฉันจะใช้ ffmpeg เพื่อดาวน์เกรดวิดีโอนี้เป็น High@4.0 ได้อย่างไร

หรือฉันต้องเปลี่ยนคุณสมบัติจริง (อัตราบิตสูงสุด) แทนวิดีโอ 4.1 แทน 4.0 หรือไม่ ฉันกังวลว่าถ้าฉันเพิ่งเปลี่ยนอัตราบิตแม้ว่าไฟล์นั้นจะเข้ากันได้กับ High@4.0 ก็จะยังคงเป็น 'แท็ก' เป็น High@4.1 และดังนั้นจึงยังคงไม่เล่นบน Apple TV3 ของฉัน

คำตอบ:


22

เมื่อเข้ารหัสด้วยlibx264คุณสามารถตั้งค่าโปรไฟล์และระดับ H.264 ด้วย:

  • -profile:v- หนึ่งในhigh, mainหรือbaseline(และอื่น ๆ , แต่นี่ไม่เกี่ยวข้องที่นี่)
  • -level:v- ตามที่กำหนดไว้ในภาคผนวกของมาตรฐาน H.264 4.0เช่น,

ตัวอย่างเช่น:

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

ที่นี่เราเพิ่งคัดลอกสตรีมเสียงเนื่องจากจะไม่ได้รับผลกระทบ

เอาต์พุตจะมีโปรไฟล์และระดับที่ถูกต้องในเมทาดาทา คุณสามารถตรวจสอบสิ่งนี้ได้ในขณะที่เข้ารหัสซึ่งมีข้อความx264ระบุว่า:

[libx264 @ 0x7fb26103a000] profile High, level 4.0

MediaInfoยังสามารถช่วยคุณวิเคราะห์รายละเอียดคอนเทนเนอร์และตัวแปลงสัญญาณ

แน่นอนว่าการเข้ารหัสวิดีโอใหม่จะทำให้คุณภาพของวิดีโอลดลงบ้างเนื่องจากคุณใช้การแปลงแบบเสียอีกครั้ง ลองตั้งค่า-crfตัวเลือกเพื่อให้มีผลกับพารามิเตอร์คุณภาพคงที่ ค่าเริ่มต้นที่นี่คือ 23 ในขณะที่ค่าระหว่าง 18 และ 28 จะถือว่ามีสติ ต่ำกว่าหมายถึงคุณภาพที่ดีขึ้น หากการป้อนข้อมูลของคุณมีอัตราบิตสูงถึง 65,000 kBit / s โอกาสที่มันจะยังคงค่อนข้างดีหลังจากการแปลง


1
มันใช้งานได้ดี น่าเสียดายที่ข้อมูลเมตาบางส่วนหายไป แต่วิดีโอจริงไม่มีการเปลี่ยนแปลงคุณภาพอย่างเห็นได้ชัด หากไม่สนใจคำสั่งต่อไปนี้จะประสบความสำเร็จในสิ่งเดียวกันหรือไม่ ffmpeg -i input.mp4 -vcodec x264 -vprofile high -vlevel 4.0 -acodec copy output.mp4
Sam

ใช่-vตัวเลือกคือนามแฝงของ:vคน คุณทำข้อมูลเมตาอะไร
slhck

ฉันคิดว่ามันอาจเป็นแค่งานศิลปะที่สูญหายไป ฉันไม่ทราบว่าเป็นข้อมูลทางเทคนิคหรือไม่ ... งานศิลปะมีอยู่ในไฟล์จริงหรือไม่ ฉันไม่ได้ตรวจสอบทุกอย่างก่อนที่ฉันจะเพิ่มทั้งหมดอีกครั้ง
Sam

ตอนนี้ฉันมีไฟล์อื่นที่มีปัญหาคล้ายกัน มันเป็นระดับโปรไฟล์ที่ไม่ถูกต้อง แต่รายละเอียดที่เหลือดูเหมือนจะเข้ากันได้กับระดับที่ต้องการของฉัน (4.0) หากฉันใช้คำสั่งที่คุณให้ไว้ข้างต้นข้อมูลนั้นจะไม่ถูกแตะต้องเว้นแต่ว่ามันไม่สอดคล้องกับระดับโปรไฟล์ที่ป้อนหรือไม่ โดยพื้นฐานแล้วฉันไม่ต้องการให้ ffmpeg แตะข้อมูลใด ๆ นอกเหนือจากแท็กที่ระบุว่าโปรไฟล์และระดับคืออะไร เป็นไปได้หรือว่าจะตั้งค่าทั้งหมด (ไนเตรต, framerate ฯลฯ ) เป็นค่าที่ตั้งไว้ล่วงหน้าหรือไม่
Sam

2
ฉันเพิ่งสะดุดกับวิธีการเพื่อให้บรรลุนี้ Subler มีตัวเลือกเมื่อคุณเลือกสตรีมวิดีโอเพื่อเปลี่ยนโปรไฟล์และระดับเพื่อให้เข้ากันได้กับอุปกรณ์บางอย่าง มันบอกให้คุณตรวจสอบให้แน่ใจว่าวิดีโอเข้ากันได้กับโปรไฟล์ที่คุณตั้งค่าดังนั้นฉันไม่คิดว่ามันจะทำการเข้ารหัสอีกครั้งมันจะต้องเปลี่ยนเมทาดาทา
Sam

1

อ้างอิงถึงความคิดเห็นของคุณลองคำสั่งนี้:

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

ไชโย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.