Girar vídeos .mov durante a conversão para .mp4 usando o Panda (ou FFMPEG)

Você era tão experiente em tecnologia que filmou um vídeo verticalmente usando um dispositivo que não gera automaticamente os dados Exif adequados para girar o vídeo, e agora está preso em uma bagunça lateral? Ou você deseja corrigir esse problema para algum outro indivíduo com visão de futuro e consciência?

Bem , este snippet é para você.

Tenho trabalhado em um site que usa o Panda para upload e codificação de vídeo. Quando os usuários carregavam vídeos feitos por seu iPhone, eles rodavam bem (porque os vídeos filmados com produtos da Apple geralmente incluem os metadados apropriados que dizem ao jogador para girá-los para qualquer direção em que foram filmados), mas os vídeos enviados de dispositivos mais antigos / outros não t sempre oferecem a mesma funcionalidade. Nosso site estava usando JW Player, que não permite a rotação de vídeo dentro dele, então precisamos recodificar os vídeos para girá-los.

Depois de muita pesquisa, e basicamente sendo informado pelo Panda que precisaríamos usar um plug-in de codificação de terceiros para alternar os vídeos (sem ofensa para o Panda, eles têm um ótimo suporte ao cliente e eu recomendo seu serviço), um de nossos os principais desenvolvedores, Eric Willis, viram que o Panda permite que você tenha perfis de codificação. Esses perfis permitem que você especifique comandos ffmpeg, então usamos seu modelo h264 e o editamos um pouco para incluir uma rotação. Para uma rotação de 90 graus no sentido horário, peguei o código do seguinte post do SO:

http://stackoverflow.com/a/4235705/981177

Em seguida, expandi um pouco. Precisávamos fazer vídeos h264 / aac e convertê-los para .mp4.

Eu peguei a predefinição h264 do Panda :

Panda::Profile.create!({
:stack => "corepack-2",
:name => "h264.SD",
:width => 480,
:height => 320,
:h264_crf => 23,
:audio_bitrate => 128,
:extname => ".mp4",
:audio_sample_rate => 44100,
:keyframe_interval => 250,
:command => "ffmpeg -i $input_file$ -threads 0 -c:a libfaac -c:v libx264 -preset medium $video_quality$ $audio_bitrate$ $audio_sample_rate$ $keyframes$ $fps$ -y video_tmp_noqt.mp4nqt-faststart video_tmp_noqt.mp4 $output_file$"
})

E o modificou. Ao criar um perfil do Panda com o seguinte : parâmetro de comando , você pode girar os vídeos 90 graus no sentido horário:

"ffmpeg -i $input_file$ -threads 0 -vf transpose=1 -c:a libfaac -c:v libx264 -preset medium -crf 23 $audio_bitrate$ $audio_sample_rate$ $keyframes$ $fps$ -y video_tmp_noqt.mp4nqt-faststart video_tmp_noqt.mp4 $output_file$"

Para girar vídeos 90 graus no sentido anti-horário:

"ffmpeg -i $input_file$ -threads 0 -vf transpose=2 -c:a libfaac -c:v libx264 -preset medium -crf 23 $audio_bitrate$ $audio_sample_rate$ $keyframes$ $fps$ -y video_tmp_noqt.mp4nqt-faststart video_tmp_noqt.mp4 $output_file$"

Além disso, a transposição pode ser definida como 0, 1, 2, 3, dependendo do tipo de rotação que você deseja. As funções de cada um são descritas em detalhes aqui:

http://phayz.wordpress.com/2011/10/28/howto-rotate-a-video-using-ffmpeg/

Mais uma coisa – se você conseguir fazer funcionar, -crf 23 pode ser substituído por $ video_quality $ (que deve ser substituído por video_bitrate ou h264_crf dependendo se um desses parâmetros tem um valor ou não), mas O Panda não leria meu atributo h264_crf usando isso, então estava deixando $ video_quality $ em branco e quebraria o processo de codificação. Eu os notifiquei e eles estão investigando o problema.

Obrigado mais uma vez a rwilliams no StackOverflow, phayz e Panda pela predefinição, eu só queria expandi-los um pouco para mostrar às pessoas como fazer rotação de vídeo usando o Panda, se necessário.

Espero que isso ajude mais alguém!

-T