บรรทัดคำสั่ง ffmpeg ใดที่ทำให้วิดีโอเข้ากันได้กับทุกอุปกรณ์มากขึ้น


15

ดังนั้นฉันจึงมีผู้ใช้ที่บอกว่าวิดีโอ H264 ของ MP4 ไม่เล่นเสียงบน IPad ของ Apple และฉันก็พยายามที่จะรับวิดีโอ MP4 เพื่อเล่นบน Android เช่นกัน

มีสองบรรทัดคำสั่งต่างกันบรรทัดคำสั่งใดที่ฉันควรจะใช้

-profile:v baseline -level 3.0

และ:

-vpre baseline

ฉันควรใช้อะไรที่จะทำให้มันใช้ได้กับทุกอุปกรณ์?

ฉันได้อ่านมันอาจเป็นบิตเรตเสียงของฉันบิตเรตเสียงปัจจุบันคือ

-ab 192k

บางทีฉันควรลดมันลงไป

-ab 160k

บรรทัดคำสั่งที่ใช้ในการเข้ารหัสเสียง MP3 เป็นไฟล์ MP4

"C:/server/ffmpeg/bin/ffmpeg.exe" -y -i Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/54bbf30bb11a0f6b9dc832114c26fd29.mp4 -strict experimental -acodec libmp3lame -ar 44100 -ac 2 -ab 192k -s 480x360 -aspect 16:9 -r 24000/1001 -vcodec libx264 -b:v 1000k -minrate 800k -maxrate 1000k -bufsize 800K -crf 18 -preset veryslow -f mp4 -threads 0 -movflags +faststart Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/98382d43d31d4ff91ea44cb2aa1bbc49.mp4 2>&1

คำตอบ:


26

ก่อนอื่นคุณควรเข้าใจความแตกต่างระหว่างการใช้โปรไฟล์ FFmpeg และตัวเลือกบรรทัดคำสั่งโดยตรง -vpreใช้.ffpresetไฟล์ที่อยู่ใน/usr/share/ffmpeg/หรือที่ใดก็ตามที่ติดตั้ง ffmpeg เป็นชุดของ คู่ตัวเลือก = ค่าและในกรณีของคุณคุณจะต้องกำหนดด้วยตัวคุณเอง (อย่างน้อยฉันก็ไม่ทราบbaselineค่าที่ตั้งไว้ล่วงหน้าที่ส่งมาพร้อมกับ ffmpeg)

ฉันจะแนะนำไม่ให้ใช้การตั้งค่าล่วงหน้าเว้นแต่คุณจะสร้างขึ้นเองและรู้ว่าตัวเลือกบรรทัดคำสั่งนั้นมีไว้เพื่ออะไร ฉันใช้ ffmpeg มาหลายปีแล้วและฉันไม่เคยใช้สถานีที่ตั้งไว้ล่วงหน้า - ฉันไม่เคยต้อง

บรรทัดคำสั่งทั่วไปสำหรับการสร้างวิดีโอ H.264 ที่เข้ากันได้กับอุปกรณ์ส่วนใหญ่จะเป็น:

ffmpeg -i <input> \
  -c:v libx264 -crf 23 -profile:v baseline -level 3.0 -pix_fmt yuv420p \
  -c:a aac -ac 2 -b:a 128k \
  -movflags faststart \
  output.mp4

หมายเหตุบางส่วน:

  • H.264 / AAC เป็นชุดค่าผสมที่ดีที่สุดสำหรับการสนับสนุนใน HTML5 เบราว์เซอร์ที่ไม่มีตัวถอดรหัส H.264 อย่างไรก็ตามจะต้องใช้วิดีโอ VP8 / Vorbis เช่นกัน สำหรับตัวอย่างบรรทัดคำสั่งให้ดูคำตอบนี้ ดูหน้าสนับสนุนเบราว์เซอร์ของ Wikipedia สำหรับตัวแปลงสัญญาณอื่น ๆ

  • H.264 ยังใช้งานได้ดีกับอุปกรณ์มือถือ

  • -profile:v baselineและ-level 3.0ตัวเลือกที่มีความจำเป็นเพียงสำหรับอุปกรณ์มือถือเก่าที่ไม่สามารถจัดการกับคุณสมบัติ CPU สูงของ H.264 -profile:v mainคุณมักจะสามารถออกจากเหล่านี้ออกหรือใช้แทน

  • CRF ตั้งค่าคุณภาพ (18–28 เป็นช่วงที่เหมาะสมลดลงหมายถึงคุณภาพที่ดีขึ้น) แน่นอนคุณสามารถใช้อัตราบิตคงที่ด้วย-b:v 1000kหรือคล้ายกัน เลือกบิตเรตที่ตรงกับความละเอียดของวิดีโอ อุปกรณ์ที่ใช้พลังงานต่ำบางตัวอาจไม่สามารถจัดการบิตเรตที่สูงเกินความจำเป็นได้

  • -movflags faststartตัวเลือกที่เป็นสิ่งจำเป็นสำหรับการสตรีมเพราะมันย้ายข้อมูลเมตาภาชนะที่เริ่มต้นของแฟ้มแทนการทิ้งไว้ในตอนท้าย วิธีนี้จะช่วยให้การเล่นเริ่มต้นทันทีแทนที่จะต้องรอให้โหลดไฟล์ทั้งหมด

อย่างไรก็ตามทุกอย่างลงมาเพื่อค้นหาตัวส่วนร่วมที่ต่ำที่สุดสำหรับอุปกรณ์ทั้งหมดที่คุณกำหนดเป้าหมายซึ่งอาจไม่มีอยู่จริง แน่นอนว่าคุณไม่ต้องการใช้ตัวแปลงสัญญาณอื่น ๆ (นั่นคือแย่กว่า ) กว่า H.264 ในความเป็นจริงมันก็ไม่ควรที่จะเสนอวิดีโอที่เข้ารหัสพื้นฐานให้กับลูกค้าซึ่งสามารถถอดรหัสโปรไฟล์หลักหรือโปรไฟล์สูง คุณจะแลกเปลี่ยนคุณภาพกับความซับซ้อนของการถอดรหัสที่ลดลง

จากประสบการณ์ของฉันอุปกรณ์ Android สามารถเล่น Baseline H.264 พร้อมเสียง AAC-LC ในคอนเทนเนอร์ MP4 ได้ดี ฉันไม่เคยมีปัญหากับมัน ในความเป็นจริงอุปกรณ์บางอย่างอาจเล่นโปรไฟล์ที่สูงกว่าเช่นกันแม้ว่าจะไม่ได้รับการสนับสนุนอย่างเป็นทางการ โดยทั่วไปแล้ว iOS ยังรองรับ Baseline H.264 แต่คุณสามารถใช้โปรไฟล์หลักในอุปกรณ์บางอย่างได้เช่นกัน ดูโพสต์นี้ (ซึ่งค่อนข้างล้าสมัย) สำหรับคำแนะนำบางอย่าง

หากคุณมีผู้ใช้ที่มีปัญหาการเล่นคุณจะต้องค้นหาว่าวิดีโอใดเป็นสาเหตุของปัญหาและรับรายละเอียดเพิ่มเติมเกี่ยวกับซอฟต์แวร์และฮาร์ดแวร์ของผู้เล่นที่พวกเขากำลังใช้ จากนั้นเราสามารถพูดคุยเกี่ยวกับการแก้ไขปัญหาเฉพาะกรณี


1
ขอบคุณสำหรับคำตอบที่มีรายละเอียดฉันยังคงอ่านมันต่อไป :) นอกจากนี้ฉันยังเข้ารหัสด้วย -acodec libmp3lame -ab 160k และผู้ใช้ที่ใช้อุปกรณ์ ipad apple บอกว่าพวกเขาสามารถดูวิดีโอได้ แต่ไม่ได้ยินเสียงดังนั้นฉันคิดว่ามันเป็นเรื่องที่เกี่ยวข้อง ตัวแปลงสัญญาณเสียงหรือบิตเรต ผู้ใช้ Android และ Windows บอกว่าใช้ได้ดีและมีออดิโอสตรีมวิดีโอดังนั้นฉันไม่แน่ใจว่าทำไมใช้ libmp3lame แทน aac จะทำให้ผู้ใช้แอปเปิ้ลไม่มีเสียงในวิดีโอ
C0nw0nk

ฉันไม่ค่อยเห็นเสียง MP3 ที่ใช้ในภาชนะ MP4 บางที AAC อาจเป็นทางเลือกที่ปลอดภัยกว่า
slhck

ดีฉันแค่ใช้ MP3 เพราะฉันยังคงได้รับ bit_rate ข้อผิดพลาดความกว้างความสูงด้วย aac ฉันเปลี่ยนเป็น libmp3lame และข้อผิดพลาดเหล่านั้นหยุดแล้วผู้ใช้แอปเปิ้ลบอกว่าพวกเขาไม่มีเสียง แต่ทุกคนสามารถดูไฟล์เดียวกันได้ ในอุปกรณ์อื่น ๆ ทั้งหมดฉันอาจพบข้อบกพร่องที่รู้ :( และตามแอปเปิ้ล MP3 ควรเป็นdeveloper.apple.com/library/mac/documentation/
C0nw0nk

@ user2068371 ลิงก์นั้นหมายถึงสตรีมการส่งผ่าน MPEG-2 ไม่ใช่รูปแบบคอนเทนเนอร์ MP4
llogan

1
@ user2068371 ฉันไม่เคยมีปัญหากับ MediaElementjs H.264 และ MP3 จะไม่ได้รับการสนับสนุนในเบราว์เซอร์ สำหรับวิดีโอ HTML5 โดยเฉพาะให้ใช้ H.264 / AAC และ VP8 / Vorbis เป็นทางเลือกเสมอ หากคุณมีปัญหากับการแปลง AAC โปรดถามคำถามใหม่เกี่ยวกับเรื่องนั้นและตรวจสอบให้แน่ใจว่าได้รวมเอาท์พุทบรรทัดคำสั่งแบบเต็มเช่นกัน
slhck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.