Şu ana kadar bulduğum, tam kareyi kesebilen (veya kare doğruluğuna sahip) tek Linux komut satırı aracı melt
( sudo apt-get install melt
).
Diyelim ki inputvid.mp4
- ilk önce kodlama ayarlarını kontrol edin ffmpeg
(burada, sadece tekrar kodlamak istediğimi söylüyorum -f mp4
, ancak dosya /dev/null
çıktı olarak atılır; stderr'i yönlendiririm, böylece onu elimden alabilirim) , komut istemde bulunur ve y
ENTER ile cevap vermelisiniz , bu nedenle işlem yararlı bilgiyi iler ve çıkarır; bu, Ubuntu 14'teki ffmpeg 3.3.3'tür):
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
Tamam, bu video için ffmpeg
seçimleri libx264
ve aac
kodlayıcıları görebiliyoruz ; o zaman şunu girebiliriz melt
:
melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac vcodec=libx264
.... ve melt
7235 ile 7349 arasındaki kareler ile parça yeni bir dosyaya kesilecek cut.mp4
,. Ardından cut.mp4
doğru döngüler olup olmadığını kontrol etmek melt
için iki kez çalmak için tekrar kullanın - ve bir SDL penceresine oynatın:
melt cut.mp4 cut.mp4 -consumer sdl
... ve işte ffmpeg
bu dosya için görünen şey :
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
Bunun için video kodlama ayarları , 389 kb / sn'den 526 kb / sn'ye değiştirilen video bit hızının haricinde olduğu cut.mp4
gibi görünmektedir inputvid.mp4
ve ayrıca ses kodlama ayarları, örnekleme hızı 44100'den 48000 Hz'ye değiştirilenlerin haricinde hemen hemen aynıdır; Bununla birlikte düzenlenebilir:
melt inputvid.mp4 in=7235 out=7349 -consumer avformat:cut.mp4 acodec=aac ar=44100 ab=95k vcodec=libx264 vb=389k
... Bununla birlikte, bununla bile, benim için son video bit hızı 337 kb / s. Yine de, bir döngüde çalındığında kesimler iyi işliyor (ve bu ses içeriyor), bu yüzden bu gerçekten kare-doğru ...