FFMPEG Erro de script de mesclagem

0

Então eu tenho um script quase funcional para o FFMPEG que mescla um arquivo .aif e um arquivo .mp4 com o mesmo nome em um único nome_de_arquivo_output.mp4, mas quando eu o executo recebo um erro estranho dizendo que um arquivo não é exsistente, mas o arquivo que ele está procurando tem duas extensões de arquivo. O script é executado na mesma pasta dos arquivos.

O script que é executado na pasta:

#!/bin/bash


cd "'dirname "$0"'"


for file in *.aif
do
filename=$(basename "$file")
# do something on "$file"
                ffmpeg -i "${filename}.aif" -i "${filename}.mp4" -map 0:0 -map 1:0 -acodec libfdk_aac -b:a 192k -vcodec copy -shortest "${filename}_output.mp4"
done

A saída que estou recebendo do log:

++ dirname replace_audio_aif2mp4.bash
+ cd .
+ for file in '*.aif'
++ basename audio.aif
+ filename=audio.aif
+ ffmpeg -i audio.aif.aif -i audio.aif.mp4 -map 0:0 -map 1:0 -acodec libfdk_aac -b:a 192k -vcodec copy -shortest audio.aif_output.mp4
ffmpeg version 3.1.2-1 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 6.1.1 (Debian 6.1.1-11) 20160802
  configuration: --prefix=/usr --extra-version=1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librubberband --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-chromaprint --enable-libopencv --enable-libx264
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 41.100 / 57. 41.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 47.100 /  6. 47.100
  libavresample   3.  0.  0 /  3.  0.  0
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
audio.aif.aif: No such file or directory
    
por tjallo 08.01.2017 / 00:11

1 resposta

2

Você tem uma extensão dupla porque começou com

for file in *.aif

seguido por

filename=$(basename "$file")

que lhe dará $filename com um sufixo .aif . Então você faz

ffmpeg -i "${filename}.aif" -i "${filename}.mp4"

Assim, você acaba com nomes de arquivos com os sufixos .aif.aif e .aif.mp4 .

Em vez disso, use basename da seguinte forma:

filename="$( basename "$file" .aif )"

Isso removerá o sufixo .aif original de $file (consulte o manual sobre basename ).

Observe que você precisa dar um duplo aspas em todas as expansões de variáveis para lidar com nomes de arquivos com espaços (é um hábito muito bom).

    
por 08.01.2017 / 00:20