Saya noob untuk mengedit video, jadi maafkan saya jika saya meminta sesuatu yang konyol.
Saya mendapatkan klip video dari kotak set top recorder. Klip adalah file AVI:
Resolution: 1920 x 1080
Frames Per Second: 60
Video Format: ITU H.264
Audio Format: MPEG 1 Audio, Layer 3 (MP3)
Resolusi dan FPS jauh melampaui apa yang saya butuhkan, jadi saya mencoba menjalankan perintah untuk memperkecil:
ffmpeg -i highres.avi -r 30 -s 960x540 lowerres.avi
Ini berhasil memberi saya resolusi yang diinginkan, framerate dan ukuran file yang lebih rendah, tetapi juga menurunkan kualitas lebih dari yang saya harapkan.
Saya melihat file baru, dan menemukan bahwa untuk beberapa alasan FFmpeg mengkonversi format yang digunakan:
Video Format: FFmpeg MPEG-4
Audio Format: MPEG 1 Audio, Layer 2
Tidak jelas bagi saya mengapa tidak menggunakan format output yang sama dengan format input. Saya mencoba menggunakan perintah ini untuk memaksanya menggunakan H.264:
ffmpeg -i highres.avi -r 30 -s 960x540 -f h264 lowerresforceh264.avi
Sayangnya, gagal dengan output berikut:
ffmpeg version 0.7.3-4:0.7.3-0ubuntu0.11.10.1, Copyright (c) 2000-2011 the Libav developers
built on Jan 4 2012 16:21:50 with gcc 4.6.1
configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
WARNING: library configuration mismatch
avutil configuration: --extra-version='4:0.7.3ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
avcodec configuration: --extra-version='4:0.7.3ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
avformat configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
avdevice configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
avfilter configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
swscale configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
postproc configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay
libavutil 51. 7. 0 / 51. 7. 0
libavcodec 53. 6. 0 / 53. 6. 0
libavformat 53. 3. 0 / 53. 3. 0
libavdevice 53. 0. 0 / 53. 0. 0
libavfilter 2. 4. 0 / 2. 4. 0
libswscale 2. 0. 0 / 2. 0. 0
libpostproc 52. 0. 0 / 52. 0. 0
Input #0, avi, from 'highres.avi':
Metadata:
comment : Quality_GOOD
encoder : Lavf52.64.2
encoded_by : AverMedia_c281_1.7.2
Duration: 00:01:59.28, start: 0.000000, bitrate: 10263 kb/s
Stream #0.0: Video: h264 (High), yuv420p, 1920x1080, 59.94 fps, 59.94 tbr, 59.94 tbn, 119.88 tbc
Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s
[buffer @ 0x8f438a0] w:1920 h:1080 pixfmt:yuv420p
[scale @ 0x8f431e0] w:1920 h:1080 fmt:yuv420p -> w:960 h:540 fmt:yuv420p flags:0x4
[libx264 @ 0x8f0fb40] broken ffmpeg default settings detected
[libx264 @ 0x8f0fb40] use an encoding preset (e.g. -vpre medium)
[libx264 @ 0x8f0fb40] preset usage: -vpre <speed> -vpre <profile>
[libx264 @ 0x8f0fb40] speed presets are listed in x264 --help
[libx264 @ 0x8f0fb40] profile is optional; x264 defaults to high
Output #0, h264, to 'lowerresforceh264.avi':
Stream #0.0: Video: libx264, yuv420p, 960x540, q=2-31, 200 kb/s, 90k tbn, 30 tbc
Stream mapping:
Stream #0.0 -> #0.0
Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
Saya tidak yakin mengapa saya tidak bisa melakukan ini. Menjalankan "ffmpeg-format" terdaftar h264 sebagai salah satu yang bisa digunakan untuk input dan output.
Jika ada yang bisa mengarahkan saya ke arah yang benar, saya akan sangat menghargainya. Terima kasih.
PS: Saya menggunakan FFmpeg versi 0.7.3-4: 0.7.3-0 di Ubuntu 11.10.
EDIT
Saya telah menemukan solusi melihat penggunaan preset. Setelah mencari informasi tentang preset, saya menemukan tutorial berikut yang membahasnya:
http://juliensimon.blogspot.com/2009/01/howto-ffmpeg-x264-preset.html
Saya hanya perlu menentukan codec dan pengaturan preset yang tepat seperti:
ffmpeg -i highres.avi -r 30 -s 960x540 -vcodec libx264 -vpre medium lowerresforceh264vpremedium.avi
Saya masih memiliki beberapa penyesuaian yang harus dilakukan, tetapi pada dasarnya ini yang saya inginkan. Terima kasih.
sumber
Jawaban:
Saya mencoba membantu. Pertama, saya tidak mengerti mengapa Anda mengatakan FFMPEG H.264 bukan format input?
Saya tidak tahu baris perintah FFMPEG dengan cukup baik (apakah ada orang yang tahu?;)). Harus ada saklar untuk pengkodean multi-kelas. Saya tahu ada beberapa preset bawaan yang mungkin bisa Anda gunakan dan lakukan hampir pasti apa yang Anda tuju. Ini biasanya disebut x264 preset atau x264 tune. Bisakah Anda menemukan yang seperti itu?
sumber
ffmpeg telah menghapus preset x264 mereka sehingga pengaturan -vpre tidak berfungsi lagi.
Sekarang, saya memiliki skrip untuk mengonversi file video ke format yang dapat ditangani oleh Ponsel saya.
Saya akan menjelaskan setiap opsi
-sws_flags lanczos+accurate_rnd
opsi ini adalah algoritma downscaling, lanczos direkomendasikan karena menghasilkan artefak yang paling sedikit tanpa blur tetapi lambat.-vf "scale=..."
Cukup jelas tentukan resolusi output-crf 20
ini adalah kualitas, 20 adalah pengaturan akhir yang baik (jangan gunakan sebelum mengedit), ini adalah kualitas konstan dan merupakan pilihan terbaik ketika ukuran file tidak ketat dan akan menghasilkan kualitas yang lebih baik pada ukuran file terendah daripada yang lain , jika tidak, gunakan dua pass untuk kualitas maksimum pada ukuran file tertentu (seperti harus pas pada CD atau DVD), bitrate tetap (mis.-b 2000k
) hanya boleh digunakan saat streaming, case khusus adalah '0' yang lossless dan kisaran opsi ini adalah dari 1 (kualitas tertinggi) hingga 50 (kualitas terendah).Tes yang baik untuk ini adalah menjalankan melalui pengkodean dengan -crf 20 perhatikan bitrate, dan kemudian gunakan itu sebagai -b pengaturan untuk versi 2 file keduanya harus memiliki ukuran file yang sama, bandingkan keduanya untuk kualitas perbedaan.
-preset veryslow
ini memilih berapa banyak CPU yang ingin Anda gunakan, semakin lambat itu semakin kecil ukuran file dan kualitas yang lebih baik.-profile:v main
ini adalah profil H.264 untuk digunakan. tinggi adalah ukuran file yang paling efisien tetapi menggunakan banyak CPU untuk memecahkan kode dibandingkan dengan format lain, yang dikatakan paling populer karena kebanyakan ponsel memiliki decoder hardware yang terpasang dan flash player mendukungnya, milikku tidak jadi aku harus gunakan main.-tune fastdecode
ponsel saya tidak suka memainkan file tanpa opsi ini, tetapi biasanya ini dapat dibiarkan kosong atau disetel ke 'film' untuk video game, alasan utama Anda menggunakan ini adalah untuk mendapatkan kualitas ekstra.Dan hal terakhir yang saya sarankan menggunakan format wadah modern .avi tidak dirancang untuk menampung H.264 dan dari apa yang saya pahami tidak ada standar untuk menyimpan H.264 atau membuat file lebih besar dari 2GB, sebagian besar implementasi adalah peretasan dan cenderung untuk memiliki masalah, gunakan mkv atau mp4.
sumber
-preset
sebagai di-preset slow
-tune fastdecode
menonaktifkan deblocking, dan bingkai B dan P tertimbang, serta CABAC. Ada decoder yang dapat menangani frame B, tetapi tidak CABAC? Saya menyarankan-profile:v baseline
, jika Anda perlu menargetkan decoder perangkat keras lama. (fastdecode
dapat bermanfaat jika menargetkan decoder perangkat lunak pada CPU yang lambat, tetapi bukan decoder perangkat keras.) Main dengan bingkai B tetapi tidak ada deblocking atau CABAC yang mungkin atau mungkin tidak terlihat lebih baik dari baseline dengan deblocking. +1 untuk merekomendasikan bukan-AVI untuk menyimpan h.264. IIRC, utamanya adalah bingkai B, tapi ya h.264 di avi tidak terstandarisasi dengan baik, dan itu hacky.-crf 20
final yang tinggi. Anda dapat mengubahnya menjadi 22 atau bahkan 24 dan mungkin baik-baik saja, kecuali jika itu adalah gerakan yang hebat, seperti acara olahraga.Ada beberapa hal yang perlu diperjelas:
Coba ini: ffmpeg -i highres.avi -acodec copy -vcodec libx264 -vb 2000k lowerres.avi
sumber
-crf
untuk mengatur mode kualitas konstan.