ฉันจะแปลงsome.flv
หรือsome.avi
หรือsome.wmv
มี FFmpeg เพื่อให้แน่ใจว่าวิดีโอนี้จะสามารถเล่นได้และ seekable ในเจดับบลิว Player?
ฉันจะแปลงsome.flv
หรือsome.avi
หรือsome.wmv
มี FFmpeg เพื่อให้แน่ใจว่าวิดีโอนี้จะสามารถเล่นได้และ seekable ในเจดับบลิว Player?
คำตอบ:
นี่คือคำตอบสำหรับความคิดเห็นล่าสุดโดยคุณ @abrahab
คุณไม่จำเป็นต้องmp4box
ใช้ไฟล์เพื่อให้สามารถหลอกสตรีมผ่าน nginx ได้ โมดูลการสตรีมมิ่ง MP4 ดูแลโดยไม่คำนึงถึงตำแหน่งของ moov atoms ( mp4box
เลื่อน moov atom ไปที่ตำแหน่งเริ่มต้นของไฟล์)
ตอนนี้สำหรับข้อผิดพลาดเซิร์ฟเวอร์ 500 คุณใช้ตัวเลือก "-frag" กับ mp4box หรือไม่ โมดูลการสตรีม MP4 ไม่สามารถอ่านไฟล์ MP4 ที่กระจัดกระจายได้ การใช้ประโยชน์จากmp4box
การสตรีมหลอกแบบดีคือการสอดแทรกวิดีโอเพื่อการค้นหาที่ดีขึ้น Moov atom shifting เป็นข้อได้เปรียบที่เพิ่มเข้ามา
ฉันทำสิ่งนี้กับmp4box
ไฟล์ที่เข้ารหัสด้วย FFmpeg เสมอ
MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4
สิ่งนี้จะแทรกไฟล์ MP4 เป็น 500 มิลลิวินาทีโดยปริยาย
โดยทั่วไปแล้วคุณต้องการสร้างวิดีโอ x264 ภายในคอนเทนเนอร์ MP4 ตัวเลือกนี้รองรับโดยทั่วไปอุปกรณ์และเบราว์เซอร์ใด ๆ
ต่อไปนี้ควรจะเพียงพอ ตรวจสอบให้แน่ใจว่าได้แทนที่ชื่ออินพุตและตัวเลือก CRF หลังตั้งค่าคุณภาพที่ค่าสติมีตั้งแต่ 19-25 - ต่ำกว่าหมายถึงคุณภาพที่ดีขึ้น แต่ยังบิตเรตที่สูงขึ้น:
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4
คุณยังสามารถใช้Handbrakeเพื่อเข้ารหัสหากคุณชอบวิธี GUI
faststart
ตัวเลือกตอนนี้สิ่งที่คุณต้องทำคือย้ายอะตอม MOOVของคอนเทนเนอร์ MP4 ไปยังจุดเริ่มต้น อะตอมนี้ (โดยพื้นฐานแล้วหน่วยของข้อมูลในคอนเทนเนอร์ MP4) จะมีข้อมูลเมตาสำคัญเกี่ยวกับสตรีมวิดีโอ / เสียง -movflags faststart
ควรทำอย่างนั้น
หากเวอร์ชัน FFmpeg ของคุณไม่มีตัวเลือกนี้ให้ลองอัปเกรด หากคุณไม่สามารถอัพเกรดได้คุณสามารถทำสิ่งเดียวกันด้วยเครื่องมือใด ๆ ด้านล่าง:
QTIndexSwapperแอปพลิเคชัน Adobe AIR
MP4Boxฟรีและโอเพ่นซอร์สเรียกใช้คำสั่งที่คล้ายกับต่อไปนี้ซึ่งคุณสามารถเปลี่ยนช่วงเวลา (ที่นี่ 500)
mp4box -inter 500 input.mp4
qt-faststart ใน Pythonซึ่งทำงานได้ทุกที่ที่ติดตั้ง Python
qtfaststart input.mp4
เกี่ยวกับมัน.
แน่นอนว่าสำหรับการสตรีมคุณอาจต้องการ จำกัด อัตราบิตให้อยู่ในขอบเขตที่แน่นอน คุณสามารถอ่านเพิ่มเติมเกี่ยวกับที่อยู่ในโพสต์บล็อกของฉันเกี่ยวกับวิธีการควบคุมอัตรา
ตัวอย่างเช่นโดยการเพิ่ม-maxrate 2M -bufsize 2M
ตัวเลือกการเข้ารหัสคุณ จำกัด การเข้ารหัสไว้ที่ 2 Mbit / s ซึ่งอาจเพียงพอสำหรับวิดีโอความละเอียด 720p บิตเรตที่ต้องการจะขึ้นอยู่กับความซับซ้อนของเนื้อหา การทดลองใช้และข้อผิดพลาดเกิดขึ้น
ffmpeg -i 1.flv -vcodec libx264 -f mp4 -an -g 1 -f mp4 -g 30 -level 3 new.mp4
แล้วmp4box
และ mp4 ไม่สามารถค้นหาและรายงาน nginx 500 internal server error
สำหรับพารามิเตอร์เริ่มต้นที่มากขึ้น0
เมื่อรหัสวิดีโอไม่มี-vcoded libx264
(coder mp4 เริ่มต้น) ไฟล์งานทั้งหมด (แต่ คุณภาพ! sick!) :( (ขออภัยตอนนี้ไม่อนุญาตให้
-movflags faststart
สิ่งที่ฉันต้องการ
คุณสามารถแปลง AVI หรือ MP4 ที่ไม่สามารถสตรีมได้เช่นกันโดยไม่ต้องเข้ารหัสทุกอย่างใหม่โดยทำสิ่งนี้:
ffmpeg -i INPUT.mp4 -c copy -movflags faststart STREAMABLE_OUTPUT.mp4
ไม่จำเป็นต้องเข้ารหัสอะไรอีกเพราะต้องย้าย moov atom
คุณสามารถลองกับ ffmpeg:
ffmpeg.exe -i "INPUT_FILE.AVI" -threads 2 -s 800x600 -r 25.00 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 2048k -async 1 -acodec pcm_s16le -ar 22050 -ac 1 -ab 128k -y "OUTPUT_FILE.mp4"
-acodec pcm_s16le
(ข้อผิดพลาด: Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
) เหตุผลที่ดีเช่น IETF ฉบับร่างเหตุใดจึงเลือกพารามิเตอร์เหล่านี้ดูเหมือนจะหายไป
MP4Box -isma -inter 500 Myvideo.mp4