ใน ffmpeg จะหน่วงเวลาเฉพาะเสียงของวิดีโอ. mp4 โดยไม่แปลงเสียงได้อย่างไร


44

ในไฟล์. mp4 ของฉันความล่าช้าของเสียงคือ -3840 ms ฉันซิงค์ใน KMplayer และฉันไม่ต้องการใช้ MKVGUI เพื่อสร้างไฟล์. mkv ฉันแค่ต้องการหน่วงเวลาเสียง -3840 ms ทุกอย่างยังคงเหมือนเดิม
อะไรคือคำสั่งที่ถูกต้องที่จะทำให้สำเร็จโดยใช้ ffmpeg
ฉันขอขอบคุณความช่วยเหลือของคุณ

คำตอบ:


72

หากคุณต้องการหน่วงเวลาวิดีโอ 3.84 วินาทีให้ใช้คำสั่งดังนี้:

ffmpeg.exe -i "movie.mp4" -itsoffset 3.84 -i "movie.mp4" -map 1:v -map 0:a -c copy "movie-video-delayed.mp4"

หากคุณต้องการหน่วงเวลาเสียง 3.84 วินาทีใช้คำสั่งดังนี้:

ffmpeg.exe -i "movie.mp4" -itsoffset 3.84 -i "movie.mp4" -map 0:v -map 1:a -c copy "movie-audio-delayed.mp4"

ตรวจสอบให้แน่ใจว่าการสร้าง ffmpeg ของคุณไม่เก่าเกินไปใหม่กว่า 2012 จะเพียงพอ


คำอธิบาย

-itsoffset 3.84 -i "movie.mp4"

ออฟเซ็ตการประทับเวลาของสตรีมทั้งหมด 3.84 วินาทีในไฟล์อินพุตที่ตามหลังตัวเลือก (movie.mp4)

-map 1:v -map 0:a

ใช้การสตรีมวิดีโอจากอินพุตที่สอง (ล่าช้า) และสตรีมเสียงจากอินพุตแรก - อินพุตทั้งคู่อาจเป็นไฟล์เดียวกัน

สามารถดูคำอธิบายแบบละเอียดเพิ่มเติมได้ที่นี่:
http://alien.slackbook.org/blog/fixing-audio-sync-with-ffmpeg/


2
คุณจะเลือกหนึ่งแทร็กเสียงที่เฉพาะเจาะจงได้อย่างไรแทนที่จะล่าช้าแทร็กเสียงทั้งหมด
Freedo

1
โดยใช้ความสามารถของตัวเลือกแผนที่ คุณต้องค้นหาดัชนีของสตรีมเสียงที่ต้องการในไฟล์อินพุตโดยใช้คำสั่งใด ๆ เหล่านี้: ffprobe.exe "input_file.mp4"หรือffmpeg.exe -i "input_file.mp4" เราสมมติว่าดัชนีของสตรีมเสียงที่จะล่าช้าคือ 2 (เช่นสตรีมที่สาม) และอินพุตล่าช้าคือ อันที่สอง (ตามตัวอย่างของฉัน) ในการหน่วงเวลาเฉพาะสตรีมที่สามให้สตรีมอื่นทั้งหมดจากอินพุตแรกและสตรีมเสียงเดียวเท่านั้นจากอินพุตที่สอง (ล่าช้า):-map 0:0 -map 0:1 -map 1:2
Weaver Weaver

นั่นไม่ใช่สิ่งที่ฉันหมายถึง ในกรณีนี้ฉันยังต้องเรียก ffmpeg และแยกผลลัพธ์เพื่อค้นหาดัชนี มีอะไรเทียบเท่ากับคำว่า -map eng
Freedo

ดี @Freedo ตามที่คุณได้รับคำแนะนำแล้วในsuperuser.com/questions/639402/สิ่งที่คุณแนะนำคือในความเป็นจริงที่เป็นไปได้โดยการระบุสตรีมโดยใช้ค่าเมทาดาทาเช่น: -map 1:m:language:eng อย่างไรก็ตามจำไว้ว่ามันจะเลือกสตรีมทั้งหมด เป็นไปตามเกณฑ์ซึ่งอาจรวมถึงสตรีมเสียงและ / หรือคำบรรยายหลายรายการ คุณสามารถค้นหาข้อมูลเพิ่มเติมได้ที่stackoverflow.com/questions/46769419/…
Weaver

1
AFAIK -c copyสามารถนำมาใช้แทน-vcodec copy -acodec copyและitsoffsetจะมีผลต่อวิดีโอดังนั้นบางทีนี้จะทำงานเดียวกัน ?: และจะชะลอเสียงแทนเพียงแค่เพิ่มเครื่องหมายลบให้ระยะเวลา:ffmpeg -i "movie.mp4" -itsoffset 3.84 -c copy "movie-video-delayed.mp4" -3.84
miyalys

0

ทำเสียงเงียบก่อน:

ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 3 silence_3_sec.mp3

จากนั้นไฟล์ concat:

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