【问题标题】:avconv - Passing list of image pathsavconv - 传递图像路径列表
【发布时间】:2012-12-16 04:50:10
【问题描述】:

我想编写一个脚本,该脚本将根据一组输入的图像文件路径生成延时视频。我知道您可以执行以下操作:

avconv -r 15 -i %04d.JPG -s hd480 -vcodec libx264 time-lapse.mp4

这将根据文件名模式 0000.JPG、0001.JPG 等在目录中查找文件。但是,我正在尝试确定是否有一种方法可以将其传递到文件名列表中按照我想要处理的顺序?我的理想情况是我可以执行一些数据库查询以按时间顺序检索图像文件路径列表,然后将它们传递给 avconv 命令并让它即时生成视频。我的图像有一个特定的文件夹结构,所以理想情况下,我不希望将必要的文件复制到临时目录中,以便能够正确命名它们然后处理它们。

【问题讨论】:

    标签: ubuntu libavcodec


    【解决方案1】:

    这也是我让它工作的唯一方法(image2pipe 技巧对我不起作用)。

    1. 创建一个文件夹,其中仅包含您想要在电影中使用的图像。

    2. 重命名文件(确保在出现错误之前备份您的图像)

      aa=0;for i in `ls`; do mv $i `printf "%04d" $aa`.png; aa=$(($aa+1));done
      
    3. 运行 avconv

      avconv -f image2 -i %04d.png -b 2500k -codec mpeg4 Heligyro.avi
      

    【讨论】:

      【解决方案2】:

      我最终通过管道 ls 创建链接,然后渲染链接。

      x=0; for i in $(ls -t *JPG); do counter=$(printf %05d $x); ln -s "$i" "$counter".jpg; x=$(($x+1)); done
      

      【讨论】:

        【解决方案3】:

        我根据来自我的安全摄像头的图像制作延时视频。相机按日期将 JPG 分类到文件夹中,然后按小时分类到子文件夹中。

        这会展平、重命名并将结果推送到 avconv。

        #!/bin/bash
        
        SOURCE_DIR="/home/ftp/camera/$1"
        TIMELAPSE_DIR="/home/ftp/camera/timelapse-batch"
        FRAME_DELAY=50
        
        ls -1 $SOURCE_DIR |
        
                while read DAY;
                do
                        echo "=================================================================";
                        echo "| >>> Processing $SOURCE_DIR/$DAY";
        
                        cd $SOURCE_DIR/$DAY;
        
                        echo "| >>> Flattening...";
        
                        find $SOURCE_DIR/$DAY -mindepth 2 -type f -exec mv -t $SOURCE_DIR/$DAY -i '{}' +
        
                        echo "| >>> Frame Count: $(ls -1 | wc -l)";
        
                        echo "| >>> Converting...";
        
                        echo "-----------------------------------------------------------------";
        
                        #gets list of images, renames them to a format that avconv expects, then runs avconv
                        ls |
                                grep jpg |
                                awk -v name=$1 'BEGIN{a=0}{printf "mv %s " name "%04d.JPG\n" , $0, a++}' |
                                bash && avconv -y -r $FRAME_DELAY -i $1%4d.JPG -r $FRAME_DELAY -vcodec libx264 -q:v 4  -vf scale=iw:ih $TIMELAPSE_DIR/$DAY"_"$1.mp4;
        
                        echo "-----------------------------------------------------------------";
                        echo "| >>> Done!";
                        echo "=================================================================";
                        echo -e "\n\n\n\n";
        
                done
        

        【讨论】:

          猜你喜欢
          • 2019-11-29
          • 1970-01-01
          • 2021-08-20
          • 1970-01-01
          • 2013-08-30
          • 2020-06-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多