Bagaimana saya bisa mengekstrak gambar dari waktu tertentu video di Xubuntu 16.04?

8

Saya mencari opsi baris perintah.

Misalnya, jika saya memiliki video sample-video.mp4, dan saya ingin membuat file gambar sample-image.jpgdari video pada waktu 00:00:26, perintah apa yang harus saya berikan?

Juga, akan sangat membantu jika Anda dapat menjelaskan secara rinci apa fungsi dari setiap argumen dari perintah tersebut.

Sonevol
sumber
2
Menurut pertanyaan ini dan jawabannya ffmpegsepertinya mendukung nama file untuk output.
IQV

Jawaban:

8

Anda dapat menggunakan mplayer(dari paket mplayer, tidak diinstal secara default):

mplayer -vo jpeg -ss 00:00:26 -frames 1 sample-video.mp4

Ini akan membuat file 00000001.jpgsehingga Anda harus mengganti namanya. Sejauh yang saya tahu tidak ada cara untuk menentukan nama file.

-vo jpegberarti Anda ingin output JPEG, -ss 00:00:26mencari ke posisi yang diberikan, -frames 1berarti memproses satu frame dan kemudian berhenti.

Florian Diesch
sumber
Apa keuntungan mendapatkan lebih dari 1 bingkai? Apakah itu salinan atau setiap frame akan berbeda satu detik?
Sonevol
Gambar yang dibuat dari lebih banyak bingkai akan berbeda dengan sepersekian detik. Nilai pastinya tergantung pada video.
Florian Diesch
5
@Sonevol Frame tepat pada 0:00:26 mungkin tidak persis seperti yang Anda inginkan. Anda mungkin ingin mengambil ~ 50 frame antara 0:00:25 dan 0:00:27 (atau bahkan hanya 3-4 frame di sekitar tanda 0:00:26) dan kemudian telusuri melalui mereka untuk memilih yang terbaik.
xDaizu
1
@FlorianDiesch Kemungkinan juga untuk keluaran ke png dengan sesuatu seperti: -vo png:z=9dengan pengaturan -z menentukan tingkat kompresi. Untuk jpeg Anda juga bisa menambahkan dalam pengaturan kualitas: -vo jpeg:quality=100. Tapi jawaban Anda bagus seperti yang sudah :)
andrew.46
13

Anda dapat menggunakan ffmpeg

ffmpeg -loglevel quiet -ss 26 -i sample-video.mp4  -t 1 -f image2 anyfilename.jpeg
  • -loglevel mengatur logoutput ke sunyi karena ffmpeg sangat cerewet
  • -ss adalah seek (dalam detik, yaitu tempat Anda ingin mengambil snapshot)
  • -Saya input file video
  • jangka waktu -t snapshot (dalam detik)
  • -f filetype

Anda juga dapat bermain-main dengan opsi, seperti mengontrol kualitas keluaran -q:v <linear integer 1-10>atau resolusi jpeg -s 480x300.

Ada lebih banyak ide di sini


Metode VLC

cvlc sample-video.mp4 --start-time=26 --run-time=1 --rate=1 --video-filter=scene --vout=dummy --aout=dummy  --scene-ratio=24 --scene-prefix=sample-image --scene-replace vlc://quit
  • cvlc - karena itu command-line dan kami tidak ingin ada jendela yang terbuka. juga, ini berarti kita dapat menjalankannya tanpa X11.

  • --start-time = 26 - adalah posisi yang tepat dari foto dalam detik

  • --run-time = 1 - berapa lama video akan "diputar" dalam detik. Kami memainkannya selama satu detik untuk membuat tangkapan layar dari detik ini
  • --rate = 1 kapan harus mengambil tangkapan layar. Ini pada dasarnya berarti "setiap detik" dan berguna, jika Anda memiliki file lebih lama, untuk mengambil tangkapan layar setiap 60 detik atau setiap 5 menit
  • --video-filter = scene beri tahu VLC bahwa kami ingin mengambil tangkapan layar
  • --vout = dummy tidak ada output untuk video di X11, kami tidak membutuhkannya
  • --aout = dummy tidak ada output untuk audio, kami tidak membutuhkannya
  • --scene-ratio = 24, kami memberi tahu VLC bahwa ada sekitar 24 frame per detik
  • --scene-prefix = sample-image nama file screenshot Anda
  • --scene-replace ganti semua file yang disebut seperti tangkapan layar sample-image.pngAnda dengan tangkapan layar Anda saat ini. Jika Anda menghilangkan ini, VLC akan mulai memberi penomoran tangkapan layar
  • vlc: // berhenti keluar dari vlc setelah kita selesai

Dokumentasi lengkap di sini

Robert Riedl
sumber
Apa yang kamu maksud dengan cerewet? Dan saya ingin foto pada detik ke-26. Jadi mengapa tentukan jangka waktu dengan -t. Saya mengambil gambar bukan video.
Sonevol
3
"Chatty" karena ffmpeg mencetak lebih dari 40 baris output log dengan perintah ini, seperti versi saat ini, jenis pengaturan dan informasi tentang file video input - yang tidak menarik untuk Anda. Untuk tujuan Anda, Anda mungkin dapat menghilangkan "-t 1". Tampaknya default adalah satu detik atau sebagian kecil dari itu, yang baik untuk tangkapan layar. Perbedaan yang bagus adalah kemungkinan untuk menentukan nama file keluaran dan kualitas / resolusi tweak, dll.
Robert Riedl