สร้างวิดีโอด้วยเสียงและภาพนิ่งสำหรับ YouTube


23

ฉันใช้คำสั่งต่อไปนี้:

ffmpeg -i audio.mp3 -ar 44100 -f image2 -i logo.jpg -r 15 -b 1800 -s 640x480 foo.mov

ซึ่งประสบความสำเร็จในการส่งสัญญาณวิดีโอพร้อมเสียงที่บันทึกไว้ของฉันและภาพในนั้น

เมื่อฉันลองและอัปโหลดไปยัง YouTube มันไม่สามารถดำเนินการได้โดยไม่คำนึงถึงรูปแบบที่ฉันลอง: .mov, .avi, .flv, .mp4

มีการตั้งค่าบางอย่างที่ฉันทำหายไปในด้านบนที่จะสร้างรูปแบบที่ Youtube จะยอมรับหรือไม่? ฉันได้ลองดูเอกสาร ffmpeg แล้ว แต่ฉันก็อยู่ในหัว

ฉันทำการทดลองโดยใส่วิดีโอ 2 วินาทีกับ mp3 30 วินาที เมื่อฉันอัปโหลดไปยัง youtube วิดีโอที่ได้นั้นมีความยาวเพียง 2 วินาที ดังนั้นอาจเป็นไปได้ว่า YouTube ดูวิดีโอแทร็กตามความยาวเท่านั้นและเนื่องจากรูปภาพเป็นเพียงเฟรมยาวหรืออะไรก็ตามบางทีนั่นอาจเป็นบอร์ก

คำตอบ:


13

นี่คือสิ่งที่ทำงาน:

ffmpeg -i audio.mp3 -f image2 -loop 1 -i logo.jpg 
-r 15 -s 640x480 \
-c:v libx264 -crf 18 -tune stillimage -preset medium \
-shortest foo.mov

โดยเฉพาะอย่างยิ่งloopตัวเลือกซึ่งจะซ้ำภาพเป็นเฟรม นอกจากนี้ยังจะต้องมีshortestตัวเลือกในการป้องกันไม่ให้ไฟล์เพิ่มขึ้นเรื่อย ๆ (ด้วยวิธีนี้จะตัดทอนให้เป็นความยาวของสตรีมที่สั้นที่สุด - ที่นี่คือไฟล์เสียง)

rตัวเลือกการเปลี่ยนแปลงอัตราเฟรมและcrf 18ชุดที่มีคุณภาพ (ใช้ค่าที่สูงขึ้นที่นี่สำหรับวิดีโอที่มีคุณภาพต่ำกว่า) ดูรายละเอียดเพิ่มเติมที่นี่: FFmpeg: สุดยอดเครื่องมือจัดการวิดีโอและเสียง


2
ใช้งานไม่ได้สำหรับฉัน ฉันได้รับภาพยนตร์หนึ่งเฟรม
Pavel Vlasov

ตอนนี้ฉันทำงานให้ฉันแล้ว
molnarg

4

โค้ดที่เหมาะกับฉันจากฟอรัมอื่น:

ffmpeg -loop 1 -r ntsc -i image.jpg -i song.mp3 -c:a copy -c:v libx264 -preset fast -threads 0 -shortest output.mkv 

2

ฉันใช้รหัสของ Pavel ซึ่งก็ใช้ได้กับฉันเช่นกันและทำให้สั้นลงด้วยการตัดตัวเลือกที่ไม่จำเป็นออกไป:

ffmpeg -loop 1 -shortest -i <audio file> -i <image file> <output video file>

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

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

ffmpeg -loop 1 -shortest -r 0.1 -i <audio file> -i <image file> output.avi

สิ่งนี้จะสร้างไฟล์วิดีโอที่มีอัตราเฟรม 0.1 (เช่นหนึ่งภาพในแต่ละ 10 วินาที) แทนค่าเริ่มต้นของ 25 ซึ่งจะมีผลกับขนาดไฟล์ แต่ไม่ได้คุณภาพของวิดีโอ -abในที่สุดคุณสามารถตั้งค่าบิตเสียงเพื่อให้ได้คุณภาพเสียงที่ดีขึ้นด้วย นี่คือคำสั่งที่ฉันใช้เพื่อสร้างวิดีโอประเภทนี้สำหรับ youtube:

ffmpeg -loop 1 -shortest -r 0.1 -i <audio file> -i <image file> -ab 128k output.avi

ขอบคุณ ฉันวิ่งffmpeg -loop 1 -shortest -r 0.1 -i audio.mp3 -i image.jpg output.aviแต่ได้รับ 'ไม่พบลูปตัวเลือก' ความคิดใด ๆ
พันเอก Panic

@col หากคุณยังสนใจ: คุณต้องใช้ตัวเลือกการวนซ้ำก่อนที่จะใส่รูปภาพไม่ใช่ก่อนเสียง
slhck

นี่คือสิ่งที่ใช้งานได้สำหรับฉัน:ffmpeg -i <audio file> -loop 1 -i <image file> -shortest <output video file>
Karolinger

2

ด้วย avconv:

avconv -i input.mp3 -loop 1 -f image2 -i logo.png -r 30 -s 640x480 -ab 128k -ar 44100 -ac 1 -ss 00:00:00.000 -t 01:02:03.123 foo.ogv

ยินดีต้อนรับสู่ SuperUser และขอบคุณสำหรับคำตอบของคุณ รายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่คุณเสนอและสาเหตุที่เป็นประโยชน์
แบรดแพ็ตตัน

1
การตอบสนองเป็นเพราะ ffmpeg เลิกใช้แล้ว
ZiTAL

2
ไม่มีโครงการ ffmpeg ต่อเนื่อง มีข้อพิพาทที่นำไปสู่ข้อความที่เลิกใช้แล้ว ดูstackoverflow.com/questions/9477115/…
Brad Patton

2
ใช้-shortestตัวเลือกเอาต์พุตแทนการประกาศเวลาด้วยตนเอง (เช่นใช้ffmpegแทน avconvถ้าเป็นไปได้)
llogan

2
สร้างสคริปต์ทุบตีในกรณีที่ใครสนใจ
Dallaylaen

0

ฉันได้รับการทำงานหลังจากการทดลองมาก: https://www.youtube.com/watch?v=qjlDT819Q3s

  1. แปลงรูปภาพเป็นวิดีโอตามhttps://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20 จาก%20images :

    ffmpeg -framerate 1/20 -i png/img-%03d.png -c:v libx264 -vf "fps=25,format=yuv420p" png.mp4

    ที่นี่ฉันใช้ภาพหลายภาพและทำให้พวกเขาเปลี่ยนทุก ๆ 20

  2. สำเนา Concatenate เพียงพอของวิดีโอดังกล่าวข้างต้นที่จะขยายระยะเวลาของเสียงของคุณเป็นต่อhttps://trac.ffmpeg.org/wiki/Concatenate โซลูชันอื่น ๆ เช่นคาดว่าffmpeg -i wav.wav -i png.mp4 youtube.mp4จะทำสิ่งที่ถูกต้องลงเอยด้วยการถูกปฏิเสธโดย YouTube (เช่นผู้เล่นเช่น VLC สับสนและไม่สามารถหาได้อย่างถูกต้อง) ฉันเดาว่าต้องปรับตำแหน่งเวลาในสำเนาซึ่งffmpegไม่ได้ทำยกเว้นว่ามีการต่อกัน:

    ffmpeg -f concat -i pngs.txt -c copy pngs.mp4

    (ที่ไฟล์pngs.txtทำด้วยมือเพื่อให้มีสำเนามากเท่าที่ต้องการ: สำเนา = ความยาวเสียง / ความยาววิดีโอ)

  3. ผสมเสียงของคุณกับวิดีโอที่ได้รับใน 2 ตามhttps://www.virag.si/2015/06/encoding-videos-for-youtube-with-ffmpeg/ :

    ffmpeg -i pngs.mp4 -i wav.wav -shortest -codec:v libx264 -crf 21 -bf 2 -flags +cgop -pix_fmt yuv420p -codec:a aac -strict -2 -b:a 384k -r:a 48000 -movflags faststart youtube.mp4

ตอนนี้youtube.mp4ควรยอมรับไฟล์โดย YT

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