#video #ffmpeg #editing
Вопрос:
ИЗМЕНИТЬ/ОБНОВИТЬ: текущее решение состоит в том, чтобы запустить этот код для всех файлов ffmpeg -i up.mp4 -vf scale=1920:1080 -crf 22 reUP.mp4
с таким разрешением, но и для совпадения кадров в секунду.
Раньше я мог открывать CMD, вводить CD C:Users...
и затем ffmpeg -f concat -safe 0 -i xmylist.txt -crf 22 -c copy x1.mp4
Записи сделаны с одного и того же телефона, некоторые с передней камеры, некоторые с задней камеры. Я понимаю, что это может вызвать неодинаковые проблемы? но до недавнего времени это работало нормально.
Теперь вывод поврежден с помощью этого журнала: Отдельные видеофайлы воспроизводятся просто отлично, как и большая часть объединенных выходных данных, но некоторые разделы становятся такими и застывают:
Комментарии:
1. @llogan i.ibb.co/zSw7Fky/bilde.png Раньше он отлично сочетал переднюю и заднюю части :/ Я пытался обновить, но безрезультатно.
2. @llogan Отдельные файлы хорошо воспроизводятся на VLC и Potplayer, но оба медиаплеера не воспроизводят их при объединении.
Ответ №1:
Вы объединяете два видеофайла с разным разрешением.
front.mp4
это 1920×1080rear.mp4
это 1280х720
Воспроизвести проблему не слишком сложно (вы можете поместить код в .bat
файл).:
rem Create tmplist.txt
echo file 'front.mp4' > tmplist.txt
echo file 'rear.mp4' >> tmplist.txt
rem Create video with resolution 192x108 for example (instead of 1920x1080)
ffmpeg -y -f lavfi -i testsrc=size=192x108:rate=25 -f lavfi -i sine=frequency=300 -acodec aac -ar 22050 -vcodec libx265 -crf 17 -pix_fmt yuv420p -t 3 front.mp4
rem Create video with resolution 128x72 for example (instead of 1280x720)
ffmpeg -y -f lavfi -i testsrc=size=128x72:rate=25 -f lavfi -i sine=frequency=400 -acodec aac -ar 22050 -vcodec libx265 -crf 17 -pix_fmt yuv420p -t 3 rear.mp4
rem Concatenate:
ffmpeg -y -f concat -safe 0 -i tmplist.txt -c copy tmp.mp4
Решение: Преобразуйте все объединенные входные видео в одно и то же разрешение.
Примечание:
- По крайней мере, некоторые из видео должны быть перекодированы.
Я полагаю, что лучшее решение-преобразовать более низкое разрешение в более высокое, а затем применить concat
:
ffmpeg -y -i rear.mp4 -vf scale=192:108,setsar=1 -vcodec libx265 -crf 22 -pix_fmt yuv420p resized_rear.mp4
ffmpeg -y -f concat -safe 0 -i tmplist.txt -c copy tmp2.mp4
Менее рекомендуемое решение:
Существует одно решение, но оно перекодирует все видео (снижая качество).
Я не знаю, есть ли решение с использованием текстового файла.
Пример объединения двух файлов — размер второго видео изменяется:
ffmpeg -y -i front.mp4 -i rear.mp4 -filter_complex "[1:v]scale=192:108,setsar=1[v1];[0:v][0:a][v1][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" -vcodec libx265 -crf 22 -pix_fmt yuv420p tmp_resized.mp4
Комментарии:
1. Почему раньше я мог делать это без проблем? Имеет ли это какое-то отношение к тому, что я меняю тип файла туда и обратно (.mp4 —> .zzz —>> .mp4), Это повреждает заголовки или что-то в этом роде?
2. Я не знаю… Вы уверены, что раньше у вас было два видеофайла с разным разрешением? Возможно ли, что вы изменили настройки разрешения одной из камер?