videos unir tamaño resolucion reproducir reducir cortar con comprimir ffmpeg

tamaño - unir videos ffmpeg



FFmpeg: ¿Cómo dividir video de manera eficiente? (9)

¿El enfoque posterior ahorra tiempo de cálculo y memoria?

No existe una gran diferencia entre esos dos ejemplos que proporcionó. El primer ejemplo corta el video secuencialmente, en 2 pasos, mientras que el segundo ejemplo lo hace al mismo tiempo (usando hilos). No se notará una aceleración particular. Puede leer más sobre cómo crear múltiples salidas con FFmpeg

Además, lo que puedes usar (en FFmpeg reciente) es el ffmpeg.org/… que puede:

salidas de flujo a una cantidad de archivos separados de duración casi fija. El patrón del nombre de archivo de salida se puede configurar de manera similar a image2 .

Deseo dividir un video avi grande en dos videos consecutivos más pequeños. Estoy usando ffmpeg.

Una forma es ejecutar ffmpeg dos veces:

ffmpeg -i input.avi -vcodec copy -acodec copy -ss 00:00:00 -t 00:30:00 output1.avi ffmpeg -i input.avi -vcodec copy -acodec copy -ss 00:30:00 -t 00:30:00 output2.avi

Pero de acuerdo con la página de manual de ffmpeg, puedo hacer más de un archivo de salida desde un archivo de entrada usando solo una línea:

ffmpeg -i input.avi -vcodec copy -acodec copy -ss 00:00:00 -t 00:30:00 output1.avi / -vcodec copy -acodec copy -ss 00:30:00 -t 00:30:00 output2.avi

Mi pregunta es, ¿el enfoque posterior ahorra tiempo de cálculo y memoria?


Aquí hay un archivo simple de Windows bat para dividir el archivo entrante en 50 partes. Cada parte tiene una duración de 1 minuto. Perdón por ese guion tonto. Espero que sea mejor tener un script de Windows tonto en lugar de no tenerlo en absoluto. Tal vez ayude a alguien. (Basado en "bat file for loop" desde este sitio).

set var=0 @echo off :start set lz= if %var% EQU 50 goto end if %var% LEQ 9 set lz=0 echo part %lz%%var% ffmpeg -ss 00:%lz%%var%:00 -t 00:01:00 -i %1 -acodec copy -vcodec copy %2_%lz%%var%.mp4 set /a var+=1 goto start :end echo var has reached %var%. exit


Aquí hay un script útil, te ayuda a dividir automáticamente: Un script para dividir videos usando ffmpeg

#!/bin/bash   # Written by Alexis Bezverkhyy <[email protected]> in 2011 # This is free and unencumbered software released into the public domain. # For more information, please refer to <http://unlicense.org/>   function usage {         echo "Usage : ffsplit.sh input.file chunk-duration [output-filename-format]"         echo -e "/t - input file may be any kind of file reconginzed by ffmpeg"         echo -e "/t - chunk duration must be in seconds"         echo -e "/t - output filename format must be printf-like, for example myvideo-part-%04d.avi"         echo -e "/t - if no output filename format is given, it will be computed/  automatically from input filename" }   IN_FILE="$1" OUT_FILE_FORMAT="$3" typeset -i CHUNK_LEN CHUNK_LEN="$2"   DURATION_HMS=$(ffmpeg -i "$IN_FILE" 2>&1 | grep Duration | cut -f 4 -d '' '') DURATION_H=$(echo "$DURATION_HMS" | cut -d '':'' -f 1) DURATION_M=$(echo "$DURATION_HMS" | cut -d '':'' -f 2) DURATION_S=$(echo "$DURATION_HMS" | cut -d '':'' -f 3 | cut -d ''.'' -f 1) let "DURATION = ( DURATION_H * 60 + DURATION_M ) * 60 + DURATION_S"   if [ "$DURATION" = ''0'' ] ; then         echo "Invalid input video"         usage         exit 1 fi   if [ "$CHUNK_LEN" = "0" ] ; then         echo "Invalid chunk size"         usage         exit 2 fi   if [ -z "$OUT_FILE_FORMAT" ] ; then         FILE_EXT=$(echo "$IN_FILE" | sed ''s/^.*/./([a-zA-Z0-9]/+/)$//1/'')         FILE_NAME=$(echo "$IN_FILE" | sed ''s/^/(.*/)/.[a-zA-Z0-9]/+$//1/'')         OUT_FILE_FORMAT="${FILE_NAME}-%03d.${FILE_EXT}"         echo "Using default output file format : $OUT_FILE_FORMAT" fi   N=''1'' OFFSET=''0'' let ''N_FILES = DURATION / CHUNK_LEN + 1''   while [ "$OFFSET" -lt "$DURATION" ] ; do         OUT_FILE=$(printf "$OUT_FILE_FORMAT" "$N")         echo "writing $OUT_FILE ($N/$N_FILES)..."         ffmpeg -i "$IN_FILE" -vcodec copy -acodec copy -ss "$OFFSET" -t "$CHUNK_LEN" "$OUT_FILE"         let "N = N + 1"         let "OFFSET = OFFSET + CHUNK_LEN" done


El wiki de ffmpeg enlaza a esta página en referencia a "Cómo dividir video de manera eficiente". No estoy seguro de que esta página responda esa pregunta, así que hice lo que @AlcubierreDrive sugirió ...

echo "Two commands" time ffmpeg -v quiet -y -i input.ts -vcodec copy -acodec copy -ss 00:00:00 -t 00:30:00 -sn test1.mkv time ffmpeg -v quiet -y -i input.ts -vcodec copy -acodec copy -ss 00:30:00 -t 01:00:00 -sn test2.mkv echo "One command" time ffmpeg -v quiet -y -i input.ts -vcodec copy -acodec copy -ss 00:00:00 -t 00:30:00 / -sn test3.mkv -vcodec copy -acodec copy -ss 00:30:00 -t 01:00:00 -sn test4.mkv

Qué salidas ...

Two commands real 0m16.201s user 0m1.830s sys 0m1.301s real 0m43.621s user 0m4.943s sys 0m2.908s One command real 0m59.410s user 0m5.577s sys 0m3.939s

Probé un archivo SD y HD, después de algunas ejecuciones y un poco de matemáticas.

Two commands SD 0m53.94 #2 wins One command SD 0m49.63 Two commands SD 0m55.00 One command SD 0m52.26 #1 wins Two commands SD 0m58.60 #2 wins One command SD 0m58.61 Two commands SD 0m54.60 One command SD 0m50.51 #1 wins Two commands SD 0m53.94 One command SD 0m49.63 #1 wins Two commands SD 0m55.00 One command SD 0m52.26 #1 wins Two commands SD 0m58.71 One command SD 0m58.61 #1 wins Two commands SD 0m54.63 One command SD 0m50.51 #1 wins Two commands SD 1m6.67s #2 wins One command SD 1m20.18 Two commands SD 1m7.67 One command SD 1m6.72 #1 wins Two commands SD 1m4.92 One command SD 1m2.24 #1 wins Two commands SD 1m1.73 One command SD 0m59.72 #1 wins Two commands HD 4m23.20 One command HD 3m40.02 #1 wins Two commands SD 1m1.30 One command SD 0m59.59 #1 wins Two commands HD 3m47.89 One command HD 3m29.59 #1 wins Two commands SD 0m59.82 One command SD 0m59.41 #1 wins Two commands HD 3m51.18 One command HD 3m30.79 #1 wins

Archivo SD = secuencia de transporte DVB de 1.35GB
Archivo HD = 3.14GB secuencia de transporte DVB

Conclusión

El único comando es mejor si está manejando HD, está de acuerdo con los comentarios de los manuales sobre el uso de -ss después del archivo de entrada para hacer una ''búsqueda lenta''. Los archivos SD tienen una diferencia insignificante.

La versión de dos comandos debería ser más rápida al agregar otro -ss antes del archivo de entrada para la ''búsqueda rápida'' seguida de la búsqueda lenta más precisa.


En mi experiencia, no use ffmpeg para dividir / unir. MP4Box, es más rápido y ligero que ffmpeg. Por favor pruebalo. Por ejemplo, si desea dividir un archivo MP4 de 1400mb en dos partes de 700mb, puede usar el siguiente cmdl: MP4Box -splits 716800 input.mp4 por ejemplo, para concatenar dos archivos que puede usar:

MP4Box -cat file1.mp4 -cat file2.mp4 output.mp4


No lo probé, pero parece prometedor:

Segmentador de flujo básico

Obviamente, está dividiendo AVI en segmentos del mismo tamaño, lo que implica que estos fragmentos no pierden calidad o aumentan la memoria o deben volverse a calcular.

También utiliza la copia del códec, ¿eso significa que puede manejar flujos muy grandes? Debido a que este es mi problema, quiero descomponer mi avi para poder usar un filtro para eliminar la distorsión. Pero un avi completo funciona durante horas.


Resulta que el tamaño del archivo en el caso posterior sería proporcionalmente equivalente al segmento de tiempo.


Una forma simple es usar la opción de ajuste con la API pública basada en publ .

una vez que haya subido su video, simplemente configure el desplazamiento inicial y el desplazamiento final en la url (so_2, eo_2) de la siguiente manera:

https://media.publit.io/file/so_2,eo_2/tummy.mp4

esto creará instantáneamente nuevos videos comenzando desde el segundo segundo y 2 segundos de duración. puedes dividir videos de esta manera de todos modos.