Satu-satunya alat baris perintah Linux yang saya temukan sejauh ini, yang dapat memotong pada frame yang tepat (atau, dengan akurasi frame), adalah melt
( sudo apt-get install melt
).
Katakanlah Anda memiliki inputvid.mp4
- periksa pengaturan penyandiannya dulu dengan mengatakan ffmpeg
(di sini, saya hanya mengatakan saya ingin menyandikannya lagi -f mp4
, tetapi sebagai file /dev/null
sehingga keluarannya dibuang; saya mengarahkan stderr agar saya dapat menerimanya - catatan di tengah , perintahnya meminta, dan Anda harus menjawab y
dengan ENTER, sehingga proses melanjutkan dan membuang info yang berguna; ini dengan ffmpeg 3.3.3 di Ubuntu 14):
ffmpeg -i inputvid.mp4 -f mp4 /dev/null 2>&1 | grep 'Stream\|encoder'
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(tv, bt709), 640x360 [SAR 1:1 DAR 16:9], 389 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 95 kb/s (default)
y
File '/dev/null' already exists. Overwrite ? [y/N] Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
encoder : Lavf57.71.100
Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p(progressive), 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 23.98 fps, 24k tbn, 23.98 tbc (default)
encoder : Lavc57.89.100 libx264
Stream #0:1(und): Audio: aac (LC) ([64][0][0][0] / 0x0040), 44100 Hz, stereo, fltp, 128 kb/s (default)
encoder : Lavc57.89.100 aac
Ok, jadi kita bisa melihat ffmpeg
lagi memilih libx264
dan aac
encoders untuk video ini; maka kita dapat memasukkan ini untuk melt
:
melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac vcodec=libx264
.... dan melt
akan memotong dengan bagian di antara frame 7235 dan 7349 menjadi file baru cut.mp4
,. Kemudian untuk memeriksa apakah cut.mp4
loop benar, gunakan melt
lagi untuk memutarnya dua kali - dan putar ke jendela SDL:
melt cut.mp4 cut.mp4 -consumer sdl
... dan inilah yang ffmpeg
dilihat untuk file ini:
ffmpeg -i cut.mp4 -f mp4 /dev/null 2>&1 | grep 'Stream\|encoder' encoder : Lavf54.20.4
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 526 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default)
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 182 kb/s (default)
y
File '/dev/null' already exists. Overwrite ? [y/N] Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
Stream #0:1 -> #0:1 (aac (native) -> aac (native))
encoder : Lavf57.71.100
Stream #0:0(und): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 23.98 fps, 24k tbn, 23.98 tbc (default)
encoder : Lavc57.89.100 libx264
Stream #0:1(und): Audio: aac (LC) ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 128 kb/s (default)
encoder : Lavc57.89.100 aac
Pengaturan pengkodean video untuk cut.mp4
tampaknya identik dengan inputvid.mp4
kecuali bitrate video berubah dari 389 kb / s menjadi 526 kb / s, dan juga pengaturan pengodean audio hampir sama, kecuali laju pengambilan sampel berubah dari 44100 ke 48000 Hz; meskipun itu bisa diatur dengan:
melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac ar=44100 ab=95k vcodec=libx264 vb=389k
... Namun, bahkan dengan ini, bitrate video akhir untuk saya berakhir 337 kb / s. Namun, pemotongan lingkaran baik-baik saja (dan itu termasuk audio) ketika diputar dalam satu lingkaran, jadi saya kira ini memang bingkai-akurat ...