Saya mencoba memotong video menggunakan waktu mulai dan berakhir video dengan menggunakan perintah berikut
ffmpeg -ss 00:00:03 -t 00:00:08 -i movie.mp4 -acodec copy -vcodec copy -async 1 cut.mp4
Dengan menggunakan perintah di atas saya ingin memotong video dari 00:00:03
menjadi 00:00:08
. Tapi itu tidak memotong video di antara waktu-waktu itu, bukannya memotong video dengan 11 detik pertama. Adakah yang bisa membantu saya menyelesaikan masalah ini?
Edit 1:
Saya telah mencoba memotong dengan menggunakan perintah berikut yang disarankan oleh mark4o
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4
Tetapi ditunjukkan kesalahan berikut.
encoder 'aac' adalah eksperimental tetapi codec eksperimental tidak diaktifkan
jadi saya menambahkan -strict -2
ke perintah yaitu,
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -strict -2 cut.mp4
Sekarang berfungsi dengan baik.
linux
video
ffmpeg
video-editing
Kalai
sumber
sumber
Jawaban:
Anda mungkin tidak memiliki bingkai kunci pada tanda 3 detik. Karena frame non-key menyandikan perbedaan dari frame lain, mereka memerlukan semua data yang dimulai dengan frame kunci sebelumnya.
Dengan wadah mp4, dimungkinkan untuk memotong pada kerangka non-key tanpa re-encoding menggunakan daftar edit. Dengan kata lain, jika bingkai kunci terdekat sebelum 3s adalah pada 0s maka itu akan menyalin video mulai dari 0s dan menggunakan daftar edit untuk memberitahu pemain untuk mulai bermain 3 detik.
Jika Anda menggunakan ffmpeg terbaru dari git master, ia akan melakukan ini menggunakan daftar edit ketika dipanggil menggunakan perintah yang Anda berikan. Jika ini tidak berhasil untuk Anda, maka Anda mungkin menggunakan versi ffmpeg yang lebih lama, atau pemain Anda tidak mendukung daftar edit. Beberapa pemain akan mengabaikan daftar edit dan selalu memutar semua media dalam file dari awal hingga akhir.
Jika Anda ingin memotong dengan tepat mulai di kerangka non-key dan ingin bermain mulai pada titik yang diinginkan pada pemain yang tidak mendukung daftar edit, atau ingin memastikan bahwa bagian yang dipotong tidak benar-benar dalam file output (misalnya jika berisi informasi rahasia), maka Anda dapat melakukannya dengan menyandikan ulang sehingga akan ada bingkai kunci tepat pada waktu mulai yang diinginkan. Pengodean ulang adalah default jika Anda tidak menentukan
copy
. Sebagai contoh:Saat menyandikan ulang, Anda mungkin juga ingin menyertakan opsi terkait kualitas tambahan atau penyandi AAC tertentu. Untuk detailnya, lihat Panduan Pengkodean ffmpeg x264 untuk video dan Panduan Pengkodean AAC untuk audio.
Juga,
-t
opsi menentukan durasi, bukan waktu akhir. Perintah di atas akan menyandikan 8s video mulai dari 3s. Untuk memulai pada 3s dan berakhir pada 8s gunakan-t 5
. Jika Anda menggunakan versi ffmpeg saat ini, Anda juga dapat menggantinya-t
dengan-to
perintah di atas untuk mengakhiri pada waktu yang ditentukan.sumber
-t
/-to
dan argumennya untuk melanjutkan sampai akhir.-ss
SEBELUM file input (sebelum-i
), karena dengan cara itu ffmpeg akan melompat langsung ke lokasi. Namun, itu juga akan mengatur waktu "nol" ke lokasi itu, yang berarti bahwa-to
akan menunjuk ke waktu yang salah. Sumber: trac.ffmpeg.org/wiki/Seekingffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4
, meskipun file asli tidak memiliki masalah seperti itu.-async 1
.Coba gunakan ini. Ini adalah ffmpeg-cara tercepat dan terbaik yang saya temukan:
Perintah ini memotong video Anda dalam hitungan detik!
Saya sudah menjelaskannya di blog saya di sini :
Format waktu adalah: jj: mm: dd
Harap perhatikan bahwa jawaban saat ini yang sangat ter-update sudah usang dan trim akan sangat lambat. Untuk informasi lebih lanjut, lihat artikel ffmpeg resmi ini .
sumber
ffmpeg -ss 00:01:00 -to 00:02:00 -i input.mp4 -ss 00:01:00 -to 00:02:00 -c copy output.mp4
. Namun, sekarang lompatan rusak dan waktu akhir tidak benar (dalam kasus saya).Gunakan salinan -c untuk membuat instan. Dalam hal ini ffmpeg tidak akan meng-encode ulang video, hanya akan dipotong sesuai ukuran.
sumber
ffmpeg -i movie.mkv -vcodec copy -acodec copy converted_movie.mp4
dan sebaliknyaJatuhkan semuanya kecuali dari 3 ke 8 kedua.
sumber
setpts=PTS-STARTPTS
filter chaining setelah filter trim.-strict -2
sebelumnyacut.mp4
(sebagai lawan dari akhir baris perintah)?Untuk memotong berdasarkan waktu mulai dan berakhir dari video sumber dan menghindari keharusan melakukan matematika, tentukan waktu akhir sebagai opsi input dan waktu mulai sebagai opsi output.
Ini akan menghasilkan potongan 15 detik dari 0:45 hingga 1:00.
Ini karena ketika
-ss
diberikan sebagai opsi output, waktu yang dibuang masih termasuk dalam total waktu yang dibaca dari input, yang-t
digunakan untuk mengetahui kapan harus berhenti. Sedangkan jika-ss
diberikan sebagai opsi input , waktu mulai dicari dan tidak dihitung , dari sanalah kebingungan berasal.Ini lebih lambat daripada mencari karena segmen yang dihilangkan masih diproses sebelum dibuang, tetapi ini adalah satu-satunya cara untuk melakukannya sejauh yang saya tahu. Jika Anda memotong dari dalam file besar, itu lebih bijaksana untuk hanya melakukan perhitungan dan digunakan
-ss
untuk input.sumber
Inilah yang saya gunakan:
mp4
File yang dihasilkan juga dapat digunakan diiMovie
.Referensi: https://www.arj.no/2018/05/18/trimvideo
Jika Anda ingin menggabungkan beberapa adegan potongan, Anda dapat menggunakan skrip berikut:
sumber
Gunakan -untuk bukannya -t: -untuk menentukan waktu akhir, -t menentukan durasi
sumber
Meskipun saya terlambat 6 tahun, tetapi saya pikir semua jawaban di atas tidak menjawab pertanyaan @kalai dengan benar. Skrip bash di bawah ini akan memproses file teks dalam format berikut:
sebagai contoh
dan loop melalui file, unduh file yang
youtube-dl
mendukung, menghitung durasi antarastart_time
danend_time
dan meneruskannyaffmpeg
, karena-t
sebenarnya durasi , bukan yang asliend_time
Pukul aku kalau ada pertanyaan.
sumber