Saya mencoba mengonversi pustaka video saya ke format HEVC untuk mendapatkan ruang. Saya menjalankan perintah berikut di semua file video di perpustakaan saya:
#!/bin/bash
for i in *.mp4;
do
#Output new files by prepending "X265" to the names
avconv -i "$i" -c:v libx265 -c:a copy X265_"$i"
done
Sekarang, sebagian besar video dikonversi dengan baik dan kualitasnya sama seperti sebelumnya. Namun, beberapa video dengan kualitas sangat tinggi (mis. Satu cetakan film yang 5GB) kehilangan kualitas - video semuanya pixelated.
Saya tidak yakin apa yang harus dilakukan dalam kasus ini. Apakah saya perlu mengubah crf
parameter di baris perintah saya? Atau sesuatu yang lain?
Masalahnya, saya melakukan konversi massal. Jadi, saya memerlukan metode di mana avconv
secara otomatis menyesuaikan parameter apa pun yang perlu penyesuaian, untuk setiap video.
UPDATE-1
Saya menemukan itu crf
adalah tombol yang harus saya sesuaikan. CRF default adalah 28. Untuk kualitas yang lebih baik, saya bisa menggunakan sesuatu yang kurang dari 28. Misalnya:
avconv -i input.mp4 -c:v libx265 -x265-params crf=23 -c:a copy output.mp4
Namun, masalahnya adalah bahwa untuk beberapa video, nilai CRF 28 cukup baik, sedangkan untuk beberapa video, CRF yang lebih rendah diperlukan. Ini adalah sesuatu yang harus saya periksa secara manual dengan mengonversi bagian kecil dari video besar. Tetapi dalam konversi massal, bagaimana saya memeriksa setiap video secara manual? Apakah cara mereka yang avconv
dapat menyesuaikan CRF sesuai dengan video input cerdas?
UPDATE-2
Saya menemukan bahwa ada --lossless
opsi di x265: http://x265.readthedocs.org/en/default/lossless.html .
Namun, saya tidak tahu bagaimana menggunakannya dengan benar. Saya mencoba menggunakannya dengan cara berikut tetapi menghasilkan hasil yang berlawanan (video itu bahkan lebih pixelated):
avconv -i input.mp4 -c:v libx265 -x265-params lossless -c:a copy output.mp4
sumber
--lossless
mungkin sebenarnya memperbesar file, jika ia menerjemahkan codec yang sebelumnya lossy dan kemudian mengkodekan apa yang ia decode lossless. Kualitas akan tetap sama persis dengan input.Jawaban:
Dari pengalaman saya sendiri, jika Anda benar-benar tidak ingin kehilangan kualitas, --losless adalah apa yang Anda cari.
Tidak yakin tentang
avconv
tetapi perintah yang Anda ketik terlihat identik dengan apa yang saya lakukanFFmpeg
. DiFFmpeg
Anda dapat melewati parameter seperti ini:Sebagian besar
x265
sakelar (opsi tanpa nilai) dapat ditentukan seperti ini (kecuali yang hanya CLI, yang hanya digunakan denganx265
biner secara langsung).Dengan itu, saya ingin berbagi pengalaman saya dengan
x265
pengkodean. Untuk sebagian besar video (baik itu WMV, atau MPEG, atau AVC / H.264) saya gunakancrf=23
.x265
memutuskan sisa parameter dan biasanya itu melakukan pekerjaan yang cukup baik.Namun sering sebelum saya berkomitmen untuk transcoding video secara keseluruhan, saya menguji pengaturan saya dengan mengubah sebagian kecil dari video tersebut. Berikut ini sebuah contoh, misalkan file mkv dengan stream 0 menjadi video, streaming 1 menjadi audio DTS, dan streaming 2 menjadi subtitle:
Perhatikan bahwa garis sinyal backslash terputus dalam sebuah perintah yang panjang, saya melakukannya untuk membantu saya melacak berbagai bit dari input CLI yang kompleks. Sebelum saya menjelaskannya baris demi baris, bagian di mana Anda hanya mengkonversi sebagian kecil dari video adalah baris kedua dan baris terakhir kedua:
-ss 0
berarti mencari 0 detik sebelum mulai mendekode input, dan-t 120
berarti berhenti menulis ke output setelah 120 detik. Anda juga dapat menggunakan format waktu jj: mm: dd atau jj: mm: dd.sss.Sekarang baris demi baris:
-hide_banner
mencegahFFmpeg
menampilkan informasi bangunan saat mulai. Saya hanya tidak ingin melihatnya ketika saya menggulir ke atas di konsol;-ss 0
cari 0 detik sebelum mulai mendekode input. Perhatikan bahwa jika parameter ini diberikan setelah file input dan sebelum file output, itu menjadi opsi output dan memberitahuffmpeg
untuk mendekode dan mengabaikan input sampai x detik, dan kemudian mulai menulis ke output. Sebagai opsi input, ini kurang akurat (karena pencarian tidak akurat dalam kebanyakan format wadah), tetapi hampir tidak memerlukan waktu. Sebagai opsi keluaran, ini sangat tepat tetapi membutuhkan banyak waktu untuk memecahkan kode semua aliran sebelum waktu yang ditentukan, dan untuk tujuan pengujian Anda tidak ingin membuang waktu;-i "INPUT.mkv"
: Tentukan file input;-attach "COVER.jpg"
: Pasang seni sampul (gambar mini, poster, apa pun) ke output. Seni sampul biasanya ditampilkan di penjelajah file;-map_metadata 0
: Salin atas semua dan semua metadata dari input 0, yang dalam contoh ini hanyalah input;-map_chapters 0
: Menyalin info bab (jika ada) dari input 0;-metadata title="TITLE"
: Tetapkan judul video;-map 0:0 ...
: Peta aliran 0 dari input 0, yang berarti kita ingin aliran pertama dari input ditulis ke output. Karena aliran ini adalah aliran video, itu adalah aliran video pertama dalam output , karenanya penentu aliran:s:v:0
. Tetapkan tag bahasanya ke Bahasa Inggris;-map 0:1 ...
: Mirip dengan baris 8, petakan streaming kedua (audio DTS), dan atur bahasa dan judulnya (untuk memudahkan identifikasi saat memilih dari pemain);-map 0:2 ...
: Mirip dengan baris 9, kecuali aliran ini adalah subtitle;-metadata:s:t:0 ...
: Atur metadata untuk sampul depan. Ini diperlukan untuk format wadah mkv;-c:v libx265 ...
: Opsi codec video. Sudah begitu lama sehingga saya memecahnya menjadi dua baris. Pengaturan ini baik untuk video bluray berkualitas tinggi (1080p) dengan gradasi minimum gradien (yang x265 sucks at). Kemungkinan besar adalah pembunuhan berlebihan untuk DVD dan acara TV dan video ponsel. Pengaturan ini sebagian besar dicuri dari posting Doom9 ini ;crf=22:...
: Kelanjutan parameter codec video. Lihat posting forum yang disebutkan di atas;-c:a copy
: Menyalin audio;-c:s copy
: Salin teks terjemahan;-t 120
: Berhenti menulis ke output setelah 120 detik, yang memberi kita klip 2 menit untuk melihat pratinjau kualitas trancoding;"OUTPUT.HEVC.DTS.Sample.mkv"
: Output nama file. Saya menandai nama file saya dengan codec video dan codec audio utama.Wah. Ini adalah jawaban pertama saya jadi jika ada sesuatu yang saya lewatkan silakan tinggalkan komentar. Saya bukan ahli produksi video, saya hanya seorang lelaki yang terlalu malas untuk menonton film dengan memasukkan disk ke dalam pemutar.
PS. Mungkin pertanyaan ini milik orang lain karena tidak terkait erat dengan Unix & Linux.
sumber
c:s copy
jika tidak ada konten subtitle?--lossless
. Saya sia-sia mencari konversi lossless dari h264 ke h265, dan apa yang saya pelajari mengatakan bahwa secara matematis tidak mungkin.--lossless
peralihan dari jawaban ini, karena menempatkan di sana sebagai jawaban untuk pertanyaan ini sepertinya Anda mengatakan itu kompresi lossless, yang menyesatkan.Saya baru-baru ini mengalami kesulitan Transcoding seluruh katalog video saya ke HEVC. Saya menggunakan https://github.com/FallingSnow/h265ize dengan pengaturan berikut.
h265ize -v -m medium -q 20 -x --no-sao --aq-mode 3 --delete --stats
-v - Output Verbose
-m medium - Kecepatan encode sedang (kualitas lebih tinggi lebih kecil, apa pun lebih lambat saya temukan tidak sebanding dengan waktu / kualitas dif)
-q 20 - CRF yang digunakan, 20 mirip dengan 18 atau lebih di x264 tapi hei. Ini untuk konten 1080p (90% dari TV saya) Saya cenderung menggunakan 22 untuk film 4K saya
-x - Menggunakan x265 perintah pusat yang ditentukan
--no-sao mematikan Sample Adaptive Offset (meningkatkan kecepatan penyandian)
--aq-mode 3 - gunakan Adaptive Quantisation dengan auto variance, membantu penyandian 8bit, terutama di daerah gelap, menghentikan sebagian besar penambatan yang dapat terjadi (dengan mengorbankan waktu penyandian) -
menghapus - mengganti file penyandian dengan file yang disandikan (uji sebelum menggunakan yang ini )
--stats - Tulis statistik ke file csv di root dari path tempat Anda berlari.
Kecepatan encode sekitar 30fps (untuk sebagian besar 1080p stuff) di rig saya. Dual Xeon E5 2687W v2, tapi saya memaksa proses FFMPEG untuk tidak menggunakan sisi pertama dari salah satu prosesor (Ini adalah server Plex saya, jadi harus memastikan ada overhead untuk transcode jika diperlukan pada pemutaran dll)
Ya butuh beberapa saat untuk mengonversi sebagian besar dari itu, dan sekarang saya memiliki tugas terjadwal yang berjalan dua kali sehari untuk menyandikan barang-barang dari hari itu ke x265.
Penghematan ruang sangat besar. SAN awal saya menggunakan 20TB, sekarang sekitar 12 tetapi jelas telah ditambahkan juga dengan 6 bulan lebih banyak konten.
Saya sudah mulai transcode semua Film saya juga, bagaimanapun, itu adalah proses yang berkelanjutan, karena saya harus mengidentifikasi level kualitas (untungnya Radarr memberi label dengan baik) dan menggunakan salah satu dari tiga pengaturan transcode:
-m slower -q 18 -x --no-sao --aq-mode 3
untuk 720p transcodes-m medium -q 20 -x --no-sao --aq-mode 3
untuk 1080p-m medium -q 22 -x --no-sao
untuk 2160pSemoga itu bisa membantu sebagian orang. Berteriaklah jika ada yang membutuhkan pengaturan tangan. Dan sebelum Anda menyandikan semuanya ke x265, pikirkan tentang pemutaran, jika klien tidak mendukung x265 asli, maka transcade dapat menjadi mahal dalam hal CPU dan Kualitas.
sumber
-q 20
bukan CRF 20, itu adalah ratecontrol QP konstan . Mode standar dan yang disarankan, CRF, meningkatkan QP dalam adegan dengan kompleksitas tinggi sehingga tidak menghabiskan terlalu banyak bit pada adegan yang terlalu sulit untuk dikodekan. (Jika Anda ingin lebih dekat dengan QP seragam, naikkanqcomp
dari standar 0,6 ke mungkin 0,7 atau 0,8. Lebih dekat ke 1,0 lebih dekat ke CQP.)Sintaks yang benar untuk mengaktifkan mode lossless untuk encoder x265 di ffmpeg adalah
-x265-params lossless=1
(Anda harus menambahkan=1
).Namun, untuk pengkodean lossless ada pilihan codec yang lebih baik. Saya menemukan dengan menguji bahwa FFV1 kompres jauh lebih baik (ukuran file = ~ 80% dari x265) setidaknya pada beberapa jenis video (jika pengaturan terbaik dipilih untuk kedua codec). Dan itu juga bekerja lebih cepat, dan (AFAIK) tidak dibebani oleh paten. Artinya, ini lebih unggul dari H.265 lossless dalam segala hal untuk pengarsipan video.
sumber