ฉันมี 1 ภาพ (jpg) และไฟล์เสียง 1 ไฟล์ (MP3) และฉันต้องการที่จะแสดงผลนี้เป็นไฟล์วิดีโอ (เช่น AVI)
ไม่มีใครรู้วิธีใช้ FFMPEG เพื่อเข้าร่วมทั้งสอง ฉันต้องการที่จะแสดงภาพในช่วงระยะเวลาของเสียง
ความคิดใด ๆ ใคร
ฉันมี 1 ภาพ (jpg) และไฟล์เสียง 1 ไฟล์ (MP3) และฉันต้องการที่จะแสดงผลนี้เป็นไฟล์วิดีโอ (เช่น AVI)
ไม่มีใครรู้วิธีใช้ FFMPEG เพื่อเข้าร่วมทั้งสอง ฉันต้องการที่จะแสดงภาพในช่วงระยะเวลาของเสียง
ความคิดใด ๆ ใคร
คำตอบ:
หากคุณอยู่ใน 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)
ทรัพยากรจากที่นี่
มีวิธีที่ง่ายกว่าที่แนะนำไว้ที่นี่ซึ่งไม่จำเป็นต้องคำนวณจำนวนเฟรมหรือป้อนความยาวของไฟล์แต่ละไฟล์ (โดยเฉพาะดีกว่าสำหรับการประมวลผลแบบแบตช์) ด้วย 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 มาตรฐานมากขึ้นถ้าคุณต้องการ
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
เขียนทับไฟล์ที่ส่งออกโดยไม่ต้องแจ้งให้
ตัวเลือก '-loop_input' จะเลิกใช้ -loop 1. ดูเอกสาร ffmpeg
ไฟล์อินพุต
เฟรมต่อวินาที
อาจแสดงเป็น: -r 30000/1001 ให้ fps 29.97nnn
อัตราบิตวิดีโอ ยิ่งมีจำนวนมากเท่าใดคุณภาพก็จะยิ่งดีขึ้นและขนาดไฟล์ก็จะใหญ่ขึ้นเท่านั้น
ตามที่อธิบายไว้ข้างต้น ใช้เวลาทั้งหมดของไฟล์เสียงของคุณในไม่กี่วินาที (เช่น 00:02:41 (2 นาที 41 วินาที) เท่ากับ 161 วินาทีทั้งหมด (2 x 60) + 41) จากนั้นคูณวินาทีทั้งหมดด้วยจำนวนเฟรมต่อวินาทีที่คุณระบุด้วย -r (เช่น 161 x 30 = 4830)
- เฟรมสามารถถูกแทนที่ด้วย -t 161 (-t บันทึกระยะเวลาหรือ transcode“ ระยะเวลา” วินาทีของเสียง / วิดีโอ)
ใช้ตัวแปลงสัญญาณเสียงที่ถูกต้องสำหรับประเภทของไฟล์ที่คุณกำลังสร้าง สำหรับ. mp4 ควรเป็นรูปแบบ AAC ตัวแปลงสัญญาณ libvo_aacenc เป็นตัวแปลงสัญญาณการเข้ารหัสที่ถูกต้องสำหรับระบบ Windows 7 ของฉัน
อัตราบิตเสียง
นี่คือชื่อของไฟล์ที่ส่งออก อาจเป็นชื่อไฟล์ทางกฎหมายสำหรับระบบของคุณ ส่วนขยายนี้จะช่วยให้ ffmpeg กำหนดตัวแปลงสัญญาณวิดีโอที่เหมาะสมหากคุณไม่ได้ระบุด้วย -vcodec
สคริปต์ 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* &
ดาวน์โหลดVirtualDubจากนั้นทำสิ่งนี้:
เปิดภาพเหมือนที่คุณจะเปิดไฟล์วิดีโอปกติ
คำนวณระยะเวลาของเสียงในหน่วยวินาทีและปัดขึ้นเป็นวินาทีที่ใกล้ที่สุด (เช่น 78.34 วินาทีกลายเป็น 79 วินาที) ค่านี้เรียกว่า x จากนี้เป็นต้นไป
ไปที่ "วิดีโอ> อัตราเฟรม" เลือก "เปลี่ยนเป็นอัตราเฟรม (fps)" และป้อน "1 / x" เป็นค่า นอกจากนี้หากคุณต้องการมีอัตราเฟรมปกติในไฟล์ผลลัพธ์เช่น 25 fps ให้เลือก "แปลงเป็น fps" และป้อนอัตราเฟรมที่ต้องการในนั้น
เลือก "วิดีโอ> การบีบอัด" และเลือกรสชาติที่คุณโปรดปราน อาจเป็นได้ว่าคุณต้องปรับขนาดของภาพด้วยฟิลเตอร์ปรับขนาด
ไปที่ "เสียง> เสียงจากไฟล์อื่น" และเลือกเสียงของคุณที่นั่น หากจำเป็นให้เลือกการบีบอัดสำหรับเสียง
บันทึกไฟล์
ที่มา: stephanV