ffmpeg
สามารถใช้เชื่อมไฟล์เข้าด้วยกัน :
หากคุณมีไฟล์สื่อที่มีพารามิเตอร์ตัวแปลงสัญญาณและตัวแปลงสัญญาณเดียวกันคุณสามารถเชื่อมต่อพวกเขา [... ]
(เน้นที่เหมือง)เจตนาของฉัน1คือผลิตไฟล์สื่อที่มีตัวแปลงสัญญาณและพารามิเตอร์เดียวกันเพื่อให้ฉันสามารถใช้ประโยชน์จาก concat ได้โดยไม่ต้องเข้ารหัสซ้ำอีกต่อไป
บทนำ:
ฉันมีไฟล์ที่ฉันต้องการตัดและเก็บส่วนที่มีประโยชน์ไว้ ฉันได้เขียนสคริปต์ไพ ธ อนเพื่อค้นหาคีย์เฟรมที่ใกล้ที่สุดไปยังจุดตัดที่ต้องการและตัดตรงนั้นเนื่องจากเมื่อทำการคัดลอกสตรีม ffmpeg สามารถใช้ I-frames ได้เท่านั้น:
การใช้ -ss เป็นตัวเลือกอินพุตพร้อมกับสำเนา -c: v อาจไม่ถูกต้องเนื่องจาก ffmpeg ถูกบังคับให้ใช้ / แยกใน i-frames เท่านั้น
มันเกิดขึ้นแยกไม่ได้เกิดขึ้นที่ว่าช่วงเวลาที่เหมาะสม แต่ใกล้พอสำหรับช่วงเวลาที่ผมสามารถมุ่งเน้นในส่วนของสมการอื่น ถ้าฉันใช้concat
demuxer ณ จุดนี้ส่วนต่าง ๆ เข้าด้วยกันอย่างสมบูรณ์ - ดีมาก!
อย่างไรก็ตามฉันต้องการให้มีการเปลี่ยนแปลงระหว่างเซ็กเมนต์เหล่านี้อย่างราบรื่นดังนั้นฉันจึงแบ่งเซกเมนต์เหล่านี้เพิ่มเติมเพื่อให้สามารถใช้ปลายสั้นเพื่อสร้างการเปลี่ยนแปลงไขว้โดยไม่ต้องเข้ารหัสไฟล์ทั้งชุดอีกครั้ง
แผนภาพพื้นฐานน่าจะช่วยอธิบายสิ่งนี้ได้:
[111AAAA111BBBBB111111CCCCCCC1111DDDDD111] | (original file)
[AAAA] [BBBBB] [CCCCCCC] [DDDDD] | (desired clips extracted)
[AAA] [A][B] [BBB] [B][C] [CCCCC] [C][D] [DDDD]| (split ends from clips)
[AAA][ab][BBB][bc][CCCCC][cd][DDD] | (transitions between short ends)
[AAAabBBBbcCCCCCcdDDD] | (intended output)
ปัญหา:
ที่นี่ฉันได้ไป เมื่อฉันใช้ffmpeg
's concat
demuxer ที่จะเข้าร่วมคลิปดังกล่าวข้างต้นที่ฉันได้รับภาพและเสียงสิ่งประดิษฐ์อย่างมีนัยสำคัญในการเล่น ฉันเดาว่ามีความไม่ตรงกันในพารามิเตอร์ตัวแปลงสัญญาณตามที่ระบุไว้เป็นวิธีที่จำเป็นขึ้นไปด้านบนของคำถามนี้ ดังนั้นการตรวจสอบวิดีโอด้วยการffprobe
ให้:
$ ffprobe -i ab-transition.mkv 2>&1 | grep Stream.*Video ; ffprobe -i B.mkv 2>&1 | grep Stream.*Video
Stream #0:0: Video: h264 (Main), yuv420p(tv, bt709/bt709/iec61966-2-1), 1280x720, SAR 1:1 DAR 16:9, 62.50 fps, 62.50 tbr, 1k tbn, 120 tbc (default)
Stream #0:0: Video: h264 (Main), yuv420p(tv, bt709/bt709/iec61966-2-1), 1280x720 [SAR 1:1 DAR 16:9], 62.50 fps, 62.50 tbr, 1k tbn, 125 tbc (default)
(ฉันได้ข้ามเอาท์พุทสตรีมเสียงเป็นสตรีมที่มีพารามิเตอร์เดียวกันอย่างเห็นได้ชัด แต่เสียงเข้าร่วมไม่ถูกต้อง)
มีความแตกต่าง ฉันใช้-show_streams
เพื่อรับข้อมูลรายละเอียดเพิ่มเติมซึ่งมีอยู่ที่http://pastebin.com/4vcnDYtj (บรรทัดว่างเดี่ยวแยก 2 เอาต์พุต) diff
ไอเอ็นจีเอาท์พุทให้:
7c7
< codec_time_base=1/120
---
> codec_time_base=1/125
70,71c70,71
< start_pts=12
< start_time=0.012000
---
> start_pts=11
> start_time=0.011000
ปรับปรุง:
ฉันพบตัวเลือกและพารามิเตอร์ที่ตรงกันสำหรับทุกสิ่งที่ฉันเห็นยกเว้นฐานเวลาตัวแปลงสัญญาณ (tbc) มีการตั้งค่าที่จะให้ฉันตั้ง codec_time_base (tbc)หรือไม่ การตั้งค่า-r
ไม่มีผล
อัปเดต 2:ความกลัวคำถามนี้มีความเฉพาะเจาะจงสำหรับ SU มากเกินไปฉันถามคำถามของรายชื่อผู้รับจดหมาย ffmpeg- น่าเสียดาย-time_base
ที่ตัวเลือกการเข้ารหัสไม่เหมาะสมในกรณีนี้:
นี่เป็นตัวเลือกสำหรับตัวเข้ารหัส FFmpeg- ภายในที่คุณพยายามใช้สำหรับตัวเข้ารหัสภายนอก (x264)
และน่าเสียดายที่เมื่อฉันถามถึงความเป็นไปได้ทั่วไปคำตอบก็คือ
ฉันไม่คิดว่ามันเป็นไปได้
ฉันได้ขอคำชี้แจงและความเป็นไปได้โดยรอบซอฟต์แวร์การเข้ารหัสดั้งเดิม - ในกรณีนี้OBS
- ซึ่งอาจมีความยืดหยุ่นน้อยกว่าในตัวเลือกข้อมูลจำเพาะมากกว่าffmpeg
เนื่องจากต้องตรงกับข้อกำหนดรูปแบบสดของผู้บริโภคสตรีม (Twitch) ฉันยังไม่ได้รับการตอบกลับจากรายชื่อผู้รับจดหมาย แต่ได้ถามในฟอรัม OBS ด้วยเช่นกัน
ยิ่งไปกว่านั้นการควบคุมสำหรับสิ่งเหล่านี้ทำให้ฉันสามารถใช้concat
demuxer ffmpeg
เพื่อเข้าร่วมสิ่งเหล่านี้ด้วยกันโดยไม่ต้องใช้กระบวนการเข้ารหัสแบบยาว ? ขอบคุณมากล่วงหน้า
(ฉันตระหนักว่านี่เป็นข้อความที่มีผนังและครึ่งดังนั้นการเพิ่มเติมการลบหรือคำแนะนำในการชี้แจงยินดีต้อนรับแน่นอนฉันจะเชื่อมโยงไปยังข้อมูลที่เป็นทางการมากขึ้น แต่เป็น <10 ตัวแทนฉันไม่สามารถรวมมากกว่า 2 ลิงค์! )
1 : สำหรับบริบทเพิ่มเติมให้ดูคำถามที่เกี่ยวข้องของฉัน: จะเข้าร่วมวิดีโอคลิปได้อย่างมีประสิทธิภาพและอัตโนมัติโดยใช้ช่วงการเปลี่ยนภาพสั้น ๆ อย่างไร
settb
ตัวกรองซึ่งอาจจะมีมูลค่าพยายามเพราะมันจะถูกนำไปใช้นอกเข้ารหัส x264 ffmpeg input.ext -vf "settb=expr=1/125" -c:v libx264, etc. output.ext
- หรือมีการกล่าวถึง / ลองใช้ในการเดินทางของคุณแล้วหรือยัง?
-copyinkf
(ซึ่งจะรวมเฟรมที่ไม่ใช่คีย์หลักใน-c copy
เอาต์พุต) อาจช่วยในการวางตลาดครั้งสุดท้ายและถ้ามันคุ้มค่าที่จะบังคับให้คลิปการเปลี่ยนผ่านที่เข้ารหัสผ่านที่มีเหตุผลเข้าหาlibx264
กัน เช่นเดียวกับการทดลองลองสร้างคลิป "a" และ "b" ของคุณใหม่โดยใช้-copyinkf -c:v copy -c:a copy
ทรานส์ ใช้คลิปlibx264 -r 60
แล้วต่อสามตัวนั้นเข้าด้วยกันแล้วดูว่ามีความแตกต่างหรือไม่