Membuat video dengan audio dan gambar diam untuk YouTube

23

Saya menjalankan perintah berikut:

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

Yang berhasil menghasilkan video dengan audio yang direkam dan gambar di dalamnya.

Ketika saya mencoba dan mengunggah ini ke YouTube, prosesnya gagal, terlepas dari format apa pun yang saya coba: .mov, .avi, .flv, .mp4

Apakah ada beberapa pengaturan yang saya lewatkan di atas yang akan menghasilkan format yang akan diterima Youtube? Saya sudah mencoba melihat melalui dokumentasi ffmpeg tetapi saya berada di atas kepala saya.

Saya melakukan percobaan dengan meletakkan video 2 detik dengan 30 detik mp3. Ketika saya mengunggah ke youtube, video yang dihasilkan hanya berdurasi 2 detik. Jadi mungkin saja YouTube hanya melihat ke trek video untuk panjangnya, dan karena gambar hanya panjang bingkai atau apa pun, mungkin itu membingungkan.

thekevinscott
sumber

Jawaban:

13

Inilah yang berhasil:

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

Secara khusus, loopopsi, yang akan menduplikasi gambar sebagai bingkai. Ini juga akan membutuhkan shortestopsi untuk menjaga file dari tumbuh dan berkembang (cara ini memotongnya ke panjang aliran terpendek - di sini, file audio).

The rpilihan mengubah frame rate, dan crf 18menetapkan kualitas (menggunakan nilai yang lebih tinggi di sini untuk kualitas video yang lebih rendah). Lihat di sini untuk perincian lebih lanjut: FFmpeg: Alat Manipulasi Video dan Audio terbaik

thekevinscott
sumber
2
Tidak bekerja untuk saya. Saya mendapatkan film satu frame.
Pavel Vlasov
Saya bekerja untuk saya sekarang.
molnarg
4

Sepotong kode yang berfungsi untuk saya, dari forum lain:

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

Saya mengambil kode Pavel, yang juga bekerja untuk saya, dan memperpendeknya dengan memotong opsi yang tidak perlu:

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

ini adalah bentuk umum yang berfungsi dengan file gambar dan audio sebagai input dan menghasilkan file video sebagai output.

Yang mengatakan, karena aliran video Anda akan dibuat dari satu gambar yang diulang tanpa batas waktu, Anda dapat mengatur laju bingkai rendah (yaitu jumlah gambar yang muncul dalam satu detik) dengan -r. Perhatikan bahwa tidak semua wadah keluaran memungkinkan laju bingkai rendah. Salah satunya adalah avi, jadi Anda dapat melakukannya:

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

ini akan membuat file video dengan frame rate 0,1 (yaitu satu gambar setiap 10 detik) alih-alih default 25. Ini akan mempengaruhi ukuran file tetapi bukan kualitas video. Akhirnya, Anda dapat mengatur bitrate audio untuk mendapatkan kualitas audio yang lebih baik -ab. Ini adalah perintah yang sebenarnya saya gunakan untuk membuat video semacam ini untuk youtube:

ffmpeg -loop 1 -shortest -r 0.1 -i <audio file> -i <image file> -ab 128k output.avi
etuardu
sumber
Terima kasih. Saya berlari ffmpeg -loop 1 -shortest -r 0.1 -i audio.mp3 -i image.jpg output.avitetapi mendapat 'Opsi loop tidak ditemukan.' Ada ide?
Kolonel Panic
@ col Jika Anda masih tertarik: Anda memerlukan opsi loop sebelum input gambar, bukan sebelum audio.
slhck
inilah yang bekerja untuk saya:ffmpeg -i <audio file> -loop 1 -i <image file> -shortest <output video file>
Karolinger
2

dengan 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
ZiTAL
sumber
Selamat datang di SuperUser dan terima kasih atas jawaban Anda. Beberapa lebih detail tentang apa yang Anda usulkan dan mengapa akan membantu.
Brad Patton
1
jawabannya adalah karena ffmpeg sudah tidak digunakan lagi
ZiTAL
2
Tidak ada proyek ffmpeg yang sedang berlangsung. Ada perselisihan yang mengarah pada pesan usang. Lihat stackoverflow.com/questions/9477115/…
Brad Patton
2
Gunakan -shortestopsi output alih-alih secara manual mendeklarasikan waktu (juga, gunakan ffmpegalih-alih avconvjika mungkin).
llogan
2
Membuat skrip bash kalau-kalau ada yang tertarik
Dallaylaen
0

Saya mendapatkan ini berfungsi setelah banyak eksperimen: https://www.youtube.com/watch?v=qjlDT819Q3s

  1. Konversi gambar menjadi video sesuai https://trac.ffmpeg.org/wiki/Create%20a%20video%20slideshow%20from%20gages :

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

    Di sini saya menggunakan beberapa gambar dan mengubahnya setiap 20-an.

  2. Menyatukan salinan yang cukup dari video di atas untuk rentang durasi audio Anda sesuai https://trac.ffmpeg.org/wiki/Concatenate . Solusi lain, seperti berharap ffmpeg -i wav.wav -i png.mp4 youtube.mp4melakukan hal yang benar, akhirnya ditolak oleh YouTube (juga, pemain seperti VLC bingung dan tidak dapat mencari dengan benar). Dugaan saya adalah bahwa posisi waktu perlu disesuaikan dalam salinan, yang ffmpegtidak dilakukan, kecuali jika digabungkan:

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

    (di mana file pngs.txtbuatan tangan mengandung salinan sebanyak yang dibutuhkan: salinan = panjang audio / panjang video)

  3. Campur audio Anda dengan video yang diperoleh dalam 2 sesuai 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

Sekarang file tersebut youtube.mp4harus diterima oleh YT.

infojunkie
sumber