Saya punya video dalam format mp4 dengan frame rate .33
(1 frame selama 3 detik). Saya ingin meningkatkan frame rate menjadi 5 frame / detik. Saya sudah mencoba perintah di bawah ini tetapi tidak melakukan apa-apa:
ffmpeg -i <input.mp4> -r 5 <output.mp4>
Tahu kenapa ffmpeg mengabaikan -r
opsi?
Jawaban:
Saya tahu ini adalah pertanyaan lama tetapi tidak ada jawaban saat ini yang direkomendasikan.
Remuxing lossless (video)
Sebagaimana dicatat dalam komentar ada cara untuk melakukan ini di mana video tidak harus dikodekan ulang. Ini membutuhkan remuxing file ke format MKV penampung yang berbeda dan kemudian remuxing kembali ke MP4. Berikut adalah contoh yang mengubah video menjadi 12 frame / detik:
Jika video berisi audio, Anda juga dapat memperlambatnya tanpa mengubah nada, tetapi itu bukan konversi tanpa kerugian. Contoh di bawah ini mengasumsikan video sumber adalah 24 frame / detik sehingga audio perlu diperlambat hingga setengah (0,5) kecepatan menggunakan filter atempo ffmpeg .
Panduan Wiki FFMPEG
Ini adalah panduan dari wiki ffmpeg . Perhatikan bahwa semua opsi ini memang mengharuskan pengodean ulang video.
Mempercepat / memperlambat video
Anda dapat mengubah kecepatan aliran video menggunakan filter video setpts. Perhatikan bahwa dalam contoh berikut, aliran audio tidak berubah, sehingga idealnya harus dinonaktifkan dengan -an.
Untuk menggandakan kecepatan video, Anda dapat menggunakan:
Filter berfungsi dengan mengubah cap waktu presentasi (PTS) dari setiap bingkai video. Misalnya, jika ada dua frame berturut-turut yang ditampilkan di stempel waktu 1 dan 2, dan Anda ingin mempercepat video, stempel waktu tersebut harus masing-masing menjadi 0,5 dan 1. Jadi, kita harus mengalikannya dengan 0,5.
Perhatikan bahwa metode ini akan menjatuhkan frame untuk mencapai kecepatan yang diinginkan. Anda dapat menghindari frame yang terjatuh dengan menentukan frame rate output yang lebih tinggi dari input. Misalnya, untuk beralih dari input 4 FPS ke input yang dipercepat hingga 4x itu (16 FPS):
Untuk memperlambat video Anda, Anda harus menggunakan pengganda yang lebih besar dari 1:
Halus
Anda dapat memuluskan video lambat / cepat dengan filter video minterpolate. Ini juga dikenal sebagai "interpolasi gerak" atau "aliran optik".
Pilihan lain termasuk slowmoVideo dan Butterflow. Mempercepat / memperlambat audio
Anda dapat mempercepat atau memperlambat audio dengan filter audio atempo. Untuk menggandakan kecepatan audio:
Filter atempo terbatas untuk menggunakan nilai antara 0,5 dan 2,0 (sehingga dapat memperlambatnya hingga tidak kurang dari setengah kecepatan asli, dan mempercepat hingga tidak lebih dari dua kali lipat input). Jika perlu, Anda dapat mengatasi batasan ini dengan merangkai beberapa filter atempo bersama-sama. Berikut ini dengan empat kali lipat kecepatan audio:
Dengan menggunakan filtergraph yang kompleks, Anda dapat mempercepat video dan audio secara bersamaan:
sumber
mkvmerge --default-duration 0:24000/1001fps --fix-bitstream-timing-information 0 in.mkv -o out.mkv
Ubah framerate pada wadah MKV . Anda dapat melakukan remux ke MKV dan kembali ke MP4, atau menemukan alat yang melakukannya untuk MP4 secara langsung. xcoding video sangat intensif-CPU dan lossy, jadi ini pilihan yang mengerikan.Jika file input tidak memiliki frame rate yang valid, Anda mungkin harus mengaturnya secara eksplisit
sumber
Saya hanya bisa membuat framerate yang diubah berlaku jika file input digolongkan sebagai file "mentah":
Tanpa menentukan
-f h264
itu akan default ke 25 fps dan itu tidak dapat diubah. Rupanya ini karena stream tidak memiliki informasi framerate sama sekali dan ini adalah framerate default ffmpeg.Tampaknya ketika Anda menggunakan
-r
sebagai opsi output, duplikat atau menjatuhkan frame sehingga video diputar pada kecepatan yang sama - dalam hal ini, bukan apa yang Anda inginkan! Tetapi mengubah framerate input seperti di atas akan menyebabkan video mempercepat atau memperlambat, tanpa bingkai hilang atau terduplikasi.sumber
Fitur seperti itu - untuk mengubah framerate - disebut "conforming" dan sering digunakan untuk menghasilkan gerak lambat atau maju cepat seperti menunjukkan pertumbuhan tanaman dalam hitungan menit, dalam hitungan hari. ffmpeg tidak mengijinkan menimpa / mengubah framerate tanpa re-encoding . Jika itu terjadi, durasi akan berubah dan audio akan tidak sinkron kecuali jika diperbaiki secara terpisah. Tapi saya khawatir audio tidak menarik dalam kasus Anda dengan framerate 0,33
Anda ingin menyesuaikan karena Anda hanya ingin mengubah framerate, tetapi ffmpeg mengabaikan secara
-r
diam-diamjika framerate ditentukan dalam file input. Karena file input Anda dalam format .mp4, framerate-nya sendiri diutamakanketika re-encode tidak diperlukan. Untuk ini, Anda memerlukan alat yang berbeda: mencoder.-r
Dengan asumsi file input Anda tidak mengandung suara - sepertinya benar untuk semua video dengan framerate .33 - yang Anda butuhkan adalah:
Perhatikan bahwa mencoder secara default menghasilkan output dalam format AVI.
sumber
r
ditentukan sebagai saklar keluaran, ffmpeg akan menghasilkan keluaran pada framerate yang ditentukan, terlepas dari framerate input. Jikar
ditetapkan sebagai saklar input, ffmpeg akan menduplikasi atau menjatuhkan frame seperlunya untuk memberi makan jumlah frame yang ditentukan per detik dari input ke filter / encoder.r
saklar input bertentangan dengan percobaan saya sebelumnya pada format .mp4, catatan Malvineous (di halaman ini) dan deskripsi bug 403 trac.ffmpeg.org/ticket/403 ; deskripsi Anda ketikar
digunakan pada output terjadi ketika pengkodean ulang, sedangkan skenario OP tampaknya kasus yang sesuai (memperbaiki framerate tanpa pengkodean ulang) oleh fakta bahwa ia memiliki 0,33 framerate.r
fps.-r
. Penggunaan itu tidak dapat memengaruhi percobaan saya sebelumnya dalam menanggapi OP karena, karena berpikir tentang kasus yang sesuai, saya tidak pernah menjatuhkan parameter salin dari ffmpeg, dan-r
karenanya diabaikan. Saya menulis permintaan fitur: trac.ffmpeg.org/ticket/5170Cara tercepat adalah membuat file BAT di direktori dengan baris berikut:
Anda harus memiliki mkvmerge dan ffmpeg di direktori yang sama. Ini mengubah setiap file mp4 dalam detik secara otomatis tanpa kehilangan kualitas.
sumber