เข้าร่วมเสียงและภาพ -> เอาท์พุทเป็นวิดีโอโดยใช้ FFmpeg


8

ฉันมี 1 ภาพ (jpg) และไฟล์เสียง 1 ไฟล์ (MP3) และฉันต้องการที่จะแสดงผลนี้เป็นไฟล์วิดีโอ (เช่น AVI)

ไม่มีใครรู้วิธีใช้ FFMPEG เพื่อเข้าร่วมทั้งสอง ฉันต้องการที่จะแสดงภาพในช่วงระยะเวลาของเสียง

ความคิดใด ๆ ใคร


คุณกำลังใช้ระบบปฏิบัติการใดอยู่
subanki

คำตอบ:


6

หากคุณอยู่ใน Windows คุณสามารถทำได้ใน Windows Movie Maker เช่นกัน ... หากคุณต้องการคำแนะนำโปรดแสดงความคิดเห็น

สำหรับ FFmpeg ให้ใช้สิ่งนี้

ffmpeg -loop_input -vframes 14490 -i imagine.jpg -i audio.mp3 -y -r 30 
    -b 2500k -acodec ac3 -ab 384k -vcodec mpeg4 result.mp4
  • vframes 14490 คือจำนวนเฟรมที่ควรวนลูปเพื่อให้ได้ภาพต่อเนื่องสำหรับไฟล์ audio.mp3

    เช่น: 8 นาทีและ 3 วินาที ((8m x 60s + 3s) x 30fps = 14490 vf)

ทรัพยากรจากที่นี่


สวัสดี Subanki - ขอบคุณสำหรับความคิดเห็นของคุณ !! ฉันไม่เข้าใจสิ่งนี้ แต่ฉันต้องส่งไฟล์วิดีโอจากเสียงและภาพ สิ่งนี้ทำเช่นไร?
user41559

@ nayrsllew ฉันเพิ่งพบว่ารหัสไม่ทำงานขออภัย .. สิ่งพื้นฐานคือแปลงเป็นวิดีโอโดยใช้ ffmpeg -f image2 -i image% d.jpg video.mpg จากนั้นเข้าร่วมวิดีโอและเสียง
subanki

อัปเดตคำตอบของฉันมันยาก แต่การค้นหา google 1 ชั่วโมงของฉันพบว่าฉันมีความสุข :)
subanki

คำตอบนั้นถูกต้องทำไมลง
โหวต

สวัสดีลาดเททำคุณช่วยฉันที่นี่ วิดีโอที่ได้มีขนาดใหญ่เกินไป ฉันต้องการวิดีโอไฟล์ MP3 ขนาดเดียวกัน ไฟล์ภาพของฉันเล็กมาก ฉันต้องอัปโหลดวิดีโอนี้ไปยัง Youtube ด้วย
Parminder

7

มีวิธีที่ง่ายกว่าที่แนะนำไว้ที่นี่ซึ่งไม่จำเป็นต้องคำนวณจำนวนเฟรมหรือป้อนความยาวของไฟล์แต่ละไฟล์ (โดยเฉพาะดีกว่าสำหรับการประมวลผลแบบแบตช์) ด้วย ffmpeg รุ่นล่าสุดคุณสามารถใช้-shortestตัวเลือกซึ่งจะหยุดการเข้ารหัสเมื่อกระแสข้อมูลที่สั้นที่สุดสิ้นสุดลง - ในกรณีนี้ input.mp3 (เนื่องจากรูปภาพจะวนซ้ำตลอดไปจะมีความยาวไม่สิ้นสุด):

ffmpeg -i input.mp3 -f image2 -loop 1 -r 2 -i input.jpg \
-shortest -c:a copy -c:v libx264 -crf 23 -preset veryfast output.mp4

สิ่งนี้ใช้ 2 เฟรมต่อวินาทีสำหรับภาพ / วิดีโอซึ่งควรจะดี แต่คุณสามารถตั้งค่าให้เป็น 25 มาตรฐานมากขึ้นถ้าคุณต้องการ



5

subanki เกือบจะถูกต้องแล้ว บรรทัดคำสั่งการทำงานมีดังนี้

ffmpeg -y -loop 1 -i image.jpg -i audio.mp3 -r 30 -b:v 2500k -vframes 14490 -acodec libvo_aacenc -ab 160k result.mp4
-y

เขียนทับไฟล์ที่ส่งออกโดยไม่ต้องแจ้งให้

- ลูป 1

ตัวเลือก '-loop_input' จะเลิกใช้ -loop 1. ดูเอกสาร ffmpeg

-ผม

ไฟล์อินพุต

-r

เฟรมต่อวินาที
อาจแสดงเป็น: -r 30000/1001 ให้ fps 29.97nnn

-b: วี

อัตราบิตวิดีโอ ยิ่งมีจำนวนมากเท่าใดคุณภาพก็จะยิ่งดีขึ้นและขนาดไฟล์ก็จะใหญ่ขึ้นเท่านั้น

-vframes

ตามที่อธิบายไว้ข้างต้น ใช้เวลาทั้งหมดของไฟล์เสียงของคุณในไม่กี่วินาที (เช่น 00:02:41 (2 นาที 41 วินาที) เท่ากับ 161 วินาทีทั้งหมด (2 x 60) + 41) จากนั้นคูณวินาทีทั้งหมดด้วยจำนวนเฟรมต่อวินาทีที่คุณระบุด้วย -r (เช่น 161 x 30 = 4830)

- เฟรมสามารถถูกแทนที่ด้วย -t 161 (-t บันทึกระยะเวลาหรือ transcode“ ระยะเวลา” วินาทีของเสียง / วิดีโอ)

-acodec

ใช้ตัวแปลงสัญญาณเสียงที่ถูกต้องสำหรับประเภทของไฟล์ที่คุณกำลังสร้าง สำหรับ. mp4 ควรเป็นรูปแบบ AAC ตัวแปลงสัญญาณ libvo_aacenc เป็นตัวแปลงสัญญาณการเข้ารหัสที่ถูกต้องสำหรับระบบ Windows 7 ของฉัน

-ab

อัตราบิตเสียง

result.mp4

นี่คือชื่อของไฟล์ที่ส่งออก อาจเป็นชื่อไฟล์ทางกฎหมายสำหรับระบบของคุณ ส่วนขยายนี้จะช่วยให้ ffmpeg กำหนดตัวแปลงสัญญาณวิดีโอที่เหมาะสมหากคุณไม่ได้ระบุด้วย -vcodec


1

สคริปต์ bash / cygwin ง่ายๆที่ AUTOMAGICALLY จะเข้ารหัสไฟล์ทั้งหมดของนามสกุล AUDIO ในไดเรกทอรีเป็นไฟล์วิดีโอ 10FPS mp4 ในไดเรกทอรีที่มีโฟลเดอร์ฝังอยู่

มีประโยชน์สำหรับการอัปโหลด youtube;)

AUDIO=m4a; 
$'\n'; for a in `ls -1 *.$AUDIO `; do ffmpeg -i $a &2> $a.info ; done;
cat '' > do.sh
IFS=$'\n'; 
for a in `ls -1 *.$AUDIO`; do D=`grep Duration $a.info | cut -d',' -f1 | cut -d' ' -f4 | cut -d'.' -f1 | head -n1 `; S=$(( $( echo $D | cut -d':' -f2 ) * 60 + 1 + ` echo $D | cut -d':' -f3  ` )) ; echo ffmpeg -loop_input -vframes $(( $S * 10 )) -i folder.jpg -i \"$a\" -y  -r 10 -b 2500k -ab 384k -vcodec mpeg4 \"$a.mp4\" >> do.sh;  done;
split -l5 do.sh
xa* &

0

ดาวน์โหลดVirtualDubจากนั้นทำสิ่งนี้:

  1. เปิดภาพเหมือนที่คุณจะเปิดไฟล์วิดีโอปกติ

  2. คำนวณระยะเวลาของเสียงในหน่วยวินาทีและปัดขึ้นเป็นวินาทีที่ใกล้ที่สุด (เช่น 78.34 วินาทีกลายเป็น 79 วินาที) ค่านี้เรียกว่า x จากนี้เป็นต้นไป

  3. ไปที่ "วิดีโอ> อัตราเฟรม" เลือก "เปลี่ยนเป็นอัตราเฟรม (fps)" และป้อน "1 / x" เป็นค่า นอกจากนี้หากคุณต้องการมีอัตราเฟรมปกติในไฟล์ผลลัพธ์เช่น 25 fps ให้เลือก "แปลงเป็น fps" และป้อนอัตราเฟรมที่ต้องการในนั้น

  4. เลือก "วิดีโอ> การบีบอัด" และเลือกรสชาติที่คุณโปรดปราน อาจเป็นได้ว่าคุณต้องปรับขนาดของภาพด้วยฟิลเตอร์ปรับขนาด

  5. ไปที่ "เสียง> เสียงจากไฟล์อื่น" และเลือกเสียงของคุณที่นั่น หากจำเป็นให้เลือกการบีบอัดสำหรับเสียง

  6. บันทึกไฟล์

ที่มา: stephanV


ขอบคุณ StephanV .. ฉันต้องใช้ FFMpeg แต่นี่เป็นคำแนะนำที่ดี .. ขอบคุณ
user41559
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.