21 / 19 / 4
Регистрация: 15.01.2015
Сообщений: 202
1

FFmpeg разрезать и склеить обратно

24.12.2019, 06:49. Показов 2074. Ответов 5

Доброго времени суток. Юзаю ffmpeg т.к. я ленивая жопа и резать и клеить видео другими редакторами мне лень. Даже софтину запилил которая передает параметры из конфиг файла в ffmpeg....

Теперь по сути. Есть видео файлы в формате mp4 которые я резал командой
Windows Batch file
1
ffmpeg.exe -i inputFile.mp4 -ss 00:00:01 -to 23:59:59 -c:v copy -c:a copy outputFile.mp4
И все прекрасно работало, но съезжал звук еще при резке, а уж когда склеивал обратно, еще хуже становилось.

На просторах сети нашел похожую проблема, решением была конвертация в avi и если сделать так:
Windows Batch file
1
ffmpeg.exe -i inputFile.mp4 -ss 00:00:01 -to 23:59:59 outputFile.avi
качество слетает напрочь.
Тогда нашел такой вариант:
Windows Batch file
1
ffmpeg.exe -i inputFile.mp4 -ss 00:00:01 -to 23:59:59 -qscale 0 -acodec libmp3lame -vcodec mpeg4 -vtag DIVX outputFile.avi
И после резки проблем никаких, а вот когда склеил некоторые куски видео были без звука, а при попадании на другие плеер вообще вылетал с ошибкой.

Подскажите, что не так? Может кодеки не те или еще что-то не так...
Объединял видео командой:
Windows Batch file
1
ffmpeg.exe -f concat -safe 0 -i C:\spisokFailov.txt -c copy outputFile.avi
P.S. В обработке видео почти не шарю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2019, 06:49
Ответы с готовыми решениями:

Склеить 2 Gif с прозрачным фоном в ffmpeg
Столкнулся с проблемой, нужно склеить 2 gif файла в ffmpeg, у обоих файлов прозрачный фон и...

Как в ffmpeg разрезать каждый видеофайл по середине и эти 2 части поменять местами?
В папке C:\test лежат несколько видеофайлов (более 10шт.), Все файлы разных форматов: - mkv -...

Разбить длинную переменную на отдельные байты и потом обратно склеить
Если мне неохота делать сложные операции со строками (как я много нашел примеров в сети) можно ли...

RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work warn
import matplotlib.pyplot as plt import Squarediamondlib as Land from pydub import AudioSegment...

Что-то не так с Encoding данных туда и обратно: byte в string и обратно в byte
Добрый день, коллеги! Столкнулся с такой проблемой, причём заметил её не сразу ("вроде бы всё...

5
239 / 217 / 46
Регистрация: 17.04.2010
Сообщений: 525
24.12.2019, 12:26 2
Цитата Сообщение от yagami2 Посмотреть сообщение
Юзаю ffmpeg т.к. я ленивая жопа ... Даже софтину запилил
Странное противоречие Самое ленивое это использовать готовые решения, например в Avidemux можно порезать или склеить за пару кликов.

Цитата Сообщение от yagami2 Посмотреть сообщение
все прекрасно работало, но съезжал звук еще при резке
Если нужно разрезать без потерь, то в -ss нужно попасть точно в ключевой кадр, иначе есть шанс рассинхрона. Можно указать -ss перед -i с дополнительным параметром -copyts, часто этого бывает достаточно.
Windows Batch file
1
ffmpeg.exe -ss 00:01:00 -i inputFile.mp4 -to 00:02:00 -c copy -copyts outputFile.mp4
Цитата Сообщение от yagami2 Посмотреть сообщение
конвертация в avi
Тип контейнера точно на это не влияет.
0
21 / 19 / 4
Регистрация: 15.01.2015
Сообщений: 202
24.12.2019, 13:52  [ТС] 3
Цитата Сообщение от x128 Посмотреть сообщение
например в Avidemux
"Резалок" много, но они все по одному файлу обрабатывают, а мне надо сразу пачкой.

Цитата Сообщение от x128 Посмотреть сообщение
то в -ss нужно попасть точно в ключевой кадр
плюс минус секунда роли не играет (титры вырезаю)

Цитата Сообщение от x128 Посмотреть сообщение
иначе есть шанс рассинхрона
рассинхрона звука и видео?

Цитата Сообщение от x128 Посмотреть сообщение
Можно указать -ss перед -i
Изначально так и было, но тогда обрезалось сильно не точно. Если указать меньше 7-ми секунд вообще не обрезалось.

Цитата Сообщение от x128 Посмотреть сообщение
с дополнительным параметром -copyts
Порезалось нормально, но после склейки начало нормальное, затем поехал звук, затем вообще видео зависло (перемотка не помогает).

Может склеиваю как-то криво?
0
239 / 217 / 46
Регистрация: 17.04.2010
Сообщений: 525
24.12.2019, 17:45 4
Цитата Сообщение от yagami2 Посмотреть сообщение
Может склеиваю как-то криво?
Всё может быть... Вот пример где из mp4 вырезаются 3 разных фрагмента по 30 сек и затем склеиваются в один файл.
Windows Batch file
1
2
3
4
ffmpeg -ss 00:00:30 -i input.mp4 -to 00:01:00 -c copy -copyts cut1.mp4
ffmpeg -ss 00:01:30 -i input.mp4 -to 00:02:00 -c copy -copyts cut2.mp4
ffmpeg -ss 00:02:30 -i input.mp4 -to 00:03:00 -c copy -copyts cut3.mp4
ffmpeg -f concat -i mylist.txt -c copy output.mp4
1
165 / 89 / 38
Регистрация: 29.06.2015
Сообщений: 1,088
25.12.2019, 12:57 5
Понадобилась сделать абсолютно тоже самое. И я столкнулся с такими же проблемами.
Но у меня был файл mkv.
При резке были глюки, при конвертации - потеря качества.

Скорее всего всё дело в настройке конвертации, кодеков и т.д. ffmpeg.
Нет, тут вот так просто
Цитата Сообщение от yagami2 Посмотреть сообщение
ffmpeg.exe -i inputFile.mp4 -ss 00:00:01 -to 23:59:59 -c:v copy -c:a copy outputFile.mp4
не выйдет. Либо придется долго курить маны, либо делать как я...

Что я сделал.
Использовал бесплатную программу Any Video Converter. С помощью неё можно перекодировать что угодно во что угодно, с указанием кучи параметров.
Получил качественный avi файл.

Далее резал его ffmpeg. Создал батник - cut.bat
Батники, ffmpeg и другие файлы положил в одну папку

Код батника
Код
rem Выбор текущей папки
%~d1
cd "%~p1"

rem Режем файл
echo Y | ffmpeg -i original_video.avi -vcodec ffv1 -g 1 -ss 00:00:00 -to 00:00:16 cut_1.avi
echo Y - автоответ да, на вопрос о перезаписи файла cut_1.avi
-vcodec ffv1 -g 1 - кодек с наименьшими потерями

Нарезав что надо, объединил все куски.
Перед объединением создал файл join_video_filelist.txt
в нем прописал имена кусков видео и их последовательность объединения
Код
file 'cut_1.avi'
file 'cut_2.avi'
file 'cut_3.avi'
Далее также создал батник

join.bat
Код
rem Выбор текущей папки
%~d1
cd "%~p1"


rem Объединяем все видео. Имена файлов и их последовательность берем из файла join_video_filelist.txt
echo Y | ffmpeg -f concat -i join_video_filelist.txt -c copy join_video.avi
concat -i join_video_filelist.txt - файл где содержатся имена видеофайлов для объединения

Всё вроде работает.
1
21 / 19 / 4
Регистрация: 15.01.2015
Сообщений: 202
29.12.2019, 11:31  [ТС] 6
Цитата Сообщение от useruser Посмотреть сообщение
Использовал бесплатную программу Any Video Converter.
Я подумал о том же. Только использовал FormatFoctory. А при запуске конвертации открыл диспетчер задач и увидел... четыре процесса ffmpeg .

Погуглив еще немного изменил команду для конвертации
Windows Batch file
1
ffmpeg.exe -i inputFile.mp4 -ss 00:00:01 -to 23:59:59 -qscale 0 -acodec ac3 -vcodec mpeg4 -vtag xvid outputFile.avi
т.е. поменял "-acodec" с "libmp3lame" на "ac3"

И все заработало.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.12.2019, 11:31
Помогаю со студенческими работами здесь

Разрезать экран
Сложно объяснить чего я хочу. Мне надо разрезать экран на 4 части, в каждой части будет запущено...

Разрезать на куски
Здравствуйте подскажите как разрезать на 100 равных кусков область что синего цвета. Резать нужно...

Разрезать видео
Здравствуйте. Хотела хорошего качества , скачала видео а они размером 7.2 гб , дисков таких нет . В...

Разрезать прямоугольник
помогите пожалуйста сделать программу на паскале. Пусть дан прямоугольник, длины сторон которого а...

разрезать картинку
суть вопроса: есть картинка (планировка квартир), каким образом можна разрезать её так чтобы каждая...

разрезать урл
имею: site.ru/about.php надо просто получить about.php $arr =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru