FFMPEG เพิ่มคีย์เฟรมโดยไม่ต้องเข้ารหัสใหม่


1

ฉันจะเพิ่มคีย์เฟรมสำหรับไฟล์ FLV โดยไม่ต้องเข้ารหัสใหม่ได้อย่างไร ฉันพยายามใช้คำสั่งนี้ แต่ไม่ทำอะไรเลย:

ffmpeg -i file.flv  -vcodec copy -acodec copy -g 0 -y tmp.flv && yamdi -i tmp.flv -o out.flv

ผลลัพธ์ (แหล่งที่มาและสิ่งนี้) ไม่สามารถค้นหาได้อย่างถูกต้องด้วยเครื่องเล่นแฟลช ฉันมี flv จำนวนมากเพื่อ "ซ่อมแซม"

คำตอบ:


9

ฉันจะเพิ่มคีย์เฟรมสำหรับไฟล์ FLV โดยไม่ต้องเข้ารหัสใหม่ได้อย่างไร

คุณทำไม่ได้

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

ในการเปลี่ยน P- หรือ B-frame เป็น I-frame คุณจะต้องถอดรหัสแล้วเขียนวิดีโอสตรีมอีกครั้ง ดังนั้นคุณไม่สามารถเพิ่มคีย์เฟรมได้โดยไม่ต้องเข้ารหัสใหม่

ดูที่คู่มือการเข้ารหัส x264บนffmpeg wikiสำหรับเคล็ดลับในการรับรหัสที่ดูดี


1

เมื่อคุณทำเช่น-vcodec copyนั้นคุณกำลังคัดลอกตัวแปลงสัญญาณวิดีโอทั้งหมด จากนั้นไม่มีพารามิเตอร์ที่สามารถส่งผลกระทบต่อวิดีโอดังนั้นขนาด GOP จะไม่ถูกวิเคราะห์อีก

ลองใช้ gopsize โดยไม่ใช้ตัวแปลงสัญญาณวิดีโอ:

ffmpeg -i file.flv -acodec copy -g 1 -sameq -y tmp.flv

หมายเหตุ-sameqพารามิเตอร์หมายถึงควอไลเซอร์เดียวกันซึ่งควรใช้เฉพาะเมื่อคุณกำลังถอดรหัสและเข้ารหัสโดยใช้ตัวแปลงสัญญาณเดียวกัน (เช่น MPEG-2 เป็น MPEG-2) เช่นในกรณีที่คุณไม่ต้องการเปลี่ยนตัวแปลงสัญญาณ


มันทำให้ไฟล์มีขนาดใหญ่ขึ้นด้วยคุณภาพที่ผิด :( ดังนั้นจึงไม่มีวิธีที่ไม่มีการเข้ารหัสซ้ำหรือไม่
Zoltán

จริงไฟล์นี้ใหญ่กว่าเนื่องจาก I-frames เป็นภาพ JPEG จริง ๆ (เรียงลำดับ) คีย์เฟรมอื่น ๆ คือการคาดการณ์เพื่อสร้างรูปภาพเพื่อลดขนาดไฟล์ และไม่ต้องเปลี่ยนรหัสใหม่ถ้าคุณเปลี่ยนขนาด GOP หากคุณเห็นการสูญเสียคุณภาพคุณต้องปรับตัวคูณคุณภาพ นี่เป็นกรณีเดียวที่คุณสามารถใช้-sameqพารามิเตอร์ได้เนื่องจากคุณจะใช้ตัวแปลงสัญญาณเดียวกัน
Nick van Tilborg

เหตุผลที่คำสั่งนี้จะให้ผลลัพธ์ที่ไม่ดีเป็นเพราะการตั้งค่าเริ่มต้นที่น่ากลัวของ ffmpeg ถ้าคุณใช้-c:v libx264 -crf 22หรือสิ่งที่คล้ายกันคุณจะได้รับภาพที่ดีมอง (ดูการเชื่อมโยงในคำตอบของฉันสำหรับข้อมูลเพิ่มเติม)
evilsoup

@NickvanTilborg IIRC เวอร์ชันใหม่กว่าถูกปิดการใช้งานอย่างชัดเจน-sameqเนื่องจากมันถูกเข้าใจผิดว่าเป็น "คุณภาพเดียวกัน" คุณรู้หรือไม่ว่าการแทนที่อยู่ในเวอร์ชั่นที่ใหม่กว่า?
Alvin Wong

@AlvinWong ไม่มีการแทนที่-sameqเพราะคนส่วนใหญ่ใช้ในทางที่ผิดและมันก็ทำงานไม่ถูกต้อง ดู: ตัวเลือก“ sameq” หรือ“ same_quant” ใน FFmpeg คืออะไร มันหมายถึง "คุณภาพเดียวกัน" หรือไม่?
slhck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.