Menggunakan ffmpeg untuk mengenkode video berkualitas tinggi [tertutup]

92

Saya memiliki satu set bingkai video yang disimpan sebagai gambar dalam direktori, dan saya mencoba menyandikannya ke video berkualitas baik, namun setiap pengaturan dan format yang saya coba menghasilkan artefak yang sangat mencolok.

Perintah dasarnya adalah ini:

ffmpeg -r 25 -i %4d.png myvideo.mpg

dan saya sudah mencoba bendera minrate dan maxrate. Semua format {mpg, avi, mov, flv} bisa digunakan.

Ada saran untuk pengaturan? Ukuran file akhir tidak menjadi masalah.

CakeMaster
sumber
7
Pada Mac saya, saya menggunakan perintah berikut: ffmpeg -r 20 -f image2 -i myImage%04d.png -f mp4 -q:v 0 -vcodec mpeg4 -r 20 myVideo.mp4. Saya menemukan bahwa untuk memaksa framerate, saya harus menentukannya untuk file input dan output. Codec ini tampaknya berfungsi untuk saya - Anda mungkin tidak perlu menentukannya. Saya hanya ingin memasukkan apa yang saya lakukan karena saya telah menghabiskan banyak waktu untuk mengerjakannya. Satu-satunya downside adalah bahwa gambar masukan saya memiliki kontras tinggi (bola biru dan merah dengan latar belakang putih) dan kemudian di film, semua bola mulai menjadi warna gelap yang sama - efek kontras yang tidak diinginkan.
jvriesem
Terima kasih @jvriesem! Ini bekerja dengan baik untuk saya.
Dan Loewenherz
Saya sarankan untuk menanyakan pertanyaan ini di StackOverflow untuk Sistem Multimedia
Hamed
c ++ versi stackoverflow.com/a/43464269/6180077 kunjungi tautan ini untuk bekerja aplikasi perekam layar format FFMPEG c ++ mp4.
Abdullah Farweez
periksa tautan ini yang menunjukkan penulisan file video menggunakan FFMPEG libs secara
terprogram

Jawaban:

64

Beberapa hal:

  • Anda perlu menyetel bitrate video. Saya belum pernah menggunakan minrate dan maxrate jadi saya tidak tahu persis bagaimana cara kerjanya, tetapi dengan menyetel bitrate menggunakan -bsakelar, saya bisa mendapatkan video berkualitas tinggi. Anda perlu menghasilkan bitrate yang menawarkan pertukaran yang baik antara kompresi dan kualitas video. Anda mungkin harus bereksperimen dengan ini karena semuanya tergantung pada ukuran bingkai, kecepatan bingkai, dan jumlah gerakan dalam konten video Anda. Perlu diingat bahwa DVD cenderung sekitar 4-5 Mbit / dtk rata-rata untuk 720x480, jadi saya biasanya mulai dari sana dan memutuskan apakah saya perlu lebih atau kurang dan kemudian hanya bereksperimen. Misalnya, Anda dapat menambahkan -b 5000kke baris perintah untuk mendapatkan lebih banyak atau lebih sedikit bitrate video DVD.

  • Anda perlu menentukan codec video. Jika tidak, ffmpeg akan default ke MPEG-1 yang cukup lama dan tidak memberikan jumlah kompresi yang mendekati MPEG-4 atau H.264. Jika versi ffmpeg Anda dibuat dengan dukungan libx264, Anda dapat menentukannya -vcodec libx264sebagai bagian dari baris perintah. Jika tidak, -vcodec mpeg4juga akan melakukan pekerjaan yang lebih baik daripada MPEG-1, tetapi tidak sebaik x264.

  • Ada banyak opsi lanjutan lainnya yang akan membantu Anda mendapatkan kualitas terbaik pada bitrate terendah. Lihat di sini untuk beberapa contoh.

Jason B
sumber
6
Bitrate konstan buruk untuk kualitas. Menggunakan faktor laju konstan lebih unggul (ini adalah salah satu mode operasi x264). Sebagai contoh: ffmpeg -i … -c:a copy -c:v libx264 -crf 18 -preset veryslow …. 18 adalah CRF dengan kehilangan kualitas yang sangat marjinal, tetapi bitrate mungkin rendah. Dan Anda dapat mencoba nilai CRF yang lebih besar jika Anda membutuhkan ukuran file yang lebih kecil. Dan seperti yang Anda lihat, ini sangat sederhana.
Nama Tampilan
perhatikan bahwa -b harus sebelum video tetapi setelah input -i
mateuszb
47

Anda perlu menentukan opsi -vb untuk meningkatkan bitrate video, jika tidak, Anda mendapatkan default yang menghasilkan video lebih kecil tetapi dengan lebih banyak artefak.

Coba sesuatu seperti ini:

ffmpeg -r 25 -i %4d.png -vb 20M myvideo.mpg

jeff7
sumber
1
ini bekerja dengan baik untuk saya, terima kasih;)
thiago.adriano26
16

Pastikan PNG sepenuhnya buram sebelum membuat video

misalnya dengan imagemagick, beri mereka latar belakang hitam:

convert 0.png -background black -flatten +matte 0_opaque.png

Dari pengujian saya, tidak ada bitrate atau codec yang cukup untuk membuat video terlihat bagus jika Anda memberi makan ffmpeg PNG dengan transparansi

Oran Fry
sumber
Ini memecahkan masalah saya.
Matěj Kripner
Petunjuk ini memecahkan kualitas video rendah yang sangat mengganggu. Terima kasih banyak.
dasmy
0

Kecuali Anda melakukan semacam pekerjaan pasca-pemrosesan, video tidak akan pernah lebih baik dari bingkai aslinya. Juga seperti flip-book, jika Anda memiliki "lompatan" besar di antara bingkai utama, itu akan terlihat lucu. Anda biasanya membutuhkan cukup banyak "remaja" di antara bingkai utama untuk memberikan animasi yang halus. HTH

JustBoo
sumber
Gambar aslinya berasal dari urutan video. Mereka baru saja melakukan sedikit pemangkasan, penskalaan, dan yang belum dilakukan dengan imagemagick. Efeknya pasti artefak kompresi. Sekarang saya telah melihat posting ini, yang sepertinya memiliki jawaban: stackoverflow.com/questions/3158235/…
CakeMaster
@CakeMaster Saya tidak menyebutkan kompresi lossy karena Anda memiliki gambar ".png" dalam contoh Anda. .png bisa jadi lossy, tapi menurut saya biasanya tidak. .jpg hampir selalu lossy oleh karena itu artefak saat menggunakannya. Jika bisa, Anda dapat menyimpan kembali .png Anda dengan kompresi lossless.
JustBoo