hromadné nahradenie audia vo videu

Sekcia: Aplikácie & Desktop 22.11.2021 | 14:59
Avatar Branislav Poldauf Manjaro, Debian stable  Používateľ

ahojte

potreboval by som hromadne nahradiť pôvodné audio pre väčšie množstvo videií

videá su nazvané stýlom GX0123456.MP4

ku každému videu mám prislúchajúce audio (s rovnakým názvom len inou priponou) GX0123456.WAV

štandartne použijem toto:

ffmpeg -i GX123456.MP4 -i GX123456.WAV -c:v copy -a:v copy -map 0:v:0 -map 1:a:0 NGX123456.mkv

funguje fajn, ale teraz mám asi 300 súborov a ručne to proste robiť nebudem

vie pls niekto poradiť ako to spraviť hroamdne, tak aby mi spojilo vždy len 2 súbory s rovnakými názvami

BTW nemusí to byť cez ffmpeg, ak niekto pozná nejaké klikátko čo to zvláda, tiež budem rád, ide mi hlavne o to aby sa nezasahovalo do videa (jednak by renderovanei trvalo dlho a "znehodnotilo" by mi to tie súbory) a došlo k nahradeniu pôvodného audia za nové

viem to spraviť cez video editor, ale to je zbytočný render, ktorý znehodnotí pôvodné súbory, rovnako môžem vždy spolu s videom na osu nahodiť aj to audio ale to pracné a nepraktické, preto by som chcel aby to nové kvalitné audio nahradilo to integrované

Linux: the operating system with a CLUE... Command Line User Environment
    • RE: hromadné nahradenie audia vo videu 22.11.2021 | 19:18
      Avatar qw11 ubuntu mate 22.04 HP 17-ca1006nc  Používateľ

      Nefungovalo by nieco taketo? Priloha.

      • RE: hromadné nahradenie audia vo videu 22.11.2021 | 19:45
        Avatar qw11 ubuntu mate 22.04 HP 17-ca1006nc  Používateľ

        Tak ma napadlo ze aj video aj audio by malo mat celu cestu. Cize riadok 14 by mal byt takto

        ffmpeg -i $cesta$video -i $cesta$audio -c:v copy -a:v copy -map 0:v:0 -map 1:a:0 $cesta$vysledny_subor
        • RE: hromadné nahradenie audia vo videu 22.11.2021 | 20:21
          Avatar Branislav Poldauf Manjaro, Debian stable  Používateľ

          ďakujem krásne za ochotu,

          upravil som ci riadok cesta na cesta=/home/poldo/Video/test/

          kde som vložil testovacie videjka

          keď to pustím dostanem:

          find: paths must precede expression: `20211016_145757.mp4'
          find: possible unquoted pattern after predicate `-name'?

          Linux: the operating system with a CLUE... Command Line User Environment
          • RE: hromadné nahradenie audia vo videu 22.11.2021 | 20:25
            Avatar qw11 ubuntu mate 22.04 HP 17-ca1006nc  Používateľ

            Podla tohto https://askubuntu.com/questions/142207/find-unknown-predicate by malo stacit zmenit *.mp4 na "*.mp4".

            • RE: hromadné nahradenie audia vo videu 22.11.2021 | 20:34
              Avatar Branislav Poldauf Manjaro, Debian stable  Používateľ

              zmenil som to takto:

              #!/bin/bash

              cesta=/home/poldo/Video/test/

              find $cesta -name .mp4 | while read l
              do
              subor=$(find "$l" -printf "%f" | sed 's/.\{4\}$//')
              video=$(echo $subor.mp4)
              audio=$(echo $subor.wav)
              vysledny_subor=$(echo N$subor.mkv)

              #echo "cesta" $cesta "subor" $video "audio" $audio "vysledny subor" $cesta$vysledny_subor

              ffmpeg -i $cesta$video -i $cesta$audio -c:v copy -c:a copy -map 0:v:0 -map 1:a:0 $cesta$vysledny_subor

              done

               

              a keď to spustím nič sa nestane

              Linux: the operating system with a CLUE... Command Line User Environment
              • RE: hromadné nahradenie audia vo videu 22.11.2021 | 20:41
                Avatar Branislav Poldauf Manjaro, Debian stable  Používateľ

                somár som čo neviem čítať

                už vyzerá že to funguje

                neviem prečo som odstránil tú hviezdičku a ignoroval potrebu pirdania uvodzoviek, asi je už neskoro

                 

                Linux: the operating system with a CLUE... Command Line User Environment
              • RE: hromadné nahradenie audia vo videu 22.11.2021 | 20:47
                Avatar qw11 ubuntu mate 22.04 HP 17-ca1006nc  Používateľ

                Ja som to upravil na

                #!/bin/bash
                
                cesta=/home/t/Video/test/
                
                find $cesta -name "*.mp4" | while read l
                do
                subor=$(find "$l" -printf "%f" | sed 's/.\{4\}$//')
                video=$(echo $subor.mp4)
                audio=$(echo $subor.wav)
                vysledny_subor=$(echo N$subor.mkv)
                
                #echo "cesta" $cesta "subor" $cesta$video "audio" $cesta$audio "vysledny subor" $cesta$vysledny_subor
                
                ffmpeg -i $cesta$video -i $cesta$audio -c:v copy -c:a copy -map 0:v:0 -map 1:a:0 $cesta$vysledny_subor
                
                
                done

                a nieco tam bezi ale nemam pripravene subory. Inak spustaj to tak ze ten subor.sh pretiahni do terminalu. Pri tomto sa ti terminal nezatvori a uvidis chyby.

                • RE: hromadné nahradenie audia vo videu 22.11.2021 | 20:48
                  Avatar qw11 ubuntu mate 22.04 HP 17-ca1006nc  Používateľ

                  Nechal som tam omylom moju cestu.

                • RE: hromadné nahradenie audia vo videu 22.11.2021 | 21:04
                  Avatar Branislav Poldauf Manjaro, Debian stable  Používateľ

                  ešte som si musel upraviť mp4 na MP4 (ale to v pohode zvládam aj celkom tomu rozumiem) zato toto:

                  "%f" | sed 's/.\{4\}$//')

                  tak tomu nerozumiem ani náhodou :-D (nemusíš vysvetlovať)

                  spúšťam to priamo z termínál cez ./videozvuk.sh, žiadnu očividnú chybu nevyhodí, len zastane na poslednej konverzii

                  Linux: the operating system with a CLUE... Command Line User Environment
    • RE: hromadné nahradenie audia vo videu 22.11.2021 | 20:31
      Avatar Branislav Poldauf Manjaro, Debian stable  Používateľ

      ak to ešte niekto bude čítať tak len doplním že správny príkaz má byť

      ffmpeg -i GX123456.MP4 -i GX123456.WAV -c:v copy -c:a copy -map 0:v:0 -map 1:a:0 NGX123456.mkv

      zmenil som parameter a:v copy (ktorý je úplná blbosť) na c:a copy

      v tom scripte si to samozrejme opravím

      Linux: the operating system with a CLUE... Command Line User Environment
      • RE: hromadné nahradenie audia vo videu 22.11.2021 | 20:56
        Avatar Branislav Poldauf Manjaro, Debian stable  Používateľ

        po úprave script funguje s menším problémom:

        konvertuje len 3 alebo 4 súbory a zastane, ak zmazem zdrojove subory pokračuje na 2-3 daľšie súbory a zase zastane

        a chcel by som sa opýtať ako to zmeniť tak aby to fungovalo v adresari kde to spustím

        ďakujem krásne za ochotu

        Linux: the operating system with a CLUE... Command Line User Environment
        • RE: hromadné nahradenie audia vo videu 23.11.2021 | 00:38
          Avatar paldopice   Používateľ
          #!/bin/sh
          #
          
          set -e
          
          dir="$1"
          
          if [ "$dir" = "-h" ] || [ "$dir" = "--help" ]; then
              echo
              echo "  Usage: $0 [path]"
              echo
              echo "  If no path is given, the current directory is used."
              echo
              exit 0
          fi
          
          if [ -z "$dir" ]; then
              dir="."
          fi
          
          cd "$dir"
          
          for video_in in $(find . -type f -iname "*.mp4"); do
          
              base_name="$(echo "$video_in" | sed -E 's/\.[^.]+$//')"
              audio_in="${base_name}.WAV"
              video_out="${base_name}.MKV"
          
              echo " >>>>> Processing '$video_in'..."
              ffmpeg -i "$video_in" -i "$audio_in" -c:v copy -c:a copy -map 0:v:0 -map 1:a:0 "$video_out"
          done
          

          debug:

          shell$ sh -x ./script.sh
          
          • RE: hromadné nahradenie audia vo videu 23.11.2021 | 08:26
            Avatar Branislav Poldauf Manjaro, Debian stable  Používateľ

            ďakujem, otestujem večer

            Linux: the operating system with a CLUE... Command Line User Environment