Как правильно вырезать видео с помощью ffmpeg?

949
scaryguy

У меня есть видео. Вот его ffprobeвывод:

> ffprobe 7347-00009\ kliksa.mp4 ffprobe version 2.6.1 Copyright (c) 2007-2015 the FFmpeg developers built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn) configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-libfreetype --enable-libvorbis --enable-libvpx --enable-libass --enable-ffplay --enable-libfdk-aac --enable-libopus --enable-libquvi --enable-libx265 --enable-nonfree --enable-vda libavutil 54. 20.100 / 54. 20.100 libavcodec 56. 26.100 / 56. 26.100 libavformat 56. 25.101 / 56. 25.101 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 11.102 / 5. 11.102 libavresample 2. 1. 0 / 2. 1. 0 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 1.100 / 1. 1.100 libpostproc 53. 3.100 / 53. 3.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '7347-00009 kliksa.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: avc1isommp42 creation_time : 2015-09-17 14:04:14 Duration: 00:00:30.44, start: 0.000000, bitrate: 7238 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 6977 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default) Metadata: creation_time : 2015-09-17 14:04:14 handler_name : ?Apple Video Media Handler encoder : inegy Cinecoder H.264 Encoder Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 255 kb/s (default) Metadata: creation_time : 2015-09-17 14:04:14 handler_name : ?Apple Sound Media Handler 

Все игроки показывают, что его продолжительность составляет 30 секунд. Но это ТОЧНАЯ продолжительность, 00:00:30.44как ffprobeпоказывает.

То, что я хочу сделать, это установить продолжительность видео точно 00:00:30.00.

Я попробовал это:

ffmpeg -i 7347-00009\ kliksa.mp4 -c copy -ss 00:00:00.000 -to 30.000 test.mp4 

Но у меня все еще есть продолжительность 00:00:30.02. Вот вывод ffprobe:

> ffprobe test.mp4 ffprobe version 2.6.1 Copyright (c) 2007-2015 the FFmpeg developers built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn) configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-libfreetype --enable-libvorbis --enable-libvpx --enable-libass --enable-ffplay --enable-libfdk-aac --enable-libopus --enable-libquvi --enable-libx265 --enable-nonfree --enable-vda libavutil 54. 20.100 / 54. 20.100 libavcodec 56. 26.100 / 56. 26.100 libavformat 56. 25.101 / 56. 25.101 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 11.102 / 5. 11.102 libavresample 2. 1. 0 / 2. 1. 0 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 1.100 / 1. 1.100 libpostproc 53. 3.100 / 53. 3.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf56.25.101 Duration: 00:00:30.02, start: 0.000000, bitrate: 7240 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 6982 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 255 kb/s (default) Metadata: handler_name : SoundHandler 

Итак, как я могу точно вырезать рамку видео?

3
Разве не странно, что никто не знает, как это сделать? : \ scaryguy 8 лет назад 0
Я пытался воспроизвести ваши результаты (продолжительность отличается от указанной), и у меня возникли некоторые трудности - все видео, которые производил для меня ffmpeg, имели ту же продолжительность, о которой я просил. Когда я делал это, я думал, что это может быть связано с копированием битового потока, но перекодирование фактически усугубило проблему. Я подозреваю, что это может быть связано с нюансом `libx264`, но это всего лишь предположение. Однако вы можете получить ответ [в списке рассылки `ffmpeg-user`] (https://www.ffmpeg.org/contact.html). bertieb 8 лет назад 0
Я думаю, что проблема вызвана командой потокового копирования. Возможно, не удастся обрезать середину кадров. Попробуйте с -vcodec libx264 в качестве теста. Elliott B 8 лет назад 0

1 ответ на вопрос

0
Peter Bašista

Согласно этому ответу, безошибочное вырезание видео с использованием ffmpegбез перекодирования возможно только на границах GOP. Я не уверен, относится ли это к вырезке только в конце видео или нет.

Кстати, видео с постоянной частотой кадров при 25 кадрах в секунду не может иметь продолжительность 30,02 секунды. 1 кадр должен отображаться в течение 1/25 секунды, что составляет 0,04 секунды.

Может быть, у вашего видео просто плохие метки времени? Попробуйте восстановить их:

ffmpeg -i test.mp4 -fflags +genpts output.mp4 

Похожие вопросы