Alih-alih memberikan frame rate tetap ke FFMPEG / libx264 (-r / -framerate), saya ingin menentukan frame rate variabel dengan nilai MAXIMUM, dan memungkinkan libx264 untuk menurunkan frame rate sesuai keinginan. Idenya di sini adalah untuk mendapatkan kompresi tambahan ketika ada sesuatu seperti bingkai foto yang diperpanjang (yang terjadi BANYAK dalam video sumber saya).
Saya menyadari bahwa frame MPEG prediktif atau dua arah akan memampatkan dengan sangat baik, tetapi juga mungkin bahwa frame rate sumber lebih kecil daripada yang saya ingin transcode (mungkin menghasilkan aliran yang LEBIH BESAR!).
video
ffmpeg
compression
framerate
Mark Gerolimatos
sumber
sumber
Jawaban:
Frustrasi karena Anda belum menemukan jawaban, saya setidaknya akan menjawab pertanyaan orang lain tentang cara mengaktifkan output VFR (bukan V B R) dari FFMPEG.
Jawabannya adalah
-vsync
opsi yang diberi nama aneh . Anda dapat mengaturnya ke beberapa opsi yang berbeda, tetapi yang Anda inginkan adalah '2' atauvfr
. Dari halaman manual:Namun, saya tidak memiliki reputasi yang cukup untuk mengirim komentar untuk hanya menjawab 'sub-pertanyaan' yang tampaknya dimiliki semua orang. Tapi saya memang punya beberapa ide yang sejujurnya saya tidak terlalu optimis tentang ... Tapi yang pertama saya coba ternyata berhasil . Begitu.
Anda hanya perlu menggabungkan
-vsync 2
opsi dengan-r $maxfps
opsi, tentu saja di mana Anda mengganti$maxfps
dengan framerate maksimum yang Anda inginkan! Dan itu BEKERJA! Itu tidak menduplikasi bingkai dari file sumber, tetapi itu akan menjatuhkan bingkai yang menyebabkan file untuk melampaui framerate maksimum!Secara default tampaknya
-r $maxfps
dengan sendirinya hanya menyebabkannya menggandakan / menjatuhkan frame untuk mencapai framerate konstan, dan-vsync 2
dengan sendirinya menyebabkannya untuk menarik frame secara langsung tanpa benar-benar mempengaruhi nilai PTS.Saya tidak optimis tentang ini karena saya sudah tahu yang
-r $maxfps
membuatnya framerate konstan. Jujur saya mengharapkan kesalahan atau untuk hanya mematuhi mana yang lebih dulu atau terakhir atau apa pun. Fakta bahwa ia melakukan persis apa yang saya inginkan membuat saya cukup senang dengan para pengembang FFMPEG.Saya harap ini membantu Anda, atau orang lain di kemudian hari jika Anda tidak perlu lagi mengetahui hal ini.
sumber
-copyts
Semoga bermanfaat jugaDalam pemahaman saya, ini mungkin dalam cara yang agak canggung, tetapi tidak diinginkan untuk beberapa alasan yang kompleks dan berlawanan dengan intuisi
Meskipun stream x264 memiliki framerate, frame rate lebih merupakan masalah level kontainer daripada codec.
Dalam encode passthrough VFR, akan ada apa yang pada dasarnya adalah file teks yang merinci apa frame rate di atas frame / kali apa, dan dalam encoding sumber, fungsi seperti tcfile-in atau tcfile-out meneruskan timestamps ke encode , untuk memetakan lokasi tingkat dan menjaga video secara konsisten konsisten dari sumbernya.
Ide rendah framerate adalah ide yang logis, tetapi tidak berhasil karena beberapa alasan. Meskipun x264 sadar VFR dengan beberapa kemampuan, saya tidak berpikir ada fungsi analisis yang akan memvariasikan framerate sehubungan dengan gerakan untuk menurunkan ukuran file (dengan cara yang mirip dengan banyak kontrol bitrate).
Sumbernya juga merupakan masalah: Sumber-sumber VFR secara default akan mempertahankan variabilitas frame mereka, tetapi tampaknya meng-encode file CFR pada bitrate variabel (kadang-kadang ide yang bagus, terutama ketika telecine diperlukan) hanya akan menghasilkan CFR yang sama.
Ini berarti Anda mungkin harus menulis ulang bitrate dengan tangan (mis. Cap waktu adegan lambat yang disandingkan ke dalam file), atau menggunakan algoritma penipisan bingkai seperti dup, dedup, dan exactDedup untuk avisynth . Jika video Anda memang memiliki gerakan yang sangat rendah, beberapa bingkai (bahkan setengah?) Akan dibuang. Masalahnya adalah bahwa algoritma ini tidak canggih, dan tidak membuat pilihan yang baik dengan rekaman "kehidupan nyata" tentang apa yang akan berkontribusi pada pengkodean terbaik.
Selain itu, menghapus bingkai yang berisi hal-hal seperti bingkai I dan B mengurangi jumlah detail yang tersedia dari waktu ke waktu, yang menyebabkan gerakan terlihat "steppy" dan dapat mengganggu parameter video dasar lainnya dan menyebabkan artefak seperti aliasing.
Dan karena cara kerja quantizer, x264 sebenarnya akan mengurangi bitrate lebih jauh secara tidak proporsional dalam adegan-adegan gerak rendah ini. Kecuali jika Anda memiliki rangkai salindia dari gambar yang identik, akan ada gerakan (jika hanya butir dan artefak lainnya) dan akan ada penurunan kualitas yang tidak akan terlihat tanpa perubahan drastis pada bitrate.
Dan akhirnya, alasan tidak banyak pilihan untuk melakukan apa yang Anda inginkan adalah x264 sangat bagus dalam mengelola bitrate hanya dengan menggunakan kompresi temporal (merekam perubahan dalam frame parsial). Pergi ke 1/2 framerate tidak akan memotong ukuran file menjadi setengah; 10% mungkin merupakan keuntungan realistis yang diharapkan dari gerakan rendah atau animasi.
Jadi singkatnya, menjatuhkan bitrate dari adegan statis Anda akan sangat sedikit untuk ukuran file Anda, tetapi akan menambah sejumlah masalah kualitas dan sinkronisasi, belum lagi ketidakcocokan dengan perangkat lunak pengedit video.
Jika Anda ingin mencoba decimator, Anda mungkin dapat membatasi frame rate maksimum baru dengan menggunakan opsi level , yang masing-masing spesies memiliki resolusi dan framerate maksimum. Sayangnya, Anda mungkin harus bekerja pada resolusi yang sangat rendah untuk mendapatkan jenis frame rate yang Anda inginkan, menggunakan profil. Itu kembali ke mengedit tarif dengan tangan, baik seluruhnya atau untuk memperbaiki frame rate yang menurut Anda terlalu tinggi. Either way, akan butuh juggling untuk menjaga suara tetap sinkron dengan framerate baru jika perubahan dilakukan setelah proses pengkodean ketika tcfile dilestarikan.
Kelebihannya adalah menghabiskan waktu untuk mengoptimalkan banyak pengaturan bitrate akan menghasilkan lebih banyak cara manajemen ukuran file, dan meningkatkan kualitas video Anda, daripada menyebabkan komplikasi dengan sedikit keuntungan. Mempertahankan FPS asli mungkin adalah ide terbaik kecuali Anda mengincar standar siaran atau media. Pemain mampu memainkan bitrate variabel (tidak seperti editor), dan semakin banyak frame dalam video Anda, semakin halus pemutarannya dan mungkin semakin kecil ukuran file, karena perubahan kecil dalam pergerakan antar frame.
Berikut adalah kumpulan tautan ke info standar dan diskusi forum yang akan membantu aspek penyandian yang membingungkan ini:
- Alat penipisan avisynth
- fps dan -r switch
- x264 Umum (tcfile, fps)
- standar file kode waktu
- Level dan profil
- Pendek, jelas ringkasan pengaturan CFR / VFR (bagian "framerate")
doom9, videohelp, & c diskusi teoritis
1 2 3 4 5 6 7
sumber