Posso acelerar o fluxo do VLC para tornar os arquivos mais rápidos?

1

Quero dividir um longo arquivo de vídeo de 50 minutos em duas partes de 25 minutos. Eu finalmente descobri como transmitir um arquivo de vídeo para outro arquivo através da linha de comando, graças a http://www.videolan.org/doc/streaming-howto/en/ch03.html e http: //www.videolan. org / doc / streaming-howto / pt-br / ch04.html documentos.

Aqui está o comando do terminal que eu usei para conseguir isso:

vlc original_video.mp4 --start-time 0 --stop-time 1500 --sout "#standard{access=file,mux=ts,dst=/home/max/Desktop/video_A.mp4}"

O único problema é que parece que o VLC está apenas sentado lá original_video.mp4entrando no canal video-A.mp4. Parei depois de 5 minutos e vi que video_A.mp4eram apenas 5 minutos.

Existe uma maneira de exeditar esse processo?

max
fonte
Você está aberto a outras opções além do VLC? Eu sei que o ffmpeg pode fazer o que você está tentando fazer (porque eu mesmo fiz isso) e deve ser sem perdas.
evilsoup
Claro que estou aberto a isso. Acabei de instalar o ffmpeg no Ubuntu, mas quando tento usá-lo no Terminal, ele diz para usar avconv. Você pode me dizer como dividir meu grande arquivo de vídeo?
Max

Respostas:

0

Eu usaria ffmpego muxer de segmento (role um pouco esse link para alguns exemplos). Basicamente:

ffmpeg -i input.mp4 -c copy -f segment -segment_times 1500 output%02d.mp4

Isso produzirá dois arquivos, 'output01.mp4' e 'output02.mp4'. Se você fosse usar output%03d.mp4, você iria em vez de obter 'output001.mp4' e 'output002.mp4'.

-segment_timesexige uma lista de pontos de divisão separados por vírgula, medidos em segundos. Como você deseja dividir apenas uma vez, em 25 minutos, use 1500 (= 25 * 60). Observe que -segment_time(sem os 's') é uma opção completamente separada - você usaria isso se quisesse dividir o arquivo a cada cinco segundos (por exemplo), sem colocar uma grande lista de todos os horários específicos.

Você pode achar que precisa usar -reset_timestamps 1para que os arquivos sejam reproduzidos corretamente:

ffmpeg -i input.mp4 -c copy -f segment -segment_times 1500 -reset_timestamps 1 output%02d.mp4

Há muito mais opções na página de documentação. Isso deve ser muito rápido e sem perdas (para que você obtenha vídeos idênticos sem artefatos de vídeo extras). No entanto, não será 100% preciso, pois o ffmpeg precisa ser dividido em um quadro-chave , o que não pode ser garantido sem a recodificação.

Se você precisar de uma divisão precisa, a documentação recomenda recodificar e usar as opções -force_key_framese -segment_time_deltapara garantir que haverá quadros I nos horários em que o muxer de segmento tentará dividir (consulte também os guias de codificação libx264 e AAC no ffmpeg wiki ):

ffmpeg -i input.mp4 -c:v libx264 -crf 22 -preset veryfast -c:a libfdk_aac -vbr 3 \
-force_key_frames 1500 -f segment -segment_times 1500 -segment_time_delta 0.05 output%02d.mp4

A versão do ffmpeg na maioria dos repositórios Linux será bastante antiga e, no caso do Debian e Ubuntu et al, a situação é ainda pior: eles não fornecem o ffmpeg, mas sim o fork, avconv, da equipe libav (consulte também a resposta de LordNeckbeard aqui ). O AVconv é uma ferramenta perfeitamente adequada por si só, mas não posso garantir que a sintaxe do ffmpeg funcione 100% do tempo, especialmente com coisas 'avançadas' como essa.

Eu recomendaria pegar uma compilação estática na página de downloads do ffmpeg ou compilar você mesmo . O principal benefício de compilar você mesmo é que você pode acessar libfdk_aac, o melhor codificador de áudio AAC que o ffmpeg pode usar - que não pode ser legalmente distribuído em um binário ffmpeg compilado, devido a conflitos de licenciamento (o fdk_aac usa uma licença copyleft personalizada, que é isn é bastante compatível com a GPL do ffmpeg).

evilsoup
fonte
Hmm obrigado, mas eu recebo um erro Unrecognized option 'segment_times'quando eu tento ffmpeg -i file.mp4 -c copy -f segment -segment_times 1500 output%02d.mp4e quando eu mudar para -segment_timeeu recebo este erroOutput file #0 does not contain any stream
no máximo