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.
Sepotong kode yang berfungsi untuk saya, dari forum lain:
sumber
Saya mengambil kode Pavel, yang juga bekerja untuk saya, dan memperpendeknya dengan memotong opsi yang tidak perlu:
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 adalahavi
, jadi Anda dapat melakukannya: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:sumber
ffmpeg -loop 1 -shortest -r 0.1 -i audio.mp3 -i image.jpg output.avi
tetapi mendapat 'Opsi loop tidak ditemukan.' Ada ide?ffmpeg -i <audio file> -loop 1 -i <image file> -shortest <output video file>
dengan avconv:
sumber
-shortest
opsi output alih-alih secara manual mendeklarasikan waktu (juga, gunakanffmpeg
alih-alihavconv
jika mungkin).Saya mendapatkan ini berfungsi setelah banyak eksperimen: https://www.youtube.com/watch?v=qjlDT819Q3s
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.
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.mp4
melakukan 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, yangffmpeg
tidak dilakukan, kecuali jika digabungkan:ffmpeg -f concat -i pngs.txt -c copy pngs.mp4
(di mana file
pngs.txt
buatan tangan mengandung salinan sebanyak yang dibutuhkan: salinan = panjang audio / panjang video)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.mp4
harus diterima oleh YT.sumber